feat(GRO-2319): live-render full StatusBadge palette in portal #69

Merged
Flea Flicker merged 1 commits from feat/GRO-2319-live-statusbadge-palette into dev 2026-06-09 10:41:08 +00:00
Member

GRO-2319 (Phase 1: feature → dev) — Portal: live-render full StatusBadge palette (web)

Follow-up to GRO-2313. CMPO sign-off obtained on GRO-2326/GRO-2328.

Changes

  • Item 1 — no_show badge key: StatusBadge normalizes underscore status keys (no_showno-show) so a DB-sourced no-show appointment renders the styled yellow No-show badge, not a raw gray label.
  • Item 2 — pending derivation: deriveDisplayStatus shows a Pending badge for an upcoming appointment whose confirmationStatus === 'pending'.
  • Item 2 — waitlisted card: waitlist-backed entries (status waitlisted, surfaced by the companion api PR) render as a muted dashed-border card with the subtext "You're on the waitlist — we'll let you know if a spot opens." Confirm/notes/reschedule/cancel actions are hidden for these entries (per CMPO UX spec GRO-2328).

Tests

  • normalizeStatusKey, deriveDisplayStatus, and styled No-show badge tests added. Full Appointments suite: 81 passing. tsc + eslint clean.

UAT Playbook

  • Updated UAT_PLAYBOOK.md §5.12f — live StatusBadge palette (no-show / pending / waitlisted), TC-WEB-5.12.26–29.

🤖 Generated with Claude Code

## GRO-2319 (Phase 1: feature → dev) — Portal: live-render full StatusBadge palette (web) Follow-up to [GRO-2313](/GRO/issues/GRO-2313). CMPO sign-off obtained on GRO-2326/GRO-2328. ### Changes - **Item 1 — `no_show` badge key:** `StatusBadge` normalizes underscore status keys (`no_show` → `no-show`) so a DB-sourced no-show appointment renders the styled yellow **No-show** badge, not a raw gray label. - **Item 2 — pending derivation:** `deriveDisplayStatus` shows a **Pending** badge for an upcoming appointment whose `confirmationStatus === 'pending'`. - **Item 2 — waitlisted card:** waitlist-backed entries (status `waitlisted`, surfaced by the companion api PR) render as a muted **dashed-border** card with the subtext _"You're on the waitlist — we'll let you know if a spot opens."_ Confirm/notes/reschedule/cancel actions are hidden for these entries (per CMPO UX spec GRO-2328). ### Tests - `normalizeStatusKey`, `deriveDisplayStatus`, and styled No-show badge tests added. Full Appointments suite: 81 passing. tsc + eslint clean. ### UAT Playbook - Updated `UAT_PLAYBOOK.md` **§5.12f** — live StatusBadge palette (no-show / pending / waitlisted), TC-WEB-5.12.26–29. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Flea Flicker added 1 commit 2026-06-09 10:38:16 +00:00
feat(GRO-2319): live-render full StatusBadge palette in portal
CI / Test (pull_request) Successful in 25s
CI / Lint & Typecheck (pull_request) Successful in 31s
CI / Build & Push Docker Image (pull_request) Successful in 47s
a781b53547
- StatusBadge normalizes underscore status keys (no_show → no-show) so a
  DB-sourced no_show appointment renders the styled "No-show" badge instead
  of a raw gray label (item 1).
- deriveDisplayStatus derives a Pending badge for an upcoming appointment
  whose confirmationStatus is pending, and Waitlisted for synthetic waitlist
  entries (item 2, CMPO-approved on GRO-2326/GRO-2328).
- AppointmentCard renders waitlist-backed entries with a muted dashed-border
  card + "You're on the waitlist…" subtext, and hides the confirm/notes/
  reschedule/cancel actions (a waitlist entry is not a booked appointment).
- Tests for normalizeStatusKey, deriveDisplayStatus, and the No-show badge.
- UAT_PLAYBOOK.md §5.12f added for the now-live palette states.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
Flea Flicker merged commit 66bac2c6f8 into dev 2026-06-09 10:41:08 +00:00
Sign in to join this conversation.