Files
afrov2/app/layout.tsx

77 lines
2.5 KiB
TypeScript

import React from 'react';
import Script from 'next/script';
import Navbar from '../components/Navbar';
import Footer from '../components/Footer';
import { UserProvider } from '../components/UserProvider';
import AnalyticsTracker from '../components/AnalyticsTracker';
import CookieBanner from '../components/CookieBanner';
import { Metadata } from 'next';
import { Toaster } from 'react-hot-toast';
import { getSiteSettings } from '../lib/settings';
import { Inter, Playfair_Display } from 'next/font/google';
import './globals.css';
const inter = Inter({
subsets: ['latin'],
variable: '--font-inter',
display: 'swap',
});
const playfair = Playfair_Display({
subsets: ['latin'],
variable: '--font-playfair',
display: 'swap',
});
export const dynamic = 'force-dynamic';
export async function generateMetadata(): Promise<Metadata> {
const settings = await getSiteSettings();
return {
metadataBase: new URL(process.env.NEXT_PUBLIC_SITE_URL || 'http://localhost:3000'),
title: `${settings.siteName} - L'Annuaire 2.0`,
description: settings.siteSlogan || "Découvrez les pépites de l'écosystème africain.",
alternates: {
canonical: '/',
},
};
}
export default async function RootLayout({ children }: { children: React.ReactNode }) {
const settings = await getSiteSettings();
const isDev = process.env.NEXT_PUBLIC_APP_ENV === 'development';
return (
<html lang="fr" className={`${inter.variable} ${playfair.variable}`} suppressHydrationWarning>
<head>
<link rel="icon" type="image/png" href="/favicon.png" />
{isDev && (
<style dangerouslySetInnerHTML={{ __html: `
:root {
--color-brand-50: #fef2f2 !important;
--color-brand-100: #fee2e2 !important;
--color-brand-200: #fecaca !important;
--color-brand-500: #ef4444 !important;
--color-brand-600: #dc2626 !important;
--color-brand-700: #b91c1c !important;
--color-brand-900: #7f1d1d !important;
}
`}} />
)}
</head>
<body className="bg-gray-50 text-gray-900 antialiased min-h-screen flex flex-col font-sans" suppressHydrationWarning>
<UserProvider>
<Toaster position="top-right" />
<AnalyticsTracker />
<Navbar settings={settings} />
<main className="flex-grow">
{children}
</main>
<Footer settings={settings} />
<CookieBanner />
</UserProvider>
</body>
</html>
);
}