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/projets | |
| parent | 8a55aa83bd4b64d1d989cb49b7d9c3fdc1cc6ea5 (diff) | |
refactor: use custom hook for breadcrumb items and schema
Diffstat (limited to 'src/pages/projets')
| -rw-r--r-- | src/pages/projets/[slug].tsx | 27 | ||||
| -rw-r--r-- | src/pages/projets/index.tsx | 22 |
2 files changed, 19 insertions, 30 deletions
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); |
