Replaces Phase 2 placeholder routes for /settings/clinics and
/settings/doctors with real list + add/edit slideouts backed directly by
the platform's ClinicCreateInput / DoctorCreateInput mutations. Rewrites
/settings/team to fetch roles via getRoles and let admins invite members
(sendInvitations) and change roles (updateWorkspaceMemberRole).
- src/components/forms/clinic-form.tsx — reusable form + GraphQL input
transformer, handles address/phone/email composite types
- src/components/forms/doctor-form.tsx — reusable form with clinic
dropdown and currency conversion for consultation fees
- src/components/forms/invite-member-form.tsx — multi-email chip input
with comma-to-commit UX (AriaTextField doesn't expose onKeyDown)
- src/pages/clinics.tsx — list + slideout using ClinicForm, marks the
clinics setup step complete on first successful add
- src/pages/doctors.tsx — list + slideout with parallel clinic fetch,
disabled-state when no clinics exist, marks doctors step complete
- src/pages/team-settings.tsx — replaces email-pattern role inference
with real getRoles + in-row role Select, adds invite slideout, marks
team step complete on successful invitation
- src/main.tsx — routes /settings/clinics and /settings/doctors to real
pages instead of SettingsPlaceholder stubs
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>