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
|
|
|
});
|