From 70b4f633a6fbedb58c8b9134ac64ede854d489de Mon Sep 17 00:00:00 2001 From: Armand Philippot Date: Mon, 20 Nov 2023 12:27:46 +0100 Subject: refactor(components): replace PageLayout template with Page * split pages in smaller components (it is both easier to maintain and more readable, we avoid the use of fragments in pages directory) * extract breadcrumbs from article tag (the navigation is not related to the page contents) * remove useReadingTime hook * remove layout options except `isHome` --- src/components/templates/layout/layout.module.scss | 13 - src/components/templates/layout/layout.test.tsx | 14 +- src/components/templates/layout/layout.tsx | 25 +- src/components/templates/page/index.ts | 7 +- src/components/templates/page/page-body.test.tsx | 14 + src/components/templates/page/page-body.tsx | 23 + .../templates/page/page-comments.stories.tsx | 170 +++++++ .../templates/page/page-comments.test.tsx | 103 ++++ src/components/templates/page/page-comments.tsx | 178 +++++++ .../templates/page/page-footer.stories.tsx | 41 ++ src/components/templates/page/page-footer.test.tsx | 53 +++ src/components/templates/page/page-footer.tsx | 54 +++ .../templates/page/page-header.stories.tsx | 76 +++ src/components/templates/page/page-header.test.tsx | 149 ++++++ src/components/templates/page/page-header.tsx | 172 +++++++ .../templates/page/page-layout.module.scss | 95 ---- .../templates/page/page-layout.stories.tsx | 521 --------------------- src/components/templates/page/page-layout.test.tsx | 113 ----- src/components/templates/page/page-layout.tsx | 287 ------------ .../templates/page/page-sidebar.test.tsx | 14 + src/components/templates/page/page-sidebar.tsx | 20 + src/components/templates/page/page.module.scss | 212 +++++++++ src/components/templates/page/page.stories.tsx | 456 ++++++++++++++++++ src/components/templates/page/page.test.tsx | 49 ++ src/components/templates/page/page.tsx | 56 +++ 25 files changed, 1856 insertions(+), 1059 deletions(-) create mode 100644 src/components/templates/page/page-body.test.tsx create mode 100644 src/components/templates/page/page-body.tsx create mode 100644 src/components/templates/page/page-comments.stories.tsx create mode 100644 src/components/templates/page/page-comments.test.tsx create mode 100644 src/components/templates/page/page-comments.tsx create mode 100644 src/components/templates/page/page-footer.stories.tsx create mode 100644 src/components/templates/page/page-footer.test.tsx create mode 100644 src/components/templates/page/page-footer.tsx create mode 100644 src/components/templates/page/page-header.stories.tsx create mode 100644 src/components/templates/page/page-header.test.tsx create mode 100644 src/components/templates/page/page-header.tsx delete mode 100644 src/components/templates/page/page-layout.module.scss delete mode 100644 src/components/templates/page/page-layout.stories.tsx delete mode 100644 src/components/templates/page/page-layout.test.tsx delete mode 100644 src/components/templates/page/page-layout.tsx create mode 100644 src/components/templates/page/page-sidebar.test.tsx create mode 100644 src/components/templates/page/page-sidebar.tsx create mode 100644 src/components/templates/page/page.module.scss create mode 100644 src/components/templates/page/page.stories.tsx create mode 100644 src/components/templates/page/page.test.tsx create mode 100644 src/components/templates/page/page.tsx (limited to 'src/components/templates') diff --git a/src/components/templates/layout/layout.module.scss b/src/components/templates/layout/layout.module.scss index 03276bf..69c4ef0 100644 --- a/src/components/templates/layout/layout.module.scss +++ b/src/components/templates/layout/layout.module.scss @@ -90,19 +90,6 @@ flex: 1; } -.article { - &--grid { - @extend %grid; - - grid-auto-flow: column dense; - align-items: baseline; - } - - &--padding { - padding-bottom: var(--spacing-lg); - } -} - .footer { display: flex; flex-flow: column wrap; diff --git a/src/components/templates/layout/layout.test.tsx b/src/components/templates/layout/layout.test.tsx index 6a257f0..d3abe1d 100644 --- a/src/components/templates/layout/layout.test.tsx +++ b/src/components/templates/layout/layout.test.tsx @@ -1,5 +1,5 @@ import { describe, expect, it } from '@jest/globals'; -import { render, screen } from '../../../../tests/utils'; +import { render, screen as rtlScreen } from '../../../../tests/utils'; import { Layout } from './layout'; const body = @@ -8,28 +8,28 @@ const body = describe('Layout', () => { it('renders the website header', () => { render({body}); - expect(screen.getByRole('banner')).toBeInTheDocument(); + expect(rtlScreen.getByRole('banner')).toBeInTheDocument(); }); it('renders the website main content', () => { render({body}); - expect(screen.getByRole('main')).toBeInTheDocument(); + expect(rtlScreen.getByRole('main')).toBeInTheDocument(); }); it('renders the website footer', () => { render({body}); - expect(screen.getByRole('contentinfo')).toBeInTheDocument(); + expect(rtlScreen.getByRole('contentinfo')).toBeInTheDocument(); }); it('renders a skip to content link', () => { render({body}); expect( - screen.getByRole('link', { name: 'Skip to content' }) + rtlScreen.getByRole('link', { name: 'Skip to content' }) ).toBeInTheDocument(); }); - it('renders an article', () => { + it('renders its body', () => { render({body}); - expect(screen.getByRole('article')).toHaveTextContent(body); + expect(rtlScreen.getByText(body)).toBeInTheDocument(); }); }); diff --git a/src/components/templates/layout/layout.tsx b/src/components/templates/layout/layout.tsx index 055b1a1..953b0db 100644 --- a/src/components/templates/layout/layout.tsx +++ b/src/components/templates/layout/layout.tsx @@ -65,14 +65,6 @@ export type LayoutProps = { * @default false */ isHome?: boolean; - /** - * Determine if article has a comments section. - */ - withExtraPadding?: boolean; - /** - * Determine if article should use grid. Default: false. - */ - useGrid?: boolean; }; /** @@ -80,17 +72,10 @@ export type LayoutProps = { * * Render the base layout used by all pages. */ -export const Layout: FC = ({ - children, - withExtraPadding = false, - isHome, - useGrid = false, -}) => { +export const Layout: FC = ({ children, isHome }) => { const router = useRouter(); const intl = useIntl(); const { baseline, copyright, locales, name, url } = CONFIG; - const articleGridClass = useGrid ? 'article--grid' : ''; - const articleCommentsClass = withExtraPadding ? 'article--padding' : ''; const skipToContent = intl.formatMessage({ defaultMessage: 'Skip to content', @@ -455,11 +440,7 @@ export const Layout: FC = ({
-
- {children} -
+ {children}