@remoteoss/remote-flows 1.6.0 → 1.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ButtonDefault-NLDQHAWN.js +2 -0
- package/dist/CheckboxFieldDefault-QXABRJXG.js +2 -0
- package/dist/CountryFieldDefault-Q6N5AQVO.js +2 -0
- package/dist/DatePickerFieldDefault-HUP4TK2U.js +2 -0
- package/dist/DrawerDefault-5EYKRPS7.js +2 -0
- package/dist/EmailFieldDefault-3ES7SMDC.js +2 -0
- package/dist/FieldsetToggleButtonDefault-TPLNRX3E.js +2 -0
- package/dist/FileUploadFieldDefault-PNM6H64X.js +2 -0
- package/dist/MultiSelectFieldDefault-THD7TDWF.js +2 -0
- package/dist/NumberFieldDefault-PCH6RRDK.js +2 -0
- package/dist/PDFPreviewDefault-474JH3KB.js +2 -0
- package/dist/RadioGroupFieldDefault-E35Y2AK6.js +2 -0
- package/dist/SelectFieldDefault-NHDJRM5H.js +2 -0
- package/dist/StatementDefault-CSHXL3G2.js +2 -0
- package/dist/TableFieldDefault-N7MO2QJI.js +2 -0
- package/dist/TextAreaFieldDefault-OG4UM4DG.js +2 -0
- package/dist/TextFieldDefault-FECR4GRK.js +2 -0
- package/dist/WorkScheduleFieldDefault-G2MR2DBY.js +2 -0
- package/dist/ZendeskDrawerDefault-W3RCTVCH.js +2 -0
- package/dist/{chunk-4ZE3SM7X.js → chunk-25III46F.js} +2 -2
- package/dist/{chunk-2BTW5VQM.js → chunk-3JJEKIQ2.js} +2 -2
- package/dist/{chunk-X7EZIAZ3.js → chunk-3QNS3IZB.js} +2 -2
- package/dist/{chunk-I42KSW2T.js → chunk-3UJC7KHD.js} +2 -2
- package/dist/{chunk-QAN3JZ45.js → chunk-3WBZPCT5.js} +2 -2
- package/dist/chunk-3X36ZFNP.js +2 -0
- package/dist/chunk-3X36ZFNP.js.map +1 -0
- package/dist/chunk-4DLVQKMI.js +2 -0
- package/dist/{chunk-UIE54LHV.js.map → chunk-4DLVQKMI.js.map} +1 -1
- package/dist/chunk-4TRBNEI5.js +2 -0
- package/dist/{chunk-GBU46SLB.js.map → chunk-4TRBNEI5.js.map} +1 -1
- package/dist/{chunk-QVUSRZ2Z.js → chunk-5IHRUTHD.js} +2 -2
- package/dist/chunk-6FKIWCCE.js +2 -0
- package/dist/chunk-6FKIWCCE.js.map +1 -0
- package/dist/{chunk-6PCNMM3O.js → chunk-6JFRVHLF.js} +2 -2
- package/dist/chunk-6K3XJV4Z.js +2 -0
- package/dist/chunk-6K3XJV4Z.js.map +1 -0
- package/dist/{chunk-BLAVAEPN.js → chunk-7GI4ZVUE.js} +2 -2
- package/dist/{chunk-QAVVHKBD.js → chunk-7PKH5MYL.js} +2 -2
- package/dist/{chunk-R3V5AHPG.js → chunk-7QRAEME3.js} +2 -2
- package/dist/{chunk-CB3JGUXW.js → chunk-7SYE5KEV.js} +2 -2
- package/dist/{chunk-U7CW67TM.js → chunk-A24VPRL7.js} +2 -2
- package/dist/{chunk-OZQVMA77.js → chunk-A54D24NT.js} +2 -2
- package/dist/{chunk-5XAHIRL6.js → chunk-AFEID3JA.js} +2 -2
- package/dist/{chunk-TN37JYBC.js → chunk-AN5U7FWW.js} +2 -2
- package/dist/chunk-AQHD46DV.js +2 -0
- package/dist/chunk-AQHD46DV.js.map +1 -0
- package/dist/{chunk-GH3FNNAU.js → chunk-C2NROAMW.js} +2 -2
- package/dist/{chunk-B4L4JBSX.js → chunk-C4NXXY3X.js} +2 -2
- package/dist/{chunk-MM645EUX.js → chunk-CAV5SWVS.js} +2 -2
- package/dist/{chunk-5H3G7L52.js → chunk-CKA37AR5.js} +2 -2
- package/dist/{chunk-WMVZY6FJ.js → chunk-CNCOVTDL.js} +2 -2
- package/dist/{chunk-H3ZZYAI6.js → chunk-D4FBB5XW.js} +2 -2
- package/dist/{chunk-6ARN2SX2.js → chunk-EBFCYC35.js} +2 -2
- package/dist/{chunk-NIJG4TPU.js → chunk-EW36MHXP.js} +2 -2
- package/dist/chunk-EYHFPHIA.js +2 -0
- package/dist/chunk-EYHFPHIA.js.map +1 -0
- package/dist/{chunk-R3C7KEKY.js → chunk-F2VYTYIQ.js} +2 -2
- package/dist/{chunk-DMHT7EDE.js → chunk-FFHBDVTJ.js} +2 -2
- package/dist/{chunk-IEYH33EJ.js → chunk-FGJ46XOX.js} +2 -2
- package/dist/{chunk-LGIJO73Z.js → chunk-FJPY27YJ.js} +2 -2
- package/dist/{chunk-H3ZACNQ6.js → chunk-FLW5LACO.js} +2 -2
- package/dist/{chunk-LMCS6CV5.js → chunk-FSHTBJ6O.js} +2 -2
- package/dist/chunk-FYFW7DCQ.js +2 -0
- package/dist/chunk-FYFW7DCQ.js.map +1 -0
- package/dist/{chunk-CBISFVN7.js → chunk-FZ452U6M.js} +2 -2
- package/dist/chunk-GCWEOZBS.js +2 -0
- package/dist/chunk-GCWEOZBS.js.map +1 -0
- package/dist/{chunk-LYFET6KE.js → chunk-H2OBH7SK.js} +2 -2
- package/dist/{chunk-JVBZ42B2.js → chunk-H5VA2OWQ.js} +2 -2
- package/dist/chunk-HI2BVEWW.js +2 -0
- package/dist/chunk-HI2BVEWW.js.map +1 -0
- package/dist/{chunk-KOJ7XDQ3.js → chunk-I25DQACP.js} +2 -2
- package/dist/chunk-IEX4KZUY.js +2 -0
- package/dist/chunk-IEX4KZUY.js.map +1 -0
- package/dist/{chunk-B5YG3EGS.js → chunk-ILX4QHHH.js} +2 -2
- package/dist/{chunk-WSEW5QVP.js → chunk-IWXQUASB.js} +2 -2
- package/dist/chunk-JIZKHO7L.js +2 -0
- package/dist/chunk-JIZKHO7L.js.map +1 -0
- package/dist/{chunk-AYDY7FWS.js → chunk-JKEUTGPQ.js} +2 -2
- package/dist/{chunk-LAV3X727.js → chunk-JQ2ESL5O.js} +2 -2
- package/dist/chunk-JTLXUYOR.js +6 -0
- package/dist/chunk-JTLXUYOR.js.map +1 -0
- package/dist/{chunk-QN2JIZ46.js → chunk-JTSHX4RB.js} +2 -2
- package/dist/{chunk-UUMEBIYK.js → chunk-JVGFK6NK.js} +2 -2
- package/dist/{chunk-KNXCEMKN.js → chunk-JZNJIXGW.js} +2 -2
- package/dist/chunk-JZPN7DHV.js +2 -0
- package/dist/chunk-JZPN7DHV.js.map +1 -0
- package/dist/{chunk-CDFKL7PW.js → chunk-KAGAWJSJ.js} +2 -2
- package/dist/chunk-KRFK2QRV.js +2 -0
- package/dist/chunk-KRFK2QRV.js.map +1 -0
- package/dist/{chunk-2RLH6ZLY.js → chunk-KWJI2HKR.js} +2 -2
- package/dist/{chunk-L5IKPX6D.js → chunk-KXF27FC4.js} +2 -2
- package/dist/chunk-L34CQIPW.js +2 -0
- package/dist/chunk-L34CQIPW.js.map +1 -0
- package/dist/{chunk-ZDQ7TY2L.js → chunk-LGX2ABTK.js} +2 -2
- package/dist/{chunk-ZXNQJZCZ.js → chunk-LJJKRBFU.js} +2 -2
- package/dist/{chunk-MORWF4JC.js → chunk-ML56EPFW.js} +2 -2
- package/dist/{chunk-JSQCYWZR.js → chunk-MLXUOIBE.js} +2 -2
- package/dist/{chunk-JSQCYWZR.js.map → chunk-MLXUOIBE.js.map} +1 -1
- package/dist/{chunk-ARYTUUI7.js → chunk-MZNUCWQU.js} +2 -2
- package/dist/chunk-N4W7JU2D.js +2 -0
- package/dist/{chunk-3UDG4IJO.js.map → chunk-N4W7JU2D.js.map} +1 -1
- package/dist/chunk-NQURNHBL.js +2 -0
- package/dist/chunk-NQURNHBL.js.map +1 -0
- package/dist/chunk-OE7PRSME.js +2 -0
- package/dist/chunk-OE7PRSME.js.map +1 -0
- package/dist/{chunk-ABWZQODX.js → chunk-OJCKJPY5.js} +2 -2
- package/dist/{chunk-5RYRPEXE.js → chunk-OVTH3ZHO.js} +2 -2
- package/dist/chunk-OZWDFGLQ.js +2 -0
- package/dist/chunk-OZWDFGLQ.js.map +1 -0
- package/dist/chunk-P3QDMRCC.js +2 -0
- package/dist/chunk-P3QDMRCC.js.map +1 -0
- package/dist/chunk-PBJWPR2W.js +2 -0
- package/dist/chunk-PBJWPR2W.js.map +1 -0
- package/dist/{chunk-GL75LB2U.js → chunk-PGRQG254.js} +2 -2
- package/dist/chunk-Q3ALCPJN.js +2 -0
- package/dist/chunk-Q3ALCPJN.js.map +1 -0
- package/dist/{chunk-WCM4IVY5.js → chunk-Q4GRM3SL.js} +2 -2
- package/dist/{chunk-DJ2OL5GS.js → chunk-QMYU2SQX.js} +2 -2
- package/dist/{chunk-Y4TYVMFP.js → chunk-QS6RZEWL.js} +2 -2
- package/dist/{chunk-7GV5R7MH.js → chunk-RZS2WEOI.js} +2 -2
- package/dist/{chunk-HBU6CWZL.js → chunk-RZYFAL5X.js} +2 -2
- package/dist/{chunk-NN5RHS7I.js → chunk-S6OVT37M.js} +2 -2
- package/dist/{chunk-SPYWBPYJ.js → chunk-SNMKN5AK.js} +2 -2
- package/dist/chunk-SQWCXYE2.js +2 -0
- package/dist/chunk-SQWCXYE2.js.map +1 -0
- package/dist/{chunk-XFNPJE6N.js → chunk-SXB2L4I5.js} +2 -2
- package/dist/chunk-SXB2L4I5.js.map +1 -0
- package/dist/{chunk-TATL6AQD.js → chunk-THPH57GK.js} +2 -2
- package/dist/{chunk-Y7WX5NK5.js → chunk-TZPHBNNS.js} +2 -2
- package/dist/{chunk-OEJNLCZV.js → chunk-UBRRCAAI.js} +2 -2
- package/dist/chunk-UMOL4GLZ.js +2 -0
- package/dist/chunk-UMOL4GLZ.js.map +1 -0
- package/dist/chunk-UOY6KW7W.js +2 -0
- package/dist/chunk-UOY6KW7W.js.map +1 -0
- package/dist/{chunk-GNPHI7PB.js → chunk-VAWEOFUO.js} +2 -2
- package/dist/{chunk-DYG225ZX.js → chunk-VC6X3C2I.js} +2 -2
- package/dist/{chunk-FXQAB3WS.js → chunk-VIQQ3IHI.js} +2 -2
- package/dist/{chunk-JTCF2KPH.js → chunk-W6H74RYW.js} +2 -2
- package/dist/{chunk-GPRN5IXM.js → chunk-WD5DNUSS.js} +2 -2
- package/dist/chunk-WGMEOF72.js +2 -0
- package/dist/{chunk-54ZROEOA.js.map → chunk-WGMEOF72.js.map} +1 -1
- package/dist/{chunk-K5CZDOJG.js → chunk-WT6E5LO4.js} +2 -2
- package/dist/{chunk-7RSKNOPP.js → chunk-X64YQ67A.js} +2 -2
- package/dist/{chunk-4RFJXFQX.js → chunk-XDZFLJ5F.js} +2 -2
- package/dist/{chunk-ZLPAQQZI.js → chunk-XIEA775Q.js} +2 -2
- package/dist/{chunk-A2X35B6C.js → chunk-XOK3XCYN.js} +2 -2
- package/dist/{chunk-4Z2ZRDMG.js → chunk-XSG4QXPY.js} +2 -2
- package/dist/{chunk-VIS2PVMT.js → chunk-XVU376WG.js} +2 -2
- package/dist/chunk-YHD2RXJC.js +2 -0
- package/dist/chunk-YHD2RXJC.js.map +1 -0
- package/dist/{chunk-VMAPQGL4.js → chunk-YHIADGM3.js} +2 -2
- package/dist/{chunk-IF42CZJH.js → chunk-YRC6EEM3.js} +2 -2
- package/dist/{chunk-HMCTBCYH.js → chunk-YUQ3GDQI.js} +2 -2
- package/dist/{chunk-QBMOVG2D.js → chunk-YZ3POA3F.js} +2 -2
- package/dist/{chunk-BQXYHK4Z.js → chunk-ZCZX54AU.js} +2 -2
- package/dist/{chunk-XJPB4XV6.js → chunk-ZTBFYRNL.js} +2 -2
- package/dist/chunk-ZVUQDK2E.js +2 -0
- package/dist/default-components.d.ts +2 -2
- 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 -3
- package/dist/flows/ContractAmendment/ContractAmendmentFlow.js +1 -1
- package/dist/flows/ContractAmendment/ContractAmendmentForm.d.ts +1 -1
- package/dist/flows/ContractAmendment/ContractAmendmentForm.js +1 -1
- package/dist/flows/ContractAmendment/context.d.ts +3 -3
- package/dist/flows/ContractAmendment/hooks.d.ts +3 -3
- package/dist/flows/ContractAmendment/hooks.js +1 -1
- package/dist/flows/ContractAmendment/index.d.ts +3 -3
- package/dist/flows/ContractAmendment/index.js +1 -1
- package/dist/flows/ContractAmendment/types.d.ts +2 -2
- package/dist/flows/ContractAmendment/utils.d.ts +2 -2
- package/dist/flows/ContractorOnboarding/ContractorOnboarding.d.ts +6 -6
- package/dist/flows/ContractorOnboarding/ContractorOnboarding.js +1 -1
- package/dist/flows/ContractorOnboarding/api.d.ts +295 -3
- package/dist/flows/ContractorOnboarding/api.js +1 -1
- package/dist/flows/ContractorOnboarding/components/BasicInformationStep.d.ts +4 -4
- package/dist/flows/ContractorOnboarding/components/BasicInformationStep.js +1 -1
- package/dist/flows/ContractorOnboarding/components/ContractDetailsStep.d.ts +6 -6
- package/dist/flows/ContractorOnboarding/components/ContractDetailsStep.js +1 -1
- package/dist/flows/ContractorOnboarding/components/ContractPreviewHeader.d.ts +2 -2
- package/dist/flows/ContractorOnboarding/components/ContractPreviewStatement.d.ts +2 -2
- package/dist/flows/ContractorOnboarding/components/ContractPreviewStatement.js +1 -1
- package/dist/flows/ContractorOnboarding/components/ContractPreviewStep.d.ts +6 -6
- package/dist/flows/ContractorOnboarding/components/ContractPreviewStep.js +1 -1
- package/dist/flows/ContractorOnboarding/components/ContractReviewButton.js +1 -1
- package/dist/flows/ContractorOnboarding/components/ContractorOnboardingForm.d.ts +5 -5
- package/dist/flows/ContractorOnboarding/components/ContractorOnboardingForm.js +1 -1
- package/dist/flows/ContractorOnboarding/components/OnboardingBack.js +1 -1
- package/dist/flows/ContractorOnboarding/components/OnboardingInvite.d.ts +3 -3
- package/dist/flows/ContractorOnboarding/components/OnboardingInvite.js +1 -1
- package/dist/flows/ContractorOnboarding/components/OnboardingSubmit.js +1 -1
- package/dist/flows/ContractorOnboarding/components/PricingPlan.d.ts +6 -6
- package/dist/flows/ContractorOnboarding/components/PricingPlan.js +1 -1
- package/dist/flows/ContractorOnboarding/components/SelectCountryStep.d.ts +4 -4
- package/dist/flows/ContractorOnboarding/components/SelectCountryStep.js +1 -1
- package/dist/flows/ContractorOnboarding/components/StatementOfWorkDisclaimer.d.ts +7 -0
- package/dist/flows/ContractorOnboarding/components/StatementOfWorkDisclaimer.js +2 -0
- package/dist/flows/ContractorOnboarding/components/StatementOfWorkDisclaimer.js.map +1 -0
- package/dist/flows/ContractorOnboarding/constants.d.ts +2 -1
- package/dist/flows/ContractorOnboarding/constants.js +1 -1
- package/dist/flows/ContractorOnboarding/context.d.ts +20 -7
- package/dist/flows/ContractorOnboarding/context.js +1 -1
- package/dist/flows/ContractorOnboarding/hooks.d.ts +6 -6
- package/dist/flows/ContractorOnboarding/hooks.js +1 -1
- package/dist/flows/ContractorOnboarding/index.d.ts +6 -6
- package/dist/flows/ContractorOnboarding/index.js +1 -1
- package/dist/flows/ContractorOnboarding/jsfModify.d.ts +46 -0
- package/dist/flows/ContractorOnboarding/jsfModify.js +2 -0
- package/dist/flows/ContractorOnboarding/jsfModify.js.map +1 -0
- package/dist/flows/ContractorOnboarding/types.d.ts +6 -6
- package/dist/flows/ContractorOnboarding/utils.d.ts +3 -11
- package/dist/flows/ContractorOnboarding/utils.js +1 -1
- package/dist/flows/CostCalculator/CostCalculatorFlow.d.ts +3 -3
- package/dist/flows/CostCalculator/CostCalculatorFlow.js +1 -1
- package/dist/flows/CostCalculator/CostCalculatorForm.d.ts +3 -3
- package/dist/flows/CostCalculator/CostCalculatorForm.js +1 -1
- package/dist/flows/CostCalculator/CostCalculatorResetButton.js +1 -1
- package/dist/flows/CostCalculator/CostCalculatorSubmitButton.js +1 -1
- package/dist/flows/CostCalculator/EstimationResults/EstimationResults.d.ts +2 -2
- package/dist/flows/CostCalculator/EstimationResults/EstimationResults.js +1 -1
- package/dist/flows/CostCalculator/SummaryResults/SummaryResults.d.ts +2 -2
- package/dist/flows/CostCalculator/SummaryResults/SummaryResults.js +1 -1
- package/dist/flows/CostCalculator/api.d.ts +2 -2
- package/dist/flows/CostCalculator/api.js +1 -1
- package/dist/flows/CostCalculator/components/SalaryField.d.ts +2 -2
- package/dist/flows/CostCalculator/components/SalaryField.js +1 -1
- package/dist/flows/CostCalculator/context.d.ts +3 -3
- package/dist/flows/CostCalculator/hooks.d.ts +3 -3
- package/dist/flows/CostCalculator/hooks.js +1 -1
- package/dist/flows/CostCalculator/index.d.ts +3 -3
- package/dist/flows/CostCalculator/index.js +1 -1
- package/dist/flows/CostCalculator/types.d.ts +2 -2
- package/dist/flows/CostCalculator/utils.d.ts +3 -3
- package/dist/flows/CostCalculator/utils.js +1 -1
- package/dist/flows/Onboarding/OnboardingFlow.d.ts +4 -4
- package/dist/flows/Onboarding/OnboardingFlow.js +1 -1
- package/dist/flows/Onboarding/api.d.ts +6 -6
- package/dist/flows/Onboarding/api.js +1 -1
- package/dist/flows/Onboarding/components/AnnualGrossSalary.d.ts +2 -2
- package/dist/flows/Onboarding/components/AnnualGrossSalary.js +1 -1
- package/dist/flows/Onboarding/components/BasicInformationStep.d.ts +4 -4
- package/dist/flows/Onboarding/components/BasicInformationStep.js +1 -1
- package/dist/flows/Onboarding/components/BenefitsStep.d.ts +4 -4
- package/dist/flows/Onboarding/components/BenefitsStep.js +1 -1
- package/dist/flows/Onboarding/components/ContractDetailsStep.d.ts +4 -4
- package/dist/flows/Onboarding/components/ContractDetailsStep.js +1 -1
- package/dist/flows/Onboarding/components/OnboardingForm.d.ts +4 -4
- package/dist/flows/Onboarding/components/OnboardingForm.js +1 -1
- package/dist/flows/Onboarding/components/OnboardingInvite.d.ts +3 -3
- package/dist/flows/Onboarding/components/OnboardingInvite.js +1 -1
- package/dist/flows/Onboarding/components/ReviewStep.d.ts +4 -4
- package/dist/flows/Onboarding/components/SaveDraftButton.d.ts +3 -3
- package/dist/flows/Onboarding/components/SelectCountryStep.d.ts +4 -4
- package/dist/flows/Onboarding/components/SelectCountryStep.js +1 -1
- package/dist/flows/Onboarding/context.d.ts +7 -7
- package/dist/flows/Onboarding/hooks.d.ts +4 -4
- package/dist/flows/Onboarding/hooks.js +1 -1
- package/dist/flows/Onboarding/index.d.ts +4 -4
- package/dist/flows/Onboarding/index.js +1 -1
- package/dist/flows/Onboarding/types.d.ts +4 -4
- package/dist/flows/Onboarding/utils.d.ts +4 -4
- package/dist/flows/Termination/AdditionalDetailsForm.d.ts +4 -4
- package/dist/flows/Termination/AdditionalDetailsForm.js +1 -1
- package/dist/flows/Termination/EmployeeComunicationForm.d.ts +4 -4
- package/dist/flows/Termination/EmployeeComunicationForm.js +1 -1
- package/dist/flows/Termination/PaidTimeOffForm.d.ts +4 -4
- package/dist/flows/Termination/PaidTimeOffForm.js +1 -1
- package/dist/flows/Termination/TerminationDetailsForm.d.ts +4 -4
- package/dist/flows/Termination/TerminationDetailsForm.js +1 -1
- package/dist/flows/Termination/TerminationFlow.d.ts +4 -4
- package/dist/flows/Termination/TerminationFlow.js +1 -1
- package/dist/flows/Termination/TerminationForm.d.ts +4 -4
- package/dist/flows/Termination/TerminationForm.js +1 -1
- package/dist/flows/Termination/api.d.ts +5 -5
- package/dist/flows/Termination/api.js +1 -1
- package/dist/flows/Termination/components/AcknowledgeInformation/AcknowledgeInformation.js +1 -1
- package/dist/flows/Termination/components/AcknowledgeInformation/AcknowledgeInformationFees.js +1 -1
- package/dist/flows/Termination/components/PaidTimeOff/PaidTimeOff.d.ts +6 -6
- package/dist/flows/Termination/components/PaidTimeOff/PaidTimeOff.js +1 -1
- package/dist/flows/Termination/components/PaidTimeOff/PaidTimeOffContainer.d.ts +6 -6
- package/dist/flows/Termination/components/PaidTimeOff/PaidTimeOffContainer.js +1 -1
- package/dist/flows/Termination/components/PaidTimeOff/types.d.ts +6 -6
- package/dist/flows/Termination/components/TerminationDialogInfoContent/TerminationDialogInfoContent.js +1 -1
- package/dist/flows/Termination/components/TerminationReasonsDetailContent/TerminationReasonsDetailContent.js +1 -1
- package/dist/flows/Termination/context.d.ts +4 -4
- package/dist/flows/Termination/hooks.d.ts +4 -4
- package/dist/flows/Termination/hooks.js +1 -1
- package/dist/flows/Termination/index.d.ts +6 -6
- package/dist/flows/Termination/index.js +1 -1
- package/dist/flows/Termination/json-schemas/jsonSchema.js +1 -1
- package/dist/flows/Termination/json-schemas/schema.d.ts +4 -4
- package/dist/flows/Termination/json-schemas/schema.js +1 -1
- package/dist/flows/Termination/types.d.ts +4 -4
- package/dist/flows/Termination/utils.d.ts +4 -4
- package/dist/flows/Termination/utils.js +1 -1
- package/dist/flows/types.d.ts +12 -3
- package/dist/index.css +1 -1
- package/dist/index.css.map +1 -1
- package/dist/index.d.ts +16 -10
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/internals.d.ts +8 -6
- package/dist/internals.js +1 -1
- package/dist/{mutations-RAaSN-UD.d.ts → mutations-S_wSmzKg.d.ts} +1 -1
- package/dist/{remoteFlows-CViOHRks.d.ts → remoteFlows-Cng6gLYk.d.ts} +2 -1
- package/dist/styles.css +1 -1
- package/dist/styles.css.map +1 -1
- package/dist/{types-CT6RmdGQ.d.ts → types-B4TFqbOW.d.ts} +1 -1
- package/dist/{types-B4e4Ghcm.d.ts → types-BMqZxk-s.d.ts} +9 -6
- package/dist/{types-I5boK4UQ.d.ts → types-Cmjevabw.d.ts} +18 -8
- package/dist/{types-BbsaQKNh.d.ts → types-DDr_JprX.d.ts} +2 -2
- package/dist/{types.gen-CfehsV7Z.d.ts → types.gen-DblP0ILg.d.ts} +89 -2
- package/dist/{utils-1gq7Z97P.d.ts → utils-CCnKZ-KY.d.ts} +1 -1
- package/package.json +3 -3
- package/dist/ButtonDefault-MJNBS6JN.js +0 -2
- package/dist/CheckboxFieldDefault-5UCOCDE6.js +0 -2
- package/dist/CountryFieldDefault-Z5J24TWP.js +0 -2
- package/dist/DatePickerFieldDefault-JFEA44AU.js +0 -2
- package/dist/DrawerDefault-TPMJO4JW.js +0 -2
- package/dist/EmailFieldDefault-LIG2I3KN.js +0 -2
- package/dist/FieldsetToggleButtonDefault-ONS2KHTB.js +0 -2
- package/dist/FileUploadFieldDefault-Y3DOJH6L.js +0 -2
- package/dist/MultiSelectFieldDefault-LMXRGP3B.js +0 -2
- package/dist/NumberFieldDefault-O7WYKNXV.js +0 -2
- package/dist/PDFPreviewDefault-WZKNJUIU.js +0 -2
- package/dist/RadioGroupFieldDefault-NOPVRTEG.js +0 -2
- package/dist/SelectFieldDefault-RM72IEHN.js +0 -2
- package/dist/StatementDefault-CIHGUOWH.js +0 -2
- package/dist/TableFieldDefault-42PHYI5U.js +0 -2
- package/dist/TextAreaFieldDefault-7WGZ3OOS.js +0 -2
- package/dist/TextFieldDefault-NW25MQKP.js +0 -2
- package/dist/WorkScheduleFieldDefault-RP5SBJS7.js +0 -2
- package/dist/ZendeskDrawerDefault-H7UH2G35.js +0 -2
- package/dist/chunk-3DZAHNEC.js +0 -2
- package/dist/chunk-3DZAHNEC.js.map +0 -1
- package/dist/chunk-3UDG4IJO.js +0 -2
- package/dist/chunk-42R2H2DW.js +0 -2
- package/dist/chunk-54ZROEOA.js +0 -2
- package/dist/chunk-CYNDNCGT.js +0 -2
- package/dist/chunk-CYNDNCGT.js.map +0 -1
- package/dist/chunk-DJW3HOMC.js +0 -2
- package/dist/chunk-DJW3HOMC.js.map +0 -1
- package/dist/chunk-EAV5VOMZ.js +0 -2
- package/dist/chunk-EAV5VOMZ.js.map +0 -1
- package/dist/chunk-ERSXMU5E.js +0 -2
- package/dist/chunk-ERSXMU5E.js.map +0 -1
- package/dist/chunk-FJYLDNMA.js +0 -2
- package/dist/chunk-FJYLDNMA.js.map +0 -1
- package/dist/chunk-GBU46SLB.js +0 -2
- package/dist/chunk-HNFHAEJR.js +0 -2
- package/dist/chunk-HNFHAEJR.js.map +0 -1
- package/dist/chunk-JLFS6WPS.js +0 -2
- package/dist/chunk-JLFS6WPS.js.map +0 -1
- package/dist/chunk-LOHRUY4J.js +0 -2
- package/dist/chunk-LOHRUY4J.js.map +0 -1
- package/dist/chunk-NUQUGTH6.js +0 -2
- package/dist/chunk-NUQUGTH6.js.map +0 -1
- package/dist/chunk-OGKPDOQG.js +0 -2
- package/dist/chunk-OGKPDOQG.js.map +0 -1
- package/dist/chunk-SNZ4CEPI.js +0 -2
- package/dist/chunk-SNZ4CEPI.js.map +0 -1
- package/dist/chunk-SWFDRZPG.js +0 -2
- package/dist/chunk-SWFDRZPG.js.map +0 -1
- package/dist/chunk-T6Q7IALZ.js +0 -6
- package/dist/chunk-T6Q7IALZ.js.map +0 -1
- package/dist/chunk-TL2OPQIV.js +0 -2
- package/dist/chunk-TL2OPQIV.js.map +0 -1
- package/dist/chunk-TOA3JILU.js +0 -2
- package/dist/chunk-TOA3JILU.js.map +0 -1
- package/dist/chunk-UIE54LHV.js +0 -2
- package/dist/chunk-W5OCDCU7.js +0 -2
- package/dist/chunk-W5OCDCU7.js.map +0 -1
- package/dist/chunk-XFNPJE6N.js.map +0 -1
- package/dist/chunk-XXIUJVIY.js +0 -2
- package/dist/chunk-XXIUJVIY.js.map +0 -1
- package/dist/chunk-YVYFLXNY.js +0 -2
- package/dist/chunk-YVYFLXNY.js.map +0 -1
- package/dist/chunk-ZI4PNJ5M.js +0 -2
- package/dist/chunk-ZI4PNJ5M.js.map +0 -1
- /package/dist/{ButtonDefault-MJNBS6JN.js.map → ButtonDefault-NLDQHAWN.js.map} +0 -0
- /package/dist/{CheckboxFieldDefault-5UCOCDE6.js.map → CheckboxFieldDefault-QXABRJXG.js.map} +0 -0
- /package/dist/{CountryFieldDefault-Z5J24TWP.js.map → CountryFieldDefault-Q6N5AQVO.js.map} +0 -0
- /package/dist/{DatePickerFieldDefault-JFEA44AU.js.map → DatePickerFieldDefault-HUP4TK2U.js.map} +0 -0
- /package/dist/{DrawerDefault-TPMJO4JW.js.map → DrawerDefault-5EYKRPS7.js.map} +0 -0
- /package/dist/{EmailFieldDefault-LIG2I3KN.js.map → EmailFieldDefault-3ES7SMDC.js.map} +0 -0
- /package/dist/{FieldsetToggleButtonDefault-ONS2KHTB.js.map → FieldsetToggleButtonDefault-TPLNRX3E.js.map} +0 -0
- /package/dist/{FileUploadFieldDefault-Y3DOJH6L.js.map → FileUploadFieldDefault-PNM6H64X.js.map} +0 -0
- /package/dist/{MultiSelectFieldDefault-LMXRGP3B.js.map → MultiSelectFieldDefault-THD7TDWF.js.map} +0 -0
- /package/dist/{NumberFieldDefault-O7WYKNXV.js.map → NumberFieldDefault-PCH6RRDK.js.map} +0 -0
- /package/dist/{PDFPreviewDefault-WZKNJUIU.js.map → PDFPreviewDefault-474JH3KB.js.map} +0 -0
- /package/dist/{RadioGroupFieldDefault-NOPVRTEG.js.map → RadioGroupFieldDefault-E35Y2AK6.js.map} +0 -0
- /package/dist/{SelectFieldDefault-RM72IEHN.js.map → SelectFieldDefault-NHDJRM5H.js.map} +0 -0
- /package/dist/{StatementDefault-CIHGUOWH.js.map → StatementDefault-CSHXL3G2.js.map} +0 -0
- /package/dist/{TableFieldDefault-42PHYI5U.js.map → TableFieldDefault-N7MO2QJI.js.map} +0 -0
- /package/dist/{TextAreaFieldDefault-7WGZ3OOS.js.map → TextAreaFieldDefault-OG4UM4DG.js.map} +0 -0
- /package/dist/{TextFieldDefault-NW25MQKP.js.map → TextFieldDefault-FECR4GRK.js.map} +0 -0
- /package/dist/{WorkScheduleFieldDefault-RP5SBJS7.js.map → WorkScheduleFieldDefault-G2MR2DBY.js.map} +0 -0
- /package/dist/{ZendeskDrawerDefault-H7UH2G35.js.map → ZendeskDrawerDefault-W3RCTVCH.js.map} +0 -0
- /package/dist/{chunk-4ZE3SM7X.js.map → chunk-25III46F.js.map} +0 -0
- /package/dist/{chunk-2BTW5VQM.js.map → chunk-3JJEKIQ2.js.map} +0 -0
- /package/dist/{chunk-X7EZIAZ3.js.map → chunk-3QNS3IZB.js.map} +0 -0
- /package/dist/{chunk-I42KSW2T.js.map → chunk-3UJC7KHD.js.map} +0 -0
- /package/dist/{chunk-QAN3JZ45.js.map → chunk-3WBZPCT5.js.map} +0 -0
- /package/dist/{chunk-QVUSRZ2Z.js.map → chunk-5IHRUTHD.js.map} +0 -0
- /package/dist/{chunk-6PCNMM3O.js.map → chunk-6JFRVHLF.js.map} +0 -0
- /package/dist/{chunk-BLAVAEPN.js.map → chunk-7GI4ZVUE.js.map} +0 -0
- /package/dist/{chunk-QAVVHKBD.js.map → chunk-7PKH5MYL.js.map} +0 -0
- /package/dist/{chunk-R3V5AHPG.js.map → chunk-7QRAEME3.js.map} +0 -0
- /package/dist/{chunk-CB3JGUXW.js.map → chunk-7SYE5KEV.js.map} +0 -0
- /package/dist/{chunk-U7CW67TM.js.map → chunk-A24VPRL7.js.map} +0 -0
- /package/dist/{chunk-OZQVMA77.js.map → chunk-A54D24NT.js.map} +0 -0
- /package/dist/{chunk-5XAHIRL6.js.map → chunk-AFEID3JA.js.map} +0 -0
- /package/dist/{chunk-TN37JYBC.js.map → chunk-AN5U7FWW.js.map} +0 -0
- /package/dist/{chunk-GH3FNNAU.js.map → chunk-C2NROAMW.js.map} +0 -0
- /package/dist/{chunk-B4L4JBSX.js.map → chunk-C4NXXY3X.js.map} +0 -0
- /package/dist/{chunk-MM645EUX.js.map → chunk-CAV5SWVS.js.map} +0 -0
- /package/dist/{chunk-5H3G7L52.js.map → chunk-CKA37AR5.js.map} +0 -0
- /package/dist/{chunk-WMVZY6FJ.js.map → chunk-CNCOVTDL.js.map} +0 -0
- /package/dist/{chunk-H3ZZYAI6.js.map → chunk-D4FBB5XW.js.map} +0 -0
- /package/dist/{chunk-6ARN2SX2.js.map → chunk-EBFCYC35.js.map} +0 -0
- /package/dist/{chunk-NIJG4TPU.js.map → chunk-EW36MHXP.js.map} +0 -0
- /package/dist/{chunk-R3C7KEKY.js.map → chunk-F2VYTYIQ.js.map} +0 -0
- /package/dist/{chunk-DMHT7EDE.js.map → chunk-FFHBDVTJ.js.map} +0 -0
- /package/dist/{chunk-IEYH33EJ.js.map → chunk-FGJ46XOX.js.map} +0 -0
- /package/dist/{chunk-LGIJO73Z.js.map → chunk-FJPY27YJ.js.map} +0 -0
- /package/dist/{chunk-H3ZACNQ6.js.map → chunk-FLW5LACO.js.map} +0 -0
- /package/dist/{chunk-LMCS6CV5.js.map → chunk-FSHTBJ6O.js.map} +0 -0
- /package/dist/{chunk-CBISFVN7.js.map → chunk-FZ452U6M.js.map} +0 -0
- /package/dist/{chunk-LYFET6KE.js.map → chunk-H2OBH7SK.js.map} +0 -0
- /package/dist/{chunk-JVBZ42B2.js.map → chunk-H5VA2OWQ.js.map} +0 -0
- /package/dist/{chunk-KOJ7XDQ3.js.map → chunk-I25DQACP.js.map} +0 -0
- /package/dist/{chunk-B5YG3EGS.js.map → chunk-ILX4QHHH.js.map} +0 -0
- /package/dist/{chunk-WSEW5QVP.js.map → chunk-IWXQUASB.js.map} +0 -0
- /package/dist/{chunk-AYDY7FWS.js.map → chunk-JKEUTGPQ.js.map} +0 -0
- /package/dist/{chunk-LAV3X727.js.map → chunk-JQ2ESL5O.js.map} +0 -0
- /package/dist/{chunk-QN2JIZ46.js.map → chunk-JTSHX4RB.js.map} +0 -0
- /package/dist/{chunk-UUMEBIYK.js.map → chunk-JVGFK6NK.js.map} +0 -0
- /package/dist/{chunk-KNXCEMKN.js.map → chunk-JZNJIXGW.js.map} +0 -0
- /package/dist/{chunk-CDFKL7PW.js.map → chunk-KAGAWJSJ.js.map} +0 -0
- /package/dist/{chunk-2RLH6ZLY.js.map → chunk-KWJI2HKR.js.map} +0 -0
- /package/dist/{chunk-L5IKPX6D.js.map → chunk-KXF27FC4.js.map} +0 -0
- /package/dist/{chunk-ZDQ7TY2L.js.map → chunk-LGX2ABTK.js.map} +0 -0
- /package/dist/{chunk-ZXNQJZCZ.js.map → chunk-LJJKRBFU.js.map} +0 -0
- /package/dist/{chunk-MORWF4JC.js.map → chunk-ML56EPFW.js.map} +0 -0
- /package/dist/{chunk-ARYTUUI7.js.map → chunk-MZNUCWQU.js.map} +0 -0
- /package/dist/{chunk-ABWZQODX.js.map → chunk-OJCKJPY5.js.map} +0 -0
- /package/dist/{chunk-5RYRPEXE.js.map → chunk-OVTH3ZHO.js.map} +0 -0
- /package/dist/{chunk-GL75LB2U.js.map → chunk-PGRQG254.js.map} +0 -0
- /package/dist/{chunk-WCM4IVY5.js.map → chunk-Q4GRM3SL.js.map} +0 -0
- /package/dist/{chunk-DJ2OL5GS.js.map → chunk-QMYU2SQX.js.map} +0 -0
- /package/dist/{chunk-Y4TYVMFP.js.map → chunk-QS6RZEWL.js.map} +0 -0
- /package/dist/{chunk-7GV5R7MH.js.map → chunk-RZS2WEOI.js.map} +0 -0
- /package/dist/{chunk-HBU6CWZL.js.map → chunk-RZYFAL5X.js.map} +0 -0
- /package/dist/{chunk-NN5RHS7I.js.map → chunk-S6OVT37M.js.map} +0 -0
- /package/dist/{chunk-SPYWBPYJ.js.map → chunk-SNMKN5AK.js.map} +0 -0
- /package/dist/{chunk-TATL6AQD.js.map → chunk-THPH57GK.js.map} +0 -0
- /package/dist/{chunk-Y7WX5NK5.js.map → chunk-TZPHBNNS.js.map} +0 -0
- /package/dist/{chunk-OEJNLCZV.js.map → chunk-UBRRCAAI.js.map} +0 -0
- /package/dist/{chunk-GNPHI7PB.js.map → chunk-VAWEOFUO.js.map} +0 -0
- /package/dist/{chunk-DYG225ZX.js.map → chunk-VC6X3C2I.js.map} +0 -0
- /package/dist/{chunk-FXQAB3WS.js.map → chunk-VIQQ3IHI.js.map} +0 -0
- /package/dist/{chunk-JTCF2KPH.js.map → chunk-W6H74RYW.js.map} +0 -0
- /package/dist/{chunk-GPRN5IXM.js.map → chunk-WD5DNUSS.js.map} +0 -0
- /package/dist/{chunk-K5CZDOJG.js.map → chunk-WT6E5LO4.js.map} +0 -0
- /package/dist/{chunk-7RSKNOPP.js.map → chunk-X64YQ67A.js.map} +0 -0
- /package/dist/{chunk-4RFJXFQX.js.map → chunk-XDZFLJ5F.js.map} +0 -0
- /package/dist/{chunk-ZLPAQQZI.js.map → chunk-XIEA775Q.js.map} +0 -0
- /package/dist/{chunk-A2X35B6C.js.map → chunk-XOK3XCYN.js.map} +0 -0
- /package/dist/{chunk-4Z2ZRDMG.js.map → chunk-XSG4QXPY.js.map} +0 -0
- /package/dist/{chunk-VIS2PVMT.js.map → chunk-XVU376WG.js.map} +0 -0
- /package/dist/{chunk-VMAPQGL4.js.map → chunk-YHIADGM3.js.map} +0 -0
- /package/dist/{chunk-IF42CZJH.js.map → chunk-YRC6EEM3.js.map} +0 -0
- /package/dist/{chunk-HMCTBCYH.js.map → chunk-YUQ3GDQI.js.map} +0 -0
- /package/dist/{chunk-QBMOVG2D.js.map → chunk-YZ3POA3F.js.map} +0 -0
- /package/dist/{chunk-BQXYHK4Z.js.map → chunk-ZCZX54AU.js.map} +0 -0
- /package/dist/{chunk-XJPB4XV6.js.map → chunk-ZTBFYRNL.js.map} +0 -0
- /package/dist/{chunk-42R2H2DW.js.map → chunk-ZVUQDK2E.js.map} +0 -0
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a as S}from"./chunk-XFD3ULUF.js";import{a as k}from"./chunk-
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import{a as S}from"./chunk-XFD3ULUF.js";import{a as k}from"./chunk-ZVUQDK2E.js";import{a as m,b as u,c as h,d as _}from"./chunk-DFJNVGK4.js";import{a as b}from"./chunk-UOY6KW7W.js";import{O as g,c as D,x as T}from"./chunk-JTLXUYOR.js";import{d as i}from"./chunk-KQPDXXG3.js";import{a as n}from"./chunk-P37U34EQ.js";var y=n(e=>{let[t,r,o]=e.split("-").map(Number);return new Date(t,r-1,o)},"parseLocalDate");import{useQuery as v}from"@tanstack/react-query";var c=n(({employmentId:e,status:t,timeoffType:r,options:o})=>{let{client:a}=i();return v({queryKey:["timeoff",e,t],retry:!1,queryFn:n(()=>g({client:a,headers:{Authorization:""},query:{employment_id:e,status:t,timeoff_type:r}}),"queryFn"),select:n(({data:s})=>o?.select?.(s)??s,"select"),enabled:o?.enabled})},"useTimeOffQuery"),R=n((e,t)=>{let r=y(e).toLocaleDateString("en-US",{year:"numeric",month:"short",day:"numeric"}),o=y(t).toLocaleDateString("en-US",{year:"numeric",month:"short",day:"numeric"});return`${r} \u2192 ${o}`},"formatDateRange"),G=n(({employmentId:e,options:t})=>c({employmentId:e,timeoffType:"paid_time_off",options:{enabled:t?.enabled,select:n(r=>({bookedDays:r?.data?.timeoffs?.reduce((o,a)=>o+(a?.timeoff_days?.filter(s=>s.hours!=null&&s.hours>0).length||0),0)||0,timeoffs:r?.data?.timeoffs?.map(o=>{let a=o?.timeoff_days?.filter(s=>s.hours>0).length||0;return{status:o?.status,duration:a,startDate:o?.start_date,endDate:o?.end_date,formattedDate:R(o?.start_date,o?.end_date)}})||[]}),"select")}}),"usePaidTimeoffBreakdownQuery"),A=n(({employmentId:e})=>{let{client:t}=i();return v({queryKey:["timeoff-balance",e],retry:!1,queryFn:n(()=>T({client:t,headers:{Authorization:""},path:{employment_id:e}}),"queryFn"),select:n(({data:r})=>r,"select")})},"useTimeOffLeavePoliciesSummaryQuery");import{useMutation as E,useQuery as Q}from"@tanstack/react-query";function F(e){return Object.entries(e).reduce((t,[r,o])=>({...t,[r]:h(o)}),{})}n(F,"formatTimeoffValues");function q(e){let t=e?.contract_details?.available_pto,r=e?.contract_details?.available_pto_type;return e?.country?.code==="USA"&&r==="unlimited"?{value:t===0?20:t}:r==="unlimited"&&t>0?{value:t}:{value:t}}n(q,"getMinimumStatutoryDays");function w(e,t){let r=0,o=0;return e.forEach(a=>{a.timeoff_days?.forEach(s=>{new Date(s.day)<=t?r+=s.hours||0:o+=s.hours||0})}),{before:r,after:o}}n(w,"getAllTimeoffHoursBeforeDate");var M=n(({employmentId:e,date:t,options:r})=>c({employmentId:e,timeoffType:"paid_time_off",status:"approved",options:{enabled:r?.enabled,select:n(o=>{let{before:a,after:s}=w(o?.data?.timeoffs||[],new Date(t));return{bookedDaysBeforeTermination:u(a),bookedDaysAfterTermination:u(s)}},"select")}}),"useBookedTimeoffBeforeAndAfterTerminationQuery"),de=n(({employmentId:e,proposedTerminationDate:t,employment:r})=>{let{value:o=0}=q(r),a=A({employmentId:e}),s=M({employmentId:e,date:t}),p=a.data?.data?.[0].annual_entitlement.type==="limited"?{days:a.data?.data?.[0].annual_entitlement.days,hours:a.data?.data?.[0].annual_entitlement.hours}:{days:o,hours:0},d={days:a.data?.data?.[0].booked.days||0,hours:a.data?.data?.[0].booked.hours||0},f=a.data?.data?.[0].current_entitlement.type==="limited"?{days:a.data?.data?.[0].current_entitlement.days||0,hours:a.data?.data?.[0].current_entitlement.hours||0}:{days:o,hours:0},l={days:a.data?.data?.[0].used.days||0,hours:a.data?.data?.[0].used.hours||0},B=s.data?.bookedDaysBeforeTermination||{days:0,hours:0},x=s.data?.bookedDaysAfterTermination||{days:0,hours:0},C=m(f.days,f.hours),H=m(l.days,l.hours),L=m(d.days,d.hours),P=C-H-L,O=_(u(P));return{data:{...F({entitledDays:p,bookedDays:d,usedDays:l,approvedDaysBeforeTermination:B,approvedDaysAfterTermination:x,remainingDays:O,currentEntitlementDays:f}),isUnlimitedPto:r?.contract_details?.available_pto_type==="unlimited"},isLoading:a.isLoading||s.isLoading,isError:a.isError||s.isError,error:a.error||s.error}},"useSummaryTimeOffDataQuery"),fe=n(()=>{let{client:e}=i();return E({mutationFn:n(t=>D({client:e,body:t}),"mutationFn")})},"useCreateTermination"),le=n(({formValues:e,jsfModify:t,step:r})=>Q({queryKey:["rmt-flows-termination-schema",r],queryFn:n(()=>k[r]??S,"queryFn"),select:n(({data:o})=>{let a=o?.schema||{};return b(a,e||{},{jsfModify:t})},"select")}),"useTerminationSchema");export{y as a,c as b,G as c,A as d,M as e,de as f,fe as g,le as h};
|
|
2
|
+
//# sourceMappingURL=chunk-JVGFK6NK.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a as k}from"./chunk-
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import{a as k}from"./chunk-3WBZPCT5.js";import{a as C,b as w,c as F,d as P}from"./chunk-A54D24NT.js";import{i as _,j as v,k as x,l as h,m as b}from"./chunk-3QNS3IZB.js";import{a as u,b as D}from"./chunk-H2OBH7SK.js";import{a as t}from"./chunk-GCWEOZBS.js";import{a as o}from"./chunk-P37U34EQ.js";import{CalendarIcon as L}from"lucide-react";import{format as R}from"date-fns";import{ChevronLeft as I,ChevronRight as M}from"lucide-react";import{DayPicker as z}from"react-day-picker";import{jsx as p}from"react/jsx-runtime";function N({className:r,classNames:i,showOutsideDays:s=!0,...n}){return p(z,{showOutsideDays:s,className:t("p-3",r),classNames:{months:"flex flex-col sm:flex-row gap-2",month:"flex flex-col gap-4",caption:"flex justify-center pt-1 relative items-center w-full",caption_label:"text-sm font-medium",nav:"flex items-center gap-1",nav_button:t(u({variant:"outline"}),"size-7 bg-transparent p-0 opacity-50 hover:opacity-100"),nav_button_previous:"absolute left-1",nav_button_next:"absolute right-1",table:"w-full border-collapse space-x-1",head_row:"flex",head_cell:"text-muted-foreground rounded-md w-8 font-normal text-[0.8rem]",row:"flex w-full mt-2",cell:t("relative p-0 text-center text-sm focus-within:relative focus-within:z-20 [&:has([aria-selected])]:bg-accent [&:has([aria-selected].day-range-end)]:rounded-r-md",n.mode==="range"?"[&:has(>.day-range-end)]:rounded-r-md [&:has(>.day-range-start)]:rounded-l-md first:[&:has([aria-selected])]:rounded-l-md last:[&:has([aria-selected])]:rounded-r-md":"[&:has([aria-selected])]:rounded-md"),day:t(u({variant:"ghost"}),"size-8 p-0 font-normal aria-selected:opacity-100"),day_range_start:"day-range-start aria-selected:bg-primary aria-selected:text-primary-foreground",day_range_end:"day-range-end aria-selected:bg-primary aria-selected:text-primary-foreground",day_selected:"bg-primary text-primary-foreground hover:bg-primary hover:text-primary-foreground focus:bg-primary focus:text-primary-foreground",day_today:"bg-accent text-accent-foreground",day_outside:"day-outside text-muted-foreground aria-selected:text-muted-foreground",day_disabled:"text-muted-foreground opacity-50",day_range_middle:"aria-selected:bg-accent aria-selected:text-accent-foreground",day_hidden:"invisible",...i},components:{IconLeft:o(({className:d,...l})=>p(I,{className:t("size-4",d),...l}),"IconLeft"),IconRight:o(({className:d,...l})=>p(M,{className:t("size-4",d),...l}),"IconRight")},...n})}o(N,"Calendar");import{Fragment as V,jsx as e,jsxs as m}from"react/jsx-runtime";function X({field:r,fieldData:i,fieldState:s}){let{name:n,label:d,description:l,minDate:f,maxDate:g}=i,c=f?new Date(f):void 0,y=g?new Date(g):void 0;return m(_,{"data-field":n,className:`flex flex-col RemoteFlows__DatePickerField__Item__${n}`,children:[e(v,{className:"RemoteFlows__DatePickerField__Label",children:d}),m(w,{children:[e(F,{asChild:!0,children:e(x,{children:e("div",{children:m(D,{type:"button",variant:"outline",className:t("w-full pl-3 text-left font-normal",!r.value&&"text-muted-foreground"),"data-testid":`date-picker-button-${n}`,children:[r.value&&e(V,{children:R(r.value,"yyyy-MM-dd")}),e(L,{className:"ml-auto h-4 w-4 opacity-50"})]})})})}),e(P,{className:"w-auto p-0 RemoteFlows__DatepickerField__PopoverContent",align:"start",children:e(N,{mode:"single",className:"RemoteFlows__DatepickerField__Calendar",selected:r.value?new Date(r.value):void 0,onSelect:a=>{r.onChange(a?R(a,"yyyy-MM-dd"):null)},defaultMonth:c,components:{DayContent:o(a=>e(C,{children:a.date.getDate()}),"DayContent")},disabled:a=>!!(c&&a<c||y&&a>y)})})]}),l?m(h,{children:[l," ",e(k,{helpCenter:i.meta?.helpCenter})]}):null,s.error&&e(b,{className:"RemoteFlows__DatePickerField__Error"})]})}o(X,"DatePickerFieldDefault");export{X as a};
|
|
2
|
+
//# sourceMappingURL=chunk-JZNJIXGW.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{a as s}from"./chunk-KRFK2QRV.js";import{b as e}from"./chunk-Q3ALCPJN.js";import{j as n}from"./chunk-GCWEOZBS.js";import{a as t}from"./chunk-P37U34EQ.js";import{jsx as f}from"react/jsx-runtime";function b({onSubmit:m,onSuccess:d,onError:c}){let{contractorOnboardingBag:o}=e(),p=t(async i=>{try{let a=await o.parseFormValues(i);await m?.(a);let r=await o.onSubmit(i);if(r?.data){await d?.(r?.data),o?.next();return}}catch(a){let r=n(a,o.meta?.fields?.basic_information);c?.(r)}},"handleSubmit"),l=o.stepState.values?.basic_information||o.initialValues.basic_information;return f(s,{defaultValues:l,onSubmit:p})}t(b,"BasicInformationStep");export{b as a};
|
|
2
|
+
//# sourceMappingURL=chunk-JZPN7DHV.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/flows/ContractorOnboarding/components/BasicInformationStep.tsx"],"sourcesContent":["import { BasicInformationFormPayload } from '@/src/flows/Onboarding/types';\nimport { EmploymentCreationResponse } from '@/src/client';\nimport { $TSFixMe } from '@/src/types/remoteFlows';\nimport { NormalizedFieldError } from '@/src/lib/mutations';\nimport { useContractorOnboardingContext } from '@/src/flows/ContractorOnboarding/context';\nimport { ContractorOnboardingForm } from '@/src/flows/ContractorOnboarding/components/ContractorOnboardingForm';\nimport { handleStepError } from '@/src/lib/utils';\n\ntype BasicInformationStepProps = {\n /*\n * The function is called when the form is submitted. It receives the form values as an argument.\n */\n onSubmit?: (payload: BasicInformationFormPayload) => void | Promise<void>;\n /*\n * The function is called when the form submission is successful.\n */\n onSuccess?: (data: EmploymentCreationResponse) => void | Promise<void>;\n /*\n * The function is called when an error occurs during form submission.\n */\n onError?: ({\n error,\n rawError,\n fieldErrors,\n }: {\n error: Error;\n rawError: Record<string, unknown>;\n fieldErrors: NormalizedFieldError[];\n }) => void;\n};\n\nexport function BasicInformationStep({\n onSubmit,\n onSuccess,\n onError,\n}: BasicInformationStepProps) {\n const { contractorOnboardingBag } = useContractorOnboardingContext();\n\n const handleSubmit = async (payload: $TSFixMe) => {\n try {\n const parsedValues =\n await contractorOnboardingBag.parseFormValues(payload);\n await onSubmit?.(parsedValues as BasicInformationFormPayload);\n const response = await contractorOnboardingBag.onSubmit(payload);\n if (response?.data) {\n await onSuccess?.(response?.data as EmploymentCreationResponse);\n contractorOnboardingBag?.next();\n return;\n }\n } catch (error: unknown) {\n const structuredError = handleStepError(\n error,\n contractorOnboardingBag.meta?.fields?.basic_information,\n );\n onError?.(structuredError);\n }\n };\n\n const initialValues =\n contractorOnboardingBag.stepState.values?.basic_information ||\n contractorOnboardingBag.initialValues.basic_information;\n\n return (\n <ContractorOnboardingForm\n defaultValues={initialValues}\n onSubmit={handleSubmit}\n />\n );\n}\n"],"mappings":"gKA+DI,cAAAA,MAAA,oBAhCG,SAASC,EAAqB,CACnC,SAAAC,EACA,UAAAC,EACA,QAAAC,CACF,EAA8B,CAC5B,GAAM,CAAE,wBAAAC,CAAwB,EAAIC,EAA+B,EAE7DC,EAAeC,EAAA,MAAOC,GAAsB,CAChD,GAAI,CACF,IAAMC,EACJ,MAAML,EAAwB,gBAAgBI,CAAO,EACvD,MAAMP,IAAWQ,CAA2C,EAC5D,IAAMC,EAAW,MAAMN,EAAwB,SAASI,CAAO,EAC/D,GAAIE,GAAU,KAAM,CAClB,MAAMR,IAAYQ,GAAU,IAAkC,EAC9DN,GAAyB,KAAK,EAC9B,MACF,CACF,OAASO,EAAgB,CACvB,IAAMC,EAAkBC,EACtBF,EACAP,EAAwB,MAAM,QAAQ,iBACxC,EACAD,IAAUS,CAAe,CAC3B,CACF,EAlBqB,gBAoBfE,EACJV,EAAwB,UAAU,QAAQ,mBAC1CA,EAAwB,cAAc,kBAExC,OACEL,EAACgB,EAAA,CACC,cAAeD,EACf,SAAUR,EACZ,CAEJ,CArCgBC,EAAAP,EAAA","names":["jsx","BasicInformationStep","onSubmit","onSuccess","onError","contractorOnboardingBag","useContractorOnboardingContext","handleSubmit","__name","payload","parsedValues","response","error","structuredError","handleStepError","initialValues","ContractorOnboardingForm"]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a as m}from"./chunk-
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import{a as m}from"./chunk-I25DQACP.js";import{a as r}from"./chunk-FSHTBJ6O.js";import{a}from"./chunk-U6LRMWRI.js";import{a as c}from"./chunk-EBFCYC35.js";import{a as e}from"./chunk-D5AR26AI.js";import{a as o}from"./chunk-TVZAFTPT.js";import{a as n}from"./chunk-P37U34EQ.js";import{useId as f}from"react";import{jsx as s}from"react/jsx-runtime";function k({employmentId:d,countryCode:C,options:p,render:A}){let t=c({employmentId:d,countryCode:C,options:p}),i=f();return s(o.Provider,{value:{formId:i,contractAmendmentBag:t},children:A({contractAmendmentBag:t,components:{Form:r,SubmitButton:a,ConfirmationForm:m,BackButton:e}})})}n(k,"ContractAmendmentFlow");export{k as a};
|
|
2
|
+
//# sourceMappingURL=chunk-KAGAWJSJ.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{b as p}from"./chunk-Q3ALCPJN.js";import{b as c}from"./chunk-LNV36S6D.js";import{a as f}from"./chunk-WGMEOF72.js";import{f as d,g as l}from"./chunk-3QNS3IZB.js";import{a as i}from"./chunk-P37U34EQ.js";import{useEffect as a}from"react";import{jsx as u}from"react/jsx-runtime";import{createElement as C}from"react";function B({defaultValues:m,onSubmit:F,components:y}){let{formId:b,contractorOnboardingBag:o,formRef:n}=p(),g=c(o.handleValidation),r=d({resolver:g,defaultValues:m,shouldUnregister:!1,mode:"onBlur"});a(()=>{n?.setValue&&(n.setValue.current=r.setValue)},[r.setValue,n]),a(()=>{o.employmentId&&o?.checkFieldUpdates(r.getValues())},[]),a(()=>{let t=r?.watch(e=>{Object.keys(e).some(s=>e[s]!==m[s])&&o?.checkFieldUpdates(e)});return()=>t?.unsubscribe()},[]);let P=i(async t=>{await F(t)},"handleSubmit");return C(l,{...r,key:`form-${o.stepState.currentStep.name}`},u("form",{id:b,onSubmit:r.handleSubmit(P),className:"space-y-4 RemoteFlows__OnboardingForm",children:u(f,{components:y,fields:o.fields,fieldsets:o.meta.fieldsets,fieldValues:o.fieldValues})}))}i(B,"ContractorOnboardingForm");export{B as a};
|
|
2
|
+
//# sourceMappingURL=chunk-KRFK2QRV.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/flows/ContractorOnboarding/components/ContractorOnboardingForm.tsx"],"sourcesContent":["import { JSFFields } from '@/src/types/remoteFlows';\nimport { JSONSchemaFormFields } from '@/src/components/form/JSONSchemaForm';\nimport { Form } from '@/src/components/ui/form';\nimport { useForm } from 'react-hook-form';\nimport { useJsonSchemasValidationFormResolver } from '@/src/components/form/validationResolver';\nimport { BasicInformationFormPayload } from '@/src/flows/Onboarding/types';\nimport { Components } from '@/src/types/remoteFlows';\nimport { useContractorOnboardingContext } from '@/src/flows/ContractorOnboarding/context';\nimport { useEffect } from 'react';\nimport { PricingPlanFormPayload } from '@/src/flows/ContractorOnboarding/types';\nimport { ContractorOnboardingContractDetailsFormPayload } from '@/src/flows/ContractorOnboarding/types';\n\ntype ContractorOnboardingFormProps = {\n onSubmit: (\n payload:\n | BasicInformationFormPayload\n | PricingPlanFormPayload\n | ContractorOnboardingContractDetailsFormPayload,\n ) => Promise<void>;\n components?: Components;\n fields?: JSFFields;\n defaultValues: Record<string, unknown>;\n};\n\nexport function ContractorOnboardingForm({\n defaultValues,\n onSubmit,\n components,\n}: ContractorOnboardingFormProps) {\n const { formId, contractorOnboardingBag, formRef } =\n useContractorOnboardingContext();\n\n const resolver = useJsonSchemasValidationFormResolver(\n contractorOnboardingBag.handleValidation,\n );\n\n const form = useForm({\n resolver,\n defaultValues,\n shouldUnregister: false,\n mode: 'onBlur',\n });\n\n // Register the form's setValue method with the context so other components can access it\n useEffect(() => {\n if (formRef?.setValue) {\n formRef.setValue.current = form.setValue;\n }\n }, [form.setValue, formRef]);\n\n useEffect(() => {\n // When the employmentId is set,\n // we need to run the checkFieldUpdates to update fieldValues in useStepState\n if (contractorOnboardingBag.employmentId) {\n contractorOnboardingBag?.checkFieldUpdates(form.getValues());\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n const subscription = form?.watch((values) => {\n const isAnyFieldDirty = Object.keys(values).some(\n (key) =>\n values[key as keyof unknown] !== defaultValues[key as keyof unknown],\n );\n if (isAnyFieldDirty) {\n contractorOnboardingBag?.checkFieldUpdates(values);\n }\n });\n return () => subscription?.unsubscribe();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const handleSubmit = async (values: Record<string, unknown>) => {\n await onSubmit(values);\n };\n\n return (\n <Form\n {...form}\n key={`form-${contractorOnboardingBag.stepState.currentStep.name}`}\n >\n <form\n id={formId}\n onSubmit={form.handleSubmit(handleSubmit)}\n className='space-y-4 RemoteFlows__OnboardingForm'\n >\n <JSONSchemaFormFields\n components={components}\n fields={contractorOnboardingBag.fields}\n fieldsets={contractorOnboardingBag.meta.fieldsets}\n fieldValues={contractorOnboardingBag.fieldValues}\n />\n </form>\n </Form>\n );\n}\n"],"mappings":"+MAQA,OAAS,aAAAA,MAAiB,QA+ElB,cAAAC,MAAA,oBATJ,wBAAAC,MAAA,QAtDG,SAASC,EAAyB,CACvC,cAAAC,EACA,SAAAC,EACA,WAAAC,CACF,EAAkC,CAChC,GAAM,CAAE,OAAAC,EAAQ,wBAAAC,EAAyB,QAAAC,CAAQ,EAC/CC,EAA+B,EAE3BC,EAAWC,EACfJ,EAAwB,gBAC1B,EAEMK,EAAOC,EAAQ,CACnB,SAAAH,EACA,cAAAP,EACA,iBAAkB,GAClB,KAAM,QACR,CAAC,EAGDW,EAAU,IAAM,CACVN,GAAS,WACXA,EAAQ,SAAS,QAAUI,EAAK,SAEpC,EAAG,CAACA,EAAK,SAAUJ,CAAO,CAAC,EAE3BM,EAAU,IAAM,CAGVP,EAAwB,cAC1BA,GAAyB,kBAAkBK,EAAK,UAAU,CAAC,CAG/D,EAAG,CAAC,CAAC,EAELE,EAAU,IAAM,CACd,IAAMC,EAAeH,GAAM,MAAOI,GAAW,CACnB,OAAO,KAAKA,CAAM,EAAE,KACzCC,GACCD,EAAOC,CAAoB,IAAMd,EAAcc,CAAoB,CACvE,GAEEV,GAAyB,kBAAkBS,CAAM,CAErD,CAAC,EACD,MAAO,IAAMD,GAAc,YAAY,CAEzC,EAAG,CAAC,CAAC,EAEL,IAAMG,EAAeC,EAAA,MAAOH,GAAoC,CAC9D,MAAMZ,EAASY,CAAM,CACvB,EAFqB,gBAIrB,OACEf,EAACmB,EAAA,CACE,GAAGR,EACJ,IAAK,QAAQL,EAAwB,UAAU,YAAY,IAAI,IAE/DP,EAAC,QACC,GAAIM,EACJ,SAAUM,EAAK,aAAaM,CAAY,EACxC,UAAU,wCAEV,SAAAlB,EAACqB,EAAA,CACC,WAAYhB,EACZ,OAAQE,EAAwB,OAChC,UAAWA,EAAwB,KAAK,UACxC,YAAaA,EAAwB,YACvC,EACF,CACF,CAEJ,CAxEgBY,EAAAjB,EAAA","names":["useEffect","jsx","createElement","ContractorOnboardingForm","defaultValues","onSubmit","components","formId","contractorOnboardingBag","formRef","useContractorOnboardingContext","resolver","useJsonSchemasValidationFormResolver","form","useForm","useEffect","subscription","values","key","handleSubmit","__name","Form","JSONSchemaFormFields"]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a as p}from"./chunk-
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import{a as p}from"./chunk-UOY6KW7W.js";import{B as m,E as C,J as d,j as l,q as u,w as c}from"./chunk-JTLXUYOR.js";import{d as o}from"./chunk-KQPDXXG3.js";import{a as t}from"./chunk-P37U34EQ.js";import{useMutation as a,useQuery as r}from"@tanstack/react-query";var h=t(({includePremiumBenefits:e})=>{let{client:i}=o();return r({queryKey:["cost-calculator-countries",e],queryFn:t(()=>c({client:i,query:{include_premium_benefits:e}}),"queryFn"),select:t(s=>s.data?.data.filter(n=>n.availability==="active").map(n=>({value:n.region_slug,label:n.name,childRegions:n.child_regions,hasAdditionalFields:n.has_additional_fields,regionSlug:n.region_slug,currency:n.currency.code})),"select")})},"useCostCalculatorCountries"),q=t(()=>{let{client:e}=o();return r({queryKey:["company-currencies"],queryFn:t(()=>d({client:e}),"queryFn"),select:t(i=>i.data?.data?.company_currencies.map(s=>({value:s.slug,label:s.code})),"select")})},"useCompanyCurrencies"),x=t(()=>{let{client:e}=o();return a({mutationFn:t(i=>l({client:e,body:i}),"mutationFn")})},"useCostCalculatorEstimation"),P=t(()=>{let{client:e}=o();return a({mutationFn:t(i=>u({client:e,body:i}),"mutationFn")})},"useCostCalculatorEstimationPdf"),v=t(()=>{let{client:e}=o();return a({mutationFn:t(i=>C({client:e,body:i}),"mutationFn")})},"useCostCalculatorEstimationCsv"),S=t((e,{includePremiumBenefits:i,options:s})=>{let{client:n}=o();return r({queryKey:["cost-calculator-region-fields",e,i],queryFn:t(()=>m({client:n,path:{slug:e},query:{include_premium_benefits:i}}),"queryFn"),enabled:!!e,select:t(({data:f})=>{let y=f?.data?.schema||{};return p(y,void 0,s)},"select")})},"useRegionFields");export{h as a,q as b,x as c,P as d,v as e,S as f};
|
|
2
|
+
//# sourceMappingURL=chunk-KWJI2HKR.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{i as c,j as i,k as n,l as _,m as F}from"./chunk-
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import{i as c,j as i,k as n,l as _,m as F}from"./chunk-3QNS3IZB.js";import{a as d,b as S,c as p,d as u,e as g,f as b}from"./chunk-F2VYTYIQ.js";import{a as s}from"./chunk-P37U34EQ.js";import{jsx as e,jsxs as v}from"react/jsx-runtime";function R({field:t,fieldState:a,fieldData:C}){let{name:r,label:o,description:m,options:N}=C;return v(c,{"data-field":r,className:`RemoteFlows__SelectField__Item__${r}`,children:[e(i,{className:"RemoteFlows__SelectField__Label",children:o}),e(n,{children:e("div",{className:"relative",children:v(d,{value:t.value||"",onValueChange:l=>{t.onChange(l)},children:[e(u,{className:"RemoteFlows__SelectField__Trigger","aria-invalid":!!a.error,"aria-label":o,children:e("span",{className:"absolute",children:e(p,{placeholder:o})})}),e(g,{className:"RemoteFlows__SelectField__Content",children:e(S,{className:"RemoteFlows__SelectField__Group",children:N?.map(l=>e(b,{value:l.value,className:"RemoteFlows__SelectField__SelectItem",disabled:l.disabled,children:l.label},l.value))})})]})})}),m&&e(_,{children:m}),a.error&&e(F,{})]})}s(R,"SelectFieldDefault");export{R as a};
|
|
2
|
+
//# sourceMappingURL=chunk-KXF27FC4.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{a as T}from"./chunk-AP56UUME.js";import{a as P}from"./chunk-IJCTN52C.js";import{c as I,d as p}from"./chunk-N4W7JU2D.js";import{a as d}from"./chunk-UOY6KW7W.js";import{F as O,I as D,K as w,M as x,N as M,f as g,m as h,o as _,v as q}from"./chunk-JTLXUYOR.js";import{b,g as S}from"./chunk-GCWEOZBS.js";import{a as f}from"./chunk-3X36ZFNP.js";import{d as c}from"./chunk-KQPDXXG3.js";import{a as e}from"./chunk-P37U34EQ.js";import{useMutation as F,useQuery as y}from"@tanstack/react-query";import{useMutation as K,useQuery as E}from"@tanstack/react-query";var W=e(()=>{let{client:t}=c();return K({mutationFn:e(o=>w({client:t,body:o,headers:{Authorization:""}}),"mutationFn")})},"useUploadFile"),R=e(t=>{let{client:o}=c();return E({queryKey:["download-file",t],queryFn:e(async()=>{let n=await q({client:o,path:{id:t}});if(n.error)throw n.error;return n.data},"queryFn"),select:e(({data:n})=>n?.file,"select"),enabled:!!t})},"useDownloadFile"),U=e((t,o,n)=>{let{client:i}=c();return E({queryKey:["employment-files",t],queryFn:e(async()=>{let r=await D({client:i,path:{employment_id:t},query:o});if(r.error)throw r.error;return r.data},"queryFn"),...n})},"useEmploymentFiles");var mt=e(({fieldValues:t,options:o})=>y({queryKey:["contract-document-signature",t.review_completed,o?.jsfModify],queryFn:e(async()=>d(P,t,{jsfModify:o?.jsfModify}),"queryFn"),enabled:o?.queryOptions?.enabled}),"useGetContractDocumentSignatureSchema"),dt=e(()=>{let{client:t}=c();return F({mutationFn:e(async({employmentId:o,contractDocumentId:n,payload:i})=>x({client:t,body:i,path:{employment_id:o,contract_document_id:n}}),"mutationFn")})},"useSignContractDocument"),pt=e(({employmentId:t,contractDocumentId:o,options:n})=>{let{client:i}=c();return y({queryKey:["contract-document",t,o],queryFn:e(async()=>_({client:i,path:{employment_id:t,id:o}}),"queryFn"),enabled:n?.queryOptions?.enabled,select:e(({data:r})=>({...r?.data,contract_document:{...r?.data?.contract_document,content:S(r?.data?.contract_document?.content)}}),"select")})},"useGetShowContractDocument"),j=e(({employmentId:t,options:o})=>{let{client:n}=c();return y({queryKey:["contractor-subscriptions",t],queryFn:e(async()=>h({client:n,path:{employment_id:t}}),"queryFn"),enabled:o?.queryOptions?.enabled,select:e(({data:i})=>i?.data,"select")})},"useGetContractorSubscriptions"),yt=e(()=>{let{client:t}=c();return F({mutationFn:e(async({employmentId:o,payload:n})=>M({client:t,body:n,path:{employment_id:o}}),"mutationFn")})},"usePostManageContractorSubscriptions"),ft=e(()=>{let{client:t}=c();return F({mutationFn:e(async({employmentId:o,payload:n})=>O({client:t,body:n,path:{employment_id:o}}),"mutationFn")})},"useCreateContractorContractDocument"),Ft=e(({countryCode:t,fieldValues:o,options:n})=>{let{client:i}=c();return y({queryKey:["contractor-onboarding-details-schema",t],retry:!1,queryFn:e(async()=>g({client:i,path:{country_code:t},query:{json_schema_version:1}}),"queryFn"),enabled:n?.queryOptions?.enabled,select:e(({data:r})=>{let s=r?.data?.schema||{};return d(s,o,n)},"select")})},"useContractorOnboardingDetailsSchema"),Q={"urn:remotecom:resource:product:contractor:plus:monthly":"Contractor Management Plus","urn:remotecom:resource:product:contractor:standard:monthly":"Contractor Management"},Ct=e((t,o)=>{let{data:n,isLoading:i}=j({employmentId:t,options:{queryOptions:o?.queryOptions}}),r=d(T.data.schema,{},o);if(n){let s=r.fields.find(l=>l.name==="subscription");if(s){let l=n.filter(a=>a.product.identifier!==I).map(a=>{let u="";a.price.amount&&(u=b(a.price.amount,a.currency.symbol));let m=a.product,L=Q[m.identifier]??"",A=m.identifier??"",G=m.description??"",J={features:m.features??[],price:u};return{label:L,value:A,description:G,meta:J}});s.options=l.sort((a,u)=>a.label.localeCompare(u.label))}}return{isLoading:i,form:r}},"useContractorSubscriptionSchemaField"),bt=e((t,o,n)=>{let{mutateAsyncOrThrow:i}=f(o),{mutateAsyncOrThrow:r}=f(t);return{mutateAsync:e(async({employmentId:s})=>{let{saudi_nationality_status:l,ir35:a,ir35_sds_file:u}=n,m={contract_document:{ir_35:a}},C={contract_document:{nationality:l}};return a?(await r({employmentId:s,payload:m}),i({employment_id:s,file:u,sub_type:p})):l?r({employmentId:s,payload:C}):Promise.resolve()},"mutateAsync")}},"useUpdateUKandSaudiFields"),St=e((t,o)=>{let{data:n,isLoading:i}=U(t,{sub_type:p},{...o,select:e(({data:l})=>l?.files?.filter(a=>a.sub_type===p),"select")}),r=n?.[0]?.id,s=R(r);return{...s,isLoading:i||s.isLoading}},"useGetIR35File");export{W as a,mt as b,dt as c,pt as d,j as e,yt as f,ft as g,Ft as h,Ct as i,bt as j,St as k};
|
|
2
|
+
//# sourceMappingURL=chunk-L34CQIPW.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/flows/ContractorOnboarding/api.ts","../src/common/api/files.ts"],"sourcesContent":["import {\n CreateContractDocument,\n getShowContractDocument,\n getShowContractorContractDetailsCountry,\n getIndexSubscription,\n ManageContractorPlusSubscriptionOperationsParams,\n postCreateContractDocument,\n postManageContractorPlusSubscriptionSubscription,\n postSignContractDocument,\n SignContractDocument,\n} from '@/src/client';\nimport { useClient } from '@/src/context';\nimport { signatureSchema } from '@/src/flows/ContractorOnboarding/json-schemas/signature';\nimport { selectContractorSubscriptionStepSchema } from '@/src/flows/ContractorOnboarding/json-schemas/selectContractorSubscriptionStep';\nimport {\n JSONSchemaFormResultWithFieldsets,\n FlowOptions,\n JSFModify,\n} from '@/src/flows/types';\nimport { clearBase64Data, formatCurrency } from '@/src/lib/utils';\nimport { Client } from '@/src/client/client';\nimport { createHeadlessForm } from '@/src/common/createHeadlessForm';\nimport { useMutation, useQuery, UseQueryResult } from '@tanstack/react-query';\nimport { FieldValues } from 'react-hook-form';\nimport {\n corProductIdentifier,\n IR35_FILE_SUBTYPE,\n} from '@/src/flows/ContractorOnboarding/constants';\nimport { $TSFixMe, JSFField } from '@/src/types/remoteFlows';\nimport { mutationToPromise } from '@/src/lib/mutations';\nimport {\n useDownloadFile,\n useEmploymentFiles,\n useUploadFile,\n} from '@/src/common/api/files';\n\n/**\n * Get the contract document signature schema\n * @param fieldValues - The field values\n * @param options - The options\n * @returns The contract document signature schema\n */\nexport const useGetContractDocumentSignatureSchema = ({\n fieldValues,\n options,\n}: {\n fieldValues: FieldValues;\n options?: { queryOptions?: { enabled?: boolean }; jsfModify?: JSFModify };\n}) => {\n return useQuery({\n queryKey: [\n 'contract-document-signature',\n fieldValues.review_completed,\n options?.jsfModify,\n ],\n queryFn: async () => {\n return createHeadlessForm(signatureSchema, fieldValues, {\n jsfModify: options?.jsfModify,\n });\n },\n enabled: options?.queryOptions?.enabled,\n });\n};\n\n/**\n * Signs the contract document\n * @param employmentId - The employment ID\n * @param contractDocumentId - The contract document ID\n * @param payload - The payload\n * @returns The signed contract document\n */\nexport const useSignContractDocument = () => {\n const { client } = useClient();\n return useMutation({\n mutationFn: async ({\n employmentId,\n contractDocumentId,\n payload,\n }: {\n employmentId: string;\n contractDocumentId: string;\n payload: SignContractDocument;\n }) => {\n return postSignContractDocument({\n client: client as Client,\n body: payload,\n path: {\n employment_id: employmentId,\n contract_document_id: contractDocumentId,\n },\n });\n },\n });\n};\n\n/**\n * Get the contract document for a given employment and contract document ID\n * @param employmentId - The employment ID\n * @param contractDocumentId - The contract document ID\n * @returns The contract document\n */\nexport const useGetShowContractDocument = ({\n employmentId,\n contractDocumentId,\n options,\n}: {\n employmentId: string;\n contractDocumentId: string;\n options?: { queryOptions?: { enabled?: boolean }; jsfModify?: JSFModify };\n}) => {\n const { client } = useClient();\n return useQuery({\n queryKey: ['contract-document', employmentId, contractDocumentId],\n queryFn: async () => {\n return getShowContractDocument({\n client: client as Client,\n path: { employment_id: employmentId, id: contractDocumentId },\n });\n },\n enabled: options?.queryOptions?.enabled,\n select: ({ data }) => {\n return {\n ...data?.data,\n contract_document: {\n ...data?.data?.contract_document,\n content: clearBase64Data(\n data?.data?.contract_document?.content as $TSFixMe,\n ),\n },\n };\n },\n });\n};\n\n/**\n * Get the contractor subscriptions for the given employment id\n * @param employmentId - The employment ID\n * @returns The contractor subscriptions available\n */\nexport const useGetContractorSubscriptions = ({\n employmentId,\n options,\n}: {\n employmentId: string;\n options?: { queryOptions?: { enabled?: boolean } };\n}) => {\n const { client } = useClient();\n return useQuery({\n queryKey: ['contractor-subscriptions', employmentId],\n queryFn: async () => {\n return getIndexSubscription({\n client: client as Client,\n path: { employment_id: employmentId },\n });\n },\n enabled: options?.queryOptions?.enabled,\n select: ({ data }) => {\n return data?.data;\n },\n });\n};\n\n/**\n * Upgrade or downgrade contractor subscription\n */\nexport const usePostManageContractorSubscriptions = () => {\n const { client } = useClient();\n return useMutation({\n mutationFn: async ({\n employmentId,\n payload,\n }: {\n employmentId: string;\n payload: ManageContractorPlusSubscriptionOperationsParams;\n }) => {\n return postManageContractorPlusSubscriptionSubscription({\n client: client as Client,\n body: payload,\n path: {\n employment_id: employmentId,\n },\n });\n },\n });\n};\n\n/**\n * Saves the contractor details data\n * @param employmentId - The employment ID\n * @param payload - The payload\n * @returns The contractor contract document\n */\nexport const useCreateContractorContractDocument = () => {\n const { client } = useClient();\n return useMutation({\n mutationFn: async ({\n employmentId,\n payload,\n }: {\n employmentId: string;\n payload: CreateContractDocument;\n }) => {\n return postCreateContractDocument({\n client: client as Client,\n body: payload,\n path: {\n employment_id: employmentId,\n },\n });\n },\n });\n};\n\n/**\n * Get the contractor onboarding details schema for a given country\n * @param countryCode - The country code\n * @param fieldValues - The field values\n * @param options - The options\n * @returns The contractor onboarding details schema\n */\nexport const useContractorOnboardingDetailsSchema = ({\n countryCode,\n fieldValues,\n options,\n}: {\n countryCode: string;\n fieldValues: FieldValues;\n options?: FlowOptions & { queryOptions?: { enabled?: boolean } };\n query?: Record<string, unknown>;\n}): UseQueryResult<JSONSchemaFormResultWithFieldsets> => {\n const { client } = useClient();\n return useQuery({\n queryKey: ['contractor-onboarding-details-schema', countryCode],\n retry: false,\n queryFn: async () => {\n return getShowContractorContractDetailsCountry({\n client: client as Client,\n path: { country_code: countryCode },\n query: {\n json_schema_version: 1,\n },\n });\n },\n enabled: options?.queryOptions?.enabled,\n select: ({ data }) => {\n const jsfSchema = data?.data?.schema || {};\n return createHeadlessForm(jsfSchema, fieldValues, options);\n },\n });\n};\n\nconst CONTRACT_PRODUCT_TITLES = {\n ['urn:remotecom:resource:product:contractor:plus:monthly']:\n 'Contractor Management Plus',\n ['urn:remotecom:resource:product:contractor:standard:monthly']:\n 'Contractor Management',\n};\n\nexport const useContractorSubscriptionSchemaField = (\n employmentId: string,\n options?: FlowOptions & { queryOptions?: { enabled?: boolean } },\n) => {\n const { data: contractorSubscriptions, isLoading: isLoading } =\n useGetContractorSubscriptions({\n employmentId: employmentId,\n options: {\n queryOptions: options?.queryOptions,\n },\n });\n\n const form = createHeadlessForm(\n selectContractorSubscriptionStepSchema.data.schema,\n {},\n options,\n );\n\n if (contractorSubscriptions) {\n const field: JSFField | undefined = form.fields.find(\n (field) => field.name === 'subscription',\n ) as JSFField | undefined;\n if (field) {\n const options = contractorSubscriptions\n .filter((opts) => opts.product.identifier !== corProductIdentifier)\n .map((opts) => {\n let formattedPrice = '';\n if (opts.price.amount) {\n formattedPrice = formatCurrency(\n opts.price.amount,\n opts.currency.symbol,\n );\n }\n const product = opts.product;\n const title =\n CONTRACT_PRODUCT_TITLES[\n product.identifier as keyof typeof CONTRACT_PRODUCT_TITLES\n ] ?? '';\n const label = title;\n const value = product.identifier ?? '';\n const description = product.description ?? '';\n const features = product.features ?? [];\n const meta = {\n features,\n price: formattedPrice,\n };\n return { label, value, description, meta };\n });\n field.options = options.sort((a, b) => a.label.localeCompare(b.label));\n }\n }\n\n return {\n isLoading,\n form,\n };\n};\n\nexport const useUpdateUKandSaudiFields = (\n createContractorContractDocumentMutation: ReturnType<\n typeof useCreateContractorContractDocument\n >,\n uploadFileMutation: ReturnType<typeof useUploadFile>,\n parsedValues: FieldValues,\n) => {\n const { mutateAsyncOrThrow: uploadFileMutationAsync } =\n mutationToPromise(uploadFileMutation);\n const { mutateAsyncOrThrow: createContractorContractDocumentMutationAsync } =\n mutationToPromise(createContractorContractDocumentMutation);\n\n return {\n mutateAsync: async ({ employmentId }: { employmentId: string }) => {\n const {\n saudi_nationality_status: saudiNationalityStatus,\n ir35: ir35Status,\n ir35_sds_file: ir35SdsFile,\n } = parsedValues;\n const ir35ContractDetailsPayload = {\n contract_document: {\n ir_35: ir35Status,\n },\n };\n const saudiContractDetailsPayload = {\n contract_document: {\n nationality: saudiNationalityStatus,\n },\n };\n if (ir35Status) {\n await createContractorContractDocumentMutationAsync({\n employmentId: employmentId,\n payload: ir35ContractDetailsPayload,\n });\n return uploadFileMutationAsync({\n employment_id: employmentId,\n file: ir35SdsFile,\n sub_type: IR35_FILE_SUBTYPE,\n });\n }\n if (saudiNationalityStatus) {\n return createContractorContractDocumentMutationAsync({\n employmentId: employmentId,\n payload: saudiContractDetailsPayload,\n });\n }\n\n return Promise.resolve();\n },\n };\n};\n\nexport const useGetIR35File = (\n employmentId: string,\n options?: { enabled?: boolean },\n) => {\n const { data: ir35Files, isLoading: isLoadingFiles } = useEmploymentFiles(\n employmentId,\n {\n sub_type: IR35_FILE_SUBTYPE,\n },\n {\n ...options,\n select: ({ data }) =>\n data?.files?.filter((file) => file.sub_type === IR35_FILE_SUBTYPE),\n },\n );\n const id = ir35Files?.[0]?.id;\n\n const downloadQuery = useDownloadFile(id as string);\n\n return {\n ...downloadQuery,\n isLoading: isLoadingFiles || downloadQuery.isLoading,\n };\n};\n","import { useMutation, useQuery, UseQueryOptions } from '@tanstack/react-query';\nimport { Client } from '@/src/client/client';\nimport {\n getIndexEmploymentFile,\n getShowFile,\n postUploadEmployeeFileFile,\n} from '@/src/client/sdk.gen';\nimport {\n GetIndexEmploymentFileData,\n GetIndexEmploymentFileErrors,\n File as ApiFile,\n ListFilesResponse,\n PostUploadEmployeeFileFileData,\n} from '@/src/client/types.gen';\nimport { useClient } from '@/src/context';\n\n/**\n * Hook to upload a file associated with a specified employment.\n * @returns A mutation result for uploading employee files.\n */\nexport const useUploadFile = () => {\n const { client } = useClient();\n return useMutation({\n mutationFn: (params: PostUploadEmployeeFileFileData['body']) => {\n return postUploadEmployeeFileFile({\n client: client as Client,\n body: params,\n headers: {\n Authorization: ``,\n },\n });\n },\n });\n};\n\n/**\n * Hook to download a file by its ID.\n * @param id - The ID of the file to download.\n * @returns A query result containing the file data.\n */\nexport const useDownloadFile = (id: string) => {\n const { client } = useClient();\n return useQuery({\n queryKey: ['download-file', id],\n queryFn: async () => {\n const result = await getShowFile({\n client: client as Client,\n path: { id: id },\n });\n\n if (result.error) {\n throw result.error;\n }\n\n return result.data;\n },\n select: ({ data }) => data?.file,\n enabled: !!id,\n });\n};\n\n/**\n * Hook to retrieve files associated with a specific employment.\n * @param employmentId - The ID of the employment to retrieve files for.\n * @param queryParams - The query parameters to filter the files.\n * @param queryOptions - Optional TanStack Query options to customize the query behavior.\n * @returns A query result containing the employment files.\n */\nexport const useEmploymentFiles = (\n employmentId: string,\n queryParams: GetIndexEmploymentFileData['query'],\n queryOptions?: Omit<\n UseQueryOptions<\n ListFilesResponse,\n GetIndexEmploymentFileErrors,\n ApiFile[] | undefined,\n unknown[]\n >,\n 'queryKey' | 'queryFn'\n >,\n) => {\n const { client } = useClient();\n return useQuery({\n queryKey: ['employment-files', employmentId],\n queryFn: async () => {\n const result = await getIndexEmploymentFile({\n client: client as Client,\n path: { employment_id: employmentId },\n query: queryParams,\n });\n\n if (result.error) {\n throw result.error;\n }\n\n return result.data;\n },\n ...queryOptions,\n });\n};\n"],"mappings":"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","names":["useMutation","useQuery","useMutation","useQuery","useUploadFile","__name","client","useClient","useMutation","params","postUploadEmployeeFileFile","useDownloadFile","id","useQuery","result","getShowFile","data","useEmploymentFiles","employmentId","queryParams","queryOptions","getIndexEmploymentFile","useGetContractDocumentSignatureSchema","__name","fieldValues","options","useQuery","createHeadlessForm","signatureSchema","useSignContractDocument","client","useClient","useMutation","employmentId","contractDocumentId","payload","postSignContractDocument","useGetShowContractDocument","getShowContractDocument","data","clearBase64Data","useGetContractorSubscriptions","getIndexSubscription","usePostManageContractorSubscriptions","postManageContractorPlusSubscriptionSubscription","useCreateContractorContractDocument","postCreateContractDocument","useContractorOnboardingDetailsSchema","countryCode","getShowContractorContractDetailsCountry","jsfSchema","CONTRACT_PRODUCT_TITLES","useContractorSubscriptionSchemaField","contractorSubscriptions","isLoading","form","selectContractorSubscriptionStepSchema","field","opts","corProductIdentifier","formattedPrice","formatCurrency","product","label","value","description","meta","b","useUpdateUKandSaudiFields","createContractorContractDocumentMutation","uploadFileMutation","parsedValues","uploadFileMutationAsync","mutationToPromise","createContractorContractDocumentMutationAsync","saudiNationalityStatus","ir35Status","ir35SdsFile","ir35ContractDetailsPayload","saudiContractDetailsPayload","IR35_FILE_SUBTYPE","useGetIR35File","ir35Files","isLoadingFiles","useEmploymentFiles","file","id","downloadQuery","useDownloadFile"]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{b as e}from"./chunk-
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import{b as e}from"./chunk-AQHD46DV.js";import{a as n}from"./chunk-P37U34EQ.js";import{jsx as o,jsxs as t}from"react/jsx-runtime";var a=n(({involuntaryOffboardingServiceChargeZendeskId:r,reconciliationInvoiceZendeskId:i})=>t("p",{className:"RemoteFlows__AcknowledgeInformationFees text-xs text-[#71717A]",children:["You'll receive an"," ",o(e,{zendeskId:r,className:"align-baseline",children:"involuntary offboarding service charge \u2197"})," ","on your"," ",o(e,{zendeskId:i,children:"reconciliation invoice \u2197"})]}),"AcknowledgeInformationFees");export{a};
|
|
2
|
+
//# sourceMappingURL=chunk-LGX2ABTK.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a}from"./chunk-
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import{a}from"./chunk-RZYFAL5X.js";import{b as i}from"./chunk-PGWKJ6FK.js";import{a as e}from"./chunk-P37U34EQ.js";import{jsx as d}from"react/jsx-runtime";function y({onSubmit:s,onSuccess:c,onError:t}){let{onboardingBag:o}=i(),u=e(async n=>{try{await s?.({countryCode:n.country});let r=await o.onSubmit(n);if(r?.data){await c?.(r?.data),o?.next();return}r?.error&&t?.({error:r.error,rawError:r.rawError,fieldErrors:[]})}catch(r){t?.({error:r,rawError:r,fieldErrors:[]})}},"handleSubmit"),l=o.stepState.values?.select_country||o.initialValues.select_country;return d(a,{defaultValues:l,onSubmit:u})}e(y,"SelectCountryStep");export{y as a};
|
|
2
|
+
//# sourceMappingURL=chunk-LJJKRBFU.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a as y}from"./chunk-SGE4DLC3.js";import{a as g}from"./chunk-4WSJ2A6Q.js";import{b as D}from"./chunk-
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import{a as y}from"./chunk-SGE4DLC3.js";import{a as g}from"./chunk-4WSJ2A6Q.js";import{b as D}from"./chunk-H2OBH7SK.js";import{a as w}from"./chunk-GCWEOZBS.js";import{b as N}from"./chunk-KQPDXXG3.js";import{a as d}from"./chunk-P37U34EQ.js";import{forwardRef as S}from"react";import{jsx as B}from"react/jsx-runtime";var b=S(({data:a=[],columns:s,className:o=""},n)=>{let{components:m}=N(),i=m?.table;if(!i)throw new Error("Table component not found");return B(i,{ref:n,data:a,columns:s,className:o})});b.displayName="Table";import{Fragment as c,jsx as e,jsxs as t}from"react/jsx-runtime";var _="RemoteFlows__SummaryRow flex justify-between items-center py-2 text-xs",F="RemoteFlows__SummaryRowBorder border-b border-b-1 border-b-[#E4E4E7]",l=d(({children:a,withBorder:s=!1,className:o=""})=>e("div",{className:w(_,s&&F,o),children:a}),"SummaryRow"),k=d(({usedDays:a,bookedDays:s,approvedDaysBeforeTermination:o,approvedDaysAfterTermination:n,remainingDays:m,proposedTerminationDate:i,isUnlimitedPto:f,currentEntitlementDays:p})=>{let r=new Date(i).toLocaleDateString("en-US",{month:"short",day:"numeric",year:"numeric"});return t("div",{children:[t(l,{withBorder:!0,children:[e("label",{children:"Number of days entitled to per year"}),e("p",{"data-testid":"entitled-days",className:"font-bold",children:f?"Unlimited":p})]}),t(l,{children:[e("label",{children:"Total days booked"}),e("p",{"data-testid":"booked-days",className:"font-bold",children:s})]}),t(l,{children:[e("label",{children:"Number of days already used"}),e("p",{"data-testid":"used-days",className:"font-bold",children:a})]}),t(l,{children:[t("label",{children:["Approved for use before ",r]}),e("p",{"data-testid":"approved-days-before-termination",className:"font-bold",children:o})]}),t(l,{withBorder:!0,children:[t("label",{children:["Approved for use after ",r]}),e("p",{"data-testid":"approved-days-after-termination",className:"font-bold",children:n})]}),t(l,{children:[e("label",{children:"Total days remaining unused"}),e("p",{"data-testid":"remaining-days",className:"font-bold",children:m})]}),e(l,{className:"mb-2 py-0",children:t("p",{className:"text-xs text-[#222E39]",children:["Unused days expire on ",r]})})]})},"SummaryTimeOff"),O=[{id:"formattedDate",label:"Dates",className:"w-[250px]",cellClassName:"font-medium"},{id:"duration",label:"Duration",render:d(a=>y({number:a,singular:"day",plural:"days",followCopyGuidelines:!1,showNumber:!0}),"render")},{id:"status",label:"Status"}],C=d(({employeeName:a,timeoffQuery:s,entitledDays:o,countryName:n,currentEntitlementDays:m,formattedProposedTerminationDate:i,onOpenChange:f,open:p})=>{let{data:r,isLoading:u}=s;return e(g,{open:p,onOpenChange:f,title:`${a} paid time off breakdown`,trigger:e(D,{variant:"link",className:"text-xs text-[#3B82F6] font-bold p-0",children:"See detailed time off breakdown \u2197"}),className:"h-full w-[540px] mt-0 ml-auto px-4 RemoteFlows_DrawerTimeOff",children:!u&&e(c,{children:Array.isArray(r?.timeoffs)&&r?.timeoffs?.length>0?t(c,{children:[e("p",{className:"text-[#09090B] font-medium mb-4",children:"This list is for your information only."}),t("p",{className:"text-xs text-[#09090B] mb-1 flex items-center justify-between gap-2",children:[t("span",{children:["Annual entitlement for ",n]}),e("span",{className:"font-bold",children:o})]}),t("p",{className:"text-xs text-[#09090B] mb-6 flex items-center justify-between gap-2",children:[t("span",{children:["Entitlement up to ",i]}),e("span",{className:"font-bold",children:m})]}),e("div",{className:"mb-2",children:e(b,{data:r?.timeoffs,columns:O})}),t("p",{className:"text-xs",children:["Total of"," ",y({number:r?.bookedDays,singular:"day",plural:"days",followCopyGuidelines:!1,showNumber:!0})," ","booked"]})]}):t(c,{children:[e("p",{className:"font-medium mb-1 text-[#09090B]",children:"No recorded time off"}),t("p",{className:"text-sm text-[#09090B]",children:["According to our records, ",a," has not taken any time off this year."]})]})})})},"DrawerTimeOff"),H=d(({employeeName:a,proposedTerminationDate:s,summaryData:o,formattedProposedTerminationDate:n,timeoffQuery:m,employment:i,onOpenChange:f,open:p})=>{let{entitledDays:r,bookedDays:u,usedDays:x,approvedDaysBeforeTermination:R,approvedDaysAfterTermination:P,remainingDays:v,currentEntitlementDays:T,isUnlimitedPto:h}=o.data;return t("div",{className:"RemoteFlows__PaidTimeOff__Container py-3",children:[e("h3",{className:"RemoteFlows__PaidTimeOff__Title mb-2",children:"Paid time off"}),t("p",{className:"RemoteFlows__PaidTimeOff__Description text-sm mb-2",children:["The proposed termination date for ",a," is"," ",n,". You will need to pay them for any unused accrued days. Below is a breakdown of their time off entitlement and usage for the current annual leave period:"]}),t("div",{className:"mb-2",children:[!o?.isLoading&&!o?.isError&&o?.data&&e(k,{usedDays:x,bookedDays:u,currentEntitlementDays:T,approvedDaysBeforeTermination:R,approvedDaysAfterTermination:P,remainingDays:v,proposedTerminationDate:s,isUnlimitedPto:h}),e(C,{employeeName:a,timeoffQuery:m,entitledDays:r,currentEntitlementDays:T,countryName:i?.country?.name??"Unknown",onOpenChange:f,formattedProposedTerminationDate:n,open:p})]})]})},"PaidTimeOff");export{H as a};
|
|
2
|
+
//# sourceMappingURL=chunk-ML56EPFW.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a as
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import{a as Z}from"./chunk-6JFRVHLF.js";import{a as I}from"./chunk-VFRHMNLJ.js";import{a as Q,b as W,c as X,f as Y}from"./chunk-KWJI2HKR.js";import{a as C}from"./chunk-HN5HLFTB.js";import{a as G}from"./chunk-LNV36S6D.js";import{b as ee}from"./chunk-6FKIWCCE.js";import{a as z}from"./chunk-UOY6KW7W.js";import{d as M}from"./chunk-HRG5MSVG.js";import{a as K}from"./chunk-3X36ZFNP.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-MLXUOIBE.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 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,2 +1,2 @@
|
|
|
1
|
-
import{c as p,h as s}from"./chunk-
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import{c as p,h as s}from"./chunk-3QNS3IZB.js";import{b as a}from"./chunk-KQPDXXG3.js";import{a as t}from"./chunk-P37U34EQ.js";import{jsx as m}from"react/jsx-runtime";function D({name:o,description:d,label:l,type:F,onChange:e,component:c,includeErrorMessage:f=!0,additionalProps:u={},maxLength:x,...C}){let{components:P}=a(),{control:T}=p();return m(s,{control:T,name:o,render:({field:n,fieldState:g})=>{let r=c||P?.text;if(!r)throw new Error(`Text component not found for field ${o}`);let y={name:o,description:d,label:l,type:F,onChange:e,metadata:u,maxLength:x,includeErrorMessage:f,...C};return m(r,{field:{...n,onChange:t(i=>{n.onChange(i),e?.(i)},"onChange")},fieldState:g,fieldData:y})}})}t(D,"TextField");export{D as a};
|
|
2
|
+
//# sourceMappingURL=chunk-MZNUCWQU.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/flows/ContractorOnboarding/constants.ts"],"sourcesContent":["export const contractorStandardProductIdentifier =\n 'urn:remotecom:resource:product:contractor:standard:monthly';\nexport const contractorPlusProductIdentifier =\n 'urn:remotecom:resource:product:contractor:plus:monthly';\nexport const corProductIdentifier =\n 'urn:remotecom:resource:product:contractor:aor:monthly';\n"],"mappings":"AAAO,IAAMA,EACX,6DACWC,EACX,yDACWC,EACX","names":["contractorStandardProductIdentifier","contractorPlusProductIdentifier","corProductIdentifier"]}
|
|
1
|
+
{"version":3,"sources":["../src/flows/ContractorOnboarding/constants.ts"],"sourcesContent":["export const contractorStandardProductIdentifier =\n 'urn:remotecom:resource:product:contractor:standard:monthly';\nexport const contractorPlusProductIdentifier =\n 'urn:remotecom:resource:product:contractor:plus:monthly';\nexport const corProductIdentifier =\n 'urn:remotecom:resource:product:contractor:aor:monthly';\n\nexport const IR35_FILE_SUBTYPE = 'ir_35';\n"],"mappings":"AAAO,IAAMA,EACX,6DACWC,EACX,yDACWC,EACX,wDAEWC,EAAoB","names":["contractorStandardProductIdentifier","contractorPlusProductIdentifier","corProductIdentifier","IR35_FILE_SUBTYPE"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{a as f}from"./chunk-3UDRMQNE.js";import{a as m}from"./chunk-WT6E5LO4.js";import{b as p}from"./chunk-JIZKHO7L.js";import{a as u}from"./chunk-VDRNNOVA.js";import{a as l}from"./chunk-N4W7JU2D.js";import{a as d,b as c}from"./chunk-AQHD46DV.js";import{a as t}from"./chunk-P37U34EQ.js";import{format as _}from"date-fns";import{Fragment as v,jsx as s,jsxs as C}from"react/jsx-runtime";var S=t(r=>r===l,"isStandardPricingPlan"),w=t((r,e)=>{let n=e&&e<_(new Date,"yyyy-MM-dd");if(!r&&n)return p({severity:"warning",description:"Backdating the service start date is not supported in the selected Contractor Management plan."})},"showBackDateWarning"),k=t((r,e,n,o)=>{let i=S(n),a=o?.service_duration?.provisional_start_date,y=w(i,a);return{...r,fields:{...r?.fields,"service_duration.provisional_start_date":{description:e,"x-jsf-presentation":{minDate:i?void 0:_(new Date,"yyyy-MM-dd"),...y}}}}},"buildContractDetailsJsfModify"),R=t((r,e)=>{let n=r==="SAU",o=r==="GBR";return!n&&!o?e?.jsfModify?.basic_information:o?{...e?.jsfModify?.basic_information,create:{...e?.jsfModify?.basic_information?.create,ir35:{title:"IR35 Status",description:t(()=>C(v,{children:["What's your contractor's employment status?"," ",s(c,{zendeskId:d.ir35Status,children:"Learn more about IR35"})]}),"description"),oneOf:[{const:"inside",title:"Inside IR35 (deemed employee)"},{const:"outside",title:"Outside IR35"},{const:"exempt",title:"Exempt from IR35"}],"x-jsf-presentation":{inputType:"select"}},ir35_sds_file:{title:"Upload SDS",description:"Status determination statement",type:"string","x-jsf-presentation":{inputType:"file",accept:u.document,multiple:!1,maxSize:20971520,calculateDynamicProperties:t(i=>{let a=i.ir35;return{isVisible:a==="inside"||a==="outside"}},"calculateDynamicProperties")}}},allOf:[{if:{properties:{ir35:{enum:["inside","outside"]}}},then:{required:["ir35_sds_file"]},else:{properties:{ir35_sds_file:!1}}}],required:["ir35"],orderRoot:t(i=>[...i,"ir35","ir35_sds_file"],"orderRoot")}:{...e?.jsfModify?.basic_information,create:{...e?.jsfModify?.basic_information?.create,saudi_nationality_status:{title:"Is your contractor a Saudi Arabia national, or a non-Saudi national contracting via a local business entity or under a Special Privilege Iqama visa?",description:"",type:"string",oneOf:[{const:"national",description:"",title:"Yes"},{const:"non-national",description:"Please be aware that contracting with non-Saudi Arabia nationals that are not operating as a company or under a Special Privilege Iqama visa can lead to fines for operating without proper work authorization. If you are concerned, please speak with the Contractor and/or local Saudi Arabia counsel to ensure compliance.",title:"No"}],"x-jsf-presentation":{inputType:"radio"}}},required:["saudi_nationality_status"],orderRoot:t(i=>[...i,"saudi_nationality_status"],"orderRoot")}},"buildBasicInformationJsfModify"),B=t((r,e)=>{let n=r?.jsfModify?.contract_preview?.fields;return{fields:{contract_preview_header:{...n?.contract_preview_header,"x-jsf-presentation":{Component:t(o=>{let i=n?.contract_preview_header?.["x-jsf-presentation"]?.Component||f;return s(i,{...o})},"Component")}},contract_preview_statement:{...n?.contract_preview_statement,"x-jsf-presentation":{Component:t(o=>{let i=n?.contract_preview_statement?.["x-jsf-presentation"]?.Component||m;return s(i,{reviewCompleted:!!e?.review_completed,...o})},"Component")}},signature:{...n?.signature,"x-jsf-presentation":{calculateDynamicProperties:t(o=>({isVisible:!!o.review_completed}),"calculateDynamicProperties"),...n?.signature?.["x-jsf-presentation"]}}}}},"buildContractPreviewJsfModify");export{k as a,R as b,B as c};
|
|
2
|
+
//# sourceMappingURL=chunk-NQURNHBL.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/flows/ContractorOnboarding/jsfModify.tsx"],"sourcesContent":["import { createStatementProperty } from '@/src/components/form/jsf-utils/createFields';\nimport { zendeskArticles } from '@/src/components/shared/zendesk-drawer/utils';\nimport { ZendeskTriggerButton } from '@/src/components/shared/zendesk-drawer/ZendeskTriggerButton';\nimport { ContractPreviewHeader } from '@/src/flows/ContractorOnboarding/components/ContractPreviewHeader';\nimport { ContractPreviewStatement } from '@/src/flows/ContractorOnboarding/components/ContractPreviewStatement';\nimport { contractorStandardProductIdentifier } from '@/src/flows/ContractorOnboarding/constants';\nimport { ContractorOnboardingFlowProps } from '@/src/flows/ContractorOnboarding/types';\nimport { JSFModify } from '@/src/flows/types';\nimport { FILE_TYPES, MAX_FILE_SIZE } from '@/src/lib/uploadConfig';\nimport { JSFCustomComponentProps } from '@/src/types/remoteFlows';\nimport { format } from 'date-fns';\nimport { FieldValues } from 'react-hook-form';\n\nconst isStandardPricingPlan = (pricingPlan: string | undefined) => {\n return pricingPlan === contractorStandardProductIdentifier;\n};\n\nconst showBackDateWarning = (\n isStandardPricingPlanSelected: boolean,\n provisionalStartDate: string | undefined,\n) => {\n const isStartDateBackdated =\n provisionalStartDate &&\n // Compare full days omitting time of the day\n provisionalStartDate < format(new Date(), 'yyyy-MM-dd');\n\n if (!isStandardPricingPlanSelected && isStartDateBackdated) {\n return createStatementProperty({\n severity: 'warning',\n description:\n 'Backdating the service start date is not supported in the selected Contractor Management plan.',\n });\n }\n\n return undefined;\n};\n\n/**\n * Merges internal jsfModify modifications with user-provided options for contract_details step\n * This abstracts the logic of applying internal field modifications (like dynamic descriptions)\n * while preserving user customizations\n */\nexport const buildContractDetailsJsfModify = (\n userJsfModify: JSFModify | undefined,\n provisionalStartDateDescription: string | undefined,\n selectedPricingPlan: string | undefined,\n fieldValues: FieldValues,\n): JSFModify => {\n const isStandardPricingPlanSelected =\n isStandardPricingPlan(selectedPricingPlan);\n const provisionalStartDate =\n fieldValues?.service_duration?.provisional_start_date;\n const statement = showBackDateWarning(\n isStandardPricingPlanSelected,\n provisionalStartDate,\n );\n return {\n ...userJsfModify,\n fields: {\n ...userJsfModify?.fields,\n ...{\n 'service_duration.provisional_start_date': {\n description: provisionalStartDateDescription,\n 'x-jsf-presentation': {\n minDate: !isStandardPricingPlanSelected\n ? format(new Date(), 'yyyy-MM-dd')\n : undefined,\n ...statement,\n },\n },\n },\n },\n };\n};\n\n/**\n * Builds the basic information jsf modify for the contractor onboarding flow\n * @param countryCode - The country code to use for the onboarding.\n * @param options - The options to use for the onboarding.\n * @returns The basic information jsf modify for the contractor onboarding flow\n */\nexport const buildBasicInformationJsfModify = (\n countryCode: string,\n options: ContractorOnboardingFlowProps['options'] | undefined,\n) => {\n const isSaudiArabia = countryCode === 'SAU';\n const isUk = countryCode === 'GBR';\n\n if (!isSaudiArabia && !isUk) {\n return options?.jsfModify?.basic_information;\n }\n\n if (isUk) {\n return {\n ...options?.jsfModify?.basic_information,\n create: {\n ...options?.jsfModify?.basic_information?.create,\n ir35: {\n title: 'IR35 Status',\n description: () => (\n <>\n What's your contractor's employment status?{' '}\n <ZendeskTriggerButton zendeskId={zendeskArticles.ir35Status}>\n Learn more about IR35\n </ZendeskTriggerButton>\n </>\n ),\n oneOf: [\n {\n const: 'inside',\n title: 'Inside IR35 (deemed employee)',\n },\n {\n const: 'outside',\n title: 'Outside IR35',\n },\n {\n const: 'exempt',\n title: 'Exempt from IR35',\n },\n ],\n 'x-jsf-presentation': {\n inputType: 'select',\n },\n },\n ir35_sds_file: {\n title: 'Upload SDS',\n description: 'Status determination statement',\n type: 'string',\n 'x-jsf-presentation': {\n inputType: 'file',\n accept: FILE_TYPES.document,\n multiple: false,\n maxSize: MAX_FILE_SIZE,\n calculateDynamicProperties: (\n fieldValues: Record<string, unknown>,\n ) => {\n const ir35Status = fieldValues.ir35;\n return {\n isVisible: ir35Status === 'inside' || ir35Status === 'outside',\n };\n },\n },\n },\n },\n allOf: [\n {\n if: {\n properties: {\n ir35: {\n enum: ['inside', 'outside'],\n },\n },\n },\n then: {\n required: ['ir35_sds_file'],\n },\n else: {\n properties: {\n ir35_sds_file: false,\n },\n },\n },\n ],\n required: ['ir35'],\n orderRoot: (originalOrder: string[]) => {\n return [...originalOrder, 'ir35', 'ir35_sds_file'];\n },\n };\n }\n\n return {\n ...options?.jsfModify?.basic_information,\n create: {\n ...options?.jsfModify?.basic_information?.create,\n saudi_nationality_status: {\n title:\n 'Is your contractor a Saudi Arabia national, or a non-Saudi national contracting via a local business entity or under a Special Privilege Iqama visa?',\n description: '',\n type: 'string',\n oneOf: [\n {\n const: 'national',\n description: '',\n title: 'Yes',\n },\n {\n const: 'non-national',\n description:\n 'Please be aware that contracting with non-Saudi Arabia nationals that are not operating as a company or under a Special Privilege Iqama visa can lead to fines for operating without proper work authorization. If you are concerned, please speak with the Contractor and/or local Saudi Arabia counsel to ensure compliance.',\n title: 'No',\n },\n ],\n 'x-jsf-presentation': {\n inputType: 'radio',\n },\n },\n },\n required: ['saudi_nationality_status'],\n orderRoot: (originalOrder: string[]) => {\n return [...originalOrder, 'saudi_nationality_status'];\n },\n };\n};\n\nexport const buildContractPreviewJsfModify = (\n options: ContractorOnboardingFlowProps['options'] | undefined,\n fieldValues: FieldValues,\n) => {\n const userFields = options?.jsfModify?.contract_preview?.fields;\n\n return {\n fields: {\n contract_preview_header: {\n ...userFields?.contract_preview_header,\n 'x-jsf-presentation': {\n Component: (props: JSFCustomComponentProps) => {\n const CustomComponent =\n userFields?.contract_preview_header?.['x-jsf-presentation']\n ?.Component || ContractPreviewHeader;\n return <CustomComponent {...props} />;\n },\n },\n },\n contract_preview_statement: {\n ...userFields?.contract_preview_statement,\n 'x-jsf-presentation': {\n Component: (props: JSFCustomComponentProps) => {\n const CustomComponent =\n userFields?.contract_preview_statement?.['x-jsf-presentation']\n ?.Component || ContractPreviewStatement;\n\n return (\n <CustomComponent\n reviewCompleted={Boolean(fieldValues?.review_completed)}\n {...props}\n />\n );\n },\n },\n },\n signature: {\n ...userFields?.signature,\n 'x-jsf-presentation': {\n calculateDynamicProperties: (\n fieldValuesDynamicProperties: Record<string, unknown>,\n ) => {\n return {\n isVisible: Boolean(fieldValuesDynamicProperties.review_completed),\n };\n },\n // Merge any user-provided signature customizations\n ...userFields?.signature?.['x-jsf-presentation'],\n },\n },\n },\n };\n};\n"],"mappings":"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","names":["format","Fragment","jsx","jsxs","isStandardPricingPlan","__name","pricingPlan","contractorStandardProductIdentifier","showBackDateWarning","isStandardPricingPlanSelected","provisionalStartDate","isStartDateBackdated","format","createStatementProperty","buildContractDetailsJsfModify","userJsfModify","provisionalStartDateDescription","selectedPricingPlan","fieldValues","statement","buildBasicInformationJsfModify","countryCode","options","isSaudiArabia","isUk","ZendeskTriggerButton","zendeskArticles","FILE_TYPES","ir35Status","originalOrder","buildContractPreviewJsfModify","userFields","props","CustomComponent","ContractPreviewHeader","ContractPreviewStatement","fieldValuesDynamicProperties"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{a as s}from"./chunk-KRFK2QRV.js";import{b as n}from"./chunk-Q3ALCPJN.js";import{j as i}from"./chunk-GCWEOZBS.js";import{a as e}from"./chunk-P37U34EQ.js";import{jsx as c}from"react/jsx-runtime";function P({onSubmit:d,onSuccess:m,onError:p}){let{contractorOnboardingBag:r}=n(),l=e(async a=>{try{let t=await r.parseFormValues(a);await d?.(t);let o=await r.onSubmit(a);if(o?.data){await m?.(o?.data),r?.next();return}}catch(t){let o=i(t,r.meta?.fields?.contract_preview);p?.(o)}},"handleSubmit"),u=r.stepState.values?.contract_preview||r.initialValues.contract_preview;return c("div",{className:"space-y-4",children:c(s,{defaultValues:u,onSubmit:l})})}e(P,"ContractPreviewStep");export{P as a};
|
|
2
|
+
//# sourceMappingURL=chunk-OE7PRSME.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/flows/ContractorOnboarding/components/ContractPreviewStep.tsx"],"sourcesContent":["import { useContractorOnboardingContext } from '@/src/flows/ContractorOnboarding/context';\nimport { ContractorOnboardingForm } from '@/src/flows/ContractorOnboarding/components/ContractorOnboardingForm';\nimport { NormalizedFieldError } from '@/src/lib/mutations';\nimport { $TSFixMe } from '@/src/types/remoteFlows';\nimport {\n ContractPreviewFormPayload,\n ContractPreviewResponse,\n} from '@/src/flows/ContractorOnboarding/types';\nimport { handleStepError } from '@/src/lib/utils';\n\ntype ContractPreviewStepProps = {\n /*\n * The function is called when the form is submitted. It receives the form values as an argument.\n */\n onSubmit?: (payload: ContractPreviewFormPayload) => void | Promise<void>;\n /*\n * The function is called when the form submission is successful.\n */\n onSuccess?: (data: ContractPreviewResponse) => void | Promise<void>;\n /*\n * The function is called when an error occurs during form submission.\n */\n onError?: ({\n error,\n rawError,\n fieldErrors,\n }: {\n error: Error;\n rawError: Record<string, unknown>;\n fieldErrors: NormalizedFieldError[];\n }) => void;\n};\n\nexport function ContractPreviewStep({\n onSubmit,\n onSuccess,\n onError,\n}: ContractPreviewStepProps) {\n const { contractorOnboardingBag } = useContractorOnboardingContext();\n\n const handleSubmit = async (payload: $TSFixMe) => {\n try {\n const parsedValues =\n await contractorOnboardingBag.parseFormValues(payload);\n await onSubmit?.(parsedValues as $TSFixMe);\n const response = await contractorOnboardingBag.onSubmit(payload);\n if (response?.data) {\n await onSuccess?.(response?.data as $TSFixMe); // TODO: add type\n contractorOnboardingBag?.next();\n return;\n }\n } catch (error: unknown) {\n const structuredError = handleStepError(\n error,\n contractorOnboardingBag.meta?.fields?.contract_preview,\n );\n onError?.(structuredError);\n }\n };\n\n const initialValues =\n contractorOnboardingBag.stepState.values?.contract_preview ||\n contractorOnboardingBag.initialValues.contract_preview;\n\n return (\n <div className='space-y-4'>\n <ContractorOnboardingForm\n defaultValues={initialValues}\n onSubmit={handleSubmit}\n />\n </div>\n );\n}\n"],"mappings":"gKAkEM,cAAAA,MAAA,oBAjCC,SAASC,EAAoB,CAClC,SAAAC,EACA,UAAAC,EACA,QAAAC,CACF,EAA6B,CAC3B,GAAM,CAAE,wBAAAC,CAAwB,EAAIC,EAA+B,EAE7DC,EAAeC,EAAA,MAAOC,GAAsB,CAChD,GAAI,CACF,IAAMC,EACJ,MAAML,EAAwB,gBAAgBI,CAAO,EACvD,MAAMP,IAAWQ,CAAwB,EACzC,IAAMC,EAAW,MAAMN,EAAwB,SAASI,CAAO,EAC/D,GAAIE,GAAU,KAAM,CAClB,MAAMR,IAAYQ,GAAU,IAAgB,EAC5CN,GAAyB,KAAK,EAC9B,MACF,CACF,OAASO,EAAgB,CACvB,IAAMC,EAAkBC,EACtBF,EACAP,EAAwB,MAAM,QAAQ,gBACxC,EACAD,IAAUS,CAAe,CAC3B,CACF,EAlBqB,gBAoBfE,EACJV,EAAwB,UAAU,QAAQ,kBAC1CA,EAAwB,cAAc,iBAExC,OACEL,EAAC,OAAI,UAAU,YACb,SAAAA,EAACgB,EAAA,CACC,cAAeD,EACf,SAAUR,EACZ,EACF,CAEJ,CAvCgBC,EAAAP,EAAA","names":["jsx","ContractPreviewStep","onSubmit","onSuccess","onError","contractorOnboardingBag","useContractorOnboardingContext","handleSubmit","__name","payload","parsedValues","response","error","structuredError","handleStepError","initialValues","ContractorOnboardingForm"]}
|