@gusto/embedded-react-sdk 0.57.3 → 0.58.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/CHANGELOG.md +88 -0
- package/dist/components/Common/DataView/DataCards/DataCards.js +98 -66
- package/dist/components/Common/DataView/DataCards/DataCards.js.map +1 -1
- package/dist/components/Common/DataView/DataCards/DataCards.module.scss.js +11 -9
- package/dist/components/Common/DataView/DataCards/DataCards.module.scss.js.map +1 -1
- package/dist/components/Common/DataView/DataTable/DataTable.js +86 -75
- package/dist/components/Common/DataView/DataTable/DataTable.js.map +1 -1
- package/dist/components/Common/DataView/DataView.js.map +1 -1
- package/dist/components/Common/DataView/getSortControls.js +22 -0
- package/dist/components/Common/DataView/getSortControls.js.map +1 -0
- package/dist/components/Common/DataView/useDataView.js +30 -24
- package/dist/components/Common/DataView/useDataView.js.map +1 -1
- package/dist/components/Common/UI/Table/Table.js +65 -25
- package/dist/components/Common/UI/Table/Table.js.map +1 -1
- package/dist/components/Common/UI/Table/Table.module.scss.js +8 -4
- package/dist/components/Common/UI/Table/Table.module.scss.js.map +1 -1
- package/dist/components/Common/UI/Table/TableTypes.js.map +1 -1
- package/dist/components/Company/AssignSignatory/CreateSignatory/useCreateSignatory.js +3 -4
- package/dist/components/Company/AssignSignatory/CreateSignatory/useCreateSignatory.js.map +1 -1
- package/dist/components/Company/AssignSignatory/InviteSignatory/useInviteSignatory.js +3 -4
- package/dist/components/Company/AssignSignatory/InviteSignatory/useInviteSignatory.js.map +1 -1
- package/dist/components/Company/AssignSignatory/useAssignSignatory.js +5 -6
- package/dist/components/Company/AssignSignatory/useAssignSignatory.js.map +1 -1
- package/dist/components/Company/BankAccount/BankAccountForm/context.js +3 -4
- package/dist/components/Company/BankAccount/BankAccountForm/context.js.map +1 -1
- package/dist/components/Company/DocumentSigner/DocumentList/useDocumentList.js +3 -4
- package/dist/components/Company/DocumentSigner/DocumentList/useDocumentList.js.map +1 -1
- package/dist/components/Company/FederalTaxes/useFederalTaxes.js +5 -6
- package/dist/components/Company/FederalTaxes/useFederalTaxes.js.map +1 -1
- package/dist/components/Company/Industry/Context.js +6 -7
- package/dist/components/Company/Industry/Context.js.map +1 -1
- package/dist/components/Company/Locations/LocationForm/useLocationForm.js +3 -4
- package/dist/components/Company/Locations/LocationForm/useLocationForm.js.map +1 -1
- package/dist/components/Company/Locations/LocationsList/useLocationsList.js +3 -4
- package/dist/components/Company/Locations/LocationsList/useLocationsList.js.map +1 -1
- package/dist/components/Company/OnboardingOverview/context.js +3 -4
- package/dist/components/Company/OnboardingOverview/context.js.map +1 -1
- package/dist/components/Company/PaySchedule/PaySchedule.js +30 -45
- package/dist/components/Company/PaySchedule/PaySchedule.js.map +1 -1
- package/dist/components/Company/PaySchedule/PayScheduleComponents.js +11 -12
- package/dist/components/Company/PaySchedule/PayScheduleComponents.js.map +1 -1
- package/dist/components/Company/PaySchedule/shared/usePayScheduleForm/fields.js.map +1 -1
- package/dist/components/Company/PaySchedule/shared/usePayScheduleForm/payScheduleSchema.js.map +1 -1
- package/dist/components/Company/PaySchedule/shared/usePayScheduleForm/usePayScheduleForm.js +78 -83
- package/dist/components/Company/PaySchedule/shared/usePayScheduleForm/usePayScheduleForm.js.map +1 -1
- package/dist/components/Company/StateTaxes/StateTaxesForm/context.js +3 -4
- package/dist/components/Company/StateTaxes/StateTaxesForm/context.js.map +1 -1
- package/dist/components/Company/StateTaxes/StateTaxesList/context.js +3 -4
- package/dist/components/Company/StateTaxes/StateTaxesList/context.js.map +1 -1
- package/dist/components/Company/StateTaxes/TaxRateManagement/context.js +3 -4
- package/dist/components/Company/StateTaxes/TaxRateManagement/context.js.map +1 -1
- package/dist/components/Contractor/Compensation/management/CompensationEditForm.js +45 -54
- package/dist/components/Contractor/Compensation/management/CompensationEditForm.js.map +1 -1
- package/dist/components/Contractor/Compensation/shared/useContractorPayForm/contractorPaySchema.js +17 -22
- package/dist/components/Contractor/Compensation/shared/useContractorPayForm/contractorPaySchema.js.map +1 -1
- package/dist/components/Contractor/ContractorList/management/ManagementContractorList.js +1 -0
- package/dist/components/Contractor/ContractorList/management/ManagementContractorList.js.map +1 -1
- package/dist/components/Contractor/ContractorList/management/ManagementContractorListView.js +122 -113
- package/dist/components/Contractor/ContractorList/management/ManagementContractorListView.js.map +1 -1
- package/dist/components/Contractor/ContractorList/shared/useContractorList.js +63 -54
- package/dist/components/Contractor/ContractorList/shared/useContractorList.js.map +1 -1
- package/dist/components/Contractor/PaymentMethod/onboarding/PaymentMethod.js +39 -48
- package/dist/components/Contractor/PaymentMethod/onboarding/PaymentMethod.js.map +1 -1
- package/dist/components/Contractor/Profile/onboarding/ContractorProfile.js +76 -69
- package/dist/components/Contractor/Profile/onboarding/ContractorProfile.js.map +1 -1
- package/dist/components/Contractor/Profile/shared/useContractorDetailsForm/contractorDetailsSchema.js +27 -29
- package/dist/components/Contractor/Profile/shared/useContractorDetailsForm/contractorDetailsSchema.js.map +1 -1
- package/dist/components/Contractor/Profile/shared/useContractorDetailsForm/useContractorDetailsForm.js +14 -12
- package/dist/components/Contractor/Profile/shared/useContractorDetailsForm/useContractorDetailsForm.js.map +1 -1
- package/dist/components/Contractor/shared/hourlyRate.js +14 -0
- package/dist/components/Contractor/shared/hourlyRate.js.map +1 -0
- package/dist/components/Employee/Compensation/management/CompensationCard/CompensationCard.js +63 -63
- package/dist/components/Employee/Compensation/management/CompensationCard/CompensationCard.js.map +1 -1
- package/dist/components/Employee/Documents/onboarding/DocumentSigner/DocumentList/useDocumentList.js +3 -4
- package/dist/components/Employee/Documents/onboarding/DocumentSigner/DocumentList/useDocumentList.js.map +1 -1
- package/dist/components/Employee/PaymentMethod/onboarding/ListView.js +65 -74
- package/dist/components/Employee/PaymentMethod/onboarding/ListView.js.map +1 -1
- package/dist/components/Payroll/Dismissal/DismissalPayPeriodSelection/DismissalPayPeriodSelection.js +16 -16
- package/dist/components/Payroll/Dismissal/DismissalPayPeriodSelection/DismissalPayPeriodSelection.js.map +1 -1
- package/dist/components/Payroll/GrossUpModal/GrossUpModal.js +2 -3
- package/dist/components/Payroll/GrossUpModal/GrossUpModal.js.map +1 -1
- package/dist/components/Payroll/OffCycleCreation/OffCycleCreation.js +84 -82
- package/dist/components/Payroll/OffCycleCreation/OffCycleCreation.js.map +1 -1
- package/dist/components/Payroll/OffCycleTaxWithholdingTable/getDefaultWithholdingPayPeriod.js +8 -0
- package/dist/components/Payroll/OffCycleTaxWithholdingTable/getDefaultWithholdingPayPeriod.js.map +1 -0
- package/dist/components/Payroll/PayrollConfiguration/PayrollConfigurationPresentation.js +91 -88
- package/dist/components/Payroll/PayrollConfiguration/PayrollConfigurationPresentation.js.map +1 -1
- package/dist/components/Payroll/PayrollEditEmployee/PayrollEditEmployee.js +16 -16
- package/dist/components/Payroll/PayrollEditEmployee/PayrollEditEmployee.js.map +1 -1
- package/dist/components/Payroll/PayrollEditEmployee/PayrollEditEmployeePresentation.js +146 -134
- package/dist/components/Payroll/PayrollEditEmployee/PayrollEditEmployeePresentation.js.map +1 -1
- package/dist/components/Payroll/PayrollEditEmployee/PayrollEditEmployeePresentation.module.scss.js +14 -12
- package/dist/components/Payroll/PayrollEditEmployee/PayrollEditEmployeePresentation.module.scss.js.map +1 -1
- package/dist/components/Payroll/PayrollEditEmployee/TimeOffField.js +34 -33
- package/dist/components/Payroll/PayrollEditEmployee/TimeOffField.js.map +1 -1
- package/dist/components/Payroll/PayrollEditEmployee/shared/usePayrollEditEmployeeForm/fields.js +49 -48
- package/dist/components/Payroll/PayrollEditEmployee/shared/usePayrollEditEmployeeForm/fields.js.map +1 -1
- package/dist/components/Payroll/PayrollExecutionFlow/PayrollExecutionFlow.js.map +1 -1
- package/dist/components/Payroll/PayrollExecutionFlow/payrollExecutionMachine.js +0 -4
- package/dist/components/Payroll/PayrollExecutionFlow/payrollExecutionMachine.js.map +1 -1
- package/dist/components/Payroll/PayrollFlow/PayrollFlow.js.map +1 -1
- package/dist/components/Payroll/PayrollFlow/PayrollFlowComponents.js +51 -38
- package/dist/components/Payroll/PayrollFlow/PayrollFlowComponents.js.map +1 -1
- package/dist/components/Payroll/PayrollFlow/payrollStateMachine.js +121 -102
- package/dist/components/Payroll/PayrollFlow/payrollStateMachine.js.map +1 -1
- package/dist/components/Payroll/PayrollLanding/PayrollLanding.js.map +1 -1
- package/dist/components/Payroll/PayrollList/PayrollList.js +79 -74
- package/dist/components/Payroll/PayrollList/PayrollList.js.map +1 -1
- package/dist/components/Payroll/PayrollOverview/PayrollOverview.js +92 -83
- package/dist/components/Payroll/PayrollOverview/PayrollOverview.js.map +1 -1
- package/dist/components/Payroll/PayrollReceipts/PayrollReceiptsPresentation.js +23 -27
- package/dist/components/Payroll/PayrollReceipts/PayrollReceiptsPresentation.js.map +1 -1
- package/dist/components/Payroll/PrintChecks/PrintChecksForm/PrintChecksForm.js +82 -75
- package/dist/components/Payroll/PrintChecks/PrintChecksForm/PrintChecksForm.js.map +1 -1
- package/dist/components/Payroll/RropPayrollEditEmployee/RropPayrollEditEmployee.js +416 -0
- package/dist/components/Payroll/RropPayrollEditEmployee/RropPayrollEditEmployee.js.map +1 -0
- package/dist/components/Payroll/{UNSTABLE_PayrollEditEmployee/UNSTABLE_PayrollEditEmployee.module.scss.js → RropPayrollEditEmployee/RropPayrollEditEmployee.module.scss.js} +1 -1
- package/dist/components/Payroll/RropPayrollEditEmployee/RropPayrollEditEmployee.module.scss.js.map +1 -0
- package/dist/components/Payroll/TransitionConfiguration/TransitionConfiguration.js +97 -0
- package/dist/components/Payroll/TransitionConfiguration/TransitionConfiguration.js.map +1 -0
- package/dist/components/Payroll/TransitionConfiguration/TransitionConfigurationPresentation.js +106 -0
- package/dist/components/Payroll/TransitionConfiguration/TransitionConfigurationPresentation.js.map +1 -0
- package/dist/components/Payroll/{TransitionCreation/TransitionCreationPresentation.module.scss.js → TransitionConfiguration/TransitionConfigurationPresentation.module.scss.js} +1 -1
- package/dist/components/Payroll/TransitionConfiguration/TransitionConfigurationPresentation.module.scss.js.map +1 -0
- package/dist/components/Payroll/TransitionConfiguration/TransitionConfigurationTypes.js +10 -0
- package/dist/components/Payroll/TransitionConfiguration/TransitionConfigurationTypes.js.map +1 -0
- package/dist/components/Payroll/TransitionPayrollAlert/TransitionPayrollAlert.js +86 -64
- package/dist/components/Payroll/TransitionPayrollAlert/TransitionPayrollAlert.js.map +1 -1
- package/dist/components/Payroll/TransitionPayrollAlert/TransitionPayrollAlertPresentation.js +126 -77
- package/dist/components/Payroll/TransitionPayrollAlert/TransitionPayrollAlertPresentation.js.map +1 -1
- package/dist/components/Payroll/TransitionPayrollAlert/TransitionPayrollAlertPresentation.module.scss.js +8 -0
- package/dist/components/Payroll/TransitionPayrollAlert/TransitionPayrollAlertPresentation.module.scss.js.map +1 -0
- package/dist/components/Payroll/index.js +16 -20
- package/dist/components/Payroll/index.js.map +1 -1
- package/dist/components/Payroll/usePreparedPayrollData.js +2 -3
- package/dist/components/Payroll/usePreparedPayrollData.js.map +1 -1
- package/dist/components/Payroll/useUnprocessedTransitionPayPeriods.js +11 -14
- package/dist/components/Payroll/useUnprocessedTransitionPayPeriods.js.map +1 -1
- package/dist/contexts/ApiProvider/ApiProvider.js +18 -17
- package/dist/contexts/ApiProvider/ApiProvider.js.map +1 -1
- package/dist/contexts/ApiProvider/payScheduleCustomNameHook.js +31 -0
- package/dist/contexts/ApiProvider/payScheduleCustomNameHook.js.map +1 -0
- package/dist/contexts/FeaturesProvider/FeaturesProvider.js +14 -0
- package/dist/contexts/FeaturesProvider/FeaturesProvider.js.map +1 -0
- package/dist/contexts/FeaturesProvider/useFeature.js +7 -0
- package/dist/contexts/FeaturesProvider/useFeature.js.map +1 -0
- package/dist/contexts/GustoProvider/GustoProviderCustomUIAdapter.js +32 -30
- package/dist/contexts/GustoProvider/GustoProviderCustomUIAdapter.js.map +1 -1
- package/dist/contexts/UnstableFeaturesProvider/useUnstableFeature.js.map +1 -1
- package/dist/i18n/I18n.js +2 -3
- package/dist/i18n/I18n.js.map +1 -1
- package/dist/i18n/en/Contractor.Profile.json.js +1 -1
- package/dist/i18n/en/Payroll.PayrollEditEmployee.json.js +29 -23
- package/dist/i18n/en/Payroll.PayrollEditEmployee.json.js.map +1 -1
- package/dist/i18n/en/Payroll.PayrollLanding.json.js +1 -1
- package/dist/i18n/en/{Payroll.UNSTABLE_PayrollEditEmployee.json.js → Payroll.RropPayrollEditEmployee.json.js} +42 -38
- package/dist/i18n/en/Payroll.RropPayrollEditEmployee.json.js.map +1 -0
- package/dist/i18n/en/Payroll.TransitionConfiguration.json.js +28 -0
- package/dist/i18n/en/Payroll.TransitionConfiguration.json.js.map +1 -0
- package/dist/i18n/en/Payroll.TransitionPayrollAlert.json.js +16 -12
- package/dist/i18n/en/Payroll.TransitionPayrollAlert.json.js.map +1 -1
- package/dist/i18n/en/common.json.js +1 -1
- package/dist/package.json.js +1 -1
- package/dist/partner-hook-utils/form/composeSubmitHandler.js +55 -48
- package/dist/partner-hook-utils/form/composeSubmitHandler.js.map +1 -1
- package/dist/partner-hook-utils/form/fields/RadioGroupHookField.js +31 -29
- package/dist/partner-hook-utils/form/fields/RadioGroupHookField.js.map +1 -1
- package/dist/shared/constants.js +2 -1
- package/dist/shared/constants.js.map +1 -1
- package/dist/src/components/Common/DataView/DataCards/DataCards.d.ts +3 -1
- package/dist/src/components/Common/DataView/DataTable/DataTable.d.ts +3 -1
- package/dist/src/components/Common/DataView/DataView.d.ts +2 -0
- package/dist/src/components/Common/DataView/getSortControls.d.ts +24 -0
- package/dist/src/components/Common/DataView/useDataView.d.ts +22 -1
- package/dist/src/components/Common/UI/Table/TableTypes.d.ts +71 -2
- package/dist/src/components/Company/PaySchedule/PaySchedule.d.ts +1 -9
- package/dist/src/components/Company/PaySchedule/PayScheduleComponents.d.ts +0 -1
- package/dist/src/components/Company/PaySchedule/shared/usePayScheduleForm/fields.d.ts +1 -1
- package/dist/src/components/Company/PaySchedule/shared/usePayScheduleForm/payScheduleSchema.d.ts +1 -1
- package/dist/src/components/Company/PaySchedule/shared/usePayScheduleForm/usePayScheduleForm.d.ts +3 -14
- package/dist/src/components/Contractor/ContractorList/management/ManagementContractorListView.d.ts +2 -2
- package/dist/src/components/Contractor/ContractorList/shared/index.d.ts +1 -1
- package/dist/src/components/Contractor/ContractorList/shared/useContractorList.d.ts +38 -0
- package/dist/src/components/Contractor/shared/hourlyRate.d.ts +23 -0
- package/dist/src/components/Payroll/OffCycleTaxWithholdingTable/getDefaultWithholdingPayPeriod.d.ts +9 -0
- package/dist/src/components/Payroll/PayrollEditEmployee/TimeOffField.d.ts +3 -1
- package/dist/src/components/Payroll/PayrollEditEmployee/shared/usePayrollEditEmployeeForm/fields.d.ts +2 -0
- package/dist/src/components/Payroll/PayrollExecutionFlow/PayrollExecutionFlow.d.ts +8 -6
- package/dist/src/components/Payroll/PayrollExecutionFlow/payrollExecutionMachine.d.ts +0 -8
- package/dist/src/components/Payroll/PayrollFlow/PayrollFlow.d.ts +5 -3
- package/dist/src/components/Payroll/PayrollFlow/PayrollFlowComponents.d.ts +2 -3
- package/dist/src/components/Payroll/PayrollFlow/payrollStateMachine.d.ts +1 -1
- package/dist/src/components/Payroll/PayrollLanding/PayrollLanding.d.ts +18 -5
- package/dist/src/components/Payroll/PayrollList/PayrollList.d.ts +11 -5
- package/dist/src/components/Payroll/{UNSTABLE_PayrollEditEmployee/UNSTABLE_PayrollEditEmployee.d.ts → RropPayrollEditEmployee/RropPayrollEditEmployee.d.ts} +9 -5
- package/dist/src/components/Payroll/TransitionConfiguration/TransitionConfiguration.d.ts +55 -0
- package/dist/src/components/Payroll/TransitionConfiguration/TransitionConfigurationPresentation.d.ts +9 -0
- package/dist/src/components/Payroll/TransitionConfiguration/TransitionConfigurationTypes.d.ts +52 -0
- package/dist/src/components/Payroll/TransitionConfiguration/index.d.ts +2 -0
- package/dist/src/components/Payroll/TransitionPayrollAlert/TransitionPayrollAlertPresentation.d.ts +5 -2
- package/dist/src/components/Payroll/index.d.ts +2 -6
- package/dist/src/contexts/ApiProvider/payScheduleCustomNameHook.d.ts +14 -0
- package/dist/src/contexts/ApiProvider/payScheduleCustomNameHook.test.d.ts +1 -0
- package/dist/src/contexts/ComponentAdapter/componentAdapterTypes.d.ts +1 -1
- package/dist/src/contexts/FeaturesProvider/FeaturesProvider.d.ts +21 -0
- package/dist/src/contexts/FeaturesProvider/useFeature.d.ts +53 -0
- package/dist/src/contexts/GustoProvider/GustoProviderCustomUIAdapter.d.ts +3 -0
- package/dist/src/contexts/UnstableFeaturesProvider/useUnstableFeature.d.ts +38 -10
- package/dist/src/contexts/index.d.ts +1 -0
- package/dist/src/i18n/en/common.json.d.ts +5 -1
- package/dist/src/i18n/types.d.ts +113 -66
- package/dist/src/partner-hook-utils/form/fields/RadioGroupHookField.d.ts +9 -7
- package/dist/src/shared/constants.d.ts +4 -2
- package/dist/src/test-utils/renderWithProviders.d.ts +2 -0
- package/dist/style.css +1 -1
- package/docs/guides/endpoint-inventory.json +24 -27
- package/package.json +15 -14
- package/dist/components/Payroll/PayrollFlow/TransitionFlowContextual.js +0 -29
- package/dist/components/Payroll/PayrollFlow/TransitionFlowContextual.js.map +0 -1
- package/dist/components/Payroll/Transition/TransitionFlow.js +0 -60
- package/dist/components/Payroll/Transition/TransitionFlow.js.map +0 -1
- package/dist/components/Payroll/Transition/TransitionFlowComponents.js +0 -31
- package/dist/components/Payroll/Transition/TransitionFlowComponents.js.map +0 -1
- package/dist/components/Payroll/Transition/transitionStateMachine.js +0 -49
- package/dist/components/Payroll/Transition/transitionStateMachine.js.map +0 -1
- package/dist/components/Payroll/TransitionCreation/TransitionCreation.js +0 -100
- package/dist/components/Payroll/TransitionCreation/TransitionCreation.js.map +0 -1
- package/dist/components/Payroll/TransitionCreation/TransitionCreationPresentation.js +0 -110
- package/dist/components/Payroll/TransitionCreation/TransitionCreationPresentation.js.map +0 -1
- package/dist/components/Payroll/TransitionCreation/TransitionCreationPresentation.module.scss.js.map +0 -1
- package/dist/components/Payroll/TransitionCreation/TransitionCreationTypes.js +0 -21
- package/dist/components/Payroll/TransitionCreation/TransitionCreationTypes.js.map +0 -1
- package/dist/components/Payroll/TransitionPayroll/TransitionPayroll.js +0 -48
- package/dist/components/Payroll/TransitionPayroll/TransitionPayroll.js.map +0 -1
- package/dist/components/Payroll/TransitionPayroll/TransitionPayrollComponents.js +0 -35
- package/dist/components/Payroll/TransitionPayroll/TransitionPayrollComponents.js.map +0 -1
- package/dist/components/Payroll/TransitionPayroll/transitionPayrollStateMachine.js +0 -23
- package/dist/components/Payroll/TransitionPayroll/transitionPayrollStateMachine.js.map +0 -1
- package/dist/components/Payroll/TransitionPayroll/useResolveTransitionPayroll.js +0 -29
- package/dist/components/Payroll/TransitionPayroll/useResolveTransitionPayroll.js.map +0 -1
- package/dist/components/Payroll/UNSTABLE_PayrollEditEmployee/UNSTABLE_PayrollEditEmployee.js +0 -411
- package/dist/components/Payroll/UNSTABLE_PayrollEditEmployee/UNSTABLE_PayrollEditEmployee.js.map +0 -1
- package/dist/components/Payroll/UNSTABLE_PayrollEditEmployee/UNSTABLE_PayrollEditEmployee.module.scss.js.map +0 -1
- package/dist/i18n/en/Payroll.Transition.json.js +0 -8
- package/dist/i18n/en/Payroll.Transition.json.js.map +0 -1
- package/dist/i18n/en/Payroll.TransitionCreation.json.js +0 -26
- package/dist/i18n/en/Payroll.TransitionCreation.json.js.map +0 -1
- package/dist/i18n/en/Payroll.UNSTABLE_PayrollEditEmployee.json.js.map +0 -1
- package/dist/src/components/Payroll/PayrollFlow/TransitionFlowContextual.d.ts +0 -7
- package/dist/src/components/Payroll/Transition/TransitionFlow.d.ts +0 -55
- package/dist/src/components/Payroll/Transition/TransitionFlowComponents.d.ts +0 -52
- package/dist/src/components/Payroll/Transition/index.d.ts +0 -2
- package/dist/src/components/Payroll/Transition/transitionStateMachine.d.ts +0 -29
- package/dist/src/components/Payroll/TransitionCreation/TransitionCreation.d.ts +0 -22
- package/dist/src/components/Payroll/TransitionCreation/TransitionCreationPresentation.d.ts +0 -9
- package/dist/src/components/Payroll/TransitionCreation/TransitionCreationTypes.d.ts +0 -57
- package/dist/src/components/Payroll/TransitionCreation/index.d.ts +0 -2
- package/dist/src/components/Payroll/TransitionPayroll/TransitionPayroll.d.ts +0 -55
- package/dist/src/components/Payroll/TransitionPayroll/TransitionPayrollComponents.d.ts +0 -24
- package/dist/src/components/Payroll/TransitionPayroll/TransitionPayrollTypes.d.ts +0 -23
- package/dist/src/components/Payroll/TransitionPayroll/index.d.ts +0 -2
- package/dist/src/components/Payroll/TransitionPayroll/transitionPayrollStateMachine.d.ts +0 -15
- package/dist/src/components/Payroll/TransitionPayroll/useResolveTransitionPayroll.d.ts +0 -28
- /package/dist/src/components/{Payroll/Transition/transitionStateMachine.test.d.ts → Common/DataView/getSortControls.test.d.ts} +0 -0
|
@@ -1,33 +1,39 @@
|
|
|
1
|
-
import { useMemo as
|
|
2
|
-
import { useContractorsList as
|
|
3
|
-
import { useContractorsDeleteMutation as
|
|
4
|
-
import { useContractorsUpdateOnboardingStatusMutation as
|
|
5
|
-
import { useContractorsDeleteV1ContractorsContractorUuidTerminationMutation as
|
|
6
|
-
import { useContractorsDeleteV1ContractorsContractorUuidRehireMutation as
|
|
7
|
-
import { keepPreviousData as
|
|
8
|
-
import { usePagination as
|
|
9
|
-
import { useBaseSubmit as
|
|
10
|
-
import { composeErrorHandler as
|
|
1
|
+
import { useState as v, useMemo as P } from "react";
|
|
2
|
+
import { useContractorsList as U } from "@gusto/embedded-api/react-query/contractorsList";
|
|
3
|
+
import { useContractorsDeleteMutation as B } from "@gusto/embedded-api/react-query/contractorsDelete";
|
|
4
|
+
import { useContractorsUpdateOnboardingStatusMutation as q } from "@gusto/embedded-api/react-query/contractorsUpdateOnboardingStatus";
|
|
5
|
+
import { useContractorsDeleteV1ContractorsContractorUuidTerminationMutation as F } from "@gusto/embedded-api/react-query/contractorsDeleteV1ContractorsContractorUuidTermination";
|
|
6
|
+
import { useContractorsDeleteV1ContractorsContractorUuidRehireMutation as G } from "@gusto/embedded-api/react-query/contractorsDeleteV1ContractorsContractorUuidRehire";
|
|
7
|
+
import { keepPreviousData as T } from "@tanstack/react-query";
|
|
8
|
+
import { usePagination as H } from "../../../../hooks/usePagination/usePagination.js";
|
|
9
|
+
import { useBaseSubmit as V } from "../../../Base/useBaseSubmit.js";
|
|
10
|
+
import { composeErrorHandler as x } from "../../../../partner-hook-utils/composeErrorHandler.js";
|
|
11
11
|
import { ContractorOnboardingStatus as u } from "../../../../shared/constants.js";
|
|
12
|
-
const
|
|
12
|
+
const $ = {
|
|
13
|
+
ascending: "asc",
|
|
14
|
+
descending: "desc"
|
|
15
|
+
}, k = /* @__PURE__ */ new Set([
|
|
13
16
|
u.SELF_ONBOARDING_INVITED,
|
|
14
17
|
u.SELF_ONBOARDING_STARTED
|
|
15
18
|
]);
|
|
16
|
-
function
|
|
17
|
-
const e = [], i =
|
|
18
|
-
return
|
|
19
|
+
function Q(n, s) {
|
|
20
|
+
const e = [], i = n.onboardingStatus;
|
|
21
|
+
return s === "active" ? (e.push("view"), n.upcomingEmployment && n.rehireCancellationEligible ? e.push("cancel_rehire") : n.dismissalDate && n.dismissalCancellationEligible ? e.push("cancel_dismissal") : !n.dismissalDate && !n.upcomingEmployment && e.push("dismiss"), e) : s === "terminated" ? (e.push("view"), n.upcomingEmployment ? n.rehireCancellationEligible && e.push("cancel_rehire") : n.dismissalCancellationEligible ? e.push("cancel_dismissal") : n.isActive || e.push("rehire"), e) : (!!i && k.has(i) ? e.push("cancel_self_onboarding") : e.push("edit"), e.push("delete"), s === "onboarding" && i === u.ONBOARDING_COMPLETED && e.push("view"), e);
|
|
19
22
|
}
|
|
20
|
-
function
|
|
21
|
-
companyId:
|
|
22
|
-
contractorType:
|
|
23
|
+
function ie({
|
|
24
|
+
companyId: n,
|
|
25
|
+
contractorType: s
|
|
23
26
|
}) {
|
|
24
|
-
const { currentPage: e, itemsPerPage: i, getPaginationProps:
|
|
27
|
+
const { currentPage: e, itemsPerPage: i, getPaginationProps: d, resetPage: b } = H(), [o, S] = v(), E = P(() => {
|
|
25
28
|
const t = {
|
|
26
|
-
companyUuid:
|
|
29
|
+
companyUuid: n,
|
|
27
30
|
page: e,
|
|
28
|
-
per: i
|
|
31
|
+
per: i,
|
|
32
|
+
// Spread conditionally rather than passing `sortBy: undefined`, so an unsorted list
|
|
33
|
+
// sends no `sort_by` at all and keeps the query key it had before sorting existed.
|
|
34
|
+
...o ? { sortBy: `${o.field}:${$[o.direction]}` } : {}
|
|
29
35
|
};
|
|
30
|
-
switch (
|
|
36
|
+
switch (s) {
|
|
31
37
|
case "active":
|
|
32
38
|
return { ...t, onboardedActive: !0 };
|
|
33
39
|
case "onboarding":
|
|
@@ -37,14 +43,14 @@ function $({
|
|
|
37
43
|
default:
|
|
38
44
|
return t;
|
|
39
45
|
}
|
|
40
|
-
}, [
|
|
41
|
-
baseSubmitHandler:
|
|
42
|
-
error:
|
|
43
|
-
setError:
|
|
44
|
-
} =
|
|
46
|
+
}, [n, e, i, s, o]), m = U(E, { placeholderData: T }), g = B(), p = q(), h = F(), f = G(), {
|
|
47
|
+
baseSubmitHandler: c,
|
|
48
|
+
error: O,
|
|
49
|
+
setError: A
|
|
50
|
+
} = V("ContractorList"), C = x([m], { submitError: O, setSubmitError: A }), D = g.isPending || p.isPending || h.isPending || f.isPending, { data: r, isFetching: l } = m, _ = P(() => (r?.showContractors ?? []).map((t) => ({
|
|
45
51
|
...t,
|
|
46
|
-
allowedActions:
|
|
47
|
-
})), [
|
|
52
|
+
allowedActions: Q(t, s)
|
|
53
|
+
})), [r?.showContractors, s]), w = r?.httpMeta.response.headers ? d(r.httpMeta.response.headers, l) : {
|
|
48
54
|
handleNextPage: () => {
|
|
49
55
|
},
|
|
50
56
|
handleFirstPage: () => {
|
|
@@ -59,52 +65,55 @@ function $({
|
|
|
59
65
|
totalPages: 1,
|
|
60
66
|
totalCount: 0,
|
|
61
67
|
itemsPerPage: 5
|
|
62
|
-
},
|
|
63
|
-
await
|
|
64
|
-
await
|
|
65
|
-
request: { contractorUuid:
|
|
68
|
+
}, L = async (t) => {
|
|
69
|
+
await c(t, async (a) => {
|
|
70
|
+
await g.mutateAsync({
|
|
71
|
+
request: { contractorUuid: a }
|
|
66
72
|
});
|
|
67
73
|
});
|
|
68
|
-
},
|
|
69
|
-
let
|
|
70
|
-
return await
|
|
71
|
-
|
|
74
|
+
}, N = async (t) => {
|
|
75
|
+
let a;
|
|
76
|
+
return await c(t, async (I) => {
|
|
77
|
+
a = (await p.mutateAsync({
|
|
72
78
|
request: {
|
|
73
|
-
contractorUuid:
|
|
79
|
+
contractorUuid: I,
|
|
74
80
|
contractorOnboardingStatusUpdateRequestBody: {
|
|
75
81
|
onboardingStatus: u.ADMIN_ONBOARDING_INCOMPLETE
|
|
76
82
|
}
|
|
77
83
|
}
|
|
78
84
|
})).contractorOnboardingStatus;
|
|
79
|
-
}),
|
|
80
|
-
},
|
|
81
|
-
await
|
|
82
|
-
await
|
|
83
|
-
request: { contractorUuid:
|
|
85
|
+
}), a;
|
|
86
|
+
}, M = async (t) => {
|
|
87
|
+
await c(t, async (a) => {
|
|
88
|
+
await h.mutateAsync({
|
|
89
|
+
request: { contractorUuid: a }
|
|
84
90
|
});
|
|
85
91
|
});
|
|
86
|
-
},
|
|
87
|
-
await
|
|
88
|
-
await
|
|
89
|
-
request: { contractorUuid:
|
|
92
|
+
}, y = async (t) => {
|
|
93
|
+
await c(t, async (a) => {
|
|
94
|
+
await f.mutateAsync({
|
|
95
|
+
request: { contractorUuid: a }
|
|
90
96
|
});
|
|
91
97
|
});
|
|
98
|
+
}, R = (t) => {
|
|
99
|
+
S(t), b();
|
|
92
100
|
};
|
|
93
|
-
return !
|
|
101
|
+
return !r && l ? {
|
|
94
102
|
isLoading: !0,
|
|
95
|
-
errorHandling:
|
|
103
|
+
errorHandling: C
|
|
96
104
|
} : {
|
|
97
105
|
isLoading: !1,
|
|
98
106
|
data: {
|
|
99
|
-
contractors:
|
|
107
|
+
contractors: _
|
|
100
108
|
},
|
|
101
|
-
pagination:
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
109
|
+
pagination: w,
|
|
110
|
+
sort: { current: o, onSortChange: R },
|
|
111
|
+
status: { isFetching: l, isPending: D },
|
|
112
|
+
actions: { onDelete: L, onCancelSelfOnboarding: N, onCancelDismissal: M, onCancelRehire: y },
|
|
113
|
+
errorHandling: C
|
|
105
114
|
};
|
|
106
115
|
}
|
|
107
116
|
export {
|
|
108
|
-
|
|
117
|
+
ie as useContractorList
|
|
109
118
|
};
|
|
110
119
|
//# sourceMappingURL=useContractorList.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useContractorList.js","sources":["../../../../../src/components/Contractor/ContractorList/shared/useContractorList.ts"],"sourcesContent":["import { useMemo } from 'react'\nimport { useContractorsList } from '@gusto/embedded-api/react-query/contractorsList'\nimport type { Contractor } from '@gusto/embedded-api/models/components/contractor'\nimport type { ContractorOnboardingStatus as ContractorOnboardingStatusEntity } from '@gusto/embedded-api/models/components/contractoronboardingstatus'\nimport { useContractorsDeleteMutation } from '@gusto/embedded-api/react-query/contractorsDelete'\nimport { useContractorsUpdateOnboardingStatusMutation } from '@gusto/embedded-api/react-query/contractorsUpdateOnboardingStatus'\nimport { useContractorsDeleteV1ContractorsContractorUuidTerminationMutation } from '@gusto/embedded-api/react-query/contractorsDeleteV1ContractorsContractorUuidTermination'\nimport { useContractorsDeleteV1ContractorsContractorUuidRehireMutation } from '@gusto/embedded-api/react-query/contractorsDeleteV1ContractorsContractorUuidRehire'\nimport { keepPreviousData } from '@tanstack/react-query'\nimport { usePagination } from '@/hooks/usePagination/usePagination'\nimport type { PaginationControlProps } from '@/components/Common/PaginationControl/PaginationControlTypes'\nimport { useBaseSubmit } from '@/components/Base/useBaseSubmit'\nimport { composeErrorHandler } from '@/partner-hook-utils/composeErrorHandler'\nimport { ContractorOnboardingStatus } from '@/shared/constants'\nimport type { HookLoadingResult, BaseHookReady } from '@/partner-hook-utils/types'\n\n/**\n * Action that may be performed on a contractor row, determined by the contractor's onboarding\n * and employment state and the `contractorType` filter passed to {@link useContractorList}.\n *\n * @public\n */\nexport type ContractorAction =\n | 'edit'\n | 'delete'\n | 'cancel_self_onboarding'\n | 'view'\n | 'dismiss'\n | 'rehire'\n | 'cancel_dismissal'\n | 'cancel_rehire'\n\n/**\n * A contractor entity extended with the actions permitted on it.\n *\n * @public\n */\nexport interface ContractorWithActions extends Contractor {\n /** Actions permitted for this contractor given its onboarding/employment state and the active filter. */\n allowedActions: ContractorAction[]\n}\n\n/**\n * Filter applied to {@link useContractorList} that scopes the result set and tailors the per-row action list.\n *\n * @public\n */\nexport type ContractorType = 'active' | 'onboarding' | 'terminated'\n\n/**\n * Props for {@link useContractorList}.\n *\n * @public\n */\nexport interface UseContractorListProps {\n /** The associated company identifier. */\n companyId: string\n /** Filters the list and tailors the allowed actions. Omit to list every contractor. */\n contractorType?: ContractorType\n}\n\n/**\n * Ready state of {@link useContractorList}.\n *\n * @public\n */\nexport interface UseContractorListReady extends BaseHookReady<\n { contractors: ContractorWithActions[] },\n { isFetching: boolean; isPending: boolean }\n> {\n /** Pagination controls for the current contractor list page. */\n pagination: PaginationControlProps\n /** Actions that mutate a contractor's state, gated by the entry's `allowedActions`. */\n actions: {\n /** Deletes the contractor. */\n onDelete: (contractorId: string) => Promise<void>\n /** Reverts a self-onboarding contractor to admin-driven onboarding. Resolves to the updated record, or `undefined` if the call failed. */\n onCancelSelfOnboarding: (\n contractorId: string,\n ) => Promise<ContractorOnboardingStatusEntity | undefined>\n /** Cancels a contractor's scheduled dismissal. */\n onCancelDismissal: (contractorId: string) => Promise<void>\n /** Cancels a contractor's scheduled rehire. */\n onCancelRehire: (contractorId: string) => Promise<void>\n }\n}\n\n/**\n * Return type of {@link useContractorList}.\n *\n * @public\n */\nexport type UseContractorListResult = HookLoadingResult | UseContractorListReady\n\nconst SELF_ONBOARDING_CANCELLABLE_STATUSES = new Set<string>([\n ContractorOnboardingStatus.SELF_ONBOARDING_INVITED,\n ContractorOnboardingStatus.SELF_ONBOARDING_STARTED,\n])\n\nfunction deriveAllowedActions(\n contractor: Contractor,\n contractorType?: ContractorType,\n): ContractorAction[] {\n const actions: ContractorAction[] = []\n const status = contractor.onboardingStatus\n\n if (contractorType === 'active') {\n actions.push('view')\n\n if (contractor.upcomingEmployment && contractor.rehireCancellationEligible) {\n actions.push('cancel_rehire')\n } else if (contractor.dismissalDate && contractor.dismissalCancellationEligible) {\n actions.push('cancel_dismissal')\n } else if (!contractor.dismissalDate && !contractor.upcomingEmployment) {\n actions.push('dismiss')\n }\n\n return actions\n }\n\n if (contractorType === 'terminated') {\n actions.push('view')\n\n if (contractor.upcomingEmployment) {\n if (contractor.rehireCancellationEligible) {\n actions.push('cancel_rehire')\n }\n } else if (contractor.dismissalCancellationEligible) {\n actions.push('cancel_dismissal')\n } else if (!contractor.isActive) {\n actions.push('rehire')\n }\n\n return actions\n }\n\n // 'onboarding' filter and the unfiltered (undefined) onboarding-flavor list share the same\n // edit / cancel_self_onboarding / delete logic used by today's onboarding ContractorList.\n const canCancelSelfOnboarding = !!status && SELF_ONBOARDING_CANCELLABLE_STATUSES.has(status)\n\n if (!canCancelSelfOnboarding) {\n actions.push('edit')\n } else {\n actions.push('cancel_self_onboarding')\n }\n\n actions.push('delete')\n\n if (\n contractorType === 'onboarding' &&\n status === ContractorOnboardingStatus.ONBOARDING_COMPLETED\n ) {\n actions.push('view')\n }\n\n return actions\n}\n\n/**\n * Fetches a paginated list of a company's contractors and decorates each entry with the actions\n * allowed for its current onboarding/employment state.\n *\n * @remarks\n * `contractorType` maps to a server-side filter and changes which actions appear on each row:\n * `'active'` exposes `view` plus `dismiss`/`cancel_dismissal`/`cancel_rehire`, `'terminated'`\n * exposes `view` plus `rehire`/`cancel_dismissal`/`cancel_rehire`, `'onboarding'` and the\n * unfiltered default expose `edit`/`cancel_self_onboarding`/`delete`. Omit `contractorType` to\n * list every contractor.\n *\n * Page changes use placeholder data: the previous page stays rendered while the next one loads,\n * and `status.isFetching` flips to `true` during the request.\n *\n * @param input - Company and optional filter for the list.\n * @returns A {@link HookLoadingResult} while the first page is in flight, or a {@link UseContractorListReady} once data has arrived.\n * @public\n */\nexport function useContractorList({\n companyId,\n contractorType,\n}: UseContractorListProps): UseContractorListResult {\n const { currentPage, itemsPerPage, getPaginationProps } = usePagination()\n\n const queryParams = useMemo(() => {\n const baseParams = {\n companyUuid: companyId,\n page: currentPage,\n per: itemsPerPage,\n }\n\n switch (contractorType) {\n case 'active':\n return { ...baseParams, onboardedActive: true }\n case 'onboarding':\n return { ...baseParams, onboarded: false }\n case 'terminated':\n return { ...baseParams, terminated: true }\n default:\n return baseParams\n }\n }, [companyId, currentPage, itemsPerPage, contractorType])\n\n const contractorsQuery = useContractorsList(queryParams, { placeholderData: keepPreviousData })\n\n const deleteContractorMutation = useContractorsDeleteMutation()\n const updateOnboardingStatusMutation = useContractorsUpdateOnboardingStatusMutation()\n const cancelDismissalMutation =\n useContractorsDeleteV1ContractorsContractorUuidTerminationMutation()\n const cancelRehireMutation = useContractorsDeleteV1ContractorsContractorUuidRehireMutation()\n\n const {\n baseSubmitHandler,\n error: submitError,\n setError: setSubmitError,\n } = useBaseSubmit('ContractorList')\n\n const errorHandling = composeErrorHandler([contractorsQuery], { submitError, setSubmitError })\n\n const isPending =\n deleteContractorMutation.isPending ||\n updateOnboardingStatusMutation.isPending ||\n cancelDismissalMutation.isPending ||\n cancelRehireMutation.isPending\n\n const { data, isFetching } = contractorsQuery\n\n const contractors = useMemo<ContractorWithActions[]>(() => {\n return (data?.showContractors ?? []).map(contractor => ({\n ...contractor,\n allowedActions: deriveAllowedActions(contractor, contractorType),\n }))\n }, [data?.showContractors, contractorType])\n\n const paginationProps = data?.httpMeta.response.headers\n ? getPaginationProps(data.httpMeta.response.headers, isFetching)\n : {\n handleNextPage: () => {},\n handleFirstPage: () => {},\n handleLastPage: () => {},\n handlePreviousPage: () => {},\n handleItemsPerPageChange: () => {},\n currentPage: 1,\n totalPages: 1,\n totalCount: 0,\n itemsPerPage: 5 as const,\n }\n\n const onDelete = async (contractorId: string): Promise<void> => {\n await baseSubmitHandler(contractorId, async id => {\n await deleteContractorMutation.mutateAsync({\n request: { contractorUuid: id },\n })\n })\n }\n\n const onCancelSelfOnboarding = async (\n contractorId: string,\n ): Promise<ContractorOnboardingStatusEntity | undefined> => {\n let onboardingStatus: ContractorOnboardingStatusEntity | undefined\n\n await baseSubmitHandler(contractorId, async id => {\n const result = await updateOnboardingStatusMutation.mutateAsync({\n request: {\n contractorUuid: id,\n contractorOnboardingStatusUpdateRequestBody: {\n onboardingStatus: ContractorOnboardingStatus.ADMIN_ONBOARDING_INCOMPLETE,\n },\n },\n })\n\n onboardingStatus = result.contractorOnboardingStatus\n })\n\n return onboardingStatus\n }\n\n const onCancelDismissal = async (contractorId: string): Promise<void> => {\n await baseSubmitHandler(contractorId, async id => {\n await cancelDismissalMutation.mutateAsync({\n request: { contractorUuid: id },\n })\n })\n }\n\n const onCancelRehire = async (contractorId: string): Promise<void> => {\n await baseSubmitHandler(contractorId, async id => {\n await cancelRehireMutation.mutateAsync({\n request: { contractorUuid: id },\n })\n })\n }\n\n const isLoading = !data && isFetching\n\n if (isLoading) {\n return {\n isLoading: true,\n errorHandling,\n }\n }\n\n return {\n isLoading: false,\n data: {\n contractors,\n },\n pagination: paginationProps,\n status: { isFetching, isPending },\n actions: { onDelete, onCancelSelfOnboarding, onCancelDismissal, onCancelRehire },\n errorHandling,\n }\n}\n"],"names":["SELF_ONBOARDING_CANCELLABLE_STATUSES","ContractorOnboardingStatus","deriveAllowedActions","contractor","contractorType","actions","status","useContractorList","companyId","currentPage","itemsPerPage","getPaginationProps","usePagination","queryParams","useMemo","baseParams","contractorsQuery","useContractorsList","keepPreviousData","deleteContractorMutation","useContractorsDeleteMutation","updateOnboardingStatusMutation","useContractorsUpdateOnboardingStatusMutation","cancelDismissalMutation","useContractorsDeleteV1ContractorsContractorUuidTerminationMutation","cancelRehireMutation","useContractorsDeleteV1ContractorsContractorUuidRehireMutation","baseSubmitHandler","submitError","setSubmitError","useBaseSubmit","errorHandling","composeErrorHandler","isPending","data","isFetching","contractors","paginationProps","onDelete","contractorId","id","onCancelSelfOnboarding","onboardingStatus","onCancelDismissal","onCancelRehire"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useContractorList.js","sources":["../../../../../src/components/Contractor/ContractorList/shared/useContractorList.ts"],"sourcesContent":["import { useMemo, useState } from 'react'\nimport { useContractorsList } from '@gusto/embedded-api/react-query/contractorsList'\nimport type { Contractor } from '@gusto/embedded-api/models/components/contractor'\nimport type { ContractorOnboardingStatus as ContractorOnboardingStatusEntity } from '@gusto/embedded-api/models/components/contractoronboardingstatus'\nimport { useContractorsDeleteMutation } from '@gusto/embedded-api/react-query/contractorsDelete'\nimport { useContractorsUpdateOnboardingStatusMutation } from '@gusto/embedded-api/react-query/contractorsUpdateOnboardingStatus'\nimport { useContractorsDeleteV1ContractorsContractorUuidTerminationMutation } from '@gusto/embedded-api/react-query/contractorsDeleteV1ContractorsContractorUuidTermination'\nimport { useContractorsDeleteV1ContractorsContractorUuidRehireMutation } from '@gusto/embedded-api/react-query/contractorsDeleteV1ContractorsContractorUuidRehire'\nimport { keepPreviousData } from '@tanstack/react-query'\nimport { usePagination } from '@/hooks/usePagination/usePagination'\nimport type { PaginationControlProps } from '@/components/Common/PaginationControl/PaginationControlTypes'\nimport type { TableSortDirection } from '@/components/Common/UI/Table/TableTypes'\nimport { useBaseSubmit } from '@/components/Base/useBaseSubmit'\nimport { composeErrorHandler } from '@/partner-hook-utils/composeErrorHandler'\nimport { ContractorOnboardingStatus } from '@/shared/constants'\nimport type { HookLoadingResult, BaseHookReady } from '@/partner-hook-utils/types'\n\n/**\n * Action that may be performed on a contractor row, determined by the contractor's onboarding\n * and employment state and the `contractorType` filter passed to {@link useContractorList}.\n *\n * @public\n */\nexport type ContractorAction =\n | 'edit'\n | 'delete'\n | 'cancel_self_onboarding'\n | 'view'\n | 'dismiss'\n | 'rehire'\n | 'cancel_dismissal'\n | 'cancel_rehire'\n\n/**\n * A contractor entity extended with the actions permitted on it.\n *\n * @public\n */\nexport interface ContractorWithActions extends Contractor {\n /** Actions permitted for this contractor given its onboarding/employment state and the active filter. */\n allowedActions: ContractorAction[]\n}\n\n/**\n * Filter applied to {@link useContractorList} that scopes the result set and tailors the per-row action list.\n *\n * @public\n */\nexport type ContractorType = 'active' | 'onboarding' | 'terminated'\n\n/**\n * Field the contractor list can be sorted by.\n *\n * @remarks\n * `'name'` sorts by last name for individual contractors and by business name for business\n * contractors, matching how each row is labelled.\n *\n * @public\n */\nexport type ContractorSortField = 'name'\n\n/**\n * Sort applied to {@link useContractorList}.\n *\n * @public\n */\nexport interface ContractorListSort {\n /** Field the list is ordered by. */\n field: ContractorSortField\n /** Direction the field is ordered in. */\n direction: TableSortDirection\n}\n\n/**\n * Props for {@link useContractorList}.\n *\n * @public\n */\nexport interface UseContractorListProps {\n /** The associated company identifier. */\n companyId: string\n /** Filters the list and tailors the allowed actions. Omit to list every contractor. */\n contractorType?: ContractorType\n}\n\n/**\n * Ready state of {@link useContractorList}.\n *\n * @public\n */\nexport interface UseContractorListReady extends BaseHookReady<\n { contractors: ContractorWithActions[] },\n { isFetching: boolean; isPending: boolean }\n> {\n /** Pagination controls for the current contractor list page. */\n pagination: PaginationControlProps\n /** Server-side sort state for the list, and the setter that re-queries with a new sort. */\n sort: {\n /** The active sort, or `undefined` while the list is in the API's default order. */\n current?: ContractorListSort\n /** Applies a new sort, or clears it with `undefined`, and returns to page 1. */\n onSortChange: (sort: ContractorListSort | undefined) => void\n }\n /** Actions that mutate a contractor's state, gated by the entry's `allowedActions`. */\n actions: {\n /** Deletes the contractor. */\n onDelete: (contractorId: string) => Promise<void>\n /** Reverts a self-onboarding contractor to admin-driven onboarding. Resolves to the updated record, or `undefined` if the call failed. */\n onCancelSelfOnboarding: (\n contractorId: string,\n ) => Promise<ContractorOnboardingStatusEntity | undefined>\n /** Cancels a contractor's scheduled dismissal. */\n onCancelDismissal: (contractorId: string) => Promise<void>\n /** Cancels a contractor's scheduled rehire. */\n onCancelRehire: (contractorId: string) => Promise<void>\n }\n}\n\n/**\n * Return type of {@link useContractorList}.\n *\n * @public\n */\nexport type UseContractorListResult = HookLoadingResult | UseContractorListReady\n\nconst SORT_DIRECTION_PARAM = {\n ascending: 'asc',\n descending: 'desc',\n} as const satisfies Record<TableSortDirection, string>\n\nconst SELF_ONBOARDING_CANCELLABLE_STATUSES = new Set<string>([\n ContractorOnboardingStatus.SELF_ONBOARDING_INVITED,\n ContractorOnboardingStatus.SELF_ONBOARDING_STARTED,\n])\n\nfunction deriveAllowedActions(\n contractor: Contractor,\n contractorType?: ContractorType,\n): ContractorAction[] {\n const actions: ContractorAction[] = []\n const status = contractor.onboardingStatus\n\n if (contractorType === 'active') {\n actions.push('view')\n\n if (contractor.upcomingEmployment && contractor.rehireCancellationEligible) {\n actions.push('cancel_rehire')\n } else if (contractor.dismissalDate && contractor.dismissalCancellationEligible) {\n actions.push('cancel_dismissal')\n } else if (!contractor.dismissalDate && !contractor.upcomingEmployment) {\n actions.push('dismiss')\n }\n\n return actions\n }\n\n if (contractorType === 'terminated') {\n actions.push('view')\n\n if (contractor.upcomingEmployment) {\n if (contractor.rehireCancellationEligible) {\n actions.push('cancel_rehire')\n }\n } else if (contractor.dismissalCancellationEligible) {\n actions.push('cancel_dismissal')\n } else if (!contractor.isActive) {\n actions.push('rehire')\n }\n\n return actions\n }\n\n // 'onboarding' filter and the unfiltered (undefined) onboarding-flavor list share the same\n // edit / cancel_self_onboarding / delete logic used by today's onboarding ContractorList.\n const canCancelSelfOnboarding = !!status && SELF_ONBOARDING_CANCELLABLE_STATUSES.has(status)\n\n if (!canCancelSelfOnboarding) {\n actions.push('edit')\n } else {\n actions.push('cancel_self_onboarding')\n }\n\n actions.push('delete')\n\n if (\n contractorType === 'onboarding' &&\n status === ContractorOnboardingStatus.ONBOARDING_COMPLETED\n ) {\n actions.push('view')\n }\n\n return actions\n}\n\n/**\n * Fetches a paginated list of a company's contractors and decorates each entry with the actions\n * allowed for its current onboarding/employment state.\n *\n * @remarks\n * `contractorType` maps to a server-side filter and changes which actions appear on each row:\n * `'active'` exposes `view` plus `dismiss`/`cancel_dismissal`/`cancel_rehire`, `'terminated'`\n * exposes `view` plus `rehire`/`cancel_dismissal`/`cancel_rehire`, `'onboarding'` and the\n * unfiltered default expose `edit`/`cancel_self_onboarding`/`delete`. Omit `contractorType` to\n * list every contractor.\n *\n * Page changes use placeholder data: the previous page stays rendered while the next one loads,\n * and `status.isFetching` flips to `true` during the request.\n *\n * Sorting is applied by the API, so the order holds across pages. No sort is requested until\n * `sort.onSortChange` is called, leaving the list in the API's default order until then, and\n * calling it with `undefined` returns the list to that default order. Applying or clearing a sort\n * returns to page 1 because the API sorts before it paginates. The sort persists across\n * `contractorType` changes, since every filter sorts by the same field.\n *\n * The endpoint rejects a sort combined with a search term (HTTP 422), so a search filter added\n * here would have to clear the sort.\n *\n * @param input - Company and optional filter for the list.\n * @returns A {@link HookLoadingResult} while the first page is in flight, or a {@link UseContractorListReady} once data has arrived.\n * @public\n */\nexport function useContractorList({\n companyId,\n contractorType,\n}: UseContractorListProps): UseContractorListResult {\n const { currentPage, itemsPerPage, getPaginationProps, resetPage } = usePagination()\n const [sort, setSort] = useState<ContractorListSort | undefined>()\n\n const queryParams = useMemo(() => {\n const baseParams = {\n companyUuid: companyId,\n page: currentPage,\n per: itemsPerPage,\n // Spread conditionally rather than passing `sortBy: undefined`, so an unsorted list\n // sends no `sort_by` at all and keeps the query key it had before sorting existed.\n ...(sort ? { sortBy: `${sort.field}:${SORT_DIRECTION_PARAM[sort.direction]}` } : {}),\n }\n\n switch (contractorType) {\n case 'active':\n return { ...baseParams, onboardedActive: true }\n case 'onboarding':\n return { ...baseParams, onboarded: false }\n case 'terminated':\n return { ...baseParams, terminated: true }\n default:\n return baseParams\n }\n }, [companyId, currentPage, itemsPerPage, contractorType, sort])\n\n const contractorsQuery = useContractorsList(queryParams, { placeholderData: keepPreviousData })\n\n const deleteContractorMutation = useContractorsDeleteMutation()\n const updateOnboardingStatusMutation = useContractorsUpdateOnboardingStatusMutation()\n const cancelDismissalMutation =\n useContractorsDeleteV1ContractorsContractorUuidTerminationMutation()\n const cancelRehireMutation = useContractorsDeleteV1ContractorsContractorUuidRehireMutation()\n\n const {\n baseSubmitHandler,\n error: submitError,\n setError: setSubmitError,\n } = useBaseSubmit('ContractorList')\n\n const errorHandling = composeErrorHandler([contractorsQuery], { submitError, setSubmitError })\n\n const isPending =\n deleteContractorMutation.isPending ||\n updateOnboardingStatusMutation.isPending ||\n cancelDismissalMutation.isPending ||\n cancelRehireMutation.isPending\n\n const { data, isFetching } = contractorsQuery\n\n const contractors = useMemo<ContractorWithActions[]>(() => {\n return (data?.showContractors ?? []).map(contractor => ({\n ...contractor,\n allowedActions: deriveAllowedActions(contractor, contractorType),\n }))\n }, [data?.showContractors, contractorType])\n\n const paginationProps = data?.httpMeta.response.headers\n ? getPaginationProps(data.httpMeta.response.headers, isFetching)\n : {\n handleNextPage: () => {},\n handleFirstPage: () => {},\n handleLastPage: () => {},\n handlePreviousPage: () => {},\n handleItemsPerPageChange: () => {},\n currentPage: 1,\n totalPages: 1,\n totalCount: 0,\n itemsPerPage: 5 as const,\n }\n\n const onDelete = async (contractorId: string): Promise<void> => {\n await baseSubmitHandler(contractorId, async id => {\n await deleteContractorMutation.mutateAsync({\n request: { contractorUuid: id },\n })\n })\n }\n\n const onCancelSelfOnboarding = async (\n contractorId: string,\n ): Promise<ContractorOnboardingStatusEntity | undefined> => {\n let onboardingStatus: ContractorOnboardingStatusEntity | undefined\n\n await baseSubmitHandler(contractorId, async id => {\n const result = await updateOnboardingStatusMutation.mutateAsync({\n request: {\n contractorUuid: id,\n contractorOnboardingStatusUpdateRequestBody: {\n onboardingStatus: ContractorOnboardingStatus.ADMIN_ONBOARDING_INCOMPLETE,\n },\n },\n })\n\n onboardingStatus = result.contractorOnboardingStatus\n })\n\n return onboardingStatus\n }\n\n const onCancelDismissal = async (contractorId: string): Promise<void> => {\n await baseSubmitHandler(contractorId, async id => {\n await cancelDismissalMutation.mutateAsync({\n request: { contractorUuid: id },\n })\n })\n }\n\n const onCancelRehire = async (contractorId: string): Promise<void> => {\n await baseSubmitHandler(contractorId, async id => {\n await cancelRehireMutation.mutateAsync({\n request: { contractorUuid: id },\n })\n })\n }\n\n const onSortChange = (nextSort: ContractorListSort | undefined) => {\n setSort(nextSort)\n // The API sorts before paginating, so the current page index means nothing under a new order.\n resetPage()\n }\n\n const isLoading = !data && isFetching\n\n if (isLoading) {\n return {\n isLoading: true,\n errorHandling,\n }\n }\n\n return {\n isLoading: false,\n data: {\n contractors,\n },\n pagination: paginationProps,\n sort: { current: sort, onSortChange },\n status: { isFetching, isPending },\n actions: { onDelete, onCancelSelfOnboarding, onCancelDismissal, onCancelRehire },\n errorHandling,\n }\n}\n"],"names":["SORT_DIRECTION_PARAM","SELF_ONBOARDING_CANCELLABLE_STATUSES","ContractorOnboardingStatus","deriveAllowedActions","contractor","contractorType","actions","status","useContractorList","companyId","currentPage","itemsPerPage","getPaginationProps","resetPage","usePagination","sort","setSort","useState","queryParams","useMemo","baseParams","contractorsQuery","useContractorsList","keepPreviousData","deleteContractorMutation","useContractorsDeleteMutation","updateOnboardingStatusMutation","useContractorsUpdateOnboardingStatusMutation","cancelDismissalMutation","useContractorsDeleteV1ContractorsContractorUuidTerminationMutation","cancelRehireMutation","useContractorsDeleteV1ContractorsContractorUuidRehireMutation","baseSubmitHandler","submitError","setSubmitError","useBaseSubmit","errorHandling","composeErrorHandler","isPending","data","isFetching","contractors","paginationProps","onDelete","contractorId","id","onCancelSelfOnboarding","onboardingStatus","onCancelDismissal","onCancelRehire","onSortChange","nextSort"],"mappings":"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"}
|
|
@@ -1,87 +1,78 @@
|
|
|
1
|
-
import { jsx as t, jsxs as
|
|
2
|
-
import { useTranslation as
|
|
3
|
-
import
|
|
4
|
-
import { useContractorPaymentMethodForm as
|
|
5
|
-
import { useContractorBankAccountForm as
|
|
6
|
-
import { useOnboardingBankAccountFieldsDictionary as
|
|
7
|
-
import
|
|
8
|
-
import { useComponentDictionary as
|
|
9
|
-
import { BaseBoundaries as
|
|
1
|
+
import { jsx as t, jsxs as p } from "react/jsx-runtime";
|
|
2
|
+
import { useTranslation as E } from "react-i18next";
|
|
3
|
+
import F from "classnames";
|
|
4
|
+
import { useContractorPaymentMethodForm as N } from "../shared/useContractorPaymentMethodForm/useContractorPaymentMethodForm.js";
|
|
5
|
+
import { useContractorBankAccountForm as P } from "../shared/useContractorBankAccountForm/useContractorBankAccountForm.js";
|
|
6
|
+
import { useOnboardingBankAccountFieldsDictionary as _ } from "./useFormDictionary.js";
|
|
7
|
+
import R from "./PaymentMethod.module.scss.js";
|
|
8
|
+
import { useComponentDictionary as H, useI18n as k } from "../../../../i18n/I18n.js";
|
|
9
|
+
import { BaseBoundaries as B, BaseLayout as f } from "../../../Base/Base.js";
|
|
10
10
|
import "../../../Base/useBase.js";
|
|
11
|
-
import { useComponentContext as
|
|
12
|
-
import { Form as
|
|
13
|
-
import { PAYMENT_METHODS as
|
|
14
|
-
import { composeErrorHandler as
|
|
15
|
-
import { composeSubmitHandler as
|
|
16
|
-
import { ActionsLayout as
|
|
17
|
-
import { Flex as
|
|
18
|
-
import { ContractorBankAccountFields as
|
|
19
|
-
function
|
|
20
|
-
return
|
|
11
|
+
import { useComponentContext as L } from "../../../../contexts/ComponentAdapter/useComponentContext.js";
|
|
12
|
+
import { Form as x } from "../../../Common/Form/Form.js";
|
|
13
|
+
import { PAYMENT_METHODS as D, componentEvents as a } from "../../../../shared/constants.js";
|
|
14
|
+
import { composeErrorHandler as S } from "../../../../partner-hook-utils/composeErrorHandler.js";
|
|
15
|
+
import { composeSubmitHandler as h } from "../../../../partner-hook-utils/form/composeSubmitHandler.js";
|
|
16
|
+
import { ActionsLayout as Y } from "../../../Common/ActionsLayout/ActionsLayout.js";
|
|
17
|
+
import { Flex as C } from "../../../Common/Flex/Flex.js";
|
|
18
|
+
import { ContractorBankAccountFields as j } from "../shared/ContractorBankAccountFields/ContractorBankAccountFields.js";
|
|
19
|
+
function eo({ dictionary: s, LoaderComponent: c, ...e }) {
|
|
20
|
+
return H("Contractor.PaymentMethod", s), /* @__PURE__ */ t(B, { componentName: "Contractor.PaymentMethod", LoaderComponent: c, children: /* @__PURE__ */ t(w, { LoaderComponent: c, ...e }) });
|
|
21
21
|
}
|
|
22
|
-
function
|
|
22
|
+
function w({
|
|
23
23
|
contractorId: s,
|
|
24
24
|
className: c,
|
|
25
25
|
onEvent: e,
|
|
26
26
|
LoaderComponent: u
|
|
27
27
|
}) {
|
|
28
|
-
|
|
29
|
-
const { t: n } =
|
|
28
|
+
k("Contractor.PaymentMethod");
|
|
29
|
+
const { t: n } = E("Contractor.PaymentMethod"), m = L(), r = N({
|
|
30
30
|
contractorId: s,
|
|
31
31
|
shouldFocusError: !1
|
|
32
|
-
}), i =
|
|
32
|
+
}), i = P({
|
|
33
33
|
contractorId: s,
|
|
34
34
|
shouldFocusError: !1
|
|
35
|
-
}),
|
|
35
|
+
}), y = _();
|
|
36
36
|
if (r.isLoading || i.isLoading) {
|
|
37
|
-
const o =
|
|
38
|
-
return /* @__PURE__ */ t(
|
|
37
|
+
const o = S([r, i]);
|
|
38
|
+
return /* @__PURE__ */ t(f, { isLoading: !0, error: o.errors, LoaderComponent: u });
|
|
39
39
|
}
|
|
40
|
-
const d = r.status.isDirectDeposit, { Type:
|
|
40
|
+
const d = r.status.isDirectDeposit, { Type: T } = r.form.Fields, A = async () => {
|
|
41
41
|
const o = await i.actions.onSubmit();
|
|
42
42
|
o && (e(a.CONTRACTOR_BANK_ACCOUNT_CREATED, {
|
|
43
43
|
contractorBankAccount: o.data
|
|
44
44
|
}), e(a.CONTRACTOR_PAYMENT_METHOD_DONE));
|
|
45
|
-
},
|
|
45
|
+
}, b = async () => {
|
|
46
46
|
const o = await r.actions.onSubmit();
|
|
47
47
|
o && (e(a.CONTRACTOR_PAYMENT_METHOD_UPDATED, {
|
|
48
48
|
contractorPaymentMethod: o.data
|
|
49
49
|
}), e(a.CONTRACTOR_PAYMENT_METHOD_DONE));
|
|
50
|
-
}, { handleSubmit:
|
|
51
|
-
|
|
52
|
-
{
|
|
53
|
-
...o,
|
|
54
|
-
shouldVisuallyHideLabel: !0,
|
|
55
|
-
options: o.options.map((p) => ({
|
|
56
|
-
...p,
|
|
57
|
-
description: p.value === h.directDeposit ? n("directDepositDescription") : n("checkDescription")
|
|
58
|
-
}))
|
|
59
|
-
}
|
|
60
|
-
);
|
|
61
|
-
return /* @__PURE__ */ t("section", { className: N(H.root, c), children: /* @__PURE__ */ t(D, { error: M.errors, LoaderComponent: u, children: /* @__PURE__ */ t(S, { onSubmit: g, children: /* @__PURE__ */ f(y, { gap: 32, flexDirection: "column", children: [
|
|
50
|
+
}, { handleSubmit: O, errorHandling: g } = d ? h([r, i], A) : h([r], b), l = r.status.isPending || i.status.isPending, M = (o) => /* @__PURE__ */ t(m.RadioGroup, { ...o, shouldVisuallyHideLabel: !0 });
|
|
51
|
+
return /* @__PURE__ */ t("section", { className: F(R.root, c), children: /* @__PURE__ */ t(f, { error: g.errors, LoaderComponent: u, children: /* @__PURE__ */ t(x, { onSubmit: O, children: /* @__PURE__ */ p(C, { gap: 32, flexDirection: "column", children: [
|
|
62
52
|
/* @__PURE__ */ t(m.Heading, { as: "h2", children: n("title") }),
|
|
63
|
-
/* @__PURE__ */
|
|
53
|
+
/* @__PURE__ */ p(C, { flexDirection: "column", gap: 20, children: [
|
|
64
54
|
/* @__PURE__ */ t(
|
|
65
|
-
|
|
55
|
+
T,
|
|
66
56
|
{
|
|
67
57
|
label: n("paymentFieldsetLegend"),
|
|
68
|
-
getOptionLabel: (o) => o ===
|
|
69
|
-
|
|
58
|
+
getOptionLabel: (o) => o === D.directDeposit ? n("directDepositLabel") : n("checkLabel"),
|
|
59
|
+
getOptionDescription: (o) => o === D.directDeposit ? n("directDepositDescription") : n("checkDescription"),
|
|
60
|
+
FieldComponent: M,
|
|
70
61
|
formHookResult: r
|
|
71
62
|
}
|
|
72
63
|
),
|
|
73
64
|
d && /* @__PURE__ */ t(
|
|
74
|
-
|
|
65
|
+
j,
|
|
75
66
|
{
|
|
76
67
|
bankAccountForm: i,
|
|
77
|
-
dictionary:
|
|
68
|
+
dictionary: y
|
|
78
69
|
}
|
|
79
70
|
)
|
|
80
71
|
] }),
|
|
81
|
-
/* @__PURE__ */ t(
|
|
72
|
+
/* @__PURE__ */ t(Y, { children: /* @__PURE__ */ t(m.Button, { type: "submit", variant: "primary", isDisabled: l, children: n(l ? "submittingCta" : "continueCta") }) })
|
|
82
73
|
] }) }) }) });
|
|
83
74
|
}
|
|
84
75
|
export {
|
|
85
|
-
|
|
76
|
+
eo as PaymentMethod
|
|
86
77
|
};
|
|
87
78
|
//# sourceMappingURL=PaymentMethod.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PaymentMethod.js","sources":["../../../../../src/components/Contractor/PaymentMethod/onboarding/PaymentMethod.tsx"],"sourcesContent":["import { useTranslation } from 'react-i18next'\nimport classNames from 'classnames'\nimport {\n useContractorPaymentMethodForm,\n type ContractorPaymentMethodFormType,\n} from '../shared/useContractorPaymentMethodForm'\nimport { useContractorBankAccountForm } from '../shared/useContractorBankAccountForm'\nimport { ContractorBankAccountFields } from '../shared/ContractorBankAccountFields'\nimport type { PaymentMethodProps } from './types'\nimport { useOnboardingBankAccountFieldsDictionary } from './useFormDictionary'\nimport styles from './PaymentMethod.module.scss'\nimport { useI18n } from '@/i18n'\nimport { BaseBoundaries, BaseLayout } from '@/components/Base'\nimport { useComponentContext } from '@/contexts/ComponentAdapter/useComponentContext'\nimport { Form } from '@/components/Common/Form'\nimport { useComponentDictionary } from '@/i18n/I18n'\nimport { componentEvents, PAYMENT_METHODS } from '@/shared/constants'\nimport { composeErrorHandler } from '@/partner-hook-utils/composeErrorHandler'\nimport { composeSubmitHandler } from '@/partner-hook-utils/form/composeSubmitHandler'\nimport { ActionsLayout } from '@/components/Common/ActionsLayout'\nimport { Flex } from '@/components/Common'\nimport type { RadioGroupProps } from '@/components/Common/UI/RadioGroup/RadioGroupTypes'\n\n/**\n * Manages a contractor's payment method, capturing a bank account for direct deposit or recording check as the payment method.\n *\n * Displays the current payment type, lets the user switch between direct deposit and check, and\n * collects bank account details (account holder name, routing number, account number, and account\n * type) when direct deposit is selected. Direct deposit creates the bank account (which updates the\n * payment method server-side); check updates the contractor's payment method type directly.\n *\n * @events\n * | Event | Description | Data |\n * | ----- | ----------- | ---- |\n * | `contractor/bankAccount/created` | Fired on the direct deposit path after the bank account is created | The created bank account at `.contractorBankAccount` |\n * | `contractor/paymentMethod/updated` | Fired on the check path after the payment method type is updated | The updated payment method at `.contractorPaymentMethod` |\n * | `contractor/paymentMethod/done` | Fired when the payment method step completes | — |\n *\n * @param props - Component configuration; see {@link PaymentMethodProps}.\n * @returns The rendered payment method form.\n * @public\n *\n * @example\n * ```tsx\n * import { ContractorOnboarding } from '@gusto/embedded-react-sdk'\n *\n * function PaymentMethodStep() {\n * return (\n * <ContractorOnboarding.PaymentMethod\n * contractorId=\"contractor-uuid\"\n * onEvent={() => {}}\n * />\n * )\n * }\n * ```\n */\nexport function PaymentMethod({ dictionary, LoaderComponent, ...props }: PaymentMethodProps) {\n useComponentDictionary('Contractor.PaymentMethod', dictionary)\n return (\n <BaseBoundaries componentName=\"Contractor.PaymentMethod\" LoaderComponent={LoaderComponent}>\n <Root LoaderComponent={LoaderComponent} {...props} />\n </BaseBoundaries>\n )\n}\n\nfunction Root({\n contractorId,\n className,\n onEvent,\n LoaderComponent,\n}: Omit<PaymentMethodProps, 'dictionary'>) {\n useI18n('Contractor.PaymentMethod')\n const { t } = useTranslation('Contractor.PaymentMethod')\n const Components = useComponentContext()\n\n const paymentMethodForm = useContractorPaymentMethodForm({\n contractorId,\n shouldFocusError: false,\n })\n const bankAccountForm = useContractorBankAccountForm({\n contractorId,\n shouldFocusError: false,\n })\n const bankAccountFieldsDictionary = useOnboardingBankAccountFieldsDictionary()\n\n if (paymentMethodForm.isLoading || bankAccountForm.isLoading) {\n const loadingErrorHandling = composeErrorHandler([paymentMethodForm, bankAccountForm])\n return (\n <BaseLayout isLoading error={loadingErrorHandling.errors} LoaderComponent={LoaderComponent} />\n )\n }\n\n const isDirectDeposit = paymentMethodForm.status.isDirectDeposit\n const { Type } = paymentMethodForm.form.Fields\n\n // Direct Deposit always submits the bank account (which sets the payment\n // method server-side); Check updates the payment method type directly. The\n // account number is pre-filled with the masked token, which the API treats as\n // \"keep the existing account,\" so an unchanged submit preserves it while a\n // newly typed number replaces it.\n const submitDirectDeposit = async () => {\n const result = await bankAccountForm.actions.onSubmit()\n if (!result) return\n onEvent(componentEvents.CONTRACTOR_BANK_ACCOUNT_CREATED, {\n contractorBankAccount: result.data,\n })\n onEvent(componentEvents.CONTRACTOR_PAYMENT_METHOD_DONE)\n }\n\n const submitCheck = async () => {\n const result = await paymentMethodForm.actions.onSubmit()\n if (!result) return\n onEvent(componentEvents.CONTRACTOR_PAYMENT_METHOD_UPDATED, {\n contractorPaymentMethod: result.data,\n })\n onEvent(componentEvents.CONTRACTOR_PAYMENT_METHOD_DONE)\n }\n\n const { handleSubmit, errorHandling } = isDirectDeposit\n ? composeSubmitHandler([paymentMethodForm, bankAccountForm], submitDirectDeposit)\n : composeSubmitHandler([paymentMethodForm], submitCheck)\n\n const isPending = paymentMethodForm.status.isPending || bankAccountForm.status.isPending\n\n const TypeFieldComponent = (radioProps: RadioGroupProps) => (\n <Components.RadioGroup\n {...radioProps}\n shouldVisuallyHideLabel\n options={radioProps.options.map(option => ({\n ...option,\n description:\n option.value === PAYMENT_METHODS.directDeposit\n ? t('directDepositDescription')\n : t('checkDescription'),\n }))}\n />\n )\n\n return (\n <section className={classNames(styles.root, className)}>\n <BaseLayout error={errorHandling.errors} LoaderComponent={LoaderComponent}>\n <Form onSubmit={handleSubmit}>\n <Flex gap={32} flexDirection=\"column\">\n <Components.Heading as=\"h2\">{t('title')}</Components.Heading>\n <Flex flexDirection=\"column\" gap={20}>\n <Type\n label={t('paymentFieldsetLegend')}\n getOptionLabel={(value: ContractorPaymentMethodFormType) =>\n value === PAYMENT_METHODS.directDeposit\n ? t('directDepositLabel')\n : t('checkLabel')\n }\n FieldComponent={TypeFieldComponent}\n formHookResult={paymentMethodForm}\n />\n {isDirectDeposit && (\n <ContractorBankAccountFields\n bankAccountForm={bankAccountForm}\n dictionary={bankAccountFieldsDictionary}\n />\n )}\n </Flex>\n <ActionsLayout>\n <Components.Button type=\"submit\" variant=\"primary\" isDisabled={isPending}>\n {isPending ? t('submittingCta') : t('continueCta')}\n </Components.Button>\n </ActionsLayout>\n </Flex>\n </Form>\n </BaseLayout>\n </section>\n )\n}\n"],"names":["PaymentMethod","dictionary","LoaderComponent","props","useComponentDictionary","jsx","BaseBoundaries","Root","contractorId","className","onEvent","useI18n","t","useTranslation","Components","useComponentContext","paymentMethodForm","useContractorPaymentMethodForm","bankAccountForm","useContractorBankAccountForm","bankAccountFieldsDictionary","useOnboardingBankAccountFieldsDictionary","loadingErrorHandling","composeErrorHandler","BaseLayout","isDirectDeposit","Type","submitDirectDeposit","result","componentEvents","submitCheck","handleSubmit","errorHandling","composeSubmitHandler","isPending","TypeFieldComponent","radioProps","option","PAYMENT_METHODS","classNames","styles","Form","Flex","jsxs","value","ContractorBankAccountFields","ActionsLayout"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"PaymentMethod.js","sources":["../../../../../src/components/Contractor/PaymentMethod/onboarding/PaymentMethod.tsx"],"sourcesContent":["import { useTranslation } from 'react-i18next'\nimport classNames from 'classnames'\nimport {\n useContractorPaymentMethodForm,\n type ContractorPaymentMethodFormType,\n} from '../shared/useContractorPaymentMethodForm'\nimport { useContractorBankAccountForm } from '../shared/useContractorBankAccountForm'\nimport { ContractorBankAccountFields } from '../shared/ContractorBankAccountFields'\nimport type { PaymentMethodProps } from './types'\nimport { useOnboardingBankAccountFieldsDictionary } from './useFormDictionary'\nimport styles from './PaymentMethod.module.scss'\nimport { useI18n } from '@/i18n'\nimport { BaseBoundaries, BaseLayout } from '@/components/Base'\nimport { useComponentContext } from '@/contexts/ComponentAdapter/useComponentContext'\nimport { Form } from '@/components/Common/Form'\nimport { useComponentDictionary } from '@/i18n/I18n'\nimport { componentEvents, PAYMENT_METHODS } from '@/shared/constants'\nimport { composeErrorHandler } from '@/partner-hook-utils/composeErrorHandler'\nimport { composeSubmitHandler } from '@/partner-hook-utils/form/composeSubmitHandler'\nimport { ActionsLayout } from '@/components/Common/ActionsLayout'\nimport { Flex } from '@/components/Common'\nimport type { RadioGroupProps } from '@/components/Common/UI/RadioGroup/RadioGroupTypes'\n\n/**\n * Manages a contractor's payment method, capturing a bank account for direct deposit or recording check as the payment method.\n *\n * Displays the current payment type, lets the user switch between direct deposit and check, and\n * collects bank account details (account holder name, routing number, account number, and account\n * type) when direct deposit is selected. Direct deposit creates the bank account (which updates the\n * payment method server-side); check updates the contractor's payment method type directly.\n *\n * @events\n * | Event | Description | Data |\n * | ----- | ----------- | ---- |\n * | `contractor/bankAccount/created` | Fired on the direct deposit path after the bank account is created | The created bank account at `.contractorBankAccount` |\n * | `contractor/paymentMethod/updated` | Fired on the check path after the payment method type is updated | The updated payment method at `.contractorPaymentMethod` |\n * | `contractor/paymentMethod/done` | Fired when the payment method step completes | — |\n *\n * @param props - Component configuration; see {@link PaymentMethodProps}.\n * @returns The rendered payment method form.\n * @public\n *\n * @example\n * ```tsx\n * import { ContractorOnboarding } from '@gusto/embedded-react-sdk'\n *\n * function PaymentMethodStep() {\n * return (\n * <ContractorOnboarding.PaymentMethod\n * contractorId=\"contractor-uuid\"\n * onEvent={() => {}}\n * />\n * )\n * }\n * ```\n */\nexport function PaymentMethod({ dictionary, LoaderComponent, ...props }: PaymentMethodProps) {\n useComponentDictionary('Contractor.PaymentMethod', dictionary)\n return (\n <BaseBoundaries componentName=\"Contractor.PaymentMethod\" LoaderComponent={LoaderComponent}>\n <Root LoaderComponent={LoaderComponent} {...props} />\n </BaseBoundaries>\n )\n}\n\nfunction Root({\n contractorId,\n className,\n onEvent,\n LoaderComponent,\n}: Omit<PaymentMethodProps, 'dictionary'>) {\n useI18n('Contractor.PaymentMethod')\n const { t } = useTranslation('Contractor.PaymentMethod')\n const Components = useComponentContext()\n\n const paymentMethodForm = useContractorPaymentMethodForm({\n contractorId,\n shouldFocusError: false,\n })\n const bankAccountForm = useContractorBankAccountForm({\n contractorId,\n shouldFocusError: false,\n })\n const bankAccountFieldsDictionary = useOnboardingBankAccountFieldsDictionary()\n\n if (paymentMethodForm.isLoading || bankAccountForm.isLoading) {\n const loadingErrorHandling = composeErrorHandler([paymentMethodForm, bankAccountForm])\n return (\n <BaseLayout isLoading error={loadingErrorHandling.errors} LoaderComponent={LoaderComponent} />\n )\n }\n\n const isDirectDeposit = paymentMethodForm.status.isDirectDeposit\n const { Type } = paymentMethodForm.form.Fields\n\n // Direct Deposit always submits the bank account (which sets the payment\n // method server-side); Check updates the payment method type directly. The\n // account number is pre-filled with the masked token, which the API treats as\n // \"keep the existing account,\" so an unchanged submit preserves it while a\n // newly typed number replaces it.\n const submitDirectDeposit = async () => {\n const result = await bankAccountForm.actions.onSubmit()\n if (!result) return\n onEvent(componentEvents.CONTRACTOR_BANK_ACCOUNT_CREATED, {\n contractorBankAccount: result.data,\n })\n onEvent(componentEvents.CONTRACTOR_PAYMENT_METHOD_DONE)\n }\n\n const submitCheck = async () => {\n const result = await paymentMethodForm.actions.onSubmit()\n if (!result) return\n onEvent(componentEvents.CONTRACTOR_PAYMENT_METHOD_UPDATED, {\n contractorPaymentMethod: result.data,\n })\n onEvent(componentEvents.CONTRACTOR_PAYMENT_METHOD_DONE)\n }\n\n const { handleSubmit, errorHandling } = isDirectDeposit\n ? composeSubmitHandler([paymentMethodForm, bankAccountForm], submitDirectDeposit)\n : composeSubmitHandler([paymentMethodForm], submitCheck)\n\n const isPending = paymentMethodForm.status.isPending || bankAccountForm.status.isPending\n\n // Only here to hide the fieldset legend — `shouldVisuallyHideLabel` isn't part of\n // `BaseFieldProps`, so it can't be passed through the hook field. Option copy comes from\n // `getOptionLabel` / `getOptionDescription` below.\n const TypeFieldComponent = (radioProps: RadioGroupProps) => (\n <Components.RadioGroup {...radioProps} shouldVisuallyHideLabel />\n )\n\n return (\n <section className={classNames(styles.root, className)}>\n <BaseLayout error={errorHandling.errors} LoaderComponent={LoaderComponent}>\n <Form onSubmit={handleSubmit}>\n <Flex gap={32} flexDirection=\"column\">\n <Components.Heading as=\"h2\">{t('title')}</Components.Heading>\n <Flex flexDirection=\"column\" gap={20}>\n <Type\n label={t('paymentFieldsetLegend')}\n getOptionLabel={(value: ContractorPaymentMethodFormType) =>\n value === PAYMENT_METHODS.directDeposit\n ? t('directDepositLabel')\n : t('checkLabel')\n }\n getOptionDescription={(value: ContractorPaymentMethodFormType) =>\n value === PAYMENT_METHODS.directDeposit\n ? t('directDepositDescription')\n : t('checkDescription')\n }\n FieldComponent={TypeFieldComponent}\n formHookResult={paymentMethodForm}\n />\n {isDirectDeposit && (\n <ContractorBankAccountFields\n bankAccountForm={bankAccountForm}\n dictionary={bankAccountFieldsDictionary}\n />\n )}\n </Flex>\n <ActionsLayout>\n <Components.Button type=\"submit\" variant=\"primary\" isDisabled={isPending}>\n {isPending ? t('submittingCta') : t('continueCta')}\n </Components.Button>\n </ActionsLayout>\n </Flex>\n </Form>\n </BaseLayout>\n </section>\n )\n}\n"],"names":["PaymentMethod","dictionary","LoaderComponent","props","useComponentDictionary","jsx","BaseBoundaries","Root","contractorId","className","onEvent","useI18n","t","useTranslation","Components","useComponentContext","paymentMethodForm","useContractorPaymentMethodForm","bankAccountForm","useContractorBankAccountForm","bankAccountFieldsDictionary","useOnboardingBankAccountFieldsDictionary","loadingErrorHandling","composeErrorHandler","BaseLayout","isDirectDeposit","Type","submitDirectDeposit","result","componentEvents","submitCheck","handleSubmit","errorHandling","composeSubmitHandler","isPending","TypeFieldComponent","radioProps","classNames","styles","Form","Flex","jsxs","value","PAYMENT_METHODS","ContractorBankAccountFields","ActionsLayout"],"mappings":"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"}
|