import {useAsyncData, AsyncData} from "#app"; import {useEntityManager} from "~/composables/data/useEntityManager"; import ApiResource from "~/models/ApiResource"; import {AssociativeArray, Collection} from "~/types/enum/data"; interface useEntityFetchReturnType { fetch: (model: typeof ApiResource, id: number) => AsyncData, fetchCollection: (model: typeof ApiResource, parent?: ApiResource | null, query?: AssociativeArray) => AsyncData } export const useEntityFetch = (lazy: boolean = false): useEntityFetchReturnType => { const { em } = useEntityManager() const fetch = (model: typeof ApiResource, id: number) => useAsyncData( model.entity + '_' + id, // TODO: je me demande si on a besoin de cette clé? (https://v3.nuxtjs.org/api/composables/use-async-data#params) () => em.fetch(model, id, true), { lazy } ) const fetchCollection = (model: typeof ApiResource, parent: ApiResource | null = null, query: AssociativeArray = []) => useAsyncData( model.entity + '_many', () => em.fetchCollection(model, parent, query), { lazy } ) //@ts-ignore return { fetch, fetchCollection } }