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" />