diff --git a/app/composables/directus/useHomepage.ts b/app/composables/directus/useHomepage.ts index 01da60c..af50bfe 100644 --- a/app/composables/directus/useHomepage.ts +++ b/app/composables/directus/useHomepage.ts @@ -1,4 +1,4 @@ -import { readSingleton } from '@directus/sdk'; +import GetHomepage from '@/graphql/homepage.graphql?raw'; export const useHomepage = () => { const { $directus } = useNuxtApp(); @@ -6,49 +6,8 @@ export const useHomepage = () => { const locale = getDirectusLocale(); return useAsyncData(`homepage-${locale}`, async () => { - return await $directus.request( - readSingleton('homepage', { - fields: [ - 'id', - { - carousel: ['id', 'directus_files_id'], - }, - { - recommend_products: [ - 'id', - { - translations: ['id', 'name', 'summary'], - }, - 'cover', - ], - }, - { - recommend_solutions: [ - 'id', - { - translations: ['id', 'title', 'summary'], - }, - 'cover', - ], - }, - ], - deep: { - recommend_products: { - translations: { - _filter: { - languages_code: { _eq: locale }, - }, - }, - }, - recommend_solutions: { - translations: { - _filter: { - languages_code: { _eq: locale }, - }, - }, - }, - }, - }) - ); + return await $directus.query<{ homepage: Homepage }>(GetHomepage, { + locale: locale, + }); }); }; diff --git a/app/graphql/homepage.graphql b/app/graphql/homepage.graphql new file mode 100644 index 0000000..b31229c --- /dev/null +++ b/app/graphql/homepage.graphql @@ -0,0 +1,33 @@ +query GetHomepage($locale: String!) { + homepage { + id + carousel { + id + directus_files_id { + id + } + } + recommend_products { + id + translations(filter: { languages_code: { code: { _eq: $locale } } }) { + id + name + summary + } + cover { + id + } + } + recommend_solutions { + id + translations(filter: { languages_code: { code: { _eq: $locale } } }) { + id + title + summary + } + cover { + id + } + } + } +} diff --git a/app/models/mappers/homepageMapper.ts b/app/models/mappers/homepageMapper.ts index cd95c0e..078890b 100644 --- a/app/models/mappers/homepageMapper.ts +++ b/app/models/mappers/homepageMapper.ts @@ -11,7 +11,8 @@ export function toHomepageView(raw: Homepage): HomepageView { const carousel = (raw.carousel ?? []) .filter(isObject) .map((item) => item.directus_files_id) - .filter((item) => typeof item === 'string'); + .filter(isObject) + .map((file) => file.id); const products = (raw.recommend_products ?? []) .filter(isObject) diff --git a/app/pages/index.vue b/app/pages/index.vue index f2eb413..d5d6720 100644 --- a/app/pages/index.vue +++ b/app/pages/index.vue @@ -16,7 +16,7 @@ const { data, pending, error } = await useHomepage(); const homepageData = computed(() => { - return toHomepageView(data.value); + return toHomepageView(data.value.homepage); }); const pageTilte = $t('page-title.homepage');