Some checks failed
Deploy to Production / Build and Deploy (push) Failing after 1m7s
Replaced ~100+ hardcoded French and English text strings across 30+ components with proper i18n t() calls. Added 57 new translation keys to all 15 locale files (ar, de, en, es, fa, fr, hi, it, ja, ko, nl, pl, pt, ru, zh). Key changes: - contextual-ai-chat.tsx: 30 French strings → t() (actions, toasts, labels, placeholders) - ai-chat.tsx: 15 French/English strings → t() (header, tabs, welcome, insights, history) - note-inline-editor.tsx: 20 French fallbacks removed (toolbar, save status, checklist) - lab-skeleton.tsx: French loading text → t() - admin-header.tsx, header.tsx, editor-connections-section.tsx: French fallbacks removed - New AI chat component, agent cards, sidebar, settings panel i18n cleanup Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
58 lines
2.3 KiB
TypeScript
58 lines
2.3 KiB
TypeScript
import { Suspense } from "react";
|
|
import { HeaderWrapper } from "@/components/header-wrapper";
|
|
import { Sidebar } from "@/components/sidebar";
|
|
import { ProvidersWrapper } from "@/components/providers-wrapper";
|
|
import { auth } from "@/auth";
|
|
import { detectUserLanguage } from "@/lib/i18n/detect-user-language";
|
|
import { loadTranslations } from "@/lib/i18n/load-translations";
|
|
import { getAISettings } from "@/app/actions/ai-settings";
|
|
|
|
import { AIChat } from "@/components/ai-chat";
|
|
|
|
export default async function MainLayout({
|
|
children,
|
|
}: Readonly<{
|
|
children: React.ReactNode;
|
|
}>) {
|
|
// Run auth + language detection + translation loading in parallel
|
|
const [session, initialLanguage] = await Promise.all([
|
|
auth(),
|
|
detectUserLanguage(),
|
|
]);
|
|
|
|
// Load initial translations server-side to prevent hydration mismatch
|
|
const initialTranslations = await loadTranslations(initialLanguage);
|
|
|
|
// Load AI settings to conditionally render AI features
|
|
const aiSettings = session?.user?.id
|
|
? await getAISettings(session.user.id)
|
|
: null;
|
|
const showAIAssistant = aiSettings?.paragraphRefactor !== false;
|
|
|
|
return (
|
|
<ProvidersWrapper initialLanguage={initialLanguage} initialTranslations={initialTranslations}>
|
|
<div className="bg-background-light dark:bg-background-dark font-display text-slate-900 dark:text-white overflow-hidden h-screen flex flex-col">
|
|
{/* Top Navigation - Style Keep */}
|
|
<HeaderWrapper user={session?.user} />
|
|
|
|
{/* Main Layout */}
|
|
<div className="flex flex-1 overflow-hidden relative">
|
|
{/* Sidebar Navigation - Style Keep */}
|
|
<Suspense fallback={<div className="w-64 flex-none hidden md:flex" />}>
|
|
<Sidebar className="w-64 flex-none flex-col bg-white dark:bg-[#1e2128] border-e border-slate-200 dark:border-slate-800 overflow-y-auto hidden md:flex" user={session?.user} />
|
|
</Suspense>
|
|
|
|
{/* Main Content Area */}
|
|
<main className="flex min-h-0 flex-1 flex-col overflow-y-auto bg-background-light dark:bg-background-dark p-4 scroll-smooth">
|
|
{children}
|
|
</main>
|
|
|
|
{/* AI Chat Drawer — only shown if user has Assistant IA enabled */}
|
|
{showAIAssistant && <AIChat />}
|
|
</div>
|
|
</div>
|
|
</ProvidersWrapper>
|
|
);
|
|
}
|
|
|