Files
office_translator/frontend/src/app/layout.tsx
sepehr a76442b382 feat: add Google Sign-In to login and register pages
- Add GoogleOAuthProvider wrapper in layout.tsx
- Add Google login button to LoginForm with "or continue with email" separator
- Add Google signup button to RegisterForm
- Add Google auth types and API client integration
- Add GOOGLE_CLIENT_ID and NEXT_PUBLIC_GOOGLE_CLIENT_ID to env config
- Add translations (EN/FR) for Google OAuth UI
- Backend already has /api/v1/auth/google endpoint, no changes needed

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-10 19:47:08 +02:00

46 lines
1.6 KiB
TypeScript

import type { Metadata } from "next";
import { Inter } from "next/font/google";
import "./globals.css";
import { QueryProvider } from "@/providers/QueryProvider";
import { ThemeProvider } from "@/providers/ThemeProvider";
import { NotificationProvider } from "@/components/ui/notification";
import { I18nProvider } from "@/lib/i18n";
import { Agentation } from "agentation";
import { GoogleOAuthProvider } from "@react-oauth/google";
export const dynamic = 'force-dynamic';
const inter = Inter({
subsets: ["latin"],
});
export const metadata: Metadata = {
title: "Office Translator - Translate Documents, Keep the Format",
description: "Translate Excel, Word, and PowerPoint documents with zero formatting loss. Fast, private, and accurate document translation.",
};
export default function RootLayout({
children,
}: Readonly<{
children: React.ReactNode;
}>) {
return (
<html suppressHydrationWarning>
<body className={`${inter.className} bg-background text-foreground antialiased`}>
<ThemeProvider attribute="class" defaultTheme="system" enableSystem={true} disableTransitionOnChange={false}>
<I18nProvider>
<QueryProvider>
<GoogleOAuthProvider clientId={process.env.NEXT_PUBLIC_GOOGLE_CLIENT_ID || ""}>
<NotificationProvider>
{children}
</NotificationProvider>
</GoogleOAuthProvider>
</QueryProvider>
</I18nProvider>
{process.env.NODE_ENV === "development" && <Agentation />}
</ThemeProvider>
</body>
</html>
);
}