import type { ThePageFragment, TheArticleFragment, TheEventFragment, TheLocationFragment, TheMembershipFragment, TheProjectFragment, TheResourceFragment } from "#graphql-operations"; import { ThePage, TheArticle, TheEvent, TheLocation, TheMembership, TheProject, TheResource } from "#components"; export async function useNodeByUri(uri: string) { const { data, error } = await useAsyncGraphqlQuery("nodeByUri", { uri }, { graphqlCaching: { client: true } }); if (error.value || data.value?.errors.length) { throw createError({ statusCode: 500, statusMessage: "Erreur serveur", message: "Une erreur est survenue." }); } const node = data.value?.data.nodeByUri; const breadcrumbs = node?.breadcrumbs?.map(({ label, to }) => ({ label, to: to || undefined })) || []; switch (node?.__typename) { case "Event": return { component: TheEvent, node: node as TheEventFragment, breadcrumbs }; case "Location": return { component: TheLocation, node: node as TheLocationFragment, breadcrumbs }; case "Membership": return { component: TheMembership, node: node as TheMembershipFragment, breadcrumbs }; case "Page": return { component: ThePage, node: node as ThePageFragment, breadcrumbs }; case "Post": return { component: TheArticle, node: node as TheArticleFragment, breadcrumbs }; case "Project": return { component: TheProject, node: node as TheProjectFragment, breadcrumbs }; case "Resource": return { component: TheResource, node: node as TheResourceFragment, breadcrumbs }; default: throw createError({ statusCode: 404, statusMessage: "Page non trouvée", message: "La page que vous cherchez n'existe pas." }); } }