Skip to content

Commit a9eda9e

Browse files
authored
fix(money) - parse values before prettifying (#1001)
* fix(money) - parse values before prettifying * fix engagement visibility * fix prettify values * add tests prettifyFormValues * fix recursive bug * fix review tests * fix meta * fix tests * remove radio transformation * remove log
1 parent 5054057 commit a9eda9e

12 files changed

Lines changed: 312 additions & 151 deletions

File tree

example/src/ReviewOnboardingStep.tsx

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -243,17 +243,23 @@ export const ReviewOnboardingStep = ({
243243
>
244244
Edit Basic Information
245245
</button>
246-
<h2 className='title'>Engagement Agreement Details</h2>
247-
<ReviewMeta
248-
meta={onboardingBag.meta.fields.engagement_agreement_details}
249-
/>
250-
<button
251-
className='back-button'
252-
onClick={() => onboardingBag.goTo('engagement_agreement_details')}
253-
disabled={onboardingBag.isEmploymentReadOnly}
254-
>
255-
Edit Engagement Agreement Details
256-
</button>
246+
{Object.keys(onboardingBag.meta.fields.engagement_agreement_details)
247+
.length > 0 && (
248+
<>
249+
<h2 className='title'>Engagement Agreement Details</h2>
250+
<ReviewMeta
251+
meta={onboardingBag.meta.fields.engagement_agreement_details}
252+
/>
253+
<button
254+
className='back-button'
255+
onClick={() => onboardingBag.goTo('engagement_agreement_details')}
256+
disabled={onboardingBag.isEmploymentReadOnly}
257+
>
258+
Edit Engagement Agreement Details
259+
</button>
260+
</>
261+
)}
262+
257263
<h2 className='title'>Contract Details</h2>
258264
<ReviewMeta meta={onboardingBag.meta.fields.contract_details} />
259265
<button

src/components/form/utils.ts

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -248,14 +248,6 @@ export const fieldTypesTransformations: Record<string, $TSFixMe> = {
248248
convertFromCents(value) ?? '',
249249
transformValueToAPI: () => convertToCents,
250250
},
251-
[supportedTypes.RADIO]: {
252-
transformValueToAPI: (field: $TSFixMe) => (value: string) => {
253-
if (field.transformToBool) {
254-
return value === 'yes';
255-
}
256-
return value;
257-
},
258-
},
259251
[supportedTypes.CHECKBOX]: {
260252
transformValueToAPI: (field: $TSFixMe) => (value: string | boolean) => {
261253
if (value === undefined) {

src/flows/ContractorOnboarding/hooks.tsx

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -811,26 +811,32 @@ export const useContractorOnboarding = ({
811811
select_country: prettifyFormValues(
812812
selectCountryInitialValues,
813813
stepFields.select_country,
814+
{ skipMoneyConversion: true },
814815
),
815816
basic_information: prettifyFormValues(
816817
basicInformationInitialValues,
817818
stepFields.basic_information,
819+
{ skipMoneyConversion: true },
818820
),
819821
contract_details: prettifyFormValues(
820822
contractDetailsInitialValues,
821823
stepFields.contract_details,
824+
{ skipMoneyConversion: true },
822825
),
823826
contract_preview: prettifyFormValues(
824827
contractPreviewInitialValues,
825828
stepFields.contract_preview,
829+
{ skipMoneyConversion: true },
826830
),
827831
pricing_plan: prettifyFormValues(
828832
pricingPlanInitialValues,
829833
stepFields.pricing_plan,
834+
{ skipMoneyConversion: true },
830835
),
831836
eligibility_questionnaire: prettifyFormValues(
832837
eligibilityQuestionnaireInitialValues,
833838
stepFields.eligibility_questionnaire,
839+
{ skipMoneyConversion: true },
834840
),
835841
};
836842

@@ -953,12 +959,13 @@ export const useContractorOnboarding = ({
953959

954960
async function onSubmit(values: FieldValues) {
955961
const currentStepName = stepState.currentStep.name;
962+
const parsedValues = await parseFormValues(values);
963+
956964
if (currentStepName in fieldsMetaRef.current) {
957965
fieldsMetaRef.current[
958966
currentStepName as keyof typeof fieldsMetaRef.current
959-
] = prettifyFormValues(values, stepFields[currentStepName]);
967+
] = prettifyFormValues(parsedValues, stepFields[currentStepName]);
960968
}
961-
const parsedValues = await parseFormValues(values);
962969
switch (stepState.currentStep.name) {
963970
case 'select_country': {
964971
setInternalCountryCode(parsedValues.country);

src/flows/ContractorOnboarding/tests/ContractorOnboarding.test.tsx

Lines changed: 10 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -48,44 +48,12 @@ import {
4848
} from '@/src/common/api/fixtures/contractors-subscriptions';
4949
import { mockBlockedEligibilityQuestionnaireResponse } from '@/src/common/api/fixtures/eligibility-questionnaire';
5050
import { mockContractorBasicInformationSchema } from '@/src/common/api/fixtures/contractors';
51+
import { PrettifiedValuesRenderer } from '@/src/tests/components/PrettifiedValuesRenderer';
5152

5253
const mockOnSubmit = vi.fn();
5354
const mockOnSuccess = vi.fn();
5455
const mockOnError = vi.fn();
5556

56-
// Helper component to display employment data in tests
57-
function Review({ values }: { values: Record<string, unknown> }) {
58-
return (
59-
<div className='onboarding-values'>
60-
{Object.entries(values).map(([key, value]) => {
61-
if (Array.isArray(value)) {
62-
return (
63-
<pre key={key}>
64-
{key}: {value.join(', ')}
65-
</pre>
66-
);
67-
}
68-
if (typeof value === 'object') {
69-
return (
70-
<pre key={key}>
71-
{key}: {JSON.stringify(value)}
72-
</pre>
73-
);
74-
}
75-
if (typeof value === 'string' || typeof value === 'number') {
76-
return (
77-
<pre key={key}>
78-
{key}: {value}
79-
</pre>
80-
);
81-
}
82-
83-
return null;
84-
})}
85-
</div>
86-
);
87-
}
88-
8957
const CONTRACTOR_ONBOARDING_STEPS: Record<number, string> = {
9058
[0]: 'Select Country',
9159
[1]: 'Basic Information',
@@ -211,23 +179,21 @@ describe('ContractorOnboardingFlow', () => {
211179
<div className='contractor-onboarding-review'>
212180
<h2 className='title'>Review</h2>
213181
<h2 className='title'>Basic Information</h2>
214-
<Review
182+
<PrettifiedValuesRenderer
215183
values={
216-
contractorOnboardingBag.stepState.values?.basic_information ||
217-
{}
184+
contractorOnboardingBag.meta.fields?.basic_information || {}
218185
}
219186
/>
220187
<h2 className='title'>Pricing Plan</h2>
221-
<Review
188+
<PrettifiedValuesRenderer
222189
values={
223-
contractorOnboardingBag.stepState.values
224-
?.pricing_plan_details || {}
190+
contractorOnboardingBag.meta.fields?.pricing_plan_details || {}
225191
}
226192
/>
227193
<h2 className='title'>Contract Details</h2>
228-
<Review
194+
<PrettifiedValuesRenderer
229195
values={
230-
contractorOnboardingBag.stepState.values?.contract_details || {}
196+
contractorOnboardingBag.meta.fields?.contract_details || {}
231197
}
232198
/>
233199
<BackButton>Back</BackButton>
@@ -344,21 +310,21 @@ describe('ContractorOnboardingFlow', () => {
344310
<div className='contractor-onboarding-review'>
345311
<h2 className='title'>Review</h2>
346312
<h2 className='title'>Basic Information</h2>
347-
<Review
313+
<PrettifiedValuesRenderer
348314
values={
349315
contractorOnboardingBag.stepState.values?.basic_information ||
350316
{}
351317
}
352318
/>
353319
<h2 className='title'>Pricing Plan</h2>
354-
<Review
320+
<PrettifiedValuesRenderer
355321
values={
356322
contractorOnboardingBag.stepState.values
357323
?.pricing_plan_details || {}
358324
}
359325
/>
360326
<h2 className='title'>Contract Details</h2>
361-
<Review
327+
<PrettifiedValuesRenderer
362328
values={
363329
contractorOnboardingBag.stepState.values?.contract_details || {}
364330
}

src/flows/CostCalculator/CostCalculatorForm.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ export function CostCalculatorForm({
107107

108108
if (costCalculatorBag?.meta?.fields) {
109109
costCalculatorBag.meta.fields = prettifyFormValues(
110-
values,
110+
parsedValues,
111111
costCalculatorBag.fields,
112112
);
113113
costCalculatorBag.meta.fields['employer_currency_slug'] =

src/flows/CreateCompany/hooks.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -173,12 +173,13 @@ export const useCreateCompany = ({
173173

174174
async function onSubmit(values: FieldValues) {
175175
const currentStepName = stepState.currentStep.name;
176+
const parsedValues = await parseFormValues(values);
176177
if (currentStepName in fieldsMetaRef.current) {
177178
fieldsMetaRef.current[
178179
currentStepName as keyof typeof fieldsMetaRef.current
179-
] = prettifyFormValues(values, stepFields[currentStepName]);
180+
] = prettifyFormValues(parsedValues, stepFields[currentStepName]);
180181
}
181-
const parsedValues = await parseFormValues(values);
182+
182183
switch (stepState.currentStep.name) {
183184
case 'company_basic_information': {
184185
setInternalCountryCode(parsedValues.country_code);

src/flows/Onboarding/hooks.tsx

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -724,22 +724,27 @@ export const useOnboarding = ({
724724
select_country: prettifyFormValues(
725725
selectCountryInitialValues,
726726
stepFields.select_country,
727+
{ skipMoneyConversion: true },
727728
),
728729
basic_information: prettifyFormValues(
729730
basicInformationInitialValues,
730731
stepFields.basic_information,
732+
{ skipMoneyConversion: true },
731733
),
732734
engagement_agreement_details: prettifyFormValues(
733735
engagementAgreementDetailsInitialValues,
734736
stepFields.engagement_agreement_details,
737+
{ skipMoneyConversion: true },
735738
),
736739
contract_details: prettifyFormValues(
737740
contractDetailsInitialValues,
738741
stepFields.contract_details,
742+
{ skipMoneyConversion: true },
739743
),
740744
benefits: prettifyFormValues(
741745
benefitsInitialValues,
742746
stepFields.benefits,
747+
{ skipMoneyConversion: true },
743748
),
744749
};
745750

@@ -817,13 +822,13 @@ export const useOnboarding = ({
817822
async function onSubmit(values: FieldValues) {
818823
// Prettify values for the current step
819824
const currentStepName = stepState.currentStep.name;
825+
const parsedValues = await parseFormValues(values);
820826
if (currentStepName in fieldsMetaRef.current) {
821827
fieldsMetaRef.current[
822828
currentStepName as keyof typeof fieldsMetaRef.current
823-
] = prettifyFormValues(values, stepFields[currentStepName]);
829+
] = prettifyFormValues(parsedValues, stepFields[currentStepName]);
824830
}
825831

826-
const parsedValues = await parseFormValues(values);
827832
refetchCompany();
828833
switch (stepState.currentStep.name) {
829834
case 'select_country': {

0 commit comments

Comments
 (0)