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/pages | |
| parent | 8a55aa83bd4b64d1d989cb49b7d9c3fdc1cc6ea5 (diff) | |
refactor: use custom hook for breadcrumb items and schema
Diffstat (limited to 'src/pages')
| -rw-r--r-- | src/pages/404.tsx | 16 | ||||
| -rw-r--r-- | src/pages/article/[slug].tsx | 24 | ||||
| -rw-r--r-- | src/pages/blog/index.tsx | 16 | ||||
| -rw-r--r-- | src/pages/contact.tsx | 22 | ||||
| -rw-r--r-- | src/pages/cv.tsx | 22 | ||||
| -rw-r--r-- | src/pages/index.tsx | 9 | ||||
| -rw-r--r-- | src/pages/mentions-legales.tsx | 22 | ||||
| -rw-r--r-- | src/pages/projets/[slug].tsx | 27 | ||||
| -rw-r--r-- | src/pages/projets/index.tsx | 22 | ||||
| -rw-r--r-- | src/pages/recherche/index.tsx | 22 | ||||
| -rw-r--r-- | src/pages/sujet/[slug].tsx | 22 | ||||
| -rw-r--r-- | src/pages/thematique/[slug].tsx | 22 |
12 files changed, 88 insertions, 158 deletions
diff --git a/src/pages/404.tsx b/src/pages/404.tsx index 7459c80..4f6e22d 100644 --- a/src/pages/404.tsx +++ b/src/pages/404.tsx @@ -1,5 +1,4 @@ import Link from '@components/atoms/links/link'; -import { type BreadcrumbItem } from '@components/molecules/nav/breadcrumb'; import LinksListWidget from '@components/organisms/widgets/links-list-widget'; import PageLayout from '@components/templates/page/page-layout'; import { @@ -16,6 +15,7 @@ import { getLinksListItems, getPageLinkFromRawData, } from '@utils/helpers/pages'; +import useBreadcrumb from '@utils/hooks/use-breadcrumb'; import useSettings from '@utils/hooks/use-settings'; import { GetStaticProps, NextPage } from 'next'; import Head from 'next/head'; @@ -53,15 +53,10 @@ const Error404Page: NextPage<Error404PageProps> = ({ link: (chunks: ReactNode) => <Link href="/contact">{chunks}</Link>, } ); - const homeLabel = intl.formatMessage({ - defaultMessage: 'Home', - description: 'Breadcrumb: home label', - id: 'j5k9Fe', + const { items: breadcrumbItems, schema: breadcrumbSchema } = useBreadcrumb({ + title, + url: `/404`, }); - const breadcrumb: BreadcrumbItem[] = [ - { id: 'home', name: homeLabel, url: '/' }, - { id: 'error-404', name: title, url: '/404' }, - ]; const pageTitle = intl.formatMessage( { defaultMessage: 'Error 404: Page not found - {websiteName}', @@ -95,7 +90,8 @@ const Error404Page: NextPage<Error404PageProps> = ({ </Head> <PageLayout title={title} - breadcrumb={breadcrumb} + breadcrumb={breadcrumbItems} + breadcrumbSchema={breadcrumbSchema} widgets={[ <LinksListWidget key="thematics-list" diff --git a/src/pages/article/[slug].tsx b/src/pages/article/[slug].tsx index 6a47c16..5eeabd9 100644 --- a/src/pages/article/[slug].tsx +++ b/src/pages/article/[slug].tsx @@ -1,6 +1,5 @@ import ButtonLink from '@components/atoms/buttons/button-link'; import Link from '@components/atoms/links/link'; -import { type BreadcrumbItem } from '@components/molecules/nav/breadcrumb'; import Sharing from '@components/organisms/widgets/sharing'; import PageLayout, { type PageLayoutProps, @@ -12,13 +11,13 @@ import { import { getPostComments } from '@services/graphql/comments'; import { type Article, type Comment } from '@ts/types/app'; import { loadTranslation, type Messages } from '@utils/helpers/i18n'; +import useBreadcrumb from '@utils/hooks/use-breadcrumb'; import useSettings from '@utils/hooks/use-settings'; import { GetStaticPaths, GetStaticProps, NextPage } from 'next'; import Head from 'next/head'; import { useRouter } from 'next/router'; import Script from 'next/script'; import { ParsedUrlQuery } from 'querystring'; -import { useIntl } from 'react-intl'; import { Blog, BlogPosting, Graph, WebPage } from 'schema-dts'; import useSWR from 'swr'; @@ -37,22 +36,10 @@ const ArticlePage: NextPage<ArticlePageProps> = ({ comments, post }) => { const { data } = useSWR(() => id, getPostComments, { fallbackData: comments, }); - const intl = useIntl(); - const homeLabel = intl.formatMessage({ - defaultMessage: 'Home', - description: 'Breadcrumb: home label', - id: 'j5k9Fe', + const { items: breadcrumbItems, schema: breadcrumbSchema } = useBreadcrumb({ + title, + url: `/article/${slug}`, }); - const blogLabel = intl.formatMessage({ - defaultMessage: 'Blog', - description: 'Breadcrumb: blog label', - id: 'Es52wh', - }); - const breadcrumb: BreadcrumbItem[] = [ - { id: 'home', name: homeLabel, url: '/' }, - { id: 'blog', name: blogLabel, url: '/blog' }, - { id: 'article', name: title, url: `/article/${slug}` }, - ]; const headerMeta: PageLayoutProps['headerMeta'] = { author: author?.name, @@ -186,7 +173,8 @@ const ArticlePage: NextPage<ArticlePageProps> = ({ comments, post }) => { /> <PageLayout allowComments={true} - breadcrumb={breadcrumb} + breadcrumb={breadcrumbItems} + breadcrumbSchema={breadcrumbSchema} comments={data && getCommentsList(data)} footerMeta={footerMeta} headerMeta={headerMeta} diff --git a/src/pages/blog/index.tsx b/src/pages/blog/index.tsx index 38fabd5..a5ef045 100644 --- a/src/pages/blog/index.tsx +++ b/src/pages/blog/index.tsx @@ -1,5 +1,4 @@ import Notice from '@components/atoms/layout/notice'; -import { type BreadcrumbItem } from '@components/molecules/nav/breadcrumb'; import PostsList, { type Post } from '@components/organisms/layout/posts-list'; import LinksListWidget from '@components/organisms/widgets/links-list-widget'; import PageLayout from '@components/templates/page/page-layout'; @@ -26,6 +25,7 @@ import { getLinksListItems, getPageLinkFromRawData, } from '@utils/helpers/pages'; +import useBreadcrumb from '@utils/hooks/use-breadcrumb'; import usePagination from '@utils/hooks/use-pagination'; import useSettings from '@utils/hooks/use-settings'; import { GetStaticProps, NextPage } from 'next'; @@ -58,15 +58,10 @@ const BlogPage: NextPage<BlogPageProps> = ({ description: 'BlogPage: page title', id: '7TbbIk', }); - const homeLabel = intl.formatMessage({ - defaultMessage: 'Home', - description: 'Breadcrumb: home label', - id: 'j5k9Fe', + const { items: breadcrumbItems, schema: breadcrumbSchema } = useBreadcrumb({ + title, + url: '/blog', }); - const breadcrumb: BreadcrumbItem[] = [ - { id: 'home', name: homeLabel, url: '/' }, - { id: 'blog', name: title, url: '/blog' }, - ]; const { blog, website } = useSettings(); const { asPath } = useRouter(); @@ -234,7 +229,8 @@ const BlogPage: NextPage<BlogPageProps> = ({ /> <PageLayout title={title} - breadcrumb={breadcrumb} + breadcrumb={breadcrumbItems} + breadcrumbSchema={breadcrumbSchema} headerMeta={{ total: postsCount }} widgets={[ <LinksListWidget diff --git a/src/pages/contact.tsx b/src/pages/contact.tsx index fcfbe1d..617117b 100644 --- a/src/pages/contact.tsx +++ b/src/pages/contact.tsx @@ -1,7 +1,6 @@ -import Notice, { NoticeKind } from '@components/atoms/layout/notice'; -import { BreadcrumbItem } from '@components/molecules/nav/breadcrumb'; +import Notice, { type NoticeKind } from '@components/atoms/layout/notice'; import ContactForm, { - ContactFormProps, + type ContactFormProps, } from '@components/organisms/forms/contact-form'; import SocialMedia from '@components/organisms/widgets/social-media'; import PageLayout from '@components/templates/page/page-layout'; @@ -17,19 +16,15 @@ import Script from 'next/script'; import { useState } from 'react'; import { useIntl } from 'react-intl'; import { ContactPage as ContactPageSchema, Graph, WebPage } from 'schema-dts'; +import useBreadcrumb from '@utils/hooks/use-breadcrumb'; const ContactPage: NextPage = () => { const { dates, intro, seo, title } = meta; const intl = useIntl(); - const homeLabel = intl.formatMessage({ - defaultMessage: 'Home', - description: 'Breadcrumb: home label', - id: 'j5k9Fe', + const { items: breadcrumbItems, schema: breadcrumbSchema } = useBreadcrumb({ + title, + url: `/contact`, }); - const breadcrumb: BreadcrumbItem[] = [ - { id: 'home', name: homeLabel, url: '/' }, - { id: 'contact', name: title, url: '/contact' }, - ]; const socialMediaTitle = intl.formatMessage({ defaultMessage: 'Find me elsewhere', @@ -148,9 +143,10 @@ const ContactPage: NextPage = () => { dangerouslySetInnerHTML={{ __html: JSON.stringify(schemaJsonLd) }} /> <PageLayout - title="Contact" + breadcrumb={breadcrumbItems} + breadcrumbSchema={breadcrumbSchema} intro={intro} - breadcrumb={breadcrumb} + title="Contact" widgets={widgets} > <ContactForm diff --git a/src/pages/cv.tsx b/src/pages/cv.tsx index 0e4765e..b3dec10 100644 --- a/src/pages/cv.tsx +++ b/src/pages/cv.tsx @@ -1,5 +1,4 @@ import Link from '@components/atoms/links/link'; -import { type BreadcrumbItem } from '@components/molecules/nav/breadcrumb'; import ImageWidget from '@components/organisms/widgets/image-widget'; import SocialMedia from '@components/organisms/widgets/social-media'; import PageLayout, { @@ -8,6 +7,7 @@ import PageLayout, { import CVContent, { data, meta } from '@content/pages/cv.mdx'; import styles from '@styles/pages/cv.module.scss'; import { loadTranslation } from '@utils/helpers/i18n'; +import useBreadcrumb from '@utils/hooks/use-breadcrumb'; import useSettings from '@utils/hooks/use-settings'; import { GetStaticProps, NextPage } from 'next'; import Head from 'next/head'; @@ -24,15 +24,10 @@ const CVPage: NextPage = () => { const intl = useIntl(); const { file, image } = data; const { dates, intro, seo, title } = meta; - const homeLabel = intl.formatMessage({ - defaultMessage: 'Home', - description: 'Breadcrumb: home label', - id: 'j5k9Fe', + const { items: breadcrumbItems, schema: breadcrumbSchema } = useBreadcrumb({ + title, + url: `/cv`, }); - const breadcrumb: BreadcrumbItem[] = [ - { id: 'home', name: homeLabel, url: '/' }, - { id: 'cv', name: title, url: '/cv' }, - ]; const imageWidgetTitle = intl.formatMessage({ defaultMessage: 'Others formats', @@ -148,12 +143,13 @@ const CVPage: NextPage = () => { return ( <PageLayout - title={title} - intro={intro} + breadcrumb={breadcrumbItems} + breadcrumbSchema={breadcrumbSchema} headerMeta={headerMeta} - breadcrumb={breadcrumb} - withToC={true} + intro={intro} + title={title} widgets={widgets} + withToC={true} > <Head> <title>{`${seo.title} - ${website.name}`}</title> diff --git a/src/pages/index.tsx b/src/pages/index.tsx index bc9b572..1143a33 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -19,6 +19,7 @@ import { getArticlesCard } from '@services/graphql/articles'; import styles from '@styles/pages/home.module.scss'; import { ArticleCard } from '@ts/types/app'; import { loadTranslation, type Messages } from '@utils/helpers/i18n'; +import useBreadcrumb from '@utils/hooks/use-breadcrumb'; import useSettings from '@utils/hooks/use-settings'; import { NestedMDXComponents } from 'mdx/types'; import { GetStaticProps, NextPage } from 'next'; @@ -38,6 +39,10 @@ type HomeProps = { */ const HomePage: NextPage<HomeProps> = ({ recentPosts }) => { const intl = useIntl(); + const { schema: breadcrumbSchema } = useBreadcrumb({ + title: '', + url: `/`, + }); /** * Retrieve a list of coding links. @@ -322,7 +327,7 @@ const HomePage: NextPage<HomeProps> = ({ recentPosts }) => { }; return ( - <Layout isHome={true}> + <Layout breadcrumbSchema={breadcrumbSchema} isHome={true}> <Head> <title>{pageTitle}</title> <meta name="description" content={pageDescription} /> @@ -340,7 +345,7 @@ const HomePage: NextPage<HomeProps> = ({ recentPosts }) => { ); }; -export const getStaticProps: GetStaticProps = async ({ locale }) => { +export const getStaticProps: GetStaticProps<HomeProps> = async ({ locale }) => { const translation = await loadTranslation(locale); const recentPosts = await getArticlesCard({ first: 3 }); diff --git a/src/pages/mentions-legales.tsx b/src/pages/mentions-legales.tsx index 9235e69..41bc218 100644 --- a/src/pages/mentions-legales.tsx +++ b/src/pages/mentions-legales.tsx @@ -1,35 +1,28 @@ import Link from '@components/atoms/links/link'; import ResponsiveImage from '@components/molecules/images/responsive-image'; -import { type BreadcrumbItem } from '@components/molecules/nav/breadcrumb'; import PageLayout, { type PageLayoutProps, } from '@components/templates/page/page-layout'; import LegalNoticeContent, { meta } from '@content/pages/legal-notice.mdx'; import { loadTranslation } from '@utils/helpers/i18n'; +import useBreadcrumb from '@utils/hooks/use-breadcrumb'; import useSettings from '@utils/hooks/use-settings'; import { NestedMDXComponents } from 'mdx/types'; import { GetStaticProps, NextPage } from 'next'; import Head from 'next/head'; import { useRouter } from 'next/router'; import Script from 'next/script'; -import { useIntl } from 'react-intl'; import { Article, Graph, WebPage } from 'schema-dts'; /** * Legal Notice page. */ const LegalNoticePage: NextPage = () => { - const intl = useIntl(); const { dates, intro, seo, title } = meta; - const homeLabel = intl.formatMessage({ - defaultMessage: 'Home', - description: 'Breadcrumb: home label', - id: 'j5k9Fe', + const { items: breadcrumbItems, schema: breadcrumbSchema } = useBreadcrumb({ + title, + url: `/mentions-legales`, }); - const breadcrumb: BreadcrumbItem[] = [ - { id: 'home', name: homeLabel, url: '/' }, - { id: 'legal-notice', name: title, url: '/mentions-legales' }, - ]; const headerMeta: PageLayoutProps['headerMeta'] = { publication: { @@ -93,10 +86,11 @@ const LegalNoticePage: NextPage = () => { return ( <PageLayout - title={title} - intro={intro} + breadcrumb={breadcrumbItems} + breadcrumbSchema={breadcrumbSchema} headerMeta={headerMeta} - breadcrumb={breadcrumb} + intro={intro} + title={title} withToC={true} > <Head> diff --git a/src/pages/projets/[slug].tsx b/src/pages/projets/[slug].tsx index 711a5cd..1a90e0f 100644 --- a/src/pages/projets/[slug].tsx +++ b/src/pages/projets/[slug].tsx @@ -3,7 +3,6 @@ import SocialLink, { SocialWebsite } from '@components/atoms/links/social-link'; import Spinner from '@components/atoms/loaders/spinner'; import ResponsiveImage from '@components/molecules/images/responsive-image'; import Code from '@components/molecules/layout/code'; -import { BreadcrumbItem } from '@components/molecules/nav/breadcrumb'; import Gallery from '@components/organisms/images/gallery'; import Overview, { OverviewMeta } from '@components/organisms/layout/overview'; import Sharing from '@components/organisms/widgets/sharing'; @@ -14,6 +13,7 @@ import { ProjectPreview, Repos } from '@ts/types/app'; import { loadTranslation, Messages } from '@utils/helpers/i18n'; import { getProjectData, getProjectFilenames } from '@utils/helpers/projects'; import { capitalize } from '@utils/helpers/strings'; +import useBreadcrumb from '@utils/hooks/use-breadcrumb'; import useGithubApi, { RepoData } from '@utils/hooks/use-github-api'; import useSettings from '@utils/hooks/use-settings'; import { MDXComponents, NestedMDXComponents } from 'mdx/types'; @@ -37,21 +37,10 @@ const ProjectPage: NextPage<ProjectPageProps> = ({ project }) => { const { id, intro, meta, title } = project; const { cover, dates, license, repos, seo, technologies } = meta; const intl = useIntl(); - const homeLabel = intl.formatMessage({ - defaultMessage: 'Home', - description: 'Breadcrumb: home label', - id: 'j5k9Fe', + const { items: breadcrumbItems, schema: breadcrumbSchema } = useBreadcrumb({ + title, + url: `/projets/${id}`, }); - const projectsLabel = intl.formatMessage({ - defaultMessage: 'Projects', - description: 'Breadcrumb: projects label', - id: '28GZdv', - }); - const breadcrumb: BreadcrumbItem[] = [ - { id: 'home', name: homeLabel, url: '/' }, - { id: 'projects', name: projectsLabel, url: '/projets' }, - { id: 'project', name: title, url: `/projets/${id}` }, - ]; const ProjectContent: ComponentType<MDXComponents> = require(`../../content/projects/${id}.mdx`).default; @@ -192,7 +181,8 @@ const ProjectPage: NextPage<ProjectPageProps> = ({ project }) => { <PageLayout title={title} intro={intro} - breadcrumb={breadcrumb} + breadcrumb={breadcrumbItems} + breadcrumbSchema={breadcrumbSchema} headerMeta={headerMeta} withToC={true} widgets={[ @@ -217,7 +207,10 @@ const ProjectPage: NextPage<ProjectPageProps> = ({ project }) => { ); }; -export const getStaticProps: GetStaticProps = async ({ locale, params }) => { +export const getStaticProps: GetStaticProps<ProjectPageProps> = async ({ + locale, + params, +}) => { const translation = await loadTranslation(locale); const { slug } = params!; const project = await getProjectData(slug as string); diff --git a/src/pages/projets/index.tsx b/src/pages/projets/index.tsx index a6858c8..4a58269 100644 --- a/src/pages/projets/index.tsx +++ b/src/pages/projets/index.tsx @@ -1,5 +1,4 @@ import Link from '@components/atoms/links/link'; -import { BreadcrumbItem } from '@components/molecules/nav/breadcrumb'; import CardsList, { CardsListItem, } from '@components/organisms/layout/cards-list'; @@ -9,13 +8,13 @@ import styles from '@styles/pages/projects.module.scss'; import { ProjectCard } from '@ts/types/app'; import { loadTranslation, Messages } from '@utils/helpers/i18n'; import { getProjectsCard } from '@utils/helpers/projects'; +import useBreadcrumb from '@utils/hooks/use-breadcrumb'; import useSettings from '@utils/hooks/use-settings'; import { NestedMDXComponents } from 'mdx/types'; import { GetStaticProps, NextPage } from 'next'; import Head from 'next/head'; import { useRouter } from 'next/router'; import Script from 'next/script'; -import { useIntl } from 'react-intl'; import { Article, Graph, WebPage } from 'schema-dts'; type ProjectsPageProps = { @@ -27,17 +26,11 @@ type ProjectsPageProps = { * Projects page. */ const ProjectsPage: NextPage<ProjectsPageProps> = ({ projects }) => { - const intl = useIntl(); const { dates, seo, title } = meta; - const homeLabel = intl.formatMessage({ - defaultMessage: 'Home', - description: 'Breadcrumb: home label', - id: 'j5k9Fe', + const { items: breadcrumbItems, schema: breadcrumbSchema } = useBreadcrumb({ + title, + url: `/projets`, }); - const breadcrumb: BreadcrumbItem[] = [ - { id: 'home', name: homeLabel, url: '/' }, - { id: 'projects', name: title, url: '/projets' }, - ]; const items: CardsListItem[] = projects.map( ({ id, meta: projectMeta, slug, title: projectTitle }) => { @@ -120,7 +113,8 @@ const ProjectsPage: NextPage<ProjectsPageProps> = ({ projects }) => { <PageLayout title={title} intro={<PageContent components={components} />} - breadcrumb={breadcrumb} + breadcrumb={breadcrumbItems} + breadcrumbSchema={breadcrumbSchema} > <CardsList items={items} titleLevel={2} className={styles.list} /> </PageLayout> @@ -128,7 +122,9 @@ const ProjectsPage: NextPage<ProjectsPageProps> = ({ projects }) => { ); }; -export const getStaticProps: GetStaticProps = async ({ locale }) => { +export const getStaticProps: GetStaticProps<ProjectsPageProps> = async ({ + locale, +}) => { const projects = await getProjectsCard(); const translation = await loadTranslation(locale); diff --git a/src/pages/recherche/index.tsx b/src/pages/recherche/index.tsx index bf14861..0a7dc60 100644 --- a/src/pages/recherche/index.tsx +++ b/src/pages/recherche/index.tsx @@ -1,6 +1,5 @@ import Notice from '@components/atoms/layout/notice'; import Spinner from '@components/atoms/loaders/spinner'; -import { type BreadcrumbItem } from '@components/molecules/nav/breadcrumb'; import PostsList, { type Post } from '@components/organisms/layout/posts-list'; import LinksListWidget from '@components/organisms/widgets/links-list-widget'; import PageLayout from '@components/templates/page/page-layout'; @@ -26,6 +25,7 @@ import { getLinksListItems, getPageLinkFromRawData, } from '@utils/helpers/pages'; +import useBreadcrumb from '@utils/hooks/use-breadcrumb'; import useDataFromAPI from '@utils/hooks/use-data-from-api'; import usePagination from '@utils/hooks/use-pagination'; import useSettings from '@utils/hooks/use-settings'; @@ -65,21 +65,10 @@ const SearchPage: NextPage<SearchPageProps> = ({ description: 'SearchPage: SEO - Page title', id: 'WDwNDl', }); - const homeLabel = intl.formatMessage({ - defaultMessage: 'Home', - description: 'Breadcrumb: home label', - id: 'j5k9Fe', + const { items: breadcrumbItems, schema: breadcrumbSchema } = useBreadcrumb({ + title, + url: `/recherche`, }); - const blogLabel = intl.formatMessage({ - defaultMessage: 'Blog', - description: 'Breadcrumb: blog label', - id: 'Es52wh', - }); - const breadcrumb: BreadcrumbItem[] = [ - { id: 'home', name: homeLabel, url: '/' }, - { id: 'blog', name: blogLabel, url: '/blog' }, - { id: 'search', name: title, url: '/recherche' }, - ]; const { blog, website } = useSettings(); const pageTitle = `${title} - ${website.name}`; @@ -253,7 +242,8 @@ const SearchPage: NextPage<SearchPageProps> = ({ /> <PageLayout title={title} - breadcrumb={breadcrumb} + breadcrumb={breadcrumbItems} + breadcrumbSchema={breadcrumbSchema} headerMeta={{ total: postsCount }} widgets={[ <LinksListWidget diff --git a/src/pages/sujet/[slug].tsx b/src/pages/sujet/[slug].tsx index 22fb531..447d969 100644 --- a/src/pages/sujet/[slug].tsx +++ b/src/pages/sujet/[slug].tsx @@ -1,5 +1,4 @@ import Heading from '@components/atoms/headings/heading'; -import { type BreadcrumbItem } from '@components/molecules/nav/breadcrumb'; import PostsList, { type Post } from '@components/organisms/layout/posts-list'; import LinksListWidget from '@components/organisms/widgets/links-list-widget'; import PageLayout, { @@ -18,6 +17,7 @@ import { getPageLinkFromRawData, getPostMeta, } from '@utils/helpers/pages'; +import useBreadcrumb from '@utils/hooks/use-breadcrumb'; import useSettings from '@utils/hooks/use-settings'; import { GetStaticPaths, GetStaticProps, NextPage } from 'next'; import Head from 'next/head'; @@ -37,21 +37,10 @@ const TopicPage: NextPage<TopicPageProps> = ({ currentTopic, topics }) => { const { content, intro, meta, slug, title } = currentTopic; const { articles, dates, seo, thematics } = meta; const intl = useIntl(); - const homeLabel = intl.formatMessage({ - defaultMessage: 'Home', - description: 'Breadcrumb: home label', - id: 'j5k9Fe', + const { items: breadcrumbItems, schema: breadcrumbSchema } = useBreadcrumb({ + title, + url: `/sujet/${slug}`, }); - const blogLabel = intl.formatMessage({ - defaultMessage: 'Blog', - description: 'Breadcrumb: blog label', - id: 'Es52wh', - }); - const breadcrumb: BreadcrumbItem[] = [ - { id: 'home', name: homeLabel, url: '/' }, - { id: 'blog', name: blogLabel, url: '/blog' }, - { id: 'topic', name: title, url: `/sujet/${slug}` }, - ]; const headerMeta: PageLayoutProps['headerMeta'] = { publication: { date: dates.publication }, @@ -149,7 +138,8 @@ const TopicPage: NextPage<TopicPageProps> = ({ currentTopic, topics }) => { dangerouslySetInnerHTML={{ __html: JSON.stringify(schemaJsonLd) }} /> <PageLayout - breadcrumb={breadcrumb} + breadcrumb={breadcrumbItems} + breadcrumbSchema={breadcrumbSchema} title={title} intro={intro} headerMeta={headerMeta} diff --git a/src/pages/thematique/[slug].tsx b/src/pages/thematique/[slug].tsx index dd7e80d..13ef0da 100644 --- a/src/pages/thematique/[slug].tsx +++ b/src/pages/thematique/[slug].tsx @@ -1,5 +1,4 @@ import Heading from '@components/atoms/headings/heading'; -import { type BreadcrumbItem } from '@components/molecules/nav/breadcrumb'; import PostsList, { type Post } from '@components/organisms/layout/posts-list'; import LinksListWidget from '@components/organisms/widgets/links-list-widget'; import PageLayout, { @@ -18,6 +17,7 @@ import { getPageLinkFromRawData, getPostMeta, } from '@utils/helpers/pages'; +import useBreadcrumb from '@utils/hooks/use-breadcrumb'; import useSettings from '@utils/hooks/use-settings'; import { GetStaticPaths, GetStaticProps, NextPage } from 'next'; import Head from 'next/head'; @@ -40,21 +40,10 @@ const ThematicPage: NextPage<ThematicPageProps> = ({ const { content, intro, meta, slug, title } = currentThematic; const { articles, dates, seo, topics } = meta; const intl = useIntl(); - const homeLabel = intl.formatMessage({ - defaultMessage: 'Home', - description: 'Breadcrumb: home label', - id: 'j5k9Fe', + const { items: breadcrumbItems, schema: breadcrumbSchema } = useBreadcrumb({ + title, + url: `/thematique/${slug}`, }); - const blogLabel = intl.formatMessage({ - defaultMessage: 'Blog', - description: 'Breadcrumb: blog label', - id: 'Es52wh', - }); - const breadcrumb: BreadcrumbItem[] = [ - { id: 'home', name: homeLabel, url: '/' }, - { id: 'blog', name: blogLabel, url: '/blog' }, - { id: 'thematic', name: title, url: `/thematique/${slug}` }, - ]; const headerMeta: PageLayoutProps['headerMeta'] = { publication: { date: dates.publication }, @@ -152,7 +141,8 @@ const ThematicPage: NextPage<ThematicPageProps> = ({ dangerouslySetInnerHTML={{ __html: JSON.stringify(schemaJsonLd) }} /> <PageLayout - breadcrumb={breadcrumb} + breadcrumb={breadcrumbItems} + breadcrumbSchema={breadcrumbSchema} title={title} intro={intro} headerMeta={headerMeta} |
