import { NestedMDXComponents } from 'mdx/types'; import { GetStaticProps } from 'next'; import Head from 'next/head'; import { useRouter } from 'next/router'; import Script from 'next/script'; import Link from '../../components/atoms/links/link'; import CardsList, { type CardsListItem, } from '../../components/organisms/layout/cards-list'; import { getLayout } from '../../components/templates/layout/layout'; import PageLayout from '../../components/templates/page/page-layout'; import PageContent, { meta } from '../../content/pages/projects.mdx'; import styles from '../../styles/pages/projects.module.scss'; import { type NextPageWithLayout, type ProjectCard } from '../../types/app'; import { loadTranslation, type Messages } from '../../utils/helpers/i18n'; import { getProjectsCard } from '../../utils/helpers/projects'; import { getSchemaJson, getSinglePageSchema, getWebPageSchema, } from '../../utils/helpers/schema-org'; import useBreadcrumb from '../../utils/hooks/use-breadcrumb'; import useSettings from '../../utils/hooks/use-settings'; type ProjectsPageProps = { projects: ProjectCard[]; translation?: Messages; }; /** * Projects page. */ const ProjectsPage: NextPageWithLayout = ({ projects }) => { const { dates, seo, title } = meta; const { items: breadcrumbItems, schema: breadcrumbSchema } = useBreadcrumb({ title, url: `/projets`, }); const items: CardsListItem[] = projects.map( ({ id, meta: projectMeta, slug, title: projectTitle }) => { const { cover, tagline, technologies } = projectMeta; return { cover, id: id as string, meta: { technologies: technologies }, tagline, title: projectTitle, url: `/projets/${slug}`, }; } ); const components: NestedMDXComponents = { Link, }; const { website } = useSettings(); const { asPath } = useRouter(); const webpageSchema = getWebPageSchema({ description: seo.description, locale: website.locales.default, slug: asPath, title: seo.title, updateDate: dates.update, }); const articleSchema = getSinglePageSchema({ dates, description: seo.description, id: 'projects', kind: 'page', locale: website.locales.default, slug: asPath, title, }); const schemaJsonLd = getSchemaJson([webpageSchema, articleSchema]); return ( <> {`${seo.title} - ${website.name}`}