The Node.js® Website
at main 989 B view raw
1import type { FC, PropsWithChildren } from 'react'; 2 3import AboutLayout from '@/layouts/About'; 4import BlogLayout from '@/layouts/Blog'; 5import DefaultLayout from '@/layouts/Default'; 6import DownloadLayout from '@/layouts/Download'; 7import HomeLayout from '@/layouts/Home'; 8import LearnLayout from '@/layouts/Learn'; 9import PostLayout from '@/layouts/Post'; 10import SearchLayout from '@/layouts/Search'; 11import type { Layouts } from '@/types'; 12 13const layouts = { 14 about: AboutLayout, 15 home: HomeLayout, 16 learn: LearnLayout, 17 page: DefaultLayout, 18 'blog-post': PostLayout, 19 'blog-category': BlogLayout, 20 search: SearchLayout, 21 download: DownloadLayout, 22} satisfies Record<Layouts, FC>; 23 24type WithLayoutProps<L = Layouts> = PropsWithChildren<{ layout: L }>; 25 26const WithLayout: FC<WithLayoutProps<Layouts>> = ({ layout, children }) => { 27 const LayoutComponent = layouts[layout] ?? DefaultLayout; 28 29 return <LayoutComponent>{children}</LayoutComponent>; 30}; 31 32export default WithLayout;