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>
36 lines
933 B
TypeScript
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>
|
|
);
|
|
}
|