1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
|
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 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 breadcrumb: BreadcrumbItem[] = [
{ id: 'home', name: homeLabel, url: '/' },
{ id: 'legal-notice', name: title, url: '/mentions-legales' },
];
const headerMeta: PageLayoutProps['headerMeta'] = {
publication: {
date: dates.publication,
},
update: dates.update
? {
date: dates.update,
}
: undefined,
};
const components: NestedMDXComponents = {
Image: (props) => <ResponsiveImage {...props} />,
Link: (props) => <Link {...props} />,
};
const { website } = useSettings();
const { asPath } = useRouter();
const pageUrl = `${website.url}${asPath}`;
const pagePublicationDate = new Date(dates.publication);
const pageUpdateDate = dates.update ? new Date(dates.update) : undefined;
const webpageSchema: WebPage = {
'@id': `${pageUrl}`,
'@type': 'WebPage',
breadcrumb: { '@id': `${website.url}/#breadcrumb` },
name: seo.title,
description: seo.description,
inLanguage: website.locales.default,
license: 'https://creativecommons.org/licenses/by-sa/4.0/deed.fr',
reviewedBy: { '@id': `${website.url}/#branding` },
url: `${pageUrl}`,
isPartOf: {
'@id': `${website.url}`,
},
};
const articleSchema: Article = {
'@id': `${website.url}/#legal-notice`,
'@type': 'Article',
name: title,
description: intro,
author: { '@id': `${website.url}/#branding` },
copyrightYear: pagePublicationDate.getFullYear(),
creator: { '@id': `${website.url}/#branding` },
dateCreated: pagePublicationDate.toISOString(),
dateModified: pageUpdateDate && pageUpdateDate.toISOString(),
datePublished: pagePublicationDate.toISOString(),
editor: { '@id': `${website.url}/#branding` },
headline: title,
inLanguage: website.locales.default,
license: 'https://creativecommons.org/licenses/by-sa/4.0/deed.fr',
mainEntityOfPage: { '@id': `${pageUrl}` },
};
const schemaJsonLd: Graph = {
'@context': 'https://schema.org',
'@graph': [webpageSchema, articleSchema],
};
return (
<PageLayout
title={title}
intro={intro}
headerMeta={headerMeta}
breadcrumb={breadcrumb}
withToC={true}
>
<Head>
<title>{`${seo.title} - ${website.name}`}</title>
<meta name="description" content={seo.description} />
<meta property="og:url" content={`${pageUrl}`} />
<meta property="og:type" content="article" />
<meta property="og:title" content={`${seo.title} - ${website.name}`} />
<meta property="og:description" content={intro} />
</Head>
<Script
id="schema-legal-notice"
type="application/ld+json"
dangerouslySetInnerHTML={{ __html: JSON.stringify(schemaJsonLd) }}
/>
<LegalNoticeContent components={components} />
</PageLayout>
);
};
export const getStaticProps: GetStaticProps = async ({ locale }) => {
const translation = await loadTranslation(locale);
return {
props: {
translation,
},
};
};
export default LegalNoticePage;
|