useEntityFetch.ts 1.2 KB

12345678910111213141516171819202122232425262728
  1. import {useAsyncData, AsyncData} from "#app";
  2. import {useEntityManager} from "~/composables/data/useEntityManager";
  3. import ApiResource from "~/models/ApiResource";
  4. import {AssociativeArray, Collection} from "~/types/enum/data";
  5. interface useEntityFetchReturnType {
  6. fetch: (model: typeof ApiResource, id: number) => AsyncData<ApiResource, ApiResource | true>,
  7. fetchCollection: (model: typeof ApiResource, parent?: ApiResource | null, query?: AssociativeArray) => AsyncData<Collection, any>
  8. }
  9. export const useEntityFetch = (lazy: boolean = false): useEntityFetchReturnType => {
  10. const { em } = useEntityManager()
  11. const fetch = (model: typeof ApiResource, id: number) => useAsyncData(
  12. model.entity + '_' + id, // TODO: je me demande si on a besoin de cette clé? (https://v3.nuxtjs.org/api/composables/use-async-data#params)
  13. () => em.fetch(model, id, true),
  14. { lazy }
  15. )
  16. const fetchCollection = (model: typeof ApiResource, parent: ApiResource | null = null, query: AssociativeArray = []) => useAsyncData(
  17. model.entity + '_many',
  18. () => em.fetchCollection(model, parent, query),
  19. { lazy }
  20. )
  21. //@ts-ignore
  22. return { fetch, fetchCollection }
  23. }