Skip to content

fix(meeting-form): merge Done and Add another mode into one click - #561

Merged
tunile943 merged 2 commits into
masterfrom
fix/linked-schedule-confirm-flow
Aug 23, 2026
Merged

fix(meeting-form): merge Done and Add another mode into one click#561
tunile943 merged 2 commits into
masterfrom
fix/linked-schedule-confirm-flow

Conversation

@tunile943

@tunile943 tunile943 commented Aug 23, 2026

Copy link
Copy Markdown
Member

@coderabbitai summary

Description

Adding a second linked schedule used to take two clicks that were really one intention. First Done under the recurrence editor, which collapsed the meeting's own schedule into its summary card; only then did "Add another mode for other days" appear, which opened the second schedule's fields. Done did nothing else — it saved nothing, gated nothing about the payload, and was invisible unless you already knew a second schedule was coming. So the form asked the admin to confirm a schedule they had not been told anything was going to happen to.

Now one click does both halves. "Add another mode for other days" sits under the open recurrence editor, and taking it collapses that editor into its summary card and opens the new schedule's card below it in the same step. Done is gone. Nothing about what gets submitted changes — this is purely the composition flow.

  • frontend/app/components/meeting-form/MeetingSchedules.tsx: the add trigger no longer requires isConfirmed, so it is reachable from the still-open editor. It carries the gate Done used to imply instead: it renders only for a weekly series with at least one weekday selected and a readable time range (scheduleInstants !== null) — exactly what the summary card has to print and what the linked row inherits, so there is never a click that would collapse into a blank card. A blocked add (addBlockedNote) now disables the trigger and shows the note beneath it, wired with aria-describedby, rather than replacing the trigger with the note; a bare warning about a schedule nobody had asked for read as an unprompted error, whereas a disabled control plus a reason reads as an explanation.
  • frontend/app/components/meeting-form/RecurringMeeting.tsx, RecurringMeeting.module.scss: drop the onConfirm prop and the Done button/row it rendered, plus its now-dead styles. The recurrence editor goes back to being only recurrence controls.
  • frontend/app/components/meeting-form/EditMeeting.tsx, NewMeeting.tsx: stop passing onConfirm. Both hosts still pass isConfirmed — the collapsed-card state and its Edit this schedule link are unchanged, only the thing that sets it moved.
  • frontend/hooks/useMeetingForm.ts: startLinkedDraft now also sets isScheduleConfirmed, which is what merges the two steps. isScheduleConfirmed stays purely a display state.
  • frontend/app/components/meeting-form/MeetingSchedules.module.scss: disabled styling for the trigger (greyed, not-allowed, no hover).
  • frontend/tests/component/MeetingSchedules.test.tsx, EditMeeting.test.tsx, NewMeeting.test.tsx, frontend/tests/e2e/20-linked-meeting-modes.spec.ts: drop every click("Done") step; assert the one-click behavior directly (before the click: no summary text, no draft; after it: both). New cases cover the two new withholding conditions — a weekly pattern with no day selected, and an unreadable Date/Time — and the blocked case now asserts toBeDisabled() instead of absence.
  • docs/01-user-guide/how-to/set-up-a-recurring-meeting.md, docs/02-handoff/technical-decisions.md: renumber the how-to steps for the merged click, and record in the linked-schedule decision why starting the second schedule is a single click and when the trigger is offered.

Testing

  • yarn test:all from frontend/ (lint, lint:css, typecheck, unit, component, integration, e2e) — green.
  • Targeted: yarn test:component MeetingSchedules and yarn test:e2e tests/e2e/20-linked-meeting-modes.spec.ts.
  • By hand, create path: open New Meeting, fill title/date/time, tick This meeting is recurring, pick weekdays. The add trigger appears under the still-open recurrence editor — no Done anywhere. Click it once: the recurrence editor becomes the summary card and the second schedule's card opens below it in the same click. Untick a day until none are selected — the trigger disappears; clear the Time field — likewise.
  • By hand, edit path: open an existing weekly meeting, edit its title without saving. The trigger is visible but disabled, with "Save this meeting's changes first." beneath it (previously the trigger vanished and only the note showed). Save, and it enables.
  • Grepped the suites and docs for assertions and prose pinned to the old two-step flow ("Done", onConfirm, confirmButton/confirmRow, "collapses ... then"). All updated; the only remaining onConfirm hits are unrelated modal props (Suspend/Resume/delete confirmations).

Area(s) Touched

Product areas

  • auth — sign-in, sessions, NextAuth, role-based access
  • admin — /admin shell (Diagnostics, Users, Import, Export tabs)
  • docs — /docs Resources page (rendering, navigation, search)
  • ui/ux — frontend layout/styling not tied to a specific integration

Integrations

  • google-calendar — Google Calendar sync
  • zoom-api — Zoom meeting/host sync

Engineering

  • security — auth hardening, data exposure, dependency/security scanning
  • testing — test suite (Jest/Playwright) changes
  • github-actions — workflows, Dependabot config, other .github/ CI tooling
  • cleanup — refactor or dead-code removal, no behavior change
  • documentation — docs/ or README changes only

Pre-merge Checklist

  • Code follows current formatting conventions and passes lint (yarn lint).
  • Comments are appropriate — only where genuinely non-obvious, not restating what the code already says.
  • All test suites pass, both run locally and green in GitHub CI. Do not merge if any test suite is failing.
  • A test suite was added or updated for the feature/fix in this PR. Double-check this if you change a feature and did not update the test suites.
  • Only files relevant to this change are committed — no stray or unrelated files.
  • If this branch has a merge conflict with master, master was merged into this branch first (not the other way around).
  • The rest of this PR description (Description, Testing) is filled out, not left as template placeholders.

Stacked on #560 — base branch is fix/linked-schedule-recreate-guard, not master. Review the diff against that base rather than the full stack.

@vercel

vercel Bot commented Aug 23, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
ithaca-recovery Ready Ready Preview Aug 23, 2026 7:16pm

@tunile943 tunile943 changed the title fix/linked schedule confirm flow fix(meeting-form): merge Done and Add another mode into one click Aug 23, 2026
@coderabbitai

coderabbitai Bot commented Aug 23, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 43d6fdcb-81bd-4238-9595-74e50ee77e1f

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions github-actions Bot added scope: testing Test suite (Jest/Playwright) changes scope: ui/ux Frontend layout/styling not tied to a specific integration labels Aug 23, 2026
@tunile943
tunile943 force-pushed the fix/linked-schedule-recreate-guard branch from a57d08c to a8bdb6c Compare August 23, 2026 19:07
Base automatically changed from fix/linked-schedule-recreate-guard to master August 23, 2026 19:14
"Add another mode for other days" now sits under the open recurrence editor and does both
halves itself: it collapses this meeting's schedule into its summary card and opens the new
schedule's fields below it. The separate "Done" button that used to collapse the editor first
is gone, and the trigger carries its gate instead -- it appears only for a weekly series with
at least one weekday and a readable time range, which is what the card summarises and the
linked row inherits. A blocked add now disables the trigger and explains it rather than
replacing it, so the note reads as the reason a control is off.
@tunile943
tunile943 force-pushed the fix/linked-schedule-confirm-flow branch from 70331e9 to 356b63d Compare August 23, 2026 19:15
@tunile943
tunile943 merged commit a95cf77 into master Aug 23, 2026
26 of 35 checks passed
@tunile943
tunile943 deleted the fix/linked-schedule-confirm-flow branch August 23, 2026 19:35
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

scope: testing Test suite (Jest/Playwright) changes scope: ui/ux Frontend layout/styling not tied to a specific integration

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant