WORKFLOW-APP/components
Ysterbaard 1fecf02214 Add pre-send validation gate + idempotent sign-back to appointment flow
PB: 3 new fields on ysterbaard_director_appointments
  - proceed_anyway (bool) — true if user proceeded with missing emails
  - missing_emails (text) — comma-separated keys
  - missing_emails_detail (text) — JSON per-recipient validation

App:
  - POST /api/appointments: builds recipient report (initial +
    distro); returns 422 + report if proceed_anyway is missing
    and any recipient is missing/invalid. preview=1 returns the
    report without sending.
  - PATCH /api/appointments/[id]: tightened idempotency guard to
    also short-circuit on signature_received (not just
    mail_sent_to_all). Prevents double-send on double-click.
  - DirectorAppointmentTab: two-step modal — "Validate recipients"
    surfaces the report (status dots + per-recipient email),
    then Send / Proceed anyway / Fix records first. New
    "company_email" gap surfaced before any email leaves.
  - lib/format.ts: isValidEmail() shared helper.

End-to-end tested: 422 enforces server-side, preview returns
the report, double-PATCH signs only once.
2026-08-18 21:29:08 +02:00
..
ActionButton.tsx wip: registration wizard, address splits, document panel, appointments 2026-08-17 18:33:56 +02:00
ActionsDropdown.tsx wip: registration wizard, address splits, document panel, appointments 2026-08-17 18:33:56 +02:00
AddEntityModal.tsx Use type=tel for all ID number fields to trigger numeric keypad on mobile 2026-07-30 17:53:41 +02:00
AgentVoiceReply.tsx feat: Check Mail button on Step 2 + check-cipc-mail API route 2026-08-11 18:33:03 +02:00
ApproveButton.tsx wip: registration wizard, address splits, document panel, appointments 2026-08-17 18:33:56 +02:00
ClientToggle.tsx Add native Share button to registration link dialog 2026-07-30 16:38:05 +02:00
CompanyEditButton.tsx feat: Check Mail button on Step 2 + check-cipc-mail API route 2026-08-11 18:33:03 +02:00
Dashboard.tsx Add native Share button to registration link dialog 2026-07-30 16:38:05 +02:00
DeleteConfirmModal.tsx Add native Share button to registration link dialog 2026-07-30 16:38:05 +02:00
DirectorAppointmentTab.tsx Add pre-send validation gate + idempotent sign-back to appointment flow 2026-08-18 21:29:08 +02:00
DirectorForm.tsx Use type=tel for all ID number fields to trigger numeric keypad on mobile 2026-07-30 17:53:41 +02:00
DirectorStep.tsx wip: registration wizard, address splits, document panel, appointments 2026-08-17 18:33:56 +02:00
DocumentsPanel.tsx wip: registration wizard, address splits, document panel, appointments 2026-08-17 18:33:56 +02:00
DocumentTypeManager.tsx wip: registration wizard, address splits, document panel, appointments 2026-08-17 18:33:56 +02:00
EditEntityModal.tsx Add onboarding form fields to companies + directors (visual + editable) 2026-08-18 12:25:06 +02:00
GroupReport.tsx feat: Check Mail button on Step 2 + check-cipc-mail API route 2026-08-11 18:33:03 +02:00
GroupsExplorer.tsx feat: Check Mail button on Step 2 + check-cipc-mail API route 2026-08-11 18:33:03 +02:00
LinkedCompaniesList.tsx Add native Share button to registration link dialog 2026-07-30 16:38:05 +02:00
LinkedDirectorsList.tsx Add native Share button to registration link dialog 2026-07-30 16:38:05 +02:00
LinkEntityModal.tsx Add native Share button to registration link dialog 2026-07-30 16:38:05 +02:00
NavBar.tsx feat: Task Kanban UI + Python task worker 2026-08-17 18:57:02 +02:00
OnboardingWizard.tsx feat: split company physical and postal addresses into structured fields 2026-08-14 21:00:14 +02:00
OrgChart.tsx Add native Share button to registration link dialog 2026-07-30 16:38:05 +02:00
PageHeader.tsx feat: initialize full ysterbaard frontend application 2026-07-23 19:10:47 +02:00
PrintButton.tsx feat: print to PDF button on registration detail view 2026-08-14 19:51:59 +02:00
ProcessActions.tsx feat: initialize full ysterbaard frontend application 2026-07-23 19:10:47 +02:00
QueryProvider.tsx feat: initialize full ysterbaard frontend application 2026-07-23 19:10:47 +02:00
RegistrationDocuments.tsx feat: Check Mail button on Step 2 + check-cipc-mail API route 2026-08-11 18:33:03 +02:00
RegistrationWizard.tsx wip: registration wizard, address splits, document panel, appointments 2026-08-17 18:33:56 +02:00
ResolutionExplorer.tsx wip: registration wizard, address splits, document panel, appointments 2026-08-17 18:33:56 +02:00
RouteChrome.tsx Add native Share button to registration link dialog 2026-07-30 16:38:05 +02:00
ShareLinkButton.tsx feat: initialize full ysterbaard frontend application 2026-07-23 19:10:47 +02:00
Skeleton.tsx feat: initialize full ysterbaard frontend application 2026-07-23 19:10:47 +02:00
StatCard.tsx feat: initialize full ysterbaard frontend application 2026-07-23 19:10:47 +02:00
StatusActions.tsx wip: registration wizard, address splits, document panel, appointments 2026-08-17 18:33:56 +02:00
StatusBadge.tsx Add native Share button to registration link dialog 2026-07-30 16:38:05 +02:00
Step2Actions.tsx feat: add BizPortal tab + name-already-approved flow + registrations improvements 2026-08-14 18:08:51 +02:00
Toast.tsx Director appointment acceptance — full feature 2026-08-17 18:39:14 +02:00
UploadDocumentModal.tsx wip: registration wizard, address splits, document panel, appointments 2026-08-17 18:33:56 +02:00
VoiceField.tsx feat: Check Mail button on Step 2 + check-cipc-mail API route 2026-08-11 18:33:03 +02:00