import Head from 'next/head'; import React from 'react'; import { CommonArticlePage, CommonArticlePageProps } from './CommonArticlePage'; import { CommonContentListPage } from './CommonContentListPage'; import { CommonFullListPage } from './CommonFullListPage'; import { CommonLogoListPage } from './CommonLogoListPage'; import { CommonPhotosRendererProps } from './CommonPhotosRenderer'; import { CommonTitleDescriptionListPage } from './CommonTitleDescriptionListPage'; import { CommonTitleListPage } from './CommonTitleListPage'; import { StaticTabPageProps } from '../props/StaticTabPageProps'; import { SiteUtils } from '../site/SiteUtils'; import { TabLayout } from '../dto/site/TabLayout'; /** * Common tab page renderer props */ export type CommonTabPageRendererProps = Omit & { /** * No description */ noDescription?: boolean; /** * Photos renderer */ photosRenderer?: (props: CommonPhotosRendererProps) => React.ReactNode; }; /** * Common page class names */ export const CommonPageClassNames = { articleClassName: '', articleTitleClassName: 'article-title', articleContentClassName: 'text-break text-justify article-content' }; /** * Common page title renderer props */ export type CommonPageTitleRendererProps = Omit< StaticTabPageProps, 'articles' > & { /** * Article title class name */ articleTitleClassName: string; /** * Is tab article? */ isTab?: boolean; /** * Title right part renderer */ titleRightRenderer?: ( props: CommonPageTitleRightRendererProps ) => React.ReactNode; }; /** * Common page title renderer * @param Props * @returns */ export function CommonPageTitleRenderer({ siteData, tab, article, articleTitleClassName, isTab, titleRightRenderer }: CommonPageTitleRendererProps) { // Ancestors const ancestors = tab.ancestorTabs?.reverse() ?? []; if (!isTab) ancestors.push(tab); return (
{titleRightRenderer == null ? undefined : titleRightRenderer({ siteData, tab, article, isTab })}
); } /** * Common page title right part renderer props */ export type CommonPageTitleRightRendererProps = Omit< StaticTabPageProps, 'articles' > & { /** * Is tab article? */ isTab?: boolean; }; /** * Common tab page props */ export type CommonTabPageProps = StaticTabPageProps & { /** * Artical class name */ articleClassName?: string; /** * Artical title class name */ articleTitleClassName?: string; /** * Article renderer */ articleRenderer?: (props: CommonArticlePageProps) => JSX.Element; /** * Conent list renderer */ contentListRenderer?: (props: CommonTabPageRendererProps) => JSX.Element; /** * Full list renderer */ fullListRenderer?: (props: CommonTabPageRendererProps) => JSX.Element; /** * Logo list renderer */ logoListRenderer?: (props: CommonTabPageRendererProps) => JSX.Element; /** * Photos renderer */ photosRenderer?: (props: CommonPhotosRendererProps) => React.ReactNode; /** * Title list renderer */ titleListRenderer?: (props: CommonTabPageRendererProps) => JSX.Element; /** * Title renderer */ titleRenderer?: (props: CommonPageTitleRendererProps) => JSX.Element; /** * Title description list renderer */ titleDescriptionListRenderer?: ( props: CommonTabPageRendererProps ) => JSX.Element; /** * Title right part renderer */ titleRightRenderer?: ( props: CommonPageTitleRightRendererProps ) => JSX.Element; }; /** * Common tab page * @param props Props * @returns Component */ export function CommonTabPage(props: CommonTabPageProps) { // Destruct const { article, articles, articleClassName = CommonPageClassNames.articleClassName, articleTitleClassName = CommonPageClassNames.articleTitleClassName, logoListRenderer, photosRenderer, titleRenderer, titleRightRenderer, titleDescriptionListRenderer, titleListRenderer, siteData, tab, articleRenderer, contentListRenderer, fullListRenderer } = props; if (article) { const ArticleLayout = articleRenderer ?? CommonArticlePage; return ( ); } const getLayout = () => { const layout = tab.layout; if (layout === TabLayout.None) { return ; } if (layout === TabLayout.ContentList) { const ConentListLayout = contentListRenderer ?? CommonContentListPage; return ( ); } if (layout === TabLayout.FullList) { const FullListLayout = fullListRenderer ?? CommonFullListPage; return ( ); } if (layout === TabLayout.LogoList) { const LogoListLayout = logoListRenderer ?? CommonLogoListPage; return ( ); } if (layout === TabLayout.TitleDescriptionList) { const TitleDescriptionLayout = titleDescriptionListRenderer ?? CommonTitleDescriptionListPage; return ( ); } if (layout === TabLayout.TitleList) { const TitleLayout = titleListRenderer ?? CommonTitleListPage; return ( ); } return
Please add one article at least for the tab.
; }; const description = tab.description; const TitleLayout = titleRenderer ?? CommonPageTitleRenderer; // Layout return ( {`${siteData.site.title} - ${tab.name}`} {description && ( )}
{getLayout()}
); }