schlechtenburg/packages/example-site/middleware/page.ts

41 lines
881 B
TypeScript
Raw Normal View History

2022-12-29 02:47:45 +00:00
import { IPage } from "~~/composables/pages";
2022-12-28 18:46:51 +00:00
2022-12-29 02:47:45 +00:00
export default defineNuxtRouteMiddleware(async (to) => {
const { setCurrentPage } = useCurrentPage();
const { fetchPages } = usePages();
2022-12-28 18:46:51 +00:00
2022-12-29 02:47:45 +00:00
const pathParts = to.path.split('/').filter(p => p !== '');
pathParts.unshift('');
const filters = pathParts.reduce((total, part) => {
return {
id: { ne: null },
slug: { eq: part === '' ? null : part },
parent: total,
};
}, {});
const [{ data, error }] = await Promise.all([
useAsyncGql({
operation: 'pages',
variables: { filters },
}),
fetchPages(),
]);
2022-12-28 18:46:51 +00:00
if (error.value) {
console.error('Error getting pages!');
console.error(error.value);
return;
}
const newPage = (data.value?.pages?.data[0] as IPage) || null;
2022-12-29 02:47:45 +00:00
if (!newPage) {
setResponseStatus(404)
return;
2022-12-28 18:46:51 +00:00
}
2022-12-29 02:47:45 +00:00
setCurrentPage(newPage);
2022-12-28 18:46:51 +00:00
});