import Footer from '@components/Footer/Footer'; import Header from '@components/Header/Header'; import Main from '@components/Main/Main'; import Breadcrumb from '@components/Breadcrumb/Breadcrumb'; import { settings } from '@utils/config'; import Head from 'next/head'; import { useRouter } from 'next/router'; import { ReactElement, ReactNode, useEffect, useRef } from 'react'; import { useIntl } from 'react-intl'; import { SearchAction, WebSite, WithContext } from 'schema-dts'; import styles from './Layout.module.scss'; import Script from 'next/script'; const Layout = ({ children, isHome = false, }: { children: ReactNode; isHome?: boolean; }) => { const intl = useIntl(); const { asPath, locale } = useRouter(); const ref = useRef(null); useEffect(() => { ref.current?.focus(); }, [asPath]); type QueryAction = SearchAction & { 'query-input': string; }; const searchActionSchema: QueryAction = { '@type': 'SearchAction', target: { '@type': 'EntryPoint', urlTemplate: `${settings.url}/recherche?s={search_term_string}`, }, query: 'required', 'query-input': 'required name=search_term_string', }; const schemaJsonLd: WithContext = { '@context': 'https://schema.org', '@id': `${settings.url}`, '@type': 'WebSite', name: settings.name, description: locale?.startsWith('en') ? settings.baseline.en : settings.baseline.fr, url: settings.url, author: { '@id': `${settings.url}/#branding` }, copyrightYear: Number(settings.copyright.startYear), creator: { '@id': `${settings.url}/#branding` }, editor: { '@id': `${settings.url}/#branding` }, inLanguage: settings.locales.defaultLocale, potentialAction: searchActionSchema, }; return ( <>