index.vue 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. <template>
  2. <main>
  3. <ul>
  4. <li v-for="file in files">
  5. <nuxt-link :to="'/poc/' + file.id" class="mr-3">{{ file.name }}</nuxt-link>
  6. </li>
  7. </ul>
  8. <div class="ma-3">{{ totalItems }} results</div>
  9. <div class="ma-3">
  10. <button @click="goToPreviousPage" class="mr-3">Previous page ({{ previousPage }})</button>
  11. <span class="mx-3">Page : {{ page }}</span>
  12. <button @click="goToNextPage">Next page ({{ nextPage }})</button>
  13. <span class="mx-2"> (Last page : {{ lastPage }})</span>
  14. </div>
  15. <div class="ma-3">
  16. <nuxt-link to="/poc/new">Create</nuxt-link>
  17. </div>
  18. </main>
  19. </template>
  20. <script setup lang="ts">
  21. import {useEntityManager} from "~/composables/data/useEntityManager";
  22. import {Ref} from "@vue/reactivity";
  23. import ApiResource from "~/models/ApiResource";
  24. import {File} from "~/models/Core/File";
  25. const id: Ref<number> = ref(726900)
  26. const em = useEntityManager()
  27. let files: Array<ApiResource> = reactive([])
  28. const page: Ref<number> = ref(1)
  29. const totalItems: Ref<number> = ref(0)
  30. const firstPage: Ref<number> = ref(1)
  31. const lastPage: Ref<number> = ref(1)
  32. const previousPage: Ref<number | null> = ref(null)
  33. const nextPage: Ref<number | null> = ref(null)
  34. const fetchAll = async function() {
  35. const collection = await em.fetchAll(File, page.value)
  36. // On met à jour l'array sans la remplacer pour ne pas perdre la réactivité
  37. em.reactiveUpdate(files, collection.items)
  38. totalItems.value = collection.totalItems || 0
  39. firstPage.value = collection.firstPage || 1
  40. lastPage.value = collection.lastPage || 1
  41. previousPage.value = collection.previousPage || null
  42. nextPage.value = collection.nextPage || null
  43. }
  44. await fetchAll()
  45. const goToPreviousPage = async function () {
  46. if (page.value > 1) {
  47. page.value--
  48. await fetchAll()
  49. }
  50. }
  51. const goToNextPage = async function () {
  52. page.value++
  53. await fetchAll()
  54. }
  55. </script>
  56. <style>
  57. a {
  58. color: blue;
  59. cursor: pointer;
  60. }
  61. a:hover {
  62. text-decoration: underline;
  63. }
  64. button {
  65. border: grey solid 1px;
  66. padding: 5px;
  67. margin: 5px;
  68. cursor: pointer;
  69. }
  70. button:hover {
  71. text-decoration: underline;
  72. }
  73. button:focus {
  74. background-color: lightgrey;
  75. }
  76. </style>