Enhanced error handling in documentation and blog pages, to ensure smoother running and user experience. This also includes additional UI updates related to font selection, layout arrangement, and interactive elements on error pages, marketing pages, and general site navigation components. Moreover, a "contact us" feature has been added to error pages to help users seek assistance more conveniently.
57 lines
1.3 KiB
TypeScript
57 lines
1.3 KiB
TypeScript
import { Cms } from '@kit/cms';
|
|
|
|
import { createI18nServerInstance } from '~/lib/i18n/i18n.server';
|
|
|
|
// local imports
|
|
import { DocsNavigation } from './_components/docs-navigation';
|
|
import { getDocs } from './_lib/server/docs.loader';
|
|
|
|
async function DocsLayout({ children }: React.PropsWithChildren) {
|
|
const { resolvedLanguage } = await createI18nServerInstance();
|
|
const pages = await getDocs(resolvedLanguage);
|
|
|
|
return (
|
|
<div className={'container flex'}>
|
|
<DocsNavigation pages={buildDocumentationTree(pages)} />
|
|
|
|
{children}
|
|
</div>
|
|
);
|
|
}
|
|
|
|
export default DocsLayout;
|
|
|
|
// we want to place all the children under their parent
|
|
// based on the property parentId
|
|
function buildDocumentationTree(pages: Cms.ContentItem[]) {
|
|
const tree: Cms.ContentItem[] = [];
|
|
const map: Record<string, Cms.ContentItem> = {};
|
|
|
|
pages.forEach((page) => {
|
|
map[page.id] = page;
|
|
});
|
|
|
|
pages.forEach((page) => {
|
|
if (page.parentId) {
|
|
const parent = map[page.parentId];
|
|
|
|
if (!parent) {
|
|
return;
|
|
}
|
|
|
|
if (!parent.children) {
|
|
parent.children = [];
|
|
}
|
|
|
|
parent.children.push(page);
|
|
|
|
// sort children by order
|
|
parent.children.sort((a, b) => a.order - b.order);
|
|
} else {
|
|
tree.push(page);
|
|
}
|
|
});
|
|
|
|
return tree.sort((a, b) => a.order - b.order);
|
|
}
|