Skip to content

feat(rsvp): move options panel inside field card with inline toggle#148

Merged
qiyundai merged 8 commits into
configsfrom
rsvp-form-component-update
May 8, 2026
Merged

feat(rsvp): move options panel inside field card with inline toggle#148
qiyundai merged 8 commits into
configsfrom
rsvp-form-component-update

Conversation

@qiyundai
Copy link
Copy Markdown
Collaborator

@qiyundai qiyundai commented May 6, 2026

Summary

  • Options list now renders inside the field card border rather than below it as a sibling
  • Replaced the Disclosure/DisclosureTitle expand trigger with an inline ListBulleted icon in the field row (new 5th grid column)
  • Icon only appears for fields that have selectable options; absent for plain fields
  • Icon highlights in selection-ring color when the panel is open
  • Starting a field drag collapses all open option panels (mutually exclusive interactions)
  • Removed redundant borders from individual option rows; drag-over ring feedback retained

Test plan

  • Open an event with a scope RSVP config that has selectable fields (e.g. a select/multi-select field)
  • Confirm the ListBulleted icon appears inline next to the drag handle only for option-bearing fields
  • Click the icon — options panel expands inside the field card, below a divider
  • Click again — panel collapses
  • While a panel is open, drag a field — confirm the panel collapses and the drag proceeds normally
  • Confirm fields without options show no list icon and no extra column gap
  • Confirm option drag-to-reorder still works inside the expanded panel
  • Confirm toggling "Appears on form" off hides the icon and collapses the panel

🤖 Generated with Claude Code

qiyundai and others added 8 commits May 6, 2026 10:59
- 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>
@qiyundai qiyundai merged commit cebe155 into configs May 8, 2026
3 checks passed
@qiyundai qiyundai mentioned this pull request May 29, 2026
5 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant