Grapevine_Disease_Detection/vineye-admin/app/(admin)/layout.tsx
Yanis 720dd34fdd add MyPlantsScreen + ScanDetailScreen + enriched admin + API mobile + project summary
Mobile:
- Replace LibraryScreen with MyPlantsScreen (date-grouped scan list, swipe actions, search, pull-to-refresh)
- Add ScanDetailScreen (immersive hero, confidence bar, cepage card, share/delete)
- Add DiseaseDetailScreen + GuideDetailScreen (hero pattern, animated entry)
- Add useScanDetail, useHistory (useCallback fix), dateGrouping utility
- Connect diseases/guides to admin API with cache + offline fallback
- Add NetworkContext, ToastContext, Skeleton loading components
- Extend ScanRecord type (isFavorite, location)
- Full i18n FR/EN for all new screens

Admin (vineye-admin):
- Enrich Disease/Guide Prisma schema (timeline, conditions, actions, sections)
- Enriched disease-form (7 sections) + guide-form (structured sections editor)
- Add mobile public API endpoints (diseases, guides by slug)
- Add Prisma migration + enriched seed data
- UI polish: sidebar, login, layout updates

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-09 03:19:39 +02:00

46 lines
1.6 KiB
TypeScript

"use client";
import { useState } from "react";
import { useSession } from "@/lib/auth-client";
import Sidebar from "@/components/admin/sidebar";
import Header from "@/components/admin/header";
import { Sheet, SheetContent } from "@/components/ui/sheet";
export default function AdminLayout({ children }: { children: React.ReactNode }) {
const [sidebarOpen, setSidebarOpen] = useState(false);
const [collapsed, setCollapsed] = useState(false);
const { data: session } = useSession();
const userName = session?.user?.name || "Admin";
const userEmail = session?.user?.email || "";
return (
<div className="flex h-screen overflow-hidden bg-background">
{/* Desktop sidebar */}
<div className="hidden lg:flex">
<Sidebar
collapsed={collapsed}
onCollapse={() => setCollapsed(!collapsed)}
userName={userName}
userEmail={userEmail}
/>
</div>
{/* Mobile sidebar */}
<Sheet open={sidebarOpen} onOpenChange={setSidebarOpen}>
<SheetContent side="left" showCloseButton={false} className="p-0 w-[260px] border-r border-[oklch(0.20_0.006_60)] bg-[oklch(0.11_0.005_60)]">
<Sidebar userName={userName} userEmail={userEmail} />
</SheetContent>
</Sheet>
{/* Main content */}
<div className="flex flex-col flex-1 overflow-hidden">
<Header onMenuClick={() => setSidebarOpen(true)} userName={userName} />
<main className="flex-1 overflow-y-auto">
<div className="p-4 lg:p-8">{children}</div>
</main>
</div>
</div>
);
}