#481 Polish cascade-affected meetings table in postpone/reschedule prompt

- Drop the leading "#" index column; dailyNumber already serves as a
  stable per-row identifier.
- Replace the hard-coded amber background/border with the user's chosen
  alert accent via hexToRgba(accent, 0.12 / 0.45). Threaded `accent`
  through PostponeDialog → CascadePromptBlock so children don't read
  prefs directly. Both the loading and main prompt blocks track the
  accent; the rose blocked-by-midnight variant is intentionally kept.
- Render times as localized 12-hour with ص/م (AR) or AM/PM (EN) by
  reusing the shared formatTime helper instead of slicing "HH:mm".
- Drop now-unused i18n key cascadeColIndex from ar.json + en.json.
- Update the e2e test to match the 3-column schema (meeting#, title,
  times); kept the dailyNumber assertion in the first cell.

tsc clean. Cascade specs pass (Postpone by 10, Reschedule cascade,
Cascade prompt UI: Shift/Keep, no-followers fallthrough).
This commit is contained in:
riyadhafraa
2026-05-10 16:07:20 +00:00
parent 4994840989
commit 7ea7744e26
4 changed files with 32 additions and 17 deletions
@@ -1088,11 +1088,11 @@ test("Cascade prompt UI: Shift sends cascadeFollowing=true; Keep sends false", a
// Our follower row must appear in the list with its testid.
const followerRow = page.getByTestId(`cascade-follower-${follower.id}`);
await expect(followerRow).toBeVisible();
// #480: the row is rendered as a numbered table — the first cell is
// the 1-based index, the second is the meeting's dailyNumber.
// #481: the row is rendered as a 3-column table (Meeting #, Title,
// From → To). The leading "#" index column was dropped because the
// dailyNumber already gives the user a stable identifier.
const followerCells = followerRow.locator("td");
await expect(followerCells.nth(0)).toHaveText("1");
await expect(followerCells.nth(1)).toHaveText(String(follower.dailyNumber));
await expect(followerCells.nth(0)).toHaveText(String(follower.dailyNumber));
// Intercept the mutation so we can read its JSON body without
// letting it actually fire (which would side-effect every other