feat(rsvp): move options panel inside field card with inline toggle#148
Merged
Conversation
- Prefer scope RSVP config via getConfigsForScope; fall back to legacy cloud
JSON (configService + mapLegacyRsvpConfigToFormFields) when scope has no fields
- Add RsvpFieldOptionSelectionState on EventFormData for select/multi-select
option order and include toggles (client-only until ESP exposes a contract)
- S2 Disclosure for option lists; HTML5 DnD reorder; auto-remove field when all
options disabled; reset option state when field hidden
- RegistrationConfigComponent wires cloudType and rsvpOptionSelections patch handler
- Hydrate rsvpOptionSelections as {} from API; TODO(PIM) on save path for future
granular serialization
Co-authored-by: Cursor <cursoragent@cursor.com>
- Document pim context/report usage and pod binding in CLAUDE.md - Add Claude Code sync command for PIM context pull - Gitignore .pim/ directory for local PIM state Co-authored-by: Cursor <cursoragent@cursor.com>
- Options list now renders inside the field card border rather than below it - Replaced Disclosure/DisclosureTitle trigger with an inline ListBulleted icon in the field row (5th grid column) - Icon is only shown for fields that have selectable options; absent otherwise - Icon highlights in selection-ring color when panel is expanded - Starting a field drag collapses all open option panels (mutually exclusive) - Removed redundant borders from option rows; drag-over ring retained Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Blocking fixes: - Replace div[role=button] with ActionButton isQuiet + onPress to fix drag-start interference and missing Spectrum focus ring - Add e.stopPropagation() to handleOptionDragOver/handleOptionDrop so option drags don't bubble to the outer field-card drop target - Clear optionDrag/optionDragOver in handleDragStart to avoid stale state - Prune expandedOptions when a field is hidden so the panel doesn't auto-reopen on re-show Code quality: - Extract toggleExpanded local fn to deduplicate setExpandedOptions logic - Replace <div /> fallback with null for the empty list-icon column - Wrap mandatedFieldNames in useMemo; use stable ref in useEffect dep array - Make isSelectableField a proper TypeScript type predicate - Add aria-label/aria-hidden to Move drag handle divs - Remove dead font styles from empty header span elements Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Disclosure/DisclosureTitleexpand trigger with an inlineListBulletedicon in the field row (new 5th grid column)Test plan
select/multi-selectfield)ListBulletedicon appears inline next to the drag handle only for option-bearing fields🤖 Generated with Claude Code