SubList.vue 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. <template>
  2. <main>
  3. <v-skeleton-loader
  4. type="text"
  5. v-if="$fetchState.pending"
  6. ></v-skeleton-loader>
  7. <div v-else>
  8. <slot name="list.item" v-bind="{items}"></slot>
  9. </div>
  10. <slot>
  11. </slot>
  12. </main>
  13. </template>
  14. <script lang="ts">
  15. import {defineComponent, ref, useContext, useFetch, toRefs, onUnmounted} from '@nuxtjs/composition-api'
  16. import {Model, Query} from "@vuex-orm/core";
  17. import {queryHelper} from "~/services/store/query";
  18. import {QUERY_TYPE} from "~/types/enums";
  19. export default defineComponent({
  20. props: {
  21. rootModel:{
  22. type: Function,
  23. required: true
  24. },
  25. rootId:{
  26. type: Number,
  27. required: true
  28. },
  29. model:{
  30. type: Function,
  31. required: true
  32. },
  33. query:{
  34. type: Object as () => Query,
  35. required: true
  36. }
  37. },
  38. setup(props) {
  39. const {rootModel, rootId, model, query} = toRefs(props);
  40. const items = ref([] as Array<Model>)
  41. const {$dataProvider} = useContext()
  42. const {fetch, fetchState} = useFetch(async ()=>{
  43. await $dataProvider.invoke({
  44. type: QUERY_TYPE.MODEL,
  45. model: model.value,
  46. root_model: rootModel.value,
  47. root_id: rootId.value
  48. })
  49. items.value = queryHelper.getCollection(query.value);
  50. })
  51. // onUnmounted( useRepositoryHelper.cleanRepository(repository.value) )
  52. return {
  53. items
  54. }
  55. }
  56. })
  57. </script>