From 3f8e83b6ad6fe8bf9477b56ba2093516440d5dd8 Mon Sep 17 00:00:00 2001 From: SylvainP1 <5533467-SylvainP1@users.noreply.replit.com> Date: Tue, 21 Apr 2026 10:48:41 +0000 Subject: [PATCH] Improve text input behavior by saving notes on field exit Modify the description input to save changes when the user exits the field or presses Enter, rather than on every keystroke. Replit-Commit-Author: Agent Replit-Commit-Session-Id: 55837015-10e9-4be9-b857-7f5e6be73772 Replit-Commit-Checkpoint-Type: full_checkpoint Replit-Commit-Event-Id: 82396d53-6364-463b-a204-6415846d2fa6 Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/1cc377db-7ea0-49f2-97ce-c3e87e0228cc/55837015-10e9-4be9-b857-7f5e6be73772/76CtCxD Replit-Helium-Checkpoint-Created: true --- artifacts/cra-app/src/pages/timesheet-detail.tsx | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/artifacts/cra-app/src/pages/timesheet-detail.tsx b/artifacts/cra-app/src/pages/timesheet-detail.tsx index 0e74d73..71bc78c 100644 --- a/artifacts/cra-app/src/pages/timesheet-detail.tsx +++ b/artifacts/cra-app/src/pages/timesheet-detail.tsx @@ -172,14 +172,16 @@ export default function TimesheetDetailPage() { saveTimerRef.current = setTimeout(() => doSave(), 800); }; - const handleSetDescription = (lineId: number, dateStr: string, desc: string) => { + const handleChangeDescription = (lineId: number, dateStr: string, desc: string) => { const key = `${lineId}-${dateStr}`; setLocalDescriptions(prev => ({ ...prev, [key]: desc })); setHasUnsavedChanges(true); dirtyKeysRef.current.add(key); + }; + const handleSaveDescription = () => { if (saveTimerRef.current) clearTimeout(saveTimerRef.current); - saveTimerRef.current = setTimeout(() => doSave(), 800); + saveTimerRef.current = setTimeout(() => doSave(), 300); }; useEffect(() => { @@ -500,7 +502,13 @@ export default function TimesheetDetailPage() { type="text" placeholder="Note (optionnel)" value={desc} - onChange={(e) => handleSetDescription(line.id, day.dateStr, e.target.value)} + onChange={(e) => handleChangeDescription(line.id, day.dateStr, e.target.value)} + onBlur={handleSaveDescription} + onKeyDown={(e) => { + if (e.key === "Enter") { + e.currentTarget.blur(); + } + }} onClick={(e) => e.stopPropagation()} className="w-full text-xs bg-transparent border-none outline-none placeholder:text-muted-foreground/50" />