import { useEffect, useState } from "react"; import { View, Text, ScrollView, Pressable, Alert, Share, } from "react-native"; import { useLocalSearchParams, router, useNavigation } from "expo-router"; import * as Clipboard from "expo-clipboard"; import { getIncidentById, updateIncident } from "@/lib/db"; import { renderMarkdown } from "@/lib/markdown"; import type { Incident } from "@/types/incident"; import { Colors } from "@/constants/theme"; const SECTION_LABEL = { color: Colors.text2, fontSize: 11, fontWeight: "700" as const, textTransform: "uppercase" as const, letterSpacing: 0.8, marginBottom: 6, marginTop: 20, } as const; const SECTION_CONTENT = { color: Colors.text1, fontSize: 14, fontFamily: "monospace", backgroundColor: Colors.surface, borderRadius: 8, padding: 12, lineHeight: 20, } as const; export default function IncidentDetailScreen() { const { id } = useLocalSearchParams<{ id: string }>(); const navigation = useNavigation(); const [incident, setIncident] = useState(null); useEffect(() => { if (id) { getIncidentById(id).then((inc) => { setIncident(inc); if (inc) { navigation.setOptions({ title: inc.title || "Incident" }); } }); } }, [id]); async function handleResolve() { if (!incident) return; await updateIncident(incident.id, { status: "resolved" }); setIncident({ ...incident, status: "resolved" }); } async function handleExport() { if (!incident) return; const md = renderMarkdown(incident); try { await Share.share({ message: md, title: incident.title }); } catch { await Clipboard.setStringAsync(md); Alert.alert("Copied", "Markdown copied to clipboard."); } } if (!incident) { return ( Loading… ); } return ( {/* Status badge */} {incident.status} {incident.service ? ( {incident.service} ) : null} {incident.createdAt.slice(0, 16).replace("T", " ")} {incident.title || "Untitled"} {incident.tags.length > 0 && ( {incident.tags.map((tag) => ( {tag} ))} )} Symptom {incident.symptom || "—"} Root Cause {incident.rootCause || "—"} Fix Applied {incident.fix || "—"} {/* Actions */} {incident.status === "open" && ( Mark as Resolved )} Export Markdown router.push({ pathname: "/new", params: { editId: incident.id } })} style={{ backgroundColor: Colors.surface, borderWidth: 1, borderColor: Colors.border, borderRadius: 10, padding: 14, alignItems: "center", }} > Edit ); }