Files
ims/app/(protected)/hse/incidents/[id]/page.tsx
T
adminandClaude Opus 4.8 e55c5284a7 feat: triage panel — severity + DOSH checklist, transitions reported→triaged
Also excludes node_modules.nosync from tsconfig to fix pre-existing TS type check bleed.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FFDuBhMKvoWjrWT3ZnGmmr
2026-07-11 15:12:35 +08:00

75 lines
2.3 KiB
TypeScript

export const dynamic = 'force-dynamic'
import { notFound } from 'next/navigation'
import Link from 'next/link'
import { createClient } from '@/lib/supabase/server'
import { IncidentDetail, type Incident } from '@/components/incidents/incident-detail'
interface Props {
params: Promise<{ id: string }>
}
export default async function HseIncidentDetailPage({ params }: Props) {
const { id } = await params
const supabase = await createClient()
const { data: incident, error } = await supabase
.from('incidents')
.select(`
id, reference_no, incident_type, description, severity, status,
injury_involved, asset_involved, medical_status, lost_days,
reported_at, closed_at,
sites (id, name),
zones (id, name),
reporter:users!reported_by (id, name, email),
evidence_files (id, stage, file_url, file_type, uploaded_at)
`)
.eq('id', id)
.eq('evidence_files.deleted', false)
.single()
if (error || !incident) notFound()
const status = (incident as { status: string }).status
return (
<main className="max-w-3xl mx-auto px-4 py-6">
<Link href="/hse/incidents" className="text-sm text-blue-600 hover:underline mb-4 inline-block">
Back to inbox
</Link>
<IncidentDetail incident={incident as unknown as Incident} />
{status === 'reported' && (
<div className="mt-6">
<Link
href={`/hse/incidents/${id}/triage`}
className="inline-block bg-blue-600 text-white rounded-lg px-4 py-2 text-sm font-semibold hover:bg-blue-700"
>
Triage Incident
</Link>
</div>
)}
{status === 'triaged' && (
<div className="mt-6">
<Link
href={`/hse/incidents/${id}/investigation`}
className="inline-block bg-indigo-600 text-white rounded-lg px-4 py-2 text-sm font-semibold hover:bg-indigo-700"
>
Start Investigation
</Link>
</div>
)}
{(['investigating', 'capa_pending'] as string[]).includes(status) && (
<div className="mt-6">
<Link
href={`/hse/incidents/${id}/capa/new`}
className="inline-block bg-amber-600 text-white rounded-lg px-4 py-2 text-sm font-semibold hover:bg-amber-700"
>
Add CAPA Action
</Link>
</div>
)}
</main>
)
}