Files
cultureat-bak/wp-content/themes/ccat/app/composables/useNodeByUri.ts
Pascal Martineau 204102e688
All checks were successful
Deploy WordPress and Nuxt / deploy (push) Successful in 57s
fix: useNodeByUri multiple errors
2025-09-24 14:23:19 -04:00

36 lines
2.0 KiB
TypeScript

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) {
throw createError({ statusCode: 500, statusMessage: "Erreur interne", message: error.value.message });
}
if (!data.value) {
throw createError({ statusCode: 500, statusMessage: "Erreur interne", message: "La page n'a retourné aucunes données." });
}
if (data.value.errors.length) {
throw createError({ statusCode: 500, statusMessage: "Erreur interne", message: data.value.errors.map((error) => error.message).join("\n") });
}
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." });
}
}