From 2cb2ed77668f05e83baec09a724685c2e6a9e936 Mon Sep 17 00:00:00 2001 From: "gpt-engineer-app[bot]" <159125892+gpt-engineer-app[bot]@users.noreply.github.com> Date: Sun, 19 Apr 2026 20:07:41 +0000 Subject: [PATCH] Changes Co-authored-by: renee-png <262607627+renee-png@users.noreply.github.com> --- src/routes/cases.$caseId.tsx | 59 ++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) diff --git a/src/routes/cases.$caseId.tsx b/src/routes/cases.$caseId.tsx index b743be3..8d98ed8 100644 --- a/src/routes/cases.$caseId.tsx +++ b/src/routes/cases.$caseId.tsx @@ -352,3 +352,62 @@ function SmallStat({ label, value }: { label: string; value: string }) { ); } + +function EditableRateStat({ + value, + onSave, +}: { + value: number | null; + onSave: (raw: string) => Promise; +}) { + const [editing, setEditing] = useState(false); + const [raw, setRaw] = useState(value != null ? String(value) : ""); + const [saving, setSaving] = useState(false); + + useEffect(() => { + setRaw(value != null ? String(value) : ""); + }, [value]); + + const commit = async () => { + setSaving(true); + const ok = await onSave(raw); + setSaving(false); + if (ok) setEditing(false); + }; + + return ( +
+
Case rate
+ {editing ? ( +
+ $ + setRaw(e.target.value)} + onKeyDown={(e) => { + if (e.key === "Enter") commit(); + if (e.key === "Escape") { setRaw(value != null ? String(value) : ""); setEditing(false); } + }} + autoFocus + className="h-7 px-2 text-sm" + /> + /hr + +
+ ) : ( + + )} +
+ ); +}