@remoteoss/remote-flows 1.24.0 → 1.25.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/README.md +0 -4
- package/dist/ButtonDefault-A5JWQEZF.js +2 -0
- package/dist/CheckboxFieldDefault-2YCVL3MM.js +2 -0
- package/dist/CountryFieldDefault-IY664WKC.js +2 -0
- package/dist/DatePickerFieldDefault-UZ3W2B3R.js +2 -0
- package/dist/DrawerDefault-HQGPEMMY.js +2 -0
- package/dist/EmailFieldDefault-6GQMGBQV.js +2 -0
- package/dist/FieldsetToggleButtonDefault-NQCXWGRK.js +2 -0
- package/dist/FileUploadFieldDefault-L3LOK4A5.js +2 -0
- package/dist/MultiSelectFieldDefault-OE5NHM6A.js +2 -0
- package/dist/NumberFieldDefault-MV3FSZOG.js +2 -0
- package/dist/RadioGroupFieldDefault-J3ESFNPW.js +2 -0
- package/dist/SelectFieldDefault-F2MAJW7S.js +2 -0
- package/dist/StatementDefault-FTAOOAL4.js +2 -0
- package/dist/TableFieldDefault-LXHWAWPG.js +2 -0
- package/dist/TelFieldDefault-EHHOHIQD.js +2 -0
- package/dist/TextAreaFieldDefault-VXPH3YGT.js +2 -0
- package/dist/TextFieldDefault-QWGENVEE.js +2 -0
- package/dist/WorkScheduleFieldDefault-SJSAWRYV.js +2 -0
- package/dist/ZendeskDrawerDefault-SUUZWWY2.js +2 -0
- package/dist/ZendeskDrawerDefault-SUUZWWY2.js.map +1 -0
- package/dist/{chunk-L5DII4MV.js → chunk-237RQGWE.js} +2 -2
- package/dist/{chunk-6JTHV4QS.js → chunk-2Y7QAG2Q.js} +2 -2
- package/dist/{chunk-BNQFPYNQ.js → chunk-32M6SNGV.js} +2 -2
- package/dist/{chunk-T4QDKI7V.js → chunk-3BEEU2N4.js} +2 -2
- package/dist/{chunk-W5YNJOSB.js → chunk-3HAKPYWK.js} +2 -2
- package/dist/{chunk-FAIEJW57.js → chunk-3HZOTQHD.js} +2 -2
- package/dist/chunk-3HZOTQHD.js.map +1 -0
- package/dist/{chunk-OELREIVJ.js → chunk-3VALWCZ5.js} +2 -2
- package/dist/{chunk-547UHEDI.js → chunk-423VHE7M.js} +2 -2
- package/dist/{chunk-56UXOD27.js → chunk-43MCQDBU.js} +2 -2
- package/dist/{chunk-WRRTZ2AL.js → chunk-4Z2DLHAT.js} +2 -2
- package/dist/chunk-552XBDTE.js +2 -0
- package/dist/chunk-552XBDTE.js.map +1 -0
- package/dist/{chunk-MSBCYMSH.js → chunk-5BGETBLF.js} +2 -2
- package/dist/{chunk-2V4CTIAG.js → chunk-5EYREHAZ.js} +2 -2
- package/dist/{chunk-PZUCONZ4.js → chunk-5FOI6SK4.js} +2 -2
- package/dist/{chunk-S6IMK3LL.js → chunk-5ISPVKB4.js} +2 -2
- package/dist/{chunk-D7W4VBSV.js → chunk-5MJH36G3.js} +2 -2
- package/dist/chunk-5XNFVJNM.js +2 -0
- package/dist/chunk-5XNFVJNM.js.map +1 -0
- package/dist/chunk-626FTNKA.js +2 -0
- package/dist/chunk-626FTNKA.js.map +1 -0
- package/dist/{chunk-VFB3RR5I.js → chunk-65KMTRFL.js} +2 -2
- package/dist/{chunk-26IIK5U2.js → chunk-6PRPMEWS.js} +2 -2
- package/dist/{chunk-L3LOATSG.js → chunk-74U3UMRA.js} +2 -2
- package/dist/chunk-766AUWUO.js +2 -0
- package/dist/chunk-766AUWUO.js.map +1 -0
- package/dist/{chunk-T2KDFAAY.js → chunk-7NZH3TF3.js} +2 -2
- package/dist/{chunk-B2BH4JUO.js → chunk-7WV3GBEI.js} +2 -2
- package/dist/{chunk-H5QXOIKS.js → chunk-A3NABWR7.js} +2 -2
- package/dist/{chunk-SPQM2TCX.js → chunk-AEKGVWE5.js} +2 -2
- package/dist/{chunk-CKVI2UDU.js → chunk-AGZHFGBR.js} +2 -2
- package/dist/{chunk-BAMGHBLT.js → chunk-AVJEDFND.js} +2 -2
- package/dist/{chunk-RVADUHPA.js → chunk-BTGWCFHJ.js} +2 -2
- package/dist/chunk-CHRRWZHW.js +2 -0
- package/dist/chunk-CHRRWZHW.js.map +1 -0
- package/dist/{chunk-J7MCWMDD.js → chunk-COZWEBRG.js} +2 -2
- package/dist/chunk-D3EUFZXJ.js +2 -0
- package/dist/{chunk-M4TBX2FU.js.map → chunk-D3EUFZXJ.js.map} +1 -1
- package/dist/{chunk-IORVZBRC.js → chunk-DA3D7BEQ.js} +2 -2
- package/dist/{chunk-IORVZBRC.js.map → chunk-DA3D7BEQ.js.map} +1 -1
- package/dist/{chunk-7G5JSUZU.js → chunk-DJOLLEOJ.js} +2 -2
- package/dist/{chunk-MP3VDCI7.js → chunk-DJYO6IIO.js} +2 -2
- package/dist/{chunk-42R2H2DW.js → chunk-DN6BXTAC.js} +1 -1
- package/dist/chunk-DN6BXTAC.js.map +1 -0
- package/dist/{chunk-6ABCDOFB.js → chunk-DXHWEBVC.js} +2 -2
- package/dist/{chunk-IFX5XLPZ.js → chunk-E37JLKX4.js} +2 -2
- package/dist/chunk-E3HFSANG.js +2 -0
- package/dist/{chunk-BK44KHBJ.js.map → chunk-E3HFSANG.js.map} +1 -1
- package/dist/chunk-EARN6G25.js +2 -0
- package/dist/chunk-EARN6G25.js.map +1 -0
- package/dist/{chunk-RYVRMH6C.js → chunk-EJCCWBLQ.js} +2 -2
- package/dist/chunk-EVJ77XIZ.js +2 -0
- package/dist/{chunk-ZO34QFKD.js.map → chunk-EVJ77XIZ.js.map} +1 -1
- package/dist/{chunk-VB6KFDBL.js → chunk-FHGQELT7.js} +2 -2
- package/dist/{chunk-VRW22LTU.js → chunk-FUOTJMAO.js} +2 -2
- package/dist/{chunk-MGZWMJMP.js → chunk-FYBXLFMI.js} +2 -2
- package/dist/{chunk-O6H66UM2.js → chunk-FZVUO3UU.js} +2 -2
- package/dist/{chunk-RGRCYSYE.js → chunk-GBQPG5OU.js} +2 -2
- package/dist/{chunk-3BBQDNZD.js → chunk-GPXETIKG.js} +2 -2
- package/dist/{chunk-HYDNZQOV.js → chunk-HLR7IUW7.js} +2 -2
- package/dist/{chunk-YUJBCOLO.js → chunk-IFD3RW53.js} +2 -2
- package/dist/chunk-IJDBUKEM.js +2 -0
- package/dist/chunk-IJDBUKEM.js.map +1 -0
- package/dist/{chunk-6MJVXTLI.js → chunk-IKSPEKDA.js} +2 -2
- package/dist/chunk-JHH66SSM.js +2 -0
- package/dist/chunk-JHH66SSM.js.map +1 -0
- package/dist/{chunk-TNN3W5TU.js → chunk-JJDAJQG4.js} +2 -2
- package/dist/{chunk-UMVA4SIV.js → chunk-JOHNIKN6.js} +2 -2
- package/dist/chunk-K5XSOKKX.js +2 -0
- package/dist/{chunk-53KG3SOU.js.map → chunk-K5XSOKKX.js.map} +1 -1
- package/dist/chunk-KFYWUBRS.js +2 -0
- package/dist/{chunk-LNV36S6D.js.map → chunk-KFYWUBRS.js.map} +1 -1
- package/dist/chunk-KQUKUR4T.js +2 -0
- package/dist/chunk-KQUKUR4T.js.map +1 -0
- package/dist/{chunk-TQXCLXWH.js → chunk-L3XWJ35V.js} +2 -2
- package/dist/{chunk-4IE7XN74.js → chunk-LBGZYTNR.js} +2 -2
- package/dist/{chunk-KXT6ACFL.js → chunk-LBNA4RGS.js} +2 -2
- package/dist/{chunk-NLBQ7CZC.js → chunk-LRPDJWIO.js} +2 -2
- package/dist/{chunk-AR5X2YWE.js → chunk-LZL5KK3N.js} +2 -2
- package/dist/{chunk-BYDQHL6O.js → chunk-MEOD4UGO.js} +2 -2
- package/dist/{chunk-WQVZXTW3.js → chunk-MOM5PCKI.js} +2 -2
- package/dist/{chunk-EP6FL2L3.js → chunk-N4TAXXWW.js} +2 -2
- package/dist/{chunk-NAF6LRSS.js → chunk-NZ7BAZNH.js} +2 -2
- package/dist/{chunk-SNBAM7SA.js → chunk-OABRM5LK.js} +2 -2
- package/dist/{chunk-WD2JGIDK.js → chunk-OOEKN64P.js} +2 -2
- package/dist/{chunk-XRN6752K.js → chunk-OORPUQ3N.js} +2 -2
- package/dist/{chunk-3LCASKDS.js → chunk-OOSCL4WD.js} +2 -2
- package/dist/{chunk-NNFWLL7F.js → chunk-PSBC73OL.js} +2 -2
- package/dist/{chunk-IYL6TSUF.js → chunk-Q6NTGZUW.js} +2 -2
- package/dist/{chunk-NUID2T57.js → chunk-QEIHXZIK.js} +2 -2
- package/dist/{chunk-NUID2T57.js.map → chunk-QEIHXZIK.js.map} +1 -1
- package/dist/{chunk-3DMWQJ5W.js → chunk-QMPXBDDO.js} +2 -2
- package/dist/chunk-R3HLTYHX.js +2 -0
- package/dist/chunk-R3HLTYHX.js.map +1 -0
- package/dist/{chunk-AS6KFUXS.js → chunk-R3NDFTIM.js} +2 -2
- package/dist/chunk-R47Q7R6C.js +8 -0
- package/dist/chunk-R47Q7R6C.js.map +1 -0
- package/dist/{chunk-CHHHYLCB.js → chunk-R4F5WRKC.js} +2 -2
- package/dist/{chunk-NOTLTHHZ.js → chunk-R4PLUUI3.js} +2 -2
- package/dist/chunk-RAVJ3LMO.js +2 -0
- package/dist/{chunk-ECGWCDC3.js.map → chunk-RAVJ3LMO.js.map} +1 -1
- package/dist/{chunk-AYC6DTFV.js → chunk-RWMNB4RJ.js} +2 -2
- package/dist/chunk-RXNDKUY6.js +2 -0
- package/dist/chunk-RXNDKUY6.js.map +1 -0
- package/dist/{chunk-NAMR4DA5.js → chunk-S3YIFNST.js} +2 -2
- package/dist/{chunk-7ZFZYZSP.js → chunk-S62HZDF7.js} +2 -2
- package/dist/{chunk-CS5TJWQM.js → chunk-S6MU4NHQ.js} +2 -2
- package/dist/{chunk-PNEB74RP.js → chunk-SHXQGRNL.js} +2 -2
- package/dist/{chunk-6ZHKAS7X.js → chunk-SSBGIR74.js} +2 -2
- package/dist/{chunk-6ZHKAS7X.js.map → chunk-SSBGIR74.js.map} +1 -1
- package/dist/{chunk-YIOLMWB5.js → chunk-TFJOJCCS.js} +2 -2
- package/dist/{chunk-VPSESR6G.js → chunk-TPH6YQRJ.js} +2 -2
- package/dist/{chunk-OWUINMZP.js → chunk-U7S4TUFV.js} +2 -2
- package/dist/{chunk-SNECOPBD.js → chunk-UB5WD4YM.js} +2 -2
- package/dist/{chunk-R4X2WQXX.js → chunk-UFLWSKNE.js} +2 -2
- package/dist/chunk-UITO344H.js +2 -0
- package/dist/chunk-UITO344H.js.map +1 -0
- package/dist/{chunk-2JVZYQ6Z.js → chunk-UJJ5576U.js} +2 -2
- package/dist/{chunk-Z7J6NJY2.js → chunk-VJMCAVOL.js} +2 -2
- package/dist/chunk-VJNTRMOS.js +2 -0
- package/dist/chunk-VJNTRMOS.js.map +1 -0
- package/dist/{chunk-X3PUZFYX.js → chunk-VSBNYQZM.js} +2 -2
- package/dist/{chunk-UNKCOOE4.js → chunk-WI6ZYN4S.js} +2 -2
- package/dist/{chunk-DJPCJ3YR.js → chunk-WVND2FCE.js} +2 -2
- package/dist/{chunk-3C6N7DK6.js → chunk-X5TMQDWS.js} +2 -2
- package/dist/{chunk-D7CBR52B.js → chunk-XULW2ME7.js} +2 -2
- package/dist/{chunk-HIFEVMKP.js → chunk-Y4P3ZYQK.js} +2 -2
- package/dist/{chunk-N4IPXHFM.js → chunk-YNMQONDL.js} +2 -2
- package/dist/chunk-YNMQONDL.js.map +1 -0
- package/dist/{chunk-TVCIAQTC.js → chunk-YQMALPDQ.js} +2 -2
- package/dist/{chunk-YWOJ4NKF.js → chunk-YRAIYQ2K.js} +2 -2
- package/dist/{chunk-AXV7YMZ3.js → chunk-YTWEXSYT.js} +2 -2
- package/dist/chunk-YZKXKNDS.js +2 -0
- package/dist/chunk-YZKXKNDS.js.map +1 -0
- package/dist/chunk-ZAQUO2SM.js +2 -0
- package/dist/chunk-ZAQUO2SM.js.map +1 -0
- package/dist/{chunk-RAH453TV.js → chunk-ZBJ4VEDO.js} +2 -2
- package/dist/chunk-ZR6AKRA3.js +2 -0
- package/dist/{chunk-EIVCBH53.js.map → chunk-ZR6AKRA3.js.map} +1 -1
- package/dist/{chunk-DXIJUMLU.js → chunk-ZZPQGX7X.js} +2 -2
- package/dist/default-components.d.ts +2 -3
- package/dist/default-components.js +1 -1
- package/dist/default-components.js.map +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 -4
- 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 -4
- package/dist/flows/ContractAmendment/hooks.d.ts +3 -4
- package/dist/flows/ContractAmendment/hooks.js +1 -1
- package/dist/flows/ContractAmendment/index.d.ts +3 -4
- package/dist/flows/ContractAmendment/index.js +1 -1
- package/dist/flows/ContractAmendment/types.d.ts +2 -3
- package/dist/flows/ContractAmendment/utils.d.ts +2 -3
- package/dist/flows/ContractAmendment/utils.js +1 -1
- package/dist/flows/ContractorOnboarding/ContractorOnboarding.d.ts +5 -6
- package/dist/flows/ContractorOnboarding/ContractorOnboarding.js +1 -1
- package/dist/flows/ContractorOnboarding/api.d.ts +3 -4
- package/dist/flows/ContractorOnboarding/api.js +1 -1
- package/dist/flows/ContractorOnboarding/components/BasicInformationStep.d.ts +4 -5
- package/dist/flows/ContractorOnboarding/components/BasicInformationStep.js +1 -1
- package/dist/flows/ContractorOnboarding/components/ContractDetailsStep.d.ts +5 -6
- package/dist/flows/ContractorOnboarding/components/ContractDetailsStep.js +1 -1
- package/dist/flows/ContractorOnboarding/components/ContractPreviewHeader.d.ts +2 -3
- package/dist/flows/ContractorOnboarding/components/ContractPreviewStatement.d.ts +2 -3
- package/dist/flows/ContractorOnboarding/components/ContractPreviewStatement.js +1 -1
- package/dist/flows/ContractorOnboarding/components/ContractPreviewStep.d.ts +5 -6
- package/dist/flows/ContractorOnboarding/components/ContractPreviewStep.js +1 -1
- package/dist/flows/ContractorOnboarding/components/ContractorOnboardingForm.d.ts +5 -6
- package/dist/flows/ContractorOnboarding/components/ContractorOnboardingForm.js +1 -1
- package/dist/flows/ContractorOnboarding/components/EligibilityQuestionnaireStep.d.ts +5 -6
- package/dist/flows/ContractorOnboarding/components/EligibilityQuestionnaireStep.js +1 -1
- package/dist/flows/ContractorOnboarding/components/OnboardingInvite.d.ts +3 -4
- package/dist/flows/ContractorOnboarding/components/OnboardingInvite.js +1 -1
- package/dist/flows/ContractorOnboarding/components/PricingPlan.d.ts +5 -6
- package/dist/flows/ContractorOnboarding/components/PricingPlan.js +1 -1
- package/dist/flows/ContractorOnboarding/components/SaveDraftButton.d.ts +3 -4
- package/dist/flows/ContractorOnboarding/components/SelectCountryStep.d.ts +4 -5
- 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 +6 -7
- package/dist/flows/ContractorOnboarding/hooks.d.ts +5 -6
- package/dist/flows/ContractorOnboarding/hooks.js +1 -1
- package/dist/flows/ContractorOnboarding/index.d.ts +5 -6
- package/dist/flows/ContractorOnboarding/index.js +1 -1
- package/dist/flows/ContractorOnboarding/jsfModify.d.ts +5 -6
- package/dist/flows/ContractorOnboarding/jsfModify.js +1 -1
- package/dist/flows/ContractorOnboarding/types.d.ts +5 -6
- package/dist/flows/ContractorOnboarding/utils.d.ts +4 -5
- package/dist/flows/CostCalculator/CostCalculatorFlow.d.ts +3 -4
- package/dist/flows/CostCalculator/CostCalculatorFlow.js +1 -1
- package/dist/flows/CostCalculator/CostCalculatorForm.d.ts +3 -4
- 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 +2 -3
- package/dist/flows/CostCalculator/EstimationResults/EstimationResults.js +1 -1
- package/dist/flows/CostCalculator/SummaryResults/SummaryResults.d.ts +2 -3
- package/dist/flows/CostCalculator/SummaryResults/SummaryResults.js +1 -1
- package/dist/flows/CostCalculator/api.d.ts +2 -3
- package/dist/flows/CostCalculator/api.js +1 -1
- package/dist/flows/CostCalculator/components/SalaryField.d.ts +2 -3
- package/dist/flows/CostCalculator/components/SalaryField.js +1 -1
- package/dist/flows/CostCalculator/context.d.ts +3 -4
- package/dist/flows/CostCalculator/hooks.d.ts +3 -4
- package/dist/flows/CostCalculator/hooks.js +1 -1
- package/dist/flows/CostCalculator/index.d.ts +3 -4
- package/dist/flows/CostCalculator/index.js +1 -1
- package/dist/flows/CostCalculator/types.d.ts +2 -3
- package/dist/flows/CostCalculator/utils.d.ts +3 -4
- package/dist/flows/CostCalculator/utils.js +1 -1
- package/dist/flows/CreateCompany/CreateCompany.d.ts +4 -5
- package/dist/flows/CreateCompany/CreateCompany.js +1 -1
- package/dist/flows/CreateCompany/api.d.ts +2 -3
- package/dist/flows/CreateCompany/api.js +1 -1
- package/dist/flows/CreateCompany/components/AddressDetailsStep.d.ts +4 -5
- package/dist/flows/CreateCompany/components/AddressDetailsStep.js +1 -1
- package/dist/flows/CreateCompany/components/CompanyBasicInformationStep.d.ts +4 -5
- package/dist/flows/CreateCompany/components/CompanyBasicInformationStep.js +1 -1
- package/dist/flows/CreateCompany/components/CreateCompanyForm.d.ts +2 -3
- package/dist/flows/CreateCompany/components/CreateCompanyForm.js +1 -1
- package/dist/flows/CreateCompany/context.d.ts +4 -5
- package/dist/flows/CreateCompany/hooks.d.ts +4 -5
- package/dist/flows/CreateCompany/hooks.js +1 -1
- package/dist/flows/CreateCompany/index.d.ts +4 -5
- package/dist/flows/CreateCompany/index.js +1 -1
- package/dist/flows/CreateCompany/types.d.ts +4 -5
- package/dist/flows/Onboarding/OnboardingFlow.d.ts +4 -5
- package/dist/flows/Onboarding/OnboardingFlow.js +1 -1
- package/dist/flows/Onboarding/api.d.ts +5 -9
- package/dist/flows/Onboarding/api.js +1 -1
- package/dist/flows/Onboarding/components/AnnualGrossSalary.d.ts +2 -3
- package/dist/flows/Onboarding/components/AnnualGrossSalary.js +1 -1
- package/dist/flows/Onboarding/components/BasicInformationStep.d.ts +4 -5
- package/dist/flows/Onboarding/components/BasicInformationStep.js +1 -1
- package/dist/flows/Onboarding/components/BenefitsStep.d.ts +4 -5
- package/dist/flows/Onboarding/components/BenefitsStep.js +1 -1
- package/dist/flows/Onboarding/components/ContractDetailsStep.d.ts +4 -5
- package/dist/flows/Onboarding/components/ContractDetailsStep.js +1 -1
- package/dist/flows/Onboarding/components/OnboardingForm.d.ts +4 -5
- package/dist/flows/Onboarding/components/OnboardingForm.js +1 -1
- package/dist/flows/Onboarding/components/OnboardingInvite.d.ts +3 -4
- package/dist/flows/Onboarding/components/OnboardingInvite.js +1 -1
- package/dist/flows/Onboarding/components/ReviewStep.d.ts +4 -5
- package/dist/flows/Onboarding/components/SaveDraftButton.d.ts +3 -4
- package/dist/flows/Onboarding/components/SelectCountryStep.d.ts +4 -5
- package/dist/flows/Onboarding/components/SelectCountryStep.js +1 -1
- package/dist/flows/Onboarding/context.d.ts +4 -5
- package/dist/flows/Onboarding/hooks.d.ts +4 -5
- package/dist/flows/Onboarding/hooks.js +1 -1
- package/dist/flows/Onboarding/index.d.ts +4 -5
- package/dist/flows/Onboarding/index.js +1 -1
- package/dist/flows/Onboarding/types.d.ts +4 -5
- package/dist/flows/Onboarding/utils.d.ts +4 -5
- package/dist/flows/Termination/AdditionalDetailsForm.d.ts +4 -5
- package/dist/flows/Termination/AdditionalDetailsForm.js +1 -1
- package/dist/flows/Termination/EmployeeComunicationForm.d.ts +4 -5
- package/dist/flows/Termination/EmployeeComunicationForm.js +1 -1
- package/dist/flows/Termination/PaidTimeOffForm.d.ts +4 -5
- package/dist/flows/Termination/PaidTimeOffForm.js +1 -1
- package/dist/flows/Termination/TerminationDetailsForm.d.ts +4 -5
- package/dist/flows/Termination/TerminationDetailsForm.js +1 -1
- package/dist/flows/Termination/TerminationFlow.d.ts +4 -5
- package/dist/flows/Termination/TerminationFlow.js +1 -1
- package/dist/flows/Termination/TerminationForm.d.ts +4 -5
- package/dist/flows/Termination/TerminationForm.js +1 -1
- package/dist/flows/Termination/api.d.ts +5 -6
- 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 -7
- package/dist/flows/Termination/components/PaidTimeOff/PaidTimeOff.js +1 -1
- package/dist/flows/Termination/components/PaidTimeOff/PaidTimeOffContainer.d.ts +6 -7
- package/dist/flows/Termination/components/PaidTimeOff/PaidTimeOffContainer.js +1 -1
- package/dist/flows/Termination/components/PaidTimeOff/types.d.ts +6 -7
- 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 -5
- package/dist/flows/Termination/hooks.d.ts +4 -5
- package/dist/flows/Termination/hooks.js +1 -1
- package/dist/flows/Termination/index.d.ts +6 -7
- package/dist/flows/Termination/index.js +1 -1
- package/dist/flows/Termination/json-schemas/schema.d.ts +7 -8
- package/dist/flows/Termination/json-schemas/schema.js +1 -1
- package/dist/flows/Termination/types.d.ts +4 -5
- package/dist/flows/Termination/utils.d.ts +4 -5
- package/dist/flows/Termination/utils.js +1 -1
- package/dist/flows/types.d.ts +2 -3
- package/dist/flows/utils.d.ts +6 -2
- package/dist/flows/utils.js +1 -1
- package/dist/index.css +2 -2
- package/dist/index.css.map +1 -1
- package/dist/index.d.ts +11 -12
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/internals.d.ts +6 -7
- package/dist/internals.js +1 -1
- package/dist/{mutations-BsydWn3-.d.ts → mutations-k1bkfjOU.d.ts} +1 -1
- package/dist/{remoteFlows-BVt9wH8Z.d.ts → remoteFlows-CizrXXw-.d.ts} +32 -4
- package/dist/styles.css +2 -2
- package/dist/styles.css.map +1 -1
- package/dist/{types-C0ri3b3L.d.ts → types-CRnEmzMD.d.ts} +1 -1
- package/dist/{types-BUI5G3ML.d.ts → types-Cg4eblxv.d.ts} +6 -6
- package/dist/{types-C0m9mu0v.d.ts → types-DWSLcaDI.d.ts} +3 -3
- package/dist/{types-uW0BsP56.d.ts → types-DoYYKUID.d.ts} +3 -3
- package/dist/{types-BfQMv-8p.d.ts → types-VJHlrVxd.d.ts} +2 -2
- package/dist/{types.gen-Oz2Tvvr6.d.ts → types.gen-Dgw1W-SB.d.ts} +74 -21
- package/dist/{utils-Db2G1Kxo.d.ts → utils-DaoVOrzw.d.ts} +1 -1
- package/package.json +35 -41
- package/dist/ButtonDefault-2YV2Z474.js +0 -2
- package/dist/CheckboxFieldDefault-XSBJF4HQ.js +0 -2
- package/dist/CountryFieldDefault-K5X6MFP3.js +0 -2
- package/dist/DatePickerFieldDefault-G6FWA64N.js +0 -2
- package/dist/DrawerDefault-AAUS7T5W.js +0 -2
- package/dist/EmailFieldDefault-TFQ5SQVC.js +0 -2
- package/dist/FieldsetToggleButtonDefault-MFLN2WWT.js +0 -2
- package/dist/FileUploadFieldDefault-7ETO2SEZ.js +0 -2
- package/dist/MultiSelectFieldDefault-5TL5SL7W.js +0 -2
- package/dist/NumberFieldDefault-L7J22NRQ.js +0 -2
- package/dist/RadioGroupFieldDefault-XSPBKOS6.js +0 -2
- package/dist/SelectFieldDefault-AT6LLZNX.js +0 -2
- package/dist/StatementDefault-DORMITL7.js +0 -2
- package/dist/TableFieldDefault-URJVK7YR.js +0 -2
- package/dist/TextAreaFieldDefault-2TV3WHKH.js +0 -2
- package/dist/TextFieldDefault-2GEILZPU.js +0 -2
- package/dist/WorkScheduleFieldDefault-XH4AEXSM.js +0 -2
- package/dist/ZendeskDrawerDefault-A5PVWI4R.js +0 -2
- package/dist/chunk-3NESYBEJ.js +0 -2
- package/dist/chunk-3NESYBEJ.js.map +0 -1
- package/dist/chunk-42R2H2DW.js.map +0 -1
- package/dist/chunk-53KG3SOU.js +0 -2
- package/dist/chunk-5CFU6XTU.js +0 -2
- package/dist/chunk-5CFU6XTU.js.map +0 -1
- package/dist/chunk-6H4634RG.js +0 -2
- package/dist/chunk-6H4634RG.js.map +0 -1
- package/dist/chunk-BK44KHBJ.js +0 -2
- package/dist/chunk-CWAFRJAQ.js +0 -2
- package/dist/chunk-CWAFRJAQ.js.map +0 -1
- package/dist/chunk-D5AO6SOM.js +0 -2
- package/dist/chunk-D5AO6SOM.js.map +0 -1
- package/dist/chunk-ECGWCDC3.js +0 -2
- package/dist/chunk-EIVCBH53.js +0 -2
- package/dist/chunk-FAIEJW57.js.map +0 -1
- package/dist/chunk-G3HUFVSG.js +0 -2
- package/dist/chunk-G3HUFVSG.js.map +0 -1
- package/dist/chunk-HLSQCUMS.js +0 -2
- package/dist/chunk-HLSQCUMS.js.map +0 -1
- package/dist/chunk-LNV36S6D.js +0 -2
- package/dist/chunk-M4TBX2FU.js +0 -2
- package/dist/chunk-MKPKDACH.js +0 -2
- package/dist/chunk-MKPKDACH.js.map +0 -1
- package/dist/chunk-N4IPXHFM.js.map +0 -1
- package/dist/chunk-OXKAGVWK.js +0 -2
- package/dist/chunk-OXKAGVWK.js.map +0 -1
- package/dist/chunk-QB6OI74K.js +0 -2
- package/dist/chunk-QB6OI74K.js.map +0 -1
- package/dist/chunk-VIGKOVHP.js +0 -2
- package/dist/chunk-VIGKOVHP.js.map +0 -1
- package/dist/chunk-VN535FEZ.js +0 -2
- package/dist/chunk-VN535FEZ.js.map +0 -1
- package/dist/chunk-VU6C3EU2.js +0 -2
- package/dist/chunk-VU6C3EU2.js.map +0 -1
- package/dist/chunk-WQ4H5V7U.js +0 -6
- package/dist/chunk-WQ4H5V7U.js.map +0 -1
- package/dist/chunk-X6ZAR7ZL.js +0 -2
- package/dist/chunk-X6ZAR7ZL.js.map +0 -1
- package/dist/chunk-Z5WMKCRJ.js +0 -2
- package/dist/chunk-Z5WMKCRJ.js.map +0 -1
- package/dist/chunk-ZO34QFKD.js +0 -2
- package/dist/types-ZWIpiFgj.d.ts +0 -4
- /package/dist/{ButtonDefault-2YV2Z474.js.map → ButtonDefault-A5JWQEZF.js.map} +0 -0
- /package/dist/{CheckboxFieldDefault-XSBJF4HQ.js.map → CheckboxFieldDefault-2YCVL3MM.js.map} +0 -0
- /package/dist/{CountryFieldDefault-K5X6MFP3.js.map → CountryFieldDefault-IY664WKC.js.map} +0 -0
- /package/dist/{DatePickerFieldDefault-G6FWA64N.js.map → DatePickerFieldDefault-UZ3W2B3R.js.map} +0 -0
- /package/dist/{DrawerDefault-AAUS7T5W.js.map → DrawerDefault-HQGPEMMY.js.map} +0 -0
- /package/dist/{EmailFieldDefault-TFQ5SQVC.js.map → EmailFieldDefault-6GQMGBQV.js.map} +0 -0
- /package/dist/{FieldsetToggleButtonDefault-MFLN2WWT.js.map → FieldsetToggleButtonDefault-NQCXWGRK.js.map} +0 -0
- /package/dist/{FileUploadFieldDefault-7ETO2SEZ.js.map → FileUploadFieldDefault-L3LOK4A5.js.map} +0 -0
- /package/dist/{MultiSelectFieldDefault-5TL5SL7W.js.map → MultiSelectFieldDefault-OE5NHM6A.js.map} +0 -0
- /package/dist/{NumberFieldDefault-L7J22NRQ.js.map → NumberFieldDefault-MV3FSZOG.js.map} +0 -0
- /package/dist/{RadioGroupFieldDefault-XSPBKOS6.js.map → RadioGroupFieldDefault-J3ESFNPW.js.map} +0 -0
- /package/dist/{SelectFieldDefault-AT6LLZNX.js.map → SelectFieldDefault-F2MAJW7S.js.map} +0 -0
- /package/dist/{StatementDefault-DORMITL7.js.map → StatementDefault-FTAOOAL4.js.map} +0 -0
- /package/dist/{TableFieldDefault-URJVK7YR.js.map → TableFieldDefault-LXHWAWPG.js.map} +0 -0
- /package/dist/{TextAreaFieldDefault-2TV3WHKH.js.map → TelFieldDefault-EHHOHIQD.js.map} +0 -0
- /package/dist/{TextFieldDefault-2GEILZPU.js.map → TextAreaFieldDefault-VXPH3YGT.js.map} +0 -0
- /package/dist/{WorkScheduleFieldDefault-XH4AEXSM.js.map → TextFieldDefault-QWGENVEE.js.map} +0 -0
- /package/dist/{ZendeskDrawerDefault-A5PVWI4R.js.map → WorkScheduleFieldDefault-SJSAWRYV.js.map} +0 -0
- /package/dist/{chunk-L5DII4MV.js.map → chunk-237RQGWE.js.map} +0 -0
- /package/dist/{chunk-6JTHV4QS.js.map → chunk-2Y7QAG2Q.js.map} +0 -0
- /package/dist/{chunk-BNQFPYNQ.js.map → chunk-32M6SNGV.js.map} +0 -0
- /package/dist/{chunk-T4QDKI7V.js.map → chunk-3BEEU2N4.js.map} +0 -0
- /package/dist/{chunk-W5YNJOSB.js.map → chunk-3HAKPYWK.js.map} +0 -0
- /package/dist/{chunk-OELREIVJ.js.map → chunk-3VALWCZ5.js.map} +0 -0
- /package/dist/{chunk-547UHEDI.js.map → chunk-423VHE7M.js.map} +0 -0
- /package/dist/{chunk-56UXOD27.js.map → chunk-43MCQDBU.js.map} +0 -0
- /package/dist/{chunk-WRRTZ2AL.js.map → chunk-4Z2DLHAT.js.map} +0 -0
- /package/dist/{chunk-MSBCYMSH.js.map → chunk-5BGETBLF.js.map} +0 -0
- /package/dist/{chunk-2V4CTIAG.js.map → chunk-5EYREHAZ.js.map} +0 -0
- /package/dist/{chunk-PZUCONZ4.js.map → chunk-5FOI6SK4.js.map} +0 -0
- /package/dist/{chunk-S6IMK3LL.js.map → chunk-5ISPVKB4.js.map} +0 -0
- /package/dist/{chunk-D7W4VBSV.js.map → chunk-5MJH36G3.js.map} +0 -0
- /package/dist/{chunk-VFB3RR5I.js.map → chunk-65KMTRFL.js.map} +0 -0
- /package/dist/{chunk-26IIK5U2.js.map → chunk-6PRPMEWS.js.map} +0 -0
- /package/dist/{chunk-L3LOATSG.js.map → chunk-74U3UMRA.js.map} +0 -0
- /package/dist/{chunk-T2KDFAAY.js.map → chunk-7NZH3TF3.js.map} +0 -0
- /package/dist/{chunk-B2BH4JUO.js.map → chunk-7WV3GBEI.js.map} +0 -0
- /package/dist/{chunk-H5QXOIKS.js.map → chunk-A3NABWR7.js.map} +0 -0
- /package/dist/{chunk-SPQM2TCX.js.map → chunk-AEKGVWE5.js.map} +0 -0
- /package/dist/{chunk-CKVI2UDU.js.map → chunk-AGZHFGBR.js.map} +0 -0
- /package/dist/{chunk-BAMGHBLT.js.map → chunk-AVJEDFND.js.map} +0 -0
- /package/dist/{chunk-RVADUHPA.js.map → chunk-BTGWCFHJ.js.map} +0 -0
- /package/dist/{chunk-J7MCWMDD.js.map → chunk-COZWEBRG.js.map} +0 -0
- /package/dist/{chunk-7G5JSUZU.js.map → chunk-DJOLLEOJ.js.map} +0 -0
- /package/dist/{chunk-MP3VDCI7.js.map → chunk-DJYO6IIO.js.map} +0 -0
- /package/dist/{chunk-6ABCDOFB.js.map → chunk-DXHWEBVC.js.map} +0 -0
- /package/dist/{chunk-IFX5XLPZ.js.map → chunk-E37JLKX4.js.map} +0 -0
- /package/dist/{chunk-RYVRMH6C.js.map → chunk-EJCCWBLQ.js.map} +0 -0
- /package/dist/{chunk-VB6KFDBL.js.map → chunk-FHGQELT7.js.map} +0 -0
- /package/dist/{chunk-VRW22LTU.js.map → chunk-FUOTJMAO.js.map} +0 -0
- /package/dist/{chunk-MGZWMJMP.js.map → chunk-FYBXLFMI.js.map} +0 -0
- /package/dist/{chunk-O6H66UM2.js.map → chunk-FZVUO3UU.js.map} +0 -0
- /package/dist/{chunk-RGRCYSYE.js.map → chunk-GBQPG5OU.js.map} +0 -0
- /package/dist/{chunk-3BBQDNZD.js.map → chunk-GPXETIKG.js.map} +0 -0
- /package/dist/{chunk-HYDNZQOV.js.map → chunk-HLR7IUW7.js.map} +0 -0
- /package/dist/{chunk-YUJBCOLO.js.map → chunk-IFD3RW53.js.map} +0 -0
- /package/dist/{chunk-6MJVXTLI.js.map → chunk-IKSPEKDA.js.map} +0 -0
- /package/dist/{chunk-TNN3W5TU.js.map → chunk-JJDAJQG4.js.map} +0 -0
- /package/dist/{chunk-UMVA4SIV.js.map → chunk-JOHNIKN6.js.map} +0 -0
- /package/dist/{chunk-TQXCLXWH.js.map → chunk-L3XWJ35V.js.map} +0 -0
- /package/dist/{chunk-4IE7XN74.js.map → chunk-LBGZYTNR.js.map} +0 -0
- /package/dist/{chunk-KXT6ACFL.js.map → chunk-LBNA4RGS.js.map} +0 -0
- /package/dist/{chunk-NLBQ7CZC.js.map → chunk-LRPDJWIO.js.map} +0 -0
- /package/dist/{chunk-AR5X2YWE.js.map → chunk-LZL5KK3N.js.map} +0 -0
- /package/dist/{chunk-BYDQHL6O.js.map → chunk-MEOD4UGO.js.map} +0 -0
- /package/dist/{chunk-WQVZXTW3.js.map → chunk-MOM5PCKI.js.map} +0 -0
- /package/dist/{chunk-EP6FL2L3.js.map → chunk-N4TAXXWW.js.map} +0 -0
- /package/dist/{chunk-NAF6LRSS.js.map → chunk-NZ7BAZNH.js.map} +0 -0
- /package/dist/{chunk-SNBAM7SA.js.map → chunk-OABRM5LK.js.map} +0 -0
- /package/dist/{chunk-WD2JGIDK.js.map → chunk-OOEKN64P.js.map} +0 -0
- /package/dist/{chunk-XRN6752K.js.map → chunk-OORPUQ3N.js.map} +0 -0
- /package/dist/{chunk-3LCASKDS.js.map → chunk-OOSCL4WD.js.map} +0 -0
- /package/dist/{chunk-NNFWLL7F.js.map → chunk-PSBC73OL.js.map} +0 -0
- /package/dist/{chunk-IYL6TSUF.js.map → chunk-Q6NTGZUW.js.map} +0 -0
- /package/dist/{chunk-3DMWQJ5W.js.map → chunk-QMPXBDDO.js.map} +0 -0
- /package/dist/{chunk-AS6KFUXS.js.map → chunk-R3NDFTIM.js.map} +0 -0
- /package/dist/{chunk-CHHHYLCB.js.map → chunk-R4F5WRKC.js.map} +0 -0
- /package/dist/{chunk-NOTLTHHZ.js.map → chunk-R4PLUUI3.js.map} +0 -0
- /package/dist/{chunk-AYC6DTFV.js.map → chunk-RWMNB4RJ.js.map} +0 -0
- /package/dist/{chunk-NAMR4DA5.js.map → chunk-S3YIFNST.js.map} +0 -0
- /package/dist/{chunk-7ZFZYZSP.js.map → chunk-S62HZDF7.js.map} +0 -0
- /package/dist/{chunk-CS5TJWQM.js.map → chunk-S6MU4NHQ.js.map} +0 -0
- /package/dist/{chunk-PNEB74RP.js.map → chunk-SHXQGRNL.js.map} +0 -0
- /package/dist/{chunk-YIOLMWB5.js.map → chunk-TFJOJCCS.js.map} +0 -0
- /package/dist/{chunk-VPSESR6G.js.map → chunk-TPH6YQRJ.js.map} +0 -0
- /package/dist/{chunk-OWUINMZP.js.map → chunk-U7S4TUFV.js.map} +0 -0
- /package/dist/{chunk-SNECOPBD.js.map → chunk-UB5WD4YM.js.map} +0 -0
- /package/dist/{chunk-R4X2WQXX.js.map → chunk-UFLWSKNE.js.map} +0 -0
- /package/dist/{chunk-2JVZYQ6Z.js.map → chunk-UJJ5576U.js.map} +0 -0
- /package/dist/{chunk-Z7J6NJY2.js.map → chunk-VJMCAVOL.js.map} +0 -0
- /package/dist/{chunk-X3PUZFYX.js.map → chunk-VSBNYQZM.js.map} +0 -0
- /package/dist/{chunk-UNKCOOE4.js.map → chunk-WI6ZYN4S.js.map} +0 -0
- /package/dist/{chunk-DJPCJ3YR.js.map → chunk-WVND2FCE.js.map} +0 -0
- /package/dist/{chunk-3C6N7DK6.js.map → chunk-X5TMQDWS.js.map} +0 -0
- /package/dist/{chunk-D7CBR52B.js.map → chunk-XULW2ME7.js.map} +0 -0
- /package/dist/{chunk-HIFEVMKP.js.map → chunk-Y4P3ZYQK.js.map} +0 -0
- /package/dist/{chunk-TVCIAQTC.js.map → chunk-YQMALPDQ.js.map} +0 -0
- /package/dist/{chunk-YWOJ4NKF.js.map → chunk-YRAIYQ2K.js.map} +0 -0
- /package/dist/{chunk-AXV7YMZ3.js.map → chunk-YTWEXSYT.js.map} +0 -0
- /package/dist/{chunk-RAH453TV.js.map → chunk-ZBJ4VEDO.js.map} +0 -0
- /package/dist/{chunk-DXIJUMLU.js.map → chunk-ZZPQGX7X.js.map} +0 -0
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a as n,b as i}from"./chunk-
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import{a as n,b as i}from"./chunk-IFD3RW53.js";import{c as e}from"./chunk-EARN6G25.js";import{a as o}from"./chunk-P37U34EQ.js";import{Fragment as s,jsx as t,jsxs as r}from"react/jsx-runtime";var l=["You submit your termination request.","Remote reviews your request along with the employment agreement, local labor laws, and any collective bargaining agreements in place.","A lifecycle specialist contacts you if they need additional details. Sometimes they will request a call.","Depending on the country-specific laws and the terms of the employment agreement, Remote may need to seek additional legal advice. We\u2019ll let you know if there are additional charges before proceeding.","Terms and conditions for the termination are finalized.","You verbally communicate the termination to the employee.","Remote shares termination documents with the employee.","The employee signs the termination documents if required.","Remote processes the final salary and offboards the employee."],f=o(()=>r(s,{children:[t("h3",{className:e("RemoteFlows__TerminationDialogInfoContent__Title"),children:"Please read carefully before you continue"}),t("p",{className:e("RemoteFlows__TerminationDialogInfoContent__Description"),children:"Please do not inform the employee of the termination. Remote will lead communication with them after you submit this form and they finalize the termination terms."}),t("p",{className:e("RemoteFlows__TerminationDialogInfoContent__Description RemoteFlows__TerminationDialogInfoContent__FollowUpDescription"),children:"If you already informed them, that's okay. Remote will ask for the details regarding that communication and they'll take it from there."}),t(i,{className:e("RemoteFlows__TerminationDialogInfoContent__ZendeskTriggerButton text-sm"),zendeskId:n.terminationEmployeeCommunication,children:"Learn more about employee communication"}),t("h3",{className:e("RemoteFlows__TerminationDialogInfoContent__ProcessTitle"),children:"The termination process"}),t("ul",{className:e("RemoteFlows__TerminationDialogInfoContent__ProcessList list-disc list-inside"),children:l.map((a,m)=>t("li",{className:e("RemoteFlows__TerminationDialogInfoContent__ProcessListItem"),children:a},m))})]}),"TerminationDialogInfoContent");export{f as a};
|
|
2
|
+
//# sourceMappingURL=chunk-S6MU4NHQ.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a as s}from"./chunk-
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import{a as s}from"./chunk-EJCCWBLQ.js";import{b as e}from"./chunk-Q3ALCPJN.js";import{m as t}from"./chunk-EARN6G25.js";import{a as i}from"./chunk-P37U34EQ.js";import{jsx as u}from"react/jsx-runtime";function E({components:l,onSubmit:p,onSuccess:c,onError:m}){let{contractorOnboardingBag:r}=e(),d=i(async a=>{try{let n=await r.parseFormValues(a);await p?.(n);let o=await r.onSubmit(a);if(o?.data){await c?.(o?.data),r?.next();return}}catch(n){let o=t(n,r.meta?.fields?.pricing_plan);m?.(o)}},"handleSubmit"),P=r.stepState.values?.pricing_plan||r.initialValues.pricing_plan;return u(s,{components:l,defaultValues:P,onSubmit:d})}i(E,"PricingPlanStep");export{E as a};
|
|
2
|
+
//# sourceMappingURL=chunk-SHXQGRNL.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a as Z}from"./chunk-
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import{a as Z}from"./chunk-COZWEBRG.js";import{a as I}from"./chunk-VFRHMNLJ.js";import{a as Q,b as W,c as X,f as Y}from"./chunk-R4F5WRKC.js";import{a as C}from"./chunk-HN5HLFTB.js";import{a as G}from"./chunk-KFYWUBRS.js";import{c as ee}from"./chunk-YZKXKNDS.js";import{a as z}from"./chunk-NZ7BAZNH.js";import{e as M}from"./chunk-552XBDTE.js";import{a as K}from"./chunk-EARN6G25.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-SSBGIR74.js.map
|
|
@@ -1 +1 @@
|
|
|
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 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 meta: {\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"]}
|
|
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 // eslint-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 // eslint-disable-next-line react-hooks/refs\n meta: {\n // WE NEED TO FIX: react-hooks/refs - Cannot access ref value during render\n // eslint-disable-next-line react-hooks/refs\n fields: fieldsMetaRef.current?.fields,\n },\n };\n};\n"],"mappings":"saAMA,OAA0B,UAAAA,GAAQ,UAAAC,OAAc,MCOhD,OAAS,eAAAC,GAAa,aAAAC,GAAW,WAAAC,GAAS,UAAAC,GAAQ,YAAAC,MAAgB,QAClE,OAAS,UAAAC,GAAQ,mBAAAC,OAAuB,MA0MxB,cAAAC,OAAA,oBArKT,IAAMC,EAA4D,CACvE,MAAO,aACP,gBAAiB,GACjB,sBAAuB,GACvB,uBAAwB,GACxB,yBAA0B,GAC1B,uBAAwB,GACxB,qBAAsB,EACxB,EAwBMC,GAAkBC,EAACC,GAChBC,EAAmBC,EAAW,KAAK,OAAQ,OAAWF,CAAO,EAD9C,mBAMxB,SAASG,GACPC,EACAC,EACQ,CACR,GACE,OAAOD,GAAgB,UACvBA,IAAgB,MAChB,UAAWA,EACX,CACA,IAAME,EAASF,EAAmC,MAClD,GAAIE,EAAO,OAAOA,CACpB,CACA,OAAOD,IAAiB,mBACpB,gBACA,0BACN,CAfSN,EAAAI,GAAA,kBAoBF,IAAMI,GAAoBR,EAAA,CAC/B,CACE,cAAAS,EACA,gBAAAC,EACA,cAAAC,EACA,kBAAAC,EACA,QAAAX,EACA,QAAAY,CACF,EAA6B,CAC3B,kBAAmBf,CACrB,IACG,CACH,IAAMgB,EAAgBC,GAEnB,CACD,OAAQ,CAAC,CACX,CAAC,EACK,CAACC,EAAgBC,CAAiB,EAAIC,EAC1CT,CACF,EACM,CAACU,EAAiBC,CAAkB,EACxCF,EAAgC,EAC5B,CAACG,EAAyBC,CAA0B,EAAIJ,EAE5D,EACI,CAACZ,EAAciB,EAAe,EAAIL,EAAuB,EACzD,CAAE,KAAMM,EAAW,UAAWC,EAAmB,EACrDC,EAA2B,CACzB,uBAAwBd,EAAkB,sBAC5C,CAAC,EACG,CAAE,KAAMe,EAAY,UAAWC,EAAoB,EACvDC,EAAqB,EAEjBC,GAAuBd,GAAkBG,GAAiB,MAE1D,CAAE,KAAMY,EAAwB,UAAWC,EAAsB,EACrEC,EAAgBH,GAAsB,CACpC,uBAAwBlB,EAAkB,uBAC1C,QAAAX,CACF,CAAC,EACGiC,EAAmCC,EAA4B,EAC/D,CAAE,YAAaC,EAAsC,EACzDC,EAAkBH,CAAgC,EAC9CI,EAA0BnB,GAAiB,SAE3Cd,EAAcJ,GAAS,WAAW,QAAQ,OAC1CsC,EACJlC,GACA,OAAOA,GAAgB,UACvB,iBAAkBA,EAEZA,EAQA,aACF,OAEAmC,EAAgBC,GAAY,IAAM,CACtC,IAAMC,EACJJ,GAA2BjB,EACvBiB,IAA4BjB,EAC5B,GAEN,OAAIiB,IAA4BjB,EACvB,CACL,KAAMA,EACN,GAAIiB,EACJ,gBAAAI,CACF,EAGK,CACL,KAAMJ,EACN,GAAIjB,EACJ,gBAAAqB,CACF,CACF,EAAG,CAACJ,EAAyBjB,CAAuB,CAAC,EAE/CsB,EAAsB/B,EAAkB,kBACxCgC,EAA2BhC,EAAkB,uBAC7CiC,GAAeC,GAAQ,IAAM,CACjC,GAAM,CAAE,KAAAC,EAAM,GAAAC,EAAI,gBAAAN,CAAgB,EAAIF,EAAc,EAC9CS,EAAc7C,GAAeC,EAAaC,CAAY,EAE5D,MAAO,CACL,OAAQ,CACN,OAAQ,CACN,GAAGD,EACH,MAAO4C,EACP,aAAc,CACZ,6BAA8B,CAC5B,MACEV,GAAyB,8BAA8B,MACzD,YACEA,GAAyB,8BACrB,WACR,EACA,WAAY,CAAE,KAAAQ,EAAM,GAAAC,CAAG,EACvB,UAAWhD,EACTkD,GAGErD,GAACsD,EAAA,CACE,GAAGD,EACJ,gBAAiBR,EACjB,eACE7B,IAAY,YAAc,YAAc,SAE1C,aAAcF,EAChB,EAXO,YAcb,CACF,EACA,cAAe,CACb,GAAGV,GAAS,WAAW,QAAQ,cAC/B,aAAc,CACZ,OAAQY,GAAW,WACrB,CACF,EACA,WAAY,CACV,GAAGZ,GAAS,WAAW,QAAQ,WAC/B,WAAY,CACV,GAAIA,GAAS,WAAW,QAAQ,YAAyB,WACzD,eAAgB,CACd,GAAIA,GAAS,WAAW,QAAQ,YAC5B,YAAY,eAChB,qBAAsB,CACpB,UAAW,QACX,gBAAiB,CACf,SAAUoB,GAA2B,KACvC,CACF,CACF,CACF,EACA,aAAc,CACZ,GAAI,OAAOpB,GAAS,WAAW,QAAQ,YAAe,UAEhDA,GAAS,WAAW,QAAQ,YAI5B,oBAAoB,EACtB,CAAC,EACL,OAAQ,CAAC0C,EACT,UAAW3C,EAACkD,GAERrD,GAACuD,GAAA,CACE,GAAGF,EACJ,QAAQ,QACR,SAAU,CACR,OAAQ,CACN,QAAS,GACT,WAAY,uBACZ,OAAQ,CACN,OAAQ,SACR,SAAU,QACZ,CACF,CACF,EACF,EAfO,YAkBb,CACF,EACA,iBAAkB,CAChB,GAAGjD,GAAS,WAAW,QAAQ,iBAC/B,qBAAsB,CACpB,OAAQ,CAAC2C,CACX,CACF,CACF,CACF,CACF,EAAG,CACDJ,EACAnC,EACAC,EACAiC,GAAyB,8BAA8B,MACvDA,GAAyB,8BAA8B,YACvDtC,GAAS,WAAW,QAAQ,cAC5BA,GAAS,WAAW,QAAQ,WAC5BA,GAAS,WAAW,QAAQ,iBAC5BY,EACAQ,EACAsB,EACAC,EACAjC,CACF,CAAC,EAEK0C,EAAmBtD,GAAgB,CACvC,UAAW,CACT,OAAQ,CACN,GAAGE,GAAS,WAAW,OACvB,GAAG4C,IAAc,MACnB,CACF,CACF,CAAC,EAEDS,GAAU,IAAM,CAEd,GAAI7C,GAAiBe,EAAW,CAC9B,IAAM+B,EAAiB/B,EAAU,KAC/B,CAAC,CAAE,MAAAgC,CAAM,IAAMA,IAAU/C,CAC3B,EACI8C,GACFnC,EAAmBmC,CAAc,CAErC,CACF,EAAG,CAAC9C,EAAee,CAAS,CAAC,EAE7B8B,GAAU,IAAM,CAEd,GAAI5C,GAAmBiB,EAAY,CACjC,IAAM8B,EAAqB9B,EAAW,KACpC,CAAC,CAAE,MAAA6B,CAAM,IAAMA,IAAU9C,CAC3B,EACI+C,GACFnC,EAA2BmC,EAAmB,KAAK,CAEvD,CACF,EAAG,CAAC/C,EAAiBiB,CAAU,CAAC,EAMhC,eAAe+B,GAASC,EAA8C,CACpE,OAAOvB,GACLwB,GAAaD,EAAQ/C,EAAmBC,CAAO,CACjD,CACF,CAJeb,EAAA0D,GAAA,YAWf,SAASG,GAAgBC,EAAiB,CACxC,IAAMC,EAAiBvC,GAAW,KAAK,CAAC,CAAE,MAAAgC,CAAM,IAAMA,IAAUM,CAAO,EAGrEC,GACAA,EAAe,aAAa,SAAW,GACvCA,EAAe,oBAEf9C,EAAkB8C,EAAe,UAAU,EAE3C9C,EAAkB,MAAS,EAE7BG,EAAmB2C,CAAc,CACnC,CAbS/D,EAAA6D,GAAA,mBAmBT,SAASG,GAAeC,EAAgB,CACtChD,EAAkBgD,CAAM,CAC1B,CAFSjE,EAAAgE,GAAA,kBAIT,SAASE,GAAqBC,EAA4C,CACxE5C,GAAgB4C,EAAM,OAAO,KAAqB,CACpD,CAFSnE,EAAAkE,GAAA,wBAIT,SAASE,GAAiBC,EAAkB,CAC1C,IAAMC,EAAmB3C,GAAY,KAClC,GAAM,EAAE,QAAU0C,CACrB,GAAG,MACH/C,EAA2BgD,CAAgB,EAC3CrE,GAAS,mBAAmBqE,GAAoB,EAAE,CACpD,CANStE,EAAAoE,GAAA,oBAQT,IAAMG,EAAclB,EAAiB,OAAO,KACzCmB,GAAUA,EAAM,OAAS,QAC5B,EAEA,GAAID,EAAa,CACf,IAAME,EACJtD,GAAiB,aAAa,IAAK8C,IAAY,CAC7C,MAAOA,EAAO,KACd,MAAOA,EAAO,IAChB,EAAE,GAAK,CAAC,EACVM,EAAY,QAAUE,EACtBF,EAAY,UAAYE,EAAQ,OAAS,EACzCF,EAAY,SAAWE,EAAQ,OAAS,EACxCF,EAAY,SAAWP,GACvBO,EAAY,OACVE,EAAQ,OAAS,EACbC,GAAO,EACJ,UAAWlB,GAAW,OAAOA,GAAU,SAAWA,EAAQ,EAAG,EAC7D,SAAS,oBAAoB,EAChCkB,GAAO,CACf,CAEA,GAAI/C,EAAY,CACd,IAAMgD,EAAgBtB,EAAiB,OAAO,KAC3CmB,GAAUA,EAAM,OAAS,UAC5B,EACIG,IACFA,EAAc,QAAUhD,EACxBgD,EAAc,SAAWP,GAE7B,CAEA,IAAMQ,EAAoBvB,EAAiB,OAAO,KAC/CmB,GAAUA,EAAM,OAAS,eAC5B,EAKA,GAJII,IACFA,EAAkB,SAAWV,IAG3B1C,EAAW,CACb,IAAMqD,EAAexB,EAAiB,OAAO,KAC1CmB,GAAUA,EAAM,OAAS,SAC5B,EACIK,IACFA,EAAa,QAAUrD,EACvBqD,EAAa,SAAWhB,GAE5B,CAEA,IAAMiB,GAAY9E,EAAA,IAAM,CACtBoB,EAAmB,MAAS,EAC5BH,EAAkBR,CAAa,CACjC,EAHkB,aAKZsE,EAAY,CAChB,GAAG1B,EAAiB,OAAO,OAAQmB,GAAUA,EAAM,OAAS,YAAY,EACxE,GAAIzC,GAAwB,QAAU,CAAC,EACvC,GAAGsB,EAAiB,OAAO,OAAQmB,GAAUA,EAAM,OAAS,YAAY,CAC1E,EAEMQ,EAAmBC,GACvB5B,EAAiB,OACjBhC,GAA2B,MAC3BT,EAAkB,sBACpB,EAEA,eAAesE,GAAiBvB,EAA4C,CAC1E,IAAIwB,EAAoC,KAExClF,GAAS,eAAe0D,CAAM,EAC9B,IAAMyB,EAAe,MAAMC,EAAmB1B,EAAQoB,CAAS,EAG/D,GAAI,CACF,MAAMC,EAAiB,SAASI,EAAc,CAC5C,WAAY,EACd,CAAC,EACDD,EAAS,CACP,WAAY,CAAC,EACb,SAAU,IAAIG,GAAgB,CAAC,EAAG3B,CAAM,CAC1C,CACF,OAAS4B,EAAO,CACd,IAAMC,EAAgBC,EAAcF,CAAwB,EAE5DJ,EAAS,CAEP,WAAY,OAAO,QAAQK,CAAa,EAAE,OACxC,CAACE,EAAK,CAACC,EAAKnC,CAAK,KAAO,CAAE,GAAGkC,EAAK,CAACC,CAAG,EAAGnC,EAAM,OAAQ,GACvD,CAAC,CACH,EACA,SAAU+B,CACZ,CACF,CAGA,IAAMK,EACJ7D,GAAwB,iBAAiBqD,CAAY,EAGjDS,EAAsB,CAC1B,GAAIV,GAAQ,SAAS,OAAS,CAAC,EAC/B,GAAKS,GAA0D,UAC3D,OAAS,CAAC,CAChB,EACME,EAAiB,CACrB,GAAIX,GAAQ,UAAU,OAAS,CAAC,EAChC,GAAKS,GAA0D,UAC3D,OAAS,CAAC,CAChB,EAEA,MAAO,CACL,WAAY,CACV,GAAIT,GAAQ,YAAc,CAAC,EAC3B,GAAIS,GAAwB,YAAc,CAAC,CAC7C,EACA,SAAU,IAAIN,GAAgBO,EAAqBC,CAAc,CACnE,CACF,CAnDe,OAAA9F,EAAAkF,GAAA,oBAuDR,CAIL,UAAW,CACT,QAAS,EACT,MAAO,EACP,WAAY,EACd,EAIA,OAAQH,EAIR,iBAAAC,EAMA,gBAAiBhF,EAAA,MACf2D,GACkD,CAClD,GAAM,CACJ,QAAAG,EACA,OAAAG,EACA,SAAAI,EACA,iBAAA0B,EACA,cAAAC,EACA,kBAAAC,EACA,WAAAC,EACA,iBAAAC,EACA,GAAGC,CACL,EAAIzC,EAGA0C,EAAS1C,EAAO,OAChBoC,IAAqB,sBACvBM,EAASJ,GAeX,IAAMK,GAAqB,MAAMjB,EAZG,CAClC,QAAAvB,EACA,OAAAG,EACA,OAAAoC,EACA,iBAAAN,EACA,kBAAAE,EACA,cAAAD,EACA,SAAA3B,EACA,WAAA6B,EACA,iBAAAC,CACF,EAIE9C,EAAiB,MACnB,EAEMkD,GAAqB,MAAMlB,EAC/Be,EACArE,GAAwB,QAAU,CAAC,CACrC,EAEMyE,GAAmB,CACvB,cAAe7E,GAAY,KAAM8E,IAAMA,GAAE,QAAUpC,CAAQ,GAAG,KAChE,EAEA,MAAO,CACL,GAAGiC,GACH,GAAGC,GACH,GAAGC,EACL,CACF,EApDiB,mBA0DjB,iBAAAtB,GAIA,aAAchD,EAAiC,UAI/C,UACET,IAAsBG,IAAuBI,GAI/C,SAAA0B,GAIA,UAAAoB,GAKA,WAAAnD,EAOA,KAAM,CAGJ,OAAQb,EAAc,SAAS,MACjC,CACF,CACF,EAjgBiC,qBD1F1B,SAAS4F,GACdC,EACAC,EACAC,EACA,CACA,IAAMC,EAAeH,EAAO,OAC1B,CAACI,EAAiBC,KAEZA,EAAM,OAAS,UAAYA,EAAM,OAAS,oBAC5CD,EAAgBC,EAAM,IAAI,EAAKA,EAAM,OAA2B,KAC9D,mBACA,CACE,GAAIC,EAACC,GAAuBA,IAAQF,EAAM,KAAtC,MACJ,KAAMC,EAACE,GAAWA,EAAO,SAAS,gBAAgB,EAA5C,QACN,UAAWF,EAACE,GAAWA,EAAO,SAAS,EAA5B,YACb,CACF,EACSH,EAAM,OAAS,aACxBD,EAAgBC,EAAM,IAAI,EAAII,GAAO,CACnC,eAAgBC,GAAO,EACpB,UAAWC,GACH,MAAMA,CAAK,EAAI,OAAYA,CACnC,EACA,IAAI,EAAG,mDAAmD,EAC1D,IACCV,EACIW,EAAWX,CAAsC,EACjDW,EAAW,IACf,IAKS,iCAJUX,EACbW,EAAWX,CAAsC,EACjDW,EAAW,KACiB,GACmB,IAAIX,CAAuB,EAElF,CACJ,CAAC,EACQI,EAAM,OAAS,oBAAsBH,EAE9CE,EAAgBC,EAAM,IAAI,EACxBA,EAAM,OACN,SAAS,gBAAgB,EAE3BD,EAAgBC,EAAM,IAAI,EAAIA,EAAM,OAE/BD,GAET,CAAC,CACH,EACA,OAAOK,GAAON,CAAY,CAC5B,CAlDgBG,EAAAP,GAAA,yBAyDhB,SAASc,GAAeC,EAAkC,CACxD,IAAMC,EAAS,WACf,OAAO,OAAO,KAAKD,CAAQ,EAAE,OAE3B,CAACE,EAAKC,IAAQ,CACd,IAAMC,EAAkBJ,EAASG,CAAG,EACpC,GAAIC,IAAoB,OACtB,OAAOF,EAGT,IAAMG,EAAe,CACnB,mBAFuBF,EAAI,QAAQF,EAAQ,EAAE,EAG7C,kBAAmBG,CACrB,EACA,MAAO,CAAC,GAAGF,EAAKG,CAAY,CAC9B,EAAG,CAAC,CAAC,CACP,CAhBSb,EAAAO,GAAA,kBAkBT,SAASO,GACPT,EACAU,EACAC,EAC+B,CAC/B,IAAMC,EAAgB,OAAOZ,EAAM,YAAY,cAAc,EACvDa,EAAeb,EAAM,cAoB3B,MAAO,CACL,GAnB0C,CAC1C,YAAaA,EAAM,QAAUA,EAAM,QACnC,gBAAiBA,EAAM,wBAA0B,QACjD,MAAOA,EAAM,kBAAoBU,EAAkB,MACnD,IAAKV,EAAM,KAAO,OAClB,GAAIA,EAAM,UAAY,CAAE,SAAUE,GAAeF,EAAM,QAAQ,CAAE,EACjE,GAAIU,EAAkB,sBACpBE,GAAiB,CACf,SAAU,CACR,cAAeF,EAAkB,kBAC7BE,EACAX,EAAWY,CAAuC,GAClDZ,EAAW,IACf,KAAM,EACR,CACF,CACJ,EAIE,GAAGa,GAAgBd,EAAOW,CAAO,CACnC,CACF,CA9BShB,EAAAc,GAAA,wBAgCT,SAASK,GACPd,EACAW,EACwC,CACxC,IAAMI,EACJJ,IAAY,aAAeX,EAAM,mBAAqB,oBAClDgB,EACJL,IAAY,YAAcX,EAAM,mBAAqB,SACjDiB,EAAkBjB,EAAM,gBAAkB,mBAEhD,GAAIe,EAAa,CACf,IAAMG,EAAsBlB,EAAM,mBAAqB,oBACvD,OAAOiB,EACH,CACE,uCAAwCjB,EAAM,MAChD,EACA,CACE,CAACkB,EACG,2CACA,qBAAqB,EAAGlB,EAAM,MACpC,CACN,CAEA,OAAIgB,EACKC,EACH,CACE,kBAAmBjB,EAAM,MAC3B,EACA,CACE,oBAAqBA,EAAM,MAC7B,EAGC,CAAC,CACV,CAlCSL,EAAAmB,GAAA,mBA0CF,SAASK,GACdC,EAGAV,EAAqDW,EACrDV,EAAiC,WACH,CAC9B,IAAMW,EAAc,MAAM,QAAQF,CAAM,EAAIA,EAAS,CAACA,CAAM,EAE5D,GAAIE,EAAY,SAAW,EACzB,MAAM,IAAI,MAAM,2CAA2C,EAG7D,OAAIA,EAAY,OAAS,GACJ,IAAI,IAAIA,EAAY,IAAKC,GAAMA,EAAE,QAAQ,CAAC,EAC9C,KAAO,GACpB,QAAQ,KACN,8EACF,EAIG,CACL,uBAAwBD,EAAY,CAAC,EAAE,SACvC,iBAAkBZ,EAAkB,gBACpC,wBAAyBA,EAAkB,sBAC3C,yBAA0BA,EAAkB,uBAC5C,uBAAwBA,EAAkB,qBAC1C,YAAaY,EAAY,IAAKtB,GAC5BS,GAAqBT,EAAOU,EAAmBC,CAAO,CACxD,CACF,CACF,CAhCgBhB,EAAAwB,GAAA","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"]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{G as m,d as r}from"./chunk-
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import{G as m,d as r}from"./chunk-R47Q7R6C.js";import{d as o}from"./chunk-KQPDXXG3.js";import{a as e}from"./chunk-P37U34EQ.js";import{useMutation as u,useQuery as l}from"@tanstack/react-query";var h=e(({employmentId:t,queryParams:n})=>{let{client:i}=o();return l({queryKey:["employment",t],retry:!1,queryFn:e(()=>m({client:i,headers:{Authorization:""},path:{employment_id:t},query:n}),"queryFn"),enabled:!!t,select:e(({data:s})=>s?.data?.employment,"select")})},"useEmploymentQuery"),f=e(()=>{let{client:t}=o();return u({mutationFn:e(({employmentId:n})=>r({client:t,headers:{Authorization:""},path:{employment_id:n}}),"mutationFn")})},"useDiscardEmploymentMutation");export{h as a,f as b};
|
|
2
|
+
//# sourceMappingURL=chunk-TFJOJCCS.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import{a as x,b as y,c as k}from"./chunk-5BGETBLF.js";import{b as h}from"./chunk-2Y7QAG2Q.js";import{b as C}from"./chunk-DJYO6IIO.js";import{c as m}from"./chunk-EARN6G25.js";import{a as r}from"./chunk-P37U34EQ.js";import{Fragment as z,useState as G}from"react";import{Check as L,ChevronDownIcon as B,X as M}from"lucide-react";import{Command as i}from"cmdk";import{SearchIcon as H}from"lucide-react";import{jsx as d,jsxs as X}from"react/jsx-runtime";function b({className:t,...o}){return d(i,{"data-slot":"command",className:m("bg-popover text-popover-foreground flex h-full w-full flex-col overflow-hidden rounded-md",t),...o})}r(b,"Command");function P({className:t,...o}){return d(i.List,{"data-slot":"command-list",className:m("max-h-[300px] scroll-py-1 overflow-x-hidden overflow-y-auto",t),...o})}r(P,"CommandList");function _({...t}){return d(i.Empty,{"data-slot":"command-empty",className:"py-6 text-center text-sm",...t})}r(_,"CommandEmpty");function w({className:t,...o}){return d(i.Group,{"data-slot":"command-group",className:m("text-foreground [&_[cmdk-group-heading]]:text-muted-foreground overflow-hidden p-1 [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-medium",t),...o})}r(w,"CommandGroup");function N({className:t,...o}){return d(i.Separator,{"data-slot":"command-separator",className:m("bg-border -mx-1 h-px",t),...o})}r(N,"CommandSeparator");function D({className:t,...o}){return d(i.Item,{"data-slot":"command-item",className:m("data-[selected=true]:bg-accent data-[selected=true]:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",t),...o})}r(D,"CommandItem");import{jsx as a,jsxs as s}from"react/jsx-runtime";function Z({options:t,selected:o,onChange:u,placeholder:S,...I}){let[g,R]=G(!1),f=r(e=>{u(o.filter(n=>n.value!==e.value))},"handleUnselect"),O=t.some(e=>e.category),E=t.reduce((e,n)=>{let p=n.category||"Uncategorized";return e[p]||(e[p]=[]),e[p].push(n),e},{});return s(x,{open:g,onOpenChange:R,...I,children:[a(y,{children:s(C,{variant:"outline",role:"combobox","aria-expanded":g,className:"w-full justify-between font-normal",type:"button",children:[a("div",{className:"flex gap-1 flex-wrap overflow-x-auto max-h-[2.5rem] items-center",children:o.length>0?o.map(e=>s(h,{variant:"secondary",className:"mr-1 mb-1",children:[e.label,a("div",{role:"button",tabIndex:0,"aria-label":`remove ${e.label}`,className:"ml-1 ring-offset-background rounded-full outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 cursor-pointer",onKeyDown:n=>{n.key==="Enter"&&f(e)},onMouseDown:n=>{n.preventDefault(),n.stopPropagation()},onClick:()=>f(e),children:a(M,{className:"h-3 w-3 text-muted-foreground hover:text-foreground"})})]},e.label)):a("span",{className:"text-foreground",children:S})}),a(B,{className:"size-4"})]})}),a(k,{align:"start",className:"w-full p-0",children:a(b,{children:s(P,{children:[a(_,{children:"No item found."}),Object.entries(E).map(([e,n],p)=>s(z,{children:[p>0&&a(N,{}),a(w,{heading:O?e:void 0,children:n.map(l=>{let v=o.some(c=>c.value===l.value);return s(D,{onSelect:()=>{u(v?o.filter(c=>c.value!==l.value):[...o,l])},children:[a(L,{className:m("mr-2 h-4 w-4",v?"opacity-100":"opacity-0")}),l.label]},l.label)})})]},e))]})})})]})}r(Z,"MultiSelect");export{Z as a};
|
|
2
|
+
//# sourceMappingURL=chunk-TPH6YQRJ.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{j as d,k as _,l as x,m as u,n as f}from"./chunk-
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import{j as d,k as _,l as x,m as u,n as f}from"./chunk-RXNDKUY6.js";import{c as t}from"./chunk-EARN6G25.js";import{a as p}from"./chunk-P37U34EQ.js";import*as b from"react";import{jsx as T}from"react/jsx-runtime";var n=b.forwardRef(({className:e,...r},a)=>T("textarea",{className:t("flex min-h-[80px] w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 md:text-sm",e),ref:a,...r}));n.displayName="Textarea";import{jsx as o,jsxs as l}from"react/jsx-runtime";function C({field:e,fieldState:r,fieldData:a}){let{name:i,label:c,description:s,maxLength:m}=a,g=e.value?.length??0;return l(d,{"data-field":i,className:`RemoteFlows__TextArea__Item__${i}`,children:[o(_,{className:"RemoteFlows__TextArea__Label",children:c}),o(x,{children:o(n,{...e,value:e.value??"",onChange:F=>{e.onChange(F)},className:t(r.error&&"border-red-500 focus-visible:ring-red-500","RemoteFlows__TextArea__Input"),placeholder:c})}),(s||m)&&l("div",{className:"flex items-center justify-between",children:[s&&o(u,{className:"RemoteFlows__TextArea__Description",children:s}),m&&l("span",{className:"text-sm ml-auto RemoteFlows__TextArea__MaxLength",children:[g,"/",m]})]}),r.error&&o(f,{className:"RemoteFlows__TextArea__Error"})]})}p(C,"TextAreaFieldDefault");export{C as a};
|
|
2
|
+
//# sourceMappingURL=chunk-U7S4TUFV.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import{g as t}from"./chunk-EARN6G25.js";import{b as m}from"./chunk-KQPDXXG3.js";import{a as e}from"./chunk-P37U34EQ.js";import{jsx as s}from"react/jsx-runtime";function f({title:o,description:r,severity:p}){let{components:a}=m(),n=a.statement;if(!n)throw new Error("Statement component not found");return s(n,{data:{title:o?t(o):void 0,description:t(r),severity:p}})}e(f,"Statement");export{f as a};
|
|
2
|
+
//# sourceMappingURL=chunk-UB5WD4YM.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import{c as o}from"./chunk-EARN6G25.js";import*as t from"react";import*as e from"@radix-ui/react-checkbox";import{Check as s}from"lucide-react";import{jsx as i}from"react/jsx-runtime";var m=t.forwardRef(({className:r,...c},a)=>i(e.Root,{ref:a,className:o("peer h-4 w-4 shrink-0 rounded-sm border border-input ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-checkbox data-[state=checked]:text-primary",r),...c,children:i(e.Indicator,{className:o("flex items-center justify-center text-current"),children:i(s,{className:"h-4 w-4"})})}));m.displayName=e.Root.displayName;export{m as a};
|
|
2
|
+
//# sourceMappingURL=chunk-UFLWSKNE.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{a as V,b as J,c as j,e as D}from"./chunk-A3NABWR7.js";import{e as q}from"./chunk-5XNFVJNM.js";import{a as te}from"./chunk-FZVUO3UU.js";import{a as ae}from"./chunk-KQUKUR4T.js";import{a as P,c as E,d as M,e as I,f as _}from"./chunk-ZZPQGX7X.js";import{f as X,g as R,h as Q}from"./chunk-RXNDKUY6.js";import{c as S}from"./chunk-EARN6G25.js";import{d as ee}from"./chunk-KQPDXXG3.js";import{a as c}from"./chunk-P37U34EQ.js";import*as A from"@radix-ui/react-collapsible";var be=A.Root,fe=A.CollapsibleTrigger,ge=A.CollapsibleContent;import*as F from"@radix-ui/react-tabs";import{jsx as H}from"react/jsx-runtime";function G({className:e,...t}){return H(F.Root,{"data-slot":"tabs",className:S("flex flex-col gap-2",e),...t})}c(G,"Tabs");function Y({className:e,...t}){return H(F.List,{"data-slot":"tabs-list",className:S("bg-muted text-muted-foreground inline-flex h-9 w-fit items-center justify-center rounded-lg p-1",e),...t})}c(Y,"TabsList");function W({className:e,...t}){return H(F.Trigger,{"data-slot":"tabs-trigger",className:S("data-[state=active]:bg-background data-[state=active]:text-foreground focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:outline-ring inline-flex flex-1 items-center justify-center gap-1.5 rounded-md px-2 py-1 text-sm font-medium whitespace-nowrap transition-[color,box-shadow] focus-visible:ring-[3px] focus-visible:outline-1 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:shadow-sm [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",e),...t})}c(W,"TabsTrigger");function ye({className:e,...t}){return H(F.Content,{"data-slot":"tabs-content",className:S("flex-1 outline-none",e),...t})}c(ye,"TabsContent");import*as K from"react";import*as x from"@radix-ui/react-scroll-area";import{jsx as k,jsxs as he}from"react/jsx-runtime";var le=K.forwardRef(({className:e,children:t,...s},a)=>he(x.Root,{ref:a,className:S("relative overflow-hidden",e),...s,children:[k(x.Viewport,{className:"h-full w-full rounded-[inherit]",children:t}),k(se,{}),k(x.Corner,{})]}));le.displayName=x.Root.displayName;var se=K.forwardRef(({className:e,orientation:t="vertical",...s},a)=>k(x.ScrollAreaScrollbar,{ref:a,orientation:t,className:S("flex touch-none select-none transition-colors",t==="vertical"&&"h-full w-2.5 border-l border-l-transparent p-[1px]",t==="horizontal"&&"h-2.5 flex-col border-t border-t-transparent p-[1px]",e),...s,children:k(x.ScrollAreaThumb,{className:"relative flex-1 rounded-full bg-border"})}));se.displayName=x.ScrollAreaScrollbar.displayName;import{useState as B,useEffect as Ce,useMemo as Fe}from"react";import{useQuery as we}from"@tanstack/react-query";import O from"fast-deep-equal";var ne=c(e=>e.name?e.type?!0:(console.warn(`Field "${e.name}" missing required "type" property`),!1):(console.warn('Field missing required "name" property:',e),!1),"validateField"),Le=c((e,t)=>{if(O(e,t))return;let s=new Map((e||[]).map(l=>[l.value,l])),a=new Map((t||[]).map(l=>[l.value,l])),o=[],y=[],f=[];if(a.forEach((l,v)=>{s.has(v)||o.push({value:l.value,label:l.label})}),s.forEach((l,v)=>{if(!a.has(v))y.push({value:l.value,label:l.label});else{let r=a.get(v);if(!O(l,r)){let p={};l.label!==r.label&&(p.label={old:l.label,new:r.label}),Object.keys(p).length>0&&f.push({value:v,changes:p})}}}),!(o.length===0&&y.length===0&&f.length===0))return{added:o,removed:y,modified:f}},"compareOptions"),xe=c((e,t)=>{let s=e.fields,a=t.fields;if(!s&&!a)return;let o=U(s||[],a||[]);if(o.added.length>0||o.removed.length>0||o.modified.length>0||o.reordered.length>0)return Array.from(o.fieldDiffs.values())},"compareNestedFields"),re=c((e,t,s,a)=>{if(s!==a)return!0;let o={label:e.label!==t.label,required:e.required!==t.required,inputType:e.inputType!==t.inputType,type:e.type!==t.type,jsonType:!O(e.jsonType,t.jsonType),name:e.name!==t.name,defaultValue:e.defaultValue!==t.defaultValue,minDate:e.minDate!==t.minDate,maxDate:e.maxDate!==t.maxDate,maxLength:e.maxLength!==t.maxLength,multiple:e.multiple!==t.multiple,isVisible:e.isVisible!==t.isVisible,options:!O(e.options,t.options)},y=(()=>{let l=e.fields,v=t.fields;if(!l&&!v)return!1;if(!l||!v)return!0;let r=U(l,v);return r.added.length>0||r.removed.length>0||r.modified.length>0||r.reordered.length>0})();return Object.values(o).some(l=>l)||y},"isFieldModified"),Ne=c((e,t)=>{let s={};e.label!==t.label&&(s.label={old:e.label,new:t.label}),e.required!==t.required&&(s.required={old:e.required,new:t.required}),e.type!==t.type&&(s.type={old:e.type,new:t.type}),e.inputType!==t.inputType&&(s.inputType={old:e.inputType,new:t.inputType}),O(e.jsonType,t.jsonType)||(s.jsonType={old:e.jsonType,new:t.jsonType}),O(e.defaultValue,t.defaultValue)||(s.defaultValue={old:e.defaultValue,new:t.defaultValue}),e.minDate!==t.minDate&&(s.minDate={old:e.minDate||"",new:t.minDate||""}),e.maxDate!==t.maxDate&&(s.maxDate={old:e.maxDate||"",new:t.maxDate||""}),e.maxLength!==t.maxLength&&(s.maxLength={old:e.maxLength||0,new:t.maxLength||0}),e.multiple!==t.multiple&&(s.multiple={old:e.multiple||!1,new:t.multiple||!1}),e.isVisible!==t.isVisible&&(s.isVisible={old:e.isVisible,new:t.isVisible});let a=Le(e.options,t.options);a&&(s.options=a);let o=xe(e,t);return o&&(s.nestedFields=o),Object.keys(s).length>0?s:void 0},"getFieldChanges"),U=c((e=[],t=[])=>{let s=e.filter(ne),a=t.filter(ne),o=new Map(s.map((b,u)=>[b.name,{field:b,index:u}])),y=new Map(a.map((b,u)=>[b.name,{field:b,index:u}])),f=[],l=[],v=[],r=[],p=[],h=new Map;return y.forEach((b,u)=>{o.has(u)||(f.push(u),h.set(u,{fieldName:u,diffType:"added"}))}),o.forEach(({field:b,index:u},g)=>{if(!y.has(g))l.push(g),h.set(g,{fieldName:g,diffType:"removed"});else{let{field:T,index:N}=y.get(g);re(b,T,u,N)?u!==N&&!re(b,T,u,u)?(p.push(g),h.set(g,{fieldName:g,diffType:"unchanged",orderChanged:{oldIndex:u,newIndex:N}})):(v.push(g),h.set(g,{fieldName:g,diffType:"modified",orderChanged:u!==N?{oldIndex:u,newIndex:N}:void 0,changes:Ne(b,T)})):(r.push(g),h.set(g,{fieldName:g,diffType:"unchanged"}))}}),{added:f,removed:l,modified:v,unchanged:r,reordered:p,fieldDiffs:h}},"compareFormFields"),oe=c((e,t)=>{if(t&&e==="unchanged")return"bg-blue-50 border-l-4 border-blue-500";switch(e){case"added":return"bg-green-50 border-l-4 border-green-500";case"removed":return"bg-red-50 border-l-4 border-red-500";case"modified":return"bg-yellow-50 border-l-4 border-yellow-500";default:return""}},"getDiffStyles");import{useMemo as de,useRef as $,useEffect as Se}from"react";import{jsx as n,jsxs as m}from"react/jsx-runtime";var Te=c(({children:e,diffType:t,orderChanged:s,changes:a})=>{let o=oe(t,!!s);if(t==="unchanged"&&!s)return n("div",{children:e});let l=s&&t==="unchanged"&&n("span",{className:"text-xs font-semibold text-blue-700 bg-blue-100 px-2 py-1 rounded",children:"MOVED"})||t!=="unchanged"&&{added:n("span",{className:"text-xs font-semibold text-green-700 bg-green-100 px-2 py-1 rounded",children:"NEW"}),removed:n("span",{className:"text-xs font-semibold text-red-700 bg-red-100 px-2 py-1 rounded",children:"REMOVED"}),modified:n("span",{className:"text-xs font-semibold text-yellow-700 bg-yellow-100 px-2 py-1 rounded",children:"MODIFIED"})}[t],v=c(()=>{if(!a||t!=="modified")return null;let r=[];if(a.label&&r.push(m("div",{className:"text-xs",children:[n("span",{className:"font-semibold",children:"Label:"})," ",n("span",{className:"line-through text-red-600",children:a.label.old})," ","\u2192 ",n("span",{className:"text-green-600",children:a.label.new})]},"label")),a.required&&r.push(m("div",{className:"text-xs",children:[n("span",{className:"font-semibold",children:"Required:"})," ",n("span",{className:"line-through text-red-600",children:a.required.old?"Yes":"No"})," ","\u2192"," ",n("span",{className:"text-green-600",children:a.required.new?"Yes":"No"})]},"required")),a.type&&r.push(m("div",{className:"text-xs",children:[n("span",{className:"font-semibold",children:"Type:"})," ",n("span",{className:"line-through text-red-600",children:a.type.old})," ","\u2192 ",n("span",{className:"text-green-600",children:a.type.new})]},"type")),a.inputType&&r.push(m("div",{className:"text-xs",children:[n("span",{className:"font-semibold",children:"Input Type:"})," ",n("span",{className:"line-through text-red-600",children:a.inputType.old})," ","\u2192 ",n("span",{className:"text-green-600",children:a.inputType.new})]},"inputType")),a.jsonType){let p=Array.isArray(a.jsonType.old)?a.jsonType.old.join(" | "):a.jsonType.old,h=Array.isArray(a.jsonType.new)?a.jsonType.new.join(" | "):a.jsonType.new;r.push(m("div",{className:"text-xs",children:[n("span",{className:"font-semibold",children:"JSON Type:"})," ",n("span",{className:"line-through text-red-600",children:p})," \u2192"," ",n("span",{className:"text-green-600",children:h})]},"jsonType"))}return a.defaultValue!==void 0&&r.push(m("div",{className:"text-xs",children:[n("span",{className:"font-semibold",children:"Default Value:"})," ",n("span",{className:"line-through text-red-600",children:JSON.stringify(a.defaultValue.old)})," ","\u2192"," ",n("span",{className:"text-green-600",children:JSON.stringify(a.defaultValue.new)})]},"defaultValue")),a.options&&(a.options.added.length>0&&r.push(m("div",{className:"text-xs",children:[n("span",{className:"font-semibold text-green-700",children:"Options Added:"})," ",a.options.added.map(p=>p.label).join(", ")]},"options-added")),a.options.removed.length>0&&r.push(m("div",{className:"text-xs",children:[n("span",{className:"font-semibold text-red-700",children:"Options Removed:"})," ",a.options.removed.map(p=>p.label).join(", ")]},"options-removed")),a.options.modified.length>0&&r.push(m("div",{className:"text-xs",children:[n("span",{className:"font-semibold",children:"Options Modified:"})," ",a.options.modified.length," option(s)"]},"options-modified"))),a.nestedFields&&a.nestedFields.length>0&&r.push(m("div",{className:"text-xs",children:[n("span",{className:"font-semibold",children:"Nested Fields:"})," ",a.nestedFields.length," field(s) changed"]},"nestedFields")),r.length===0?null:m("div",{className:"mt-2 p-2 bg-yellow-50 rounded border border-yellow-200 space-y-1",children:[n("div",{className:"text-xs font-semibold text-yellow-800 mb-1",children:"Changes:"}),r]})},"renderChanges");return m("div",{className:`p-3 mb-2 rounded ${o} relative`,children:[m("div",{className:"absolute top-2 right-2",children:[l,s&&t!=="unchanged"&&n("span",{className:"ml-2 text-xs text-gray-600",children:"(position changed)"})]}),e,v()]})},"FieldWrapper"),ie=c(({version:e,fields:t,fieldsets:s,diffMap:a,title:o,scrollRef:y})=>{let f=X({mode:"onBlur"}),l=de(()=>t.map(v=>{let r=a.get(v.name),p=r?.diffType||"unchanged",h=r?.orderChanged,b=r?.changes;return{...v,WrapperComponent:c(({children:u})=>n(Te,{diffType:p,fieldName:v.name,orderChanged:h,changes:b,children:u}),"WrapperComponent")}}),[t,a]);return m(V,{className:"h-full",children:[n(J,{children:m(j,{children:[o," - Version ",e]})}),n(D,{ref:y,className:"overflow-y-auto max-h-[600px]",children:n(Q,{...f,children:n("form",{className:"space-y-4",children:n(ae,{fields:l,fieldsets:s,fieldValues:{}})})})})]})},"FormPanel"),ue=c(({topVersion:e,bottomVersion:t,topFields:s,bottomFields:a,topFieldsets:o,bottomFieldsets:y,isLoading:f})=>{let l=de(()=>U(s,a),[s,a]),v=$(null),r=$(null),p=$(!1);if(Se(()=>{let b=v.current,u=r.current;if(!b||!u)return;let g=c(()=>{p.current||(p.current=!0,u.scrollTop=b.scrollTop,requestAnimationFrame(()=>{p.current=!1}))},"handleLeftScroll"),T=c(()=>{p.current||(p.current=!0,b.scrollTop=u.scrollTop,requestAnimationFrame(()=>{p.current=!1}))},"handleRightScroll");return b.addEventListener("scroll",g),u.addEventListener("scroll",T),()=>{b.removeEventListener("scroll",g),u.removeEventListener("scroll",T)}},[s,a]),f)return n("div",{className:"flex items-center justify-center h-96",children:m("div",{className:"text-center",children:[n("div",{className:"animate-spin rounded-full h-12 w-12 border-b-2 border-gray-900 mx-auto"}),n("p",{className:"mt-4 text-gray-600",children:"Loading schemas..."})]})});let h=l.added.length===0&&l.removed.length===0&&l.modified.length===0&&l.reordered.length===0;return m("div",{className:"space-y-6",children:[n(V,{children:n(D,{className:"pt-6",children:h?n("p",{className:"text-center text-gray-600",children:"No differences detected between the two versions"}):m("div",{className:"flex gap-6 justify-center",children:[l.added.length>0&&m("div",{className:"flex items-center gap-2",children:[n("span",{className:"w-4 h-4 bg-green-500 rounded"}),m("span",{className:"text-sm",children:[l.added.length," field",l.added.length>1?"s":""," ","added"]})]}),l.removed.length>0&&m("div",{className:"flex items-center gap-2",children:[n("span",{className:"w-4 h-4 bg-red-500 rounded"}),m("span",{className:"text-sm",children:[l.removed.length," field",l.removed.length>1?"s":""," removed"]})]}),l.modified.length>0&&m("div",{className:"flex items-center gap-2",children:[n("span",{className:"w-4 h-4 bg-yellow-500 rounded"}),m("span",{className:"text-sm",children:[l.modified.length," field",l.modified.length>1?"s":""," modified"]})]}),l.reordered.length>0&&m("div",{className:"flex items-center gap-2",children:[n("span",{className:"w-4 h-4 bg-blue-500 rounded"}),m("span",{className:"text-sm",children:[l.reordered.length," field",l.reordered.length>1?"s":""," reordered"]})]})]})})}),m("div",{className:"grid grid-cols-2 gap-6",children:[n(ie,{version:e,fields:s,fieldsets:o,diffMap:l.fieldDiffs,title:"Left",scrollRef:v}),n(ie,{version:t,fields:a,fieldsets:y,diffMap:l.fieldDiffs,title:"Right",scrollRef:r})]})]})},"SchemaFormComparison");var me=[{value:1,label:"v1 (Legacy)"},{value:3,label:"v3 (Recommended)"},{value:"latest",label:"Latest"}],z={ALB:[{value:"latest",label:"Latest"}],ARE:[{value:1,label:"v1"},{value:2,label:"v2"},{value:"latest",label:"Latest"}],ARG:[{value:"latest",label:"Latest"}],ARM:[{value:"latest",label:"Latest"}],AUS:[{value:"latest",label:"Latest"}],AUT:[{value:1,label:"v1"},{value:"latest",label:"Latest"}],BEL:[{value:"latest",label:"Latest"}],BGD:[{value:1,label:"v1"},{value:2,label:"v2"},{value:"latest",label:"Latest"}],BGR:[{value:1,label:"v1"},{value:2,label:"v2"},{value:"latest",label:"Latest"}],BIH:[{value:1,label:"v1"},{value:2,label:"v2"},{value:"latest",label:"Latest"}],BLR:[{value:1,label:"v1"},{value:"latest",label:"Latest"}],BOL:[{value:"latest",label:"Latest"}],BRA:[{value:"latest",label:"Latest"}],CAN:[{value:1,label:"v1"},{value:"latest",label:"Latest"}],CHE:[{value:1,label:"v1"},{value:"latest",label:"Latest"}],CHL:[{value:"latest",label:"Latest"}],CHN:[{value:1,label:"v1"},{value:2,label:"v2"},{value:"latest",label:"Latest"}],COL:[{value:"latest",label:"Latest"}],CRI:[{value:"latest",label:"Latest"}],CYP:[{value:"latest",label:"Latest"}],CZE:[{value:1,label:"v1"},{value:"latest",label:"Latest"}],DEU:[{value:1,label:"v1"},{value:2,label:"v2"},{value:"latest",label:"Latest"}],DNK:[{value:"latest",label:"Latest"}],DOM:[{value:"latest",label:"Latest"}],ECU:[{value:"latest",label:"Latest"}],EGY:[{value:1,label:"v1"},{value:"latest",label:"Latest"}],ESP:[{value:"latest",label:"Latest"}],EST:[{value:"latest",label:"Latest"}],FIN:[{value:"latest",label:"Latest"}],FRA:[{value:1,label:"v1"},{value:"latest",label:"Latest"}],FRA_SAS:[{value:"latest",label:"Latest"}],GBR:[{value:1,label:"v1"},{value:"latest",label:"Latest"}],GEO:[{value:"latest",label:"Latest"}],GRC:[{value:"latest",label:"Latest"}],GTM:[{value:"latest",label:"Latest"}],HKG:[{value:1,label:"v1"},{value:"latest",label:"Latest"}],HND:[{value:"latest",label:"Latest"}],HRV:[{value:"latest",label:"Latest"}],HUN:[{value:"latest",label:"Latest"}],IDN:[{value:"latest",label:"Latest"}],IND:[{value:1,label:"v1"},{value:"latest",label:"Latest"}],IRL:[{value:"latest",label:"Latest"}],ISL:[{value:1,label:"v1"},{value:"latest",label:"Latest"}],ISR:[{value:"latest",label:"Latest"}],ITA:[{value:"latest",label:"Latest"}],ITA_APL:[{value:"latest",label:"Latest"}],JAM:[{value:1,label:"v1"},{value:"latest",label:"Latest"}],JPN:[{value:1,label:"v1"},{value:"latest",label:"Latest"}],KEN:[{value:1,label:"v1"},{value:"latest",label:"Latest"}],KGZ:[{value:"latest",label:"Latest"}],KHM:[{value:"latest",label:"Latest"}],KOR:[{value:1,label:"v1"},{value:2,label:"v2"},{value:"latest",label:"Latest"}],LBN:[{value:1,label:"v1"},{value:"latest",label:"Latest"}],LKA:[{value:1,label:"v1"},{value:2,label:"v2"},{value:"latest",label:"Latest"}],LTU:[{value:"latest",label:"Latest"}],LUX:[{value:"latest",label:"Latest"}],LVA:[{value:1,label:"v1"},{value:"latest",label:"Latest"}],MAR:[{value:"latest",label:"Latest"}],MDA:[{value:"latest",label:"Latest"}],MEX:[{value:1,label:"v1"},{value:"latest",label:"Latest"}],MKD:[{value:1,label:"v1"},{value:2,label:"v2"},{value:"latest",label:"Latest"}],MLT:[{value:"latest",label:"Latest"}],MNG:[{value:"latest",label:"Latest"}],MUS:[{value:1,label:"v1"},{value:"latest",label:"Latest"}],MYS:[{value:1,label:"v1"},{value:"latest",label:"Latest"}],NGA:[{value:1,label:"v1"},{value:"latest",label:"Latest"}],NIC:[{value:"latest",label:"Latest"}],NLD:[{value:"latest",label:"Latest"}],NOR:[{value:1,label:"v1"},{value:"latest",label:"Latest"}],NZL:[{value:1,label:"v1"},{value:"latest",label:"Latest"}],PAK:[{value:1,label:"v1"},{value:"latest",label:"Latest"}],PAN:[{value:"latest",label:"Latest"}],PER:[{value:"latest",label:"Latest"}],PHL:[{value:"latest",label:"Latest"}],POL:[{value:"latest",label:"Latest"}],PRI:[{value:"latest",label:"Latest"}],PRT:[{value:1,label:"v1"},{value:2,label:"v2"},{value:"latest",label:"Latest"}],PRY:[{value:"latest",label:"Latest"}],ROU:[{value:"latest",label:"Latest"}],SAU:[{value:1,label:"v1"},{value:"latest",label:"Latest"}],SGP:[{value:1,label:"v1"},{value:"latest",label:"Latest"}],SLV:[{value:"latest",label:"Latest"}],SRB:[{value:1,label:"v1"},{value:2,label:"v2"},{value:"latest",label:"Latest"}],SVK:[{value:"latest",label:"Latest"}],SVN:[{value:1,label:"v1"},{value:2,label:"v2"},{value:"latest",label:"Latest"}],SWE:[{value:1,label:"v1"},{value:"latest",label:"Latest"}],THA:[{value:1,label:"v1"},{value:"latest",label:"Latest"}],TUN:[{value:1,label:"v1"},{value:2,label:"v2"},{value:"latest",label:"Latest"}],TUR:[{value:"latest",label:"Latest"}],TWN:[{value:"latest",label:"Latest"}],UGA:[{value:"latest",label:"Latest"}],UKR:[{value:"latest",label:"Latest"}],URY:[{value:"latest",label:"Latest"}],USA:[{value:"latest",label:"Latest"}],VNM:[{value:"latest",label:"Latest"}],XKX:[{value:"latest",label:"Latest"}],ZAF:[{value:"latest",label:"Latest"}],ZWE:[{value:"latest",label:"Latest"}]},pe=Object.fromEntries(Object.entries(z).filter(([,e])=>e.length>1)),ce=[{value:"employment_basic_information",label:"Basic Information"},{value:"contract_details",label:"Contract Details"}];import{jsx as i,jsxs as L}from"react/jsx-runtime";var ve=c(()=>{let[e,t]=B("employment_basic_information"),[s,a]=B(1),[o,y]=B(1),[f,l]=B("ARE"),{client:v}=ee(),{data:r}=we({...te(v,"schema-comparison"),select:c(d=>d.data?.data?.filter(C=>C.eor_onboarding).filter(C=>Object.keys(pe).includes(C.code)).map(C=>({label:C.name,value:C.code}))||[],"select")}),p=e==="contract_details",{data:h,isLoading:b}=q({countryCode:f,form:e,fieldValues:{},jsonSchemaVersion:s,options:{queryOptions:{enabled:!0}}}),{data:u,isLoading:g}=q({countryCode:f,form:e,fieldValues:{},jsonSchemaVersion:o,options:{queryOptions:{enabled:!0}}}),T=b||g,N=z[f],Z=N!==void 0,w=Fe(()=>e==="employment_basic_information"?me:N||[{value:"latest",label:"Latest"}],[e,N]);return Ce(()=>{let d=w.map(C=>C.value);d.includes(s)||a(w[0].value),d.includes(o)||y(w[0].value)},[e,f,w,s,o]),L("div",{className:"space-y-6",children:[L(V,{children:[i(J,{children:i(j,{children:"Configuration"})}),L(D,{className:"space-y-4",children:[L("div",{children:[i(R,{className:"mb-2 block",children:"Form Type"}),i(G,{value:e,onValueChange:d=>t(d),children:i(Y,{className:"grid w-full grid-cols-2",children:ce.map(d=>i(W,{value:d.value,children:d.label},d.value))})})]}),p&&!Z&&i("div",{className:"rounded-md bg-yellow-50 p-4 border border-yellow-200",children:L("div",{className:"flex",children:[i("div",{className:"flex-shrink-0",children:i("svg",{className:"h-5 w-5 text-yellow-400",viewBox:"0 0 20 20",fill:"currentColor",children:i("path",{fillRule:"evenodd",d:"M8.257 3.099c.765-1.36 2.722-1.36 3.486 0l5.58 9.92c.75 1.334-.213 2.98-1.742 2.98H4.42c-1.53 0-2.493-1.646-1.743-2.98l5.58-9.92zM11 13a1 1 0 11-2 0 1 1 0 012 0zm-1-8a1 1 0 00-1 1v3a1 1 0 002 0V6a1 1 0 00-1-1z",clipRule:"evenodd"})})}),L("div",{className:"ml-3",children:[i("h3",{className:"text-sm font-medium text-yellow-800",children:"Version mappings not found"}),i("div",{className:"mt-2 text-sm text-yellow-700",children:L("p",{children:["Country"," ",i("span",{className:"font-semibold",children:f})," is not configured in COUNTRY_CONTRACT_VERSIONS. Using default (latest only)."]})})]})]})}),p&&L("div",{children:[i(R,{htmlFor:"country-select",className:"mb-2 block",children:"Country"}),L(P,{value:f,onValueChange:l,children:[i(M,{id:"country-select",children:i(E,{placeholder:"Select a country"})}),i(I,{children:r?.map(d=>i(_,{value:d.value,children:d.label},d.value))})]})]}),L("div",{className:"grid grid-cols-2 gap-4",children:[L("div",{children:[i(R,{htmlFor:"top-version",className:"mb-2 block",children:"Left Version"}),L(P,{value:String(s),onValueChange:d=>a(d==="latest"?"latest":Number(d)),children:[i(M,{id:"top-version",children:i(E,{placeholder:"Select version"})}),i(I,{children:w.map(d=>i(_,{value:String(d.value),children:d.label},String(d.value)))})]})]}),L("div",{children:[i(R,{htmlFor:"bottom-version",className:"mb-2 block",children:"Right Version"}),L(P,{value:String(o),onValueChange:d=>y(d==="latest"?"latest":Number(d)),children:[i(M,{id:"bottom-version",children:i(E,{placeholder:"Select version"})}),i(I,{children:w.map(d=>i(_,{value:String(d.value),children:d.label},String(d.value)))})]})]})]})]})]}),i(ue,{topVersion:s,bottomVersion:o,topFields:h?.fields||[],bottomFields:u?.fields||[],topFieldsets:h?.meta?.["x-jsf-fieldsets"],bottomFieldsets:u?.meta?.["x-jsf-fieldsets"],isLoading:T})]})},"JsonSchemaComparison");export{be as a,fe as b,ge as c,G as d,Y as e,W as f,ye as g,le as h,ve as i};
|
|
2
|
+
//# sourceMappingURL=chunk-UITO344H.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/ui/collapsible.tsx","../src/components/ui/tabs.tsx","../src/components/ui/scroll-area.tsx","../src/components/JsonSchemaComparison/JsonSchemaComparison.tsx","../src/components/JsonSchemaComparison/formDiffDetector.ts","../src/components/JsonSchemaComparison/SchemaFormComparison.tsx","../src/components/JsonSchemaComparison/schemaVersions.ts"],"sourcesContent":["import * as CollapsiblePrimitive from '@radix-ui/react-collapsible';\n\nconst Collapsible = CollapsiblePrimitive.Root;\n\nconst CollapsibleTrigger = CollapsiblePrimitive.CollapsibleTrigger;\n\nconst CollapsibleContent = CollapsiblePrimitive.CollapsibleContent;\n\nexport { Collapsible, CollapsibleTrigger, CollapsibleContent };\n","import * as React from 'react';\nimport * as TabsPrimitive from '@radix-ui/react-tabs';\n\nimport { cn } from '@/src/lib/utils';\n\nfunction Tabs({\n className,\n ...props\n}: React.ComponentProps<typeof TabsPrimitive.Root>) {\n return (\n <TabsPrimitive.Root\n data-slot='tabs'\n className={cn('flex flex-col gap-2', className)}\n {...props}\n />\n );\n}\n\nfunction TabsList({\n className,\n ...props\n}: React.ComponentProps<typeof TabsPrimitive.List>) {\n return (\n <TabsPrimitive.List\n data-slot='tabs-list'\n className={cn(\n 'bg-muted text-muted-foreground inline-flex h-9 w-fit items-center justify-center rounded-lg p-1',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction TabsTrigger({\n className,\n ...props\n}: React.ComponentProps<typeof TabsPrimitive.Trigger>) {\n return (\n <TabsPrimitive.Trigger\n data-slot='tabs-trigger'\n className={cn(\n \"data-[state=active]:bg-background data-[state=active]:text-foreground focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:outline-ring inline-flex flex-1 items-center justify-center gap-1.5 rounded-md px-2 py-1 text-sm font-medium whitespace-nowrap transition-[color,box-shadow] focus-visible:ring-[3px] focus-visible:outline-1 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:shadow-sm [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction TabsContent({\n className,\n ...props\n}: React.ComponentProps<typeof TabsPrimitive.Content>) {\n return (\n <TabsPrimitive.Content\n data-slot='tabs-content'\n className={cn('flex-1 outline-none', className)}\n {...props}\n />\n );\n}\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent };\n","import * as React from 'react';\nimport * as ScrollAreaPrimitive from '@radix-ui/react-scroll-area';\n\nimport { cn } from '@/src/lib/utils';\n\nconst ScrollArea = React.forwardRef<\n HTMLDivElement,\n React.ComponentPropsWithoutRef<typeof ScrollAreaPrimitive.Root>\n>(({ className, children, ...props }, ref) => (\n <ScrollAreaPrimitive.Root\n ref={ref}\n className={cn('relative overflow-hidden', className)}\n {...props}\n >\n <ScrollAreaPrimitive.Viewport className='h-full w-full rounded-[inherit]'>\n {children}\n </ScrollAreaPrimitive.Viewport>\n <ScrollBar />\n <ScrollAreaPrimitive.Corner />\n </ScrollAreaPrimitive.Root>\n));\nScrollArea.displayName = ScrollAreaPrimitive.Root.displayName;\n\nconst ScrollBar = React.forwardRef<\n HTMLDivElement,\n React.ComponentPropsWithoutRef<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>\n>(({ className, orientation = 'vertical', ...props }, ref) => (\n <ScrollAreaPrimitive.ScrollAreaScrollbar\n ref={ref}\n orientation={orientation}\n className={cn(\n 'flex touch-none select-none transition-colors',\n orientation === 'vertical' &&\n 'h-full w-2.5 border-l border-l-transparent p-[1px]',\n orientation === 'horizontal' &&\n 'h-2.5 flex-col border-t border-t-transparent p-[1px]',\n className,\n )}\n {...props}\n >\n <ScrollAreaPrimitive.ScrollAreaThumb className='relative flex-1 rounded-full bg-border' />\n </ScrollAreaPrimitive.ScrollAreaScrollbar>\n));\nScrollBar.displayName = ScrollAreaPrimitive.ScrollAreaScrollbar.displayName;\n\nexport { ScrollArea, ScrollBar };\n","import { useState, useEffect, useMemo } from 'react';\nimport { useQuery } from '@tanstack/react-query';\nimport {\n Card,\n CardContent,\n CardHeader,\n CardTitle,\n} from '@/src/components/ui/card';\nimport { Label } from '@/src/components/ui/label';\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '@/src/components/ui/select';\nimport { Tabs, TabsList, TabsTrigger } from '@/src/components/ui/tabs';\nimport { useJSONSchemaForm } from '@/src/flows/Onboarding/api';\nimport { SchemaFormComparison } from './SchemaFormComparison';\nimport {\n BASIC_INFO_VERSIONS,\n COUNTRY_CONTRACT_VERSIONS,\n COUNTRY_CONTRACT_VERSIONS_WITH_MULTIPLE_VERSIONS,\n FORM_TYPES,\n type FormType,\n type SchemaVersion,\n} from './schemaVersions';\nimport { countriesOptions } from '@/src/common/api/countries';\nimport { useClient } from '@/src/context';\nimport type { Client } from '@/src/client/client';\nimport { JSFField } from '@/src/types/remoteFlows';\n\nexport const JsonSchemaComparison = () => {\n const [formType, setFormType] = useState<FormType>(\n 'employment_basic_information',\n );\n const [topVersion, setTopVersion] = useState<SchemaVersion>(1);\n const [bottomVersion, setBottomVersion] = useState<SchemaVersion>(1);\n const [countryCode, setCountryCode] = useState<string>('ARE');\n\n const { client } = useClient();\n\n const { data: countriesData } = useQuery({\n ...countriesOptions(client as Client, 'schema-comparison'),\n select: (response) =>\n response.data?.data\n ?.filter(\n (country: { eor_onboarding?: boolean }) => country.eor_onboarding,\n )\n .filter((country: { code: string }) =>\n Object.keys(\n COUNTRY_CONTRACT_VERSIONS_WITH_MULTIPLE_VERSIONS,\n ).includes(country.code),\n )\n .map((country: { name: string; code: string }) => ({\n label: country.name,\n value: country.code,\n })) || [],\n });\n\n const isContractDetails = formType === 'contract_details';\n\n const { data: topSchema, isLoading: isLoadingTop } = useJSONSchemaForm({\n countryCode: countryCode,\n form: formType,\n fieldValues: {},\n jsonSchemaVersion: topVersion,\n options: {\n queryOptions: {\n enabled: true,\n },\n },\n });\n\n const { data: bottomSchema, isLoading: isLoadingBottom } = useJSONSchemaForm({\n countryCode: countryCode,\n form: formType,\n fieldValues: {},\n jsonSchemaVersion: bottomVersion,\n options: {\n queryOptions: {\n enabled: true,\n },\n },\n });\n\n const isLoading = isLoadingTop || isLoadingBottom;\n\n const countryVersions = COUNTRY_CONTRACT_VERSIONS[countryCode];\n const hasCountryMapping = countryVersions !== undefined;\n\n const versionOptions = useMemo(() => {\n return formType === 'employment_basic_information'\n ? BASIC_INFO_VERSIONS\n : countryVersions || [{ value: 'latest', label: 'Latest' }];\n }, [formType, countryVersions]);\n\n useEffect(() => {\n const availableVersionValues = versionOptions.map((v) => v.value);\n\n if (!availableVersionValues.includes(topVersion)) {\n // WE NEED TO FIX: react-hooks/set-state-in-effect - Calling setState synchronously within an effect can trigger cascading renders\n // eslint-disable-next-line react-hooks/set-state-in-effect\n setTopVersion(versionOptions[0].value);\n }\n if (!availableVersionValues.includes(bottomVersion)) {\n setBottomVersion(versionOptions[0].value);\n }\n }, [formType, countryCode, versionOptions, topVersion, bottomVersion]);\n\n return (\n <div className='space-y-6'>\n <Card>\n <CardHeader>\n <CardTitle>Configuration</CardTitle>\n </CardHeader>\n <CardContent className='space-y-4'>\n <div>\n <Label className='mb-2 block'>Form Type</Label>\n <Tabs\n value={formType}\n onValueChange={(value) => setFormType(value as FormType)}\n >\n <TabsList className='grid w-full grid-cols-2'>\n {FORM_TYPES.map((type) => (\n <TabsTrigger key={type.value} value={type.value}>\n {type.label}\n </TabsTrigger>\n ))}\n </TabsList>\n </Tabs>\n </div>\n\n {isContractDetails && !hasCountryMapping && (\n <div className='rounded-md bg-yellow-50 p-4 border border-yellow-200'>\n <div className='flex'>\n <div className='flex-shrink-0'>\n <svg\n className='h-5 w-5 text-yellow-400'\n viewBox='0 0 20 20'\n fill='currentColor'\n >\n <path\n fillRule='evenodd'\n d='M8.257 3.099c.765-1.36 2.722-1.36 3.486 0l5.58 9.92c.75 1.334-.213 2.98-1.742 2.98H4.42c-1.53 0-2.493-1.646-1.743-2.98l5.58-9.92zM11 13a1 1 0 11-2 0 1 1 0 012 0zm-1-8a1 1 0 00-1 1v3a1 1 0 002 0V6a1 1 0 00-1-1z'\n clipRule='evenodd'\n />\n </svg>\n </div>\n <div className='ml-3'>\n <h3 className='text-sm font-medium text-yellow-800'>\n Version mappings not found\n </h3>\n <div className='mt-2 text-sm text-yellow-700'>\n <p>\n Country{' '}\n <span className='font-semibold'>{countryCode}</span> is\n not configured in COUNTRY_CONTRACT_VERSIONS. Using default\n (latest only).\n </p>\n </div>\n </div>\n </div>\n </div>\n )}\n\n {isContractDetails && (\n <div>\n <Label htmlFor='country-select' className='mb-2 block'>\n Country\n </Label>\n <Select value={countryCode} onValueChange={setCountryCode}>\n <SelectTrigger id='country-select'>\n <SelectValue placeholder='Select a country' />\n </SelectTrigger>\n <SelectContent>\n {countriesData?.map(\n (country: { label: string; value: string }) => (\n <SelectItem key={country.value} value={country.value}>\n {country.label}\n </SelectItem>\n ),\n )}\n </SelectContent>\n </Select>\n </div>\n )}\n\n <div className='grid grid-cols-2 gap-4'>\n <div>\n <Label htmlFor='top-version' className='mb-2 block'>\n Left Version\n </Label>\n <Select\n value={String(topVersion)}\n onValueChange={(value) =>\n setTopVersion(value === 'latest' ? 'latest' : Number(value))\n }\n >\n <SelectTrigger id='top-version'>\n <SelectValue placeholder='Select version' />\n </SelectTrigger>\n <SelectContent>\n {versionOptions.map((version) => (\n <SelectItem\n key={String(version.value)}\n value={String(version.value)}\n >\n {version.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n\n <div>\n <Label htmlFor='bottom-version' className='mb-2 block'>\n Right Version\n </Label>\n <Select\n value={String(bottomVersion)}\n onValueChange={(value) =>\n setBottomVersion(\n value === 'latest' ? 'latest' : Number(value),\n )\n }\n >\n <SelectTrigger id='bottom-version'>\n <SelectValue placeholder='Select version' />\n </SelectTrigger>\n <SelectContent>\n {versionOptions.map((version) => (\n <SelectItem\n key={String(version.value)}\n value={String(version.value)}\n >\n {version.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n </div>\n </CardContent>\n </Card>\n\n <SchemaFormComparison\n topVersion={topVersion}\n bottomVersion={bottomVersion}\n topFields={(topSchema?.fields as JSFField[]) || []}\n bottomFields={(bottomSchema?.fields as JSFField[]) || []}\n topFieldsets={topSchema?.meta?.['x-jsf-fieldsets']}\n bottomFieldsets={bottomSchema?.meta?.['x-jsf-fieldsets']}\n isLoading={isLoading}\n />\n </div>\n );\n};\n","import type { $TSFixMe, JSFField } from '@/src/types/remoteFlows';\nimport equal from 'fast-deep-equal';\n\nexport type DiffType = 'added' | 'removed' | 'modified' | 'unchanged';\n\nexport interface FieldDiff {\n fieldName: string;\n diffType: DiffType;\n orderChanged?: { oldIndex: number; newIndex: number };\n changes?: {\n label?: { old: string; new: string };\n required?: { old: boolean; new: boolean };\n type?: { old: string; new: string };\n inputType?: { old: string; new: string };\n jsonType?: { old: string; new: string };\n defaultValue?: { old: unknown; new: unknown };\n minDate?: { old: string; new: string };\n maxDate?: { old: string; new: string };\n maxLength?: { old: number; new: number };\n multiple?: { old: boolean; new: boolean };\n isVisible?: { old: boolean; new: boolean };\n options?: {\n added: Array<{ value: string; label: string }>;\n removed: Array<{ value: string; label: string }>;\n modified: Array<{\n value: string;\n changes: { label?: { old: string; new: string } };\n }>;\n };\n nestedFields?: FieldDiff[];\n };\n}\n\nexport interface FormDiff {\n added: string[];\n removed: string[];\n modified: string[];\n unchanged: string[];\n reordered: string[];\n fieldDiffs: Map<string, FieldDiff>;\n}\n\nconst validateField = (field: JSFField): boolean => {\n if (!field.name) {\n console.warn('Field missing required \"name\" property:', field);\n return false;\n }\n if (!field.type) {\n console.warn(`Field \"${field.name}\" missing required \"type\" property`);\n return false;\n }\n return true;\n};\n\nconst compareOptions = (\n options1: JSFField['options'],\n options2: JSFField['options'],\n):\n | {\n added: Array<{ value: string; label: string }>;\n removed: Array<{ value: string; label: string }>;\n modified: Array<{\n value: string;\n changes: { label?: { old: string; new: string } };\n }>;\n }\n | undefined => {\n if (equal(options1, options2)) return undefined;\n\n const map1 = new Map((options1 || []).map((o) => [o.value, o]));\n const map2 = new Map((options2 || []).map((o) => [o.value, o]));\n\n const added: Array<{ value: string; label: string }> = [];\n const removed: Array<{ value: string; label: string }> = [];\n const modified: Array<{\n value: string;\n changes: { label?: { old: string; new: string } };\n }> = [];\n\n map2.forEach((option, value) => {\n if (!map1.has(value)) {\n added.push({ value: option.value, label: option.label });\n }\n });\n\n map1.forEach((option1, value) => {\n if (!map2.has(value)) {\n removed.push({ value: option1.value, label: option1.label });\n } else {\n const option2 = map2.get(value)!;\n if (!equal(option1, option2)) {\n const changes: { label?: { old: string; new: string } } = {};\n if (option1.label !== option2.label) {\n changes.label = { old: option1.label, new: option2.label };\n }\n if (Object.keys(changes).length > 0) {\n modified.push({ value, changes });\n }\n }\n }\n });\n\n if (added.length === 0 && removed.length === 0 && modified.length === 0) {\n return undefined;\n }\n\n return { added, removed, modified };\n};\n\nconst compareNestedFields = (\n field1: JSFField,\n field2: JSFField,\n): FieldDiff[] | undefined => {\n const nestedFields1 = (field1 as $TSFixMe).fields;\n\n const nestedFields2 = (field2 as $TSFixMe).fields;\n\n if (!nestedFields1 && !nestedFields2) return undefined;\n\n const nestedDiff = compareFormFields(\n nestedFields1 || [],\n nestedFields2 || [],\n );\n\n const hasChanges =\n nestedDiff.added.length > 0 ||\n nestedDiff.removed.length > 0 ||\n nestedDiff.modified.length > 0 ||\n nestedDiff.reordered.length > 0;\n\n if (!hasChanges) return undefined;\n\n return Array.from(nestedDiff.fieldDiffs.values());\n};\n\nconst isFieldModified = (\n field1: JSFField,\n field2: JSFField,\n index1: number,\n index2: number,\n): boolean => {\n if (index1 !== index2) {\n return true;\n }\n\n // Only compare user-facing schema properties, not internal/computed ones\n // Ignore: schema (Yup), computedAttributes, scopedJsonSchema, errorMessage, meta, description\n // Note: nested fields are checked via compareNestedFields to avoid deep equal with problematic properties\n const checks = {\n label: field1.label !== field2.label,\n required: field1.required !== field2.required,\n inputType: field1.inputType !== field2.inputType,\n type: field1.type !== field2.type,\n jsonType: !equal(field1.jsonType, field2.jsonType), // Use equal since jsonType can be an array like ['string', 'null']\n name: field1.name !== field2.name,\n defaultValue: field1.defaultValue !== field2.defaultValue,\n minDate: field1.minDate !== field2.minDate,\n maxDate: field1.maxDate !== field2.maxDate,\n maxLength: field1.maxLength !== field2.maxLength,\n multiple: field1.multiple !== field2.multiple,\n isVisible: field1.isVisible !== field2.isVisible,\n options: !equal(field1.options, field2.options),\n };\n\n // Check for nested field changes using compareNestedFields to avoid deep isEqual\n const hasNestedChanges = (() => {\n const nestedFields1 = (field1 as $TSFixMe).fields;\n const nestedFields2 = (field2 as $TSFixMe).fields;\n\n // If both undefined or null, no changes\n if (!nestedFields1 && !nestedFields2) return false;\n\n // If one is defined and the other isn't, there's a change\n if (!nestedFields1 || !nestedFields2) return true;\n\n // Recursively compare using our proper comparison logic\n const nestedDiff = compareFormFields(nestedFields1, nestedFields2);\n return (\n nestedDiff.added.length > 0 ||\n nestedDiff.removed.length > 0 ||\n nestedDiff.modified.length > 0 ||\n nestedDiff.reordered.length > 0\n );\n })();\n\n const isModified =\n Object.values(checks).some((check) => check) || hasNestedChanges;\n\n return isModified;\n};\n\nconst getFieldChanges = (field1: JSFField, field2: JSFField) => {\n const changes: FieldDiff['changes'] = {};\n\n if (field1.label !== field2.label) {\n changes.label = { old: field1.label, new: field2.label };\n }\n\n if (field1.required !== field2.required) {\n changes.required = { old: field1.required, new: field2.required };\n }\n\n if (field1.type !== field2.type) {\n changes.type = { old: field1.type, new: field2.type };\n }\n\n if (field1.inputType !== field2.inputType) {\n changes.inputType = {\n old: field1.inputType,\n new: field2.inputType,\n };\n }\n\n if (!equal(field1.jsonType, field2.jsonType)) {\n changes.jsonType = {\n old: field1.jsonType,\n new: field2.jsonType,\n };\n }\n\n if (!equal(field1.defaultValue, field2.defaultValue)) {\n changes.defaultValue = {\n old: field1.defaultValue,\n new: field2.defaultValue,\n };\n }\n\n if (field1.minDate !== field2.minDate) {\n changes.minDate = {\n old: field1.minDate || '',\n new: field2.minDate || '',\n };\n }\n\n if (field1.maxDate !== field2.maxDate) {\n changes.maxDate = {\n old: field1.maxDate || '',\n new: field2.maxDate || '',\n };\n }\n\n if (field1.maxLength !== field2.maxLength) {\n changes.maxLength = {\n old: field1.maxLength || 0,\n new: field2.maxLength || 0,\n };\n }\n\n if (field1.multiple !== field2.multiple) {\n changes.multiple = {\n old: field1.multiple || false,\n new: field2.multiple || false,\n };\n }\n\n if (field1.isVisible !== field2.isVisible) {\n changes.isVisible = {\n old: field1.isVisible,\n new: field2.isVisible,\n };\n }\n\n const optionsDiff = compareOptions(field1.options, field2.options);\n if (optionsDiff) {\n changes.options = optionsDiff;\n }\n\n const nestedFieldsDiff = compareNestedFields(field1, field2);\n if (nestedFieldsDiff) {\n changes.nestedFields = nestedFieldsDiff;\n }\n\n return Object.keys(changes).length > 0 ? changes : undefined;\n};\n\nexport const compareFormFields = (\n fields1: JSFField[] = [],\n fields2: JSFField[] = [],\n): FormDiff => {\n const validFields1 = fields1.filter(validateField);\n const validFields2 = fields2.filter(validateField);\n\n const fieldMap1 = new Map(\n validFields1.map((f, i) => [f.name, { field: f, index: i }]),\n );\n const fieldMap2 = new Map(\n validFields2.map((f, i) => [f.name, { field: f, index: i }]),\n );\n\n const added: string[] = [];\n const removed: string[] = [];\n const modified: string[] = [];\n const unchanged: string[] = [];\n const reordered: string[] = [];\n const fieldDiffs = new Map<string, FieldDiff>();\n\n fieldMap2.forEach((_, name) => {\n if (!fieldMap1.has(name)) {\n added.push(name);\n fieldDiffs.set(name, {\n fieldName: name,\n diffType: 'added',\n });\n }\n });\n\n fieldMap1.forEach(({ field: field1, index: index1 }, name) => {\n if (!fieldMap2.has(name)) {\n removed.push(name);\n fieldDiffs.set(name, {\n fieldName: name,\n diffType: 'removed',\n });\n } else {\n const { field: field2, index: index2 } = fieldMap2.get(name)!;\n\n if (isFieldModified(field1, field2, index1, index2)) {\n const onlyPositionChanged =\n index1 !== index2 && !isFieldModified(field1, field2, index1, index1);\n\n if (onlyPositionChanged) {\n reordered.push(name);\n fieldDiffs.set(name, {\n fieldName: name,\n diffType: 'unchanged',\n orderChanged: { oldIndex: index1, newIndex: index2 },\n });\n } else {\n modified.push(name);\n fieldDiffs.set(name, {\n fieldName: name,\n diffType: 'modified',\n orderChanged:\n index1 !== index2\n ? { oldIndex: index1, newIndex: index2 }\n : undefined,\n changes: getFieldChanges(field1, field2),\n });\n }\n } else {\n unchanged.push(name);\n fieldDiffs.set(name, {\n fieldName: name,\n diffType: 'unchanged',\n });\n }\n }\n });\n\n return {\n added,\n removed,\n modified,\n unchanged,\n reordered,\n fieldDiffs,\n };\n};\n\nexport const getDiffStyles = (\n diffType: DiffType,\n hasOrderChange?: boolean,\n): string => {\n if (hasOrderChange && diffType === 'unchanged') {\n return 'bg-blue-50 border-l-4 border-blue-500';\n }\n\n switch (diffType) {\n case 'added':\n return 'bg-green-50 border-l-4 border-green-500';\n case 'removed':\n return 'bg-red-50 border-l-4 border-red-500';\n case 'modified':\n return 'bg-yellow-50 border-l-4 border-yellow-500';\n case 'unchanged':\n default:\n return '';\n }\n};\n","import { JSONSchemaFormFields } from '@/src/components/form/JSONSchemaForm';\nimport { Form } from '@/src/components/ui/form';\nimport { useForm } from 'react-hook-form';\nimport {\n Card,\n CardContent,\n CardHeader,\n CardTitle,\n} from '@/src/components/ui/card';\nimport type { JSFField, JSFFieldset } from '@/src/types/remoteFlows';\nimport { compareFormFields, getDiffStyles } from './formDiffDetector';\nimport { useMemo, useRef, useEffect } from 'react';\n\ninterface SchemaFormComparisonProps {\n topVersion: string | number;\n bottomVersion: string | number;\n topFields: JSFField[];\n bottomFields: JSFField[];\n topFieldsets?: JSFFieldset | null;\n bottomFieldsets?: JSFFieldset | null;\n isLoading?: boolean;\n}\n\nconst FieldWrapper = ({\n children,\n diffType,\n orderChanged,\n changes,\n}: {\n children: React.ReactNode;\n diffType: 'added' | 'removed' | 'modified' | 'unchanged';\n fieldName: string;\n orderChanged?: { oldIndex: number; newIndex: number };\n changes?: {\n label?: { old: string; new: string };\n required?: { old: boolean; new: boolean };\n type?: { old: string; new: string };\n inputType?: { old: string; new: string };\n jsonType?: { old: string; new: string };\n defaultValue?: { old: unknown; new: unknown };\n minDate?: { old: string; new: string };\n maxDate?: { old: string; new: string };\n maxLength?: { old: number; new: number };\n multiple?: { old: boolean; new: boolean };\n isVisible?: { old: boolean; new: boolean };\n options?: {\n added: Array<{ value: string; label: string }>;\n removed: Array<{ value: string; label: string }>;\n modified: Array<{\n value: string;\n changes: { label?: { old: string; new: string } };\n }>;\n };\n nestedFields?: unknown[];\n };\n}) => {\n const styles = getDiffStyles(diffType, !!orderChanged);\n\n if (diffType === 'unchanged' && !orderChanged) {\n return <div>{children}</div>;\n }\n\n const badges = {\n added: (\n <span className='text-xs font-semibold text-green-700 bg-green-100 px-2 py-1 rounded'>\n NEW\n </span>\n ),\n removed: (\n <span className='text-xs font-semibold text-red-700 bg-red-100 px-2 py-1 rounded'>\n REMOVED\n </span>\n ),\n modified: (\n <span className='text-xs font-semibold text-yellow-700 bg-yellow-100 px-2 py-1 rounded'>\n MODIFIED\n </span>\n ),\n };\n\n const reorderedBadge = orderChanged && diffType === 'unchanged' && (\n <span className='text-xs font-semibold text-blue-700 bg-blue-100 px-2 py-1 rounded'>\n MOVED\n </span>\n );\n\n const badge =\n reorderedBadge || (diffType !== 'unchanged' && badges[diffType]);\n\n const renderChanges = () => {\n if (!changes || diffType !== 'modified') return null;\n\n const changesList: React.ReactNode[] = [];\n\n if (changes.label) {\n changesList.push(\n <div key='label' className='text-xs'>\n <span className='font-semibold'>Label:</span>{' '}\n <span className='line-through text-red-600'>{changes.label.old}</span>{' '}\n → <span className='text-green-600'>{changes.label.new}</span>\n </div>,\n );\n }\n\n if (changes.required) {\n changesList.push(\n <div key='required' className='text-xs'>\n <span className='font-semibold'>Required:</span>{' '}\n <span className='line-through text-red-600'>\n {changes.required.old ? 'Yes' : 'No'}\n </span>{' '}\n →{' '}\n <span className='text-green-600'>\n {changes.required.new ? 'Yes' : 'No'}\n </span>\n </div>,\n );\n }\n\n if (changes.type) {\n changesList.push(\n <div key='type' className='text-xs'>\n <span className='font-semibold'>Type:</span>{' '}\n <span className='line-through text-red-600'>{changes.type.old}</span>{' '}\n → <span className='text-green-600'>{changes.type.new}</span>\n </div>,\n );\n }\n\n if (changes.inputType) {\n changesList.push(\n <div key='inputType' className='text-xs'>\n <span className='font-semibold'>Input Type:</span>{' '}\n <span className='line-through text-red-600'>\n {changes.inputType.old}\n </span>{' '}\n → <span className='text-green-600'>{changes.inputType.new}</span>\n </div>,\n );\n }\n\n if (changes.jsonType) {\n const oldJsonType = Array.isArray(changes.jsonType.old)\n ? changes.jsonType.old.join(' | ')\n : changes.jsonType.old;\n const newJsonType = Array.isArray(changes.jsonType.new)\n ? changes.jsonType.new.join(' | ')\n : changes.jsonType.new;\n\n changesList.push(\n <div key='jsonType' className='text-xs'>\n <span className='font-semibold'>JSON Type:</span>{' '}\n <span className='line-through text-red-600'>{oldJsonType}</span> →{' '}\n <span className='text-green-600'>{newJsonType}</span>\n </div>,\n );\n }\n\n if (changes.defaultValue !== undefined) {\n changesList.push(\n <div key='defaultValue' className='text-xs'>\n <span className='font-semibold'>Default Value:</span>{' '}\n <span className='line-through text-red-600'>\n {JSON.stringify(changes.defaultValue.old)}\n </span>{' '}\n →{' '}\n <span className='text-green-600'>\n {JSON.stringify(changes.defaultValue.new)}\n </span>\n </div>,\n );\n }\n\n if (changes.options) {\n if (changes.options.added.length > 0) {\n changesList.push(\n <div key='options-added' className='text-xs'>\n <span className='font-semibold text-green-700'>Options Added:</span>{' '}\n {changes.options.added.map((opt) => opt.label).join(', ')}\n </div>,\n );\n }\n if (changes.options.removed.length > 0) {\n changesList.push(\n <div key='options-removed' className='text-xs'>\n <span className='font-semibold text-red-700'>Options Removed:</span>{' '}\n {changes.options.removed.map((opt) => opt.label).join(', ')}\n </div>,\n );\n }\n if (changes.options.modified.length > 0) {\n changesList.push(\n <div key='options-modified' className='text-xs'>\n <span className='font-semibold'>Options Modified:</span>{' '}\n {changes.options.modified.length} option(s)\n </div>,\n );\n }\n }\n\n if (changes.nestedFields && changes.nestedFields.length > 0) {\n changesList.push(\n <div key='nestedFields' className='text-xs'>\n <span className='font-semibold'>Nested Fields:</span>{' '}\n {changes.nestedFields.length} field(s) changed\n </div>,\n );\n }\n\n if (changesList.length === 0) return null;\n\n return (\n <div className='mt-2 p-2 bg-yellow-50 rounded border border-yellow-200 space-y-1'>\n <div className='text-xs font-semibold text-yellow-800 mb-1'>\n Changes:\n </div>\n {changesList}\n </div>\n );\n };\n\n return (\n <div className={`p-3 mb-2 rounded ${styles} relative`}>\n <div className='absolute top-2 right-2'>\n {badge}\n {orderChanged && diffType !== 'unchanged' && (\n <span className='ml-2 text-xs text-gray-600'>(position changed)</span>\n )}\n </div>\n {children}\n {renderChanges()}\n </div>\n );\n};\n\nconst FormPanel = ({\n version,\n fields,\n fieldsets,\n diffMap,\n title,\n scrollRef,\n}: {\n version: string | number;\n fields: JSFField[];\n fieldsets?: JSFFieldset | null;\n diffMap: Map<\n string,\n {\n diffType: 'added' | 'removed' | 'modified' | 'unchanged';\n orderChanged?: { oldIndex: number; newIndex: number };\n changes?: unknown;\n }\n >;\n title: string;\n scrollRef?: React.RefObject<HTMLDivElement | null>;\n}) => {\n const form = useForm({\n mode: 'onBlur',\n });\n\n const fieldsWithWrappers = useMemo(() => {\n return fields.map((field) => {\n const diff = diffMap.get(field.name);\n const diffType = diff?.diffType || 'unchanged';\n const orderChanged = diff?.orderChanged;\n const changes = diff?.changes;\n\n return {\n ...field,\n WrapperComponent: ({ children }: { children: React.ReactNode }) => (\n <FieldWrapper\n diffType={diffType}\n fieldName={field.name}\n orderChanged={orderChanged}\n changes={changes as never}\n >\n {children}\n </FieldWrapper>\n ),\n };\n });\n }, [fields, diffMap]);\n\n return (\n <Card className='h-full'>\n <CardHeader>\n <CardTitle>\n {title} - Version {version}\n </CardTitle>\n </CardHeader>\n <CardContent ref={scrollRef} className='overflow-y-auto max-h-[600px]'>\n <Form {...form}>\n <form className='space-y-4'>\n <JSONSchemaFormFields\n fields={fieldsWithWrappers}\n fieldsets={fieldsets}\n fieldValues={{}}\n />\n </form>\n </Form>\n </CardContent>\n </Card>\n );\n};\n\nexport const SchemaFormComparison = ({\n topVersion,\n bottomVersion,\n topFields,\n bottomFields,\n topFieldsets,\n bottomFieldsets,\n isLoading,\n}: SchemaFormComparisonProps) => {\n const diff = useMemo(\n () => compareFormFields(topFields, bottomFields),\n [topFields, bottomFields],\n );\n\n const leftScrollRef = useRef<HTMLDivElement>(null);\n const rightScrollRef = useRef<HTMLDivElement>(null);\n const isSyncing = useRef(false);\n\n useEffect(() => {\n const leftEl = leftScrollRef.current;\n const rightEl = rightScrollRef.current;\n\n if (!leftEl || !rightEl) return;\n\n const handleLeftScroll = () => {\n if (isSyncing.current) return;\n isSyncing.current = true;\n rightEl.scrollTop = leftEl.scrollTop;\n requestAnimationFrame(() => {\n isSyncing.current = false;\n });\n };\n\n const handleRightScroll = () => {\n if (isSyncing.current) return;\n isSyncing.current = true;\n leftEl.scrollTop = rightEl.scrollTop;\n requestAnimationFrame(() => {\n isSyncing.current = false;\n });\n };\n\n leftEl.addEventListener('scroll', handleLeftScroll);\n rightEl.addEventListener('scroll', handleRightScroll);\n\n return () => {\n leftEl.removeEventListener('scroll', handleLeftScroll);\n rightEl.removeEventListener('scroll', handleRightScroll);\n };\n }, [topFields, bottomFields]);\n\n if (isLoading) {\n return (\n <div className='flex items-center justify-center h-96'>\n <div className='text-center'>\n <div className='animate-spin rounded-full h-12 w-12 border-b-2 border-gray-900 mx-auto'></div>\n <p className='mt-4 text-gray-600'>Loading schemas...</p>\n </div>\n </div>\n );\n }\n\n const hasNoDifferences =\n diff.added.length === 0 &&\n diff.removed.length === 0 &&\n diff.modified.length === 0 &&\n diff.reordered.length === 0;\n\n return (\n <div className='space-y-6'>\n <Card>\n <CardContent className='pt-6'>\n {hasNoDifferences ? (\n <p className='text-center text-gray-600'>\n No differences detected between the two versions\n </p>\n ) : (\n <div className='flex gap-6 justify-center'>\n {diff.added.length > 0 && (\n <div className='flex items-center gap-2'>\n <span className='w-4 h-4 bg-green-500 rounded'></span>\n <span className='text-sm'>\n {diff.added.length} field{diff.added.length > 1 ? 's' : ''}{' '}\n added\n </span>\n </div>\n )}\n {diff.removed.length > 0 && (\n <div className='flex items-center gap-2'>\n <span className='w-4 h-4 bg-red-500 rounded'></span>\n <span className='text-sm'>\n {diff.removed.length} field\n {diff.removed.length > 1 ? 's' : ''} removed\n </span>\n </div>\n )}\n {diff.modified.length > 0 && (\n <div className='flex items-center gap-2'>\n <span className='w-4 h-4 bg-yellow-500 rounded'></span>\n <span className='text-sm'>\n {diff.modified.length} field\n {diff.modified.length > 1 ? 's' : ''} modified\n </span>\n </div>\n )}\n {diff.reordered.length > 0 && (\n <div className='flex items-center gap-2'>\n <span className='w-4 h-4 bg-blue-500 rounded'></span>\n <span className='text-sm'>\n {diff.reordered.length} field\n {diff.reordered.length > 1 ? 's' : ''} reordered\n </span>\n </div>\n )}\n </div>\n )}\n </CardContent>\n </Card>\n\n <div className='grid grid-cols-2 gap-6'>\n <FormPanel\n version={topVersion}\n fields={topFields}\n fieldsets={topFieldsets}\n diffMap={diff.fieldDiffs}\n title='Left'\n scrollRef={leftScrollRef}\n />\n <FormPanel\n version={bottomVersion}\n fields={bottomFields}\n fieldsets={bottomFieldsets}\n diffMap={diff.fieldDiffs}\n title='Right'\n scrollRef={rightScrollRef}\n />\n </div>\n </div>\n );\n};\n","export type SchemaVersion = number | 'latest';\n\nexport interface VersionOption {\n value: SchemaVersion;\n label: string;\n}\n\nexport const BASIC_INFO_VERSIONS: VersionOption[] = [\n { value: 1, label: 'v1 (Legacy)' },\n { value: 3, label: 'v3 (Recommended)' },\n { value: 'latest', label: 'Latest' },\n];\n\n// AI generated from tiger\nexport const COUNTRY_CONTRACT_VERSIONS: Record<string, VersionOption[]> = {\n ALB: [{ value: 'latest', label: 'Latest' }],\n ARE: [\n { value: 1, label: 'v1' },\n { value: 2, label: 'v2' },\n { value: 'latest', label: 'Latest' },\n ],\n ARG: [{ value: 'latest', label: 'Latest' }],\n ARM: [{ value: 'latest', label: 'Latest' }],\n AUS: [{ value: 'latest', label: 'Latest' }],\n AUT: [\n { value: 1, label: 'v1' },\n { value: 'latest', label: 'Latest' },\n ],\n BEL: [{ value: 'latest', label: 'Latest' }],\n BGD: [\n { value: 1, label: 'v1' },\n { value: 2, label: 'v2' },\n { value: 'latest', label: 'Latest' },\n ],\n BGR: [\n { value: 1, label: 'v1' },\n { value: 2, label: 'v2' },\n { value: 'latest', label: 'Latest' },\n ],\n BIH: [\n { value: 1, label: 'v1' },\n { value: 2, label: 'v2' },\n { value: 'latest', label: 'Latest' },\n ],\n BLR: [\n { value: 1, label: 'v1' },\n { value: 'latest', label: 'Latest' },\n ],\n BOL: [{ value: 'latest', label: 'Latest' }],\n BRA: [{ value: 'latest', label: 'Latest' }],\n CAN: [\n { value: 1, label: 'v1' },\n { value: 'latest', label: 'Latest' },\n ],\n CHE: [\n { value: 1, label: 'v1' },\n { value: 'latest', label: 'Latest' },\n ],\n CHL: [{ value: 'latest', label: 'Latest' }],\n CHN: [\n { value: 1, label: 'v1' },\n { value: 2, label: 'v2' },\n { value: 'latest', label: 'Latest' },\n ],\n COL: [{ value: 'latest', label: 'Latest' }],\n CRI: [{ value: 'latest', label: 'Latest' }],\n CYP: [{ value: 'latest', label: 'Latest' }],\n CZE: [\n { value: 1, label: 'v1' },\n { value: 'latest', label: 'Latest' },\n ],\n DEU: [\n { value: 1, label: 'v1' },\n { value: 2, label: 'v2' },\n { value: 'latest', label: 'Latest' },\n ],\n DNK: [{ value: 'latest', label: 'Latest' }],\n DOM: [{ value: 'latest', label: 'Latest' }],\n ECU: [{ value: 'latest', label: 'Latest' }],\n EGY: [\n { value: 1, label: 'v1' },\n { value: 'latest', label: 'Latest' },\n ],\n ESP: [{ value: 'latest', label: 'Latest' }],\n EST: [{ value: 'latest', label: 'Latest' }],\n FIN: [{ value: 'latest', label: 'Latest' }],\n FRA: [\n { value: 1, label: 'v1' },\n { value: 'latest', label: 'Latest' },\n ],\n FRA_SAS: [{ value: 'latest', label: 'Latest' }],\n GBR: [\n { value: 1, label: 'v1' },\n { value: 'latest', label: 'Latest' },\n ],\n GEO: [{ value: 'latest', label: 'Latest' }],\n GRC: [{ value: 'latest', label: 'Latest' }],\n GTM: [{ value: 'latest', label: 'Latest' }],\n HKG: [\n { value: 1, label: 'v1' },\n { value: 'latest', label: 'Latest' },\n ],\n HND: [{ value: 'latest', label: 'Latest' }],\n HRV: [{ value: 'latest', label: 'Latest' }],\n HUN: [{ value: 'latest', label: 'Latest' }],\n IDN: [{ value: 'latest', label: 'Latest' }],\n IND: [\n { value: 1, label: 'v1' },\n { value: 'latest', label: 'Latest' },\n ],\n IRL: [{ value: 'latest', label: 'Latest' }],\n ISL: [\n { value: 1, label: 'v1' },\n { value: 'latest', label: 'Latest' },\n ],\n ISR: [{ value: 'latest', label: 'Latest' }],\n ITA: [{ value: 'latest', label: 'Latest' }],\n ITA_APL: [{ value: 'latest', label: 'Latest' }],\n JAM: [\n { value: 1, label: 'v1' },\n { value: 'latest', label: 'Latest' },\n ],\n JPN: [\n { value: 1, label: 'v1' },\n { value: 'latest', label: 'Latest' },\n ],\n KEN: [\n { value: 1, label: 'v1' },\n { value: 'latest', label: 'Latest' },\n ],\n KGZ: [{ value: 'latest', label: 'Latest' }],\n KHM: [{ value: 'latest', label: 'Latest' }],\n KOR: [\n { value: 1, label: 'v1' },\n { value: 2, label: 'v2' },\n { value: 'latest', label: 'Latest' },\n ],\n LBN: [\n { value: 1, label: 'v1' },\n { value: 'latest', label: 'Latest' },\n ],\n LKA: [\n { value: 1, label: 'v1' },\n { value: 2, label: 'v2' },\n { value: 'latest', label: 'Latest' },\n ],\n LTU: [{ value: 'latest', label: 'Latest' }],\n LUX: [{ value: 'latest', label: 'Latest' }],\n LVA: [\n { value: 1, label: 'v1' },\n { value: 'latest', label: 'Latest' },\n ],\n MAR: [{ value: 'latest', label: 'Latest' }],\n MDA: [{ value: 'latest', label: 'Latest' }],\n MEX: [\n { value: 1, label: 'v1' },\n { value: 'latest', label: 'Latest' },\n ],\n MKD: [\n { value: 1, label: 'v1' },\n { value: 2, label: 'v2' },\n { value: 'latest', label: 'Latest' },\n ],\n MLT: [{ value: 'latest', label: 'Latest' }],\n MNG: [{ value: 'latest', label: 'Latest' }],\n MUS: [\n { value: 1, label: 'v1' },\n { value: 'latest', label: 'Latest' },\n ],\n MYS: [\n { value: 1, label: 'v1' },\n { value: 'latest', label: 'Latest' },\n ],\n NGA: [\n { value: 1, label: 'v1' },\n { value: 'latest', label: 'Latest' },\n ],\n NIC: [{ value: 'latest', label: 'Latest' }],\n NLD: [{ value: 'latest', label: 'Latest' }],\n NOR: [\n { value: 1, label: 'v1' },\n { value: 'latest', label: 'Latest' },\n ],\n NZL: [\n { value: 1, label: 'v1' },\n { value: 'latest', label: 'Latest' },\n ],\n PAK: [\n { value: 1, label: 'v1' },\n { value: 'latest', label: 'Latest' },\n ],\n PAN: [{ value: 'latest', label: 'Latest' }],\n PER: [{ value: 'latest', label: 'Latest' }],\n PHL: [{ value: 'latest', label: 'Latest' }],\n POL: [{ value: 'latest', label: 'Latest' }],\n PRI: [{ value: 'latest', label: 'Latest' }],\n PRT: [\n { value: 1, label: 'v1' },\n { value: 2, label: 'v2' },\n { value: 'latest', label: 'Latest' },\n ],\n PRY: [{ value: 'latest', label: 'Latest' }],\n ROU: [{ value: 'latest', label: 'Latest' }],\n SAU: [\n { value: 1, label: 'v1' },\n { value: 'latest', label: 'Latest' },\n ],\n SGP: [\n { value: 1, label: 'v1' },\n { value: 'latest', label: 'Latest' },\n ],\n SLV: [{ value: 'latest', label: 'Latest' }],\n SRB: [\n { value: 1, label: 'v1' },\n { value: 2, label: 'v2' },\n { value: 'latest', label: 'Latest' },\n ],\n SVK: [{ value: 'latest', label: 'Latest' }],\n SVN: [\n { value: 1, label: 'v1' },\n { value: 2, label: 'v2' },\n { value: 'latest', label: 'Latest' },\n ],\n SWE: [\n { value: 1, label: 'v1' },\n { value: 'latest', label: 'Latest' },\n ],\n THA: [\n { value: 1, label: 'v1' },\n { value: 'latest', label: 'Latest' },\n ],\n TUN: [\n { value: 1, label: 'v1' },\n { value: 2, label: 'v2' },\n { value: 'latest', label: 'Latest' },\n ],\n TUR: [{ value: 'latest', label: 'Latest' }],\n TWN: [{ value: 'latest', label: 'Latest' }],\n UGA: [{ value: 'latest', label: 'Latest' }],\n UKR: [{ value: 'latest', label: 'Latest' }],\n URY: [{ value: 'latest', label: 'Latest' }],\n USA: [{ value: 'latest', label: 'Latest' }],\n VNM: [{ value: 'latest', label: 'Latest' }],\n XKX: [{ value: 'latest', label: 'Latest' }],\n ZAF: [{ value: 'latest', label: 'Latest' }],\n ZWE: [{ value: 'latest', label: 'Latest' }],\n};\n\nexport const COUNTRY_CONTRACT_VERSIONS_WITH_MULTIPLE_VERSIONS =\n Object.fromEntries(\n Object.entries(COUNTRY_CONTRACT_VERSIONS).filter(\n ([, versions]) => versions.length > 1,\n ),\n ) as Record<string, VersionOption[]>;\n\nexport const FORM_TYPES = [\n { value: 'employment_basic_information', label: 'Basic Information' },\n { value: 'contract_details', label: 'Contract Details' },\n] as const;\n\nexport type FormType = (typeof FORM_TYPES)[number]['value'];\n"],"mappings":"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","names":["CollapsiblePrimitive","Collapsible","CollapsibleTrigger","CollapsibleContent","TabsPrimitive","jsx","Tabs","className","props","cn","__name","TabsList","TabsTrigger","TabsContent","React","ScrollAreaPrimitive","jsx","jsxs","ScrollArea","className","children","props","ref","cn","ScrollBar","orientation","useState","useEffect","useMemo","useQuery","equal","validateField","__name","field","compareOptions","options1","options2","equal","map1","o","map2","added","removed","modified","option","value","option1","option2","changes","compareNestedFields","field1","field2","nestedFields1","nestedFields2","nestedDiff","compareFormFields","isFieldModified","index1","index2","checks","hasNestedChanges","check","getFieldChanges","optionsDiff","nestedFieldsDiff","fields1","fields2","validFields1","validFields2","fieldMap1","f","i","fieldMap2","unchanged","reordered","fieldDiffs","_","name","getDiffStyles","diffType","hasOrderChange","useMemo","useRef","useEffect","jsx","jsxs","FieldWrapper","__name","children","diffType","orderChanged","changes","styles","getDiffStyles","badge","renderChanges","changesList","oldJsonType","newJsonType","opt","FormPanel","version","fields","fieldsets","diffMap","title","scrollRef","form","useForm","fieldsWithWrappers","useMemo","field","diff","Card","CardHeader","CardTitle","CardContent","Form","JSONSchemaFormFields","SchemaFormComparison","topVersion","bottomVersion","topFields","bottomFields","topFieldsets","bottomFieldsets","isLoading","compareFormFields","leftScrollRef","useRef","rightScrollRef","isSyncing","useEffect","leftEl","rightEl","handleLeftScroll","handleRightScroll","hasNoDifferences","BASIC_INFO_VERSIONS","COUNTRY_CONTRACT_VERSIONS","COUNTRY_CONTRACT_VERSIONS_WITH_MULTIPLE_VERSIONS","versions","FORM_TYPES","jsx","jsxs","JsonSchemaComparison","__name","formType","setFormType","useState","topVersion","setTopVersion","bottomVersion","setBottomVersion","countryCode","setCountryCode","client","useClient","countriesData","useQuery","countriesOptions","response","country","COUNTRY_CONTRACT_VERSIONS_WITH_MULTIPLE_VERSIONS","isContractDetails","topSchema","isLoadingTop","useJSONSchemaForm","bottomSchema","isLoadingBottom","isLoading","countryVersions","COUNTRY_CONTRACT_VERSIONS","hasCountryMapping","versionOptions","useMemo","BASIC_INFO_VERSIONS","useEffect","availableVersionValues","v","Card","CardHeader","CardTitle","CardContent","Label","Tabs","value","TabsList","FORM_TYPES","type","TabsTrigger","Select","SelectTrigger","SelectValue","SelectContent","SelectItem","version","SchemaFormComparison"]}
|