@@ -12,6 +12,7 @@ import {
1212 PricingPlanFormPayload ,
1313 ContractorOnboardingContractDetailsFormPayload ,
1414} from '@/src/flows/ContractorOnboarding/types' ;
15+ import { normalizeFieldErrors } from '@/src/lib/mutations' ;
1516
1617type ContractorOnboardingFormProps = {
1718 onSubmit : (
@@ -76,8 +77,39 @@ export function ContractorOnboardingForm({
7677 // eslint-disable-next-line react-hooks/exhaustive-deps
7778 } , [ ] ) ;
7879
79- const handleSubmit = async ( values : Record < string , unknown > ) => {
80- await onSubmit ( values as $TSFixMe ) ;
80+ const handleSubmit = async (
81+ values : Record < string , unknown > ,
82+ event ?: React . BaseSyntheticEvent ,
83+ ) => {
84+ const nativeEvent = event ?. nativeEvent as $TSFixMe ;
85+
86+ if ( nativeEvent ?. isDraftSubmission ) {
87+ const { onSuccess, onError } = nativeEvent . draftCallbacks ;
88+
89+ try {
90+ await contractorOnboardingBag . onSubmit ( values ) ;
91+ onSuccess ?.( ) ;
92+ } catch ( error : $TSFixMe ) {
93+ const currentStepName =
94+ contractorOnboardingBag . stepState . currentStep . name ;
95+ const currentStepFields =
96+ contractorOnboardingBag . meta ?. fields ?. [
97+ currentStepName as keyof typeof contractorOnboardingBag . meta . fields
98+ ] ;
99+
100+ const normalizedFieldErrors = normalizeFieldErrors (
101+ error ?. fieldErrors || [ ] ,
102+ currentStepFields ,
103+ ) ;
104+ onError ?.( {
105+ error : error ?. error || ( error as Error ) ,
106+ rawError : error ?. rawError || ( error as Record < string , unknown > ) ,
107+ fieldErrors : normalizedFieldErrors ,
108+ } ) ;
109+ }
110+ } else {
111+ await onSubmit ( values as $TSFixMe ) ;
112+ }
81113 } ;
82114
83115 return (
0 commit comments