diff --git a/app/epd/agenda/page.tsx b/app/epd/agenda/page.tsx new file mode 100644 index 0000000..d7d6707 --- /dev/null +++ b/app/epd/agenda/page.tsx @@ -0,0 +1,27 @@ +/** + * Behandelaar Agenda - Level 1 + * + * Kalender view met alle afspraken van de behandelaar. + */ + +export default function AgendaPage() { + return ( +
+

+ Agenda +

+ +
+

+ Behandelaar Agenda +

+

+ Kalender view met alle afspraken (alle cliënten) +

+

+ Placeholder - Not designed yet +

+
+
+ ); +} diff --git a/app/epd/clients/[id]/diagnose/page.tsx b/app/epd/clients/[id]/diagnose/page.tsx new file mode 100644 index 0000000..b2de50a --- /dev/null +++ b/app/epd/clients/[id]/diagnose/page.tsx @@ -0,0 +1,27 @@ +/** + * Diagnose & Probleemprofiel - Level 2 (Client Dossier) + * + * DSM-light categorieën met severity tracking. + */ + +export default function DiagnosePage({ params }: { params: Promise<{ id: string }> }) { + return ( +
+

+ Diagnose & Probleemprofiel +

+ +
+

+ DSM-light Categorieën +

+

+ 6 categorieën met severity indicators (Laag/Middel/Hoog) +

+

+ Epic 4 - Placeholder for future content +

+
+
+ ); +} diff --git a/app/epd/clients/[id]/intake/page.tsx b/app/epd/clients/[id]/intake/page.tsx new file mode 100644 index 0000000..0a9d897 --- /dev/null +++ b/app/epd/clients/[id]/intake/page.tsx @@ -0,0 +1,27 @@ +/** + * Intake Sectie - Level 2 (Client Dossier) + * + * TipTap editor voor intake notities met CRUD functionaliteit. + */ + +export default function IntakePage({ params }: { params: Promise<{ id: string }> }) { + return ( +
+

+ Intakes +

+ +
+

+ Intake Notities +

+

+ TipTap editor, CRUD voor intakes, slide-in detail panel +

+

+ Epic 3 - Placeholder for future content +

+
+
+ ); +} diff --git a/app/epd/clients/[id]/plan/page.tsx b/app/epd/clients/[id]/plan/page.tsx new file mode 100644 index 0000000..50402ce --- /dev/null +++ b/app/epd/clients/[id]/plan/page.tsx @@ -0,0 +1,27 @@ +/** + * Behandelplan - Level 2 (Client Dossier) + * + * SMART doelen tracking met interventies en versioning. + */ + +export default function PlanPage({ params }: { params: Promise<{ id: string }> }) { + return ( +
+

+ Behandelplan +

+ +
+

+ SMART Doelen & Interventies +

+

+ Treatment plan met versioning (v1, v2, concept/gepubliceerd) +

+

+ Epic 5 - Placeholder for future content +

+
+
+ ); +} diff --git a/app/epd/clients/[id]/reports/page.tsx b/app/epd/clients/[id]/reports/page.tsx new file mode 100644 index 0000000..64e81da --- /dev/null +++ b/app/epd/clients/[id]/reports/page.tsx @@ -0,0 +1,27 @@ +/** + * Client Rapportage - Level 2 (Client Dossier) + * + * Client-specifieke voortgang en metrics. + */ + +export default function ClientReportsPage({ params }: { params: Promise<{ id: string }> }) { + return ( +
+

+ Rapportage & Voortgang +

+ +
+

+ Client Voortgang +

+

+ Behandelduur, sessies, doelvoortgang tracking +

+

+ Placeholder - Not designed yet +

+
+
+ ); +} diff --git a/app/epd/components/epd-header.tsx b/app/epd/components/epd-header.tsx index 38c7133..c976305 100644 --- a/app/epd/components/epd-header.tsx +++ b/app/epd/components/epd-header.tsx @@ -1,53 +1,60 @@ "use client"; import React from 'react'; -import { Bell, Search } from 'lucide-react'; +import { Search, ChevronDown } from 'lucide-react'; +import { usePathname } from 'next/navigation'; interface EPDHeaderProps { - title?: string; - subtitle?: string; + className?: string; } -export function EPDHeader({ title, subtitle }: EPDHeaderProps) { +export function EPDHeader({ className = "" }: EPDHeaderProps) { + const pathname = usePathname(); + + // Context detection: Level 2 if URL contains /clients/[id] + const isClientContext = pathname.match(/\/epd\/clients\/[^\/]+/); + const clientId = isClientContext ? pathname.split('/')[3] : null; + + // TODO: Fetch actual client data based on clientId + // For now, hardcoded demo data + const selectedClient = clientId ? { + name: "Bas Jansen", + id: "CL0002", + birthDate: "20-11-1992" + } : null; + return ( -
-
- {/* Left: Page Title */} -
- {title && ( -
-

- {title} -

- {subtitle && ( -

- {subtitle} -

- )} +
+ {/* Left: Logo */} +
+ Mini-ECD +
+ + {/* Center: Client Selector (only in Level 2) */} +
+ {selectedClient && ( +
- - {/* Right: Search & Notifications */} -
- {/* Search Bar - Hidden on mobile */} -
- - -
- - {/* Notifications */} - + )} +
+ + {/* Right: Search */} +
+
+ +
diff --git a/app/epd/components/epd-sidebar.tsx b/app/epd/components/epd-sidebar.tsx index 9180309..3ae2406 100644 --- a/app/epd/components/epd-sidebar.tsx +++ b/app/epd/components/epd-sidebar.tsx @@ -29,13 +29,21 @@ interface EPDSidebarProps { userName?: string; } -// EPD Navigation items -const navigationItems: NavigationItem[] = [ - { id: "dashboard", name: "Dashboard", icon: LayoutDashboard, href: "/epd/clients" }, +// LEVEL 1: Behandelaar Context Navigation +const level1NavigationItems: NavigationItem[] = [ + { id: "dashboard", name: "Dashboard", icon: LayoutDashboard, href: "/epd/dashboard" }, { id: "clients", name: "Cliënten", icon: Users, href: "/epd/clients" }, - { id: "documentation", name: "Documentatie", icon: FileText, href: "/epd/docs" }, - { id: "settings", name: "Instellingen", icon: Settings, href: "/epd/settings" }, - { id: "help", name: "Help", icon: HelpCircle, href: "/epd/help" }, + { id: "agenda", name: "Agenda", icon: FileText, href: "/epd/agenda" }, + { id: "reports", name: "Rapportage", icon: Settings, href: "/epd/reports" }, +]; + +// LEVEL 2: Client Dossier Context Navigation (clientId gets injected) +const level2NavigationItems: NavigationItem[] = [ + { id: "dashboard", name: "Dashboard", icon: LayoutDashboard, href: "/dashboard" }, + { id: "intake", name: "Intake", icon: FileText, href: "/intake" }, + { id: "diagnose", name: "Diagnose", icon: Settings, href: "/diagnose" }, + { id: "plan", name: "Behandelplan", icon: HelpCircle, href: "/plan" }, + { id: "reports", name: "Rapportage", icon: Settings, href: "/reports" }, ]; export function EPDSidebar({ className = "", userEmail, userName }: EPDSidebarProps) { @@ -43,6 +51,18 @@ export function EPDSidebar({ className = "", userEmail, userName }: EPDSidebarPr const [isOpen, setIsOpen] = useState(false); const [isCollapsed, setIsCollapsed] = useState(false); + // Context detection: Level 2 if URL contains /clients/[id] + const isClientContext = pathname.match(/\/epd\/clients\/[^\/]+/); + const clientId = isClientContext ? pathname.split('/')[3] : null; + + // Determine which navigation items to show + const navigationItems = isClientContext + ? level2NavigationItems.map(item => ({ + ...item, + href: `/epd/clients/${clientId}${item.href}` + })) + : level1NavigationItems; + // Auto-open sidebar on desktop useEffect(() => { const handleResize = () => { @@ -140,6 +160,20 @@ export function EPDSidebar({ className = "", userEmail, userName }: EPDSidebarPr {/* Navigation */}