@gusto/embedded-react-sdk 0.56.7 → 0.57.1
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 +60 -0
- package/README.md +1 -1
- package/dist/components/Base/Base.js +3 -2
- package/dist/components/Base/Base.js.map +1 -1
- package/dist/components/Common/DataView/DataCards/DataCards.js +44 -42
- package/dist/components/Common/DataView/DataCards/DataCards.js.map +1 -1
- package/dist/components/Common/DataView/DataCards/DataCards.module.scss.js +17 -15
- package/dist/components/Common/DataView/DataCards/DataCards.module.scss.js.map +1 -1
- package/dist/components/Common/UI/Input/Input.js +35 -32
- package/dist/components/Common/UI/Input/Input.js.map +1 -1
- package/dist/components/Company/AssignSignatory/AssignSignatorySelection.js +8 -6
- package/dist/components/Company/AssignSignatory/AssignSignatorySelection.js.map +1 -1
- package/dist/components/Company/AssignSignatory/CreateSignatory/Actions.js +10 -8
- package/dist/components/Company/AssignSignatory/CreateSignatory/Actions.js.map +1 -1
- package/dist/components/Company/AssignSignatory/CreateSignatory/useCreateSignatory.js +6 -3
- package/dist/components/Company/AssignSignatory/CreateSignatory/useCreateSignatory.js.map +1 -1
- package/dist/components/Company/AssignSignatory/InviteSignatory/Actions.js +8 -6
- package/dist/components/Company/AssignSignatory/InviteSignatory/Actions.js.map +1 -1
- package/dist/components/Company/AssignSignatory/InviteSignatory/useInviteSignatory.js +6 -3
- package/dist/components/Company/AssignSignatory/InviteSignatory/useInviteSignatory.js.map +1 -1
- package/dist/components/Company/AssignSignatory/TitleSelect.js +11 -10
- package/dist/components/Company/AssignSignatory/TitleSelect.js.map +1 -1
- package/dist/components/Company/AssignSignatory/useAssignSignatory.js +8 -5
- package/dist/components/Company/AssignSignatory/useAssignSignatory.js.map +1 -1
- package/dist/components/Company/BankAccount/BankAccountForm/Actions.js +9 -8
- package/dist/components/Company/BankAccount/BankAccountForm/Actions.js.map +1 -1
- package/dist/components/Company/BankAccount/BankAccountForm/context.js +6 -3
- package/dist/components/Company/BankAccount/BankAccountForm/context.js.map +1 -1
- package/dist/components/Company/BankAccount/BankAccountList/Actions.js +12 -10
- package/dist/components/Company/BankAccount/BankAccountList/Actions.js.map +1 -1
- package/dist/components/Company/BankAccount/BankAccountVerify/Actions.js +13 -11
- package/dist/components/Company/BankAccount/BankAccountVerify/Actions.js.map +1 -1
- package/dist/components/Company/DocumentSigner/DocumentList/Actions.js +7 -5
- package/dist/components/Company/DocumentSigner/DocumentList/Actions.js.map +1 -1
- package/dist/components/Company/DocumentSigner/DocumentList/useDocumentList.js +6 -3
- package/dist/components/Company/DocumentSigner/DocumentList/useDocumentList.js.map +1 -1
- package/dist/components/Company/FederalTaxes/Actions.js +9 -7
- package/dist/components/Company/FederalTaxes/Actions.js.map +1 -1
- package/dist/components/Company/FederalTaxes/useFederalTaxes.js +11 -8
- package/dist/components/Company/FederalTaxes/useFederalTaxes.js.map +1 -1
- package/dist/components/Company/Industry/Actions.js +7 -5
- package/dist/components/Company/Industry/Actions.js.map +1 -1
- package/dist/components/Company/Industry/Context.js +9 -6
- package/dist/components/Company/Industry/Context.js.map +1 -1
- package/dist/components/Company/Industry/Edit.js +12 -10
- package/dist/components/Company/Industry/Edit.js.map +1 -1
- package/dist/components/Company/Locations/LocationForm/Actions.js +10 -8
- package/dist/components/Company/Locations/LocationForm/Actions.js.map +1 -1
- package/dist/components/Company/Locations/LocationForm/useLocationForm.js +6 -3
- package/dist/components/Company/Locations/LocationForm/useLocationForm.js.map +1 -1
- package/dist/components/Company/Locations/LocationsList/Actions.js +8 -6
- package/dist/components/Company/Locations/LocationsList/Actions.js.map +1 -1
- package/dist/components/Company/Locations/LocationsList/List.js +13 -11
- package/dist/components/Company/Locations/LocationsList/List.js.map +1 -1
- package/dist/components/Company/Locations/LocationsList/useLocationsList.js +6 -3
- package/dist/components/Company/Locations/LocationsList/useLocationsList.js.map +1 -1
- package/dist/components/Company/OnboardingOverview/context.js +6 -3
- package/dist/components/Company/OnboardingOverview/context.js.map +1 -1
- package/dist/components/Company/PaySchedule/management/PayScheduleAssignment/AssignmentCompensationStepPresentation.js +70 -0
- package/dist/components/Company/PaySchedule/management/PayScheduleAssignment/AssignmentCompensationStepPresentation.js.map +1 -0
- package/dist/components/Company/PaySchedule/management/PayScheduleAssignment/AssignmentScheduleStepPresentation.js +30 -32
- package/dist/components/Company/PaySchedule/management/PayScheduleAssignment/AssignmentScheduleStepPresentation.js.map +1 -1
- package/dist/components/Company/PaySchedule/management/PayScheduleAssignment/AssignmentTypeStepPresentation.js +35 -27
- package/dist/components/Company/PaySchedule/management/PayScheduleAssignment/AssignmentTypeStepPresentation.js.map +1 -1
- package/dist/components/Company/PaySchedule/management/PayScheduleAssignment/PayScheduleAssignment.js +52 -31
- package/dist/components/Company/PaySchedule/management/PayScheduleAssignment/PayScheduleAssignment.js.map +1 -1
- package/dist/components/Company/PaySchedule/management/PayScheduleAssignment/PayScheduleAssignmentComponents.js +106 -66
- package/dist/components/Company/PaySchedule/management/PayScheduleAssignment/PayScheduleAssignmentComponents.js.map +1 -1
- package/dist/components/Company/PaySchedule/management/PayScheduleAssignment/payScheduleAssignmentStateMachine.js +36 -30
- package/dist/components/Company/PaySchedule/management/PayScheduleAssignment/payScheduleAssignmentStateMachine.js.map +1 -1
- package/dist/components/Company/PaySchedule/management/PayScheduleAssignment/scheduleLabel.js +7 -0
- package/dist/components/Company/PaySchedule/management/PayScheduleAssignment/scheduleLabel.js.map +1 -0
- package/dist/components/Company/PaySchedule/management/PayScheduleCompensationOverviewPresentation.js +83 -0
- package/dist/components/Company/PaySchedule/management/PayScheduleCompensationOverviewPresentation.js.map +1 -0
- package/dist/components/Company/PaySchedule/management/PayScheduleOverview.js +46 -18
- package/dist/components/Company/PaySchedule/management/PayScheduleOverview.js.map +1 -1
- package/dist/components/Company/StateTaxes/StateTaxesForm/Actions.js +7 -5
- package/dist/components/Company/StateTaxes/StateTaxesForm/Actions.js.map +1 -1
- package/dist/components/Company/StateTaxes/StateTaxesForm/StateTaxesForm.js +96 -69
- package/dist/components/Company/StateTaxes/StateTaxesForm/StateTaxesForm.js.map +1 -1
- package/dist/components/Company/StateTaxes/StateTaxesForm/context.js +6 -3
- package/dist/components/Company/StateTaxes/StateTaxesForm/context.js.map +1 -1
- package/dist/components/Company/StateTaxes/StateTaxesList/Actions.js +8 -6
- package/dist/components/Company/StateTaxes/StateTaxesList/Actions.js.map +1 -1
- package/dist/components/Company/StateTaxes/StateTaxesList/context.js +6 -3
- package/dist/components/Company/StateTaxes/StateTaxesList/context.js.map +1 -1
- package/dist/components/Company/StateTaxes/TaxRateManagement/context.js +6 -3
- package/dist/components/Company/StateTaxes/TaxRateManagement/context.js.map +1 -1
- package/dist/components/Company/StateTaxes/shared/requirementSetError.js +27 -10
- package/dist/components/Company/StateTaxes/shared/requirementSetError.js.map +1 -1
- package/dist/components/Company/TaxPayments/TaxPaymentDetail/TaxPaymentDetail.js +77 -0
- package/dist/components/Company/TaxPayments/TaxPaymentDetail/TaxPaymentDetail.js.map +1 -0
- package/dist/components/Company/TaxPayments/TaxPaymentDetail/TaxPaymentDetailPresentation.js +94 -0
- package/dist/components/Company/TaxPayments/TaxPaymentDetail/TaxPaymentDetailPresentation.js.map +1 -0
- package/dist/components/Company/TaxPayments/TaxPaymentsFlow/TaxPaymentsFlow.js +26 -0
- package/dist/components/Company/TaxPayments/TaxPaymentsFlow/TaxPaymentsFlow.js.map +1 -0
- package/dist/components/Company/TaxPayments/TaxPaymentsFlow/TaxPaymentsFlowComponents.js +25 -0
- package/dist/components/Company/TaxPayments/TaxPaymentsFlow/TaxPaymentsFlowComponents.js.map +1 -0
- package/dist/components/Company/TaxPayments/TaxPaymentsFlow/taxPaymentsStateMachine.js +33 -0
- package/dist/components/Company/TaxPayments/TaxPaymentsFlow/taxPaymentsStateMachine.js.map +1 -0
- package/dist/components/Company/TaxPayments/TaxPaymentsList/TaxPaymentsList.js +55 -0
- package/dist/components/Company/TaxPayments/TaxPaymentsList/TaxPaymentsList.js.map +1 -0
- package/dist/components/Company/TaxPayments/TaxPaymentsList/TaxPaymentsListPresentation.js +153 -0
- package/dist/components/Company/TaxPayments/TaxPaymentsList/TaxPaymentsListPresentation.js.map +1 -0
- package/dist/components/Company/TaxPayments/TaxPaymentsList/TaxPaymentsListPresentation.module.scss.js +14 -0
- package/dist/components/Company/TaxPayments/TaxPaymentsList/TaxPaymentsListPresentation.module.scss.js.map +1 -0
- package/dist/components/Company/TaxPayments/shared/payrollLookupWindow.js +16 -0
- package/dist/components/Company/TaxPayments/shared/payrollLookupWindow.js.map +1 -0
- package/dist/components/Company/TaxPayments/shared/taxPaymentStatus.js +34 -0
- package/dist/components/Company/TaxPayments/shared/taxPaymentStatus.js.map +1 -0
- package/dist/components/Company/TaxPayments/shared/useAllTaxPayments.js +30 -0
- package/dist/components/Company/TaxPayments/shared/useAllTaxPayments.js.map +1 -0
- package/dist/components/Company/exports/companyManagement.js +10 -4
- package/dist/components/Company/exports/companyManagement.js.map +1 -1
- package/dist/components/Contractor/Compensation/management/CompensationCard/CompensationCard.js +17 -16
- package/dist/components/Contractor/Compensation/management/CompensationCard/CompensationCard.js.map +1 -1
- package/dist/components/Contractor/Documents/management/DocumentsCard/DocumentsCard.js +9 -8
- package/dist/components/Contractor/Documents/management/DocumentsCard/DocumentsCard.js.map +1 -1
- package/dist/components/Contractor/PaymentMethod/shared/ContractorBankAccountFormBody/ContractorBankAccountFormBody.js +8 -6
- package/dist/components/Contractor/PaymentMethod/shared/ContractorBankAccountFormBody/ContractorBankAccountFormBody.js.map +1 -1
- package/dist/components/Contractor/Profile/management/ProfileCard/ProfileCard.js +27 -26
- package/dist/components/Contractor/Profile/management/ProfileCard/ProfileCard.js.map +1 -1
- package/dist/components/Contractor/Profile/management/ProfileEditForm.js +11 -11
- package/dist/components/Employee/Deductions/management/DeductionsCard/DeductionsCard.js +13 -12
- package/dist/components/Employee/Deductions/management/DeductionsCard/DeductionsCard.js.map +1 -1
- package/dist/components/Employee/Documents/management/DocumentsCard/DocumentsCard.js +13 -12
- package/dist/components/Employee/Documents/management/DocumentsCard/DocumentsCard.js.map +1 -1
- package/dist/components/Employee/Documents/onboarding/DocumentSigner/DocumentList/Actions.js +8 -6
- package/dist/components/Employee/Documents/onboarding/DocumentSigner/DocumentList/Actions.js.map +1 -1
- package/dist/components/Employee/Documents/onboarding/DocumentSigner/DocumentList/useDocumentList.js +6 -3
- package/dist/components/Employee/Documents/onboarding/DocumentSigner/DocumentList/useDocumentList.js.map +1 -1
- package/dist/components/Employee/EmployeeListFlow/employeeListStateMachine.js +24 -23
- package/dist/components/Employee/EmployeeListFlow/employeeListStateMachine.js.map +1 -1
- package/dist/components/Employee/FederalTaxes/management/FederalTaxesEditForm.js +4 -3
- package/dist/components/Employee/FederalTaxes/management/FederalTaxesEditForm.js.map +1 -1
- package/dist/components/Employee/FederalTaxes/onboarding/FederalTaxes.js +4 -3
- package/dist/components/Employee/FederalTaxes/onboarding/FederalTaxes.js.map +1 -1
- package/dist/components/Employee/PaymentMethod/shared/BankFormBody/BankFormBody.js +24 -22
- package/dist/components/Employee/PaymentMethod/shared/BankFormBody/BankFormBody.js.map +1 -1
- package/dist/components/Employee/Paystubs/management/PaystubsCard/PaystubsCard.js +9 -8
- package/dist/components/Employee/Paystubs/management/PaystubsCard/PaystubsCard.js.map +1 -1
- package/dist/components/Employee/Profile/management/ProfileCard/ProfileCard.js +15 -14
- package/dist/components/Employee/Profile/management/ProfileCard/ProfileCard.js.map +1 -1
- package/dist/components/Employee/Profile/management/ProfileEditForm.js +1 -1
- package/dist/components/Employee/Profile/onboarding/EmployeeProfile.js +1 -1
- package/dist/components/Employee/Profile/shared/useEmployeeDetailsForm/employeeDetailsSchema.js +13 -13
- package/dist/components/Employee/Profile/shared/useEmployeeDetailsForm/employeeDetailsSchema.js.map +1 -1
- package/dist/components/Employee/StateTaxes/management/StateTaxesEditForm.js +8 -7
- package/dist/components/Employee/StateTaxes/management/StateTaxesEditForm.js.map +1 -1
- package/dist/components/Employee/StateTaxes/onboarding/StateTaxes.js +8 -7
- package/dist/components/Employee/StateTaxes/onboarding/StateTaxes.js.map +1 -1
- package/dist/components/Employee/Terminations/TerminationFlow/terminationStateMachine.js +42 -34
- package/dist/components/Employee/Terminations/TerminationFlow/terminationStateMachine.js.map +1 -1
- package/dist/components/Payroll/OffCyclePayPeriodDateForm/OffCyclePayPeriodDateFormPresentation.js +16 -14
- package/dist/components/Payroll/OffCyclePayPeriodDateForm/OffCyclePayPeriodDateFormPresentation.js.map +1 -1
- package/dist/components/Payroll/OffCycleReasonSelection/OffCycleReasonSelectionPresentation.js +8 -6
- package/dist/components/Payroll/OffCycleReasonSelection/OffCycleReasonSelectionPresentation.js.map +1 -1
- package/dist/components/Payroll/OffCycleTaxWithholdingModal/OffCycleTaxWithholdingModal.js +11 -9
- package/dist/components/Payroll/OffCycleTaxWithholdingModal/OffCycleTaxWithholdingModal.js.map +1 -1
- package/dist/components/Payroll/PayrollEditEmployee/shared/usePayrollEditEmployeeForm/payrollEditEmployeeHelpers.js +113 -111
- package/dist/components/Payroll/PayrollEditEmployee/shared/usePayrollEditEmployeeForm/payrollEditEmployeeHelpers.js.map +1 -1
- package/dist/components/Payroll/PayrollFlow/PayrollFlow.js.map +1 -1
- package/dist/components/Payroll/PayrollFlow/payrollStateMachine.js +60 -52
- package/dist/components/Payroll/PayrollFlow/payrollStateMachine.js.map +1 -1
- package/dist/components/Payroll/PayrollHistory/PayrollHistory.js +27 -31
- package/dist/components/Payroll/PayrollHistory/PayrollHistory.js.map +1 -1
- package/dist/components/Payroll/PayrollLanding/PayrollLanding.js.map +1 -1
- package/dist/components/Payroll/PayrollLanding/payrollLandingStateMachine.js +23 -18
- package/dist/components/Payroll/PayrollLanding/payrollLandingStateMachine.js.map +1 -1
- package/dist/components/Payroll/PayrollList/PayrollList.js +31 -35
- package/dist/components/Payroll/PayrollList/PayrollList.js.map +1 -1
- package/dist/components/Payroll/PayrollOverview/PayrollOverview.js +204 -179
- package/dist/components/Payroll/PayrollOverview/PayrollOverview.js.map +1 -1
- package/dist/components/Payroll/PayrollOverview/PayrollOverview.module.scss.js +8 -0
- package/dist/components/Payroll/PayrollOverview/PayrollOverview.module.scss.js.map +1 -0
- package/dist/components/Payroll/PrintChecks/PrintChecksForm/PrintChecksForm.js +4 -4
- package/dist/components/Payroll/PrintChecks/PrintChecksForm/PrintChecksForm.js.map +1 -1
- package/dist/components/Payroll/PrintChecks/PrintChecksForm/useGenerationPoll.js +50 -41
- package/dist/components/Payroll/PrintChecks/PrintChecksForm/useGenerationPoll.js.map +1 -1
- package/dist/components/Payroll/TransitionPayroll/useResolveTransitionPayroll.js +5 -9
- package/dist/components/Payroll/TransitionPayroll/useResolveTransitionPayroll.js.map +1 -1
- package/dist/components/Payroll/UNSTABLE_PayrollEditEmployee/UNSTABLE_PayrollEditEmployee.js +164 -154
- package/dist/components/Payroll/UNSTABLE_PayrollEditEmployee/UNSTABLE_PayrollEditEmployee.js.map +1 -1
- package/dist/components/Payroll/UNSTABLE_PayrollEditEmployee/UNSTABLE_PayrollEditEmployee.module.scss.js +9 -5
- package/dist/components/Payroll/UNSTABLE_PayrollEditEmployee/UNSTABLE_PayrollEditEmployee.module.scss.js.map +1 -1
- package/dist/components/Payroll/helpers.js +91 -84
- package/dist/components/Payroll/helpers.js.map +1 -1
- package/dist/components/Payroll/usePreparedPayrollData.js +16 -13
- package/dist/components/Payroll/usePreparedPayrollData.js.map +1 -1
- package/dist/components/TimeOff/HolidayPolicyDetail/HolidayPolicyDetailPresentation.js +4 -2
- package/dist/components/TimeOff/HolidayPolicyDetail/HolidayPolicyDetailPresentation.js.map +1 -1
- package/dist/components/TimeOff/shared/EmployeeTable/EmployeeTable.js +8 -6
- package/dist/components/TimeOff/shared/EmployeeTable/EmployeeTable.js.map +1 -1
- package/dist/components/TimeOff/shared/PolicyDetailLayout/PolicyDetailLayout.js +30 -28
- package/dist/components/TimeOff/shared/PolicyDetailLayout/PolicyDetailLayout.js.map +1 -1
- package/dist/contexts/ApiProvider/ApiProvider.js +19 -18
- package/dist/contexts/ApiProvider/ApiProvider.js.map +1 -1
- package/dist/contexts/ApiProvider/createSdkQueryClient.js +4 -3
- package/dist/contexts/ApiProvider/createSdkQueryClient.js.map +1 -1
- package/dist/contexts/ApiProvider/payrollOffCycleReasonEnumHook.js +36 -0
- package/dist/contexts/ApiProvider/payrollOffCycleReasonEnumHook.js.map +1 -0
- package/dist/contexts/GustoProvider/GustoProviderCustomUIAdapter.js +4 -2
- package/dist/contexts/GustoProvider/GustoProviderCustomUIAdapter.js.map +1 -1
- package/dist/contexts/ObservabilityProvider/sanitization.js +98 -47
- package/dist/contexts/ObservabilityProvider/sanitization.js.map +1 -1
- package/dist/contexts/UnstableFeaturesProvider/useUnstableFeature.js.map +1 -1
- package/dist/helpers/validations.js +1 -1
- package/dist/helpers/validations.js.map +1 -1
- package/dist/i18n/I18n.js +2 -0
- package/dist/i18n/I18n.js.map +1 -1
- package/dist/i18n/en/Company.AssignSignatory.json.js +1 -1
- package/dist/i18n/en/Company.Management.PaySchedule.json.js +24 -14
- package/dist/i18n/en/Company.Management.PaySchedule.json.js.map +1 -1
- package/dist/i18n/en/Company.Management.PayScheduleAssignment.json.js +12 -10
- package/dist/i18n/en/Company.Management.PayScheduleAssignment.json.js.map +1 -1
- package/dist/i18n/en/Company.Management.TaxPaymentDetail.json.js +26 -0
- package/dist/i18n/en/Company.Management.TaxPaymentDetail.json.js.map +1 -0
- package/dist/i18n/en/Company.Management.TaxPaymentsList.json.js +48 -0
- package/dist/i18n/en/Company.Management.TaxPaymentsList.json.js.map +1 -0
- package/dist/i18n/en/Company.StateTaxes.json.js +1 -1
- package/dist/i18n/en/Payroll.PayrollOverview.json.js +42 -36
- package/dist/i18n/en/Payroll.PayrollOverview.json.js.map +1 -1
- package/dist/package.json.js +1 -1
- package/dist/partner-hook-utils/form/fields/CheckboxHookField.js +10 -8
- package/dist/partner-hook-utils/form/fields/CheckboxHookField.js.map +1 -1
- package/dist/partner-hook-utils/form/fields/NumberInputHookField.js +14 -12
- package/dist/partner-hook-utils/form/fields/NumberInputHookField.js.map +1 -1
- package/dist/partner-hook-utils/form/fields/RadioGroupHookField.js +15 -13
- package/dist/partner-hook-utils/form/fields/RadioGroupHookField.js.map +1 -1
- package/dist/partner-hook-utils/form/fields/SelectHookField.js +12 -10
- package/dist/partner-hook-utils/form/fields/SelectHookField.js.map +1 -1
- package/dist/partner-hook-utils/form/fields/SwitchHookField.js +16 -14
- package/dist/partner-hook-utils/form/fields/SwitchHookField.js.map +1 -1
- package/dist/partner-hook-utils/form/fields/TextInputHookField.js +10 -8
- package/dist/partner-hook-utils/form/fields/TextInputHookField.js.map +1 -1
- package/dist/shared/constants.js +62 -56
- package/dist/shared/constants.js.map +1 -1
- package/dist/src/components/Company/PaySchedule/management/PayScheduleAssignment/AssignmentCompensationStepPresentation.d.ts +15 -0
- package/dist/src/components/Company/PaySchedule/management/PayScheduleAssignment/AssignmentTypeStepPresentation.d.ts +3 -3
- package/dist/src/components/Company/PaySchedule/management/PayScheduleAssignment/PayScheduleAssignment.d.ts +7 -3
- package/dist/src/components/Company/PaySchedule/management/PayScheduleAssignment/PayScheduleAssignmentComponents.d.ts +20 -4
- package/dist/src/components/Company/PaySchedule/management/PayScheduleAssignment/scheduleLabel.d.ts +3 -0
- package/dist/src/components/Company/PaySchedule/management/PayScheduleAssignment/usePayScheduleAssignment.d.ts +10 -1
- package/dist/src/components/Company/PaySchedule/management/PayScheduleCompensationOverviewPresentation.d.ts +25 -0
- package/dist/src/components/Company/StateTaxes/shared/requirementSetError.d.ts +18 -5
- package/dist/src/components/Company/TaxPayments/TaxPaymentDetail/TaxPaymentDetail.d.ts +31 -0
- package/dist/src/components/Company/TaxPayments/TaxPaymentDetail/TaxPaymentDetailPresentation.d.ts +19 -0
- package/dist/src/components/Company/TaxPayments/TaxPaymentsFlow/TaxPaymentsFlow.d.ts +42 -0
- package/dist/src/components/Company/TaxPayments/TaxPaymentsFlow/TaxPaymentsFlowComponents.d.ts +20 -0
- package/dist/src/components/Company/TaxPayments/TaxPaymentsFlow/taxPaymentsStateMachine.d.ts +10 -0
- package/dist/src/components/Company/TaxPayments/TaxPaymentsList/TaxPaymentsList.d.ts +28 -0
- package/dist/src/components/Company/TaxPayments/TaxPaymentsList/TaxPaymentsListPresentation.d.ts +33 -0
- package/dist/src/components/Company/TaxPayments/index.d.ts +6 -0
- package/dist/src/components/Company/TaxPayments/shared/payrollLookupWindow.d.ts +29 -0
- package/dist/src/components/Company/TaxPayments/shared/payrollLookupWindow.test.d.ts +1 -0
- package/dist/src/components/Company/TaxPayments/shared/taxPaymentStatus.d.ts +62 -0
- package/dist/src/components/Company/TaxPayments/shared/taxPaymentStatus.test.d.ts +1 -0
- package/dist/src/components/Company/TaxPayments/shared/useAllTaxPayments.d.ts +30 -0
- package/dist/src/components/Company/exports/companyManagement.d.ts +2 -0
- package/dist/src/components/Employee/Profile/shared/useEmployeeDetailsForm/employeeDetailsSchema.test.d.ts +1 -0
- package/dist/src/components/Payroll/PayrollConfiguration/__fixtures__/payrollConfigurationMocks.d.ts +6 -1
- package/dist/src/components/Payroll/PayrollFlow/PayrollFlow.d.ts +1 -0
- package/dist/src/components/Payroll/PayrollLanding/PayrollLanding.d.ts +1 -0
- package/dist/src/components/Payroll/PayrollOverview/PayrollOverview.d.ts +9 -3
- package/dist/src/components/Payroll/helpers.d.ts +14 -18
- package/dist/src/contexts/ApiProvider/createSdkQueryClient.d.ts +2 -0
- package/dist/src/contexts/ApiProvider/createSdkQueryClient.test.d.ts +1 -0
- package/dist/src/contexts/ApiProvider/payrollOffCycleReasonEnumHook.d.ts +14 -0
- package/dist/src/contexts/ApiProvider/payrollOffCycleReasonEnumHook.test.d.ts +1 -0
- package/dist/src/contexts/ObservabilityProvider/sanitization.d.ts +8 -17
- package/dist/src/contexts/ObservabilityProvider/useSanitizedObservability.test.d.ts +1 -0
- package/dist/src/contexts/UnstableFeaturesProvider/useUnstableFeature.d.ts +2 -0
- package/dist/src/helpers/validations.test.d.ts +1 -0
- package/dist/src/i18n/types.d.ts +192 -4
- package/dist/src/models/external.d.ts +9 -6
- package/dist/src/shared/constants.d.ts +18 -0
- package/dist/src/types/observability.d.ts +59 -20
- package/dist/style.css +1 -1
- package/docs/guides/endpoint-inventory.json +48 -0
- package/package.json +34 -31
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PayrollOverview.js","sources":["../../../../src/components/Payroll/PayrollOverview/PayrollOverview.tsx"],"sourcesContent":["import { usePayrollsSubmitMutation } from '@gusto/embedded-api/react-query/payrollsSubmit'\nimport { usePayrollsCancelMutation } from '@gusto/embedded-api/react-query/payrollsCancel'\nimport { usePayrollsGet } from '@gusto/embedded-api/react-query/payrollsGet'\nimport { useEmployeesList } from '@gusto/embedded-api/react-query/employeesList'\nimport { keepPreviousData } from '@tanstack/react-query'\nimport { useTranslation } from 'react-i18next'\nimport { useBankAccountsGetSuspense } from '@gusto/embedded-api/react-query/bankAccountsGet'\nimport { useWireInRequestsGet } from '@gusto/embedded-api/react-query/wireInRequestsGet'\nimport { useEffect, useMemo, useState } from 'react'\nimport { useGustoEmbeddedContext } from '@gusto/embedded-api/react-query/_context'\nimport { payrollsGetPayStub } from '@gusto/embedded-api/funcs/payrollsGetPayStub'\nimport { useErrorBoundary } from 'react-error-boundary'\nimport type { GetV1CompaniesCompanyIdPayrollsPayrollIdRequest } from '@gusto/embedded-api/models/operations/getv1companiescompanyidpayrollspayrollid'\nimport type { PayrollSubmissionBlockerType } from '@gusto/embedded-api/models/components/payrollsubmissionblockertype'\nimport type {\n PayrollCreditBlockerType,\n PayrollCreditBlockerTypeUnblockOptions,\n} from '@gusto/embedded-api/models/components/payrollcreditblockertype'\nimport type { PayrollFlowAlert } from '../PayrollFlow/PayrollFlowComponents'\nimport {\n ConfirmWireDetails,\n type ConfirmWireDetailsComponentType,\n} from '../ConfirmWireDetails/ConfirmWireDetails'\nimport { canCancelPayroll, isTaxReconciliationPayroll } from '../helpers'\nimport { PrintChecks } from '../PrintChecks/PrintChecks'\nimport { PayrollOverviewPresentation } from './PayrollOverviewPresentation'\nimport { PayrollOverviewStatus } from './PayrollOverviewTypes'\nimport { useSubmissionPoll, type PayrollShow } from './useSubmissionPoll'\nimport { useCompanyPaymentSpeed } from '@/hooks/useCompanyPaymentSpeed'\nimport {\n componentEvents,\n payrollWireEvents,\n PAYROLL_PROCESSING_STATUS,\n PAYROLL_RESOLVABLE_SUBMISSION_BLOCKER_TYPES,\n type EventType,\n} from '@/shared/constants'\nimport { BaseComponent, useBase, type BaseComponentInterface } from '@/components/Base'\nimport { useComponentDictionary, useI18n } from '@/i18n'\nimport { readableStreamToBlob } from '@/helpers/readableStreamToBlob'\nimport { openPdfInNewTab } from '@/helpers/openPdfInNewTab'\nimport { useNonce } from '@/contexts/NonceProvider'\nimport useNumberFormatter from '@/hooks/useNumberFormatter'\nimport { useDateFormatter } from '@/hooks/useDateFormatter'\nimport { useComponentContext } from '@/contexts/ComponentAdapter/useComponentContext'\nimport { isNonRetryablePollError } from '@/hooks/usePollingTask/usePollingTask'\nimport { renderErrorList } from '@/helpers/apiErrorToList'\nimport { Flex, PayrollLoading } from '@/components/Common'\nimport { usePagination } from '@/hooks/usePagination/usePagination'\n\n/**\n * Props for {@link PayrollOverview}.\n *\n * @public\n */\nexport interface PayrollOverviewProps extends BaseComponentInterface<'Payroll.PayrollOverview'> {\n /** Identifier of the company that owns the payroll. */\n companyId: string\n /** Identifier of the payroll being reviewed. The payroll must already be calculated. */\n payrollId: string\n /** Alert banners to display above the payroll summary. */\n alerts?: PayrollFlowAlert[]\n /** Whether reimbursement fields are shown in the totals and per-employee tables. Defaults to `true`. */\n withReimbursements?: boolean\n /** Custom component to replace the default wire details confirmation UI. */\n ConfirmWireDetailsComponent?: ConfirmWireDetailsComponentType\n /**\n * Hides the edit and cancel actions, leaving submit and receipt/paystub actions available.\n * Use for a deep link to a specific payroll where editing shouldn't be offered. Defaults to\n * `false`.\n */\n readOnly?: boolean\n}\n\nconst findUnresolvedBlockersWithOptions = (\n blockers: PayrollSubmissionBlockerType[] = [],\n): PayrollSubmissionBlockerType[] => {\n return blockers.filter(\n blocker =>\n blocker.status === 'unresolved' &&\n blocker.unblockOptions &&\n blocker.unblockOptions.length > 0,\n )\n}\n\nconst findWireInRequestUuid = (\n creditBlockers: PayrollCreditBlockerType[] = [],\n): string | undefined => {\n const unresolvedCreditBlocker = creditBlockers.find(blocker => blocker.status === 'unresolved')\n\n if (!unresolvedCreditBlocker?.unblockOptions) {\n return undefined\n }\n\n const wireUnblockOption = unresolvedCreditBlocker.unblockOptions.find(\n (option: PayrollCreditBlockerTypeUnblockOptions) => option.unblockType === 'submit_wire',\n )\n\n return wireUnblockOption?.metadata.wireInRequestUuid\n}\n\n/**\n * Final review screen for a calculated payroll before submission, with submit, cancel,\n * and edit controls. After submission, tracks processing status and surfaces the receipt\n * and per-employee paystub downloads once complete.\n *\n * @remarks\n * The payroll referenced by `payrollId` must already be calculated; rendering with an\n * uncalculated payroll throws. Unresolved submission blockers (e.g. fast-ACH threshold,\n * wire-in funding) are surfaced inline and the submit action stays disabled until each\n * blocker has a selected unblock option. While the payroll is processing, the component\n * polls until success or failure and emits the corresponding event. Pass `readOnly` to hide\n * the edit and cancel actions while keeping submit available.\n *\n * @events\n * | Event | Description | Data |\n * | ----- | ----------- | ---- |\n * | `runPayroll/edit` | User chose to edit the payroll before submitting | — |\n * | `runPayroll/submitting` | Submit request was sent to the API | — |\n * | `runPayroll/submitted` | Payroll was successfully submitted | Submit payroll response |\n * | `runPayroll/processed` | Payroll finished processing successfully | `{ payPeriod, payrollUuid }` |\n * | `runPayroll/processingFailed` | Payroll processing failed | — |\n * | `runPayroll/cancelled` | Payroll was cancelled | Cancel payroll response |\n * | `runPayroll/receipt/get` | User requested the payroll receipt | `{ payrollId }` |\n * | `runPayroll/pdfPaystub/viewed` | User opened an employee's paystub PDF | `{ employeeId }` |\n * | `payroll/wire/form/done` | Wire-in details were confirmed via the embedded wire form | Submit wire-in response |\n * | `payroll/printChecks/start` | User opened the print-checks modal from the embedded print-checks banner | — |\n * | `payroll/printChecks/generate/start` | User submitted the print-checks form | — |\n * | `payroll/printChecks/generate/succeeded` | Printable checks finished generating | `{ documentUrl }` |\n * | `payroll/printChecks/generate/failed` | The print-checks request was rejected or generation failed | `{ errorMessage }` |\n * | `payroll/printChecks/retry` | User retried after a failed check generation | — |\n * | `payroll/printChecks/cancel` | User cancelled the print-checks form | — |\n * | `payroll/printChecks/close` | User closed the print-checks failure or summary screen | — |\n *\n * @param props - See {@link PayrollOverviewProps}.\n * @returns The payroll overview surface.\n * @public\n */\nexport function PayrollOverview(props: PayrollOverviewProps) {\n return (\n <BaseComponent {...props}>\n <Root {...props}>{props.children}</Root>\n </BaseComponent>\n )\n}\n\nconst Root = ({\n companyId,\n payrollId,\n dictionary,\n onEvent,\n alerts,\n withReimbursements = true,\n ConfirmWireDetailsComponent = ConfirmWireDetails,\n readOnly = false,\n className,\n}: PayrollOverviewProps) => {\n useComponentDictionary('Payroll.PayrollOverview', dictionary)\n useI18n('Payroll.PayrollOverview')\n const { baseSubmitHandler } = useBase()\n const { t } = useTranslation('Payroll.PayrollOverview')\n const [hasSubmittedInSession, setHasSubmittedInSession] = useState(false)\n const [internalAlerts, setInternalAlerts] = useState(alerts || [])\n const [selectedUnblockOptions, setSelectedUnblockOptions] = useState<Record<string, string>>({})\n const [showWireDetailsConfirmation, setShowWireDetailsConfirmation] = useState(false)\n const { showBoundary } = useErrorBoundary()\n const formatCurrency = useNumberFormatter('currency')\n const dateFormatter = useDateFormatter()\n const { Button, UnorderedList, Text } = useComponentContext()\n const [status, setStatus] = useState(PayrollOverviewStatus.Viewing)\n const { currentPage, itemsPerPage, getPaginationProps } = usePagination({\n defaultItemsPerPage: 25,\n })\n const gustoEmbedded = useGustoEmbeddedContext()\n\n const payrollRequest = useMemo<GetV1CompaniesCompanyIdPayrollsPayrollIdRequest>(\n () => ({\n companyId,\n payrollId,\n include: ['taxes', 'benefits', 'deductions', 'totals', 'payroll_taxes'],\n page: currentPage,\n per: itemsPerPage,\n sortBy: 'last_name',\n }),\n [companyId, payrollId, currentPage, itemsPerPage],\n )\n\n const {\n data,\n isFetching,\n isError,\n error,\n refetch: refetchPayroll,\n } = usePayrollsGet(payrollRequest, {\n placeholderData: keepPreviousData,\n })\n const payrollData = data?.payrollShow\n const submissionBlockers = findUnresolvedBlockersWithOptions(payrollData?.submissionBlockers)\n const wireInId = findWireInRequestUuid(payrollData?.creditBlockers)\n\n const { data: wireInRequestData } = useWireInRequestsGet(\n {\n wireInRequestUuid: wireInId || '',\n },\n { enabled: !!wireInId },\n )\n const wireInRequest = wireInRequestData?.wireInRequest\n\n // Scoped to the current page's employees so this stays bounded regardless of company size,\n // since `flsaStatus` (compensation type) isn't available on employeeCompensations for\n // employees without an hourlyCompensations line item (e.g. salaried employees).\n const employeeUuids = (payrollData?.employeeCompensations ?? [])\n .map(employeeCompensation => employeeCompensation.employeeUuid)\n .filter((uuid): uuid is string => !!uuid)\n\n const { data: employeesData } = useEmployeesList(\n { companyId, uuids: employeeUuids },\n { enabled: employeeUuids.length > 0 },\n )\n const employeeFlsaStatusByUuid = (employeesData?.showEmployees ?? []).reduce<\n Record<string, string | undefined>\n >((acc, employee) => {\n acc[employee.uuid] = employee.flsaStatus\n return acc\n }, {})\n\n const onEdit = () => {\n onEvent(componentEvents.RUN_PAYROLL_EDIT)\n }\n\n const handleWireEvent = (type: EventType, data?: unknown) => {\n if (type === payrollWireEvents.PAYROLL_WIRE_FORM_DONE) {\n setShowWireDetailsConfirmation(true)\n }\n onEvent(type, data)\n }\n\n const wireInConfirmationRequest = wireInId && (\n <ConfirmWireDetailsComponent\n companyId={companyId}\n wireInId={wireInId}\n onEvent={handleWireEvent}\n />\n )\n\n const printChecksBanner = (\n <PrintChecks companyId={companyId} payrollId={payrollId} onEvent={onEvent} />\n )\n\n useEffect(() => {\n if (wireInRequest?.status === 'pending_review' && !showWireDetailsConfirmation) {\n setShowWireDetailsConfirmation(true)\n }\n }, [wireInRequest?.status, showWireDetailsConfirmation])\n\n const checkDate = payrollData?.checkDate\n useEffect(() => {\n if (checkDate && showWireDetailsConfirmation) {\n const formattedCheckDate = dateFormatter.formatShortWithYear(checkDate)\n\n setInternalAlerts([\n {\n type: 'success',\n title: t('alerts.wireDetailsSubmittedTitle'),\n content: (\n <Text>\n {t('alerts.wireDetailsSubmittedMessage', { checkDate: formattedCheckDate })}\n </Text>\n ),\n onDismiss: () => {\n setShowWireDetailsConfirmation(false)\n },\n },\n ])\n }\n }, [showWireDetailsConfirmation, checkDate, t, dateFormatter, Text])\n\n const emitProcessed = (payroll: PayrollShow | undefined) => {\n onEvent(componentEvents.RUN_PAYROLL_PROCESSED, {\n payPeriod: payroll?.payPeriod,\n payrollUuid: payrollId,\n })\n setInternalAlerts([\n {\n type: 'success',\n title: t('alerts.payrollProcessedTitle'),\n content: t('alerts.payrollProcessedMessage', {\n amount: formatCurrency(Number(payroll?.totals?.companyDebit)),\n date: dateFormatter.formatShortWithYear(\n payroll?.payrollStatusMeta?.expectedDebitTime ?? payroll?.payrollDeadline,\n ),\n }),\n },\n ])\n setShowWireDetailsConfirmation(false)\n setHasSubmittedInSession(false)\n }\n\n const emitProcessingFailed = (payroll: PayrollShow | undefined) => {\n onEvent(componentEvents.RUN_PAYROLL_PROCESSING_FAILED)\n setInternalAlerts([\n {\n type: 'error',\n title: t('alerts.payrollProcessingFailedTitle'),\n content: (\n <Flex flexDirection=\"column\" gap={16}>\n <UnorderedList items={renderErrorList(payroll?.processingRequest?.errors ?? [])} />\n {!readOnly && (\n <Button variant=\"secondary\" onClick={onEdit}>\n {t('alerts.payrollProcessingFailedCtaLabel')}\n </Button>\n )}\n </Flex>\n ),\n },\n ])\n setShowWireDetailsConfirmation(false)\n setHasSubmittedInSession(false)\n }\n\n const { start: startPayrollPoll, isPolling } = useSubmissionPoll({\n refetch: refetchPayroll,\n onProcessed: emitProcessed,\n onProcessingFailed: emitProcessingFailed,\n // Unlike the calculation poll, a second Submit click here is safe even if this fires on a\n // payroll that actually did process successfully — payrollsSubmit only operates on an\n // unprocessed payroll, so the API itself rejects a resubmit rather than double-running it.\n onError: () => {\n emitProcessingFailed(undefined)\n },\n })\n\n // The initial read is a non-suspense query; if its notification never arrives, the component\n // is stuck on `!payrollData` forever with no other render source. This one read forces that\n // render -- it only keeps tracking to completion if it happens to land on `submitting`, not as\n // a durable watcher for a submission started elsewhere.\n useEffect(() => {\n startPayrollPoll({ baseline: null, sawSubmitting: false })\n }, [startPayrollPoll])\n\n const { data: bankAccountData } = useBankAccountsGetSuspense({\n companyId,\n })\n const bankAccount = bankAccountData.companyBankAccounts?.[0]\n\n const { paymentSpeed } = useCompanyPaymentSpeed(companyId)\n\n const { mutateAsync: submitPayroll, isPending } = usePayrollsSubmitMutation()\n\n const { mutateAsync: cancelPayroll } = usePayrollsCancelMutation()\n\n const nonce = useNonce()\n\n const [downloadingEmployeeIds, setDownloadingEmployeeIds] = useState<ReadonlySet<string>>(\n () => new Set(),\n )\n\n if (!payrollData) {\n if (isError) {\n throw new Error(t('alerts.payrollLoadFailed'))\n }\n return <PayrollLoading title={t('dataLoadingTitle')} />\n }\n\n // `keepPreviousData` can leave stale data in place while the query is erroring in the\n // background. A retryable error (network blip, transient 5xx) is fine to ride out on stale\n // data, but a non-retryable one (expired session, schema mismatch) never recovers on its own --\n // continuing to render stale data would hide that from the partner indefinitely.\n if (isError && isNonRetryablePollError(error)) {\n throw new Error(t('alerts.payrollLoadFailed'))\n }\n\n if (\n status === PayrollOverviewStatus.Viewing &&\n !payrollData.calculatedAt &&\n !isTaxReconciliationPayroll(payrollData.offCycleReason)\n ) {\n throw new Error(t('alerts.payrollNotCalculated'))\n }\n\n const pagination = getPaginationProps(data.httpMeta.response.headers, isFetching)\n\n // Per-tax totals come from the payroll-level `payrollTaxes` aggregate so they stay\n // correct when `employeeCompensations` is paginated (only a single page is loaded).\n const taxes =\n payrollData.payrollTaxes?.reduce(\n (acc, tax) => {\n if (!tax.name) return acc\n const amount = tax.amount ?? 0\n acc[tax.name] = {\n employee: (acc[tax.name]?.employee ?? 0) + (tax.employer ? 0 : amount),\n employer: (acc[tax.name]?.employer ?? 0) + (tax.employer ? amount : 0),\n }\n return acc\n },\n {} as Record<string, { employee: number; employer: number }>,\n ) || {}\n\n const onCancel = async () => {\n setStatus(PayrollOverviewStatus.Cancelling)\n await baseSubmitHandler(data, async () => {\n try {\n const result = await cancelPayroll({\n request: {\n companyId,\n payrollId,\n },\n })\n setStatus(PayrollOverviewStatus.Cancelled)\n onEvent(componentEvents.RUN_PAYROLL_CANCELLED, result)\n } catch (error) {\n setStatus(PayrollOverviewStatus.Viewing)\n throw error\n }\n })\n }\n const onPayrollReceipt = () => {\n onEvent(componentEvents.RUN_PAYROLL_RECEIPT_GET, { payrollId })\n }\n\n const onPaystubDownload = async (employeeId: string) => {\n const tab = openPdfInNewTab({ loadingMessage: t('downloadLoadingMessage'), nonce })\n setDownloadingEmployeeIds(prev => {\n const next = new Set(prev)\n next.add(employeeId)\n return next\n })\n try {\n const response = await payrollsGetPayStub(gustoEmbedded, { payrollId, employeeId })\n if (!response.value?.responseStream) {\n tab.close()\n throw new Error(t('alerts.paystubPdfError'))\n }\n const pdfBlob = await readableStreamToBlob(response.value.responseStream, 'application/pdf')\n tab.navigate(pdfBlob)\n onEvent(componentEvents.RUN_PAYROLL_PDF_PAYSTUB_VIEWED, { employeeId })\n } catch (err) {\n tab.close()\n showBoundary(err instanceof Error ? err : new Error(String(err)))\n } finally {\n setDownloadingEmployeeIds(prev => {\n if (!prev.has(employeeId)) return prev\n const next = new Set(prev)\n next.delete(employeeId)\n return next\n })\n }\n }\n const onSubmit = async () => {\n await baseSubmitHandler(data, async () => {\n const result = await submitPayroll({\n request: {\n companyId,\n payrollId,\n requestBody: {\n submissionBlockers: Object.entries(selectedUnblockOptions)\n .filter(([blockerType]) =>\n PAYROLL_RESOLVABLE_SUBMISSION_BLOCKER_TYPES.includes(blockerType),\n )\n .map(([blockerType, selectedOption]) => ({\n blockerType,\n selectedOption,\n })),\n },\n },\n })\n onEvent(componentEvents.RUN_PAYROLL_SUBMITTING)\n onEvent(componentEvents.RUN_PAYROLL_SUBMITTED, result)\n startPayrollPoll({\n baseline: {\n processed: payrollData.processed ?? false,\n status: payrollData.processingRequest?.status,\n },\n sawSubmitting: false,\n })\n setHasSubmittedInSession(true)\n })\n }\n\n const deadlineAlert: PayrollFlowAlert | undefined = (() => {\n if (hasSubmittedInSession || isPolling) return undefined\n if (\n payrollData.processed ||\n payrollData.processingRequest?.status === PAYROLL_PROCESSING_STATUS.submit_success\n )\n return undefined\n\n if (payrollData.checkDate && payrollData.payrollDeadline) {\n return {\n type: 'info' as const,\n title: t('alerts.directDepositDeadline', {\n payDate: dateFormatter.formatShortWithWeekday(payrollData.checkDate),\n ...dateFormatter.formatWithTime(payrollData.payrollDeadline),\n }),\n content: t('alerts.directDepositDeadlineText'),\n }\n }\n return undefined\n })()\n\n const combinedAlerts = [...internalAlerts, ...(deadlineAlert ? [deadlineAlert] : [])]\n\n return (\n <PayrollOverviewPresentation\n className={className}\n onEdit={onEdit}\n onSubmit={onSubmit}\n onCancel={onCancel}\n onPayrollReceipt={onPayrollReceipt}\n onPaystubDownload={onPaystubDownload}\n status={isPending || hasSubmittedInSession ? PayrollOverviewStatus.Submitting : status}\n isProcessed={\n payrollData.processed === true ||\n payrollData.processingRequest?.status === PAYROLL_PROCESSING_STATUS.submit_success\n }\n canCancel={canCancelPayroll(payrollData) && !readOnly}\n canEdit={!readOnly}\n payrollData={payrollData}\n employeeFlsaStatusByUuid={employeeFlsaStatusByUuid}\n bankAccount={bankAccount}\n taxes={taxes}\n alerts={combinedAlerts}\n submissionBlockers={submissionBlockers}\n selectedUnblockOptions={selectedUnblockOptions}\n onUnblockOptionChange={(blockerType, value) => {\n setSelectedUnblockOptions(prev => ({ ...prev, [blockerType]: value }))\n }}\n wireInConfirmationRequest={wireInConfirmationRequest}\n printChecksBanner={printChecksBanner}\n withReimbursements={withReimbursements}\n paymentSpeed={paymentSpeed}\n pagination={pagination}\n downloadingEmployeeIds={downloadingEmployeeIds}\n />\n )\n}\n"],"names":["findUnresolvedBlockersWithOptions","blockers","blocker","findWireInRequestUuid","creditBlockers","unresolvedCreditBlocker","option","PayrollOverview","props","jsx","BaseComponent","Root","companyId","payrollId","dictionary","onEvent","alerts","withReimbursements","ConfirmWireDetailsComponent","ConfirmWireDetails","readOnly","className","useComponentDictionary","useI18n","baseSubmitHandler","useBase","t","useTranslation","hasSubmittedInSession","setHasSubmittedInSession","useState","internalAlerts","setInternalAlerts","selectedUnblockOptions","setSelectedUnblockOptions","showWireDetailsConfirmation","setShowWireDetailsConfirmation","showBoundary","useErrorBoundary","formatCurrency","useNumberFormatter","dateFormatter","useDateFormatter","Button","UnorderedList","Text","useComponentContext","status","setStatus","PayrollOverviewStatus","currentPage","itemsPerPage","getPaginationProps","usePagination","gustoEmbedded","useGustoEmbeddedContext","payrollRequest","useMemo","data","isFetching","isError","error","refetchPayroll","usePayrollsGet","keepPreviousData","payrollData","submissionBlockers","wireInId","wireInRequestData","useWireInRequestsGet","wireInRequest","employeeUuids","employeeCompensation","uuid","employeesData","useEmployeesList","employeeFlsaStatusByUuid","acc","employee","onEdit","componentEvents","wireInConfirmationRequest","type","payrollWireEvents","printChecksBanner","PrintChecks","useEffect","checkDate","formattedCheckDate","emitProcessed","payroll","emitProcessingFailed","jsxs","Flex","renderErrorList","startPayrollPoll","isPolling","useSubmissionPoll","bankAccountData","useBankAccountsGetSuspense","bankAccount","paymentSpeed","useCompanyPaymentSpeed","submitPayroll","isPending","usePayrollsSubmitMutation","cancelPayroll","usePayrollsCancelMutation","nonce","useNonce","downloadingEmployeeIds","setDownloadingEmployeeIds","PayrollLoading","isNonRetryablePollError","isTaxReconciliationPayroll","pagination","taxes","tax","amount","onCancel","result","onPayrollReceipt","onPaystubDownload","employeeId","tab","openPdfInNewTab","prev","next","response","payrollsGetPayStub","pdfBlob","readableStreamToBlob","err","onSubmit","blockerType","PAYROLL_RESOLVABLE_SUBMISSION_BLOCKER_TYPES","selectedOption","deadlineAlert","PAYROLL_PROCESSING_STATUS","combinedAlerts","PayrollOverviewPresentation","canCancelPayroll","value"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"PayrollOverview.js","sources":["../../../../src/components/Payroll/PayrollOverview/PayrollOverview.tsx"],"sourcesContent":["import { usePayrollsSubmitMutation } from '@gusto/embedded-api/react-query/payrollsSubmit'\nimport { usePayrollsCancelMutation } from '@gusto/embedded-api/react-query/payrollsCancel'\nimport { usePayrollsGet } from '@gusto/embedded-api/react-query/payrollsGet'\nimport { useEmployeesList } from '@gusto/embedded-api/react-query/employeesList'\nimport { keepPreviousData } from '@tanstack/react-query'\nimport { useTranslation } from 'react-i18next'\nimport classNames from 'classnames'\nimport { useBankAccountsGetSuspense } from '@gusto/embedded-api/react-query/bankAccountsGet'\nimport { useWireInRequestsGet } from '@gusto/embedded-api/react-query/wireInRequestsGet'\nimport { useEffect, useMemo, useState } from 'react'\nimport { useGustoEmbeddedContext } from '@gusto/embedded-api/react-query/_context'\nimport { payrollsGetPayStub } from '@gusto/embedded-api/funcs/payrollsGetPayStub'\nimport { useErrorBoundary } from 'react-error-boundary'\nimport type { GetV1CompaniesCompanyIdPayrollsPayrollIdRequest } from '@gusto/embedded-api/models/operations/getv1companiescompanyidpayrollspayrollid'\nimport type { PayrollSubmissionBlockerType } from '@gusto/embedded-api/models/components/payrollsubmissionblockertype'\nimport type {\n PayrollCreditBlockerType,\n PayrollCreditBlockerTypeUnblockOptions,\n} from '@gusto/embedded-api/models/components/payrollcreditblockertype'\nimport type { PayrollFlowAlert } from '../PayrollFlow/PayrollFlowComponents'\nimport {\n ConfirmWireDetails,\n type ConfirmWireDetailsComponentType,\n} from '../ConfirmWireDetails/ConfirmWireDetails'\nimport { canCancelPayroll } from '../helpers'\nimport { PrintChecks } from '../PrintChecks/PrintChecks'\nimport { PayrollOverviewPresentation } from './PayrollOverviewPresentation'\nimport { PayrollOverviewStatus } from './PayrollOverviewTypes'\nimport styles from './PayrollOverview.module.scss'\nimport { useSubmissionPoll, type PayrollShow } from './useSubmissionPoll'\nimport { useCompanyPaymentSpeed } from '@/hooks/useCompanyPaymentSpeed'\nimport {\n componentEvents,\n payrollWireEvents,\n PAYROLL_PROCESSING_STATUS,\n PAYROLL_RESOLVABLE_SUBMISSION_BLOCKER_TYPES,\n type EventType,\n} from '@/shared/constants'\nimport { BaseComponent, useBase, type BaseComponentInterface } from '@/components/Base'\nimport { useComponentDictionary, useI18n } from '@/i18n'\nimport { readableStreamToBlob } from '@/helpers/readableStreamToBlob'\nimport { openPdfInNewTab } from '@/helpers/openPdfInNewTab'\nimport { useNonce } from '@/contexts/NonceProvider'\nimport useNumberFormatter from '@/hooks/useNumberFormatter'\nimport { useDateFormatter } from '@/hooks/useDateFormatter'\nimport { useComponentContext } from '@/contexts/ComponentAdapter/useComponentContext'\nimport { isNonRetryablePollError } from '@/hooks/usePollingTask/usePollingTask'\nimport { renderErrorList } from '@/helpers/apiErrorToList'\nimport { Flex, PayrollLoading } from '@/components/Common'\nimport { usePagination } from '@/hooks/usePagination/usePagination'\n\n/**\n * Props for {@link PayrollOverview}.\n *\n * @public\n */\nexport interface PayrollOverviewProps extends BaseComponentInterface<'Payroll.PayrollOverview'> {\n /** Identifier of the company that owns the payroll. */\n companyId: string\n /**\n * Identifier of the payroll being reviewed. An unprocessed payroll must already be calculated;\n * a processed payroll renders as a summary whether or not it has a calculation.\n */\n payrollId: string\n /** Alert banners to display above the payroll summary. */\n alerts?: PayrollFlowAlert[]\n /** Whether reimbursement fields are shown in the totals and per-employee tables. Defaults to `true`. */\n withReimbursements?: boolean\n /** Custom component to replace the default wire details confirmation UI. */\n ConfirmWireDetailsComponent?: ConfirmWireDetailsComponentType\n /**\n * Hides the edit and cancel actions, leaving submit and receipt/paystub actions available.\n * Use for a deep link to a specific payroll where editing shouldn't be offered. Defaults to\n * `false`.\n */\n readOnly?: boolean\n}\n\nconst findUnresolvedBlockersWithOptions = (\n blockers: PayrollSubmissionBlockerType[] = [],\n): PayrollSubmissionBlockerType[] => {\n return blockers.filter(\n blocker =>\n blocker.status === 'unresolved' &&\n blocker.unblockOptions &&\n blocker.unblockOptions.length > 0,\n )\n}\n\nconst findWireInRequestUuid = (\n creditBlockers: PayrollCreditBlockerType[] = [],\n): string | undefined => {\n const unresolvedCreditBlocker = creditBlockers.find(blocker => blocker.status === 'unresolved')\n\n if (!unresolvedCreditBlocker?.unblockOptions) {\n return undefined\n }\n\n const wireUnblockOption = unresolvedCreditBlocker.unblockOptions.find(\n (option: PayrollCreditBlockerTypeUnblockOptions) => option.unblockType === 'submit_wire',\n )\n\n return wireUnblockOption?.metadata.wireInRequestUuid\n}\n\n/**\n * Final review screen for a calculated payroll before submission, with submit, cancel,\n * and edit controls. After submission, tracks processing status and surfaces the receipt\n * and per-employee paystub downloads once complete.\n *\n * @remarks\n * An unprocessed payroll referenced by `payrollId` must already be calculated; rendering an\n * unprocessed, uncalculated payroll throws. Processed payrolls render as a summary even without a\n * calculation (for example tax reconciliation, reversal, wage correction, or external payrolls).\n * Unresolved submission blockers (e.g. fast-ACH threshold,\n * wire-in funding) are surfaced inline and the submit action stays disabled until each\n * blocker has a selected unblock option. While the payroll is processing, the component\n * polls until success or failure and emits the corresponding event. Pass `readOnly` to hide\n * the edit and cancel actions while keeping submit available.\n *\n * @events\n * | Event | Description | Data |\n * | ----- | ----------- | ---- |\n * | `runPayroll/edit` | User chose to edit the payroll before submitting | — |\n * | `runPayroll/submitting` | Submit request was sent to the API | — |\n * | `runPayroll/submitted` | Payroll was successfully submitted | Submit payroll response |\n * | `runPayroll/processed` | Payroll finished processing successfully | `{ payPeriod, payrollUuid }` |\n * | `runPayroll/processingFailed` | Payroll processing failed | — |\n * | `runPayroll/cancelled` | Payroll was cancelled | Cancel payroll response |\n * | `runPayroll/notCalculated/backToList` | User chose to return to the payroll list after the payroll was found to be no longer calculated (e.g. cancelled in another session) | — |\n * | `runPayroll/receipt/get` | User requested the payroll receipt | `{ payrollId }` |\n * | `runPayroll/pdfPaystub/viewed` | User opened an employee's paystub PDF | `{ employeeId }` |\n * | `payroll/wire/form/done` | Wire-in details were confirmed via the embedded wire form | Submit wire-in response |\n * | `payroll/printChecks/start` | User opened the print-checks modal from the embedded print-checks banner | — |\n * | `payroll/printChecks/generate/start` | User submitted the print-checks form | — |\n * | `payroll/printChecks/generate/succeeded` | Printable checks finished generating | `{ documentUrl }` |\n * | `payroll/printChecks/generate/failed` | The print-checks request was rejected or generation failed | `{ errorMessage }` |\n * | `payroll/printChecks/retry` | User retried after a failed check generation | — |\n * | `payroll/printChecks/cancel` | User cancelled the print-checks form | — |\n * | `payroll/printChecks/close` | User closed the print-checks failure or summary screen | — |\n *\n * @param props - See {@link PayrollOverviewProps}.\n * @returns The payroll overview surface.\n * @public\n */\nexport function PayrollOverview(props: PayrollOverviewProps) {\n return (\n <BaseComponent {...props}>\n <Root {...props}>{props.children}</Root>\n </BaseComponent>\n )\n}\n\nconst Root = ({\n companyId,\n payrollId,\n dictionary,\n onEvent,\n alerts,\n withReimbursements = true,\n ConfirmWireDetailsComponent = ConfirmWireDetails,\n readOnly = false,\n className,\n}: PayrollOverviewProps) => {\n useComponentDictionary('Payroll.PayrollOverview', dictionary)\n useI18n('Payroll.PayrollOverview')\n const { baseSubmitHandler } = useBase()\n const { t } = useTranslation('Payroll.PayrollOverview')\n const [hasSubmittedInSession, setHasSubmittedInSession] = useState(false)\n const [internalAlerts, setInternalAlerts] = useState(alerts || [])\n const [selectedUnblockOptions, setSelectedUnblockOptions] = useState<Record<string, string>>({})\n const [showWireDetailsConfirmation, setShowWireDetailsConfirmation] = useState(false)\n const { showBoundary } = useErrorBoundary()\n const formatCurrency = useNumberFormatter('currency')\n const dateFormatter = useDateFormatter()\n const { Button, UnorderedList, Text, Heading } = useComponentContext()\n const [status, setStatus] = useState(PayrollOverviewStatus.Viewing)\n const { currentPage, itemsPerPage, getPaginationProps } = usePagination({\n defaultItemsPerPage: 25,\n })\n const gustoEmbedded = useGustoEmbeddedContext()\n\n const payrollRequest = useMemo<GetV1CompaniesCompanyIdPayrollsPayrollIdRequest>(\n () => ({\n companyId,\n payrollId,\n include: [\n 'taxes',\n 'benefits',\n 'deductions',\n 'totals',\n 'payroll_taxes',\n 'payroll_status_meta',\n ],\n page: currentPage,\n per: itemsPerPage,\n sortBy: 'last_name',\n }),\n [companyId, payrollId, currentPage, itemsPerPage],\n )\n\n const {\n data,\n isFetching,\n isError,\n error,\n refetch: refetchPayroll,\n } = usePayrollsGet(payrollRequest, {\n placeholderData: keepPreviousData,\n })\n const payrollData = data?.payrollShow\n const submissionBlockers = findUnresolvedBlockersWithOptions(payrollData?.submissionBlockers)\n const wireInId = findWireInRequestUuid(payrollData?.creditBlockers)\n\n const { data: wireInRequestData } = useWireInRequestsGet(\n {\n wireInRequestUuid: wireInId || '',\n },\n { enabled: !!wireInId },\n )\n const wireInRequest = wireInRequestData?.wireInRequest\n\n // Scoped to the current page's employees so this stays bounded regardless of company size,\n // since `flsaStatus` (compensation type) isn't available on employeeCompensations for\n // employees without an hourlyCompensations line item (e.g. salaried employees).\n const employeeUuids = (payrollData?.employeeCompensations ?? [])\n .map(employeeCompensation => employeeCompensation.employeeUuid)\n .filter((uuid): uuid is string => !!uuid)\n\n const { data: employeesData } = useEmployeesList(\n { companyId, uuids: employeeUuids },\n { enabled: employeeUuids.length > 0 },\n )\n const employeeFlsaStatusByUuid = (employeesData?.showEmployees ?? []).reduce<\n Record<string, string | undefined>\n >((acc, employee) => {\n acc[employee.uuid] = employee.flsaStatus\n return acc\n }, {})\n\n const onEdit = () => {\n onEvent(componentEvents.RUN_PAYROLL_EDIT)\n }\n\n const handleWireEvent = (type: EventType, data?: unknown) => {\n if (type === payrollWireEvents.PAYROLL_WIRE_FORM_DONE) {\n setShowWireDetailsConfirmation(true)\n }\n onEvent(type, data)\n }\n\n const wireInConfirmationRequest = wireInId && (\n <ConfirmWireDetailsComponent\n companyId={companyId}\n wireInId={wireInId}\n onEvent={handleWireEvent}\n />\n )\n\n const printChecksBanner = (\n <PrintChecks companyId={companyId} payrollId={payrollId} onEvent={onEvent} />\n )\n\n useEffect(() => {\n if (wireInRequest?.status === 'pending_review' && !showWireDetailsConfirmation) {\n setShowWireDetailsConfirmation(true)\n }\n }, [wireInRequest?.status, showWireDetailsConfirmation])\n\n const checkDate = payrollData?.checkDate\n useEffect(() => {\n if (checkDate && showWireDetailsConfirmation) {\n const formattedCheckDate = dateFormatter.formatShortWithYear(checkDate)\n\n setInternalAlerts([\n {\n type: 'success',\n title: t('alerts.wireDetailsSubmittedTitle'),\n content: (\n <Text>\n {t('alerts.wireDetailsSubmittedMessage', { checkDate: formattedCheckDate })}\n </Text>\n ),\n onDismiss: () => {\n setShowWireDetailsConfirmation(false)\n },\n },\n ])\n }\n }, [showWireDetailsConfirmation, checkDate, t, dateFormatter, Text])\n\n const emitProcessed = (payroll: PayrollShow | undefined) => {\n onEvent(componentEvents.RUN_PAYROLL_PROCESSED, {\n payPeriod: payroll?.payPeriod,\n payrollUuid: payrollId,\n })\n setInternalAlerts([\n {\n type: 'success',\n title: t('alerts.payrollProcessedTitle'),\n content: t('alerts.payrollProcessedMessage', {\n amount: formatCurrency(Number(payroll?.totals?.companyDebit)),\n date: dateFormatter.formatShortWithYear(\n payroll?.payrollStatusMeta?.expectedDebitTime ?? payroll?.payrollDeadline,\n ),\n }),\n },\n ])\n setShowWireDetailsConfirmation(false)\n setHasSubmittedInSession(false)\n }\n\n const emitProcessingFailed = (payroll: PayrollShow | undefined) => {\n onEvent(componentEvents.RUN_PAYROLL_PROCESSING_FAILED)\n setInternalAlerts([\n {\n type: 'error',\n title: t('alerts.payrollProcessingFailedTitle'),\n content: (\n <Flex flexDirection=\"column\" gap={16}>\n <UnorderedList items={renderErrorList(payroll?.processingRequest?.errors ?? [])} />\n {!readOnly && (\n <Button variant=\"secondary\" onClick={onEdit}>\n {t('alerts.payrollProcessingFailedCtaLabel')}\n </Button>\n )}\n </Flex>\n ),\n },\n ])\n setShowWireDetailsConfirmation(false)\n setHasSubmittedInSession(false)\n }\n\n const { start: startPayrollPoll, isPolling } = useSubmissionPoll({\n refetch: refetchPayroll,\n onProcessed: emitProcessed,\n onProcessingFailed: emitProcessingFailed,\n // Unlike the calculation poll, a second Submit click here is safe even if this fires on a\n // payroll that actually did process successfully — payrollsSubmit only operates on an\n // unprocessed payroll, so the API itself rejects a resubmit rather than double-running it.\n onError: () => {\n emitProcessingFailed(undefined)\n },\n })\n\n // The initial read is a non-suspense query; if its notification never arrives, the component\n // is stuck on `!payrollData` forever with no other render source. This one read forces that\n // render -- it only keeps tracking to completion if it happens to land on `submitting`, not as\n // a durable watcher for a submission started elsewhere.\n useEffect(() => {\n startPayrollPoll({ baseline: null, sawSubmitting: false })\n }, [startPayrollPoll])\n\n const { data: bankAccountData } = useBankAccountsGetSuspense({\n companyId,\n })\n const bankAccount = bankAccountData.companyBankAccounts?.[0]\n\n const { paymentSpeed } = useCompanyPaymentSpeed(companyId)\n\n const { mutateAsync: submitPayroll, isPending } = usePayrollsSubmitMutation()\n\n const { mutateAsync: cancelPayroll } = usePayrollsCancelMutation()\n\n const nonce = useNonce()\n\n const [downloadingEmployeeIds, setDownloadingEmployeeIds] = useState<ReadonlySet<string>>(\n () => new Set(),\n )\n\n if (!payrollData) {\n if (isError) {\n throw new Error(t('alerts.payrollLoadFailed'))\n }\n return <PayrollLoading title={t('dataLoadingTitle')} />\n }\n\n // `keepPreviousData` can leave stale data in place while the query is erroring in the\n // background. A retryable error (network blip, transient 5xx) is fine to ride out on stale\n // data, but a non-retryable one (expired session, schema mismatch) never recovers on its own --\n // continuing to render stale data would hide that from the partner indefinitely.\n if (isError && isNonRetryablePollError(error)) {\n throw new Error(t('alerts.payrollLoadFailed'))\n }\n\n const isProcessed =\n payrollData.processed === true ||\n payrollData.processingRequest?.status === PAYROLL_PROCESSING_STATUS.submit_success\n\n if (status === PayrollOverviewStatus.Viewing && !isProcessed && !payrollData.calculatedAt) {\n return (\n <div className={classNames(styles.notCalculated, className)}>\n <Flex flexDirection=\"column\" alignItems=\"center\" gap={16}>\n <Flex flexDirection=\"column\" alignItems=\"center\" gap={4}>\n <Heading as=\"h2\" styledAs=\"h4\" textAlign=\"center\">\n {t('notCalculatedErrorTitle')}\n </Heading>\n <Text variant=\"supporting\" textAlign=\"center\">\n {t('notCalculatedErrorDescription')}\n </Text>\n </Flex>\n <Button\n variant=\"secondary\"\n onClick={() => {\n onEvent(componentEvents.RUN_PAYROLL_NOT_CALCULATED_BACK_TO_LIST)\n }}\n >\n {t('notCalculatedErrorCta')}\n </Button>\n </Flex>\n </div>\n )\n }\n\n const pagination = getPaginationProps(data.httpMeta.response.headers, isFetching)\n\n // Per-tax totals come from the payroll-level `payrollTaxes` aggregate so they stay\n // correct when `employeeCompensations` is paginated (only a single page is loaded).\n const taxes =\n payrollData.payrollTaxes?.reduce(\n (acc, tax) => {\n if (!tax.name) return acc\n const amount = tax.amount ?? 0\n acc[tax.name] = {\n employee: (acc[tax.name]?.employee ?? 0) + (tax.employer ? 0 : amount),\n employer: (acc[tax.name]?.employer ?? 0) + (tax.employer ? amount : 0),\n }\n return acc\n },\n {} as Record<string, { employee: number; employer: number }>,\n ) || {}\n\n const onCancel = async () => {\n setStatus(PayrollOverviewStatus.Cancelling)\n await baseSubmitHandler(data, async () => {\n try {\n const result = await cancelPayroll({\n request: {\n companyId,\n payrollId,\n },\n })\n setStatus(PayrollOverviewStatus.Cancelled)\n onEvent(componentEvents.RUN_PAYROLL_CANCELLED, result)\n } catch (error) {\n setStatus(PayrollOverviewStatus.Viewing)\n throw error\n }\n })\n }\n const onPayrollReceipt = () => {\n onEvent(componentEvents.RUN_PAYROLL_RECEIPT_GET, { payrollId })\n }\n\n const onPaystubDownload = async (employeeId: string) => {\n const tab = openPdfInNewTab({ loadingMessage: t('downloadLoadingMessage'), nonce })\n setDownloadingEmployeeIds(prev => {\n const next = new Set(prev)\n next.add(employeeId)\n return next\n })\n try {\n const response = await payrollsGetPayStub(gustoEmbedded, { payrollId, employeeId })\n if (!response.value?.responseStream) {\n tab.close()\n throw new Error(t('alerts.paystubPdfError'))\n }\n const pdfBlob = await readableStreamToBlob(response.value.responseStream, 'application/pdf')\n tab.navigate(pdfBlob)\n onEvent(componentEvents.RUN_PAYROLL_PDF_PAYSTUB_VIEWED, { employeeId })\n } catch (err) {\n tab.close()\n showBoundary(err instanceof Error ? err : new Error(String(err)))\n } finally {\n setDownloadingEmployeeIds(prev => {\n if (!prev.has(employeeId)) return prev\n const next = new Set(prev)\n next.delete(employeeId)\n return next\n })\n }\n }\n const onSubmit = async () => {\n await baseSubmitHandler(data, async () => {\n const result = await submitPayroll({\n request: {\n companyId,\n payrollId,\n requestBody: {\n submissionBlockers: Object.entries(selectedUnblockOptions)\n .filter(([blockerType]) =>\n PAYROLL_RESOLVABLE_SUBMISSION_BLOCKER_TYPES.includes(blockerType),\n )\n .map(([blockerType, selectedOption]) => ({\n blockerType,\n selectedOption,\n })),\n },\n },\n })\n onEvent(componentEvents.RUN_PAYROLL_SUBMITTING)\n onEvent(componentEvents.RUN_PAYROLL_SUBMITTED, result)\n startPayrollPoll({\n baseline: {\n processed: payrollData.processed ?? false,\n status: payrollData.processingRequest?.status,\n },\n sawSubmitting: false,\n })\n setHasSubmittedInSession(true)\n })\n }\n\n const deadlineAlert: PayrollFlowAlert | undefined = (() => {\n if (hasSubmittedInSession || isPolling || isProcessed) return undefined\n\n if (payrollData.checkDate && payrollData.payrollDeadline) {\n return {\n type: 'info' as const,\n title: t('alerts.directDepositDeadline', {\n payDate: dateFormatter.formatShortWithWeekday(payrollData.checkDate),\n ...dateFormatter.formatWithTime(payrollData.payrollDeadline),\n }),\n content: t('alerts.directDepositDeadlineText'),\n }\n }\n return undefined\n })()\n\n const combinedAlerts = [...internalAlerts, ...(deadlineAlert ? [deadlineAlert] : [])]\n\n return (\n <PayrollOverviewPresentation\n className={className}\n onEdit={onEdit}\n onSubmit={onSubmit}\n onCancel={onCancel}\n onPayrollReceipt={onPayrollReceipt}\n onPaystubDownload={onPaystubDownload}\n status={isPending || hasSubmittedInSession ? PayrollOverviewStatus.Submitting : status}\n isProcessed={isProcessed}\n canCancel={canCancelPayroll(payrollData) && !readOnly}\n canEdit={!readOnly}\n payrollData={payrollData}\n employeeFlsaStatusByUuid={employeeFlsaStatusByUuid}\n bankAccount={bankAccount}\n taxes={taxes}\n alerts={combinedAlerts}\n submissionBlockers={submissionBlockers}\n selectedUnblockOptions={selectedUnblockOptions}\n onUnblockOptionChange={(blockerType, value) => {\n setSelectedUnblockOptions(prev => ({ ...prev, [blockerType]: value }))\n }}\n wireInConfirmationRequest={wireInConfirmationRequest}\n printChecksBanner={printChecksBanner}\n withReimbursements={withReimbursements}\n paymentSpeed={paymentSpeed}\n pagination={pagination}\n downloadingEmployeeIds={downloadingEmployeeIds}\n />\n )\n}\n"],"names":["findUnresolvedBlockersWithOptions","blockers","blocker","findWireInRequestUuid","creditBlockers","unresolvedCreditBlocker","option","PayrollOverview","props","jsx","BaseComponent","Root","companyId","payrollId","dictionary","onEvent","alerts","withReimbursements","ConfirmWireDetailsComponent","ConfirmWireDetails","readOnly","className","useComponentDictionary","useI18n","baseSubmitHandler","useBase","t","useTranslation","hasSubmittedInSession","setHasSubmittedInSession","useState","internalAlerts","setInternalAlerts","selectedUnblockOptions","setSelectedUnblockOptions","showWireDetailsConfirmation","setShowWireDetailsConfirmation","showBoundary","useErrorBoundary","formatCurrency","useNumberFormatter","dateFormatter","useDateFormatter","Button","UnorderedList","Text","Heading","useComponentContext","status","setStatus","PayrollOverviewStatus","currentPage","itemsPerPage","getPaginationProps","usePagination","gustoEmbedded","useGustoEmbeddedContext","payrollRequest","useMemo","data","isFetching","isError","error","refetchPayroll","usePayrollsGet","keepPreviousData","payrollData","submissionBlockers","wireInId","wireInRequestData","useWireInRequestsGet","wireInRequest","employeeUuids","employeeCompensation","uuid","employeesData","useEmployeesList","employeeFlsaStatusByUuid","acc","employee","onEdit","componentEvents","wireInConfirmationRequest","type","payrollWireEvents","printChecksBanner","PrintChecks","useEffect","checkDate","formattedCheckDate","emitProcessed","payroll","emitProcessingFailed","jsxs","Flex","renderErrorList","startPayrollPoll","isPolling","useSubmissionPoll","bankAccountData","useBankAccountsGetSuspense","bankAccount","paymentSpeed","useCompanyPaymentSpeed","submitPayroll","isPending","usePayrollsSubmitMutation","cancelPayroll","usePayrollsCancelMutation","nonce","useNonce","downloadingEmployeeIds","setDownloadingEmployeeIds","PayrollLoading","isNonRetryablePollError","isProcessed","PAYROLL_PROCESSING_STATUS","classNames","styles","pagination","taxes","tax","amount","onCancel","result","onPayrollReceipt","onPaystubDownload","employeeId","tab","openPdfInNewTab","prev","next","response","payrollsGetPayStub","pdfBlob","readableStreamToBlob","err","onSubmit","blockerType","PAYROLL_RESOLVABLE_SUBMISSION_BLOCKER_TYPES","selectedOption","deadlineAlert","combinedAlerts","PayrollOverviewPresentation","canCancelPayroll","value"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PayrollOverview.module.scss.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { jsx as o, jsxs as p } from "react/jsx-runtime";
|
|
2
|
-
import { useForm as
|
|
2
|
+
import { useForm as _, useWatch as T, FormProvider as D } from "react-hook-form";
|
|
3
3
|
import { zodResolver as A } from "@hookform/resolvers/zod";
|
|
4
4
|
import { useTranslation as h } from "react-i18next";
|
|
5
5
|
import { z as d } from "zod";
|
|
@@ -31,17 +31,17 @@ const j = d.object({
|
|
|
31
31
|
...r.printingFormat === n.Bottom && r.startingCheckNumber !== void 0 ? { startingCheckNumber: r.startingCheckNumber } : {}
|
|
32
32
|
}), W = (r) => {
|
|
33
33
|
const e = document.createElement("a");
|
|
34
|
-
e.href = r, e.rel = "noopener noreferrer", document.body.appendChild(e), e.click(), document.body.removeChild(e);
|
|
34
|
+
e.href = r, e.target = "_blank", e.rel = "noopener noreferrer", document.body.appendChild(e), e.click(), document.body.removeChild(e);
|
|
35
35
|
};
|
|
36
36
|
function J(r) {
|
|
37
37
|
return /* @__PURE__ */ o(G, { ...r, children: /* @__PURE__ */ o(Q, { ...r, children: r.children }) });
|
|
38
38
|
}
|
|
39
39
|
const Q = ({ dictionary: r, payrollId: e, isGenerating: i, className: s }) => {
|
|
40
40
|
M("Payroll.PrintChecksForm", r), g("Payroll.PrintChecksForm");
|
|
41
|
-
const { t } = h("Payroll.PrintChecksForm"), { Heading: f } = b(), { onEvent: c, baseSubmitHandler: E } = H(), l =
|
|
41
|
+
const { t } = h("Payroll.PrintChecksForm"), { Heading: f } = b(), { onEvent: c, baseSubmitHandler: E } = H(), l = _({
|
|
42
42
|
resolver: A(j),
|
|
43
43
|
defaultValues: { printingFormat: n.Top, startingCheckNumber: 0 }
|
|
44
|
-
}), F =
|
|
44
|
+
}), F = T({
|
|
45
45
|
name: "printingFormat",
|
|
46
46
|
control: l.control
|
|
47
47
|
}), { mutateAsync: N } = I(), { start: y } = L({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PrintChecksForm.js","sources":["../../../../../src/components/Payroll/PrintChecks/PrintChecksForm/PrintChecksForm.tsx"],"sourcesContent":["import { FormProvider, useForm, useWatch } from 'react-hook-form'\nimport { zodResolver } from '@hookform/resolvers/zod'\nimport { useTranslation } from 'react-i18next'\nimport { z } from 'zod'\nimport { usePayrollsGeneratePrintableChecksMutation } from '@gusto/embedded-api/react-query/payrollsGeneratePrintableChecks'\nimport {\n PrintingFormat,\n type PrintablePayrollChecksBody,\n} from '@gusto/embedded-api/models/components/printablepayrollchecksbody'\nimport { useGenerationPoll } from './useGenerationPoll'\nimport { BaseComponent, useBase, type BaseComponentInterface } from '@/components/Base'\nimport type { OnEventType } from '@/components/Base/useBase'\nimport { useComponentContext } from '@/contexts/ComponentAdapter/useComponentContext'\nimport { useComponentDictionary, useI18n } from '@/i18n'\nimport { useFlow, type FlowContextInterface } from '@/components/Flow/useFlow'\nimport { ActionsLayout, Flex, NumberInputField, RadioGroupField } from '@/components/Common'\nimport { Form } from '@/components/Common/Form'\nimport { printChecksEvents, type EventType } from '@/shared/constants'\nimport type { RadioGroupOption } from '@/index'\n\ninterface PrintChecksFormProps extends BaseComponentInterface<'Payroll.PrintChecksForm'> {\n payrollId: string\n /** Whether a generate-and-poll cycle is in flight; disables the fields while true. */\n isGenerating?: boolean\n}\n\n// The Footer is rendered by the top-level orchestrator as a sibling of this component (not a\n// child), so it can only read shared state — like whether a generate-and-poll cycle is in\n// flight — via the machine's FlowContext rather than as a prop. This narrow interface describes\n// only the field Footer needs, rather than depending on the orchestrator's full context type.\ninterface PrintChecksFormFlowContext extends FlowContextInterface {\n isGenerating?: boolean\n}\n\nconst PrintChecksFormSchema = z.object({\n printingFormat: z.nativeEnum(PrintingFormat),\n startingCheckNumber: z\n .number({ message: 'invalidStartingCheckNumber' })\n .int({ message: 'invalidStartingCheckNumber' })\n .nonnegative({ message: 'invalidStartingCheckNumber' })\n .lt(10_000_000_000, { message: 'invalidStartingCheckNumber' })\n .optional(),\n})\n\ntype PrintChecksFormValues = z.infer<typeof PrintChecksFormSchema>\n\nconst PRINT_CHECKS_FORM_ID = 'gusto-sdk-print-checks-form'\n\nconst isErrorList = (val: unknown): val is { message?: string }[] =>\n Array.isArray(val) && val.every(entry => typeof entry === 'object' && entry !== null)\n\nconst extractErrorMessage = (err: unknown): string | null => {\n if (err && typeof err === 'object' && 'errors' in err && isErrorList(err.errors)) {\n const [firstError] = err.errors\n if (firstError?.message) return firstError.message\n }\n return err instanceof Error ? err.message : null\n}\n\nconst buildRequestBody = (data: PrintChecksFormValues): PrintablePayrollChecksBody => ({\n printingFormat: data.printingFormat,\n ...(data.printingFormat === PrintingFormat.Bottom && data.startingCheckNumber !== undefined\n ? { startingCheckNumber: data.startingCheckNumber }\n : {}),\n})\n\n// Navigates directly to `url` via a synthetic anchor click rather than `fetch`-ing it into a blob:\n// the generated-document URL is a signed, cross-origin S3 URL with `response-content-disposition:\n// attachment` baked into its query string, so a direct browser-level request downloads it via that\n// response header — but a `fetch()` from JS is subject to CORS, which the bucket doesn't allow, and\n// fails outright. A plain navigation isn't subject to CORS and never opens a new tab or navigates\n// the host page, since the browser intercepts the download instead of rendering a response.\nconst downloadGeneratedChecks = (url: string) => {\n const link = document.createElement('a')\n link.href = url\n link.rel = 'noopener noreferrer'\n document.body.appendChild(link)\n link.click()\n document.body.removeChild(link)\n}\n\n/** @internal */\nexport function PrintChecksForm(props: PrintChecksFormProps) {\n return (\n <BaseComponent {...props}>\n <Root {...props}>{props.children}</Root>\n </BaseComponent>\n )\n}\n\nconst Root = ({ dictionary, payrollId, isGenerating, className }: PrintChecksFormProps) => {\n useComponentDictionary('Payroll.PrintChecksForm', dictionary)\n useI18n('Payroll.PrintChecksForm')\n const { t } = useTranslation('Payroll.PrintChecksForm')\n const { Heading } = useComponentContext()\n const { onEvent, baseSubmitHandler } = useBase()\n\n const formMethods = useForm<PrintChecksFormValues>({\n resolver: zodResolver(PrintChecksFormSchema),\n defaultValues: { printingFormat: PrintingFormat.Top, startingCheckNumber: 0 },\n })\n\n const printingFormat = useWatch<PrintChecksFormValues, 'printingFormat'>({\n name: 'printingFormat',\n control: formMethods.control,\n })\n\n const { mutateAsync } = usePayrollsGeneratePrintableChecksMutation()\n\n const { start: startGenerationPoll } = useGenerationPoll({\n onSucceeded: url => {\n onEvent(printChecksEvents.PRINT_CHECKS_GENERATE_SUCCEEDED, { documentUrl: url })\n if (url) {\n downloadGeneratedChecks(url)\n }\n },\n onFailed: () => {\n onEvent(printChecksEvents.PRINT_CHECKS_GENERATE_FAILED, { errorMessage: null })\n },\n })\n\n const onSubmit = async (formData: PrintChecksFormValues) => {\n onEvent(printChecksEvents.PRINT_CHECKS_GENERATE_START)\n\n await baseSubmitHandler(formData, async submittedData => {\n try {\n const result = await mutateAsync({\n request: {\n payrollUuid: payrollId,\n printablePayrollChecksBody: buildRequestBody(submittedData),\n },\n })\n\n const nextRequestUuid = result.payrollCheck?.requestUuid\n if (!nextRequestUuid) {\n throw new Error('Missing requestUuid in generate-printable-checks response')\n }\n\n startGenerationPoll(nextRequestUuid)\n } catch (err) {\n onEvent(printChecksEvents.PRINT_CHECKS_GENERATE_FAILED, {\n errorMessage: extractErrorMessage(err),\n })\n throw err\n }\n })\n }\n\n const startingCheckNumberErrorCode = formMethods.formState.errors.startingCheckNumber?.message\n const startingCheckNumberErrorMessage = startingCheckNumberErrorCode\n ? t('validations.startingCheckNumber')\n : undefined\n\n const printingFormatOptions: RadioGroupOption[] = [\n {\n value: PrintingFormat.Top,\n label: t('customStockLabel'),\n description: t('customStockDescription'),\n },\n {\n value: PrintingFormat.Bottom,\n label: t('blankStockLabel'),\n description: t('blankStockDescription'),\n },\n ]\n\n return (\n <FormProvider {...formMethods}>\n <Form\n id={PRINT_CHECKS_FORM_ID}\n onSubmit={formMethods.handleSubmit(onSubmit)}\n className={className}\n >\n <Flex flexDirection=\"column\" gap={20}>\n <Heading as=\"h2\">{t('modalTitle')}</Heading>\n <RadioGroupField\n name=\"printingFormat\"\n label={t('modalTitle')}\n shouldVisuallyHideLabel\n options={printingFormatOptions}\n isRequired\n isDisabled={isGenerating}\n />\n {printingFormat === PrintingFormat.Bottom && (\n <NumberInputField\n name=\"startingCheckNumber\"\n label={t('startingCheckNumberLabel')}\n description={t('startingCheckNumberDescription')}\n errorMessage={startingCheckNumberErrorMessage}\n isDisabled={isGenerating}\n min={0}\n />\n )}\n </Flex>\n </Form>\n </FormProvider>\n )\n}\n\nconst Footer = ({ onEvent }: { onEvent: OnEventType<EventType, unknown> }) => {\n useI18n('Payroll.PrintChecksForm')\n const { t } = useTranslation('Payroll.PrintChecksForm')\n const { Button } = useComponentContext()\n const { isGenerating } = useFlow<PrintChecksFormFlowContext>()\n\n return (\n <ActionsLayout>\n <Button\n variant=\"secondary\"\n onClick={() => {\n onEvent(printChecksEvents.PRINT_CHECKS_CANCEL)\n }}\n isDisabled={isGenerating}\n >\n {t('cancelCta')}\n </Button>\n <Button variant=\"primary\" type=\"submit\" form={PRINT_CHECKS_FORM_ID} isDisabled={isGenerating}>\n {isGenerating ? t('submitCtaLoading') : t('submitCta')}\n </Button>\n </ActionsLayout>\n )\n}\nPrintChecksForm.Footer = Footer\n"],"names":["PrintChecksFormSchema","z","PrintingFormat","PRINT_CHECKS_FORM_ID","isErrorList","val","entry","extractErrorMessage","err","firstError","buildRequestBody","data","downloadGeneratedChecks","url","link","PrintChecksForm","props","jsx","BaseComponent","Root","dictionary","payrollId","isGenerating","className","useComponentDictionary","useI18n","useTranslation","Heading","useComponentContext","onEvent","baseSubmitHandler","useBase","formMethods","useForm","zodResolver","printingFormat","useWatch","mutateAsync","usePayrollsGeneratePrintableChecksMutation","startGenerationPoll","useGenerationPoll","printChecksEvents","onSubmit","formData","submittedData","nextRequestUuid","startingCheckNumberErrorMessage","printingFormatOptions","FormProvider","Form","jsxs","Flex","RadioGroupField","NumberInputField","Footer","t","Button","useFlow","ActionsLayout"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"PrintChecksForm.js","sources":["../../../../../src/components/Payroll/PrintChecks/PrintChecksForm/PrintChecksForm.tsx"],"sourcesContent":["import { FormProvider, useForm, useWatch } from 'react-hook-form'\nimport { zodResolver } from '@hookform/resolvers/zod'\nimport { useTranslation } from 'react-i18next'\nimport { z } from 'zod'\nimport { usePayrollsGeneratePrintableChecksMutation } from '@gusto/embedded-api/react-query/payrollsGeneratePrintableChecks'\nimport {\n PrintingFormat,\n type PrintablePayrollChecksBody,\n} from '@gusto/embedded-api/models/components/printablepayrollchecksbody'\nimport { useGenerationPoll } from './useGenerationPoll'\nimport { BaseComponent, useBase, type BaseComponentInterface } from '@/components/Base'\nimport type { OnEventType } from '@/components/Base/useBase'\nimport { useComponentContext } from '@/contexts/ComponentAdapter/useComponentContext'\nimport { useComponentDictionary, useI18n } from '@/i18n'\nimport { useFlow, type FlowContextInterface } from '@/components/Flow/useFlow'\nimport { ActionsLayout, Flex, NumberInputField, RadioGroupField } from '@/components/Common'\nimport { Form } from '@/components/Common/Form'\nimport { printChecksEvents, type EventType } from '@/shared/constants'\nimport type { RadioGroupOption } from '@/index'\n\ninterface PrintChecksFormProps extends BaseComponentInterface<'Payroll.PrintChecksForm'> {\n payrollId: string\n /** Whether a generate-and-poll cycle is in flight; disables the fields while true. */\n isGenerating?: boolean\n}\n\n// The Footer is rendered by the top-level orchestrator as a sibling of this component (not a\n// child), so it can only read shared state — like whether a generate-and-poll cycle is in\n// flight — via the machine's FlowContext rather than as a prop. This narrow interface describes\n// only the field Footer needs, rather than depending on the orchestrator's full context type.\ninterface PrintChecksFormFlowContext extends FlowContextInterface {\n isGenerating?: boolean\n}\n\nconst PrintChecksFormSchema = z.object({\n printingFormat: z.nativeEnum(PrintingFormat),\n startingCheckNumber: z\n .number({ message: 'invalidStartingCheckNumber' })\n .int({ message: 'invalidStartingCheckNumber' })\n .nonnegative({ message: 'invalidStartingCheckNumber' })\n .lt(10_000_000_000, { message: 'invalidStartingCheckNumber' })\n .optional(),\n})\n\ntype PrintChecksFormValues = z.infer<typeof PrintChecksFormSchema>\n\nconst PRINT_CHECKS_FORM_ID = 'gusto-sdk-print-checks-form'\n\nconst isErrorList = (val: unknown): val is { message?: string }[] =>\n Array.isArray(val) && val.every(entry => typeof entry === 'object' && entry !== null)\n\nconst extractErrorMessage = (err: unknown): string | null => {\n if (err && typeof err === 'object' && 'errors' in err && isErrorList(err.errors)) {\n const [firstError] = err.errors\n if (firstError?.message) return firstError.message\n }\n return err instanceof Error ? err.message : null\n}\n\nconst buildRequestBody = (data: PrintChecksFormValues): PrintablePayrollChecksBody => ({\n printingFormat: data.printingFormat,\n ...(data.printingFormat === PrintingFormat.Bottom && data.startingCheckNumber !== undefined\n ? { startingCheckNumber: data.startingCheckNumber }\n : {}),\n})\n\nconst downloadGeneratedChecks = (url: string) => {\n const link = document.createElement('a')\n link.href = url\n link.target = '_blank'\n link.rel = 'noopener noreferrer'\n document.body.appendChild(link)\n link.click()\n document.body.removeChild(link)\n}\n\n/** @internal */\nexport function PrintChecksForm(props: PrintChecksFormProps) {\n return (\n <BaseComponent {...props}>\n <Root {...props}>{props.children}</Root>\n </BaseComponent>\n )\n}\n\nconst Root = ({ dictionary, payrollId, isGenerating, className }: PrintChecksFormProps) => {\n useComponentDictionary('Payroll.PrintChecksForm', dictionary)\n useI18n('Payroll.PrintChecksForm')\n const { t } = useTranslation('Payroll.PrintChecksForm')\n const { Heading } = useComponentContext()\n const { onEvent, baseSubmitHandler } = useBase()\n\n const formMethods = useForm<PrintChecksFormValues>({\n resolver: zodResolver(PrintChecksFormSchema),\n defaultValues: { printingFormat: PrintingFormat.Top, startingCheckNumber: 0 },\n })\n\n const printingFormat = useWatch<PrintChecksFormValues, 'printingFormat'>({\n name: 'printingFormat',\n control: formMethods.control,\n })\n\n const { mutateAsync } = usePayrollsGeneratePrintableChecksMutation()\n\n const { start: startGenerationPoll } = useGenerationPoll({\n onSucceeded: url => {\n onEvent(printChecksEvents.PRINT_CHECKS_GENERATE_SUCCEEDED, { documentUrl: url })\n if (url) {\n downloadGeneratedChecks(url)\n }\n },\n onFailed: () => {\n onEvent(printChecksEvents.PRINT_CHECKS_GENERATE_FAILED, { errorMessage: null })\n },\n })\n\n const onSubmit = async (formData: PrintChecksFormValues) => {\n onEvent(printChecksEvents.PRINT_CHECKS_GENERATE_START)\n\n await baseSubmitHandler(formData, async submittedData => {\n try {\n const result = await mutateAsync({\n request: {\n payrollUuid: payrollId,\n printablePayrollChecksBody: buildRequestBody(submittedData),\n },\n })\n\n const nextRequestUuid = result.payrollCheck?.requestUuid\n if (!nextRequestUuid) {\n throw new Error('Missing requestUuid in generate-printable-checks response')\n }\n\n startGenerationPoll(nextRequestUuid)\n } catch (err) {\n onEvent(printChecksEvents.PRINT_CHECKS_GENERATE_FAILED, {\n errorMessage: extractErrorMessage(err),\n })\n throw err\n }\n })\n }\n\n const startingCheckNumberErrorCode = formMethods.formState.errors.startingCheckNumber?.message\n const startingCheckNumberErrorMessage = startingCheckNumberErrorCode\n ? t('validations.startingCheckNumber')\n : undefined\n\n const printingFormatOptions: RadioGroupOption[] = [\n {\n value: PrintingFormat.Top,\n label: t('customStockLabel'),\n description: t('customStockDescription'),\n },\n {\n value: PrintingFormat.Bottom,\n label: t('blankStockLabel'),\n description: t('blankStockDescription'),\n },\n ]\n\n return (\n <FormProvider {...formMethods}>\n <Form\n id={PRINT_CHECKS_FORM_ID}\n onSubmit={formMethods.handleSubmit(onSubmit)}\n className={className}\n >\n <Flex flexDirection=\"column\" gap={20}>\n <Heading as=\"h2\">{t('modalTitle')}</Heading>\n <RadioGroupField\n name=\"printingFormat\"\n label={t('modalTitle')}\n shouldVisuallyHideLabel\n options={printingFormatOptions}\n isRequired\n isDisabled={isGenerating}\n />\n {printingFormat === PrintingFormat.Bottom && (\n <NumberInputField\n name=\"startingCheckNumber\"\n label={t('startingCheckNumberLabel')}\n description={t('startingCheckNumberDescription')}\n errorMessage={startingCheckNumberErrorMessage}\n isDisabled={isGenerating}\n min={0}\n />\n )}\n </Flex>\n </Form>\n </FormProvider>\n )\n}\n\nconst Footer = ({ onEvent }: { onEvent: OnEventType<EventType, unknown> }) => {\n useI18n('Payroll.PrintChecksForm')\n const { t } = useTranslation('Payroll.PrintChecksForm')\n const { Button } = useComponentContext()\n const { isGenerating } = useFlow<PrintChecksFormFlowContext>()\n\n return (\n <ActionsLayout>\n <Button\n variant=\"secondary\"\n onClick={() => {\n onEvent(printChecksEvents.PRINT_CHECKS_CANCEL)\n }}\n isDisabled={isGenerating}\n >\n {t('cancelCta')}\n </Button>\n <Button variant=\"primary\" type=\"submit\" form={PRINT_CHECKS_FORM_ID} isDisabled={isGenerating}>\n {isGenerating ? t('submitCtaLoading') : t('submitCta')}\n </Button>\n </ActionsLayout>\n )\n}\nPrintChecksForm.Footer = Footer\n"],"names":["PrintChecksFormSchema","z","PrintingFormat","PRINT_CHECKS_FORM_ID","isErrorList","val","entry","extractErrorMessage","err","firstError","buildRequestBody","data","downloadGeneratedChecks","url","link","PrintChecksForm","props","jsx","BaseComponent","Root","dictionary","payrollId","isGenerating","className","useComponentDictionary","useI18n","useTranslation","Heading","useComponentContext","onEvent","baseSubmitHandler","useBase","formMethods","useForm","zodResolver","printingFormat","useWatch","mutateAsync","usePayrollsGeneratePrintableChecksMutation","startGenerationPoll","useGenerationPoll","printChecksEvents","onSubmit","formData","submittedData","nextRequestUuid","startingCheckNumberErrorMessage","printingFormatOptions","FormProvider","Form","jsxs","Flex","RadioGroupField","NumberInputField","Footer","t","Button","useFlow","ActionsLayout"],"mappings":"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"}
|
|
@@ -1,70 +1,79 @@
|
|
|
1
|
-
import { useRef as
|
|
2
|
-
import { buildGeneratedDocumentsGetQuery as
|
|
3
|
-
import { useGustoEmbeddedContext as
|
|
4
|
-
import { useQueryClient as
|
|
5
|
-
import { DocumentType as
|
|
1
|
+
import { useRef as f, useCallback as p } from "react";
|
|
2
|
+
import { buildGeneratedDocumentsGetQuery as y } from "@gusto/embedded-api/react-query/generatedDocumentsGet";
|
|
3
|
+
import { useGustoEmbeddedContext as h } from "@gusto/embedded-api/react-query/_context";
|
|
4
|
+
import { useQueryClient as P } from "@tanstack/react-query";
|
|
5
|
+
import { DocumentType as C } from "@gusto/embedded-api/models/operations/getv1generateddocumentsdocumenttyperequestuuid";
|
|
6
6
|
import { GeneratedDocumentStatus as o } from "@gusto/embedded-api/models/components/generateddocument";
|
|
7
|
-
import { usePollingTask as
|
|
8
|
-
import { useObservability as
|
|
9
|
-
import { normalizeToSDKError as
|
|
10
|
-
const
|
|
11
|
-
|
|
12
|
-
return
|
|
13
|
-
|
|
14
|
-
|
|
7
|
+
import { usePollingTask as k, isNonRetryablePollError as D } from "../../../../hooks/usePollingTask/usePollingTask.js";
|
|
8
|
+
import { useObservability as b } from "../../../../contexts/ObservabilityProvider/useObservability.js";
|
|
9
|
+
import { normalizeToSDKError as g } from "../../../../types/sdkError.js";
|
|
10
|
+
const E = "Payroll.PrintChecksForm", v = (t) => {
|
|
11
|
+
try {
|
|
12
|
+
return new URL(t).protocol === "https:";
|
|
13
|
+
} catch {
|
|
14
|
+
return !1;
|
|
15
|
+
}
|
|
16
|
+
}, i = (t) => {
|
|
17
|
+
const e = t?.generatedDocument?.documentUrls?.[0] ?? null;
|
|
18
|
+
return e !== null && !v(e) ? { type: "failed" } : { type: "succeeded", url: e };
|
|
19
|
+
}, O = (t) => t?.generatedDocument?.status === o.Succeeded ? i(t) : { type: "failed" }, T = (t) => {
|
|
20
|
+
if (!t.success)
|
|
21
|
+
return D(t.error) ? { status: "error", error: t.error } : { status: "polling" };
|
|
22
|
+
const e = t.data.generatedDocument?.status;
|
|
23
|
+
return e === o.Succeeded ? {
|
|
15
24
|
status: "done",
|
|
16
|
-
value:
|
|
17
|
-
} :
|
|
25
|
+
value: i(t.data)
|
|
26
|
+
} : e === o.Failed ? { status: "done", value: { type: "failed" } } : { status: "polling" };
|
|
18
27
|
};
|
|
19
|
-
function
|
|
20
|
-
onSucceeded:
|
|
21
|
-
onFailed:
|
|
28
|
+
function z({
|
|
29
|
+
onSucceeded: t,
|
|
30
|
+
onFailed: e
|
|
22
31
|
}) {
|
|
23
|
-
const l =
|
|
32
|
+
const l = h(), c = P(), s = f(null), { observability: d } = b(), m = (r) => {
|
|
24
33
|
const n = s.current;
|
|
25
34
|
if (!n)
|
|
26
35
|
throw new Error("usePollingTask started without a print-checks request in flight");
|
|
27
|
-
return
|
|
28
|
-
...
|
|
36
|
+
return c.fetchQuery({
|
|
37
|
+
...y(
|
|
29
38
|
l,
|
|
30
|
-
{ documentType:
|
|
31
|
-
{ signal:
|
|
39
|
+
{ documentType: C.PrintablePayrollChecks, requestUuid: n },
|
|
40
|
+
{ signal: r }
|
|
32
41
|
),
|
|
33
42
|
staleTime: 0
|
|
34
43
|
});
|
|
35
|
-
}, u = (
|
|
36
|
-
if (
|
|
37
|
-
|
|
44
|
+
}, u = (r) => {
|
|
45
|
+
if (r.type === "failed") {
|
|
46
|
+
e();
|
|
38
47
|
return;
|
|
39
48
|
}
|
|
40
|
-
|
|
41
|
-
}, { start: a } =
|
|
42
|
-
fetch:
|
|
43
|
-
evaluate:
|
|
49
|
+
t(r.url);
|
|
50
|
+
}, { start: a } = k({
|
|
51
|
+
fetch: m,
|
|
52
|
+
evaluate: T,
|
|
44
53
|
onDone: u,
|
|
45
54
|
// Unlike the payroll polls, print-checks generation has no equivalent to prepare/resubmit to
|
|
46
55
|
// guard against, so a non-retryable read error can safely reuse the same failure path as a
|
|
47
56
|
// real generation failure — same screen, same retry CTA.
|
|
48
|
-
onError: (
|
|
49
|
-
const n =
|
|
50
|
-
|
|
57
|
+
onError: (r) => {
|
|
58
|
+
const n = g(r);
|
|
59
|
+
d?.onError?.({
|
|
51
60
|
...n,
|
|
52
61
|
timestamp: Date.now(),
|
|
53
|
-
componentName:
|
|
54
|
-
}),
|
|
62
|
+
componentName: E
|
|
63
|
+
}), e();
|
|
55
64
|
},
|
|
56
|
-
onDeadline: (
|
|
57
|
-
u(
|
|
65
|
+
onDeadline: (r) => {
|
|
66
|
+
u(O(r));
|
|
58
67
|
}
|
|
59
68
|
});
|
|
60
|
-
return { start:
|
|
61
|
-
(
|
|
62
|
-
s.current =
|
|
69
|
+
return { start: p(
|
|
70
|
+
(r) => {
|
|
71
|
+
s.current = r, a();
|
|
63
72
|
},
|
|
64
73
|
[a]
|
|
65
74
|
) };
|
|
66
75
|
}
|
|
67
76
|
export {
|
|
68
|
-
|
|
77
|
+
z as useGenerationPoll
|
|
69
78
|
};
|
|
70
79
|
//# sourceMappingURL=useGenerationPoll.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useGenerationPoll.js","sources":["../../../../../src/components/Payroll/PrintChecks/PrintChecksForm/useGenerationPoll.ts"],"sourcesContent":["import { useCallback, useRef } from 'react'\nimport {\n buildGeneratedDocumentsGetQuery,\n type GeneratedDocumentsGetQueryData,\n} from '@gusto/embedded-api/react-query/generatedDocumentsGet'\nimport { useGustoEmbeddedContext } from '@gusto/embedded-api/react-query/_context'\nimport { useQueryClient } from '@tanstack/react-query'\nimport { DocumentType } from '@gusto/embedded-api/models/operations/getv1generateddocumentsdocumenttyperequestuuid'\nimport { GeneratedDocumentStatus } from '@gusto/embedded-api/models/components/generateddocument'\nimport {\n usePollingTask,\n isNonRetryablePollError,\n type PollReadOutcome,\n type PollTickResult,\n} from '@/hooks/usePollingTask/usePollingTask'\nimport { useObservability } from '@/contexts/ObservabilityProvider/useObservability'\nimport { normalizeToSDKError } from '@/types/sdkError'\n\nconst COMPONENT_NAME = 'Payroll.PrintChecksForm'\n\ntype PrintChecksOutcome = { type: 'succeeded'; url: string | null } | { type: 'failed' }\n\n// Verify against the last-known data before reporting failure: a document that already\n// finished generating must never be reported as a failure just because the deadline hit first.\nconst verifiedPrintChecksOutcome = (\n lastData: GeneratedDocumentsGetQueryData | null,\n): PrintChecksOutcome => {\n const status = lastData?.generatedDocument?.status\n if (status === GeneratedDocumentStatus.Succeeded) {\n return
|
|
1
|
+
{"version":3,"file":"useGenerationPoll.js","sources":["../../../../../src/components/Payroll/PrintChecks/PrintChecksForm/useGenerationPoll.ts"],"sourcesContent":["import { useCallback, useRef } from 'react'\nimport {\n buildGeneratedDocumentsGetQuery,\n type GeneratedDocumentsGetQueryData,\n} from '@gusto/embedded-api/react-query/generatedDocumentsGet'\nimport { useGustoEmbeddedContext } from '@gusto/embedded-api/react-query/_context'\nimport { useQueryClient } from '@tanstack/react-query'\nimport { DocumentType } from '@gusto/embedded-api/models/operations/getv1generateddocumentsdocumenttyperequestuuid'\nimport { GeneratedDocumentStatus } from '@gusto/embedded-api/models/components/generateddocument'\nimport {\n usePollingTask,\n isNonRetryablePollError,\n type PollReadOutcome,\n type PollTickResult,\n} from '@/hooks/usePollingTask/usePollingTask'\nimport { useObservability } from '@/contexts/ObservabilityProvider/useObservability'\nimport { normalizeToSDKError } from '@/types/sdkError'\n\nconst COMPONENT_NAME = 'Payroll.PrintChecksForm'\n\nconst isValidHttpsUrl = (value: string): boolean => {\n try {\n return new URL(value).protocol === 'https:'\n } catch {\n return false\n }\n}\n\ntype PrintChecksOutcome = { type: 'succeeded'; url: string | null } | { type: 'failed' }\n\nconst toPrintChecksOutcome = (data: GeneratedDocumentsGetQueryData | null): PrintChecksOutcome => {\n const url = data?.generatedDocument?.documentUrls?.[0] ?? null\n return url !== null && !isValidHttpsUrl(url) ? { type: 'failed' } : { type: 'succeeded', url }\n}\n\n// Verify against the last-known data before reporting failure: a document that already\n// finished generating must never be reported as a failure just because the deadline hit first.\nconst verifiedPrintChecksOutcome = (\n lastData: GeneratedDocumentsGetQueryData | null,\n): PrintChecksOutcome => {\n const status = lastData?.generatedDocument?.status\n if (status === GeneratedDocumentStatus.Succeeded) {\n return toPrintChecksOutcome(lastData)\n }\n return { type: 'failed' }\n}\n\nconst evaluatePrintChecksOutcome = (\n outcome: PollReadOutcome<GeneratedDocumentsGetQueryData>,\n): PollTickResult<PrintChecksOutcome> => {\n if (!outcome.success) {\n return isNonRetryablePollError(outcome.error)\n ? { status: 'error', error: outcome.error }\n : { status: 'polling' }\n }\n\n const status = outcome.data.generatedDocument?.status\n if (status === GeneratedDocumentStatus.Succeeded) {\n return {\n status: 'done',\n value: toPrintChecksOutcome(outcome.data),\n }\n }\n if (status === GeneratedDocumentStatus.Failed) {\n return { status: 'done', value: { type: 'failed' } }\n }\n return { status: 'polling' }\n}\n\n/** @internal */\nexport interface UseGenerationPollOptions {\n onSucceeded: (url: string | null) => void\n onFailed: () => void\n}\n\n/** @internal */\nexport interface GenerationPoll {\n /** Starts polling the generated-document status for `requestUuid`. */\n start: (requestUuid: string) => void\n}\n\n/**\n * Polls a generated print-checks document until it reaches a terminal state, via\n * {@link usePollingTask}.\n *\n * @internal\n */\nexport function useGenerationPoll({\n onSucceeded,\n onFailed,\n}: UseGenerationPollOptions): GenerationPoll {\n const gustoClient = useGustoEmbeddedContext()\n const queryClient = useQueryClient()\n const requestUuidRef = useRef<string | null>(null)\n const { observability } = useObservability()\n\n // Unlike the payroll polls, there's no sibling `useGeneratedDocumentsGet` rendering this data —\n // the result is only ever downloaded, never displayed — so there's no other observer of this\n // queryKey for this fetchQuery call to race against, and no `refetch` to reuse instead.\n const fetchGeneratedDocument = (signal: AbortSignal) => {\n const requestUuid = requestUuidRef.current\n if (!requestUuid) {\n throw new Error('usePollingTask started without a print-checks request in flight')\n }\n return queryClient.fetchQuery({\n ...buildGeneratedDocumentsGetQuery(\n gustoClient,\n { documentType: DocumentType.PrintablePayrollChecks, requestUuid },\n { signal },\n ),\n staleTime: 0,\n })\n }\n\n const handleOutcome = (outcome: PrintChecksOutcome) => {\n if (outcome.type === 'failed') {\n onFailed()\n return\n }\n onSucceeded(outcome.url)\n }\n\n const { start: startPoll } = usePollingTask<GeneratedDocumentsGetQueryData, PrintChecksOutcome>({\n fetch: fetchGeneratedDocument,\n evaluate: evaluatePrintChecksOutcome,\n onDone: handleOutcome,\n // Unlike the payroll polls, print-checks generation has no equivalent to prepare/resubmit to\n // guard against, so a non-retryable read error can safely reuse the same failure path as a\n // real generation failure — same screen, same retry CTA.\n onError: error => {\n const sdkError = normalizeToSDKError(error)\n observability?.onError?.({\n ...sdkError,\n timestamp: Date.now(),\n componentName: COMPONENT_NAME,\n })\n onFailed()\n },\n onDeadline: lastData => {\n handleOutcome(verifiedPrintChecksOutcome(lastData))\n },\n })\n\n const start = useCallback(\n (requestUuid: string) => {\n requestUuidRef.current = requestUuid\n startPoll()\n },\n [startPoll],\n )\n\n return { start }\n}\n"],"names":["COMPONENT_NAME","isValidHttpsUrl","value","toPrintChecksOutcome","data","url","verifiedPrintChecksOutcome","lastData","GeneratedDocumentStatus","evaluatePrintChecksOutcome","outcome","isNonRetryablePollError","status","useGenerationPoll","onSucceeded","onFailed","gustoClient","useGustoEmbeddedContext","queryClient","useQueryClient","requestUuidRef","useRef","observability","useObservability","fetchGeneratedDocument","signal","requestUuid","buildGeneratedDocumentsGetQuery","DocumentType","handleOutcome","startPoll","usePollingTask","error","sdkError","normalizeToSDKError","useCallback"],"mappings":";;;;;;;;;AAkBA,MAAMA,IAAiB,2BAEjBC,IAAkB,CAACC,MAA2B;AAClD,MAAI;AACF,WAAO,IAAI,IAAIA,CAAK,EAAE,aAAa;AAAA,EACrC,QAAQ;AACN,WAAO;AAAA,EACT;AACF,GAIMC,IAAuB,CAACC,MAAoE;AAChG,QAAMC,IAAMD,GAAM,mBAAmB,eAAe,CAAC,KAAK;AAC1D,SAAOC,MAAQ,QAAQ,CAACJ,EAAgBI,CAAG,IAAI,EAAE,MAAM,SAAA,IAAa,EAAE,MAAM,aAAa,KAAAA,EAAA;AAC3F,GAIMC,IAA6B,CACjCC,MAEeA,GAAU,mBAAmB,WAC7BC,EAAwB,YAC9BL,EAAqBI,CAAQ,IAE/B,EAAE,MAAM,SAAA,GAGXE,IAA6B,CACjCC,MACuC;AACvC,MAAI,CAACA,EAAQ;AACX,WAAOC,EAAwBD,EAAQ,KAAK,IACxC,EAAE,QAAQ,SAAS,OAAOA,EAAQ,MAAA,IAClC,EAAE,QAAQ,UAAA;AAGhB,QAAME,IAASF,EAAQ,KAAK,mBAAmB;AAC/C,SAAIE,MAAWJ,EAAwB,YAC9B;AAAA,IACL,QAAQ;AAAA,IACR,OAAOL,EAAqBO,EAAQ,IAAI;AAAA,EAAA,IAGxCE,MAAWJ,EAAwB,SAC9B,EAAE,QAAQ,QAAQ,OAAO,EAAE,MAAM,WAAS,IAE5C,EAAE,QAAQ,UAAA;AACnB;AAoBO,SAASK,EAAkB;AAAA,EAChC,aAAAC;AAAA,EACA,UAAAC;AACF,GAA6C;AAC3C,QAAMC,IAAcC,EAAA,GACdC,IAAcC,EAAA,GACdC,IAAiBC,EAAsB,IAAI,GAC3C,EAAE,eAAAC,EAAA,IAAkBC,EAAA,GAKpBC,IAAyB,CAACC,MAAwB;AACtD,UAAMC,IAAcN,EAAe;AACnC,QAAI,CAACM;AACH,YAAM,IAAI,MAAM,iEAAiE;AAEnF,WAAOR,EAAY,WAAW;AAAA,MAC5B,GAAGS;AAAA,QACDX;AAAA,QACA,EAAE,cAAcY,EAAa,wBAAwB,aAAAF,EAAA;AAAA,QACrD,EAAE,QAAAD,EAAA;AAAA,MAAO;AAAA,MAEX,WAAW;AAAA,IAAA,CACZ;AAAA,EACH,GAEMI,IAAgB,CAACnB,MAAgC;AACrD,QAAIA,EAAQ,SAAS,UAAU;AAC7B,MAAAK,EAAA;AACA;AAAA,IACF;AACA,IAAAD,EAAYJ,EAAQ,GAAG;AAAA,EACzB,GAEM,EAAE,OAAOoB,EAAA,IAAcC,EAAmE;AAAA,IAC9F,OAAOP;AAAA,IACP,UAAUf;AAAA,IACV,QAAQoB;AAAA;AAAA;AAAA;AAAA,IAIR,SAAS,CAAAG,MAAS;AAChB,YAAMC,IAAWC,EAAoBF,CAAK;AAC1C,MAAAV,GAAe,UAAU;AAAA,QACvB,GAAGW;AAAA,QACH,WAAW,KAAK,IAAA;AAAA,QAChB,eAAejC;AAAA,MAAA,CAChB,GACDe,EAAA;AAAA,IACF;AAAA,IACA,YAAY,CAAAR,MAAY;AACtB,MAAAsB,EAAcvB,EAA2BC,CAAQ,CAAC;AAAA,IACpD;AAAA,EAAA,CACD;AAUD,SAAO,EAAE,OARK4B;AAAA,IACZ,CAACT,MAAwB;AACvB,MAAAN,EAAe,UAAUM,GACzBI,EAAA;AAAA,IACF;AAAA,IACA,CAACA,CAAS;AAAA,EAAA,EAGH;AACX;"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { usePayrollsListSuspense as i } from "@gusto/embedded-api/react-query/payrollsList";
|
|
2
|
-
import { QueryParamPayrollTypes as
|
|
2
|
+
import { QueryParamPayrollTypes as a, ProcessingStatuses as u } from "@gusto/embedded-api/models/operations/getv1companiescompanyidpayrolls";
|
|
3
3
|
const c = 28, p = "Transition from old pay schedule";
|
|
4
4
|
function d() {
|
|
5
5
|
const e = /* @__PURE__ */ new Date();
|
|
@@ -15,15 +15,11 @@ function S({
|
|
|
15
15
|
companyId: e,
|
|
16
16
|
processingStatuses: [u.Unprocessed],
|
|
17
17
|
endDate: d(),
|
|
18
|
-
payrollTypes: [
|
|
19
|
-
s.Regular,
|
|
20
|
-
s.OffCycle,
|
|
21
|
-
s.External
|
|
22
|
-
]
|
|
18
|
+
payrollTypes: [a.Regular, a.OffCycle]
|
|
23
19
|
});
|
|
24
|
-
return l.payrollList?.find((
|
|
25
|
-
const t =
|
|
26
|
-
return
|
|
20
|
+
return l.payrollList?.find((s) => {
|
|
21
|
+
const t = s.payPeriod;
|
|
22
|
+
return s.offCycleReason === p && t?.startDate === o && t.endDate === r && t.payScheduleUuid === n;
|
|
27
23
|
})?.payrollUuid;
|
|
28
24
|
}
|
|
29
25
|
export {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useResolveTransitionPayroll.js","sources":["../../../../src/components/Payroll/TransitionPayroll/useResolveTransitionPayroll.ts"],"sourcesContent":["import { usePayrollsListSuspense } from '@gusto/embedded-api/react-query/payrollsList'\nimport {\n ProcessingStatuses,\n QueryParamPayrollTypes,\n} from '@gusto/embedded-api/models/operations/getv1companiescompanyidpayrolls'\n\nconst FUTURE_LOOKAHEAD_DAYS = 28\n\nconst TRANSITION_OFF_CYCLE_REASON = 'Transition from old pay schedule'\n\nfunction getFutureEndDate(): string {\n const date = new Date()\n date.setDate(date.getDate() + FUTURE_LOOKAHEAD_DAYS)\n return date.toISOString().split('T')[0]!\n}\n\n/**\n * Arguments describing the transition pay period to resolve.\n *\n * @internal\n */\nexport interface ResolveTransitionPayrollArgs {\n companyId: string\n startDate: string\n endDate: string\n payScheduleUuid: string\n}\n\n/**\n * Looks up an existing unprocessed transition payroll for the given pay period.\n *\n * @remarks\n * A transition payroll is an unprocessed off-cycle payroll whose `offCycleReason` is\n * `\"Transition from old pay schedule\"` and whose pay period matches the supplied\n * `startDate`, `endDate`, and `payScheduleUuid`. When the company changed its pay schedule\n * the platform creates exactly one such payroll for the coverage gap; this hook finds it so\n * the caller can resume it instead of creating a duplicate.\n *\n * Backed by a suspense query, so callers must render it under a suspense boundary.\n *\n * @param args - The pay period to match. See {@link ResolveTransitionPayrollArgs}.\n * @returns The matching payroll's UUID, or `undefined` when none exists yet.\n * @internal\n */\nexport function useResolveTransitionPayroll({\n companyId,\n startDate,\n endDate,\n payScheduleUuid,\n}: ResolveTransitionPayrollArgs): string | undefined {\n const { data: payrollsData } = usePayrollsListSuspense({\n companyId,\n processingStatuses: [ProcessingStatuses.Unprocessed],\n endDate: getFutureEndDate(),\n payrollTypes: [
|
|
1
|
+
{"version":3,"file":"useResolveTransitionPayroll.js","sources":["../../../../src/components/Payroll/TransitionPayroll/useResolveTransitionPayroll.ts"],"sourcesContent":["import { usePayrollsListSuspense } from '@gusto/embedded-api/react-query/payrollsList'\nimport {\n ProcessingStatuses,\n QueryParamPayrollTypes,\n} from '@gusto/embedded-api/models/operations/getv1companiescompanyidpayrolls'\n\nconst FUTURE_LOOKAHEAD_DAYS = 28\n\nconst TRANSITION_OFF_CYCLE_REASON = 'Transition from old pay schedule'\n\nfunction getFutureEndDate(): string {\n const date = new Date()\n date.setDate(date.getDate() + FUTURE_LOOKAHEAD_DAYS)\n return date.toISOString().split('T')[0]!\n}\n\n/**\n * Arguments describing the transition pay period to resolve.\n *\n * @internal\n */\nexport interface ResolveTransitionPayrollArgs {\n companyId: string\n startDate: string\n endDate: string\n payScheduleUuid: string\n}\n\n/**\n * Looks up an existing unprocessed transition payroll for the given pay period.\n *\n * @remarks\n * A transition payroll is an unprocessed off-cycle payroll whose `offCycleReason` is\n * `\"Transition from old pay schedule\"` and whose pay period matches the supplied\n * `startDate`, `endDate`, and `payScheduleUuid`. When the company changed its pay schedule\n * the platform creates exactly one such payroll for the coverage gap; this hook finds it so\n * the caller can resume it instead of creating a duplicate.\n *\n * Backed by a suspense query, so callers must render it under a suspense boundary.\n *\n * @param args - The pay period to match. See {@link ResolveTransitionPayrollArgs}.\n * @returns The matching payroll's UUID, or `undefined` when none exists yet.\n * @internal\n */\nexport function useResolveTransitionPayroll({\n companyId,\n startDate,\n endDate,\n payScheduleUuid,\n}: ResolveTransitionPayrollArgs): string | undefined {\n const { data: payrollsData } = usePayrollsListSuspense({\n companyId,\n processingStatuses: [ProcessingStatuses.Unprocessed],\n endDate: getFutureEndDate(),\n payrollTypes: [QueryParamPayrollTypes.Regular, QueryParamPayrollTypes.OffCycle],\n })\n\n const match = payrollsData.payrollList?.find(payroll => {\n const period = payroll.payPeriod\n return (\n payroll.offCycleReason === TRANSITION_OFF_CYCLE_REASON &&\n period?.startDate === startDate &&\n period.endDate === endDate &&\n period.payScheduleUuid === payScheduleUuid\n )\n })\n\n return match?.payrollUuid\n}\n"],"names":["FUTURE_LOOKAHEAD_DAYS","TRANSITION_OFF_CYCLE_REASON","getFutureEndDate","date","useResolveTransitionPayroll","companyId","startDate","endDate","payScheduleUuid","payrollsData","usePayrollsListSuspense","ProcessingStatuses","QueryParamPayrollTypes","payroll","period"],"mappings":";;AAMA,MAAMA,IAAwB,IAExBC,IAA8B;AAEpC,SAASC,IAA2B;AAClC,QAAMC,wBAAW,KAAA;AACjB,SAAAA,EAAK,QAAQA,EAAK,QAAA,IAAYH,CAAqB,GAC5CG,EAAK,YAAA,EAAc,MAAM,GAAG,EAAE,CAAC;AACxC;AA8BO,SAASC,EAA4B;AAAA,EAC1C,WAAAC;AAAA,EACA,WAAAC;AAAA,EACA,SAAAC;AAAA,EACA,iBAAAC;AACF,GAAqD;AACnD,QAAM,EAAE,MAAMC,EAAA,IAAiBC,EAAwB;AAAA,IACrD,WAAAL;AAAA,IACA,oBAAoB,CAACM,EAAmB,WAAW;AAAA,IACnD,SAAST,EAAA;AAAA,IACT,cAAc,CAACU,EAAuB,SAASA,EAAuB,QAAQ;AAAA,EAAA,CAC/E;AAYD,SAVcH,EAAa,aAAa,KAAK,CAAAI,MAAW;AACtD,UAAMC,IAASD,EAAQ;AACvB,WACEA,EAAQ,mBAAmBZ,KAC3Ba,GAAQ,cAAcR,KACtBQ,EAAO,YAAYP,KACnBO,EAAO,oBAAoBN;AAAA,EAE/B,CAAC,GAEa;AAChB;"}
|