@remoteoss/remote-flows 1.44.0 → 1.46.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ButtonDefault-HBOULH5V.js +2 -0
- package/dist/CheckboxFieldDefault-62URAHJV.js +2 -0
- package/dist/CountryFieldDefault-24NNZN2C.js +2 -0
- package/dist/DatePickerFieldDefault-NMUCZ4U2.js +2 -0
- package/dist/DrawerDefault-O7NUFWJ4.js +2 -0
- package/dist/EmailFieldDefault-7USH7I6B.js +2 -0
- package/dist/FieldsetToggleButtonDefault-MIRCZJKA.js +2 -0
- package/dist/FileUploadFieldDefault-4NW5VLF6.js +2 -0
- package/dist/MultiSelectFieldDefault-S45Z53ZY.js +2 -0
- package/dist/NumberFieldDefault-P7TLA6SH.js +2 -0
- package/dist/RadioGroupFieldDefault-X44FYUA3.js +2 -0
- package/dist/SelectFieldDefault-PLDXHTQY.js +2 -0
- package/dist/StatementDefault-RDC5G24K.js +2 -0
- package/dist/TableFieldDefault-ES7OIYX5.js +2 -0
- package/dist/TelFieldDefault-IYGEEV5V.js +2 -0
- package/dist/TextAreaFieldDefault-C6M3PIV2.js +2 -0
- package/dist/TextFieldDefault-FTX32V3D.js +2 -0
- package/dist/TimeFieldDefault-J6PKL5T4.js +2 -0
- package/dist/WorkScheduleFieldDefault-JAU2YFQF.js +2 -0
- package/dist/ZendeskDrawerDefault-HGKAUCUV.js +2 -0
- package/dist/{chunk-D4XBTJOV.js → chunk-2CGPCBQY.js} +2 -2
- package/dist/{chunk-HXEOVMUT.js → chunk-2EGFPBT7.js} +2 -2
- package/dist/chunk-2FIBHHT7.js +2 -0
- package/dist/chunk-2FIBHHT7.js.map +1 -0
- package/dist/{chunk-PRXJRF7V.js → chunk-2GAKAYG7.js} +2 -2
- package/dist/{chunk-GGDVTGHG.js → chunk-2QQZODFC.js} +2 -2
- package/dist/{chunk-7D4XFAQR.js → chunk-3HGUMECW.js} +2 -2
- package/dist/{chunk-F35ALUPA.js → chunk-3ISSVSL5.js} +2 -2
- package/dist/chunk-3O7L6JUX.js +2 -0
- package/dist/chunk-3O7L6JUX.js.map +1 -0
- package/dist/{chunk-746NEWTS.js → chunk-3OJAX7QH.js} +2 -2
- package/dist/{chunk-Z5LVLVTU.js → chunk-3OTZWYVQ.js} +2 -2
- package/dist/{chunk-Y3CJRZLA.js → chunk-4FGKIGKF.js} +2 -2
- package/dist/chunk-4FV6Z3HE.js +2 -0
- package/dist/{chunk-JVLARDTF.js.map → chunk-4FV6Z3HE.js.map} +1 -1
- package/dist/{chunk-74ICDGQK.js → chunk-4X7TVFHA.js} +2 -2
- package/dist/chunk-5MPW7QWT.js +2 -0
- package/dist/{chunk-TQH4OKHR.js → chunk-5N5B5AU2.js} +2 -2
- package/dist/{chunk-QO7Y6QRE.js → chunk-64OGJGKN.js} +2 -2
- package/dist/{chunk-LSC6NTXD.js → chunk-65G3JQ7T.js} +2 -2
- package/dist/{chunk-43NIG25S.js → chunk-6AZKF6RW.js} +2 -2
- package/dist/{chunk-OPX7E3W2.js → chunk-6JTUAJBZ.js} +2 -2
- package/dist/{chunk-3BAVRWSN.js → chunk-6PP3Y63Z.js} +2 -2
- package/dist/{chunk-S3EXF5DV.js → chunk-6QEAL5BB.js} +2 -2
- package/dist/{chunk-LFHFZU6X.js → chunk-6SNWSCXH.js} +2 -2
- package/dist/{chunk-KT4Y4UPD.js → chunk-74A4TMTF.js} +2 -2
- package/dist/{chunk-43FMKELR.js → chunk-75N7DFXJ.js} +2 -2
- package/dist/chunk-7EFZVAWU.js +2 -0
- package/dist/chunk-7EFZVAWU.js.map +1 -0
- package/dist/{chunk-7NFCUTWO.js → chunk-7UFIQ64V.js} +2 -2
- package/dist/{chunk-MGDYS2EY.js → chunk-A6KORIJF.js} +2 -2
- package/dist/chunk-AHIJ7DGJ.js +2 -0
- package/dist/chunk-AHIJ7DGJ.js.map +1 -0
- package/dist/{chunk-N6XLGYRK.js → chunk-AHUSQVQY.js} +2 -2
- package/dist/chunk-AVK2P75W.js +2 -0
- package/dist/chunk-AVK2P75W.js.map +1 -0
- package/dist/chunk-AW436CZP.js +2 -0
- package/dist/chunk-AW436CZP.js.map +1 -0
- package/dist/{chunk-CRDG62ZJ.js → chunk-B6YPSCBC.js} +2 -2
- package/dist/{chunk-T5J2Z6ZR.js → chunk-BC4V2YAK.js} +2 -2
- package/dist/{chunk-PQG6KZIO.js → chunk-BGSB3XPW.js} +2 -2
- package/dist/{chunk-D2MZKYRH.js → chunk-BHKAKCV4.js} +2 -2
- package/dist/chunk-BODQC6OK.js +2 -0
- package/dist/chunk-BODQC6OK.js.map +1 -0
- package/dist/{chunk-R4TM2Y3K.js → chunk-BS2YN6CS.js} +2 -2
- package/dist/{chunk-FHIMDCMT.js → chunk-BVKOMSHU.js} +2 -2
- package/dist/{chunk-PSU2AEFU.js → chunk-BZ4VPC4U.js} +2 -2
- package/dist/{chunk-YJFRQSTA.js → chunk-BZA2XA4Q.js} +2 -2
- package/dist/chunk-C4NBYBED.js +2 -0
- package/dist/chunk-C4NBYBED.js.map +1 -0
- package/dist/{chunk-OXTA4W4J.js → chunk-CM4UUBU5.js} +2 -2
- package/dist/{chunk-YWLRVUE3.js → chunk-CUM2NKZ4.js} +2 -2
- package/dist/{chunk-DO7OL4EG.js → chunk-DAYIMXLP.js} +2 -2
- package/dist/{chunk-BUOHZMK6.js → chunk-DDH7MZ7M.js} +2 -2
- package/dist/{chunk-44XEUAFV.js → chunk-DKOETPI4.js} +2 -2
- package/dist/{chunk-QJJZTAG2.js → chunk-DLSHZLHX.js} +2 -2
- package/dist/{chunk-MHIY35CK.js → chunk-DOVE5SYY.js} +2 -2
- package/dist/chunk-DZ3A4POL.js +2 -0
- package/dist/chunk-DZ3A4POL.js.map +1 -0
- package/dist/{chunk-6OHLLH6W.js → chunk-EFIPOWDJ.js} +2 -2
- package/dist/chunk-EOSJHL6M.js +2 -0
- package/dist/chunk-EOSJHL6M.js.map +1 -0
- package/dist/{chunk-FJC6IGXJ.js → chunk-FFFB5CG2.js} +2 -2
- package/dist/{chunk-LBQQSYCG.js → chunk-FIFM55V3.js} +2 -2
- package/dist/{chunk-2BCZXNBX.js → chunk-FQFIRIKU.js} +2 -2
- package/dist/{chunk-PFQB3V2U.js → chunk-FXVHH75C.js} +2 -2
- package/dist/chunk-G2DAXZPD.js +2 -0
- package/dist/chunk-G2DAXZPD.js.map +1 -0
- package/dist/chunk-G3QDDD53.js +2 -0
- package/dist/chunk-G3QDDD53.js.map +1 -0
- package/dist/chunk-GJ2AOENT.js +2 -0
- package/dist/chunk-GJ2AOENT.js.map +1 -0
- package/dist/{chunk-3UBFABDS.js → chunk-GPY3JZJJ.js} +2 -2
- package/dist/{chunk-UT3CQ2DH.js → chunk-GWQJKZ3M.js} +2 -2
- package/dist/{chunk-VZ3JCO23.js → chunk-GYYQWPA6.js} +2 -2
- package/dist/{chunk-LJUWER2H.js → chunk-HFFQ642D.js} +2 -2
- package/dist/{chunk-DMNKKWLY.js → chunk-HQLGDW2G.js} +2 -2
- package/dist/{chunk-PGCS6HUO.js → chunk-HTVGC4KT.js} +2 -2
- package/dist/chunk-HULIBLYP.js +2 -0
- package/dist/chunk-HULIBLYP.js.map +1 -0
- package/dist/{chunk-F7QTO3NU.js → chunk-HWBEYYJO.js} +2 -2
- package/dist/chunk-HYWQLLZC.js +2 -0
- package/dist/chunk-HYWQLLZC.js.map +1 -0
- package/dist/chunk-IAR7QW2Y.js +2 -0
- package/dist/chunk-IAR7QW2Y.js.map +1 -0
- package/dist/{chunk-SQCTVURR.js → chunk-IMCNVNKF.js} +2 -2
- package/dist/{chunk-J2L3CYIS.js → chunk-INUCPQVI.js} +2 -2
- package/dist/{chunk-34JOEA4E.js → chunk-J7I4WJ4G.js} +2 -2
- package/dist/{chunk-4MB3FE3T.js → chunk-JH3WUGO5.js} +2 -2
- package/dist/{chunk-6Z4U4GYV.js → chunk-JJK6BFGN.js} +2 -2
- package/dist/chunk-JK4CPPN4.js +2 -0
- package/dist/chunk-JK4CPPN4.js.map +1 -0
- package/dist/chunk-JPVSXGCC.js +2 -0
- package/dist/chunk-JPVSXGCC.js.map +1 -0
- package/dist/chunk-JXH42V2F.js +2 -0
- package/dist/chunk-JXH42V2F.js.map +1 -0
- package/dist/{chunk-RYUBFXSX.js → chunk-KF54ACZP.js} +2 -2
- package/dist/chunk-KGSH67IW.js +2 -0
- package/dist/chunk-KGSH67IW.js.map +1 -0
- package/dist/{chunk-FG2DNTDR.js → chunk-KZWB4FMM.js} +2 -2
- package/dist/{chunk-LNR6TGLQ.js → chunk-LBMHLNKS.js} +2 -2
- package/dist/{chunk-MKO33XZ5.js → chunk-LD633A5N.js} +2 -2
- package/dist/chunk-LGSOTN4M.js +2 -0
- package/dist/chunk-LGSOTN4M.js.map +1 -0
- package/dist/{chunk-WLPWXK7I.js → chunk-LKTCYO6Y.js} +2 -2
- package/dist/{chunk-JXZX66MM.js → chunk-LQFLXXBR.js} +2 -2
- package/dist/chunk-MAEAZFMR.js +1 -0
- package/dist/{chunk-DSGQZDY6.js → chunk-MZN6VY5F.js} +2 -2
- package/dist/{chunk-DJIQISA2.js → chunk-NDWVOVDM.js} +2 -2
- package/dist/{chunk-WIFDQWVX.js → chunk-NFLN2YB6.js} +2 -2
- package/dist/{chunk-XYF4TIRU.js → chunk-NGCNYQSC.js} +2 -2
- package/dist/chunk-NI4K773A.js +2 -0
- package/dist/chunk-NI4K773A.js.map +1 -0
- package/dist/{chunk-3GCJILCE.js → chunk-NQWB6O7Z.js} +2 -2
- package/dist/{chunk-G2LZFGZA.js → chunk-NXRWBI36.js} +2 -2
- package/dist/chunk-NXRWBI36.js.map +1 -0
- package/dist/{chunk-FCY5FJMC.js → chunk-O3Y4DVNY.js} +2 -2
- package/dist/{chunk-MC6VR4AZ.js → chunk-OUFFAMO5.js} +2 -2
- package/dist/{chunk-DIH7KHWI.js → chunk-PMCCHSXD.js} +2 -2
- package/dist/{chunk-7O4Y3DAM.js → chunk-PMIGYQEX.js} +2 -2
- package/dist/{chunk-HBOMEPXQ.js → chunk-QHSIUKH6.js} +2 -2
- package/dist/{chunk-ZOTY3CAM.js → chunk-QO7HHRNA.js} +2 -2
- package/dist/{chunk-HHFGG3RU.js → chunk-R2S73YZ5.js} +2 -2
- package/dist/chunk-R36IOANR.js +2 -0
- package/dist/chunk-R36IOANR.js.map +1 -0
- package/dist/{chunk-ECGNGVSC.js → chunk-R4JUCNE4.js} +2 -2
- package/dist/{chunk-BB5K57D4.js → chunk-RBUSLLAQ.js} +2 -2
- package/dist/chunk-RG67OYQN.js +2 -0
- package/dist/chunk-RG67OYQN.js.map +1 -0
- package/dist/{chunk-BOE6NL6T.js → chunk-RN3WPVBZ.js} +2 -2
- package/dist/{chunk-FQFLC6YA.js → chunk-RRERBS7F.js} +2 -2
- package/dist/chunk-S5BNS2JE.js +2 -0
- package/dist/chunk-S5BNS2JE.js.map +1 -0
- package/dist/{chunk-OK4RV6ZT.js → chunk-STFOY2NW.js} +2 -2
- package/dist/{chunk-WYUPZMPN.js → chunk-STJU6LZF.js} +2 -2
- package/dist/{chunk-PIKEYX3V.js → chunk-SU4FMKBZ.js} +2 -2
- package/dist/{chunk-CPRWWJYQ.js → chunk-SUONIYV5.js} +2 -2
- package/dist/{chunk-RKRYZZ3R.js → chunk-SY7QZIKZ.js} +2 -2
- package/dist/{chunk-V3J5DAMB.js → chunk-SYSVKYHX.js} +2 -2
- package/dist/chunk-T3IHAH3B.js +2 -0
- package/dist/chunk-T3IHAH3B.js.map +1 -0
- package/dist/{chunk-A7D2NNLM.js → chunk-TMS5VMVV.js} +2 -2
- package/dist/{chunk-R744BZN2.js → chunk-TUAL6X2E.js} +2 -2
- package/dist/{chunk-OETKBT6P.js → chunk-TVTJS3PE.js} +2 -2
- package/dist/{chunk-6PWZ4TBI.js → chunk-TZIDQ5O3.js} +2 -2
- package/dist/{chunk-W4LHXUIX.js → chunk-U7MAWO3U.js} +2 -2
- package/dist/{chunk-RR57VT45.js → chunk-UCBZMQGL.js} +2 -2
- package/dist/chunk-UHFNNG5S.js +2 -0
- package/dist/chunk-UHFNNG5S.js.map +1 -0
- package/dist/chunk-UYTYZVQM.js +2 -0
- package/dist/chunk-UYTYZVQM.js.map +1 -0
- package/dist/{chunk-3CJB74UF.js → chunk-UYYITOOO.js} +2 -2
- package/dist/{chunk-YS6VDGFW.js → chunk-V2ZDW66A.js} +2 -2
- package/dist/{chunk-RJXRGUNB.js → chunk-V6I7LW47.js} +2 -2
- package/dist/chunk-VADVEBNE.js +2 -0
- package/dist/chunk-VADVEBNE.js.map +1 -0
- package/dist/{chunk-HFHQDWJN.js → chunk-VDXTVUFY.js} +2 -2
- package/dist/{chunk-ARVKTD3V.js → chunk-VMXDQYTT.js} +2 -2
- package/dist/{chunk-RFEF2B5D.js → chunk-VYLSS2C7.js} +2 -2
- package/dist/{chunk-ZFF6E44S.js → chunk-VZ34NZXF.js} +2 -2
- package/dist/{chunk-GF34UO7V.js → chunk-W3GEGGZY.js} +2 -2
- package/dist/chunk-WJAGRH76.js +2 -0
- package/dist/chunk-WJAGRH76.js.map +1 -0
- package/dist/{chunk-S4JJIDWH.js → chunk-WKT6B3XE.js} +2 -2
- package/dist/chunk-X3FRANQS.js +2 -0
- package/dist/chunk-X3FRANQS.js.map +1 -0
- package/dist/{chunk-KTPIKOUV.js → chunk-X7KIEFEN.js} +2 -2
- package/dist/{chunk-LS4CLDLI.js → chunk-XDRJTAFV.js} +2 -2
- package/dist/{chunk-NEKE5PRJ.js → chunk-XGECMN4V.js} +2 -2
- package/dist/{chunk-AS7SJDU5.js → chunk-XPITUVQE.js} +2 -2
- package/dist/{chunk-AS7SJDU5.js.map → chunk-XPITUVQE.js.map} +1 -1
- package/dist/{chunk-3ID3UX2Q.js → chunk-XVZQBTB3.js} +2 -2
- package/dist/{chunk-E2463GRM.js → chunk-XZMPAJRL.js} +2 -2
- package/dist/{chunk-E2463GRM.js.map → chunk-XZMPAJRL.js.map} +1 -1
- package/dist/{chunk-WMBHCIFS.js → chunk-Y3G3JGLP.js} +2 -2
- package/dist/{chunk-ZC47WDFG.js → chunk-Y4X4BMDD.js} +2 -2
- package/dist/chunk-Y4X4BMDD.js.map +1 -0
- package/dist/{chunk-Y3YYLANJ.js → chunk-YDL42SVF.js} +2 -2
- package/dist/{chunk-V557KUHJ.js → chunk-YLU7JBHT.js} +2 -2
- package/dist/{chunk-NRWIGTY2.js → chunk-YYWBJW65.js} +2 -2
- package/dist/{chunk-A2TY3VWL.js → chunk-ZF3CYWGQ.js} +2 -2
- package/dist/{chunk-3B6BHFDV.js → chunk-ZHFUFIWX.js} +2 -2
- package/dist/default-components.d.ts +2 -2
- package/dist/default-components.js +1 -1
- package/dist/flows/ContractAmendment/ContractAmendmentConfirmationForm.d.ts +1 -1
- package/dist/flows/ContractAmendment/ContractAmendmentConfirmationForm.js +1 -1
- package/dist/flows/ContractAmendment/ContractAmendmentFlow.d.ts +3 -3
- package/dist/flows/ContractAmendment/ContractAmendmentFlow.js +1 -1
- package/dist/flows/ContractAmendment/ContractAmendmentForm.d.ts +1 -1
- package/dist/flows/ContractAmendment/ContractAmendmentForm.js +1 -1
- package/dist/flows/ContractAmendment/context.d.ts +3 -3
- package/dist/flows/ContractAmendment/hooks.d.ts +3 -3
- package/dist/flows/ContractAmendment/hooks.js +1 -1
- package/dist/flows/ContractAmendment/index.d.ts +3 -3
- package/dist/flows/ContractAmendment/index.js +1 -1
- package/dist/flows/ContractAmendment/types.d.ts +3 -3
- package/dist/flows/ContractAmendment/utils.d.ts +2 -2
- package/dist/flows/ContractAmendment/utils.js +1 -1
- package/dist/flows/ContractorOnboarding/ContractorOnboarding.d.ts +5 -5
- package/dist/flows/ContractorOnboarding/ContractorOnboarding.js +1 -1
- package/dist/flows/ContractorOnboarding/api.d.ts +3 -3
- package/dist/flows/ContractorOnboarding/api.js +1 -1
- package/dist/flows/ContractorOnboarding/components/BasicInformationStep.d.ts +4 -4
- package/dist/flows/ContractorOnboarding/components/BasicInformationStep.js +1 -1
- package/dist/flows/ContractorOnboarding/components/ContractDetailsStep.d.ts +5 -5
- package/dist/flows/ContractorOnboarding/components/ContractDetailsStep.js +1 -1
- package/dist/flows/ContractorOnboarding/components/ContractOriginStep.d.ts +3 -3
- package/dist/flows/ContractorOnboarding/components/ContractOriginStep.js +1 -1
- package/dist/flows/ContractorOnboarding/components/ContractPreviewHeader.d.ts +2 -2
- package/dist/flows/ContractorOnboarding/components/ContractPreviewStatement.d.ts +2 -2
- package/dist/flows/ContractorOnboarding/components/ContractPreviewStatement.js +1 -1
- package/dist/flows/ContractorOnboarding/components/ContractPreviewStep.d.ts +5 -5
- package/dist/flows/ContractorOnboarding/components/ContractPreviewStep.js +1 -1
- package/dist/flows/ContractorOnboarding/components/ContractorOnboardingForm.d.ts +5 -5
- package/dist/flows/ContractorOnboarding/components/ContractorOnboardingForm.js +1 -1
- package/dist/flows/ContractorOnboarding/components/EligibilityQuestionnaireStep.d.ts +5 -5
- package/dist/flows/ContractorOnboarding/components/EligibilityQuestionnaireStep.js +1 -1
- package/dist/flows/ContractorOnboarding/components/OnboardingInvite.d.ts +3 -3
- package/dist/flows/ContractorOnboarding/components/OnboardingInvite.js +1 -1
- package/dist/flows/ContractorOnboarding/components/PricingPlan.d.ts +5 -5
- package/dist/flows/ContractorOnboarding/components/PricingPlan.js +1 -1
- package/dist/flows/ContractorOnboarding/components/SaveDraftButton.d.ts +3 -3
- package/dist/flows/ContractorOnboarding/components/SelectCountryStep.d.ts +4 -4
- package/dist/flows/ContractorOnboarding/components/SelectCountryStep.js +1 -1
- package/dist/flows/ContractorOnboarding/components/StatementOfWorkDisclaimer.js +1 -1
- package/dist/flows/ContractorOnboarding/context.d.ts +5 -5
- package/dist/flows/ContractorOnboarding/hooks.d.ts +5 -5
- package/dist/flows/ContractorOnboarding/hooks.js +1 -1
- package/dist/flows/ContractorOnboarding/index.d.ts +5 -5
- package/dist/flows/ContractorOnboarding/index.js +1 -1
- package/dist/flows/ContractorOnboarding/jsfModify.d.ts +5 -5
- package/dist/flows/ContractorOnboarding/jsfModify.js +1 -1
- package/dist/flows/ContractorOnboarding/types.d.ts +5 -5
- package/dist/flows/ContractorOnboarding/utils.d.ts +15 -5
- package/dist/flows/ContractorOnboarding/utils.js +1 -1
- package/dist/flows/CostCalculator/CostCalculatorFlow.d.ts +3 -3
- package/dist/flows/CostCalculator/CostCalculatorFlow.js +1 -1
- package/dist/flows/CostCalculator/CostCalculatorForm.d.ts +3 -3
- package/dist/flows/CostCalculator/CostCalculatorForm.js +1 -1
- package/dist/flows/CostCalculator/CostCalculatorResetButton.js +1 -1
- package/dist/flows/CostCalculator/CostCalculatorSubmitButton.js +1 -1
- package/dist/flows/CostCalculator/EstimationResults/EstimationResults.d.ts +3 -3
- package/dist/flows/CostCalculator/EstimationResults/EstimationResults.js +1 -1
- package/dist/flows/CostCalculator/SummaryResults/SummaryResults.d.ts +3 -3
- package/dist/flows/CostCalculator/SummaryResults/SummaryResults.js +1 -1
- package/dist/flows/CostCalculator/api.d.ts +3 -3
- package/dist/flows/CostCalculator/api.js +1 -1
- package/dist/flows/CostCalculator/components/SalaryField.d.ts +4 -3
- package/dist/flows/CostCalculator/components/SalaryField.js +1 -1
- package/dist/flows/CostCalculator/context.d.ts +3 -3
- package/dist/flows/CostCalculator/hooks.d.ts +3 -3
- package/dist/flows/CostCalculator/hooks.js +1 -1
- package/dist/flows/CostCalculator/index.d.ts +3 -3
- package/dist/flows/CostCalculator/index.js +1 -1
- package/dist/flows/CostCalculator/types.d.ts +13 -4
- package/dist/flows/CostCalculator/utils.d.ts +3 -3
- package/dist/flows/CostCalculator/utils.js +1 -1
- package/dist/flows/CreateCompany/CreateCompany.d.ts +4 -4
- package/dist/flows/CreateCompany/CreateCompany.js +1 -1
- package/dist/flows/CreateCompany/api.d.ts +3 -3
- package/dist/flows/CreateCompany/api.js +1 -1
- package/dist/flows/CreateCompany/components/AddressDetailsStep.d.ts +4 -4
- package/dist/flows/CreateCompany/components/AddressDetailsStep.js +1 -1
- package/dist/flows/CreateCompany/components/CompanyBasicInformationStep.d.ts +4 -4
- package/dist/flows/CreateCompany/components/CompanyBasicInformationStep.js +1 -1
- package/dist/flows/CreateCompany/components/CreateCompanyForm.d.ts +2 -2
- package/dist/flows/CreateCompany/components/CreateCompanyForm.js +1 -1
- package/dist/flows/CreateCompany/context.d.ts +4 -4
- package/dist/flows/CreateCompany/hooks.d.ts +4 -4
- package/dist/flows/CreateCompany/hooks.js +1 -1
- package/dist/flows/CreateCompany/index.d.ts +4 -4
- package/dist/flows/CreateCompany/index.js +1 -1
- package/dist/flows/CreateCompany/types.d.ts +4 -4
- package/dist/flows/JsonSchemaPlayground/JsonSchemaPlaygroundFlow.d.ts +4 -4
- package/dist/flows/JsonSchemaPlayground/JsonSchemaPlaygroundFlow.js +1 -1
- package/dist/flows/JsonSchemaPlayground/JsonSchemaPlaygroundForm.d.ts +2 -2
- package/dist/flows/JsonSchemaPlayground/JsonSchemaPlaygroundForm.js +1 -1
- package/dist/flows/JsonSchemaPlayground/JsonSchemaPlaygroundResetButton.js +1 -1
- package/dist/flows/JsonSchemaPlayground/context.d.ts +3 -3
- package/dist/flows/JsonSchemaPlayground/hooks.d.ts +4 -4
- package/dist/flows/JsonSchemaPlayground/hooks.js +1 -1
- package/dist/flows/JsonSchemaPlayground/index.d.ts +3 -4
- package/dist/flows/JsonSchemaPlayground/index.js +1 -1
- package/dist/flows/JsonSchemaPlayground/types.d.ts +3 -3
- package/dist/flows/Onboarding/OnboardingFlow.d.ts +4 -4
- package/dist/flows/Onboarding/OnboardingFlow.js +1 -1
- package/dist/flows/Onboarding/api.d.ts +4 -4
- package/dist/flows/Onboarding/api.js +1 -1
- package/dist/flows/Onboarding/components/AnnualGrossSalary.d.ts +4 -3
- package/dist/flows/Onboarding/components/AnnualGrossSalary.js +1 -1
- package/dist/flows/Onboarding/components/BasicInformationStep.d.ts +4 -4
- package/dist/flows/Onboarding/components/BasicInformationStep.js +1 -1
- package/dist/flows/Onboarding/components/BenefitsStep.d.ts +4 -4
- package/dist/flows/Onboarding/components/BenefitsStep.js +1 -1
- package/dist/flows/Onboarding/components/ContractDetailsStep.d.ts +4 -4
- package/dist/flows/Onboarding/components/ContractDetailsStep.js +1 -1
- package/dist/flows/Onboarding/components/EmploymentAgreementInfoContent.js +1 -1
- package/dist/flows/Onboarding/components/EngagementAgreementDetailsStep.d.ts +4 -4
- package/dist/flows/Onboarding/components/EngagementAgreementDetailsStep.js +1 -1
- package/dist/flows/Onboarding/components/OnboardingForm.d.ts +4 -4
- package/dist/flows/Onboarding/components/OnboardingForm.js +1 -1
- package/dist/flows/Onboarding/components/OnboardingInvite.d.ts +3 -3
- package/dist/flows/Onboarding/components/OnboardingInvite.js +1 -1
- package/dist/flows/Onboarding/components/PreOnboardingRequirements.d.ts +4 -4
- package/dist/flows/Onboarding/components/PreOnboardingRequirements.js +1 -1
- package/dist/flows/Onboarding/components/PreviewEmploymentAgreementStep.js +1 -1
- package/dist/flows/Onboarding/components/ReviewStep.d.ts +4 -4
- package/dist/flows/Onboarding/components/SaveDraftButton.d.ts +3 -3
- package/dist/flows/Onboarding/components/SelectCountryStep.d.ts +4 -4
- package/dist/flows/Onboarding/components/SelectCountryStep.js +1 -1
- package/dist/flows/Onboarding/context.d.ts +6 -6
- package/dist/flows/Onboarding/hooks.d.ts +5 -5
- package/dist/flows/Onboarding/hooks.js +1 -1
- package/dist/flows/Onboarding/index.d.ts +4 -4
- package/dist/flows/Onboarding/index.js +1 -1
- package/dist/flows/Onboarding/types.d.ts +4 -4
- package/dist/flows/Onboarding/utils.d.ts +4 -4
- package/dist/flows/Onboarding/utils.js +1 -1
- package/dist/flows/PayrollAdminOnboarding/PayrollAdminOnboardingFlow.d.ts +4 -4
- package/dist/flows/PayrollAdminOnboarding/PayrollAdminOnboardingFlow.js +1 -1
- package/dist/flows/PayrollAdminOnboarding/api.d.ts +2 -2
- package/dist/flows/PayrollAdminOnboarding/api.js +1 -1
- package/dist/flows/PayrollAdminOnboarding/components/AdministrativeDetailsStep.d.ts +3 -3
- package/dist/flows/PayrollAdminOnboarding/components/AdministrativeDetailsStep.js +1 -1
- package/dist/flows/PayrollAdminOnboarding/components/AdministrativeDetailsStep.js.map +1 -1
- package/dist/flows/PayrollAdminOnboarding/components/BackButton.js +1 -1
- package/dist/flows/PayrollAdminOnboarding/components/BackButton.js.map +1 -1
- package/dist/flows/PayrollAdminOnboarding/components/ContractDetailsStep.d.ts +3 -3
- package/dist/flows/PayrollAdminOnboarding/components/ContractDetailsStep.js +1 -1
- package/dist/flows/PayrollAdminOnboarding/components/ContractDetailsStep.js.map +1 -1
- package/dist/flows/PayrollAdminOnboarding/components/InvitationStep.d.ts +3 -3
- package/dist/flows/PayrollAdminOnboarding/components/InvitationStep.js +1 -1
- package/dist/flows/PayrollAdminOnboarding/components/InvitationStep.js.map +1 -1
- package/dist/flows/PayrollAdminOnboarding/components/PayrollAdminForm.d.ts +2 -2
- package/dist/flows/PayrollAdminOnboarding/components/PayrollAdminForm.js +1 -1
- package/dist/flows/PayrollAdminOnboarding/components/SelectCountryStep.d.ts +3 -3
- package/dist/flows/PayrollAdminOnboarding/components/SelectCountryStep.js +1 -1
- package/dist/flows/PayrollAdminOnboarding/components/SelectCountryStep.js.map +1 -1
- package/dist/flows/PayrollAdminOnboarding/components/SubmitButton.js +1 -1
- package/dist/flows/PayrollAdminOnboarding/components/SubmitButton.js.map +1 -1
- package/dist/flows/PayrollAdminOnboarding/components/useStepSubmitHandler.d.ts +3 -3
- package/dist/flows/PayrollAdminOnboarding/components/useStepSubmitHandler.js +1 -1
- package/dist/flows/PayrollAdminOnboarding/context.d.ts +4 -4
- package/dist/flows/PayrollAdminOnboarding/hooks.d.ts +4 -4
- package/dist/flows/PayrollAdminOnboarding/hooks.js +1 -1
- package/dist/flows/PayrollAdminOnboarding/index.d.ts +4 -4
- package/dist/flows/PayrollAdminOnboarding/index.js +1 -1
- package/dist/flows/PayrollAdminOnboarding/types.d.ts +4 -4
- package/dist/flows/PayrollEmployeeOnboarding/PayrollEmployeeOnboardingFlow.d.ts +4 -4
- package/dist/flows/PayrollEmployeeOnboarding/PayrollEmployeeOnboardingFlow.js +1 -1
- package/dist/flows/PayrollEmployeeOnboarding/api.d.ts +8 -8
- package/dist/flows/PayrollEmployeeOnboarding/api.js +1 -1
- package/dist/flows/PayrollEmployeeOnboarding/components/BankAccountStep.d.ts +3 -3
- package/dist/flows/PayrollEmployeeOnboarding/components/BankAccountStep.js +1 -1
- package/dist/flows/PayrollEmployeeOnboarding/components/FederalTaxesStep.d.ts +3 -3
- package/dist/flows/PayrollEmployeeOnboarding/components/FederalTaxesStep.js +1 -1
- package/dist/flows/PayrollEmployeeOnboarding/components/HomeAddressStep.d.ts +3 -3
- package/dist/flows/PayrollEmployeeOnboarding/components/HomeAddressStep.js +1 -1
- package/dist/flows/PayrollEmployeeOnboarding/components/PayrollEmployeeForm.d.ts +2 -2
- package/dist/flows/PayrollEmployeeOnboarding/components/PayrollEmployeeForm.js +1 -1
- package/dist/flows/PayrollEmployeeOnboarding/components/PersonalDetailsStep.d.ts +3 -3
- package/dist/flows/PayrollEmployeeOnboarding/components/PersonalDetailsStep.js +1 -1
- package/dist/flows/PayrollEmployeeOnboarding/components/StateTaxesStep.d.ts +4 -4
- package/dist/flows/PayrollEmployeeOnboarding/components/StateTaxesStep.js +1 -1
- package/dist/flows/PayrollEmployeeOnboarding/components/useEmployeeStepSubmitHandler.d.ts +3 -3
- package/dist/flows/PayrollEmployeeOnboarding/components/useEmployeeStepSubmitHandler.js +1 -1
- package/dist/flows/PayrollEmployeeOnboarding/context.d.ts +4 -4
- package/dist/flows/PayrollEmployeeOnboarding/hooks.d.ts +4 -4
- package/dist/flows/PayrollEmployeeOnboarding/hooks.js +1 -1
- package/dist/flows/PayrollEmployeeOnboarding/index.d.ts +4 -4
- package/dist/flows/PayrollEmployeeOnboarding/index.js +1 -1
- package/dist/flows/PayrollEmployeeOnboarding/types.d.ts +4 -4
- package/dist/flows/Termination/AdditionalDetailsForm.d.ts +4 -4
- package/dist/flows/Termination/AdditionalDetailsForm.js +1 -1
- package/dist/flows/Termination/EmployeeComunicationForm.d.ts +4 -4
- package/dist/flows/Termination/EmployeeComunicationForm.js +1 -1
- package/dist/flows/Termination/PaidTimeOffForm.d.ts +4 -4
- package/dist/flows/Termination/PaidTimeOffForm.js +1 -1
- package/dist/flows/Termination/TerminationDetailsForm.d.ts +4 -4
- package/dist/flows/Termination/TerminationDetailsForm.js +1 -1
- package/dist/flows/Termination/TerminationFlow.d.ts +4 -4
- package/dist/flows/Termination/TerminationFlow.js +1 -1
- package/dist/flows/Termination/TerminationForm.d.ts +4 -4
- package/dist/flows/Termination/TerminationForm.js +1 -1
- package/dist/flows/Termination/api.d.ts +5 -5
- package/dist/flows/Termination/api.js +1 -1
- package/dist/flows/Termination/components/AcknowledgeInformation/AcknowledgeInformation.js +1 -1
- package/dist/flows/Termination/components/AcknowledgeInformation/AcknowledgeInformationFees.js +1 -1
- package/dist/flows/Termination/components/PaidTimeOff/PaidTimeOff.d.ts +6 -6
- package/dist/flows/Termination/components/PaidTimeOff/PaidTimeOff.js +1 -1
- package/dist/flows/Termination/components/PaidTimeOff/PaidTimeOffContainer.d.ts +6 -6
- package/dist/flows/Termination/components/PaidTimeOff/PaidTimeOffContainer.js +1 -1
- package/dist/flows/Termination/components/PaidTimeOff/types.d.ts +6 -6
- package/dist/flows/Termination/components/TerminationDialogInfoContent/TerminationDialogInfoContent.js +1 -1
- package/dist/flows/Termination/components/TerminationReasonsDetailContent/TerminationReasonsDetailContent.js +1 -1
- package/dist/flows/Termination/context.d.ts +4 -4
- package/dist/flows/Termination/hooks.d.ts +4 -4
- package/dist/flows/Termination/hooks.js +1 -1
- package/dist/flows/Termination/index.d.ts +6 -6
- package/dist/flows/Termination/index.js +1 -1
- package/dist/flows/Termination/json-schemas/jsonSchema.js +1 -1
- package/dist/flows/Termination/json-schemas/schema.d.ts +4 -4
- package/dist/flows/Termination/json-schemas/schema.js +1 -1
- package/dist/flows/Termination/types.d.ts +4 -4
- package/dist/flows/Termination/utils.d.ts +4 -4
- package/dist/flows/Termination/utils.js +1 -1
- package/dist/flows/types.d.ts +3 -3
- package/dist/flows/utils.d.ts +2 -2
- package/dist/index.css +1 -1
- package/dist/index.css.map +1 -1
- package/dist/index.d.ts +29 -16
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/internals.d.ts +4 -5
- package/dist/internals.js +1 -1
- package/dist/{mutations-CCbGTxuw.d.ts → mutations-DCAaAw5a.d.ts} +1 -1
- package/dist/{remoteFlows-BTGwzbVQ.d.ts → remoteFlows-dULw8FdP.d.ts} +8 -1
- package/dist/styles.css +1 -1
- package/dist/styles.css.map +1 -1
- package/dist/types-B4GARfFq.d.ts +91 -0
- package/dist/{types-BAQL-xPU.d.ts → types-BUvpsq6j.d.ts} +23 -12
- package/dist/{types-BUCAIjdm.d.ts → types-BhMTFN9Y.d.ts} +1 -1
- package/dist/{types-BQUdy5l7.d.ts → types-BrUW0aeq.d.ts} +4 -4
- package/dist/{types-CvqFd-l3.d.ts → types-CZ7r6pdq.d.ts} +31 -7
- package/dist/{types-DoWlYF_Q.d.ts → types-Crw4jMds.d.ts} +2 -2
- package/dist/{types-DRIJcxE-.d.ts → types-Cwf67dnV.d.ts} +15 -6
- package/dist/{types-BtrEXSWH.d.ts → types-D-1MCxhm.d.ts} +3 -3
- package/dist/{types.gen-Bn3elzBI.d.ts → types.gen-C4K7xky-.d.ts} +16 -1
- package/dist/{utils-Dc_Eq2Vm.d.ts → utils-BVwm5Jyt.d.ts} +1 -1
- package/package.json +5 -5
- package/dist/ButtonDefault-5GP4VFZL.js +0 -2
- package/dist/CheckboxFieldDefault-VKVKDNK4.js +0 -2
- package/dist/CountryFieldDefault-N7P5V5NR.js +0 -2
- package/dist/DatePickerFieldDefault-V3F2DLPV.js +0 -2
- package/dist/DrawerDefault-UVRSWQLP.js +0 -2
- package/dist/EmailFieldDefault-JN6IDGVM.js +0 -2
- package/dist/FieldsetToggleButtonDefault-KVIBW3UI.js +0 -2
- package/dist/FileUploadFieldDefault-SD3A25KP.js +0 -2
- package/dist/MultiSelectFieldDefault-ZLRPID6V.js +0 -2
- package/dist/NumberFieldDefault-MXN7XDOC.js +0 -2
- package/dist/RadioGroupFieldDefault-UMDJEJZU.js +0 -2
- package/dist/SelectFieldDefault-IUECL5R6.js +0 -2
- package/dist/StatementDefault-6B2AXWUL.js +0 -2
- package/dist/TableFieldDefault-ZC2IJBFY.js +0 -2
- package/dist/TelFieldDefault-PUE57NPS.js +0 -2
- package/dist/TextAreaFieldDefault-5CV4XTOT.js +0 -2
- package/dist/TextFieldDefault-WSEEAHJV.js +0 -2
- package/dist/TimeFieldDefault-K5LYUXKT.js +0 -2
- package/dist/WorkScheduleFieldDefault-D6TGVPHC.js +0 -2
- package/dist/ZendeskDrawerDefault-2DNA653G.js +0 -2
- package/dist/chunk-343R3QEG.js +0 -2
- package/dist/chunk-343R3QEG.js.map +0 -1
- package/dist/chunk-3AMTQ2DH.js +0 -2
- package/dist/chunk-3AMTQ2DH.js.map +0 -1
- package/dist/chunk-66DSJTDZ.js +0 -2
- package/dist/chunk-66DSJTDZ.js.map +0 -1
- package/dist/chunk-6JOMJADW.js +0 -2
- package/dist/chunk-6JOMJADW.js.map +0 -1
- package/dist/chunk-7ULM6AZK.js +0 -1
- package/dist/chunk-AVIZTG4K.js +0 -2
- package/dist/chunk-AVIZTG4K.js.map +0 -1
- package/dist/chunk-B36HI2TD.js +0 -2
- package/dist/chunk-B36HI2TD.js.map +0 -1
- package/dist/chunk-BIL7ERK6.js +0 -2
- package/dist/chunk-BIL7ERK6.js.map +0 -1
- package/dist/chunk-CZY6KI75.js +0 -2
- package/dist/chunk-CZY6KI75.js.map +0 -1
- package/dist/chunk-ERDNYHQO.js +0 -2
- package/dist/chunk-ERDNYHQO.js.map +0 -1
- package/dist/chunk-F5WNUYFP.js +0 -2
- package/dist/chunk-F5WNUYFP.js.map +0 -1
- package/dist/chunk-G2LZFGZA.js.map +0 -1
- package/dist/chunk-GSB44SSJ.js +0 -2
- package/dist/chunk-GSB44SSJ.js.map +0 -1
- package/dist/chunk-HGFJTAEM.js +0 -2
- package/dist/chunk-HGFJTAEM.js.map +0 -1
- package/dist/chunk-I363AG3E.js +0 -2
- package/dist/chunk-I363AG3E.js.map +0 -1
- package/dist/chunk-J2ARI3NQ.js +0 -2
- package/dist/chunk-J2ARI3NQ.js.map +0 -1
- package/dist/chunk-JVLARDTF.js +0 -2
- package/dist/chunk-K7HS55JD.js +0 -2
- package/dist/chunk-K7HS55JD.js.map +0 -1
- package/dist/chunk-KAX6IHET.js +0 -2
- package/dist/chunk-KAX6IHET.js.map +0 -1
- package/dist/chunk-MEPIOKJQ.js +0 -2
- package/dist/chunk-MEPIOKJQ.js.map +0 -1
- package/dist/chunk-OV6PV4N5.js +0 -2
- package/dist/chunk-OV6PV4N5.js.map +0 -1
- package/dist/chunk-PYXLDOXH.js +0 -2
- package/dist/chunk-PYXLDOXH.js.map +0 -1
- package/dist/chunk-Q6PTVBDS.js +0 -2
- package/dist/chunk-Q6PTVBDS.js.map +0 -1
- package/dist/chunk-SC7YWKOW.js +0 -2
- package/dist/chunk-STKY674N.js +0 -2
- package/dist/chunk-STKY674N.js.map +0 -1
- package/dist/chunk-VVEBSBQ3.js +0 -2
- package/dist/chunk-VVEBSBQ3.js.map +0 -1
- package/dist/chunk-XLA5Z35M.js +0 -2
- package/dist/chunk-XLA5Z35M.js.map +0 -1
- package/dist/chunk-Y2K74EBE.js +0 -2
- package/dist/chunk-Y2K74EBE.js.map +0 -1
- package/dist/chunk-YMBVMMUS.js +0 -2
- package/dist/chunk-YMBVMMUS.js.map +0 -1
- package/dist/chunk-ZC47WDFG.js.map +0 -1
- package/dist/chunk-ZT4OC3OB.js +0 -2
- package/dist/chunk-ZT4OC3OB.js.map +0 -1
- package/dist/chunk-ZYIEPPSE.js +0 -2
- package/dist/chunk-ZYIEPPSE.js.map +0 -1
- package/dist/flows/JsonSchemaPlayground/initialValues.d.ts +0 -15
- package/dist/flows/JsonSchemaPlayground/initialValues.js +0 -2
- package/dist/flows/JsonSchemaPlayground/initialValues.js.map +0 -1
- package/dist/flows/JsonSchemaPlayground/schemas.d.ts +0 -1957
- package/dist/flows/JsonSchemaPlayground/schemas.js +0 -2
- package/dist/flows/JsonSchemaPlayground/schemas.js.map +0 -1
- package/dist/types-Im-AaNUG.d.ts +0 -2033
- /package/dist/{ButtonDefault-5GP4VFZL.js.map → ButtonDefault-HBOULH5V.js.map} +0 -0
- /package/dist/{CheckboxFieldDefault-VKVKDNK4.js.map → CheckboxFieldDefault-62URAHJV.js.map} +0 -0
- /package/dist/{CountryFieldDefault-N7P5V5NR.js.map → CountryFieldDefault-24NNZN2C.js.map} +0 -0
- /package/dist/{DatePickerFieldDefault-V3F2DLPV.js.map → DatePickerFieldDefault-NMUCZ4U2.js.map} +0 -0
- /package/dist/{DrawerDefault-UVRSWQLP.js.map → DrawerDefault-O7NUFWJ4.js.map} +0 -0
- /package/dist/{EmailFieldDefault-JN6IDGVM.js.map → EmailFieldDefault-7USH7I6B.js.map} +0 -0
- /package/dist/{FieldsetToggleButtonDefault-KVIBW3UI.js.map → FieldsetToggleButtonDefault-MIRCZJKA.js.map} +0 -0
- /package/dist/{FileUploadFieldDefault-SD3A25KP.js.map → FileUploadFieldDefault-4NW5VLF6.js.map} +0 -0
- /package/dist/{MultiSelectFieldDefault-ZLRPID6V.js.map → MultiSelectFieldDefault-S45Z53ZY.js.map} +0 -0
- /package/dist/{NumberFieldDefault-MXN7XDOC.js.map → NumberFieldDefault-P7TLA6SH.js.map} +0 -0
- /package/dist/{RadioGroupFieldDefault-UMDJEJZU.js.map → RadioGroupFieldDefault-X44FYUA3.js.map} +0 -0
- /package/dist/{SelectFieldDefault-IUECL5R6.js.map → SelectFieldDefault-PLDXHTQY.js.map} +0 -0
- /package/dist/{StatementDefault-6B2AXWUL.js.map → StatementDefault-RDC5G24K.js.map} +0 -0
- /package/dist/{TableFieldDefault-ZC2IJBFY.js.map → TableFieldDefault-ES7OIYX5.js.map} +0 -0
- /package/dist/{TelFieldDefault-PUE57NPS.js.map → TelFieldDefault-IYGEEV5V.js.map} +0 -0
- /package/dist/{TextAreaFieldDefault-5CV4XTOT.js.map → TextAreaFieldDefault-C6M3PIV2.js.map} +0 -0
- /package/dist/{TextFieldDefault-WSEEAHJV.js.map → TextFieldDefault-FTX32V3D.js.map} +0 -0
- /package/dist/{TimeFieldDefault-K5LYUXKT.js.map → TimeFieldDefault-J6PKL5T4.js.map} +0 -0
- /package/dist/{WorkScheduleFieldDefault-D6TGVPHC.js.map → WorkScheduleFieldDefault-JAU2YFQF.js.map} +0 -0
- /package/dist/{ZendeskDrawerDefault-2DNA653G.js.map → ZendeskDrawerDefault-HGKAUCUV.js.map} +0 -0
- /package/dist/{chunk-D4XBTJOV.js.map → chunk-2CGPCBQY.js.map} +0 -0
- /package/dist/{chunk-HXEOVMUT.js.map → chunk-2EGFPBT7.js.map} +0 -0
- /package/dist/{chunk-PRXJRF7V.js.map → chunk-2GAKAYG7.js.map} +0 -0
- /package/dist/{chunk-GGDVTGHG.js.map → chunk-2QQZODFC.js.map} +0 -0
- /package/dist/{chunk-7D4XFAQR.js.map → chunk-3HGUMECW.js.map} +0 -0
- /package/dist/{chunk-F35ALUPA.js.map → chunk-3ISSVSL5.js.map} +0 -0
- /package/dist/{chunk-746NEWTS.js.map → chunk-3OJAX7QH.js.map} +0 -0
- /package/dist/{chunk-Z5LVLVTU.js.map → chunk-3OTZWYVQ.js.map} +0 -0
- /package/dist/{chunk-Y3CJRZLA.js.map → chunk-4FGKIGKF.js.map} +0 -0
- /package/dist/{chunk-74ICDGQK.js.map → chunk-4X7TVFHA.js.map} +0 -0
- /package/dist/{chunk-SC7YWKOW.js.map → chunk-5MPW7QWT.js.map} +0 -0
- /package/dist/{chunk-TQH4OKHR.js.map → chunk-5N5B5AU2.js.map} +0 -0
- /package/dist/{chunk-QO7Y6QRE.js.map → chunk-64OGJGKN.js.map} +0 -0
- /package/dist/{chunk-LSC6NTXD.js.map → chunk-65G3JQ7T.js.map} +0 -0
- /package/dist/{chunk-43NIG25S.js.map → chunk-6AZKF6RW.js.map} +0 -0
- /package/dist/{chunk-OPX7E3W2.js.map → chunk-6JTUAJBZ.js.map} +0 -0
- /package/dist/{chunk-3BAVRWSN.js.map → chunk-6PP3Y63Z.js.map} +0 -0
- /package/dist/{chunk-S3EXF5DV.js.map → chunk-6QEAL5BB.js.map} +0 -0
- /package/dist/{chunk-LFHFZU6X.js.map → chunk-6SNWSCXH.js.map} +0 -0
- /package/dist/{chunk-KT4Y4UPD.js.map → chunk-74A4TMTF.js.map} +0 -0
- /package/dist/{chunk-43FMKELR.js.map → chunk-75N7DFXJ.js.map} +0 -0
- /package/dist/{chunk-7NFCUTWO.js.map → chunk-7UFIQ64V.js.map} +0 -0
- /package/dist/{chunk-MGDYS2EY.js.map → chunk-A6KORIJF.js.map} +0 -0
- /package/dist/{chunk-N6XLGYRK.js.map → chunk-AHUSQVQY.js.map} +0 -0
- /package/dist/{chunk-CRDG62ZJ.js.map → chunk-B6YPSCBC.js.map} +0 -0
- /package/dist/{chunk-T5J2Z6ZR.js.map → chunk-BC4V2YAK.js.map} +0 -0
- /package/dist/{chunk-PQG6KZIO.js.map → chunk-BGSB3XPW.js.map} +0 -0
- /package/dist/{chunk-D2MZKYRH.js.map → chunk-BHKAKCV4.js.map} +0 -0
- /package/dist/{chunk-R4TM2Y3K.js.map → chunk-BS2YN6CS.js.map} +0 -0
- /package/dist/{chunk-FHIMDCMT.js.map → chunk-BVKOMSHU.js.map} +0 -0
- /package/dist/{chunk-PSU2AEFU.js.map → chunk-BZ4VPC4U.js.map} +0 -0
- /package/dist/{chunk-YJFRQSTA.js.map → chunk-BZA2XA4Q.js.map} +0 -0
- /package/dist/{chunk-OXTA4W4J.js.map → chunk-CM4UUBU5.js.map} +0 -0
- /package/dist/{chunk-YWLRVUE3.js.map → chunk-CUM2NKZ4.js.map} +0 -0
- /package/dist/{chunk-DO7OL4EG.js.map → chunk-DAYIMXLP.js.map} +0 -0
- /package/dist/{chunk-BUOHZMK6.js.map → chunk-DDH7MZ7M.js.map} +0 -0
- /package/dist/{chunk-44XEUAFV.js.map → chunk-DKOETPI4.js.map} +0 -0
- /package/dist/{chunk-QJJZTAG2.js.map → chunk-DLSHZLHX.js.map} +0 -0
- /package/dist/{chunk-MHIY35CK.js.map → chunk-DOVE5SYY.js.map} +0 -0
- /package/dist/{chunk-6OHLLH6W.js.map → chunk-EFIPOWDJ.js.map} +0 -0
- /package/dist/{chunk-FJC6IGXJ.js.map → chunk-FFFB5CG2.js.map} +0 -0
- /package/dist/{chunk-LBQQSYCG.js.map → chunk-FIFM55V3.js.map} +0 -0
- /package/dist/{chunk-2BCZXNBX.js.map → chunk-FQFIRIKU.js.map} +0 -0
- /package/dist/{chunk-PFQB3V2U.js.map → chunk-FXVHH75C.js.map} +0 -0
- /package/dist/{chunk-3UBFABDS.js.map → chunk-GPY3JZJJ.js.map} +0 -0
- /package/dist/{chunk-UT3CQ2DH.js.map → chunk-GWQJKZ3M.js.map} +0 -0
- /package/dist/{chunk-VZ3JCO23.js.map → chunk-GYYQWPA6.js.map} +0 -0
- /package/dist/{chunk-LJUWER2H.js.map → chunk-HFFQ642D.js.map} +0 -0
- /package/dist/{chunk-DMNKKWLY.js.map → chunk-HQLGDW2G.js.map} +0 -0
- /package/dist/{chunk-PGCS6HUO.js.map → chunk-HTVGC4KT.js.map} +0 -0
- /package/dist/{chunk-F7QTO3NU.js.map → chunk-HWBEYYJO.js.map} +0 -0
- /package/dist/{chunk-SQCTVURR.js.map → chunk-IMCNVNKF.js.map} +0 -0
- /package/dist/{chunk-J2L3CYIS.js.map → chunk-INUCPQVI.js.map} +0 -0
- /package/dist/{chunk-34JOEA4E.js.map → chunk-J7I4WJ4G.js.map} +0 -0
- /package/dist/{chunk-4MB3FE3T.js.map → chunk-JH3WUGO5.js.map} +0 -0
- /package/dist/{chunk-6Z4U4GYV.js.map → chunk-JJK6BFGN.js.map} +0 -0
- /package/dist/{chunk-RYUBFXSX.js.map → chunk-KF54ACZP.js.map} +0 -0
- /package/dist/{chunk-FG2DNTDR.js.map → chunk-KZWB4FMM.js.map} +0 -0
- /package/dist/{chunk-LNR6TGLQ.js.map → chunk-LBMHLNKS.js.map} +0 -0
- /package/dist/{chunk-MKO33XZ5.js.map → chunk-LD633A5N.js.map} +0 -0
- /package/dist/{chunk-WLPWXK7I.js.map → chunk-LKTCYO6Y.js.map} +0 -0
- /package/dist/{chunk-JXZX66MM.js.map → chunk-LQFLXXBR.js.map} +0 -0
- /package/dist/{chunk-7ULM6AZK.js.map → chunk-MAEAZFMR.js.map} +0 -0
- /package/dist/{chunk-DSGQZDY6.js.map → chunk-MZN6VY5F.js.map} +0 -0
- /package/dist/{chunk-DJIQISA2.js.map → chunk-NDWVOVDM.js.map} +0 -0
- /package/dist/{chunk-WIFDQWVX.js.map → chunk-NFLN2YB6.js.map} +0 -0
- /package/dist/{chunk-XYF4TIRU.js.map → chunk-NGCNYQSC.js.map} +0 -0
- /package/dist/{chunk-3GCJILCE.js.map → chunk-NQWB6O7Z.js.map} +0 -0
- /package/dist/{chunk-FCY5FJMC.js.map → chunk-O3Y4DVNY.js.map} +0 -0
- /package/dist/{chunk-MC6VR4AZ.js.map → chunk-OUFFAMO5.js.map} +0 -0
- /package/dist/{chunk-DIH7KHWI.js.map → chunk-PMCCHSXD.js.map} +0 -0
- /package/dist/{chunk-7O4Y3DAM.js.map → chunk-PMIGYQEX.js.map} +0 -0
- /package/dist/{chunk-HBOMEPXQ.js.map → chunk-QHSIUKH6.js.map} +0 -0
- /package/dist/{chunk-ZOTY3CAM.js.map → chunk-QO7HHRNA.js.map} +0 -0
- /package/dist/{chunk-HHFGG3RU.js.map → chunk-R2S73YZ5.js.map} +0 -0
- /package/dist/{chunk-ECGNGVSC.js.map → chunk-R4JUCNE4.js.map} +0 -0
- /package/dist/{chunk-BB5K57D4.js.map → chunk-RBUSLLAQ.js.map} +0 -0
- /package/dist/{chunk-BOE6NL6T.js.map → chunk-RN3WPVBZ.js.map} +0 -0
- /package/dist/{chunk-FQFLC6YA.js.map → chunk-RRERBS7F.js.map} +0 -0
- /package/dist/{chunk-OK4RV6ZT.js.map → chunk-STFOY2NW.js.map} +0 -0
- /package/dist/{chunk-WYUPZMPN.js.map → chunk-STJU6LZF.js.map} +0 -0
- /package/dist/{chunk-PIKEYX3V.js.map → chunk-SU4FMKBZ.js.map} +0 -0
- /package/dist/{chunk-CPRWWJYQ.js.map → chunk-SUONIYV5.js.map} +0 -0
- /package/dist/{chunk-RKRYZZ3R.js.map → chunk-SY7QZIKZ.js.map} +0 -0
- /package/dist/{chunk-V3J5DAMB.js.map → chunk-SYSVKYHX.js.map} +0 -0
- /package/dist/{chunk-A7D2NNLM.js.map → chunk-TMS5VMVV.js.map} +0 -0
- /package/dist/{chunk-R744BZN2.js.map → chunk-TUAL6X2E.js.map} +0 -0
- /package/dist/{chunk-OETKBT6P.js.map → chunk-TVTJS3PE.js.map} +0 -0
- /package/dist/{chunk-6PWZ4TBI.js.map → chunk-TZIDQ5O3.js.map} +0 -0
- /package/dist/{chunk-W4LHXUIX.js.map → chunk-U7MAWO3U.js.map} +0 -0
- /package/dist/{chunk-RR57VT45.js.map → chunk-UCBZMQGL.js.map} +0 -0
- /package/dist/{chunk-3CJB74UF.js.map → chunk-UYYITOOO.js.map} +0 -0
- /package/dist/{chunk-YS6VDGFW.js.map → chunk-V2ZDW66A.js.map} +0 -0
- /package/dist/{chunk-RJXRGUNB.js.map → chunk-V6I7LW47.js.map} +0 -0
- /package/dist/{chunk-HFHQDWJN.js.map → chunk-VDXTVUFY.js.map} +0 -0
- /package/dist/{chunk-ARVKTD3V.js.map → chunk-VMXDQYTT.js.map} +0 -0
- /package/dist/{chunk-RFEF2B5D.js.map → chunk-VYLSS2C7.js.map} +0 -0
- /package/dist/{chunk-ZFF6E44S.js.map → chunk-VZ34NZXF.js.map} +0 -0
- /package/dist/{chunk-GF34UO7V.js.map → chunk-W3GEGGZY.js.map} +0 -0
- /package/dist/{chunk-S4JJIDWH.js.map → chunk-WKT6B3XE.js.map} +0 -0
- /package/dist/{chunk-KTPIKOUV.js.map → chunk-X7KIEFEN.js.map} +0 -0
- /package/dist/{chunk-LS4CLDLI.js.map → chunk-XDRJTAFV.js.map} +0 -0
- /package/dist/{chunk-NEKE5PRJ.js.map → chunk-XGECMN4V.js.map} +0 -0
- /package/dist/{chunk-3ID3UX2Q.js.map → chunk-XVZQBTB3.js.map} +0 -0
- /package/dist/{chunk-WMBHCIFS.js.map → chunk-Y3G3JGLP.js.map} +0 -0
- /package/dist/{chunk-Y3YYLANJ.js.map → chunk-YDL42SVF.js.map} +0 -0
- /package/dist/{chunk-V557KUHJ.js.map → chunk-YLU7JBHT.js.map} +0 -0
- /package/dist/{chunk-NRWIGTY2.js.map → chunk-YYWBJW65.js.map} +0 -0
- /package/dist/{chunk-A2TY3VWL.js.map → chunk-ZF3CYWGQ.js.map} +0 -0
- /package/dist/{chunk-3B6BHFDV.js.map → chunk-ZHFUFIWX.js.map} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/flows/ContractorOnboarding/hooks.tsx","../src/common/api/legal-entities.ts"],"sourcesContent":["import { useEffect, useMemo, useRef, useState } from 'react';\nimport { FieldValues } from 'react-hook-form';\nimport omit from 'lodash.omit';\nimport { $TSFixMe, JSFFields } from '@/src/types/remoteFlows';\nimport {\n CreateContractDocument,\n Employment,\n EmploymentCreateParams,\n} from '@/src/client/types.gen';\nimport {\n getInitialValues,\n parseJSFToValidate,\n} from '@/src/components/form/utils';\nimport { ValidationResult } from '@remoteoss/remote-json-schema-form-kit';\nimport {\n useCreateContractorContractDocument,\n useGetContractDocumentSignatureSchema,\n usePostManageContractorSubscriptions,\n useContractorSubscriptionSchemaField,\n useGetShowContractDocument,\n useSignContractDocument,\n useUpdateUKandSaudiFields,\n useGetIR35File,\n useGetContractDocuments,\n useGetEligibilityQuestionnaire,\n usePostCreateEligibilityQuestionnaire,\n usePostManageContractorCorSubscription,\n useDeleteContractorCorSubscription,\n useCountriesSchemaField,\n useContractorOnboardingDetailsSchemaWithCurrencies,\n CONTRACT_PRODUCT_TITLES,\n useHasCompanySignedContract,\n useCompanyOpenTasks,\n useSetContractOrigin,\n useGetContractOriginSchema,\n} from '@/src/flows/ContractorOnboarding/api';\nimport {\n ContractorOnboardingFlowProps,\n ContractorOnboardingHookOptions,\n} from '@/src/flows/ContractorOnboarding/types';\nimport {\n buildSteps,\n calculateProvisionalStartDateDescription,\n reviewStepAllowedEmploymentStatus,\n disabledInviteButtonEmploymentStatus,\n StepKeys,\n} from '@/src/flows/ContractorOnboarding/utils';\nimport {\n useCreateEmployment,\n useJSONSchemaForm,\n useUpdateEmployment,\n} from '@/src/flows/Onboarding/api';\nimport { FlowOptions, JSFModify, JSONSchemaFormType } from '@/src/flows/types';\nimport { useStepState } from '@/src/flows/useStepState';\nimport { mutationToPromise, isMutationError } from '@/src/lib/mutations';\nimport { createStructuredError, prettifyFormValues } from '@/src/lib/utils';\nimport { JSFFieldset, Meta } from '@/src/types/remoteFlows';\nimport {\n contractorStandardProductIdentifier,\n contractorPlusProductIdentifier,\n corProductIdentifier,\n eorProductIdentifier,\n REMOTE_AI_ERROR_SOURCE,\n} from '@/src/flows/ContractorOnboarding/constants';\nimport {\n buildBasicInformationJsfModify,\n buildContractDetailsJsfModify,\n buildContractPreviewJsfModify,\n} from '@/src/flows/ContractorOnboarding/jsfModify';\nimport { transformAiErrorResponse } from '@/src/flows/ContractorOnboarding/utils';\nimport { AiValidationError } from '@/src/flows/ContractorOnboarding/types';\nimport { useUploadFile } from '@/src/common/api/files';\nimport { dataURLtoFile } from '@/src/lib/files';\nimport { useEmploymentQuery } from '@/src/common/api/employment';\nimport { useDefaultLegalEntity } from '@/src/common/api/legal-entities';\n\ntype useContractorOnboardingProps = Omit<\n ContractorOnboardingFlowProps,\n 'render' | 'options'\n> & {\n options: ContractorOnboardingHookOptions;\n};\n\nconst stepToFormSchemaMap: Record<StepKeys, JSONSchemaFormType | null> = {\n select_country: null,\n basic_information: 'employment_basic_information',\n contract_origin: null,\n contract_details: null,\n eligibility_questionnaire: null,\n pricing_plan: null,\n contract_preview: null,\n review: null,\n};\n\nconst jsonSchemaToEmployment: Partial<\n Record<JSONSchemaFormType, keyof Employment>\n> = {\n employment_basic_information: 'basic_information',\n};\n\nexport const useContractorOnboarding = ({\n countryCode,\n externalId,\n employmentId,\n skipSteps,\n options,\n initialValues: onboardingInitialValues,\n}: useContractorOnboardingProps) => {\n const excludeProducts = options?.excludeProducts || [];\n\n const onContractReviewedRef = useRef(options?.onContractReviewed);\n\n useEffect(() => {\n onContractReviewedRef.current = options?.onContractReviewed;\n }, [options?.onContractReviewed]);\n\n const [internalCountryCode, setInternalCountryCode] = useState<string | null>(\n countryCode || null,\n );\n const [internalEmploymentId, setInternalEmploymentId] = useState<\n string | undefined\n >(employmentId);\n const [internalContractDocumentId, setInternalContractDocumentId] = useState<\n string | undefined\n >(undefined);\n const fieldsMetaRef = useRef<{\n select_country: Meta;\n basic_information: Meta;\n contract_origin: Meta;\n contract_details: Meta;\n contract_preview: Meta;\n pricing_plan: Meta;\n eligibility_questionnaire: Meta;\n }>({\n select_country: {},\n basic_information: {},\n contract_origin: {},\n contract_details: {},\n contract_preview: {},\n pricing_plan: {},\n eligibility_questionnaire: {},\n });\n\n const [selectedProduct, setSelectedProduct] = useState<string | undefined>(\n undefined,\n );\n\n const [includeEligibilityQuestionnaire, setIncludeEligibilityQuestionnaire] =\n useState<boolean>(false);\n\n const [includeContractPreview, setIncludeContractPreview] =\n useState<boolean>(true);\n\n const [includeContractDetails, setIncludeContractDetails] =\n useState<boolean>(true);\n\n const [includeContractOrigin, setIncludeContractOrigin] =\n useState<boolean>(true);\n\n const [pendingNavigationStep, setPendingNavigationStep] =\n useState<StepKeys | null>(null);\n\n const { steps, stepsArray } = useMemo(\n () =>\n buildSteps({\n includeSelectCountry: !skipSteps?.includes('select_country'),\n includeContractOrigin: includeContractOrigin,\n includeEligibilityQuestionnaire: includeEligibilityQuestionnaire,\n includeContractDetails: includeContractDetails,\n includeContractPreview: includeContractPreview,\n }),\n [\n includeContractOrigin,\n includeEligibilityQuestionnaire,\n includeContractDetails,\n includeContractPreview,\n skipSteps,\n ],\n );\n\n const {\n fieldValues,\n stepState,\n setFieldValues,\n previousStep,\n nextStep,\n goToStep,\n setStepValues,\n } = useStepState(steps);\n\n useEffect(() => {\n if (pendingNavigationStep) {\n // Now steps have been updated\n goToStep(pendingNavigationStep);\n setPendingNavigationStep(null);\n }\n }, [pendingNavigationStep, goToStep]);\n\n const {\n data: employment,\n isLoading: isLoadingEmployment,\n refetch: refetchEmployment,\n } = useEmploymentQuery({\n employmentId: internalEmploymentId as string,\n queryParams: { exclude_files: true },\n });\n\n const defaultLegalEntity = useDefaultLegalEntity();\n\n const { data: openTasks } = useCompanyOpenTasks({\n options: {\n queryOptions: {\n enabled: stepState.currentStep.name === 'review',\n },\n },\n });\n\n const { status: employmentStatus } = employment || {};\n\n const isEmploymentReadOnly =\n employmentStatus &&\n reviewStepAllowedEmploymentStatus.includes(employmentStatus);\n\n const canInvite =\n employmentStatus &&\n !disabledInviteButtonEmploymentStatus.includes(employmentStatus);\n\n const invitedStatus: 'invited' | 'not_invited' = useMemo(() => {\n const invitedStatuses = ['invited', 'initiated'];\n const isInvited =\n employmentStatus && invitedStatuses.includes(employmentStatus);\n\n return isInvited ? 'invited' : 'not_invited';\n }, [employmentStatus]);\n\n const createEmploymentMutation = useCreateEmployment();\n const updateEmploymentMutation = useUpdateEmployment(\n internalCountryCode as string,\n options,\n );\n const createContractorContractDocumentMutation =\n useCreateContractorContractDocument();\n const uploadFileMutation = useUploadFile();\n const { mutateAsync: updateUKandSaudiFieldsMutation } =\n useUpdateUKandSaudiFields(\n createContractorContractDocumentMutation,\n uploadFileMutation,\n fieldValues,\n );\n const createEligibilityQuestionnaireMutation =\n usePostCreateEligibilityQuestionnaire();\n const manageContractorCorSubscriptionMutation =\n usePostManageContractorCorSubscription();\n const setContractOriginMutation = useSetContractOrigin();\n\n const { mutateAsyncOrThrow: updateEmploymentMutationAsync } =\n mutationToPromise(updateEmploymentMutation);\n const signContractDocumentMutation = useSignContractDocument();\n const manageContractorSubscriptionMutation =\n usePostManageContractorSubscriptions();\n const deleteContractorCorSubscriptionMutation =\n useDeleteContractorCorSubscription();\n\n const { mutateAsyncOrThrow: createEmploymentMutationAsync } =\n mutationToPromise(createEmploymentMutation);\n\n const { mutateAsyncOrThrow: createContractorContractDocumentMutationAsync } =\n mutationToPromise(createContractorContractDocumentMutation);\n\n const { mutateAsyncOrThrow: signContractDocumentMutationAsync } =\n mutationToPromise(signContractDocumentMutation);\n\n const { mutateAsyncOrThrow: manageContractorSubscriptionMutationAsync } =\n mutationToPromise(manageContractorSubscriptionMutation);\n\n const { mutateAsyncOrThrow: createEligibilityQuestionnaireMutationAsync } =\n mutationToPromise(createEligibilityQuestionnaireMutation);\n\n const { mutateAsyncOrThrow: manageContractorCorSubscriptionMutationAsync } =\n mutationToPromise(manageContractorCorSubscriptionMutation);\n\n const { mutateAsyncOrThrow: deleteContractorCorSubscriptionMutationAsync } =\n mutationToPromise(deleteContractorCorSubscriptionMutation);\n\n const { mutateAsyncOrThrow: setContractOriginMutationAsync } =\n mutationToPromise(setContractOriginMutation);\n\n // if the employment is loaded, country code has not been set yet\n // we set the internal country code with the employment country code\n if (employmentId && employment?.country?.code && !internalCountryCode) {\n setInternalCountryCode(employment.country.code);\n }\n\n const {\n selectCountryForm,\n isLoading: isLoadingCountries,\n countries,\n } = useCountriesSchemaField({\n jsfModify: options?.jsfModify?.select_country,\n });\n\n const selectedCountry = useMemo(() => {\n return countries?.find((country) => country.value === internalCountryCode);\n }, [countries, internalCountryCode]);\n\n const countryName = useMemo(() => {\n return selectedCountry?.label;\n }, [selectedCountry]);\n\n const isPricingPlanEnabled =\n stepState.currentStep.name === 'pricing_plan' ||\n (Boolean(employmentId) && isEmploymentReadOnly);\n\n const {\n form: selectContractorSubscriptionForm,\n isLoading: isLoadingContractorSubscriptions,\n contractorSubscriptions,\n filteredContractorSubscriptions,\n refetch: refetchContractorSubscriptions,\n isEligibilityQuestionnaireBlocked,\n } = useContractorSubscriptionSchemaField(\n internalEmploymentId as string,\n selectedCountry,\n {\n jsonSchemaVersion: options?.jsonSchemaVersion,\n queryOptions: {\n enabled: isPricingPlanEnabled,\n },\n excludeProducts: excludeProducts,\n jsfModify: options?.jsfModify?.pricing_plan,\n },\n );\n\n const hasEligibilityQuestionnaireSubmitted = useMemo(() => {\n return Boolean(\n contractorSubscriptions?.find(\n (subscription) =>\n subscription.product.identifier === corProductIdentifier,\n )?.eligibility_questionnaire?.submitted_at,\n );\n }, [contractorSubscriptions]);\n\n const shouldIncludeEligibilityQuestionnaire = useMemo(() => {\n if (hasEligibilityQuestionnaireSubmitted) return false;\n return selectedProduct === corProductIdentifier;\n }, [hasEligibilityQuestionnaireSubmitted, selectedProduct]);\n\n const shouldIncludeContractPreview = employment?.contractor_type !== 'cor';\n\n const selectedContractOrigin =\n (fieldValues.contract_origin as string | undefined) ??\n (stepState.values?.contract_origin?.contract_origin as\n | string\n | undefined) ??\n employment?.contract_details?.contract_origin;\n\n const isContractProvidedByCustomer =\n selectedProduct === contractorStandardProductIdentifier &&\n selectedContractOrigin === 'provided_by_customer';\n\n useEffect(() => {\n setIncludeContractDetails(!isContractProvidedByCustomer);\n }, [isContractProvidedByCustomer]);\n\n useEffect(() => {\n setIncludeEligibilityQuestionnaire(\n !isContractProvidedByCustomer && shouldIncludeEligibilityQuestionnaire,\n );\n }, [isContractProvidedByCustomer, shouldIncludeEligibilityQuestionnaire]);\n\n useEffect(() => {\n setIncludeContractPreview(\n !isContractProvidedByCustomer && shouldIncludeContractPreview,\n );\n }, [isContractProvidedByCustomer, shouldIncludeContractPreview]);\n\n const eligibilityAnswers = useMemo(() => {\n return contractorSubscriptions?.find(\n (subscription) =>\n subscription.product.identifier === corProductIdentifier,\n )?.eligibility_questionnaire?.responses;\n }, [contractorSubscriptions]);\n\n const formType =\n stepToFormSchemaMap[stepState.currentStep.name] ||\n 'contractor_basic_information';\n const employmentKey = jsonSchemaToEmployment[formType] as keyof Employment;\n const serverEmploymentData = (employment?.[employmentKey] || {}) as Record<\n string,\n unknown\n >;\n\n const useJSONSchema = ({\n form,\n options: jsonSchemaOptions = {},\n query = {},\n }: {\n form: JSONSchemaFormType;\n options?: {\n jsfModify?: JSFModify;\n queryOptions?: { enabled?: boolean };\n jsonSchemaVersion?: FlowOptions['jsonSchemaVersion'];\n };\n query?: Record<string, string>;\n }) => {\n const hasUserEnteredAnyValues = Object.keys(fieldValues).length > 0;\n // when you write on the fields, the values are stored in the fieldValues state\n // when values are stored in the stepState is when the user has navigated to the step\n // and then we have the values from the server and the onboardingInitialValues that the user can inject,\n const mergedFormValues = hasUserEnteredAnyValues\n ? {\n ...onboardingInitialValues,\n ...stepState.values?.[stepState.currentStep.name], // Restore values for the current step\n ...fieldValues,\n }\n : {\n ...onboardingInitialValues,\n ...serverEmploymentData,\n };\n\n return useJSONSchemaForm({\n countryCode: internalCountryCode as string,\n form: form,\n fieldValues: mergedFormValues,\n query,\n options: {\n ...jsonSchemaOptions,\n queryOptions: {\n enabled: jsonSchemaOptions.queryOptions?.enabled ?? true,\n },\n },\n });\n };\n\n const isBasicInformationDetailsEnabled = Boolean(\n internalCountryCode &&\n (stepState.currentStep.name === 'basic_information' ||\n Boolean(employmentId)),\n );\n\n const isIR35FileEnabled = Boolean(\n internalCountryCode === 'GBR' &&\n employmentId &&\n stepState.currentStep.name === 'basic_information',\n );\n\n const { data: ir35File, isLoading: isLoadingIR35File } = useGetIR35File(\n employmentId as string,\n {\n enabled: isIR35FileEnabled,\n },\n );\n\n const { data: contractDocuments, isLoading: isLoadingContractDocuments } =\n useGetContractDocuments(internalEmploymentId as string, {\n enabled: Boolean(internalEmploymentId),\n });\n\n useEffect(() => {\n if (\n contractDocuments &&\n contractDocuments.length > 0 &&\n !internalContractDocumentId\n ) {\n setInternalContractDocumentId(contractDocuments[0].id);\n }\n }, [contractDocuments, internalContractDocumentId]);\n\n const {\n data: basicInformationForm,\n isLoading: isLoadingBasicInformationForm,\n } = useJSONSchema({\n form: 'contractor_basic_information',\n options: {\n jsfModify: buildBasicInformationJsfModify(\n internalCountryCode as string,\n countryName,\n options,\n ),\n queryOptions: {\n enabled: isBasicInformationDetailsEnabled,\n },\n },\n });\n\n const descriptionProvisionalStartDate = useMemo(() => {\n return calculateProvisionalStartDateDescription(\n employment?.basic_information?.provisional_start_date as string,\n fieldValues?.service_duration?.provisional_start_date as string,\n );\n }, [\n employment?.basic_information?.provisional_start_date,\n fieldValues?.service_duration?.provisional_start_date,\n ]);\n\n /**\n * When the user selects COR, the data isn't saved yet in the BE\n * We need to use the internalState to know what has happened\n */\n const selectedPricingPlan = useMemo(() => {\n const subscriptions = {\n standard: contractorStandardProductIdentifier,\n plus: contractorPlusProductIdentifier,\n cor: corProductIdentifier,\n };\n\n // HIGHEST PRIORITY: Current form value (user is actively selecting)\n if (fieldValues.subscription) {\n return fieldValues.subscription;\n }\n\n // SECOND: Previously submitted value in this session\n const subscription = stepState.values?.pricing_plan?.subscription;\n if (subscription && !isEligibilityQuestionnaireBlocked) {\n return subscription;\n }\n\n // THIRD: Backend state (eligibility submitted or employment contractor_type)\n if (\n hasEligibilityQuestionnaireSubmitted &&\n !isEligibilityQuestionnaireBlocked\n ) {\n return corProductIdentifier;\n }\n\n // Fourth: If the eligibility questionnaire is blocked and has been submitted, return the standard product\n if (\n isEligibilityQuestionnaireBlocked &&\n hasEligibilityQuestionnaireSubmitted\n ) {\n return contractorStandardProductIdentifier;\n }\n\n // Fifth: If there are no available subscriptions, return undefined\n const hasAvailableSubscriptions =\n filteredContractorSubscriptions &&\n filteredContractorSubscriptions.length > 0;\n\n if (!hasAvailableSubscriptions) {\n return undefined;\n }\n\n // FALLBACK: Employment contractor_type or default\n return (\n subscriptions[\n employment?.contractor_type as keyof typeof subscriptions\n ] || contractorStandardProductIdentifier\n );\n }, [\n fieldValues,\n stepState.values,\n hasEligibilityQuestionnaireSubmitted,\n employment?.contractor_type,\n isEligibilityQuestionnaireBlocked,\n filteredContractorSubscriptions,\n ]);\n\n useEffect(() => {\n if (selectedPricingPlan && selectedPricingPlan !== selectedProduct) {\n setSelectedProduct(selectedPricingPlan);\n }\n }, [selectedPricingPlan, selectedProduct]);\n\n useEffect(() => {\n setIncludeContractOrigin(\n !skipSteps?.includes('contract_origin') &&\n selectedPricingPlan === contractorStandardProductIdentifier,\n );\n }, [skipSteps, selectedPricingPlan]);\n\n const eligibilityFields = useMemo(() => {\n return {\n ...eligibilityAnswers,\n ...onboardingInitialValues,\n ...stepState.values?.eligibility_questionnaire,\n ...fieldValues,\n };\n }, [\n eligibilityAnswers,\n onboardingInitialValues,\n stepState.values?.eligibility_questionnaire,\n fieldValues,\n ]);\n\n const isEligibilityQuestionnaireEnabled = useMemo(() => {\n return (\n (selectedPricingPlan === corProductIdentifier &&\n stepState.currentStep.name === 'eligibility_questionnaire') ||\n (Boolean(employmentId) &&\n isEmploymentReadOnly &&\n selectedPricingPlan === corProductIdentifier)\n );\n }, [\n selectedPricingPlan,\n stepState.currentStep.name,\n employmentId,\n isEmploymentReadOnly,\n ]);\n\n const {\n data: eligibilityQuestionnaireForm,\n isLoading: isLoadingEligibilityQuestionnaire,\n } = useGetEligibilityQuestionnaire({\n options: {\n queryOptions: {\n enabled: isEligibilityQuestionnaireEnabled,\n },\n jsfModify: options?.jsfModify?.eligibility_questionnaire,\n },\n fieldValues: eligibilityFields,\n });\n\n const isContractorOnboardingDetailsEnabled = Boolean(\n (internalCountryCode &&\n stepState.currentStep.name === 'contract_details') ||\n isEmploymentReadOnly,\n );\n\n const {\n data: contractorOnboardingDetailsForm,\n isLoading: isLoadingContractorOnboardingDetailsForm,\n } = useContractorOnboardingDetailsSchemaWithCurrencies({\n countryCode: internalCountryCode as string,\n fieldValues: fieldValues,\n employmentId: internalEmploymentId as string,\n options: {\n queryOptions: {\n enabled: isContractorOnboardingDetailsEnabled,\n },\n jsfModify: buildContractDetailsJsfModify(\n options?.jsfModify?.contract_details,\n descriptionProvisionalStartDate,\n selectedPricingPlan,\n fieldValues,\n selectedPricingPlan === corProductIdentifier,\n ),\n },\n });\n\n const isSignatureSchemaEnabled = useMemo(() => {\n return (\n stepState.currentStep.name === 'contract_preview' ||\n (Boolean(employmentId) && isEmploymentReadOnly)\n );\n }, [stepState.currentStep.name, employmentId, isEmploymentReadOnly]);\n\n const { data: signatureSchemaForm } = useGetContractDocumentSignatureSchema({\n fieldValues: fieldValues,\n options: {\n queryOptions: {\n enabled: isSignatureSchemaEnabled,\n },\n jsfModify: buildContractPreviewJsfModify(options, fieldValues),\n },\n });\n\n const { data: contractOriginForm } = useGetContractOriginSchema({\n fieldValues: fieldValues,\n options: {\n jsfModify: options?.jsfModify?.contract_origin,\n },\n });\n\n const {\n data: documentPreviewPdf,\n isLoading: isLoadingDocumentPreviewForm,\n refetch: refetchDocumentPreviewForm,\n } = useGetShowContractDocument({\n employmentId: internalEmploymentId as string,\n contractDocumentId: internalContractDocumentId as string,\n options: {\n queryOptions: {\n enabled: Boolean(internalContractDocumentId),\n },\n },\n });\n\n const { hasCompanySignedContract } = useHasCompanySignedContract({\n employmentId: internalEmploymentId as string,\n contractDocumentId: internalContractDocumentId as string,\n options: {\n queryOptions: {\n enabled: Boolean(internalContractDocumentId),\n },\n },\n });\n\n const stepFields: Record<StepKeys, JSFFields> = useMemo(\n () => ({\n select_country: selectCountryForm?.fields || [],\n basic_information: basicInformationForm?.fields || [],\n contract_origin: contractOriginForm?.fields || [],\n pricing_plan: selectContractorSubscriptionForm?.fields || [],\n eligibility_questionnaire: eligibilityQuestionnaireForm?.fields || [],\n contract_details: contractorOnboardingDetailsForm?.fields || [],\n contract_preview: signatureSchemaForm?.fields || [],\n review: [],\n }),\n [\n selectCountryForm?.fields,\n basicInformationForm?.fields,\n contractOriginForm?.fields,\n selectContractorSubscriptionForm?.fields,\n contractorOnboardingDetailsForm?.fields,\n signatureSchemaForm?.fields,\n eligibilityQuestionnaireForm?.fields,\n ],\n );\n\n const stepFieldsWithFlatFieldsets: Record<\n StepKeys,\n JSFFieldset | null | undefined\n > = {\n select_country: null,\n basic_information: basicInformationForm?.meta['x-jsf-fieldsets'],\n contract_origin: null,\n pricing_plan: null,\n contract_details: contractorOnboardingDetailsForm?.meta['x-jsf-fieldsets'],\n eligibility_questionnaire: null,\n contract_preview: null,\n review: null,\n };\n\n const stepPresentation: Record<\n StepKeys,\n Record<string, unknown> | null | undefined\n > = {\n select_country: selectCountryForm?.meta?.['x-jsf-presentation'],\n basic_information: basicInformationForm?.meta?.['x-jsf-presentation'],\n contract_origin: contractOriginForm?.meta?.['x-jsf-presentation'],\n pricing_plan:\n selectContractorSubscriptionForm?.meta?.['x-jsf-presentation'],\n eligibility_questionnaire:\n eligibilityQuestionnaireForm?.meta?.['x-jsf-presentation'],\n contract_details:\n contractorOnboardingDetailsForm?.meta?.['x-jsf-presentation'],\n contract_preview: signatureSchemaForm?.meta?.['x-jsf-presentation'],\n review: null,\n };\n\n const {\n country,\n basic_information: employmentBasicInformation = {},\n contract_details: employmentContractDetails = {},\n } = employment || {};\n\n const employmentCountryCode = country?.code;\n\n const selectCountryInitialValues = useMemo(\n () =>\n getInitialValues(stepFields.select_country, {\n country: internalCountryCode || employmentCountryCode || '',\n }),\n [stepFields.select_country, internalCountryCode, employmentCountryCode],\n );\n\n // memoize file conversion to avoid re-converting the file on every render\n // noticed performance issues when not doing memoizing individually\n const convertedIr35File = useMemo(() => {\n if (!ir35File?.content) return null;\n return dataURLtoFile(ir35File.content as unknown as string, ir35File.name);\n }, [ir35File?.content, ir35File?.name]);\n\n const basicInformationInitialValues = useMemo(() => {\n const initialValues = {\n ...onboardingInitialValues,\n ...employmentBasicInformation,\n ir35: employment?.contract_details?.ir_35,\n nationality_status: employment?.contract_details?.nationality,\n ...(convertedIr35File && {\n ir35_sds_file: [convertedIr35File],\n }),\n };\n\n return getInitialValues(stepFields.basic_information, initialValues);\n }, [\n onboardingInitialValues,\n employmentBasicInformation,\n employment?.contract_details?.ir_35,\n employment?.contract_details?.nationality,\n convertedIr35File,\n stepFields.basic_information,\n ]);\n\n const contractOriginInitialValues = useMemo(() => {\n const initialValues = {\n ...onboardingInitialValues,\n contract_origin: employment?.contract_details?.contract_origin,\n };\n return getInitialValues(stepFields.contract_origin, initialValues);\n }, [\n stepFields.contract_origin,\n onboardingInitialValues,\n employment?.contract_details?.contract_origin,\n ]);\n\n const contractDetailsInitialValues = useMemo(() => {\n const hardcodedValues = {\n service_duration: {\n provisional_start_date:\n employmentBasicInformation.provisional_start_date,\n },\n };\n const initialValues = {\n ...hardcodedValues,\n ...onboardingInitialValues,\n ...employmentContractDetails,\n };\n\n return getInitialValues(stepFields.contract_details, initialValues);\n }, [\n stepFields.contract_details,\n employmentContractDetails,\n onboardingInitialValues,\n employmentBasicInformation,\n ]);\n\n const contractPreviewInitialValues = useMemo(() => {\n const signature = documentPreviewPdf?.contract_document?.signatories?.find(\n (signatory) => signatory.type === 'company',\n );\n const initialValues = {\n ...onboardingInitialValues,\n signature: signature?.signature,\n };\n\n return getInitialValues(stepFields.contract_preview, initialValues);\n }, [\n stepFields.contract_preview,\n onboardingInitialValues,\n documentPreviewPdf,\n ]);\n\n const pricingPlanInitialValues = useMemo(() => {\n const preselectedPricingPlan = {\n subscription: selectedPricingPlan,\n };\n const initialValues = {\n ...preselectedPricingPlan,\n ...onboardingInitialValues,\n };\n\n return getInitialValues(stepFields.pricing_plan, initialValues);\n }, [stepFields.pricing_plan, onboardingInitialValues, selectedPricingPlan]);\n\n const eligibilityQuestionnaireInitialValues = useMemo(() => {\n const initialValues = {\n ...onboardingInitialValues,\n ...eligibilityAnswers,\n };\n return getInitialValues(\n stepFields.eligibility_questionnaire,\n initialValues,\n );\n }, [\n stepFields.eligibility_questionnaire,\n onboardingInitialValues,\n eligibilityAnswers,\n ]);\n\n const initialValues = useMemo(() => {\n return {\n select_country: selectCountryInitialValues,\n basic_information: basicInformationInitialValues,\n contract_origin: contractOriginInitialValues,\n contract_details: contractDetailsInitialValues,\n contract_preview: contractPreviewInitialValues,\n pricing_plan: pricingPlanInitialValues,\n eligibility_questionnaire: eligibilityQuestionnaireInitialValues,\n };\n }, [\n selectCountryInitialValues,\n basicInformationInitialValues,\n contractOriginInitialValues,\n contractDetailsInitialValues,\n contractPreviewInitialValues,\n pricingPlanInitialValues,\n eligibilityQuestionnaireInitialValues,\n ]);\n\n const shouldHandleReadOnlyEmployment = Boolean(\n employmentId &&\n isEmploymentReadOnly &&\n stepState.currentStep.name !== 'review',\n );\n\n const initialLoading =\n isLoadingCountries ||\n isLoadingBasicInformationForm ||\n isLoadingEmployment ||\n isLoadingContractorOnboardingDetailsForm ||\n isLoadingContractorSubscriptions ||\n isLoadingDocumentPreviewForm ||\n isLoadingIR35File ||\n isLoadingContractDocuments ||\n isLoadingEligibilityQuestionnaire;\n\n const isNavigatingToReview = useMemo(() => {\n const isCor = employment?.contractor_type === 'cor';\n const hasContractPreviewFields =\n isCor || stepFields.contract_preview.length > 0;\n\n return Boolean(\n shouldHandleReadOnlyEmployment &&\n !initialLoading &&\n Boolean(internalContractDocumentId) &&\n stepFields.basic_information.length > 0 &&\n stepFields.contract_details.length > 0 &&\n hasContractPreviewFields,\n );\n }, [\n shouldHandleReadOnlyEmployment,\n initialLoading,\n internalContractDocumentId,\n stepFields.basic_information.length,\n stepFields.contract_details.length,\n stepFields.contract_preview.length,\n employment?.contractor_type,\n ]);\n\n useEffect(() => {\n if (isNavigatingToReview) {\n fieldsMetaRef.current = {\n select_country: prettifyFormValues(\n selectCountryInitialValues,\n stepFields.select_country,\n { skipMoneyConversion: true },\n ),\n basic_information: prettifyFormValues(\n basicInformationInitialValues,\n stepFields.basic_information,\n { skipMoneyConversion: true },\n ),\n contract_origin: {},\n contract_details: prettifyFormValues(\n contractDetailsInitialValues,\n stepFields.contract_details,\n { skipMoneyConversion: true },\n ),\n contract_preview: prettifyFormValues(\n contractPreviewInitialValues,\n stepFields.contract_preview,\n { skipMoneyConversion: true },\n ),\n pricing_plan: prettifyFormValues(\n pricingPlanInitialValues,\n stepFields.pricing_plan,\n { skipMoneyConversion: true },\n ),\n eligibility_questionnaire: prettifyFormValues(\n eligibilityQuestionnaireInitialValues,\n stepFields.eligibility_questionnaire,\n { skipMoneyConversion: true },\n ),\n };\n\n setStepValues({\n select_country: selectCountryInitialValues,\n basic_information: basicInformationInitialValues,\n contract_origin: {},\n contract_details: contractDetailsInitialValues,\n contract_preview: contractPreviewInitialValues,\n pricing_plan: pricingPlanInitialValues,\n eligibility_questionnaire: eligibilityQuestionnaireInitialValues,\n review: {},\n });\n goToStep('review');\n }\n }, [\n isNavigatingToReview,\n goToStep,\n selectCountryInitialValues,\n basicInformationInitialValues,\n contractDetailsInitialValues,\n setStepValues,\n stepFields.select_country,\n stepFields.basic_information,\n stepFields.contract_details,\n stepFields.pricing_plan,\n pricingPlanInitialValues,\n stepFields.contract_preview,\n contractPreviewInitialValues,\n stepFields.eligibility_questionnaire,\n eligibilityQuestionnaireInitialValues,\n ]);\n\n const goTo = (step: StepKeys) => {\n goToStep(step);\n };\n\n const parseFormValues = async (values: FieldValues) => {\n if (selectCountryForm && stepState.currentStep.name === 'select_country') {\n return values;\n }\n\n if (\n basicInformationForm &&\n stepState.currentStep.name === 'basic_information'\n ) {\n return await parseJSFToValidate(values, basicInformationForm?.fields, {\n isPartialValidation: false,\n });\n }\n\n if (\n contractorOnboardingDetailsForm &&\n stepState.currentStep.name === 'contract_details'\n ) {\n return await parseJSFToValidate(\n values,\n contractorOnboardingDetailsForm?.fields,\n {\n isPartialValidation: false,\n },\n );\n }\n\n if (\n signatureSchemaForm &&\n stepState.currentStep.name === 'contract_preview'\n ) {\n return await parseJSFToValidate(values, signatureSchemaForm?.fields, {\n isPartialValidation: false,\n });\n }\n\n if (\n selectContractorSubscriptionForm &&\n stepState.currentStep.name === 'pricing_plan'\n ) {\n return await parseJSFToValidate(\n values,\n selectContractorSubscriptionForm?.fields,\n {\n isPartialValidation: false,\n },\n );\n }\n\n if (\n eligibilityQuestionnaireForm &&\n stepState.currentStep.name === 'eligibility_questionnaire'\n ) {\n return await parseJSFToValidate(\n values,\n eligibilityQuestionnaireForm?.fields,\n {\n isPartialValidation: false,\n },\n );\n }\n\n if (\n contractOriginForm &&\n stepState.currentStep.name === 'contract_origin'\n ) {\n return await parseJSFToValidate(values, contractOriginForm?.fields, {\n isPartialValidation: false,\n });\n }\n\n return {};\n };\n\n /**\n * Extracts AI validation error from the error response\n * @param error - The error object from the API call\n * @returns The AI validation error if found, null otherwise\n */\n const extractAiValidationError = (\n error: unknown,\n ): AiValidationError | null => {\n if (!isMutationError(error)) {\n return null;\n }\n\n const rawError = error.normalizedErrors.services_and_deliverables;\n\n // The backend's normalize_errors wraps non-list values in an array,\n // so the AI validation error object arrives as a single-element array.\n const servicesAndDeliverablesError = (\n Array.isArray(rawError) ? rawError[0] : rawError\n ) as\n | {\n error: string[];\n source: string;\n skippable: boolean;\n }\n | undefined;\n\n if (servicesAndDeliverablesError?.source === REMOTE_AI_ERROR_SOURCE) {\n return {\n error: servicesAndDeliverablesError.error,\n source: servicesAndDeliverablesError.source,\n skippable: servicesAndDeliverablesError.skippable,\n };\n }\n return null;\n };\n\n async function onSubmit(values: FieldValues) {\n const currentStepName = stepState.currentStep.name;\n const parsedValues = await parseFormValues(values);\n\n if (currentStepName in fieldsMetaRef.current) {\n fieldsMetaRef.current[\n currentStepName as keyof typeof fieldsMetaRef.current\n ] = prettifyFormValues(parsedValues, stepFields[currentStepName]);\n }\n switch (stepState.currentStep.name) {\n case 'select_country': {\n setInternalCountryCode(parsedValues.country);\n return Promise.resolve({ data: { countryCode: parsedValues.country } });\n }\n case 'basic_information': {\n const isEmploymentNotLoaded =\n !internalEmploymentId && internalCountryCode;\n const hasChangedCountry =\n internalEmploymentId &&\n internalCountryCode &&\n employment?.country &&\n employment?.country.code !== internalCountryCode;\n\n if (isEmploymentNotLoaded || hasChangedCountry) {\n const basicInformationParsedValues = omit(\n parsedValues,\n 'nationality_status',\n 'ir35',\n 'ir35_sds_file',\n );\n const basicInformationPayload: EmploymentCreateParams = {\n basic_information: basicInformationParsedValues,\n type: 'contractor',\n country_code: internalCountryCode,\n external_id: externalId,\n };\n const response = await createEmploymentMutationAsync(\n basicInformationPayload,\n );\n const employmentId = response?.data?.employment?.id;\n if (!employmentId) {\n throw createStructuredError('Employment ID not found');\n }\n\n await updateUKandSaudiFieldsMutation({\n employmentId: employmentId as string,\n });\n\n // Only update state (triggers queries with fully consistent backend state) if not caused a bug\n // if one of the updateUKandSaudiFieldsMutation fails with a 422 for example\n setInternalEmploymentId(employmentId);\n\n return response;\n } else if (internalEmploymentId) {\n const basicInformationParsedValues = omit(\n parsedValues,\n 'nationality_status',\n 'ir35',\n 'ir35_sds_file',\n );\n\n await updateUKandSaudiFieldsMutation({\n employmentId: internalEmploymentId,\n });\n return updateEmploymentMutationAsync({\n employmentId: internalEmploymentId,\n basic_information: basicInformationParsedValues,\n });\n }\n\n return;\n }\n case 'contract_details': {\n const {\n services_and_deliverables_ai_warning:\n _servicesAndDeliverablesAiWarning,\n services_and_deliverables_error_skippable:\n _servicesAndDeliverablesErrorSkippable,\n ...contractDetailsData\n } = parsedValues;\n\n const shouldSkipAiChecks =\n fieldValues.services_and_deliverables_error_skippable === true;\n const payload: CreateContractDocument = {\n contract_document: contractDetailsData,\n skip_ai_checks: shouldSkipAiChecks,\n };\n\n try {\n const response = await createContractorContractDocumentMutationAsync({\n employmentId: internalEmploymentId as string,\n payload,\n });\n const contractDocumentId = response?.data?.contract_document?.id;\n if (!contractDocumentId) {\n throw createStructuredError('Contract document ID not found');\n }\n setInternalContractDocumentId(contractDocumentId);\n\n return response;\n } catch (error) {\n const aiError = extractAiValidationError(error);\n if (aiError) {\n const isContractorOfRecord =\n selectedPricingPlan === corProductIdentifier;\n setFieldValues({\n ...values,\n services_and_deliverables_ai_warning:\n transformAiErrorResponse(isContractorOfRecord),\n services_and_deliverables_error_skippable: aiError.skippable,\n });\n }\n\n throw error;\n }\n }\n\n case 'contract_preview': {\n if (hasCompanySignedContract) {\n return Promise.resolve({\n data: {\n contract_document: {\n id: internalContractDocumentId,\n },\n },\n });\n }\n const response = await signContractDocumentMutationAsync({\n employmentId: internalEmploymentId as string,\n contractDocumentId: internalContractDocumentId as string,\n payload: {\n signature: parsedValues.signature,\n },\n });\n await refetchDocumentPreviewForm();\n return response;\n }\n case 'pricing_plan': {\n if (values.subscription === eorProductIdentifier) {\n // EOR selection - no API call needed at this step\n return Promise.resolve({\n data: {\n subscription: values.subscription,\n },\n });\n }\n // If there are no available contractor subscriptions, throw an error\n if (filteredContractorSubscriptions.length === 0) {\n throw createStructuredError('No available subscriptions.');\n }\n\n if (\n !values.subscription &&\n filteredContractorSubscriptions.length > 0\n ) {\n throw createStructuredError('Please select a subscription plan.');\n }\n\n const blockedProductsEligibility = [\n corProductIdentifier,\n contractorPlusProductIdentifier,\n ];\n\n if (\n isEligibilityQuestionnaireBlocked &&\n blockedProductsEligibility.includes(values.subscription)\n ) {\n throw createStructuredError(\n `This individual is not eligible for ${\n CONTRACT_PRODUCT_TITLES[\n values.subscription as keyof typeof CONTRACT_PRODUCT_TITLES\n ]\n }.`,\n );\n }\n\n if (\n hasEligibilityQuestionnaireSubmitted &&\n values.subscription !== corProductIdentifier\n ) {\n try {\n await deleteContractorCorSubscriptionMutationAsync({\n employmentId: internalEmploymentId as string,\n });\n await refetchContractorSubscriptions();\n } catch (error) {\n if ((error as $TSFixMe)?.response?.status !== 404) {\n throw error;\n }\n // Still refetch to update the UI state\n await refetchContractorSubscriptions();\n }\n }\n\n if (values.subscription == contractorStandardProductIdentifier) {\n return manageContractorSubscriptionMutationAsync({\n employmentId: internalEmploymentId as string,\n payload: {\n operation: 'downgrade',\n },\n });\n } else if (values.subscription == contractorPlusProductIdentifier) {\n return manageContractorSubscriptionMutationAsync({\n employmentId: internalEmploymentId as string,\n payload: {\n operation: 'upgrade',\n },\n });\n } else if (values.subscription == corProductIdentifier) {\n if (\n hasEligibilityQuestionnaireSubmitted &&\n employment?.contractor_type !== 'cor'\n ) {\n return manageContractorCorSubscriptionMutationAsync({\n employmentId: internalEmploymentId as string,\n });\n } else {\n return Promise.resolve({\n data: { subscription: values.subscription },\n });\n }\n }\n\n throw createStructuredError('invalid selection');\n }\n\n case 'contract_origin': {\n // Step visibility is already reconciled reactively from the selected\n // value, so a plain next() lands on the right step (review when the\n // customer provides their own contract, otherwise eligibility /\n // contract_details). We only persist the choice server-side here.\n if (values.contract_origin === 'provided_by_customer') {\n await setContractOriginMutationAsync({\n employmentId: internalEmploymentId as string,\n contractOrigin: 'provided_by_customer',\n templateType: 'contractor_agreement',\n });\n }\n\n return {\n data: { contractOrigin: values.contract_origin },\n };\n }\n\n case 'eligibility_questionnaire': {\n try {\n const response = await createEligibilityQuestionnaireMutationAsync({\n employmentId: internalEmploymentId as string,\n payload: parsedValues,\n });\n\n const isEligibilityQuestionnaireBlocked = response?.data?.is_blocking;\n\n if (isEligibilityQuestionnaireBlocked) {\n setIncludeEligibilityQuestionnaire(false);\n setPendingNavigationStep('pricing_plan');\n throw createStructuredError(\n 'This individual is not eligible for Contractor of Record.',\n );\n }\n\n return await manageContractorCorSubscriptionMutationAsync({\n employmentId: internalEmploymentId as string,\n });\n } finally {\n // Always refetch to keep state in sync, even on error\n await refetchContractorSubscriptions();\n }\n }\n\n default: {\n throw createStructuredError('Invalid step state');\n }\n }\n }\n\n const markContractAsReviewed = () => {\n // Notify parent to sync form state\n onContractReviewedRef.current?.();\n };\n\n const handleNextStep = () => {\n if (internalEmploymentId) {\n refetchEmployment();\n }\n nextStep();\n };\n\n const isLoading = initialLoading || shouldHandleReadOnlyEmployment;\n\n return {\n /**\n * Loading state indicating if the flow is loading data\n */\n isLoading,\n\n /**\n * Current state of the form fields for the current step.\n */\n fieldValues,\n\n /**\n * Current step state containing the current step and total number of steps\n */\n stepState,\n\n /**\n * Function to update the current form field values\n * @param values - New form values to set\n */\n checkFieldUpdates: setFieldValues,\n\n /**\n * Function to mark the contract as reviewed\n * @param values - New form values to check\n * @returns {boolean}\n */\n markContractAsReviewed,\n\n /**\n * Function to handle going back to the previous step\n * @returns {void}\n */\n back: previousStep,\n\n /**\n * Function to handle going to the next step\n * @returns {void}\n */\n next: handleNextStep,\n\n /**\n * Function to handle going to a specific step\n * @param step The step to go to.\n * @returns {void}\n */\n goTo: goTo,\n\n /**\n * Function to handle form submission\n * @param values - Form values to submit\n * @returns Promise resolving to the mutation result\n */\n onSubmit,\n\n /**\n * Array of form fields from the onboarding schema\n */\n fields: stepFields[stepState.currentStep.name],\n\n /**\n * Fields metadata for each step\n */\n meta: {\n fields: fieldsMetaRef.current,\n fieldsets: stepFieldsWithFlatFieldsets[stepState.currentStep.name],\n presentation: stepPresentation[stepState.currentStep.name],\n },\n\n /**\n * Function to parse form values before submission\n * @param values - Form values to parse\n * @returns Parsed form values\n */\n parseFormValues,\n\n /**\n * Indicates whether AI validation errors can be skipped (user can continue at their own risk).\n * True when there's a skippable AI validation error on services_and_deliverables field.\n * @returns {boolean}\n */\n canSkipAiValidation:\n fieldValues.services_and_deliverables_error_skippable === true,\n\n /**\n * Function to validate form values against the onboarding schema\n * @param values - Form values to validate\n * @returns Validation result or null if no schema is available\n */\n handleValidation: async (\n values: FieldValues,\n ): Promise<ValidationResult | null> => {\n if (stepState.currentStep.name === 'select_country') {\n return selectCountryForm.handleValidation(values);\n }\n\n if (\n basicInformationForm &&\n stepState.currentStep.name === 'basic_information'\n ) {\n const parsedValues = await parseJSFToValidate(\n values,\n basicInformationForm?.fields,\n { isPartialValidation: false },\n );\n return basicInformationForm?.handleValidation(parsedValues);\n }\n\n if (\n contractorOnboardingDetailsForm &&\n stepState.currentStep.name === 'contract_details'\n ) {\n const parsedValues = await parseJSFToValidate(\n values,\n contractorOnboardingDetailsForm?.fields,\n { isPartialValidation: false },\n );\n return contractorOnboardingDetailsForm?.handleValidation(parsedValues);\n }\n\n if (\n signatureSchemaForm &&\n stepState.currentStep.name === 'contract_preview'\n ) {\n const parsedValues = await parseJSFToValidate(\n values,\n signatureSchemaForm?.fields,\n { isPartialValidation: true },\n );\n return signatureSchemaForm?.handleValidation(parsedValues);\n }\n\n if (\n selectContractorSubscriptionForm &&\n stepState.currentStep.name === 'pricing_plan'\n ) {\n const parsedValues = await parseJSFToValidate(\n values,\n selectContractorSubscriptionForm?.fields,\n { isPartialValidation: false },\n );\n return selectContractorSubscriptionForm?.handleValidation(parsedValues);\n }\n\n if (\n eligibilityQuestionnaireForm &&\n stepState.currentStep.name === 'eligibility_questionnaire'\n ) {\n const parsedValues = await parseJSFToValidate(\n values,\n eligibilityQuestionnaireForm?.fields,\n { isPartialValidation: false },\n );\n return eligibilityQuestionnaireForm?.handleValidation(parsedValues);\n }\n\n if (\n contractOriginForm &&\n stepState.currentStep.name === 'contract_origin'\n ) {\n const parsedValues = await parseJSFToValidate(\n values,\n contractOriginForm?.fields,\n { isPartialValidation: false },\n );\n return contractOriginForm?.handleValidation(parsedValues);\n }\n\n return null;\n },\n\n /**\n * Initial form values\n */\n initialValues,\n\n /**\n * Employment id\n */\n employmentId: internalEmploymentId,\n\n /**\n * Function to refetch the employment data\n * @returns {void}\n */\n refetchEmployment: refetchEmployment,\n\n /**\n * Loading state indicating if the onboarding mutation is in progress\n */\n isSubmitting:\n createEmploymentMutation.isPending ||\n updateEmploymentMutation.isPending ||\n createContractorContractDocumentMutation.isPending ||\n signContractDocumentMutation.isPending ||\n manageContractorSubscriptionMutation.isPending ||\n uploadFileMutation.isPending ||\n createEligibilityQuestionnaireMutation.isPending ||\n manageContractorCorSubscriptionMutation.isPending ||\n deleteContractorCorSubscriptionMutation.isPending ||\n setContractOriginMutation.isPending,\n\n /**\n * Document preview PDF data\n */\n documentPreviewPdf,\n\n /**\n * let's the user know if the company can invite employees\n * @returns {boolean}\n */\n canInvite,\n\n /**\n * let's the user know that the employment cannot be edited, happens when employment.status is invited\n * @returns {boolean}\n */\n isEmploymentReadOnly,\n /**\n * let's the user know if the employment is invited or not\n * @returns {'invited' | 'not_invited'}\n */\n invitedStatus,\n\n /**\n * Employment data\n * @returns {Employment}\n */\n employment,\n\n /**\n * Default legal entity\n * @returns {CompanyLegalEntity}\n */\n defaultLegalEntity,\n\n /**\n * Whether the company needs to complete KYB verification before contractors can be paid.\n * Use this to show a company verification nudge banner on the review step.\n */\n needsCompanyVerification:\n openTasks?.some((a) => a.type === 'verify_company') ?? false,\n\n /**\n * Whether the company needs to set up Remote Payments.\n * Use this to show a Remote Payments setup nudge banner on the review step.\n */\n needsRemotePaymentsSetup:\n openTasks?.some((a) => a.type === 'setup_remote_payments') ?? false,\n\n /**\n * Steps array\n * @returns {Array<{name: string, index: number, visible: boolean, label: string}>}\n */\n steps: stepsArray,\n };\n};\n","import { useQuery } from '@tanstack/react-query';\nimport {\n getV1CompaniesCompanyIdLegalEntities,\n CompanyLegalEntity,\n} from '@/src/client';\nimport { Client } from '@/src/client/client';\nimport { useClient } from '@/src/context';\nimport { useIdentity } from '@/src/common/api/identity';\nimport { hasCompany } from '@/src/common/api/companies';\n\n/**\n * Hook to get the legal entities for a company\n * @param companyId - The company ID\n * @returns The legal entities\n */\nexport const useLegalEntities = () => {\n const { client } = useClient();\n const { data: identity } = useIdentity();\n const companyId = hasCompany(identity) ? (identity?.company?.id ?? '') : '';\n\n return useQuery({\n queryKey: ['legal-entities', companyId],\n queryFn: () =>\n getV1CompaniesCompanyIdLegalEntities({\n client: client as Client,\n path: {\n company_id: companyId,\n },\n query: {\n page_size: 100,\n },\n }),\n select: (data) => data.data?.data?.legal_entities,\n enabled: !!companyId,\n });\n};\n\nexport const useDefaultLegalEntity = () => {\n const { data: legalEntities } = useLegalEntities();\n return legalEntities?.find(\n (legalEntity: CompanyLegalEntity) => legalEntity.is_default,\n );\n};\n"],"mappings":"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","names":["useEffect","useMemo","useRef","useState","omit","useQuery","useLegalEntities","__name","client","useClient","identity","useIdentity","companyId","hasCompany","useQuery","getV1CompaniesCompanyIdLegalEntities","data","useDefaultLegalEntity","legalEntities","legalEntity","stepToFormSchemaMap","jsonSchemaToEmployment","useContractorOnboarding","__name","countryCode","externalId","employmentId","skipSteps","options","onboardingInitialValues","excludeProducts","onContractReviewedRef","useRef","useEffect","internalCountryCode","setInternalCountryCode","useState","internalEmploymentId","setInternalEmploymentId","internalContractDocumentId","setInternalContractDocumentId","fieldsMetaRef","selectedProduct","setSelectedProduct","includeEligibilityQuestionnaire","setIncludeEligibilityQuestionnaire","includeContractPreview","setIncludeContractPreview","includeContractDetails","setIncludeContractDetails","includeContractOrigin","setIncludeContractOrigin","pendingNavigationStep","setPendingNavigationStep","steps","stepsArray","useMemo","buildSteps","fieldValues","stepState","setFieldValues","previousStep","nextStep","goToStep","setStepValues","useStepState","employment","isLoadingEmployment","refetchEmployment","useEmploymentQuery","defaultLegalEntity","useDefaultLegalEntity","openTasks","useCompanyOpenTasks","employmentStatus","isEmploymentReadOnly","reviewStepAllowedEmploymentStatus","canInvite","disabledInviteButtonEmploymentStatus","invitedStatus","createEmploymentMutation","useCreateEmployment","updateEmploymentMutation","useUpdateEmployment","createContractorContractDocumentMutation","useCreateContractorContractDocument","uploadFileMutation","useUploadFile","updateUKandSaudiFieldsMutation","useUpdateUKandSaudiFields","createEligibilityQuestionnaireMutation","usePostCreateEligibilityQuestionnaire","manageContractorCorSubscriptionMutation","usePostManageContractorCorSubscription","setContractOriginMutation","useSetContractOrigin","updateEmploymentMutationAsync","mutationToPromise","signContractDocumentMutation","useSignContractDocument","manageContractorSubscriptionMutation","usePostManageContractorSubscriptions","deleteContractorCorSubscriptionMutation","useDeleteContractorCorSubscription","createEmploymentMutationAsync","createContractorContractDocumentMutationAsync","signContractDocumentMutationAsync","manageContractorSubscriptionMutationAsync","createEligibilityQuestionnaireMutationAsync","manageContractorCorSubscriptionMutationAsync","deleteContractorCorSubscriptionMutationAsync","setContractOriginMutationAsync","selectCountryForm","isLoadingCountries","countries","useCountriesSchemaField","selectedCountry","country","countryName","isPricingPlanEnabled","selectContractorSubscriptionForm","isLoadingContractorSubscriptions","contractorSubscriptions","filteredContractorSubscriptions","refetchContractorSubscriptions","isEligibilityQuestionnaireBlocked","useContractorSubscriptionSchemaField","hasEligibilityQuestionnaireSubmitted","subscription","corProductIdentifier","shouldIncludeEligibilityQuestionnaire","shouldIncludeContractPreview","selectedContractOrigin","isContractProvidedByCustomer","contractorStandardProductIdentifier","eligibilityAnswers","formType","employmentKey","serverEmploymentData","useJSONSchema","form","jsonSchemaOptions","query","mergedFormValues","useJSONSchemaForm","isBasicInformationDetailsEnabled","isIR35FileEnabled","ir35File","isLoadingIR35File","useGetIR35File","contractDocuments","isLoadingContractDocuments","useGetContractDocuments","basicInformationForm","isLoadingBasicInformationForm","buildBasicInformationJsfModify","descriptionProvisionalStartDate","calculateProvisionalStartDateDescription","selectedPricingPlan","subscriptions","contractorPlusProductIdentifier","eligibilityFields","isEligibilityQuestionnaireEnabled","eligibilityQuestionnaireForm","isLoadingEligibilityQuestionnaire","useGetEligibilityQuestionnaire","isContractorOnboardingDetailsEnabled","contractorOnboardingDetailsForm","isLoadingContractorOnboardingDetailsForm","useContractorOnboardingDetailsSchemaWithCurrencies","buildContractDetailsJsfModify","isSignatureSchemaEnabled","signatureSchemaForm","useGetContractDocumentSignatureSchema","buildContractPreviewJsfModify","contractOriginForm","useGetContractOriginSchema","documentPreviewPdf","isLoadingDocumentPreviewForm","refetchDocumentPreviewForm","useGetShowContractDocument","hasCompanySignedContract","useHasCompanySignedContract","stepFields","stepFieldsWithFlatFieldsets","stepPresentation","employmentBasicInformation","employmentContractDetails","employmentCountryCode","selectCountryInitialValues","getInitialValues","convertedIr35File","dataURLtoFile","basicInformationInitialValues","initialValues","contractOriginInitialValues","contractDetailsInitialValues","contractPreviewInitialValues","signature","signatory","pricingPlanInitialValues","eligibilityQuestionnaireInitialValues","shouldHandleReadOnlyEmployment","initialLoading","isNavigatingToReview","hasContractPreviewFields","prettifyFormValues","goTo","step","parseFormValues","values","parseJSFToValidate","extractAiValidationError","error","isMutationError","rawError","servicesAndDeliverablesError","REMOTE_AI_ERROR_SOURCE","onSubmit","currentStepName","parsedValues","isEmploymentNotLoaded","hasChangedCountry","basicInformationPayload","omit","response","createStructuredError","basicInformationParsedValues","_servicesAndDeliverablesAiWarning","_servicesAndDeliverablesErrorSkippable","contractDetailsData","shouldSkipAiChecks","payload","contractDocumentId","aiError","transformAiErrorResponse","eorProductIdentifier","CONTRACT_PRODUCT_TITLES","a"]}
|
package/dist/chunk-F5WNUYFP.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{a as y}from"./chunk-VVEBSBQ3.js";import{a as l,c as m}from"./chunk-J2L3CYIS.js";import{c}from"./chunk-Y3CJRZLA.js";import{a as t}from"./chunk-P37U34EQ.js";import{useEffect as N}from"react";import{Fragment as b,jsx as v,jsxs as C}from"react/jsx-runtime";var R=t(({currencies:{from:d,to:F},shouldSwapOrder:s,salary_conversion_properties:a,conversionType:_="no_spread",defaultValue:r,...e})=>{let{setValue:n,getValues:i}=c(),f={label:a?.label||"Salary conversion",description:a?.description||C(b,{children:["The conversion is based on the Remote FX rate."," ",v(m,{className:"text-sm",zendeskId:l.remoteFxRate,children:"Learn more \u2197"})]})},g=s?"salary_conversion":e.name,u=s?e.name:"salary_conversion";return N(()=>{if(s){let o=i(e.name);o?(n("salary_conversion",o),n("salary_converted","salary_conversion")):r&&(n("salary_conversion",r),n("salary_converted","salary_conversion"))}else{let o=i("salary_conversion");o?(n(e.name,o),n("salary_converted",e.name)):r&&(n(e.name,r),n("salary_converted",e.name))}},[s,r,n,i,e.name]),v(y,{...e,sourceCurrency:d,targetCurrency:F,mainFieldName:g,conversionFieldName:u,conversionProperties:f,classNamePrefix:"RemoteFlows-Salary",conversionType:_})},"SalaryField");export{R as a};
|
|
2
|
-
//# sourceMappingURL=chunk-F5WNUYFP.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/flows/CostCalculator/components/SalaryField.tsx"],"sourcesContent":["import { CurrencyConversionField } from '@/src/components/form/fields/CurrencyConversionField';\nimport { ZendeskTriggerButton } from '@/src/components/shared/zendesk-drawer/ZendeskTriggerButton';\nimport { zendeskArticles } from '@/src/components/shared/zendesk-drawer/utils';\nimport { JSFField } from '@/src/types/remoteFlows';\nimport { useEffect } from 'react';\nimport { useFormContext } from 'react-hook-form';\n\ntype SalaryFieldProps = JSFField & {\n currencies: {\n from: string;\n to: string;\n };\n salary_conversion_properties?: {\n label?: string;\n description?: string;\n };\n conversionType?: 'spread' | 'no_spread';\n shouldSwapOrder: boolean;\n defaultValue?: string;\n};\n\nexport const SalaryField = ({\n currencies: { from, to },\n shouldSwapOrder,\n salary_conversion_properties,\n conversionType = 'no_spread',\n defaultValue,\n ...props\n}: SalaryFieldProps) => {\n const { setValue, getValues } = useFormContext();\n\n const conversionProperties = {\n label: salary_conversion_properties?.label || 'Salary conversion',\n description: salary_conversion_properties?.description || (\n <>\n The conversion is based on the Remote FX rate.{' '}\n <ZendeskTriggerButton\n className='text-sm'\n zendeskId={zendeskArticles.remoteFxRate}\n >\n Learn more ↗\n </ZendeskTriggerButton>\n </>\n ),\n };\n\n const mainFieldName = shouldSwapOrder ? 'salary_conversion' : props.name;\n const conversionFieldName = shouldSwapOrder\n ? props.name\n : 'salary_conversion';\n\n useEffect(() => {\n if (shouldSwapOrder) {\n const currentValue = getValues(props.name);\n\n if (currentValue) {\n setValue('salary_conversion', currentValue);\n setValue('salary_converted', 'salary_conversion');\n } else if (defaultValue) {\n // Fallback to defaultValue if no current value\n setValue('salary_conversion', defaultValue);\n setValue('salary_converted', 'salary_conversion');\n }\n } else {\n const conversionValue = getValues('salary_conversion');\n\n if (conversionValue) {\n setValue(props.name, conversionValue);\n setValue('salary_converted', props.name);\n } else if (defaultValue) {\n // Fallback to defaultValue if no conversion value\n setValue(props.name, defaultValue);\n setValue('salary_converted', props.name);\n }\n }\n }, [shouldSwapOrder, defaultValue, setValue, getValues, props.name]);\n return (\n <CurrencyConversionField\n {...props}\n sourceCurrency={from}\n targetCurrency={to}\n mainFieldName={mainFieldName}\n conversionFieldName={conversionFieldName}\n conversionProperties={conversionProperties}\n classNamePrefix='RemoteFlows-Salary'\n conversionType={conversionType}\n />\n );\n};\n"],"mappings":"kKAIA,OAAS,aAAAA,MAAiB,QA8BpB,mBAAAC,EAEE,OAAAC,EAFF,QAAAC,MAAA,oBAbC,IAAMC,EAAcC,EAAA,CAAC,CAC1B,WAAY,CAAE,KAAAC,EAAM,GAAAC,CAAG,EACvB,gBAAAC,EACA,6BAAAC,EACA,eAAAC,EAAiB,YACjB,aAAAC,EACA,GAAGC,CACL,IAAwB,CACtB,GAAM,CAAE,SAAAC,EAAU,UAAAC,CAAU,EAAIC,EAAe,EAEzCC,EAAuB,CAC3B,MAAOP,GAA8B,OAAS,oBAC9C,YAAaA,GAA8B,aACzCN,EAAAF,EAAA,CAAE,2DAC+C,IAC/CC,EAACe,EAAA,CACC,UAAU,UACV,UAAWC,EAAgB,aAC5B,6BAED,GACF,CAEJ,EAEMC,EAAgBX,EAAkB,oBAAsBI,EAAM,KAC9DQ,EAAsBZ,EACxBI,EAAM,KACN,oBAEJ,OAAAS,EAAU,IAAM,CACd,GAAIb,EAAiB,CACnB,IAAMc,EAAeR,EAAUF,EAAM,IAAI,EAErCU,GACFT,EAAS,oBAAqBS,CAAY,EAC1CT,EAAS,mBAAoB,mBAAmB,GACvCF,IAETE,EAAS,oBAAqBF,CAAY,EAC1CE,EAAS,mBAAoB,mBAAmB,EAEpD,KAAO,CACL,IAAMU,EAAkBT,EAAU,mBAAmB,EAEjDS,GACFV,EAASD,EAAM,KAAMW,CAAe,EACpCV,EAAS,mBAAoBD,EAAM,IAAI,GAC9BD,IAETE,EAASD,EAAM,KAAMD,CAAY,EACjCE,EAAS,mBAAoBD,EAAM,IAAI,EAE3C,CACF,EAAG,CAACJ,EAAiBG,EAAcE,EAAUC,EAAWF,EAAM,IAAI,CAAC,EAEjEV,EAACsB,EAAA,CACE,GAAGZ,EACJ,eAAgBN,EAChB,eAAgBC,EAChB,cAAeY,EACf,oBAAqBC,EACrB,qBAAsBJ,EACtB,gBAAgB,qBAChB,eAAgBN,EAClB,CAEJ,EAnE2B","names":["useEffect","Fragment","jsx","jsxs","SalaryField","__name","from","to","shouldSwapOrder","salary_conversion_properties","conversionType","defaultValue","props","setValue","getValues","useFormContext","conversionProperties","ZendeskTriggerButton","zendeskArticles","mainFieldName","conversionFieldName","useEffect","currentValue","conversionValue","CurrencyConversionField"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/lib/mutations.ts","../src/lib/files.ts","../src/components/form/utils.ts","../src/lib/utils.ts"],"sourcesContent":["import { $TSFixMe, NestedMeta } from '@/src/types/remoteFlows';\nimport { UseMutationResult } from '@tanstack/react-query';\n\ntype MutationData<T> =\n T extends UseMutationResult<infer R, $TSFixMe, $TSFixMe, $TSFixMe>\n ? R\n : never;\ntype MutationVariables<T> =\n T extends UseMutationResult<$TSFixMe, $TSFixMe, infer V, $TSFixMe>\n ? V\n : never;\ntype MutationError<T> =\n T extends UseMutationResult<$TSFixMe, infer E, $TSFixMe, $TSFixMe>\n ? E\n : never;\n\n/**\n * Unwraps the .data property from the response type\n * This matches the runtime behavior of mutateAsyncOrThrow which resolves with response.data\n */\ntype UnwrapData<T> = T extends { data: infer D } ? D : T;\n\nexport interface SuccessResponse<D> {\n data: D;\n error: null;\n}\n\nexport interface FieldError {\n field: string;\n messages: string[];\n}\n\n/**\n * Standard structure for mutation errors thrown by mutateAsyncOrThrow\n */\nexport interface MutationErrorStructure {\n error: Error;\n rawError: Record<string, unknown>;\n normalizedErrors: Record<string, unknown>;\n fieldErrors: FieldError[];\n response?: Response;\n}\n\n/**\n * Type guard to check if an error is a MutationErrorStructure\n * @param error - The error to check\n * @returns true if the error is a MutationErrorStructure\n */\nexport function isMutationError(\n error: unknown,\n): error is MutationErrorStructure {\n return (\n typeof error === 'object' &&\n error !== null &&\n 'error' in error &&\n 'rawError' in error &&\n 'normalizedErrors' in error &&\n 'fieldErrors' in error &&\n Array.isArray((error as MutationErrorStructure).fieldErrors)\n );\n}\n\nexport interface ErrorResponse<E> {\n data: null;\n error: E;\n rawError: Record<string, unknown>;\n fieldErrors: FieldError[];\n}\n\ntype PromiseResult<D, E> = SuccessResponse<D> | ErrorResponse<E>;\n\n/**\n * Extracts field errors from error response into a structured format\n * @param error - The error response object\n * @returns Array of field errors with field name and messages\n */\nexport function extractFieldErrors(error: $TSFixMe): FieldError[] {\n const errors = error.error || error;\n if (!errors || !errors.errors || typeof errors.errors !== 'object') return [];\n\n const fieldErrors: FieldError[] = [];\n\n Object.entries(errors.errors).forEach(([key, value]) => {\n if (Array.isArray(value)) {\n // The backend's normalize_errors wraps non-list values in an array, so a\n // field error can arrive as an array of structured objects (e.g. the\n // REMOTE_AI validation error: [{ error, source, skippable }]). Those are\n // surfaced to the user through the field's statement/skip flow, not as a\n // plain inline message, so we skip object entries here to avoid rendering\n // \"[object Object]\". Only primitive messages are kept.\n const messages = value\n .filter((msg: $TSFixMe) => msg === null || typeof msg !== 'object')\n .map((msg: $TSFixMe) => String(msg));\n if (messages.length > 0) {\n fieldErrors.push({ field: key, messages });\n }\n return;\n }\n if (value && typeof value === 'object') {\n Object.entries(value).forEach(([nestedKey, nestedValue]) => {\n if (Array.isArray(nestedValue)) {\n fieldErrors.push({\n field: nestedKey,\n messages: nestedValue.map((msg: $TSFixMe) => String(msg)),\n });\n }\n });\n }\n });\n return fieldErrors;\n}\n/**\n * Converts a mutation to a promise-based API. We avoid using the\n * `mutateAsync` method from react-query for 2 reasons:\n * 1. We lose the isPending state of the mutation\n * 2. We want to return the data and error in a consistent way\n * (either data or error is null)\n * @param mutation\n * @returns\n */\nexport function mutationToPromise<\n T extends UseMutationResult<$TSFixMe, $TSFixMe, $TSFixMe, $TSFixMe>,\n>(mutation: T) {\n type Data = MutationData<T>;\n type Variables = MutationVariables<T>;\n type Error = MutationError<T>;\n\n return {\n mutateAsyncOrThrow: (values: Variables): Promise<UnwrapData<Data>> => {\n return new Promise((resolve, reject) => {\n mutation.mutate(values, {\n onSuccess: (response) => {\n if (\n 'data' in response &&\n response.data !== null &&\n !response.error\n ) {\n resolve(response.data as UnwrapData<Data>);\n } else {\n const fieldErrors = extractFieldErrors(response.error);\n const errorData = response.error.error || response.error;\n const { response: httpResponse } = response;\n const errorMessage =\n typeof errorData?.message === 'string'\n ? errorData.message\n : 'Something went wrong. Please try again later.';\n reject({\n error: new Error(errorMessage),\n rawError: response.error,\n normalizedErrors: errorData.errors || {},\n fieldErrors,\n response: httpResponse,\n } as MutationErrorStructure);\n }\n },\n onError: (error) => {\n const fieldErrors = extractFieldErrors(error);\n const errorData = error.error || error;\n reject({\n error: error as Error,\n rawError: error,\n normalizedErrors: errorData.errors || {},\n fieldErrors,\n response: error?.response,\n } as MutationErrorStructure);\n },\n });\n });\n },\n /**\n * @deprecated Use mutateAsyncOrThrow instead, this method will be removed as the the one below handles errors better\n */\n mutateAsync: (values: Variables): Promise<PromiseResult<Data, Error>> => {\n return new Promise((resolve, reject) => {\n mutation.mutate(values, {\n onSuccess: (response) => {\n if (response.data) {\n resolve({\n data: response.data as Data,\n error: null,\n });\n } else {\n const fieldErrors = extractFieldErrors(response.error);\n // Unwrap the error if it is an object with an error property\n const errorData = response.error.error || response.error;\n const errorMessage =\n typeof errorData?.message === 'string'\n ? errorData.message\n : 'Something went wrong. Please try again later.';\n resolve({\n data: null,\n error: new Error(errorMessage) as unknown as Error,\n rawError: response.error,\n fieldErrors,\n });\n }\n },\n onError: (error) => {\n const fieldErrors = extractFieldErrors(error);\n reject({\n data: null,\n error: error as Error,\n rawError: error,\n fieldErrors,\n });\n },\n });\n });\n },\n };\n}\n\n/**\n * Enhanced FieldError interface with user-friendly labels\n */\nexport interface NormalizedFieldError extends FieldError {\n userFriendlyLabel: string;\n}\n\n/**\n * Utility function to normalize field errors using field metadata\n * @param fieldErrors - Array of field errors from API response\n * @param meta - Field metadata containing field names and labels\n * @returns Normalized field errors with user-friendly labels\n */\nexport function normalizeFieldErrors(\n fieldErrors: FieldError[],\n meta?: NestedMeta,\n): NormalizedFieldError[] {\n if (!fieldErrors || fieldErrors.length === 0) {\n return [];\n }\n\n return fieldErrors.map((fieldError) => {\n let fieldMeta = meta?.[fieldError.field];\n let userFriendlyLabel: string = fieldError.field;\n\n // If not found directly, try nested path (e.g., \"service_duration/expiration_date\")\n if (!fieldMeta && meta && fieldError.field.includes('/')) {\n const pathParts = fieldError.field.split('/');\n let current: $TSFixMe = meta;\n\n for (const part of pathParts) {\n if (current && typeof current === 'object') {\n current = current[part];\n } else {\n current = undefined;\n break;\n }\n }\n\n fieldMeta = current;\n }\n\n if (typeof fieldMeta?.label === 'string') {\n userFriendlyLabel = fieldMeta.label;\n }\n\n return {\n ...fieldError,\n userFriendlyLabel,\n // Keep the original field name for form integration\n field: fieldError.field,\n messages: fieldError.messages,\n };\n });\n}\n","const toBase64 = (file: File): Promise<string> => {\n return new Promise<string>((resolve, reject) => {\n const reader = new FileReader();\n reader.readAsDataURL(file);\n reader.onload = () => resolve(reader.result as string);\n reader.onerror = (error) => reject(error);\n });\n};\n\nexport const convertFilesToBase64 = async (files: File[]) => {\n const base64Files = await Promise.all(\n files.map(async (file) => {\n const base64 = await toBase64(file);\n return {\n ...file,\n name: file.name,\n size: file.size,\n type: file.type,\n content: base64.split(',')[1],\n };\n }),\n );\n return base64Files;\n};\n\n/**\n * Convert a data URL to a File object\n * @param dataURL - The data URL to convert\n * @param filename - The name of the file\n * @returns The File object\n */\nexport function dataURLtoFile(dataURL: string, filename: string): File {\n const arr = dataURL.split(',');\n const mime = arr[0].match(/:(.*?);/)?.[1];\n const bstr = atob(arr[1]);\n\n const u8arr = Uint8Array.from(bstr, (char) => char.charCodeAt(0));\n\n return new File([u8arr], filename, { type: mime });\n}\n","import { Field } from '@/src/flows/types';\nimport { $TSFixMe } from '@/src/types/remoteFlows';\nimport { JSFFields } from '@/src/types/remoteFlows';\nimport { convertFilesToBase64 } from '@/src/lib/files';\nimport { addBusinessDays, isWeekend, nextMonday } from 'date-fns';\nimport { getNestedValue } from '@/src/lib/utils';\n\nconst textInputTypes = {\n TEXT: 'text',\n TEXTAREA: 'textarea',\n NUMBER: 'number',\n SELECT: 'select',\n COUNTRIES: 'countries',\n TEL: 'tel',\n EMAIL: 'email',\n MONEY: 'money',\n DATE: 'date',\n DATE_RANGE: 'date-range',\n CURRENCIES: 'currencies',\n TIME: 'time',\n} as const;\n\nconst checkboxTypes = {\n CHECKBOX: 'checkbox',\n ACK_CHECK: 'ack-check',\n} as const;\n\nconst supportedTypes = {\n FILE: 'file',\n RADIO: 'radio',\n /** @deprecated */\n RADIO_CARD: 'radio-card',\n GROUP_ARRAY: 'group-array',\n EXTRA: 'extra',\n STATEMENT: 'statement',\n HIDDEN: 'hidden',\n FIELDSET: 'fieldset',\n FIELDSET_FLAT: 'fieldset-flat',\n WORK_SCHEDULE: 'work-schedule',\n WORK_WEEK_SCHEDULE: 'work-week-schedule',\n /** @deprecated we still display benefits in read-only contract details view, but never in any form */\n BENEFITS: 'benefits',\n SIGNATURE: 'signature',\n SELECT_MULTIPLE: 'select-multiple',\n ...textInputTypes,\n ...checkboxTypes,\n} as const;\n\nexport function round(value: number): number {\n return Math.round((value + Number.EPSILON) * 100) / 100;\n}\n\nfunction convertToValidCost(value: string) {\n return parseFloat(value.replace(/,/g, ''));\n}\n\nexport function convertToCents(\n amount?: number | string | string[] | null | boolean,\n) {\n if (\n amount == null ||\n amount === '' ||\n Number.isNaN(amount) ||\n Array.isArray(amount) ||\n typeof amount === 'boolean'\n ) {\n return null;\n }\n\n let validAmount: number;\n\n if (typeof amount === 'string') {\n validAmount = convertToValidCost(amount);\n } else {\n validAmount = amount;\n }\n\n return round(validAmount * 100);\n}\n\nexport function convertFromCents(amount?: number | string | null) {\n if (amount == null || Number.isNaN(amount)) return null;\n\n let normalizedValue: number;\n\n if (typeof amount === 'string') {\n normalizedValue = convertToValidCost(amount || '0');\n } else {\n normalizedValue = amount;\n }\n\n return round(normalizedValue / 100);\n}\n\nconst trimStringValues = (values: Record<string, $TSFixMe>) =>\n Object.entries(values || {}).reduce<Record<string, $TSFixMe>>(\n (result, [key, value]) => {\n if (Array.isArray(value)) {\n // If the value is an array, recursively process each element\n result[key] = value.map((item) =>\n typeof item === 'object' && item !== null\n ? trimStringValues(item)\n : typeof item === 'string'\n ? item.trim()\n : item,\n );\n } else if (typeof value === 'object' && value !== null) {\n // If the value is an object, recursively process it\n result[key] = trimStringValues(value);\n } else {\n // Otherwise, trim the string or keep the value as is\n result[key] = typeof value === 'string' ? value.trim() : value;\n }\n return result;\n },\n {},\n );\n\n/**\n * Given a list of form values, modify the ones that are readOnly,\n * based on their field config, by adding its defaultValue.\n * This is needed to support readOnly fields that are also conditional\n * based on the \"pivotName\" workaround.\n * @param {Object} values - List with form values { name: value }.\n * @param {Array} fields - Respective form fields configuration.\n */\nfunction prefillReadOnlyFields(\n values: Record<string, $TSFixMe>,\n fields: $TSFixMe[],\n) {\n const newValues: Record<string, $TSFixMe> = {};\n\n fields.forEach((field) => {\n const fieldName = field.name;\n\n if (\n !Object.prototype.hasOwnProperty.call(values, fieldName!) &&\n !(field.type === supportedTypes.FIELDSET && field.valueGroupingDisabled)\n )\n return;\n\n if (field.type === supportedTypes.FIELDSET && field.valueGroupingDisabled) {\n Object.assign(newValues, prefillReadOnlyFields(values, field.fields));\n return;\n }\n\n if (field.readOnly && field.defaultValue) {\n newValues[fieldName!] = field.defaultValue;\n } else {\n newValues[fieldName!] = values[fieldName!];\n }\n });\n\n return newValues;\n}\n/**\n * Recursively extracts fieldsets' fields values and maps them to the field name\n * For nested fields that are fieldsets with valueGroupingDisabled, the values\n * are extracted one level up\n *\n * @param {Array} fields - Fieldset fields configuration.\n * @param {Object} formValues - List with form values { name: value }.\n * @return {Object} – Raw form values mapped to the field name\n */\nfunction extractFieldsetFieldsValues(\n fields: $TSFixMe[],\n formValues: Record<string, unknown>,\n) {\n return fields.reduce<Record<string, $TSFixMe>>((nestedAcc, subField) => {\n const isFieldsetValueGroupingDisabled =\n subField.type === supportedTypes.FIELDSET &&\n subField.valueGroupingDisabled;\n\n if (isFieldsetValueGroupingDisabled) {\n Object.assign(\n nestedAcc,\n extractFieldsetFieldsValues(subField.fields, formValues),\n );\n } else if (\n Object.prototype.hasOwnProperty.call(formValues, subField.name!)\n ) {\n nestedAcc[subField.name!] = formValues[subField.name!];\n }\n\n return nestedAcc;\n }, {});\n}\n\nexport const fieldTypesTransformations: Record<string, $TSFixMe> = {\n [supportedTypes.COUNTRIES]: {\n /**\n * @param {String[] | { name: String }[]} value\n * - Excepted: array of strings.\n * - Edge cases: array of objects. (when using dangerousTransformValue)\n * @returns {String[]} - List of countries\n * @example expected: ['Peru', 'Germany'] -> ['Peru', 'Germany']\n * @example edge cases: [{name: 'Peru'}, {name: 'Germany'}] -> ['Peru', 'Germany']\n */\n transformValueToAPI:\n (field: $TSFixMe) =>\n (selectedCountries: string[] | { name: string }[]) => {\n if (!field.multiple || typeof selectedCountries === 'string') {\n return selectedCountries;\n }\n // NOTE: The value should be an array of strings, however legacy data can come as\n // an array of country objects. So, we always send an array of strings to normalize\n // the data (eg old form values being modified) until DB migration is done !5667\n return selectedCountries.map((option) =>\n typeof option === 'string' ? option : option.name,\n );\n },\n /**\n * Used for react-select, where the country selected is transformed\n * before saving on Formik state. Supports both solo and multi select\n * @param {Object|Object[]} selectedCountry[] - Current selected options\n * @param {String} selectedCountry[].value\n * @param {String} selectedCountry[].name\n * @param {String} selectedCountry[].label\n * @returns {String[]} - List of countries selected\n * @example\n * [{ value: 'Hungria' }] -> ['Hungria']\n */\n transformValue: (selectedCountry: $TSFixMe | $TSFixMe[]) => {\n // name or label are used in dragon. value is used in json-schema-form\n // TODO: it should be the same everywhere — read more at !5667\n const getCountryValue = (opt: $TSFixMe) =>\n opt?.name || opt?.value || opt?.label;\n return Array.isArray(selectedCountry)\n ? selectedCountry.map(getCountryValue) // support multi countries\n : getCountryValue(selectedCountry) || ''; // Fallback to '' in case user removes all countries\n },\n },\n [supportedTypes.NUMBER]: {\n transformValueToAPI: () => (value: string) => {\n // this prevents values with letters such as \"2r\" from being considered valid\n // if the input is invalid, number().cast will return NaN\n const castValue = Number(value);\n\n if (Number.isNaN(castValue)) {\n return value;\n }\n\n return castValue;\n },\n },\n [supportedTypes.MONEY]: {\n transformValueFromAPI: () => (value: string | number) =>\n convertFromCents(value) ?? '',\n transformValueToAPI: () => convertToCents,\n },\n [supportedTypes.CHECKBOX]: {\n transformValueToAPI: (field: $TSFixMe) => (value: string | boolean) => {\n if (value === undefined) {\n return false;\n }\n\n if (field.const && value === true) {\n return field.const;\n }\n return value;\n },\n },\n [supportedTypes.SELECT]: {\n /**\n * Used for react-select, where the value is transformed\n * before saving on Formik state.\n * @param {Object | Object[]} option - Object structure with options config\n * @param {String} option[].value - Key for the API\n * @param {Array} this.options[].label - Friendly label\n * @example\n * [{ value: '1', label: 'One' }, { value: '2', label: 'Two' }] -> [\"One\", \"Two\"]\n * { value: '1', label: 'One' } -> \"One\"\n * {} -> \"\"\n */\n transformValue: (option: $TSFixMe | $TSFixMe[]) =>\n Array.isArray(option)\n ? option.map((opt) => opt.value) // multi-options\n : (option?.value ?? ''), // Fallback to '' in case user removes all options,\n },\n [supportedTypes.FILE]: {\n transformValueToAPI: () => async (files: File[]) => {\n if (!files) {\n return null;\n }\n\n return await convertFilesToBase64(files);\n },\n },\n};\nexport async function parseFormValuesToAPI(\n formValues: Record<string, $TSFixMe> = {},\n fields: $TSFixMe[],\n) {\n const filteredFields = fields.filter(\n (field) =>\n formValues[field.name!] ||\n (field.type === supportedTypes.FIELDSET && field.valueGroupingDisabled),\n );\n\n const parsedFieldsWithValues = await Promise.all(\n filteredFields.map(async (field) => {\n const acc: Record<string, $TSFixMe> = {};\n\n switch (field.type) {\n case supportedTypes.FIELDSET: {\n const fieldset = field;\n if (fieldset.valueGroupingDisabled) {\n const nestedFormValues = extractFieldsetFieldsValues(\n fieldset.fields,\n formValues,\n );\n\n Object.assign(\n acc,\n await parseFormValuesToAPI(nestedFormValues, fieldset.fields),\n );\n } else {\n const fieldsetValue = formValues[field.name!];\n\n // Filter out empty properties from fieldset objects\n // this code avoids sending department: {id: '1234', name: ''} or even department: {id: undefined, name: undefined}\n if (\n fieldsetValue &&\n typeof fieldsetValue === 'object' &&\n !Array.isArray(fieldsetValue)\n ) {\n const cleanedValue = Object.fromEntries(\n Object.entries(fieldsetValue).filter(([, value]) => {\n // Keep the property if it has a meaningful value\n return value !== '' && value !== null && value !== undefined;\n }),\n );\n\n acc[field.name!] =\n Object.keys(cleanedValue).length > 0\n ? await parseFormValuesToAPI(cleanedValue, fieldset.fields)\n : undefined;\n } else {\n acc[field.name!] = await parseFormValuesToAPI(\n fieldsetValue,\n fieldset.fields,\n );\n }\n }\n break;\n }\n\n case supportedTypes.TEXTAREA:\n case supportedTypes.TEXT:\n // Attempt to remove null bytes from form values - https://gitlab.com/remote-com/employ-starbase/tracker/-/issues/10670\n acc[field.name] = formValues[field.name].replace(/\\0/g, '');\n break;\n\n case supportedTypes.GROUP_ARRAY: {\n // NOTE: The field `name` in group arrays represents a path, but we only\n // need the last part of it which is represented by `nameKey`.\n const transformedFields = field\n ?.fields?.()\n .map((subField: $TSFixMe) => ({\n ...subField,\n name: subField.nameKey || '',\n }));\n\n const parsedFieldValues = await Promise.all(\n formValues[field.name]?.map(\n (fieldValues: Record<string, $TSFixMe>) =>\n parseFormValuesToAPI(fieldValues, transformedFields),\n ) || [],\n );\n\n acc[field.name] = parsedFieldValues;\n break;\n }\n\n case supportedTypes.EXTRA: {\n const extraField = field;\n if (extraField.includeValueToApi !== false) {\n const formValue = formValues[extraField.name];\n const fieldTransformValueToAPI =\n extraField?.transformValueToAPI ||\n fieldTypesTransformations[extraField.type]?.transformValueToAPI;\n\n if (fieldTransformValueToAPI) {\n const result = fieldTransformValueToAPI(field)(formValue);\n // Await if it's a promise\n acc[extraField.name] =\n result instanceof Promise ? await result : result;\n break;\n }\n\n acc[extraField.name] = formValue;\n break;\n }\n acc[extraField.name] = undefined;\n break;\n }\n\n default: {\n const formValue = formValues[field.name];\n const fieldTransformValueToAPI =\n field?.transformValueToAPI ||\n fieldTypesTransformations[field.type]?.transformValueToAPI;\n\n if (fieldTransformValueToAPI) {\n const result = fieldTransformValueToAPI(field)(formValue);\n // Await if it's a promise - THIS IS THE KEY FIX\n acc[field.name] = result instanceof Promise ? await result : result;\n break;\n }\n acc[field.name] = formValue;\n break;\n }\n }\n\n if (field.forcedValue !== undefined) {\n acc[field.name!] = field.forcedValue;\n }\n\n return acc;\n }),\n );\n\n // Merge all accumulated objects\n return parsedFieldsWithValues.reduce(\n (acc, current) => ({ ...acc, ...current }),\n { ...formValues },\n );\n}\n\nfunction isFieldVisible(field: $TSFixMe, formValues: Record<string, unknown>) {\n if (field.visibilityCondition) {\n return field.visibilityCondition(formValues);\n }\n\n if (typeof field.isVisible !== 'undefined') {\n return Boolean(field.isVisible);\n }\n\n return true;\n}\n\nfunction applyFieldDynamicProperties(\n field: $TSFixMe,\n values: Record<string, unknown> | Record<string, unknown>[],\n) {\n if (field.calculateDynamicProperties) {\n return {\n ...field,\n ...(field.calculateDynamicProperties(values) || {}),\n };\n }\n\n return field;\n}\n\nfunction excludeValuesInvisible(\n values: $TSFixMe,\n fields: $TSFixMe[],\n keepTruthyInvisibleValues?: boolean,\n parentFieldKeyPath?: string,\n) {\n const valuesAsked: Record<string, $TSFixMe> = {};\n\n fields\n .map((field) => applyFieldDynamicProperties(field, values))\n .forEach((field) => {\n let fieldKeyPath = field.name;\n if (parentFieldKeyPath) {\n fieldKeyPath = fieldKeyPath\n ? `${parentFieldKeyPath}.${field.name}`\n : parentFieldKeyPath;\n }\n\n const valueOfField = getNestedValue(values, fieldKeyPath!);\n\n // keepTruthyInvisibleValues: false/undefined -> remove invisible field\n // keepTruthyInvisibleValues: true -> keep invisible field if it has a value\n if (\n !isFieldVisible(field, values) &&\n !(keepTruthyInvisibleValues && !!valueOfField)\n ) {\n return;\n }\n\n if (field.meta?.ignoreValue) {\n return;\n }\n\n if (field.type === 'fieldset' && field.valueGroupingDisabled) {\n Object.assign(\n valuesAsked,\n excludeValuesInvisible(\n values,\n field.fields,\n keepTruthyInvisibleValues,\n fieldKeyPath,\n ),\n );\n } else if (Array.isArray(field.fields)) {\n valuesAsked[field.name!] = excludeValuesInvisible(\n values,\n field.fields,\n keepTruthyInvisibleValues,\n fieldKeyPath,\n );\n } else {\n if (valueOfField === undefined) {\n return;\n }\n valuesAsked[field.name!] = valueOfField;\n }\n });\n\n return valuesAsked;\n}\n\nfunction removeEmptyValues<T extends Record<string, $TSFixMe>>(\n obj: T,\n): Record<string, $TSFixMe> {\n return Object.fromEntries(\n Object.entries(obj).filter(\n ([, value]) => value !== undefined && value !== null && value !== '',\n ),\n );\n}\n\nfunction cleanUnderscoreFields(\n obj: Record<string, $TSFixMe>,\n): Record<string, $TSFixMe> {\n if (Array.isArray(obj)) {\n return obj.map(cleanUnderscoreFields);\n }\n if (obj && typeof obj === 'object') {\n return Object.entries(obj).reduce(\n (acc, [key, value]) => {\n if (!key.startsWith('_')) {\n acc[key] = cleanUnderscoreFields(value);\n }\n return acc;\n },\n {} as Record<string, $TSFixMe>,\n );\n }\n return obj;\n}\n\nexport async function parseSubmitValues(\n formValues: Record<string, $TSFixMe>,\n fields: $TSFixMe[],\n config?: { keepInvisibleValues?: boolean },\n) {\n const visibleFormValues = config?.keepInvisibleValues\n ? formValues\n : excludeValuesInvisible(formValues, fields);\n const convertedFormValues = await parseFormValuesToAPI(\n visibleFormValues,\n fields,\n );\n const formValuesWithTrimmedStrings = trimStringValues(convertedFormValues);\n\n const formValuesWithUndefined = removeEmptyValues(\n formValuesWithTrimmedStrings,\n );\n\n const valuesWithReadOnly = prefillReadOnlyFields(\n formValuesWithUndefined,\n fields,\n );\n return cleanUnderscoreFields(valuesWithReadOnly);\n}\n\nexport async function parseJSFToValidate(\n formValues: Record<string, $TSFixMe>,\n fields: JSFFields,\n config: { isPartialValidation: boolean } = {\n isPartialValidation: false,\n },\n) {\n const valuesParsed = await parseSubmitValues(formValues, fields, {\n /* We cannot exclude invisible fields (excludeValuesInvisible) because\n they are needed for conditional fields validations */\n keepInvisibleValues: config?.isPartialValidation,\n });\n return valuesParsed;\n}\n\nfunction castFieldTo<T>(field: Field) {\n return field as unknown as T;\n}\n\nfunction getDefaultValueForType(type: string) {\n switch (type) {\n case supportedTypes.FILE:\n return undefined; // Allows fallback values in function declarations to be used\n default:\n return '';\n }\n}\n\nfunction getInitialDefaultValue(\n defaultValues: Record<string, $TSFixMe>,\n field: Field,\n) {\n // getNestedValue is needed because some values could be nested object, like billing address\n // use camelCase to support forms with fields in snake_case or kebab_case.\n const defaultFieldValue = getNestedValue(defaultValues, field.name);\n const fieldTransformValueFromAPI =\n field?.transformValueFromAPI ||\n fieldTypesTransformations[field.type]?.transformValueFromAPI;\n\n if (fieldTransformValueFromAPI) {\n return fieldTransformValueFromAPI(field)(defaultFieldValue);\n }\n\n // TODO: We need to get rid of value as fn for json-schema. Related !5560\n const generatedValue =\n typeof field.value === 'function'\n ? field.value(defaultFieldValue, defaultValues)\n : null;\n\n // field.value is deprecated. should use \"default\" instead.\n const defaultValueDeprecated =\n typeof field.value !== 'function' ? field.value : null;\n const initialValueForCheckboxAsBool =\n castFieldTo<$TSFixMe>(field).checkboxValue === true\n ? defaultFieldValue || false\n : null;\n\n // nullish coalescing but excluding empty strings. (to support 0 (zero) as valid numbers)\n const excludeString = (val: $TSFixMe) => (val === '' ? undefined : val);\n\n return (\n excludeString(generatedValue) ??\n excludeString(defaultFieldValue) ??\n excludeString(defaultValueDeprecated) ??\n excludeString(field.default) ??\n initialValueForCheckboxAsBool ??\n getDefaultValueForType(field.type)\n );\n}\n\n/**\n * Get initial values for sub fields within fieldsets\n * @param {Object} field The form field\n * @param {Object} defaultValues The form default values\n * @param {String=} parentFieldKeyPath The path to the parent field using dot-notation\n * @returns {Object} The initial values for a fieldset\n */\nfunction getInitialSubFieldValues(\n field: $TSFixMe,\n defaultValues: Record<string, unknown>,\n parentFieldKeyPath?: string,\n) {\n const initialValue: Record<string, Record<string, unknown>> = {};\n\n let fieldKeyPath = field.name;\n\n if (parentFieldKeyPath) {\n fieldKeyPath = fieldKeyPath\n ? `${parentFieldKeyPath}.${fieldKeyPath}`\n : parentFieldKeyPath;\n }\n\n const subFields = field.fields;\n\n if (Array.isArray(subFields)) {\n const subFieldValues = {};\n\n subFields.forEach((subField) => {\n Object.assign(\n subFieldValues,\n getInitialSubFieldValues(subField, defaultValues, fieldKeyPath),\n );\n });\n\n if (field.type === supportedTypes.FIELDSET && field.valueGroupingDisabled) {\n Object.assign(initialValue, subFieldValues);\n } else {\n initialValue[field.name!] = subFieldValues;\n }\n } else {\n initialValue[field.name!] = getInitialDefaultValue(defaultValues, {\n ...field,\n // NOTE: To utilize the `get` function from `lodash` in `getInitialDefaultValue` correctly\n // we need to use the field path instead of just its name.\n name: fieldKeyPath,\n });\n }\n\n return initialValue;\n}\n\nexport function getInitialValues(\n fields: JSFFields,\n defaultValues: Record<string, unknown>,\n) {\n const initialValues: Record<string, unknown> = {};\n const defaultFieldValues = defaultValues;\n\n // loop over fields array\n // if prop does not exit in the initialValues object,\n // pluck off the name and value props and add it to the initialValues object;\n fields\n .map((field) => applyFieldDynamicProperties(field, defaultFieldValues))\n .forEach((field) => {\n switch (field.type) {\n case supportedTypes.FIELDSET: {\n if (field.valueGroupingDisabled) {\n Object.assign(\n initialValues,\n getInitialValues(field.fields, defaultFieldValues),\n );\n } else {\n const subFieldValues = getInitialSubFieldValues(\n field,\n defaultFieldValues,\n );\n Object.assign(initialValues, subFieldValues);\n }\n break;\n }\n default: {\n if (!initialValues[field.name]) {\n initialValues[field.name] = getInitialDefaultValue(\n defaultFieldValues,\n field,\n );\n }\n break;\n }\n }\n });\n\n return initialValues;\n}\n\n/**\n * Wraps fields listed in fieldsets with a fieldset field.\n * @param fields - Complete fields list.\n * @param fieldsets - fields list to be wrapped in a fieldset field.\n * @param values - Values for each field.\n * @returns The fields with the fieldsets wrapped.\n */\nexport function getFieldsWithFlatFieldsets({\n fields = [],\n fieldsets = {},\n values,\n}: {\n fields: $TSFixMe[];\n fieldsets: Record<string, { propertiesByName: string[]; title: string }>;\n values: Record<string, unknown>;\n}) {\n const flatFieldsetsKeys = Object.keys(fieldsets);\n\n if (!flatFieldsetsKeys?.length) {\n return fields;\n }\n\n const flatFieldsetsFieldNames = new Set(\n flatFieldsetsKeys.flatMap(\n (flatFieldsetKey) => fieldsets[flatFieldsetKey]?.propertiesByName ?? [],\n ),\n );\n\n const flatFieldsetsWithFields = flatFieldsetsKeys.map((flatFieldsetKey) => {\n const { propertiesByName: flatFieldsetFields = [], ...rest } =\n fieldsets[flatFieldsetKey];\n\n const childFields = flatFieldsetFields\n .map((name) => fields.find((f) => f.name === name))\n .filter((field): field is $TSFixMe => !!field);\n\n return {\n ...rest,\n name: flatFieldsetKey,\n type: 'fieldset-flat',\n inputType: 'fieldset-flat',\n fields: childFields,\n label: fieldsets[flatFieldsetKey].title,\n // Hide the fieldset if none of the children fields are visible.\n isVisible: childFields\n .map((childField) => applyFieldDynamicProperties(childField, values))\n .some((childField) => isFieldVisible(childField, values)),\n };\n });\n\n const sortedFields = flatFieldsetsWithFields.reduce((accumulator, field) => {\n const accumulatedFieldsSorted = [...accumulator];\n\n /**\n * We place the flat fieldset at the original position of its first field.\n * If no field is found, we move it to the end.\n */\n const fieldsetPosition = field.fields[0]\n ? accumulator.findIndex(\n (accumulatorItem) => accumulatorItem.name === field.fields[0].name,\n )\n : accumulator.length;\n\n accumulatedFieldsSorted.splice(\n fieldsetPosition,\n 0,\n field as unknown as $TSFixMe,\n );\n\n return accumulatedFieldsSorted;\n }, fields);\n\n const filteredFields = sortedFields.filter((field) => {\n // Always keep the fieldset wrapper\n if (field.type === 'fieldset-flat') {\n return true;\n }\n return !flatFieldsetsFieldNames.has(field.name!);\n });\n\n return filteredFields;\n}\n\nexport function enableAckFields(\n fields: JSFFields,\n values: Record<string, unknown>,\n) {\n let result = values;\n fields.forEach((field) => {\n if ('const' in field) {\n result = Object.fromEntries(\n Object.entries(values).map(([k, v]) => {\n if (k === field.name) {\n return [k, field.const];\n }\n return [k, v];\n }),\n );\n }\n });\n return result;\n}\n\n/**\n * Get the minimum start date for the onboarding process.\n * @param minOnBoardingTime\n * @returns Date\n */\nexport function getMinStartDate(minOnBoardingTime: number) {\n const today = new Date();\n\n // Make sure our base date is UTC and set the time to 00:00:00\n today.setDate(today.getUTCDate());\n today.setHours(0, 0, 0, 0);\n\n // The + 1 ensures you get the full preparation time before the employee can actually start working.\n // It's the difference between \"preparation completes on this day\" vs \"earliest possible start date after preparation\".\n const minDate = addBusinessDays(today, minOnBoardingTime + 1);\n return isWeekend(minDate) ? nextMonday(minDate) : minDate;\n}\n\n/**\n * Check if a field has a forced value.\n * @param field - The field to check.\n * @returns True if the field has a forced value, false otherwise.\n */\nexport function checkFieldHasForcedValue(field: $TSFixMe) {\n // A field to be considered \"forced value\" must:\n return (\n field.const !== undefined && // Only accepts a specific value\n field.const === field.default && // It can be prefilled, meaning it's not critical\n field.type !== 'checkbox' && // Because checkbox must always be visible\n field.type !== 'hidden' // Because hidden inputs shouldn't be visible\n );\n}\n","import { clsx, type ClassValue } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\nimport { ValidationError } from 'yup';\nimport DOMPurify from 'dompurify';\nimport { JSFFields, NestedMeta } from '@/src/types/remoteFlows';\nimport {\n NormalizedFieldError,\n normalizeFieldErrors,\n} from '@/src/lib/mutations';\nimport { convertFromCents } from '@/src/components/form/utils';\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n\nexport function formatCurrency(\n amount: number | undefined | null,\n currencyCode = 'EUR',\n): string {\n if (amount == null) {\n return '-';\n }\n\n const value = amount / 100;\n\n return new Intl.NumberFormat('en', {\n style: 'currency',\n currency: currencyCode,\n currencyDisplay: 'symbol',\n }).format(value);\n}\n\ntype YupError = Pick<ValidationError, 'type' | 'errors'> & {\n inner: Record<string, YupError>[];\n};\n\n/**\n * Transforms a Yup ValidationError object into a more readable object. The format is as follows:\n * {\n * [fieldName]: {\n * type: string,\n * errors: string[],\n * inner: YupError[],\n * },\n * }\n * @param errors\n * @returns\n */\nexport const transformYupErrorsIntoObject = (errors: ValidationError) => {\n const validationErrors: Record<string, YupError> = {};\n\n errors.inner.forEach((error: ValidationError) => {\n if (error.path !== undefined) {\n validationErrors[error.path] = {\n type: error.type,\n errors: error.errors,\n inner: error.inner.map((innerError) =>\n transformYupErrorsIntoObject(innerError),\n ),\n };\n }\n });\n\n return validationErrors;\n};\n\n/**\n * Debug utility to add version to window object\n * @param version - The version of the SDK\n */\nexport function debug(version: string) {\n window.RemoteFlowsSDK = {\n version,\n };\n}\n\n// Deduplicates rel values if necessary and appends noopener and noreferrer\nconst appendSecureRelValue = (rel: string | null) => {\n const attributes = new Set(rel ? rel.toLowerCase().split(' ') : []);\n\n attributes.add('noopener');\n attributes.add('noreferrer');\n\n return Array.from(attributes).join(' ');\n};\n\nif (DOMPurify.isSupported) {\n DOMPurify.addHook('afterSanitizeAttributes', (node) => {\n const target = node.getAttribute('target');\n\n if (node.tagName === 'A' && (!target || target !== '_self')) {\n const href = node.getAttribute('href');\n\n // Skip internal anchors (#section), relative URLs, and non-http protocols\n if (href && !href.startsWith('#') && /^https?:\\/\\//i.test(href)) {\n node.setAttribute('target', '_blank');\n const rel = node.getAttribute('rel');\n node.setAttribute('rel', appendSecureRelValue(rel));\n }\n }\n });\n}\n\nexport const sanitizeHtml = (html: string) => {\n return DOMPurify.sanitize(html, { ADD_ATTR: ['target'] });\n};\n\nexport const sanitizeHtmlWithImageErrorHandling = (html: string) => {\n const parser = new DOMParser();\n const doc = parser.parseFromString(html, 'text/html');\n\n // Add onerror handler to all img tags to hide them if they fail to load\n const images = doc.querySelectorAll('img');\n images.forEach((img) => {\n img.setAttribute('onerror', \"this.style.display='none'\");\n });\n\n const modifiedHtml = doc.body.innerHTML;\n\n // Sanitize with DOMPurify, allowing onerror attribute\n // Note: The global afterSanitizeAttributes hook (defined above) will still apply\n // to add target=\"_blank\" and rel=\"noopener noreferrer\" to external links\n return DOMPurify.sanitize(modifiedHtml, {\n ADD_ATTR: ['target', 'onerror'],\n });\n};\n\n/**\n * Strips HTML tags and decodes HTML entities from a string\n * @param html - The HTML string to strip\n * @returns Plain text without HTML tags or entities\n */\nexport const stripHtml = (\n html: string | undefined | null,\n): string | undefined | null => {\n if (html === null || html === undefined) {\n return html;\n }\n\n const parser = new DOMParser();\n const doc = parser.parseFromString(html, 'text/html');\n\n return doc.body.textContent || '';\n};\n\n/**\n * Ensures base64 data has the correct data URI prefix for PDF content\n * @param base64Data - The base64 data string\n * @returns The base64 data with proper data URI prefix\n */\nexport const clearBase64Data = (base64Data: string) => {\n if (!base64Data) return '';\n\n const cleanedData = base64Data.trim();\n\n if (cleanedData.startsWith('data:application/pdf;base64,')) {\n return cleanedData;\n }\n\n if (cleanedData.startsWith('data:')) {\n return cleanedData;\n }\n\n return `data:application/pdf;base64,${cleanedData}`;\n};\n\n/**\n * Function to prettify form values. Returns a pretty value and label for each field.\n * @param values - Form values to prettify\n * @param fields - Form fields\n * @returns Prettified form values\n */\n// @ts-expect-error need to check function return type\nexport function prettifyFormValues(\n values: Record<string, unknown>,\n fields: JSFFields | undefined,\n options?: { skipMoneyConversion?: boolean },\n) {\n if (!fields) {\n return {};\n }\n return Object.fromEntries(\n Object.entries(values)\n // @ts-expect-error need to check function return type\n .map(([key, value]) => {\n if (value === undefined) {\n return [key, undefined];\n }\n\n const field = fields.find((field) => field.name === key);\n\n if (field?.isVisible === false || field?.deprecated) {\n return [key, undefined];\n }\n\n if (field?.type === 'radio' || field?.type === 'select') {\n const option = (\n field.options as Array<{ value: string; label: string }>\n ).find((option) => option.value === value);\n\n if (option) {\n return [\n key,\n {\n prettyValue: stripHtml(option?.label),\n label: stripHtml(field?.label as string),\n inputType: field?.type,\n },\n ];\n }\n return;\n }\n\n if (field?.type === 'checkbox' && field?.const) {\n return [\n key,\n {\n prettyValue: true,\n label: stripHtml(field.label as string),\n inputType: field?.type,\n },\n ];\n }\n\n if (field?.type === 'countries' && Array.isArray(value)) {\n return [\n key,\n {\n prettyValue: value.join(),\n label: stripHtml(field.label as string),\n inputType: field?.type,\n },\n ];\n }\n\n if (field?.type === 'fieldset') {\n // @ts-expect-error need to check function return type\n const prettiedFieldset = prettifyFormValues(\n value as Record<string, unknown>,\n field.fields as JSFFields,\n options,\n );\n\n // Handles benefits fieldset in specific\n if (!prettiedFieldset.label && prettiedFieldset.value) {\n const prettyValue: Record<string, unknown> = {\n ...prettiedFieldset.value,\n label: stripHtml(field.label as string),\n inputType: field?.type,\n };\n return [key, prettyValue];\n }\n\n return [key, prettiedFieldset];\n }\n\n if (field?.type === 'money') {\n // value can be a string | number | null the values should come in cents\n // we convert to normal format and not use formatCurrency as consumers are expecting normal number\n return [\n key,\n {\n prettyValue:\n !options?.skipMoneyConversion &&\n (typeof value === 'string' || typeof value === 'number')\n ? convertFromCents(value)\n : value,\n label: stripHtml(field.label as string),\n inputType: field?.type,\n currency: field?.currency,\n },\n ];\n }\n\n if (field) {\n return [\n key,\n {\n prettyValue: value,\n label: stripHtml(field.label as string),\n inputType: field?.type,\n },\n ];\n }\n })\n .filter(Boolean),\n );\n}\n\n/**\n * Creates a structured error object with the error message and raw error object\n * @param message - The error message\n * @returns\n */\nexport function createStructuredError(message: string) {\n return {\n error: new Error(message),\n rawError: { message },\n fieldErrors: [],\n };\n}\n\n/**\n * Checks if the error is a structured error\n * @param err - The error\n * @returns True if the error is a structured error\n */\nexport function isStructuredError(err: unknown): err is {\n error: Error;\n rawError: Record<string, unknown>;\n fieldErrors: NormalizedFieldError[];\n} {\n return (\n typeof err === 'object' &&\n err !== null &&\n 'error' in err &&\n 'rawError' in err &&\n 'fieldErrors' in err\n );\n}\n\n/**\n * Handles the error for a step and optionally sets form field errors\n * @param err - The error\n * @param fieldsMeta - The fields metadata\n * @param form - Optional form instance to set field errors\n * @returns The structured error\n */\nexport function handleStepError(\n err: unknown,\n fieldsMeta?: NestedMeta,\n form?: {\n setError: (name: string, error: { type: string; message: string }) => void;\n },\n): {\n error: Error;\n rawError: Record<string, unknown>;\n fieldErrors: NormalizedFieldError[];\n} {\n // If it's already a structured error from mutateAsyncOrThrow\n if (isStructuredError(err)) {\n const normalizedFieldErrors = normalizeFieldErrors(\n err.fieldErrors || [],\n fieldsMeta,\n );\n\n // Automatically set form field errors if form is provided\n if (form) {\n setFormFieldErrors(form, normalizedFieldErrors);\n }\n\n return {\n error: err.error,\n rawError: err.rawError,\n fieldErrors: normalizedFieldErrors,\n };\n }\n\n // For unexpected errors, create a structured error\n const fallbackError = createStructuredError(\n err instanceof Error ? err.message : 'An unexpected error occurred',\n );\n\n return {\n ...fallbackError,\n fieldErrors: [], // No field errors for unexpected errors\n };\n}\n\n/**\n * Gets a nested value from an object using a dot-notation path string.\n * Replacement for lodash.get with support for nested property access.\n * @param obj - The object to query\n * @param path - The path to the property (e.g., 'user.address.city')\n * @param defaultValue - The value to return if the resolved value is undefined\n * @returns The resolved value or defaultValue\n */\nexport function getNestedValue<T = unknown>(\n obj: unknown,\n path: string,\n defaultValue?: T,\n): T | undefined {\n if (obj == null || typeof path !== 'string') {\n return defaultValue;\n }\n\n const keys = path.split('.');\n let result: unknown = obj;\n\n for (const key of keys) {\n if (result == null || typeof result !== 'object') {\n return defaultValue;\n }\n result = (result as Record<string, unknown>)[key];\n }\n\n return (result === undefined ? defaultValue : result) as T | undefined;\n}\n\n/**\n * Sets backend validation errors into react-hook-form state\n * Converts backend field paths to react-hook-form paths and sets errors\n *\n * @example\n * Backend: \"provisional_start_date\" → Form: \"provisional_start_date\"\n * Backend: \"service_duration/expiration_date\" → Form: \"service_duration.expiration_date\"\n * Backend: \"benefits[0]/value\" → Form: \"benefits.0.value\"\n *\n * @param form - The react-hook-form instance\n * @param fieldErrors - Array of normalized field errors from the backend\n */\nexport function setFormFieldErrors(\n form: {\n setError: (name: string, error: { type: string; message: string }) => void;\n },\n fieldErrors: NormalizedFieldError[],\n): void {\n fieldErrors.forEach(({ field, messages }) => {\n try {\n // Convert backend field path to react-hook-form path\n // \"/\" → \".\" for nested objects\n // \"[index]\" → \".index\" for arrays\n const formFieldPath = field\n .replace(/\\//g, '.')\n .replace(/\\[(\\d+)\\]/g, '.$1');\n\n form.setError(formFieldPath, {\n type: 'server',\n message: messages.join('. '),\n });\n } catch (error) {\n // Silently ignore if field doesn't exist in form\n // This can happen if backend returns errors for fields not in current step\n console.warn(`Could not set error for field: ${field}`, error);\n }\n });\n}\n"],"mappings":"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","names":["isMutationError","error","__name","extractFieldErrors","errors","fieldErrors","key","value","messages","msg","nestedKey","nestedValue","mutationToPromise","mutation","values","resolve","reject","response","errorData","httpResponse","errorMessage","normalizeFieldErrors","meta","fieldError","fieldMeta","userFriendlyLabel","pathParts","current","part","toBase64","__name","file","resolve","reject","reader","error","convertFilesToBase64","files","base64","dataURLtoFile","dataURL","filename","arr","mime","bstr","u8arr","char","addBusinessDays","isWeekend","nextMonday","clsx","twMerge","DOMPurify","cn","inputs","twMerge","clsx","__name","formatCurrency","amount","currencyCode","value","transformYupErrorsIntoObject","errors","validationErrors","error","innerError","debug","version","appendSecureRelValue","rel","attributes","DOMPurify","node","target","href","sanitizeHtml","html","sanitizeHtmlWithImageErrorHandling","doc","img","modifiedHtml","stripHtml","clearBase64Data","base64Data","cleanedData","prettifyFormValues","values","fields","options","key","field","option","prettiedFieldset","prettyValue","convertFromCents","createStructuredError","message","isStructuredError","err","handleStepError","fieldsMeta","form","normalizedFieldErrors","normalizeFieldErrors","setFormFieldErrors","getNestedValue","obj","path","defaultValue","keys","result","fieldErrors","messages","formFieldPath","textInputTypes","checkboxTypes","supportedTypes","round","value","__name","convertToValidCost","convertToCents","amount","validAmount","convertFromCents","normalizedValue","trimStringValues","values","result","key","item","prefillReadOnlyFields","fields","newValues","field","fieldName","extractFieldsetFieldsValues","formValues","nestedAcc","subField","fieldTypesTransformations","selectedCountries","option","selectedCountry","getCountryValue","opt","castValue","files","convertFilesToBase64","parseFormValuesToAPI","filteredFields","acc","fieldset","nestedFormValues","fieldsetValue","cleanedValue","transformedFields","parsedFieldValues","fieldValues","extraField","formValue","fieldTransformValueToAPI","current","isFieldVisible","applyFieldDynamicProperties","excludeValuesInvisible","keepTruthyInvisibleValues","parentFieldKeyPath","valuesAsked","fieldKeyPath","valueOfField","getNestedValue","removeEmptyValues","obj","cleanUnderscoreFields","parseSubmitValues","config","visibleFormValues","convertedFormValues","formValuesWithTrimmedStrings","formValuesWithUndefined","valuesWithReadOnly","parseJSFToValidate","getDefaultValueForType","type","supportedTypes","__name","getInitialDefaultValue","defaultValues","field","defaultFieldValue","getNestedValue","fieldTransformValueFromAPI","fieldTypesTransformations","generatedValue","defaultValueDeprecated","initialValueForCheckboxAsBool","excludeString","val","getInitialSubFieldValues","parentFieldKeyPath","initialValue","fieldKeyPath","subFields","subFieldValues","subField","getInitialValues","fields","initialValues","defaultFieldValues","applyFieldDynamicProperties","getFieldsWithFlatFieldsets","fieldsets","values","flatFieldsetsKeys","flatFieldsetsFieldNames","flatFieldsetKey","flatFieldsetFields","rest","childFields","name","f","childField","isFieldVisible","accumulator","accumulatedFieldsSorted","fieldsetPosition","accumulatorItem","enableAckFields","result","k","v","getMinStartDate","minOnBoardingTime","today","minDate","addBusinessDays","isWeekend","nextMonday","checkFieldHasForcedValue"]}
|
package/dist/chunk-GSB44SSJ.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{a as S}from"./chunk-JXZX66MM.js";import{a as y,b,c as N,d as T,e as $,f as v}from"./chunk-LJUWER2H.js";import{j as _,k as C,n as p,o as F}from"./chunk-Y3CJRZLA.js";import{a as u}from"./chunk-P37U34EQ.js";import{jsx as e,jsxs as t}from"react/jsx-runtime";function G({field:f,fieldState:r,fieldData:g}){let{name:n,label:m,description:s,options:c,onChangeCountryCode:i,onChangePhoneNumber:h,currentCountry:o,nationalPhoneNumber:w}=g,I=o?`${o.name}-${o.dialCode}`:"";return t(_,{"data-field":n,className:`RemoteFlows__TelField__Item__${n}`,children:[m&&e(C,{className:"RemoteFlows__TelField__Label",children:m}),t("div",{className:"flex gap-2",children:[e("div",{className:"w-[180px]",children:t(y,{value:I,onValueChange:l=>{let a=c?.find(d=>`${d.label}-${d.meta?.countryCode}`===l);a&&i&&i({name:a.label,dialCode:a.meta?.countryCode||"",pattern:a.pattern||""})},children:[e(T,{className:"RemoteFlows__TelField__CountrySelect","aria-invalid":!!r.error,"aria-label":"Country code",children:e("span",{className:"absolute",children:e(N,{placeholder:"Country code *",children:o&&`${o.name} +${o.dialCode}`})})}),e($,{className:"RemoteFlows__TelField__CountryContent",children:e(b,{className:"RemoteFlows__TelField__CountryGroup",children:c?.map((l,a)=>t(v,{value:`${l.label}-${l.meta?.countryCode}`,className:"RemoteFlows__TelField__CountryItem",children:[l.label," +",l.meta?.countryCode]},`${l.label}-${l.meta?.countryCode}-${a}`))})})]})}),e("div",{className:"flex-1",children:e(S,{...f,type:"tel",value:w||"",onChange:h,className:"RemoteFlows__TelField__Input",placeholder:"Employee's phone number *","aria-invalid":!!r.error,"aria-label":"Phone number"})})]}),s&&e(p,{className:"RemoteFlows__TelField__Description",children:s}),r.error&&e(F,{})]})}u(G,"TelFieldDefault");export{G as a};
|
|
2
|
-
//# sourceMappingURL=chunk-GSB44SSJ.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/form/fields/default/TelFieldDefault.tsx"],"sourcesContent":["import { FormDescription, FormMessage } from '@/src/components/ui/form';\nimport { FormItem, FormLabel } from '@/src/components/ui/form';\nimport { TelFieldComponentProps } from '@/src/types/fields';\nimport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '@/src/components/ui/select';\nimport { Input } from '@/src/components/ui/input';\n\nexport function TelFieldDefault({\n field,\n fieldState,\n fieldData,\n}: TelFieldComponentProps) {\n const {\n name,\n label,\n description,\n options,\n onChangeCountryCode,\n onChangePhoneNumber,\n currentCountry,\n nationalPhoneNumber,\n } = fieldData;\n\n const selectedCountryCode = currentCountry\n ? `${currentCountry.name}-${currentCountry.dialCode}`\n : '';\n\n return (\n <FormItem\n data-field={name}\n className={`RemoteFlows__TelField__Item__${name}`}\n >\n {label && (\n <FormLabel className='RemoteFlows__TelField__Label'>{label}</FormLabel>\n )}\n\n <div className='flex gap-2'>\n {/* Country Code Select */}\n <div className='w-[180px]'>\n <Select\n value={selectedCountryCode}\n onValueChange={(value) => {\n const country = options?.find(\n (opt) => `${opt.label}-${opt.meta?.countryCode}` === value,\n );\n if (country && onChangeCountryCode) {\n onChangeCountryCode({\n name: country.label,\n dialCode: country.meta?.countryCode || '',\n pattern: country.pattern || '',\n });\n }\n }}\n >\n <SelectTrigger\n className='RemoteFlows__TelField__CountrySelect'\n aria-invalid={Boolean(fieldState.error)}\n aria-label='Country code'\n >\n <span className='absolute'>\n <SelectValue placeholder='Country code *'>\n {currentCountry &&\n `${currentCountry.name} +${currentCountry.dialCode}`}\n </SelectValue>\n </span>\n </SelectTrigger>\n <SelectContent className='RemoteFlows__TelField__CountryContent'>\n <SelectGroup className='RemoteFlows__TelField__CountryGroup'>\n {options?.map((option, index) => (\n <SelectItem\n key={`${option.label}-${option.meta?.countryCode}-${index}`}\n value={`${option.label}-${option.meta?.countryCode}`}\n className='RemoteFlows__TelField__CountryItem'\n >\n {option.label} +{option.meta?.countryCode}\n </SelectItem>\n ))}\n </SelectGroup>\n </SelectContent>\n </Select>\n </div>\n\n {/* Phone Number Input */}\n <div className='flex-1'>\n <Input\n {...field}\n type='tel'\n value={nationalPhoneNumber || ''}\n onChange={onChangePhoneNumber}\n className='RemoteFlows__TelField__Input'\n placeholder=\"Employee's phone number *\"\n aria-invalid={Boolean(fieldState.error)}\n aria-label='Phone number'\n />\n </div>\n </div>\n\n {description && (\n <FormDescription className='RemoteFlows__TelField__Description'>\n {description}\n </FormDescription>\n )}\n {fieldState.error && <FormMessage />}\n </FormItem>\n );\n}\n"],"mappings":"mNAuCQ,cAAAA,EAoCU,QAAAC,MApCV,oBA1BD,SAASC,EAAgB,CAC9B,MAAAC,EACA,WAAAC,EACA,UAAAC,CACF,EAA2B,CACzB,GAAM,CACJ,KAAAC,EACA,MAAAC,EACA,YAAAC,EACA,QAAAC,EACA,oBAAAC,EACA,oBAAAC,EACA,eAAAC,EACA,oBAAAC,CACF,EAAIR,EAEES,EAAsBF,EACxB,GAAGA,EAAe,IAAI,IAAIA,EAAe,QAAQ,GACjD,GAEJ,OACEX,EAACc,EAAA,CACC,aAAYT,EACZ,UAAW,gCAAgCA,CAAI,GAE9C,UAAAC,GACCP,EAACgB,EAAA,CAAU,UAAU,+BAAgC,SAAAT,EAAM,EAG7DN,EAAC,OAAI,UAAU,aAEb,UAAAD,EAAC,OAAI,UAAU,YACb,SAAAC,EAACgB,EAAA,CACC,MAAOH,EACP,cAAgBI,GAAU,CACxB,IAAMC,EAAUV,GAAS,KACtBW,GAAQ,GAAGA,EAAI,KAAK,IAAIA,EAAI,MAAM,WAAW,KAAOF,CACvD,EACIC,GAAWT,GACbA,EAAoB,CAClB,KAAMS,EAAQ,MACd,SAAUA,EAAQ,MAAM,aAAe,GACvC,QAASA,EAAQ,SAAW,EAC9B,CAAC,CAEL,EAEA,UAAAnB,EAACqB,EAAA,CACC,UAAU,uCACV,eAAc,EAAQjB,EAAW,MACjC,aAAW,eAEX,SAAAJ,EAAC,QAAK,UAAU,WACd,SAAAA,EAACsB,EAAA,CAAY,YAAY,iBACtB,SAAAV,GACC,GAAGA,EAAe,IAAI,KAAKA,EAAe,QAAQ,GACtD,EACF,EACF,EACAZ,EAACuB,EAAA,CAAc,UAAU,wCACvB,SAAAvB,EAACwB,EAAA,CAAY,UAAU,sCACpB,SAAAf,GAAS,IAAI,CAACgB,EAAQC,IACrBzB,EAAC0B,EAAA,CAEC,MAAO,GAAGF,EAAO,KAAK,IAAIA,EAAO,MAAM,WAAW,GAClD,UAAU,qCAET,UAAAA,EAAO,MAAM,KAAGA,EAAO,MAAM,cAJzB,GAAGA,EAAO,KAAK,IAAIA,EAAO,MAAM,WAAW,IAAIC,CAAK,EAK3D,CACD,EACH,EACF,GACF,EACF,EAGA1B,EAAC,OAAI,UAAU,SACb,SAAAA,EAAC4B,EAAA,CACE,GAAGzB,EACJ,KAAK,MACL,MAAOU,GAAuB,GAC9B,SAAUF,EACV,UAAU,+BACV,YAAY,4BACZ,eAAc,EAAQP,EAAW,MACjC,aAAW,eACb,EACF,GACF,EAECI,GACCR,EAAC6B,EAAA,CAAgB,UAAU,qCACxB,SAAArB,EACH,EAEDJ,EAAW,OAASJ,EAAC8B,EAAA,EAAY,GACpC,CAEJ,CAlGgBC,EAAA7B,EAAA","names":["jsx","jsxs","TelFieldDefault","field","fieldState","fieldData","name","label","description","options","onChangeCountryCode","onChangePhoneNumber","currentCountry","nationalPhoneNumber","selectedCountryCode","FormItem","FormLabel","Select","value","country","opt","SelectTrigger","SelectValue","SelectContent","SelectGroup","option","index","SelectItem","Input","FormDescription","FormMessage","__name"]}
|
package/dist/chunk-HGFJTAEM.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{a as Z}from"./chunk-F5WNUYFP.js";import{a as I}from"./chunk-VFRHMNLJ.js";import{a as Q,b as W,c as X,f as Y}from"./chunk-3ID3UX2Q.js";import{a as C}from"./chunk-HN5HLFTB.js";import{a as G}from"./chunk-KFYWUBRS.js";import{c as ee}from"./chunk-43FMKELR.js";import{a as z}from"./chunk-BIL7ERK6.js";import{b as K,h as M}from"./chunk-G2LZFGZA.js";import{a as o}from"./chunk-P37U34EQ.js";import{number as Be,object as se}from"yup";import{useCallback as je,useEffect as te,useMemo as we,useRef as Re,useState as j}from"react";import{string as ne,ValidationError as re}from"yup";import{jsx as ie}from"react/jsx-runtime";var O={title:"Estimation",includeBenefits:!1,includeCostBreakdowns:!1,includePremiumBenefits:!1,enableCurrencyConversion:!1,includeEstimationTitle:!1,includeManagementFee:!1},Pe=o(t=>z(I.data.schema,void 0,t),"useStaticSchema");function xe(t,i){if(typeof t=="object"&&t!==null&&"title"in t){let l=t.title;if(l)return l}return i==="my_hiring_budget"?"Hiring budget":"Employee's annual salary"}o(xe,"getSalaryTitle");var ze=o(({defaultRegion:t,defaultCurrency:i,defaultSalary:l,estimationOptions:s,options:n,version:a}={estimationOptions:O})=>{let u=Re({fields:{}}),[k,h]=j(t),[w,R]=j(),[m,q]=j(),[H,le]=j(),{data:_,isLoading:ue}=Q({includePremiumBenefits:s.includePremiumBenefits}),{data:d,isLoading:ce}=W(),me=k||w?.value,{data:P,isLoading:de}=Y(me,{includePremiumBenefits:s.includePremiumBenefits,options:n}),U=X(),{mutateAsync:fe}=K(U),b=w?.currency,p=n?.jsfModify?.fields?.salary,F=p&&typeof p=="object"&&"presentation"in p?p.presentation:void 0,L=je(()=>{let e=b&&m?b!==m:!1;return b!==m?{from:m,to:b,shouldSwapOrder:e}:{from:b,to:m,shouldSwapOrder:e}},[b,m]),J=s.showManagementFee,$=s.includeEstimationTitle,ge=we(()=>{let{from:e,to:r,shouldSwapOrder:c}=L(),g=xe(p,H);return{fields:{salary:{...p,title:g,presentation:{salary_conversion_properties:{label:F?.salary_conversion_properties?.label,description:F?.salary_conversion_properties?.description},currencies:{from:e,to:r},Component:o(y=>ie(Z,{...y,shouldSwapOrder:c,conversionType:a==="marketing"?"no_spread":"spread",defaultValue:l}),"Component")}},hiring_budget:{...n?.jsfModify?.fields?.hiring_budget,presentation:{hidden:a=="marketing"}},management:{...n?.jsfModify?.fields?.management,properties:{...n?.jsfModify?.fields?.management?.properties,management_fee:{...n?.jsfModify?.fields?.management?.properties?.management_fee,"x-jsf-presentation":{inputType:"money",additionalProps:{currency:m||"USD"}}}},presentation:{...typeof n?.jsfModify?.fields?.management=="object"?(n?.jsfModify?.fields?.management)["x-jsf-presentation"]:{},hidden:!J,Component:o(y=>ie(ee,{...y,variant:"inset",features:{toggle:{enabled:!0,stateField:"management._expanded",labels:{expand:"Define",collapse:"Remove"}}}}),"Component")}},estimation_title:{...n?.jsfModify?.fields?.estimation_title,"x-jsf-presentation":{hidden:!$}}}}},[L,p,H,F?.salary_conversion_properties?.label,F?.salary_conversion_properties?.description,n?.jsfModify?.fields?.hiring_budget,n?.jsfModify?.fields?.management,n?.jsfModify?.fields?.estimation_title,a,m,J,$,l]),f=Pe({jsfModify:{fields:{...n?.jsfModify?.fields,...ge?.fields}}});te(()=>{if(t&&_){let e=_.find(({value:r})=>r===t);e&&R(e)}},[t,_]),te(()=>{if(i&&d){let e=d.find(({value:r})=>r===i);e&&q(e.label)}},[i,d]);async function ye(e){return fe(oe(e,s,a))}o(ye,"onSubmit");function pe(e){let r=_?.find(({value:c})=>c===e);r&&r.childRegions.length===0&&r.hasAdditionalFields?h(r.regionSlug):h(void 0),R(r)}o(pe,"onCountryChange");function Ce(e){h(e)}o(Ce,"onRegionChange");function _e(e){le(e.target.value)}o(_e,"onHiringBudgetChange");function be(e){let r=d?.find(c=>c.value===e)?.label;q(r),n?.onCurrencyChange?.(r||"")}o(be,"onChangeCurrency");let E=f.fields.find(e=>e.name==="region");if(E){let e=w?.childRegions.map(r=>({value:r.slug,label:r.name}))??[];E.options=e,E.isVisible=e.length>0,E.required=e.length>0,E.onChange=Ce,E.schema=e.length>0?ne().transform(r=>typeof r=="string"?r:"").required("Region is required"):ne()}if(d){let e=f.fields.find(r=>r.name==="currency");e&&(e.options=d,e.onChange=be)}let v=f.fields.find(e=>e.name==="hiring_budget");if(v&&(v.onChange=_e),_){let e=f.fields.find(r=>r.name==="country");e&&(e.options=_,e.onChange=pe)}let Ee=o(()=>{R(void 0),h(t)},"resetForm"),D=[...f.fields.filter(e=>e.name!=="management"),...P?.fields||[],...f.fields.filter(e=>e.name==="management")],N=ae(f.fields,m||"USD",s.includeEstimationTitle);async function Se(e){let r=null;n?.onValidation?.(e);let c=await M(e,D);try{await N.validate(c,{abortEarly:!1}),r={formErrors:{},yupError:new re([],e)}}catch(S){let B=G(S);r={formErrors:Object.entries(B).reduce((T,[A,V])=>({...T,[A]:V.message}),{}),yupError:S}}let g=P?.handleValidation(c),y=[...r?.yupError.inner||[],...g?.yupError?.inner||[]],x={...r?.yupError?.value||{},...g?.yupError?.value||{}};return{formErrors:{...r?.formErrors||{},...g?.formErrors||{}},yupError:new re(y,x)}}return o(Se,"handleValidation"),{stepState:{current:0,total:1,isLastStep:!0},fields:D,validationSchema:N,parseFormValues:o(async e=>{let{country:r,region:c,currency:g,salary_converted:y,hiring_budget:x,salary_conversion:S,management:B,estimation_title:T,...A}=e,V=e.salary;y==="salary_conversion"&&(V=S);let he=await M({country:r,region:c,salary:V,salary_converted:y,salary_conversion:S,hiring_budget:x,currency:g,management:B,estimation_title:T},f.fields),Fe=await M(A,P?.fields||[]),Ve={currency_code:d?.find(Me=>Me.value===g)?.label};return{...he,...Fe,...Ve}},"parseFormValues"),handleValidation:Se,isSubmitting:U.isPending,isLoading:ue&&ce&&de,onSubmit:ye,resetForm:Ee,currencies:d,meta:{fields:u.current?.fields}}},"useCostCalculator");function ae(t,i,l){let s=t.reduce((n,a)=>(a.name==="salary"||a.name==="salary_conversion"?n[a.name]=a.schema.when("salary_converted",{is:o(u=>u===a.name,"is"),then:o(u=>u.required("Required field"),"then"),otherwise:o(u=>u.optional(),"otherwise")}):a.name==="management"?n[a.name]=se({management_fee:Be().transform(u=>isNaN(u)?void 0:u).min(0,"Management fee must be greater than or equal to 0").max(i?C[i]:C.USD,()=>`Management fee cannot exceed ${(i?C[i]:C.USD)/100} ${i}`)}):a.name==="estimation_title"&&l?n[a.name]=a.schema.required("Required field"):n[a.name]=a.schema,n),{});return se(s)}o(ae,"buildValidationSchema");function Te(t){let i="benefit-";return Object.keys(t).reduce((l,s)=>{let n=t[s];if(n==="none")return l;let u={benefit_group_slug:s.replace(i,""),benefit_tier_slug:n};return[...l,u]},[])}o(Te,"formatBenefits");function Ae(t,i,l){let s=Number(t.management?.management_fee),n=t.currency_code;return{...{region_slug:t.region||t.country,employment_term:t.contract_duration_type??"fixed",title:t.estimation_title||i.title,age:t.age??void 0,...t.benefits&&{benefits:Te(t.benefits)},...i.includeManagementFee&&s&&{discount:{quoted_amount:i.showManagementFee?s:C[n]||C.USD,text:""}}},...Oe(t,l)}}o(Ae,"mapValueToEmployment");function Oe(t,i){let l=i==="marketing"||t.salary_converted==="salary_conversion",s=i==="standard"&&t.salary_converted==="salary",n=t.hiring_budget==="my_hiring_budget";if(l){let a=t.salary_converted==="salary_conversion";return n?{annual_total_cost_in_employer_currency:t.salary}:{[a?"annual_gross_salary_in_employer_currency":"annual_gross_salary"]:t.salary}}return s?n?{annual_total_cost:t.salary}:{annual_gross_salary:t.salary}:{}}o(Oe,"getSalaryFields");function oe(t,i=O,l="standard"){let s=Array.isArray(t)?t:[t];if(s.length===0)throw new Error("At least one employment value is required");return s.length>1&&new Set(s.map(a=>a.currency)).size>1&&console.warn("Multiple currencies detected in array. Using currency from first employment."),{employer_currency_slug:s[0].currency,include_benefits:i.includeBenefits,include_cost_breakdowns:i.includeCostBreakdowns,include_premium_benefits:i.includePremiumBenefits,include_management_fee:i.includeManagementFee,employments:s.map(n=>Ae(n,i,l))}}o(oe,"buildPayload");export{ae as a,oe as b,O as c,ze as d};
|
|
2
|
-
//# sourceMappingURL=chunk-HGFJTAEM.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/flows/CostCalculator/utils.ts","../src/flows/CostCalculator/hooks.tsx"],"sourcesContent":["import type {\n CostCalculatorEmploymentParam,\n CostCalculatorEstimateParams,\n} from '@/src/client';\n\nimport { $TSFixMe } from '@/src/types/remoteFlows';\nimport { AnyObjectSchema, number, object } from 'yup';\nimport { CostCalculatorVersion, defaultEstimationOptions } from './hooks';\nimport type {\n CostCalculatorEstimationOptions,\n CostCalculatorEstimationSubmitValues,\n CurrencyKey,\n} from './types';\nimport { BASE_RATES } from '@/src/flows/CostCalculator/constants';\n\n/**\n * Build the validation schema for the form.\n * @returns\n */\nexport function buildValidationSchema(\n fields: $TSFixMe[],\n employerBillingCurrency: string,\n includeEstimationTitle?: boolean,\n) {\n const fieldsSchema = fields.reduce<Record<string, AnyObjectSchema>>(\n (fieldsSchemaAcc, field) => {\n // Special handling for salary fields\n if (field.name === 'salary' || field.name === 'salary_conversion') {\n fieldsSchemaAcc[field.name] = (field.schema as AnyObjectSchema).when(\n 'salary_converted',\n {\n is: (val: string | null) => val === field.name,\n then: (schema) => schema.required('Required field'),\n otherwise: (schema) => schema.optional(),\n },\n );\n } else if (field.name === 'management') {\n fieldsSchemaAcc[field.name] = object({\n management_fee: number()\n .transform((value) => {\n return isNaN(value) ? undefined : value;\n })\n .min(0, 'Management fee must be greater than or equal to 0')\n .max(\n employerBillingCurrency\n ? BASE_RATES[employerBillingCurrency as CurrencyKey]\n : BASE_RATES.USD,\n () => {\n const maxValue = employerBillingCurrency\n ? BASE_RATES[employerBillingCurrency as CurrencyKey]\n : BASE_RATES.USD;\n const displayValue = maxValue / 100;\n return `Management fee cannot exceed ${displayValue} ${employerBillingCurrency}`;\n },\n ),\n });\n } else if (field.name === 'estimation_title' && includeEstimationTitle) {\n // Make estimation_title required when includeEstimationTitle is true\n fieldsSchemaAcc[field.name] = (\n field.schema as AnyObjectSchema\n ).required('Required field');\n } else {\n fieldsSchemaAcc[field.name] = field.schema as AnyObjectSchema;\n }\n return fieldsSchemaAcc;\n },\n {},\n );\n return object(fieldsSchema) as AnyObjectSchema;\n}\n\n/**\n * Format the benefits to the expected format by the API.\n * @param benefits\n * @returns\n */\nfunction formatBenefits(benefits: Record<string, string>) {\n const needle = 'benefit-';\n return Object.keys(benefits).reduce<\n Array<{ benefit_group_slug: string; benefit_tier_slug: string }>\n >((acc, key) => {\n const benefitTierSlug = benefits[key];\n if (benefitTierSlug === 'none') {\n return acc;\n }\n const benefitGroupSlug = key.replace(needle, '');\n const benefitEntry = {\n benefit_group_slug: benefitGroupSlug,\n benefit_tier_slug: benefitTierSlug,\n };\n return [...acc, benefitEntry];\n }, []);\n}\n\nfunction mapValueToEmployment(\n value: CostCalculatorEstimationSubmitValues,\n estimationOptions: CostCalculatorEstimationOptions,\n version: CostCalculatorVersion,\n): CostCalculatorEmploymentParam {\n const managementFee = Number(value.management?.management_fee);\n const currencyCode = value.currency_code;\n\n const base: CostCalculatorEmploymentParam = {\n region_slug: value.region || value.country,\n employment_term: value.contract_duration_type ?? 'fixed',\n title: value.estimation_title || estimationOptions.title,\n age: value.age ?? undefined,\n ...(value.benefits && { benefits: formatBenefits(value.benefits) }),\n ...(estimationOptions.includeManagementFee &&\n managementFee && {\n discount: {\n quoted_amount: estimationOptions.showManagementFee\n ? managementFee\n : BASE_RATES[currencyCode as keyof typeof BASE_RATES] ||\n BASE_RATES.USD,\n text: '',\n },\n }),\n };\n\n return {\n ...base,\n ...getSalaryFields(value, version),\n };\n}\n\nfunction getSalaryFields(\n value: CostCalculatorEstimationSubmitValues,\n version: CostCalculatorVersion,\n): Partial<CostCalculatorEmploymentParam> {\n const isMarketing =\n version === 'marketing' || value.salary_converted === 'salary_conversion';\n const isStandard =\n version === 'standard' && value.salary_converted === 'salary';\n const useHiringBudget = value.hiring_budget === 'my_hiring_budget';\n\n if (isMarketing) {\n const useEmployerCurrency = value.salary_converted === 'salary_conversion';\n return useHiringBudget\n ? {\n annual_total_cost_in_employer_currency: value.salary,\n }\n : {\n [useEmployerCurrency\n ? 'annual_gross_salary_in_employer_currency'\n : 'annual_gross_salary']: value.salary,\n };\n }\n\n if (isStandard) {\n return useHiringBudget\n ? {\n annual_total_cost: value.salary,\n }\n : {\n annual_gross_salary: value.salary,\n };\n }\n\n return {};\n}\n\n/**\n * Build the payload for the cost calculator estimation.\n * @param values\n * @param estimationOptions\n * @returns\n */\nexport function buildPayload(\n values:\n | CostCalculatorEstimationSubmitValues\n | CostCalculatorEstimationSubmitValues[],\n estimationOptions: CostCalculatorEstimationOptions = defaultEstimationOptions,\n version: CostCalculatorVersion = 'standard',\n): CostCalculatorEstimateParams {\n const employments = Array.isArray(values) ? values : [values];\n\n if (employments.length === 0) {\n throw new Error('At least one employment value is required');\n }\n\n if (employments.length > 1) {\n const currencies = new Set(employments.map((v) => v.currency));\n if (currencies.size > 1) {\n console.warn(\n 'Multiple currencies detected in array. Using currency from first employment.',\n );\n }\n }\n\n return {\n employer_currency_slug: employments[0].currency,\n include_benefits: estimationOptions.includeBenefits,\n include_cost_breakdowns: estimationOptions.includeCostBreakdowns,\n include_premium_benefits: estimationOptions.includePremiumBenefits,\n include_management_fee: estimationOptions.includeManagementFee,\n employments: employments.map((value) =>\n mapValueToEmployment(value, estimationOptions, version),\n ),\n };\n}\n","import { MinimalRegion } from '@/src/client';\nimport { jsonSchema } from '@/src/flows/CostCalculator/jsonSchema';\nimport type {\n CostCalculatorEstimationFormValues,\n CostCalculatorEstimationOptions,\n CostCalculatorEstimationSubmitValues,\n UseCostCalculatorOptions,\n} from '@/src/flows/CostCalculator/types';\nimport type { JSFModify } from '@/src/flows/types';\n\nimport { parseJSFToValidate } from '@/src/components/form/utils';\nimport { iterateErrors } from '@/src/components/form/validationResolver';\nimport { createHeadlessForm } from '@/src/common/createHeadlessForm';\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { string, ValidationError } from 'yup';\nimport { buildPayload, buildValidationSchema } from './utils';\nimport {\n useCompanyCurrencies,\n useCostCalculatorCountries,\n useCostCalculatorEstimation,\n useRegionFields,\n} from '@/src/flows/CostCalculator/api';\nimport { $TSFixMe, JSFField, Meta } from '@/src/types/remoteFlows';\nimport { SalaryField } from '@/src/flows/CostCalculator/components/SalaryField';\nimport {\n FieldSetField,\n FieldSetProps,\n} from '@/src/components/form/fields/FieldSetField';\nimport { mutationToPromise } from '@/src/lib/mutations';\nexport type CostCalculatorVersion = 'standard' | 'marketing';\n\ntype CostCalculatorCountry = {\n value: string;\n label: string;\n childRegions: MinimalRegion[];\n hasAdditionalFields: boolean | undefined;\n regionSlug: string;\n currency: string;\n};\n\ntype JSFValidationError = {\n formErrors: Record<\n string,\n {\n type: string;\n message: string;\n }\n >;\n yupError: ValidationError;\n};\n\nexport const defaultEstimationOptions: CostCalculatorEstimationOptions = {\n title: 'Estimation',\n includeBenefits: false,\n includeCostBreakdowns: false,\n includePremiumBenefits: false,\n enableCurrencyConversion: false,\n includeEstimationTitle: false,\n includeManagementFee: false,\n};\n\ntype UseCostCalculatorParams = {\n /**\n * The default region slug to preselect a country and a region.\n */\n defaultRegion?: string;\n /**\n * The default currency slug to preselect a currency.\n */\n defaultCurrency?: string;\n\n /**\n * The default salary to preselect a salary.\n */\n defaultSalary?: string;\n /**\n * The estimation options.\n */\n estimationOptions: CostCalculatorEstimationOptions;\n options?: UseCostCalculatorOptions;\n version?: CostCalculatorVersion;\n};\n\nconst useStaticSchema = (options?: { jsfModify?: JSFModify }) => {\n return createHeadlessForm(jsonSchema.data.schema, undefined, options);\n};\n\ntype HiringBudget = 'my_hiring_budget' | 'employee_annual_salary';\n\nfunction getSalaryTitle(\n salaryField: unknown,\n hiringBudget?: HiringBudget,\n): string {\n if (\n typeof salaryField === 'object' &&\n salaryField !== null &&\n 'title' in salaryField\n ) {\n const title = (salaryField as { title?: string }).title;\n if (title) return title;\n }\n return hiringBudget === 'my_hiring_budget'\n ? 'Hiring budget'\n : \"Employee's annual salary\";\n}\n\n/**\n * Hook to use the cost calculator.\n */\nexport const useCostCalculator = (\n {\n defaultRegion,\n defaultCurrency,\n defaultSalary,\n estimationOptions,\n options,\n version,\n }: UseCostCalculatorParams = {\n estimationOptions: defaultEstimationOptions,\n },\n) => {\n const fieldsMetaRef = useRef<{\n fields: Meta;\n }>({\n fields: {},\n });\n const [selectedRegion, setSelectedRegion] = useState<string | undefined>(\n defaultRegion,\n );\n const [selectedCountry, setSelectedCountry] =\n useState<CostCalculatorCountry>();\n const [employerBillingCurrency, setEmployerBillingCurrency] = useState<\n string | undefined\n >();\n const [hiringBudget, setHiringBudget] = useState<HiringBudget>();\n const { data: countries, isLoading: isLoadingCountries } =\n useCostCalculatorCountries({\n includePremiumBenefits: estimationOptions.includePremiumBenefits,\n });\n const { data: currencies, isLoading: isLoadingCurrencies } =\n useCompanyCurrencies();\n\n const jsonSchemaRegionSlug = selectedRegion || selectedCountry?.value;\n\n const { data: jsonSchemaRegionFields, isLoading: isLoadingRegionFields } =\n useRegionFields(jsonSchemaRegionSlug, {\n includePremiumBenefits: estimationOptions.includePremiumBenefits,\n options,\n });\n const costCalculatorEstimationMutation = useCostCalculatorEstimation();\n const { mutateAsync: costCalculatorEstimationMutationAsync } =\n mutationToPromise(costCalculatorEstimationMutation);\n const employeeBillingCurrency = selectedCountry?.currency;\n\n const salaryField = options?.jsfModify?.fields?.salary;\n const salaryFieldPresentation =\n salaryField &&\n typeof salaryField === 'object' &&\n 'presentation' in salaryField\n ? (\n salaryField as {\n presentation?: {\n salary_conversion_properties?: {\n label?: string;\n description?: string;\n };\n };\n }\n ).presentation\n : undefined;\n\n const getCurrencies = useCallback(() => {\n const shouldSwapOrder =\n employeeBillingCurrency && employerBillingCurrency\n ? employeeBillingCurrency !== employerBillingCurrency\n : false;\n\n if (employeeBillingCurrency !== employerBillingCurrency) {\n return {\n from: employerBillingCurrency,\n to: employeeBillingCurrency,\n shouldSwapOrder,\n };\n }\n\n return {\n from: employeeBillingCurrency,\n to: employerBillingCurrency,\n shouldSwapOrder,\n };\n }, [employeeBillingCurrency, employerBillingCurrency]);\n\n const showManagementField = estimationOptions.showManagementFee;\n const showEstimationTitleField = estimationOptions.includeEstimationTitle;\n const customFields = useMemo(() => {\n const { from, to, shouldSwapOrder } = getCurrencies();\n const salaryTitle = getSalaryTitle(salaryField, hiringBudget);\n\n return {\n fields: {\n salary: {\n ...salaryField,\n title: salaryTitle,\n presentation: {\n salary_conversion_properties: {\n label:\n salaryFieldPresentation?.salary_conversion_properties?.label,\n description:\n salaryFieldPresentation?.salary_conversion_properties\n ?.description,\n },\n currencies: { from, to },\n Component: (\n props: JSFField & { currencies: { from: string; to: string } },\n ) => {\n return (\n <SalaryField\n {...props}\n shouldSwapOrder={shouldSwapOrder}\n conversionType={\n version === 'marketing' ? 'no_spread' : 'spread'\n }\n defaultValue={defaultSalary}\n />\n );\n },\n },\n },\n hiring_budget: {\n ...options?.jsfModify?.fields?.hiring_budget,\n presentation: {\n hidden: version == 'marketing',\n },\n },\n management: {\n ...options?.jsfModify?.fields?.management,\n properties: {\n ...(options?.jsfModify?.fields?.management as $TSFixMe)?.properties,\n management_fee: {\n ...(options?.jsfModify?.fields?.management as $TSFixMe)\n ?.properties?.management_fee,\n 'x-jsf-presentation': {\n inputType: 'money',\n additionalProps: {\n currency: employerBillingCurrency || 'USD',\n },\n },\n },\n },\n presentation: {\n ...(typeof options?.jsfModify?.fields?.management === 'object'\n ? (\n options?.jsfModify?.fields?.management as Record<\n string,\n $TSFixMe\n >\n )['x-jsf-presentation']\n : {}),\n hidden: !showManagementField,\n Component: (props: FieldSetProps) => {\n return (\n <FieldSetField\n {...props}\n variant='inset'\n features={{\n toggle: {\n enabled: true,\n stateField: 'management._expanded',\n labels: {\n expand: 'Define',\n collapse: 'Remove',\n },\n },\n }}\n />\n );\n },\n },\n },\n estimation_title: {\n ...options?.jsfModify?.fields?.estimation_title,\n 'x-jsf-presentation': {\n hidden: !showEstimationTitleField,\n },\n },\n },\n };\n }, [\n getCurrencies,\n salaryField,\n hiringBudget,\n salaryFieldPresentation?.salary_conversion_properties?.label,\n salaryFieldPresentation?.salary_conversion_properties?.description,\n options?.jsfModify?.fields?.hiring_budget,\n options?.jsfModify?.fields?.management,\n options?.jsfModify?.fields?.estimation_title,\n version,\n employerBillingCurrency,\n showManagementField,\n showEstimationTitleField,\n defaultSalary,\n ]);\n\n const fieldsJSONSchema = useStaticSchema({\n jsfModify: {\n fields: {\n ...options?.jsfModify?.fields,\n ...customFields?.fields,\n },\n },\n });\n\n useEffect(() => {\n // Initialize selectedCountry from defaultRegion\n if (defaultRegion && countries) {\n const defaultCountry = countries.find(\n ({ value }) => value === defaultRegion,\n );\n if (defaultCountry) {\n setSelectedCountry(defaultCountry);\n }\n }\n }, [defaultRegion, countries]);\n\n useEffect(() => {\n // Initialize selectedCurrency from defaultCurrency\n if (defaultCurrency && currencies) {\n const defaultCurrencyObj = currencies.find(\n ({ value }) => value === defaultCurrency,\n );\n if (defaultCurrencyObj) {\n setEmployerBillingCurrency(defaultCurrencyObj.label);\n }\n }\n }, [defaultCurrency, currencies]);\n\n /**\n * Submit the estimation form with the given values.\n * @param values\n */\n async function onSubmit(values: CostCalculatorEstimationSubmitValues) {\n return costCalculatorEstimationMutationAsync(\n buildPayload(values, estimationOptions, version),\n );\n }\n\n /**\n * If the selected country has no child regions and has additional fields,\n * set the current region to the country's region slug and fetch the region fields.\n * @param country\n */\n function onCountryChange(country: string) {\n const currentCountry = countries?.find(({ value }) => value === country);\n\n if (\n currentCountry &&\n currentCountry.childRegions.length === 0 &&\n currentCountry.hasAdditionalFields\n ) {\n setSelectedRegion(currentCountry.regionSlug);\n } else {\n setSelectedRegion(undefined);\n }\n setSelectedCountry(currentCountry);\n }\n\n /**\n * Update the selected region and fetch the region fields.\n * @param region\n */\n function onRegionChange(region: string) {\n setSelectedRegion(region);\n }\n\n function onHiringBudgetChange(event: React.ChangeEvent<HTMLInputElement>) {\n setHiringBudget(event.target.value as HiringBudget);\n }\n\n function onChangeCurrency(currency: string) {\n const selectedCurrency = currencies?.find(\n (c) => c.value === currency,\n )?.label;\n setEmployerBillingCurrency(selectedCurrency);\n options?.onCurrencyChange?.(selectedCurrency || '');\n }\n\n const regionField = fieldsJSONSchema.fields.find(\n (field) => field.name === 'region',\n );\n\n if (regionField) {\n const regions =\n selectedCountry?.childRegions.map((region) => ({\n value: region.slug,\n label: region.name,\n })) ?? [];\n regionField.options = regions;\n regionField.isVisible = regions.length > 0;\n regionField.required = regions.length > 0;\n regionField.onChange = onRegionChange;\n regionField.schema =\n regions.length > 0\n ? string()\n .transform((value) => (typeof value === 'string' ? value : ''))\n .required('Region is required')\n : string();\n }\n\n if (currencies) {\n const currencyField = fieldsJSONSchema.fields.find(\n (field) => field.name === 'currency',\n );\n if (currencyField) {\n currencyField.options = currencies;\n currencyField.onChange = onChangeCurrency;\n }\n }\n\n const hiringBudgetField = fieldsJSONSchema.fields.find(\n (field) => field.name === 'hiring_budget',\n );\n if (hiringBudgetField) {\n hiringBudgetField.onChange = onHiringBudgetChange;\n }\n\n if (countries) {\n const countryField = fieldsJSONSchema.fields.find(\n (field) => field.name === 'country',\n );\n if (countryField) {\n countryField.options = countries;\n countryField.onChange = onCountryChange;\n }\n }\n\n const resetForm = () => {\n setSelectedCountry(undefined);\n setSelectedRegion(defaultRegion);\n };\n\n const allFields = [\n ...fieldsJSONSchema.fields.filter((field) => field.name !== 'management'),\n ...(jsonSchemaRegionFields?.fields || []),\n ...fieldsJSONSchema.fields.filter((field) => field.name === 'management'),\n ];\n\n const validationSchema = buildValidationSchema(\n fieldsJSONSchema.fields,\n employerBillingCurrency || 'USD',\n estimationOptions.includeEstimationTitle,\n );\n\n async function handleValidation(values: CostCalculatorEstimationFormValues) {\n let errors: JSFValidationError | null = null;\n\n options?.onValidation?.(values);\n const parsedValues = await parseJSFToValidate(values, allFields);\n\n // 1. validate static fields first using Yup validate function\n try {\n await validationSchema.validate(parsedValues, {\n abortEarly: false,\n });\n errors = {\n formErrors: {},\n yupError: new ValidationError([], values),\n };\n } catch (error) {\n const iterateResult = iterateErrors(error as ValidationError);\n\n errors = {\n // convert the errors to a format that can be used in the form\n formErrors: Object.entries(iterateResult).reduce(\n (acc, [key, value]) => ({ ...acc, [key]: value.message }),\n {},\n ),\n yupError: error as ValidationError,\n };\n }\n\n // 2. validate json schema fields using the handleValidation (from json-schema-form)\n const handleValidationResult =\n jsonSchemaRegionFields?.handleValidation(parsedValues);\n\n // 3. combine the errors from both validations\n const combinedInnerErrors = [\n ...(errors?.yupError.inner || []),\n ...((handleValidationResult as { yupError: ValidationError })?.yupError\n ?.inner || []),\n ];\n const combinedValues = {\n ...(errors?.yupError?.value || {}),\n ...((handleValidationResult as { yupError: ValidationError })?.yupError\n ?.value || {}),\n };\n\n return {\n formErrors: {\n ...(errors?.formErrors || {}),\n ...(handleValidationResult?.formErrors || {}),\n },\n yupError: new ValidationError(combinedInnerErrors, combinedValues),\n };\n }\n\n // WE NEED TO FIX: react-hooks/refs - Cannot access ref value during render\n // oxlint-disable-next-line react-hooks/refs\n return {\n /**\n * Current step state containing the current step and total number of steps\n */\n stepState: {\n current: 0,\n total: 1,\n isLastStep: true,\n },\n /**\n * Array of form fields from the cost calculator schema + dynamic region fields like benefits, age, etc.\n */\n fields: allFields,\n /**\n * Validation schema for the cost calculator form\n */\n validationSchema,\n /**\n * Function to parse form values before submission\n * @param values - Form values to parse\n * @returns Parsed form values\n */\n parseFormValues: async (\n values: CostCalculatorEstimationFormValues,\n ): Promise<CostCalculatorEstimationSubmitValues> => {\n const {\n country,\n region,\n currency,\n salary_converted,\n hiring_budget,\n salary_conversion,\n management,\n estimation_title,\n ...rest\n } = values;\n\n // If the salary has been converted, we take the one the user has inputted\n let salary = values.salary;\n if (salary_converted === 'salary_conversion') {\n salary = salary_conversion;\n }\n\n const jsonSchemaStaticFieldValues = {\n country,\n region,\n salary,\n salary_converted,\n salary_conversion,\n hiring_budget,\n currency,\n management,\n estimation_title,\n };\n\n const parsedStaticFields = await parseJSFToValidate(\n jsonSchemaStaticFieldValues,\n fieldsJSONSchema.fields,\n );\n\n const parsedRegionFields = await parseJSFToValidate(\n rest,\n jsonSchemaRegionFields?.fields || [],\n );\n\n const additionalFields = {\n currency_code: currencies?.find((c) => c.value === currency)?.label,\n };\n\n return {\n ...parsedStaticFields,\n ...parsedRegionFields,\n ...additionalFields,\n } as CostCalculatorEstimationSubmitValues;\n },\n /**\n * Function to handle validation of the cost calculator form\n * @param values - Form values to validate\n * @returns Validation result\n */\n handleValidation,\n /**\n * Whether the cost calculator form is currently being submitted\n */\n isSubmitting: costCalculatorEstimationMutation.isPending,\n /**\n * Whether the cost calculator form is currently loading\n */\n isLoading:\n isLoadingCountries && isLoadingCurrencies && isLoadingRegionFields,\n /**\n * Function to submit the cost calculator form\n */\n onSubmit,\n /**\n * Function to reset the cost calculator form\n */\n resetForm,\n\n /**\n * Currencies data useful to get the currency if you have a currencySlug\n */\n currencies,\n\n /**\n * Fields metadata\n */\n // WE NEED TO FIX: react-hooks/refs - Cannot access ref value during render\n // oxlint-disable-next-line react-hooks/refs\n meta: {\n // WE NEED TO FIX: react-hooks/refs - Cannot access ref value during render\n // oxlint-disable-next-line react-hooks/refs\n fields: fieldsMetaRef.current?.fields,\n },\n };\n};\n"],"mappings":"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","names":["number","object","useCallback","useEffect","useMemo","useRef","useState","string","ValidationError","jsx","defaultEstimationOptions","useStaticSchema","__name","options","createHeadlessForm","jsonSchema","getSalaryTitle","salaryField","hiringBudget","title","useCostCalculator","defaultRegion","defaultCurrency","defaultSalary","estimationOptions","version","fieldsMetaRef","useRef","selectedRegion","setSelectedRegion","useState","selectedCountry","setSelectedCountry","employerBillingCurrency","setEmployerBillingCurrency","setHiringBudget","countries","isLoadingCountries","useCostCalculatorCountries","currencies","isLoadingCurrencies","useCompanyCurrencies","jsonSchemaRegionSlug","jsonSchemaRegionFields","isLoadingRegionFields","useRegionFields","costCalculatorEstimationMutation","useCostCalculatorEstimation","costCalculatorEstimationMutationAsync","mutationToPromise","employeeBillingCurrency","salaryFieldPresentation","getCurrencies","useCallback","shouldSwapOrder","showManagementField","showEstimationTitleField","customFields","useMemo","from","to","salaryTitle","props","SalaryField","FieldSetField","fieldsJSONSchema","useEffect","defaultCountry","value","defaultCurrencyObj","onSubmit","values","buildPayload","onCountryChange","country","currentCountry","onRegionChange","region","onHiringBudgetChange","event","onChangeCurrency","currency","selectedCurrency","regionField","field","regions","string","currencyField","hiringBudgetField","countryField","resetForm","allFields","validationSchema","buildValidationSchema","handleValidation","errors","parsedValues","parseJSFToValidate","ValidationError","error","iterateResult","iterateErrors","acc","key","handleValidationResult","combinedInnerErrors","combinedValues","salary_converted","hiring_budget","salary_conversion","management","estimation_title","rest","salary","parsedStaticFields","parsedRegionFields","additionalFields","c","buildValidationSchema","fields","employerBillingCurrency","includeEstimationTitle","fieldsSchema","fieldsSchemaAcc","field","__name","val","schema","object","number","value","BASE_RATES","formatBenefits","benefits","needle","acc","key","benefitTierSlug","benefitEntry","mapValueToEmployment","estimationOptions","version","managementFee","currencyCode","getSalaryFields","isMarketing","isStandard","useHiringBudget","useEmployerCurrency","buildPayload","values","defaultEstimationOptions","employments","v"]}
|
package/dist/chunk-I363AG3E.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{a as m}from"./chunk-AVIZTG4K.js";import{a as V}from"./chunk-BIL7ERK6.js";import{h as S,i as b}from"./chunk-G2LZFGZA.js";import{a as p}from"./chunk-P37U34EQ.js";import{useState as y,useCallback as l,useMemo as h}from"react";var j=p((R={})=>{let{defaultSchema:P="simple-user-profile",initialValues:n={},onSubmit:f,onError:u}=R,[i,a]=y({selectedSchema:P,submittedResults:[],isLoading:!1,isSubmitting:!1}),[r,c]=y(n),d=h(()=>m[i.selectedSchema]||m["simple-user-profile"],[i.selectedSchema]),t=h(()=>{try{a(e=>({...e,isLoading:!0}));let s=V(d.schema,r);return a(e=>({...e,isLoading:!1})),s}catch(s){throw a(e=>({...e,isLoading:!1})),u?.(s),s}},[d.schema,r,u]),F=l(s=>{a(e=>({...e,selectedSchema:s})),c(n)},[n]),J=l(async s=>{a(e=>({...e,isSubmitting:!0}));try{await f?.(s);let e={success:!0,data:s,timestamp:new Date().toISOString()};return a(o=>({...o,isSubmitting:!1,submittedResults:[e,...o.submittedResults]})),e}catch(e){let o={success:!1,data:s,timestamp:new Date().toISOString()};throw a(g=>({...g,isSubmitting:!1,submittedResults:[o,...g.submittedResults]})),u?.(e),e}},[f,u]),w=l(()=>{c(n)},[n]),L=l(()=>{a(s=>({...s,submittedResults:[]}))},[]),O=l(async s=>{if(!t.fields)return null;let e=await S(s,t.fields,{isPartialValidation:!1});return await t.handleValidation(e)},[t]),I=l(async s=>t.fields?S(s,t.fields,{isPartialValidation:!1}):s,[t]),k=h(()=>b(t.fields,r),[t.fields,r]);return{selectedSchema:i.selectedSchema,isLoading:i.isLoading,isSubmitting:i.isSubmitting,submittedResults:i.submittedResults,fieldValues:r,initialValues:k,currentSchemaData:d,availableSchemas:Object.entries(m).map(([s,e])=>({key:s,name:e.name,description:e.description})),fields:t.fields||[],meta:t.meta,handleSchemaChange:F,handleSubmit:J,handleReset:w,clearResults:L,setFieldValues:c,checkFieldUpdates:c,handleValidation:O,parseFormValues:I}},"useJsonSchemaPlayground");export{j as a};
|
|
2
|
-
//# sourceMappingURL=chunk-I363AG3E.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/flows/JsonSchemaPlayground/hooks.ts"],"sourcesContent":["import { useState, useCallback, useMemo } from 'react';\nimport { FieldValues } from 'react-hook-form';\nimport { createHeadlessForm } from '@/src/common/createHeadlessForm';\nimport {\n getInitialValues,\n parseJSFToValidate,\n} from '@/src/components/form/utils';\nimport { SAMPLE_SCHEMAS, SchemaKey } from './schemas';\nimport {\n JsonSchemaPlaygroundResult,\n JsonSchemaPlaygroundState,\n UseJsonSchemaPlaygroundOptions,\n} from './types';\n\nexport const useJsonSchemaPlayground = (\n options: UseJsonSchemaPlaygroundOptions = {},\n) => {\n const {\n defaultSchema = 'simple-user-profile',\n initialValues: jsonSchemaInitialValues = {},\n onSubmit,\n onError,\n } = options;\n\n const [state, setState] = useState<JsonSchemaPlaygroundState>({\n selectedSchema: defaultSchema,\n submittedResults: [],\n isLoading: false,\n isSubmitting: false,\n });\n\n const [fieldValues, setFieldValues] = useState<FieldValues>(\n jsonSchemaInitialValues,\n );\n\n // Get current schema\n const currentSchemaData = useMemo(() => {\n return (\n SAMPLE_SCHEMAS[state.selectedSchema as SchemaKey] ||\n SAMPLE_SCHEMAS['simple-user-profile']\n );\n }, [state.selectedSchema]);\n\n // Create headless form from current schema\n const headlessForm = useMemo(() => {\n try {\n setState((prev) => ({ ...prev, isLoading: true }));\n const form = createHeadlessForm(currentSchemaData.schema, fieldValues);\n setState((prev) => ({ ...prev, isLoading: false }));\n return form;\n } catch (error) {\n setState((prev) => ({ ...prev, isLoading: false }));\n onError?.(error);\n throw error;\n }\n }, [currentSchemaData.schema, fieldValues, onError]);\n\n // Handle schema selection\n const handleSchemaChange = useCallback(\n (schemaKey: string) => {\n setState((prev) => ({ ...prev, selectedSchema: schemaKey }));\n setFieldValues(jsonSchemaInitialValues);\n },\n [jsonSchemaInitialValues],\n );\n\n // Handle form submission\n const handleSubmit = useCallback(\n async (values: FieldValues) => {\n setState((prev) => ({ ...prev, isSubmitting: true }));\n\n try {\n await onSubmit?.(values);\n\n const result: JsonSchemaPlaygroundResult = {\n success: true,\n data: values,\n timestamp: new Date().toISOString(),\n };\n\n setState((prev) => ({\n ...prev,\n isSubmitting: false,\n submittedResults: [result, ...prev.submittedResults],\n }));\n\n return result;\n } catch (error) {\n const result: JsonSchemaPlaygroundResult = {\n success: false,\n data: values,\n timestamp: new Date().toISOString(),\n };\n\n setState((prev) => ({\n ...prev,\n isSubmitting: false,\n submittedResults: [result, ...prev.submittedResults],\n }));\n\n onError?.(error);\n throw error;\n }\n },\n [onSubmit, onError],\n );\n\n // Handle form reset\n const handleReset = useCallback(() => {\n setFieldValues(jsonSchemaInitialValues);\n }, [jsonSchemaInitialValues]);\n\n // Clear results\n const clearResults = useCallback(() => {\n setState((prev) => ({ ...prev, submittedResults: [] }));\n }, []);\n\n // Validation functions\n const handleValidation = useCallback(\n async (values: FieldValues) => {\n if (!headlessForm.fields) {\n return null;\n }\n const parsedValues = await parseJSFToValidate(\n values,\n headlessForm.fields,\n { isPartialValidation: false },\n );\n const result = await headlessForm.handleValidation(parsedValues);\n return result;\n },\n [headlessForm],\n );\n\n const parseFormValues = useCallback(\n async (values: FieldValues): Promise<Record<string, unknown>> => {\n if (!headlessForm.fields) return values;\n return parseJSFToValidate(values, headlessForm.fields, {\n isPartialValidation: false,\n });\n },\n [headlessForm],\n );\n\n const initialValues = useMemo(() => {\n return getInitialValues(headlessForm.fields, fieldValues);\n }, [headlessForm.fields, fieldValues]);\n\n return {\n // State\n selectedSchema: state.selectedSchema,\n isLoading: state.isLoading,\n isSubmitting: state.isSubmitting,\n submittedResults: state.submittedResults,\n fieldValues,\n initialValues,\n\n // Schema data\n currentSchemaData,\n availableSchemas: Object.entries(SAMPLE_SCHEMAS).map(([key, value]) => ({\n key,\n name: value.name,\n description: value.description,\n })),\n\n // Form data from headless form\n fields: headlessForm.fields || [],\n meta: headlessForm.meta,\n\n // Actions\n handleSchemaChange,\n handleSubmit,\n handleReset,\n clearResults,\n setFieldValues,\n\n /**\n * Function to update the current form field values\n * @param values - New form values to set\n */\n checkFieldUpdates: setFieldValues,\n\n // Validation\n handleValidation,\n parseFormValues,\n };\n};\n"],"mappings":"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","names":["useState","useCallback","useMemo","useJsonSchemaPlayground","__name","options","defaultSchema","jsonSchemaInitialValues","onSubmit","onError","state","setState","useState","fieldValues","setFieldValues","currentSchemaData","useMemo","SAMPLE_SCHEMAS","headlessForm","prev","form","createHeadlessForm","error","handleSchemaChange","useCallback","schemaKey","handleSubmit","values","result","handleReset","clearResults","handleValidation","parsedValues","parseJSFToValidate","parseFormValues","initialValues","getInitialValues","key","value"]}
|
package/dist/chunk-J2ARI3NQ.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{b as i}from"./chunk-KFYWUBRS.js";import{f as t}from"./chunk-Y3CJRZLA.js";import{a as n}from"./chunk-P37U34EQ.js";import{useEffect as c,useRef as d}from"react";import f from"fast-deep-equal";function U({handleValidation:a,defaultValues:o,checkFieldUpdates:m}){let u=i(a),r=d(o),s=t({resolver:u,defaultValues:o,shouldUnregister:!1,mode:"onBlur"});return c(()=>{let l=s?.watch(e=>{!f(e,r.current)&&(m(e),r.current=JSON.parse(JSON.stringify(e)))});return()=>l?.unsubscribe()},[]),s}n(U,"useJSONSchemaForm");export{U as a};
|
|
2
|
-
//# sourceMappingURL=chunk-J2ARI3NQ.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/form/useJSONSchemaForm.tsx"],"sourcesContent":["import { FieldValues, useForm, UseFormReturn } from 'react-hook-form';\nimport { useEffect, useRef } from 'react';\nimport equal from 'fast-deep-equal';\nimport { useJsonSchemasValidationFormResolver } from '@/src/components/form/validationResolver';\nimport { $TSFixMe } from '@/src/types/remoteFlows';\nimport { ValidationResult } from '@remoteoss/remote-json-schema-form-kit';\n\ntype UseJsonSchemaFormOptions = {\n handleValidation: (values: FieldValues) => Promise<ValidationResult | null>;\n defaultValues: Record<string, unknown>;\n checkFieldUpdates: (values: FieldValues) => void;\n};\n\nexport function useJSONSchemaForm({\n handleValidation,\n defaultValues,\n checkFieldUpdates,\n}: UseJsonSchemaFormOptions): UseFormReturn<$TSFixMe> {\n const resolver = useJsonSchemasValidationFormResolver(handleValidation);\n const prevValuesRef = useRef(defaultValues);\n\n const form = useForm({\n resolver,\n defaultValues,\n shouldUnregister: false,\n mode: 'onBlur',\n });\n // Watch form changes and trigger checkFieldUpdates\n useEffect(() => {\n const subscription = form?.watch((values) => {\n const hasChanged = !equal(values, prevValuesRef.current);\n if (hasChanged) {\n checkFieldUpdates(values);\n prevValuesRef.current = JSON.parse(JSON.stringify(values));\n }\n });\n return () => subscription?.unsubscribe();\n // oxlint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return form;\n}\n"],"mappings":"wHACA,OAAS,aAAAA,EAAW,UAAAC,MAAc,QAClC,OAAOC,MAAW,kBAWX,SAASC,EAAkB,CAChC,iBAAAC,EACA,cAAAC,EACA,kBAAAC,CACF,EAAsD,CACpD,IAAMC,EAAWC,EAAqCJ,CAAgB,EAChEK,EAAgBC,EAAOL,CAAa,EAEpCM,EAAOC,EAAQ,CACnB,SAAAL,EACA,cAAAF,EACA,iBAAkB,GAClB,KAAM,QACR,CAAC,EAED,OAAAQ,EAAU,IAAM,CACd,IAAMC,EAAeH,GAAM,MAAOI,GAAW,CACxB,CAACC,EAAMD,EAAQN,EAAc,OAAO,IAErDH,EAAkBS,CAAM,EACxBN,EAAc,QAAU,KAAK,MAAM,KAAK,UAAUM,CAAM,CAAC,EAE7D,CAAC,EACD,MAAO,IAAMD,GAAc,YAAY,CAEzC,EAAG,CAAC,CAAC,EAEEH,CACT,CA5BgBM,EAAAd,EAAA","names":["useEffect","useRef","equal","useJSONSchemaForm","handleValidation","defaultValues","checkFieldUpdates","resolver","useJsonSchemasValidationFormResolver","prevValuesRef","useRef","form","useForm","useEffect","subscription","values","equal","__name"]}
|