import type { Language } from '../../runtime'; import { AsyncData } from '../../runtime'; import type { IModelCard, PaginatedResponse } from '../../types'; import { useRoute } from 'vue-router'; export const useFetchModelsByPhrases = async ( apiMethod: (...args: any[]) => Promise> ) => { const route = useRoute(); const mobile = !!useState('isMobile').value; const perPage = mobile ? 12 : 48; const lang = useLang() as Language; const slug = useSlug(); const key = AsyncData.ModelsByPhrases; const stateKey = computed(() => `data-${key}-${slug.value}-${JSON.stringify(route.query)}-${lang}`); const { data, status, error } = await useAsyncData>( stateKey.value, () => useApiFetcher>( stateKey.value, apiMethod, { page: Number(route.query['page']) || 1, 'per-page': perPage, }, lang, slug.value, )(), { watch: [ () => { if (route.query) { const currentQuery = route.query; return JSON.stringify(currentQuery); } }, ], } ); return { data, status, error }; };