From 1173822344741821f96b76e1da76d6b38d107a3f Mon Sep 17 00:00:00 2001 From: sean-brydon <55134778+sean-brydon@users.noreply.github.com> Date: Thu, 30 Oct 2025 09:16:14 +0000 Subject: [PATCH] chore: invites to submit hook instead of relying on state (#24744) ## What does this PR do? Pass invites to submit hook instead of relying on state. State can be out of sync on last step as its not commited onChange but onsubmit. --- ## Summary by cubic Pass the invite list directly to the onboarding submit hook to avoid stale state and ensure the final step submits the correct invites. Fixes missed or outdated invites during onboarding. - **Bug Fixes** - submitOnboarding now accepts invites as a parameter and uses them for submission. - OrganizationInviteView passes invitesData to submitOnboarding instead of relying on store.invites. --- apps/web/modules/onboarding/hooks/useSubmitOnboarding.ts | 9 ++++++--- .../organization/invite/organization-invite-view.tsx | 2 +- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/apps/web/modules/onboarding/hooks/useSubmitOnboarding.ts b/apps/web/modules/onboarding/hooks/useSubmitOnboarding.ts index 5d24c1cda2..0e5db227b7 100644 --- a/apps/web/modules/onboarding/hooks/useSubmitOnboarding.ts +++ b/apps/web/modules/onboarding/hooks/useSubmitOnboarding.ts @@ -16,7 +16,11 @@ export const useSubmitOnboarding = () => { const intentToCreateOrg = trpc.viewer.organizations.intentToCreateOrg.useMutation(); - const submitOnboarding = async (store: OnboardingState, userEmail: string) => { + const submitOnboarding = async ( + store: OnboardingState, + userEmail: string, + invitesToSubmit: OnboardingState["invites"] + ) => { setIsSubmitting(true); setError(null); @@ -26,7 +30,6 @@ export const useSubmitOnboarding = () => { organizationDetails, organizationBrand, teams, - invites, inviteRole, resetOnboarding, } = store; @@ -46,7 +49,7 @@ export const useSubmitOnboarding = () => { })); // Prepare invites data - const invitedMembersData = invites + const invitedMembersData = invitesToSubmit .filter((invite) => invite.email.trim().length > 0) .map((invite) => ({ email: invite.email, diff --git a/apps/web/modules/onboarding/organization/invite/organization-invite-view.tsx b/apps/web/modules/onboarding/organization/invite/organization-invite-view.tsx index a2b2b5381c..d326202712 100644 --- a/apps/web/modules/onboarding/organization/invite/organization-invite-view.tsx +++ b/apps/web/modules/onboarding/organization/invite/organization-invite-view.tsx @@ -63,7 +63,7 @@ export const OrganizationInviteView = ({ userEmail }: OrganizationInviteViewProp const handleSubmitOnboarding = async (invitesData: FormValues["invites"]) => { // Save invites to store before submitting setInvites(invitesData); - await submitOnboarding(store, userEmail); + await submitOnboarding(store, userEmail, invitesData); }; const handleContinue = async (data?: FormValues) => {