61 lines
1.6 KiB
TypeScript
61 lines
1.6 KiB
TypeScript
import type { Metadata } from "next";
|
|
import "./globals.css";
|
|
import { AuthProvider } from "@/lib/auth-context";
|
|
import { db, settings } from "@/lib/db";
|
|
import { eq } from "drizzle-orm";
|
|
|
|
async function getSettings() {
|
|
try {
|
|
const allSettings = await db.select().from(settings);
|
|
const settingsObj = allSettings.reduce((acc, setting) => {
|
|
acc[setting.key] = setting.value;
|
|
return acc;
|
|
}, {} as Record<string, string>);
|
|
|
|
return {
|
|
siteTitle: settingsObj.siteTitle || 'Chá do Martin',
|
|
homepageSubtext: settingsObj.homepageSubtext || 'Escolha um presente da lista!',
|
|
};
|
|
} catch (error) {
|
|
return {
|
|
siteTitle: 'Chá do Martin',
|
|
homepageSubtext: 'Escolha um presente da lista!',
|
|
};
|
|
}
|
|
}
|
|
|
|
export async function generateMetadata(): Promise<Metadata> {
|
|
const settings = await getSettings();
|
|
return {
|
|
title: settings.siteTitle,
|
|
description: "Lista de presentes para o chá de bebê",
|
|
icons: {
|
|
icon: '/icon.svg',
|
|
},
|
|
};
|
|
}
|
|
|
|
export default function RootLayout({
|
|
children,
|
|
}: Readonly<{
|
|
children: React.ReactNode;
|
|
}>) {
|
|
return (
|
|
<html lang="pt-BR">
|
|
<head>
|
|
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossOrigin="anonymous" />
|
|
<link
|
|
href="https://fonts.googleapis.com/css2?family=Quicksand:wght@400;500;600;700&display=swap"
|
|
rel="stylesheet"
|
|
/>
|
|
</head>
|
|
<body className="font-sans antialiased bg-cosmic">
|
|
<AuthProvider>
|
|
{children}
|
|
</AuthProvider>
|
|
</body>
|
|
</html>
|
|
);
|
|
}
|