import type { GetStaticProps } from 'next'; import Head from 'next/head'; import NextImage from 'next/image'; import { useRouter } from 'next/router'; import Script from 'next/script'; import { useIntl } from 'react-intl'; import { Card, CardCover, CardBody, CardFooter, CardHeader, CardTitle, getLayout, Grid, MetaList, MetaItem, Page, PageHeader, PageBody, } 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 { getSchemaJson, getSinglePageSchema, getWebPageSchema, } from '../../utils/helpers'; import { getProjectsCard, loadTranslation, type Messages, } from '../../utils/helpers/server'; import { useBreadcrumb } from '../../utils/hooks'; type ProjectsPageProps = { projects: ProjectPreview[]; translation?: Messages; }; /** * Projects page. */ const ProjectsPage: NextPageWithLayout = ({ projects }) => { const { dates, seo, title } = meta; const { items: breadcrumbItems, schema: breadcrumbSchema } = useBreadcrumb({ title, url: ROUTES.PROJECTS, }); const intl = useIntl(); const metaLabel = intl.formatMessage({ defaultMessage: 'Technologies:', description: 'Meta: technologies label', id: 'ADQmDF', }); const { asPath } = useRouter(); const webpageSchema = getWebPageSchema({ description: seo.description, locale: CONFIG.locales.defaultLocale, slug: asPath, title: seo.title, updateDate: dates.update, }); const articleSchema = getSinglePageSchema({ dates, description: seo.description, id: 'projects', kind: 'page', locale: CONFIG.locales.defaultLocale, slug: asPath, title, }); const schemaJsonLd = getSchemaJson([webpageSchema, articleSchema]); const page = { title: `${seo.title} - ${CONFIG.name}`, url: `${CONFIG.url}${asPath}`, }; return ( {page.title} {/*eslint-disable-next-line react/jsx-no-literals -- Name allowed */} {/*eslint-disable-next-line react/jsx-no-literals -- Content allowed */}