Migrate custom_admin Schedule Builder to Radix UI#4664
Conversation
Replace the schedule builder's ad-hoc UI with @radix-ui/themes, matching the invitation-letter document builder pattern. - Custom div Modal -> Radix Dialog (guard content on data so the close animation never dereferences null after the data is cleared) - Native <input>/<select>/<button> -> TextField / Select / Button - Raw <h1>/<strong>/<ul><li> markup -> Heading / Text / Card / Badge / DataList - Pending-items basket emoji scroll controls -> IconButton + lucide chevrons - Remove now-unused shared/modal.tsx and the .btn utility class - Drop a stray console.log and an empty else in search-event CSS-grid calendar layout, react-dnd drag-and-drop, GraphQL, and the speaker availability badges/tooltips are unchanged. Spec: backend/custom_admin/SPEC-schedule-builder-radix.md Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
|
This PR migrates the Schedule Builder UI in Error Handling Silent discard of backend error messages — all three error states show a generic Error state not cleared on tab switch — in Missing error handling in Architecture & Design
Missing TypeScript annotation — Testing No Minor
|
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #4664 +/- ##
=======================================
Coverage 92.52% 92.52%
=======================================
Files 359 359
Lines 10800 10800
Branches 821 821
=======================================
Hits 9993 9993
Misses 696 696
Partials 111 111 🚀 New features to boost your workflow:
|
- Delete the committed AI planning spec (no value as repo docs) - Add Dialog.Description to add-item modal (a11y; silences Radix warning) - Gate "No events found" on debouncedSearch so it doesn't show pre-search - Add type="button" to the calendar "Edit day in admin" Button - Add a return null fallback for unknown event __typename in search results Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- Only close the add-item modal on mutation success; surface a red Callout
on graphql/network errors instead of closing silently (add-custom-event,
proposal-preview, keynote-preview)
- Consolidate the two divergent AVAILABILITY_BADGE maps into a single
AVAILABILITY_META source of truth in utils/availability.ts, consumed by
both the inline tooltip badge and the Radix Badge
- Render the event-type Select with position="popper" to sidestep portal
stacking against the Dialog overlay
Modal form/search state already resets on reopen: closing sets data to null,
which unmounts the search/custom-event subtree via the existing `{data && ...}`
guard, so each open remounts with fresh useState.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
What
Migrates the custom_admin Schedule Builder UI to
@radix-ui/themes, matching the pattern already used by the Invitation Letter Document Builder.Changes
divModal→ RadixDialog(content guarded ondataso the close animation can't deref null after data is cleared)<input>/<select>/<button>→TextField/Select/Button<h1>/<strong>/<ul><li>markup →Heading/Text/Card/Badge/DataListIconButton+ lucide chevronsshared/modal.tsxand the.btnutility classconsole.logand an emptyelseinsearch-eventUnchanged (deliberately)
CSS-grid calendar layout,
react-dnddrag-and-drop, GraphQL, and the speaker-availability badges/tooltips.Verification
pnpm buildnot run in this environment: it needspnpm codegenartifacts (git-ignored) generated against a live admin GraphQL backend. Please compile-check in a normal dev env. Watch on first run: RadixCard/TextFieldref forwarding to drag/focus, andSelectportal layering above the Dialog overlay.Spec:
backend/custom_admin/SPEC-schedule-builder-radix.md🤖 Generated with Claude Code