feat: fetch categories in menu
This commit is contained in:
@@ -4,17 +4,32 @@ import '../styles/globals.css'
|
||||
import { getCollection, type CollectionEntry } from 'astro:content'
|
||||
import { Header } from '../sections/Header'
|
||||
import { Footer } from '../sections/Footer'
|
||||
import { Enum_Category_Group } from '../graphql/graphql'
|
||||
import { categoriesListQuery } from '../graphql-documents/categories.gql.generated'
|
||||
import { CategoryView } from '../views/CategoryView'
|
||||
import type { CategoriesListQuery } from '../graphql/graphql'
|
||||
import type { SiteConfigContact } from '../lib/cms/contact/types'
|
||||
import { siteConfigQuery } from '../graphql-documents/site-config.gql.generated'
|
||||
|
||||
export async function getStaticPaths() {
|
||||
const categories = await getCollection('categories')
|
||||
const siteResult = await siteConfigQuery.execute()
|
||||
const [siteResult, solutionCategoriesResult, serviceCategoriesResult] = await Promise.all([
|
||||
siteConfigQuery.execute(),
|
||||
categoriesListQuery.execute({ group: Enum_Category_Group.Solution }),
|
||||
categoriesListQuery.execute({ group: Enum_Category_Group.Service }),
|
||||
])
|
||||
if (siteResult.errors?.length) {
|
||||
throw new Error(siteResult.errors.map(e => e.message).join(', '))
|
||||
}
|
||||
if (solutionCategoriesResult.errors?.length) {
|
||||
throw new Error(solutionCategoriesResult.errors.map(e => e.message).join(', '))
|
||||
}
|
||||
if (serviceCategoriesResult.errors?.length) {
|
||||
throw new Error(serviceCategoriesResult.errors.map(e => e.message).join(', '))
|
||||
}
|
||||
const contacts = siteResult.data?.siteConfig?.contacts?.filter(c => c != null) ?? []
|
||||
const solutionCategories = solutionCategoriesResult.data?.categories?.filter(c => c != null) ?? []
|
||||
const serviceCategories = serviceCategoriesResult.data?.categories?.filter(c => c != null) ?? []
|
||||
|
||||
return categories.map((entry: CollectionEntry<'categories'>) => ({
|
||||
params: { slug: entry.id },
|
||||
@@ -23,6 +38,8 @@ export async function getStaticPaths() {
|
||||
description: entry.data.description,
|
||||
vendors: entry.data.vendors,
|
||||
contacts,
|
||||
solutionCategories,
|
||||
serviceCategories,
|
||||
},
|
||||
}))
|
||||
}
|
||||
@@ -36,15 +53,22 @@ interface Props {
|
||||
products?: string[]
|
||||
}[]
|
||||
contacts: SiteConfigContact[]
|
||||
solutionCategories: NonNullable<CategoriesListQuery['categories'][number]>[]
|
||||
serviceCategories: NonNullable<CategoriesListQuery['categories'][number]>[]
|
||||
}
|
||||
|
||||
const { title, description, vendors, contacts } = Astro.props as Props
|
||||
const { title, description, vendors, contacts, solutionCategories, serviceCategories } = Astro.props as Props
|
||||
---
|
||||
|
||||
<Layout>
|
||||
<div class="min-h-screen bg-white w-full overflow-x-hidden">
|
||||
<Header client:load contacts={contacts} />
|
||||
<Header
|
||||
client:load
|
||||
contacts={contacts}
|
||||
solutionCategories={solutionCategories}
|
||||
serviceCategories={serviceCategories}
|
||||
/>
|
||||
<CategoryView client:load title={title} description={description} vendors={vendors} />
|
||||
<Footer client:load contacts={contacts} />
|
||||
<Footer client:load contacts={contacts} solutionCategories={solutionCategories} />
|
||||
</div>
|
||||
</Layout>
|
||||
|
||||
Reference in New Issue
Block a user