poc_fetch_collection.vue 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. <!--
  2. Permet de tester la méthode fetchCollection de nuxt
  3. et la réactivité de la collection retournée.
  4. Le filtre textuel doit s'appliquer à la liste de résultats quand on clique sur refresh.
  5. Si on ajoute un nouveau pays, il doit apparaitre dans la liste seulement s'il valide le filtre actif.
  6. Exemple :
  7. 1. A l'affichage, je dois avoir la liste des pays
  8. 2. Si je tape "fra" dans le filtre et que je valide, il ne doit rester que la France
  9. 3. Si je créé le pays "francie", il doit s'ajouter à la liste, trié si un OrderBy est actif
  10. 4. Si je créé le pays "mon super pays", il ne doit pas apparaitre.
  11. -->
  12. <template>
  13. <div class="pa-8">
  14. <h1>POC</h1>
  15. <div class="d-flex flex-row my-8">
  16. <v-text-field v-model="searchFilter" style="max-width: 200px" />
  17. <v-btn class="ma-4" @click="refresh">Refresh</v-btn>
  18. </div>
  19. <v-row>
  20. <v-col cols="3">
  21. <h3>From Entity Manager</h3>
  22. <div v-if="!pending && data !== null">
  23. <div>{{ data.value.totalItems || 0 }} results</div>
  24. <ul>
  25. <li v-for="country in data.value.items" :key="country.id">
  26. {{ country.name }}
  27. </li>
  28. </ul>
  29. </div>
  30. <span v-else>Loading...</span>
  31. </v-col>
  32. </v-row>
  33. <div class="d-flex flex-row">
  34. <v-text-field v-model="newVal" class="my-4" style="max-width: 200px" />
  35. <v-btn class="ma-4" @click="onAddClick">Add organization</v-btn>
  36. </div>
  37. </div>
  38. </template>
  39. <script setup lang="ts">
  40. import {useEntityFetch} from '~/composables/data/useEntityFetch'
  41. import Query from '~/services/data/Query'
  42. import SearchFilter from '~/services/data/Filters/SearchFilter'
  43. import {ORDER_BY_DIRECTION, SEARCH_STRATEGY} from '~/types/enum/data'
  44. import Country from '~/models/Core/Country'
  45. import OrderBy from "~/services/data/Filters/OrderBy"
  46. const { fetchCollection } = useEntityFetch()
  47. const query = new Query()
  48. const searchFilter = ref('fran')
  49. const newVal = ref('')
  50. query.add(new SearchFilter('name', searchFilter, SEARCH_STRATEGY.IPARTIAL))
  51. query.add(new OrderBy('name', ORDER_BY_DIRECTION.ASC))
  52. const { data, pending, refresh } = fetchCollection(Country, null, query)
  53. console.log(data)
  54. let id = 100000000
  55. const onAddClick = () => {
  56. if (!newVal.value) {
  57. throw new Error('no val')
  58. }
  59. const country = new Country()
  60. country.id = id
  61. country.name = newVal.value
  62. const repo = useRepo(Country)
  63. repo.save(country)
  64. id += 1
  65. }
  66. </script>
  67. <style scoped lang="scss">
  68. h1 {
  69. color: rgb(var(--v-theme-primary));
  70. }
  71. </style>