diff --git a/src/app/admin/page.tsx b/src/app/admin/page.tsx index 242bb85..17bf5c6 100644 --- a/src/app/admin/page.tsx +++ b/src/app/admin/page.tsx @@ -149,6 +149,27 @@ export default function AdminPage() { loadEntries(); }, [loadEntries]); + // Keep the open drawer in sync after any mutation — grid already refreshes via + // loadEntries() -> allEntries -> gridData, but selectedDayEntries is a snapshot + // taken when the drawer opened. Without this the timeline/summary/errors stay + // frozen until you close and reopen. + useEffect(() => { + if (!sheetOpen || !selectedDayEntries) return; + const empId = manualPunchForm.employeeId; + const dateStr = selectedDayEntries.date; + const dayData = gridData[empId]?.[dateStr]; + if (!dayData) return; + const prevIds = selectedDayEntries.entries.map((e) => e.id).join(','); + const nextIds = dayData.entries.map((e) => e.id).join(','); + const prevErr = selectedDayEntries.errors.join('|'); + const nextErr = (dayData.errors || []).join('|'); + if (prevIds !== nextIds || prevErr !== nextErr) { + setSelectedDayEntries((prev) => + prev ? { ...prev, entries: dayData.entries, errors: dayData.errors || [] } : prev, + ); + } + }, [allEntries, gridData, sheetOpen, selectedDayEntries, manualPunchForm.employeeId]); + const days = useMemo(() => { const start = dateInputToDate(startDate); const end = dateInputToDate(endDate);