| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- <!--
- Permet de tester la méthode fetchCollection de nuxt
- et la réactivité de la collection retournée.
- Le filtre textuel doit s'appliquer à la liste de résultats quand on clique sur refresh.
- Si on ajoute un nouveau pays, il doit apparaitre dans la liste seulement s'il valide le filtre actif.
- Exemple :
- 1. A l'affichage, je dois avoir la liste des pays
- 2. Si je tape "fra" dans le filtre et que je valide, il ne doit rester que la France
- 3. Si je créé le pays "francie", il doit s'ajouter à la liste, trié si un OrderBy est actif
- 4. Si je créé le pays "mon super pays", il ne doit pas apparaitre.
- -->
- <template>
- <div class="pa-8">
- <h1>POC</h1>
- <div class="d-flex flex-row my-8">
- <v-text-field v-model="searchFilter" style="max-width: 200px" />
- <v-btn class="ma-4" @click="onRefreshClick">Refresh</v-btn>
- </div>
- <v-row>
- <v-col cols="3">
- <h3>From Entity Manager</h3>
- <div v-if="!pending && data !== null">
- <div>{{ data.totalItems || 0 }} results</div>
- <ul>
- <li v-for="country in data.items" :key="country.id">
- {{ country.name }}
- </li>
- </ul>
- </div>
- <span v-else>Loading...</span>
- </v-col>
- </v-row>
- <v-pagination
- v-model="page"
- :length="totalPages"
- :total-visible="7"
- @update:model-value="refresh"
- />
- <div class="d-flex flex-row">
- <v-text-field v-model="newVal" class="my-4" style="max-width: 200px" />
- <v-btn class="ma-4" @click="onAddClick">Add organization</v-btn>
- </div>
- </div>
- </template>
- <script setup lang="ts">
- import { useEntityFetch } from '~/composables/data/useEntityFetch'
- import Query from '~/services/data/Query'
- import SearchFilter from '~/services/data/Filters/SearchFilter'
- import { ORDER_BY_DIRECTION, SEARCH_STRATEGY } from '~/types/enum/data'
- import Country from '~/models/Core/Country'
- import OrderBy from '~/services/data/Filters/OrderBy'
- import PageFilter from '~/services/data/Filters/PageFilter'
- const { fetchCollection } = useEntityFetch()
- const query = new Query()
- const searchFilter = ref('')
- const newVal = ref('')
- const page = ref(1)
- const itemsPerPage = ref(10)
- query.add(new SearchFilter('name', searchFilter, SEARCH_STRATEGY.IPARTIAL))
- query.add(new OrderBy('name', ORDER_BY_DIRECTION.ASC))
- query.add(new PageFilter(page, itemsPerPage))
- const { data, pending, refresh } = fetchCollection(Country, null, query)
- const totalPages = computed(() =>
- data.value ? data.value?.pagination.last : 1,
- )
- console.log(data)
- // console.log(data.value!.items)
- let id = 100000000
- const onAddClick = () => {
- if (!newVal.value) {
- throw new Error('no val')
- }
- const country = new Country()
- country.id = id
- country.name = newVal.value
- const repo = useRepo(Country)
- repo.save(country)
- id += 1
- }
- const onRefreshClick = () => {
- page.value = 1
- refresh()
- }
- </script>
- <style scoped lang="scss">
- h1 {
- color: rgb(var(--v-theme-primary));
- }
- </style>
|