diff options
| author | Armand Philippot <git@armandphilippot.com> | 2022-05-16 12:46:38 +0200 |
|---|---|---|
| committer | Armand Philippot <git@armandphilippot.com> | 2022-05-16 12:46:38 +0200 |
| commit | 2155550fa36a3bc3c8f66e0926530123b4018cd4 (patch) | |
| tree | 1b7472d7ceeb9c95b2c6de6440b48b94405e155e /src/components/templates/page | |
| parent | 8a55aa83bd4b64d1d989cb49b7d9c3fdc1cc6ea5 (diff) | |
refactor: use custom hook for breadcrumb items and schema
Diffstat (limited to 'src/components/templates/page')
| -rw-r--r-- | src/components/templates/page/page-layout.stories.tsx | 12 | ||||
| -rw-r--r-- | src/components/templates/page/page-layout.test.tsx | 41 | ||||
| -rw-r--r-- | src/components/templates/page/page-layout.tsx | 11 |
3 files changed, 53 insertions, 11 deletions
diff --git a/src/components/templates/page/page-layout.stories.tsx b/src/components/templates/page/page-layout.stories.tsx index 8e518aa..002b951 100644 --- a/src/components/templates/page/page-layout.stories.tsx +++ b/src/components/templates/page/page-layout.stories.tsx @@ -16,6 +16,7 @@ export default { component: PageLayoutComponent, args: { allowComments: false, + breadcrumbSchema: [], }, argTypes: { allowComments: { @@ -40,6 +41,17 @@ export default { value: {}, }, }, + breadcrumbSchema: { + control: { + type: null, + }, + description: 'The JSON schema for breadcrumb items.', + type: { + name: 'object', + required: true, + value: {}, + }, + }, children: { control: { type: 'text', diff --git a/src/components/templates/page/page-layout.test.tsx b/src/components/templates/page/page-layout.test.tsx index b8fff6a..b3aea8b 100644 --- a/src/components/templates/page/page-layout.test.tsx +++ b/src/components/templates/page/page-layout.test.tsx @@ -1,4 +1,5 @@ import { render, screen } from '@test-utils'; +import { BreadcrumbList } from 'schema-dts'; import PageLayout from './page-layout'; const title = 'Incidunt ad earum'; @@ -6,13 +7,18 @@ const breadcrumb = [ { id: 'home', url: '#', name: 'Home' }, { id: 'page', url: '#', name: title }, ]; +const breadcrumbSchema: BreadcrumbList['itemListElement'][] = []; const children = 'Reprehenderit aut quis aperiam magnam quia id. Vero enim animi placeat quia. Laborum sit odio minima. Dolores et debitis eaque iste quidem. Omnis aliquam illum porro ea non. Quaerat totam iste quos ex facilis officia accusantium.'; describe('PageLayout', () => { it('renders the page title', () => { render( - <PageLayout breadcrumb={breadcrumb} title={title}> + <PageLayout + breadcrumb={breadcrumb} + breadcrumbSchema={breadcrumbSchema} + title={title} + > {children} </PageLayout> ); @@ -23,7 +29,11 @@ describe('PageLayout', () => { it('renders the page content', () => { render( - <PageLayout breadcrumb={breadcrumb} title={title}> + <PageLayout + breadcrumb={breadcrumb} + breadcrumbSchema={breadcrumbSchema} + title={title} + > {children} </PageLayout> ); @@ -32,7 +42,11 @@ describe('PageLayout', () => { it('renders the breadcrumb', () => { render( - <PageLayout breadcrumb={breadcrumb} title={title}> + <PageLayout + breadcrumb={breadcrumb} + breadcrumbSchema={breadcrumbSchema} + title={title} + > {children} </PageLayout> ); @@ -43,7 +57,12 @@ describe('PageLayout', () => { it('renders the table of contents', () => { render( - <PageLayout breadcrumb={breadcrumb} title={title} withToC={true}> + <PageLayout + breadcrumb={breadcrumb} + breadcrumbSchema={breadcrumbSchema} + title={title} + withToC={true} + > {children} </PageLayout> ); @@ -54,7 +73,12 @@ describe('PageLayout', () => { it('renders the comment form', () => { render( - <PageLayout breadcrumb={breadcrumb} title={title} allowComments={true}> + <PageLayout + breadcrumb={breadcrumb} + breadcrumbSchema={breadcrumbSchema} + title={title} + allowComments={true} + > {children} </PageLayout> ); @@ -79,7 +103,12 @@ describe('PageLayout', () => { }, ]; render( - <PageLayout breadcrumb={breadcrumb} title={title} comments={comments}> + <PageLayout + breadcrumb={breadcrumb} + breadcrumbSchema={breadcrumbSchema} + title={title} + comments={comments} + > {children} </PageLayout> ); diff --git a/src/components/templates/page/page-layout.tsx b/src/components/templates/page/page-layout.tsx index 4e4ff00..bc90f4c 100644 --- a/src/components/templates/page/page-layout.tsx +++ b/src/components/templates/page/page-layout.tsx @@ -25,7 +25,10 @@ import { useIntl } from 'react-intl'; import Layout, { type LayoutProps } from '../layout/layout'; import styles from './page-layout.module.scss'; -export type PageLayoutProps = { +export type PageLayoutProps = Pick< + LayoutProps, + 'breadcrumbSchema' | 'isHome' +> & { /** * True if the page accepts new comments. Default: false. */ @@ -59,10 +62,6 @@ export type PageLayoutProps = { */ intro?: PageHeaderProps['intro']; /** - * True if it is homepage. Default: false. - */ - isHome?: LayoutProps['isHome']; - /** * The page title. */ title: PageHeaderProps['title']; @@ -85,6 +84,7 @@ const PageLayout: FC<PageLayoutProps> = ({ children, allowComments = false, breadcrumb, + breadcrumbSchema, comments, footerMeta, headerMeta, @@ -170,6 +170,7 @@ const PageLayout: FC<PageLayoutProps> = ({ return ( <Layout + breadcrumbSchema={breadcrumbSchema} isHome={isHome} className={`${styles.article} ${styles[articleModifier]}`} > |
