index.vue 2.1 KB

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