f3154554ff8becd4fec790da17eba35a2c6b878a
Two bugs in the schedule time-cell editor:
1. SNAP-BACK: After saving, re-opening the editor briefly showed
blank inputs because the React Query refetch ran behind the
close-then-reopen sequence and the picker re-seeded from stale
meeting props.
2. PERCEIVED LATENCY: The editor stayed open until the PATCH
round-trip resolved, so a slow network made every save feel
slow even though the data round-trip was the only blocker.
Fixes (artifacts/tx-os/src/pages/executive-meetings.tsx):
- saveTimes: optimistically write the new times into the
["/api/executive-meetings", date] query cache (DayResponse shape:
{ date, meetings: [...] }) so the read-only display repaints
immediately. Snapshot previous payload and roll back on PATCH
failure. Append :00 so the cached shape matches the GET refetch.
- TimeRangeCell.save(): close the editor BEFORE awaiting the PATCH;
set savingRef while saving so the [editing, startSaved, endSaved]
sync effect doesn't overwrite the optimistic draft on the next
render. On failure, re-open with the user's draft intact.
- TimeRangeCell sync effect: bail when savingRef is true OR when
the saved refs match lastSyncedRef, preventing stale prop values
from clobbering the optimistic state mid-flight.
Tests added (artifacts/tx-os/tests/executive-meetings-keyboard-editing.spec.mjs):
- snap-back: save 21:30/22:45, immediately re-open, assert picker
shows the saved values (not blank).
- perceived-latency: hold PATCH 1.5s; assert editor closes within
800ms and the read-only display shows optimistic times.
- rollback: 500 the PATCH; assert editor re-opens with the user's
draft intact, read-only display shows the original times after
cancel, DB unchanged.
All 3 new tests pass; the existing time-editor tests continue to
pass (6/6 in the targeted regression sweep).
Plan: .local/tasks/task-316.md
Description
No description provided
Languages
TypeScript
69.4%
JavaScript
29%
CSS
0.6%
Shell
0.6%
Dockerfile
0.2%
Other
0.2%