"use client"; import { type ReactNode, useEffect, useState } from "react"; import { CapabilitiesProvider } from "@/lib/capabilities/context"; import { JobsProvider } from "@/components/layout/jobs-provider"; import { LatestToast } from "@/components/layout/latest-toast"; import { ActiveJobsPanel } from "@/components/layout/active-jobs-panel"; import { ThreadsOAuthToast } from "@/components/layout/threads-oauth-toast"; import { MobileBottomNav, MobileNavDrawer, useMobileLogout, } from "@/components/layout/mobile-nav"; import { KonamiRegisterGate } from "@/components/auth/konami-register-gate"; import { RefineSessionHost } from "@/components/refine-session-host"; import { Sidebar } from "@/components/layout/sidebar"; import { useJobs } from "@/components/layout/jobs-provider"; import { useNotifications } from "@/lib/notifications/use-notifications"; import { setNotificationScope } from "@/lib/notifications/store"; function DashboardChrome({ children }: { children: ReactNode }) { const [menuOpen, setMenuOpen] = useState(false); const [userEmail, setUserEmail] = useState(null); const { unreadCount } = useNotifications(); const { activeJobs } = useJobs(); const badgeCount = unreadCount + activeJobs.length; const logout = useMobileLogout(); useEffect(() => { fetch("/api/auth/me") .then((res) => (res.ok ? res.json() : null)) .then((data) => { if (data?.user?.id) setNotificationScope(data.user.id); setUserEmail(data?.user?.email ?? null); }) .catch(() => undefined); }, []); return ( <>
setMenuOpen(false)} badgeCount={badgeCount} userEmail={userEmail} onLogout={logout} />
{children}
setMenuOpen(true)} />
); } export function DashboardShell({ children }: { children: ReactNode }) { return ( {children} ); }