DataTableComponent.vue 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. <template>
  2. <v-col
  3. cols="12"
  4. sm="12"
  5. >
  6. <v-data-table
  7. :headers="headers"
  8. :items="entries"
  9. :options.sync="options"
  10. :server-items-length="totalEntries"
  11. :loading="loading"
  12. class="elevation-1"
  13. ></v-data-table>
  14. </v-col>
  15. </template>
  16. <script lang="ts">
  17. import {defineComponent, ref, useContext, useFetch} from '@nuxtjs/composition-api'
  18. import {Collection, Model, Repository} from "@vuex-orm/core";
  19. import personActivitiesData from '@/data/personActivitiesData'
  20. import {AnyJson} from "~/types/types";
  21. export default defineComponent({
  22. props: {
  23. repository:{
  24. type: Object as () => Repository,
  25. required: true
  26. },
  27. uri:{
  28. type: String,
  29. required: true
  30. },
  31. headers:{
  32. type: Array,
  33. required: true
  34. }
  35. },
  36. setup({repository, uri}) {
  37. const totalEntries = ref(0)
  38. const entries = ref([] as Collection<Model>)
  39. const loading = ref(true)
  40. const options = ref({})
  41. const {$http} = useContext()
  42. const {fetch, fetchState} = useFetch(async ()=>{
  43. const collection:AnyJson = await $http.$get(`https://local.new.api.opentalent.fr/api/${uri}`)
  44. repository.insert(collection['hydra:member']);
  45. entries.value = repository.all()
  46. totalEntries.value = parseInt(collection['hydra:totalItems'])
  47. loading.value = false
  48. })
  49. return {
  50. entries,
  51. totalEntries,
  52. loading,
  53. options
  54. }
  55. }
  56. })
  57. </script>