next-js-template/fullTemplate/aLayout.tsx

36 lines
1.8 KiB
TypeScript

'use server';
import { FC } from "react";
import { joinPageUrlFromLayersArray, retrieveLayersOfUrlFromParams } from "@/lib/menuGet";
import { dynamicPagesIndex } from "@/languages/custom";
import { dynamicPageMenuWithLayersGet, dynamicRetrieveMenuFlattenGet, langDynamicPagesGet, langGet } from "@/lib/langGet";
import { DashboardLayoutProps, ModeTypes } from "@/validations/mutual/dashboard/props";
import HeaderComponent from "@/components/custom/header/component";
import MenuComponent from "@/components/custom/menu/component";
import ContentComponent from "@/components/custom/content/component";
import FooterComponent from "@/components/custom/footer/component";
const DashboardLayout: FC<DashboardLayoutProps> = async ({ params, searchParams, lang }) => {
const layersItems = retrieveLayersOfUrlFromParams(params.page);
const activePageUrl = joinPageUrlFromLayersArray(layersItems.data);
const mode = (searchParams?.mode as ModeTypes) || 'shortList';
const menuItems = await dynamicPageMenuWithLayersGet(lang);
const translations = langGet(lang, langDynamicPagesGet(activePageUrl, dynamicPagesIndex));
const menuTranslationsFlatten = dynamicRetrieveMenuFlattenGet(menuItems);
const headerProps = { translations: translations.header, lang, activePageUrl }
const menuProps = { lang, activePageUrl, menuTranslationsFlatten, menuItems }
const contentProps = { translations: translations.content, lang, activePageUrl, mode, isMulti: true }
return (
<div className="flex flex-col min-w-screen">
<HeaderComponent {...headerProps} />
<MenuComponent {...menuProps} />
<ContentComponent {...contentProps} />
<FooterComponent translations={translations.footer} />
</div>
);
}
export { DashboardLayout };