index.vue 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. <template>
  2. <main>
  3. <div>
  4. <div v-if="pending">
  5. Pending...
  6. </div>
  7. <div v-else>
  8. <ul>
  9. <li v-for="file in files">
  10. <nuxt-link :to="'/poc/' + file.id" class="mr-3">{{ file.name }}</nuxt-link>
  11. </li>
  12. </ul>
  13. <div class="ma-3">{{ totalItems }} results</div>
  14. <!-- <div class="ma-3">-->
  15. <!-- <button @click="goToPreviousPage" class="mr-3">Previous page ({{ pagination.previous }})</button>-->
  16. <!-- <span class="mx-3">Page : {{ page }}</span>-->
  17. <!-- <button @click="goToNextPage">Next page ({{ pagination.next }})</button>-->
  18. <!-- <span class="mx-2"> (Last page : {{ pagination.last }})</span>-->
  19. <!-- </div>-->
  20. <div class="ma-3">
  21. <nuxt-link to="/poc/new">Create</nuxt-link>
  22. <p><nuxt-link to="/poc/1">Goto 1</nuxt-link></p>
  23. </div>
  24. </div>
  25. </div>
  26. </main>
  27. </template>
  28. <script setup lang="ts">
  29. import {useEntityManager} from "~/composables/data/useEntityManager";
  30. import {computed, ComputedRef, ref, Ref} from "@vue/reactivity";
  31. import ApiResource from "~/models/ApiResource";
  32. import {File} from "~/models/Core/File";
  33. import {Collection, Pagination} from "~/types/enum/data";
  34. import {useLazyAsyncData} from "#app";
  35. import {useEntityFetch} from "~/composables/data/useEntityFetch";
  36. const { em } = useEntityManager()
  37. const page: Ref<number> = ref(1)
  38. let { data: collection, pending, refresh } = useLazyAsyncData(
  39. 'files',
  40. () => em.fetchCollection(File, null, { page: page.value })
  41. )
  42. console.log(collection.value)
  43. const totalItems: ComputedRef<number | undefined> = computed(() => collection.value?.totalItems)
  44. const pagination: ComputedRef<Pagination | undefined> = computed(() => {
  45. return collection.value?.pagination
  46. })
  47. let files: ComputedRef<Array<ApiResource> | undefined> = computed(() => {
  48. return collection.value?.items
  49. })
  50. const goToPreviousPage = async function () {
  51. if (page.value > 1) {
  52. page.value--
  53. await refresh()
  54. }
  55. }
  56. const goToNextPage = async function () {
  57. page.value++
  58. await refresh()
  59. }
  60. </script>
  61. <style>
  62. a {
  63. color: blue;
  64. cursor: pointer;
  65. }
  66. a:hover {
  67. text-decoration: underline;
  68. }
  69. button {
  70. border: grey solid 1px;
  71. padding: 5px;
  72. margin: 5px;
  73. cursor: pointer;
  74. }
  75. button:hover {
  76. text-decoration: underline;
  77. }
  78. button:focus {
  79. background-color: lightgrey;
  80. }
  81. </style>