Files
triqura-ecd/app/epd/layout.tsx
colinislit 0130e28f1e feat: move patient info to top header with React Context
Refactored patient display from separate ClientHeader to integrated EPDHeader.

Architecture changes:
- Implemented React Context pattern for patient data sharing
- Created PatientContext with useState + setPatient for dynamic updates
- Created useSetPatient hook for patient injection from nested layouts
- Created EPDLayoutClient wrapper with PatientProvider
- Context flow: EPDLayout → EPDLayoutClient → EPDHeader (consumer)

UI improvements:
- Removed "Mini-ECD" logo from header
- Left-aligned patient info: name + status + John Doe indicator
- Added geboortedatum (dd-mm-yyyy Dutch format)
- Added BSN extraction from FHIR identifiers
- Compact layout: Patient details | Timestamp | Actions ⋮ | Search
- Actions dropdown with "Nieuwe rapportage" (expandable)

Cleanup:
- Deleted ClientHeader component (141 lines duplicate code)
- Simplified PatientLayoutClient (only useSetPatient hook)
- Single source of truth for patient display

Result: Clean context-based architecture, improved UX, -141 LOC

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-24 14:11:35 +01:00

36 lines
933 B
TypeScript

/**
* EPD Application Layout
*
* Layout for the EPD application with sidebar navigation and header.
* Requires authentication via middleware.
*/
import type { ReactNode } from 'react';
import { EPDSidebar } from './components/epd-sidebar';
import { EPDLayoutClient } from './components/epd-layout-client';
import { getUser } from '@/lib/auth/server';
interface EPDLayoutProps {
children: ReactNode;
}
export default async function EPDLayout({ children }: EPDLayoutProps) {
// Get authenticated user
const user = await getUser();
return (
<div className="min-h-screen bg-slate-50 flex">
{/* Sidebar - Context-aware (switches between Level 1 and Level 2) */}
<EPDSidebar
userEmail={user?.email}
userName={user?.user_metadata?.full_name}
/>
{/* Main Content Area with PatientProvider */}
<EPDLayoutClient>
{children}
</EPDLayoutClient>
</div>
);
}