The Node.js® Website
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;