import type { GetStaticProps } from 'next'; import Head from 'next/head'; import NextImage from 'next/image'; import { useIntl } from 'react-intl'; import { Card, CardCover, CardBody, CardFooter, CardHeader, CardTitle, getLayout, Grid, MetaItem, Page, PageHeader, PageBody, CardMeta, GridItem, } from '../../components'; import { mdxComponents } from '../../components/mdx'; import PageContent, { meta } from '../../content/pages/projects.mdx'; import styles from '../../styles/pages/projects.module.scss'; import type { NextPageWithLayout, ProjectPreview } from '../../types'; import { CONFIG } from '../../utils/config'; import { ROUTES } from '../../utils/constants'; import { getSchemaFrom, getWebPageGraph } from '../../utils/helpers'; import { getAllProjects, loadTranslation, type Messages, } from '../../utils/helpers/server'; import { useBreadcrumbs } from '../../utils/hooks'; type ProjectsPageProps = { data: { projects: ProjectPreview[]; }; translation?: Messages; }; /** * Projects page. */ const ProjectsPage: NextPageWithLayout = ({ data }) => { const { dates, seo, title } = meta; const { items: breadcrumbItems, schema: breadcrumbSchema } = useBreadcrumbs(title); const intl = useIntl(); const jsonLd = getSchemaFrom([ getWebPageGraph({ breadcrumb: breadcrumbSchema, copyrightYear: new Date(dates.publication).getFullYear(), dates, description: seo.description, slug: ROUTES.PROJECTS, title, }), ]); const page = { title: `${seo.title} - ${CONFIG.name}`, url: `${CONFIG.url}${ROUTES.PROJECTS}`, }; return ( {page.title} {/*eslint-disable-next-line react/jsx-no-literals -- Name allowed */} {/*eslint-disable-next-line react/jsx-no-literals -- Content allowed */}