@gusto/embedded-react-sdk 0.51.0 → 0.52.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +46 -0
- package/dist/components/Base/useBaseSubmit.js +4 -4
- package/dist/components/Base/useBaseSubmit.js.map +1 -1
- package/dist/components/Common/DocumentList/DocumentList.d.ts +8 -1
- package/dist/components/Common/DocumentList/DocumentList.js +24 -21
- package/dist/components/Common/DocumentList/DocumentList.js.map +1 -1
- package/dist/components/Common/FlowBreadcrumbs/FlowBreadcrumbsTypes.d.ts +1 -1
- package/dist/components/Common/OnboardingStatusBadge/index.d.ts +2 -2
- package/dist/components/Common/OnboardingStatusBadge/index.js.map +1 -1
- package/dist/components/Common/TaxInputs/TaxInputs.d.ts +2 -2
- package/dist/components/Common/TaxInputs/TaxInputs.js.map +1 -1
- package/dist/components/Common/UI/FormBox/FormBox.d.ts +9 -0
- package/dist/components/Common/UI/FormBox/FormBox.js +13 -0
- package/dist/components/Common/UI/FormBox/FormBox.js.map +1 -0
- package/dist/components/Common/UI/FormBox/FormBox.module.scss.js +14 -0
- package/dist/components/Common/UI/FormBox/FormBox.module.scss.js.map +1 -0
- package/dist/components/Common/UI/FormBox/FormBoxTypes.d.ts +26 -0
- package/dist/components/Common/UI/FormBoxHeader/FormBoxHeader.d.ts +9 -0
- package/dist/components/Common/UI/FormBoxHeader/FormBoxHeader.js +23 -0
- package/dist/components/Common/UI/FormBoxHeader/FormBoxHeader.js.map +1 -0
- package/dist/components/Common/UI/FormBoxHeader/FormBoxHeader.module.scss.js +8 -0
- package/dist/components/Common/UI/FormBoxHeader/FormBoxHeader.module.scss.js.map +1 -0
- package/dist/components/Common/UI/FormBoxHeader/FormBoxHeaderTypes.d.ts +36 -0
- package/dist/components/Common/UI/FormBoxHeader/FormBoxHeaderTypes.js +7 -0
- package/dist/components/Common/UI/FormBoxHeader/FormBoxHeaderTypes.js.map +1 -0
- package/dist/components/Common/UI/FormBoxHeader/index.d.ts +1 -0
- package/dist/components/Common/UI/Input/InputTypes.d.ts +1 -0
- package/dist/components/Common/UI/Input/InputTypes.js.map +1 -1
- package/dist/components/Company/AssignSignatory/CreateSignatory/CreateSignatory.js +5 -5
- package/dist/components/Company/AssignSignatory/CreateSignatory/CreateSignatory.js.map +1 -1
- package/dist/components/Company/AssignSignatory/CreateSignatory/CreateSignatoryForm.d.ts +1 -2
- package/dist/components/Company/AssignSignatory/CreateSignatory/useCreateSignatory.d.ts +1 -1
- package/dist/components/Company/AssignSignatory/CreateSignatory/useCreateSignatory.js +9 -8
- package/dist/components/Company/AssignSignatory/CreateSignatory/useCreateSignatory.js.map +1 -1
- package/dist/components/Company/AssignSignatory/InviteSignatory/InviteSignatory.js +3 -3
- package/dist/components/Company/AssignSignatory/InviteSignatory/InviteSignatory.js.map +1 -1
- package/dist/components/Company/AssignSignatory/InviteSignatory/InviteSignatoryForm.d.ts +1 -1
- package/dist/components/Company/AssignSignatory/InviteSignatory/useInviteSignatory.d.ts +1 -1
- package/dist/components/Company/AssignSignatory/InviteSignatory/useInviteSignatory.js +9 -8
- package/dist/components/Company/AssignSignatory/InviteSignatory/useInviteSignatory.js.map +1 -1
- package/dist/components/Company/AssignSignatory/useAssignSignatory.js +11 -10
- package/dist/components/Company/AssignSignatory/useAssignSignatory.js.map +1 -1
- package/dist/components/Company/BankAccount/BankAccount.js +1 -1
- package/dist/components/Company/BankAccount/BankAccount.js.map +1 -1
- package/dist/components/Company/BankAccount/BankAccountComponents.d.ts +1 -1
- package/dist/components/Company/BankAccount/BankAccountComponents.js.map +1 -1
- package/dist/components/Company/BankAccount/BankAccountForm/BankAccountForm.js +1 -1
- package/dist/components/Company/BankAccount/BankAccountForm/BankAccountForm.js.map +1 -1
- package/dist/components/Company/BankAccount/BankAccountForm/Form.d.ts +1 -1
- package/dist/components/Company/BankAccount/BankAccountForm/context.js +9 -8
- package/dist/components/Company/BankAccount/BankAccountForm/context.js.map +1 -1
- package/dist/components/Company/BankAccount/BankAccountList/BankAccountList.js +1 -1
- package/dist/components/Company/BankAccount/BankAccountList/BankAccountList.js.map +1 -1
- package/dist/components/Company/BankAccount/BankAccountList/context.d.ts +1 -1
- package/dist/components/Company/BankAccount/BankAccountList/context.js.map +1 -1
- package/dist/components/Company/BankAccount/BankAccountVerify/BankAccountVerify.js +1 -1
- package/dist/components/Company/BankAccount/BankAccountVerify/BankAccountVerify.js.map +1 -1
- package/dist/components/Company/BankAccount/BankAccountVerify/Form.d.ts +1 -1
- package/dist/components/Company/DocumentSigner/DocumentList/DocumentList.js +2 -2
- package/dist/components/Company/DocumentSigner/DocumentList/DocumentList.js.map +1 -1
- package/dist/components/Company/DocumentSigner/DocumentList/useDocumentList.d.ts +2 -2
- package/dist/components/Company/DocumentSigner/DocumentList/useDocumentList.js +9 -8
- package/dist/components/Company/DocumentSigner/DocumentList/useDocumentList.js.map +1 -1
- package/dist/components/Company/DocumentSigner/DocumentSigner.js +1 -1
- package/dist/components/Company/DocumentSigner/DocumentSigner.js.map +1 -1
- package/dist/components/Company/DocumentSigner/documentSignerStateMachine.d.ts +2 -2
- package/dist/components/Company/DocumentSigner/documentSignerStateMachine.js.map +1 -1
- package/dist/components/Company/DocumentSigner/shared/useSignCompanyForm/signCompanyFormSchema.d.ts +1 -1
- package/dist/components/Company/DocumentSigner/shared/useSignCompanyForm/useSignCompanyForm.d.ts +1 -1
- package/dist/components/Company/DocumentSigner/shared/useSignCompanyForm/useSignCompanyForm.js +3 -3
- package/dist/components/Company/DocumentSigner/shared/useSignCompanyForm/useSignCompanyForm.js.map +1 -1
- package/dist/components/Company/FederalTaxes/FederalTaxes.js +2 -2
- package/dist/components/Company/FederalTaxes/FederalTaxes.js.map +1 -1
- package/dist/components/Company/FederalTaxes/Form.js +1 -1
- package/dist/components/Company/FederalTaxes/Form.js.map +1 -1
- package/dist/components/Company/FederalTaxes/useFederalTaxes.d.ts +2 -2
- package/dist/components/Company/FederalTaxes/useFederalTaxes.js +12 -11
- package/dist/components/Company/FederalTaxes/useFederalTaxes.js.map +1 -1
- package/dist/components/Company/Industry/Context.js +12 -11
- package/dist/components/Company/Industry/Context.js.map +1 -1
- package/dist/components/Company/Industry/Industry.js +2 -2
- package/dist/components/Company/Industry/Industry.js.map +1 -1
- package/dist/components/Company/Locations/LocationForm/Actions.js +7 -7
- package/dist/components/Company/Locations/LocationForm/Actions.js.map +1 -1
- package/dist/components/Company/Locations/LocationForm/Form.d.ts +1 -1
- package/dist/components/Company/Locations/LocationForm/LocationForm.js +46 -45
- package/dist/components/Company/Locations/LocationForm/LocationForm.js.map +1 -1
- package/dist/components/Company/Locations/LocationForm/useLocationForm.js +9 -8
- package/dist/components/Company/Locations/LocationForm/useLocationForm.js.map +1 -1
- package/dist/components/Company/Locations/LocationsList/LocationsList.js +1 -1
- package/dist/components/Company/Locations/LocationsList/LocationsList.js.map +1 -1
- package/dist/components/Company/Locations/LocationsList/useLocationsList.d.ts +1 -1
- package/dist/components/Company/Locations/LocationsList/useLocationsList.js +9 -8
- package/dist/components/Company/Locations/LocationsList/useLocationsList.js.map +1 -1
- package/dist/components/Company/OnboardingOverview/OnboardingOverview.js +1 -1
- package/dist/components/Company/OnboardingOverview/OnboardingOverview.js.map +1 -1
- package/dist/components/Company/OnboardingOverview/context.d.ts +1 -1
- package/dist/components/Company/OnboardingOverview/context.js +9 -8
- package/dist/components/Company/OnboardingOverview/context.js.map +1 -1
- package/dist/components/Company/PaySchedule/PaySchedule.js +1 -1
- package/dist/components/Company/PaySchedule/PaySchedule.js.map +1 -1
- package/dist/components/Company/PaySchedule/PayScheduleList.js +1 -1
- package/dist/components/Company/PaySchedule/PayScheduleList.js.map +1 -1
- package/dist/components/Company/PaySchedule/shared/usePayScheduleForm/payScheduleSchema.d.ts +3 -3
- package/dist/components/Company/PaySchedule/shared/usePayScheduleForm/usePayScheduleForm.d.ts +3 -3
- package/dist/components/Company/PaySchedule/shared/usePayScheduleForm/usePayScheduleForm.js +6 -6
- package/dist/components/Company/PaySchedule/shared/usePayScheduleForm/usePayScheduleForm.js.map +1 -1
- package/dist/components/Company/StateTaxes/StateTaxes.d.ts +10 -1
- package/dist/components/Company/StateTaxes/StateTaxes.js +23 -17
- package/dist/components/Company/StateTaxes/StateTaxes.js.map +1 -1
- package/dist/components/Company/StateTaxes/StateTaxesComponents.d.ts +2 -0
- package/dist/components/Company/StateTaxes/StateTaxesComponents.js +17 -10
- package/dist/components/Company/StateTaxes/StateTaxesComponents.js.map +1 -1
- package/dist/components/Company/StateTaxes/StateTaxesForm/Actions.js +3 -3
- package/dist/components/Company/StateTaxes/StateTaxesForm/Actions.js.map +1 -1
- package/dist/components/Company/StateTaxes/StateTaxesForm/StateTaxesForm.js +2 -2
- package/dist/components/Company/StateTaxes/StateTaxesForm/StateTaxesForm.js.map +1 -1
- package/dist/components/Company/StateTaxes/StateTaxesForm/applicableIf.d.ts +1 -1
- package/dist/components/Company/StateTaxes/StateTaxesForm/applicableIf.js.map +1 -1
- package/dist/components/Company/StateTaxes/StateTaxesForm/context.d.ts +1 -1
- package/dist/components/Company/StateTaxes/StateTaxesForm/context.js +9 -8
- package/dist/components/Company/StateTaxes/StateTaxesForm/context.js.map +1 -1
- package/dist/components/Company/StateTaxes/StateTaxesList/List.js +27 -27
- package/dist/components/Company/StateTaxes/StateTaxesList/List.js.map +1 -1
- package/dist/components/Company/StateTaxes/StateTaxesList/StateTaxesList.d.ts +9 -0
- package/dist/components/Company/StateTaxes/StateTaxesList/StateTaxesList.js +24 -24
- package/dist/components/Company/StateTaxes/StateTaxesList/StateTaxesList.js.map +1 -1
- package/dist/components/Company/StateTaxes/StateTaxesList/context.d.ts +1 -1
- package/dist/components/Company/StateTaxes/StateTaxesList/context.js +9 -8
- package/dist/components/Company/StateTaxes/StateTaxesList/context.js.map +1 -1
- package/dist/components/Contractor/Address/Address.d.ts +4 -3
- package/dist/components/Contractor/Address/Address.js.map +1 -1
- package/dist/components/Contractor/Address/shared/useContractorAddressForm/contractorAddressSchema.d.ts +2 -2
- package/dist/components/Contractor/Address/shared/useContractorAddressForm/useContractorAddressForm.d.ts +3 -3
- package/dist/components/Contractor/Address/shared/useContractorAddressForm/useContractorAddressForm.js +3 -3
- package/dist/components/Contractor/Address/shared/useContractorAddressForm/useContractorAddressForm.js.map +1 -1
- package/dist/components/Contractor/ContractorList/index.js +95 -92
- package/dist/components/Contractor/ContractorList/index.js.map +1 -1
- package/dist/components/Contractor/ContractorList/useContractorList.d.ts +1 -1
- package/dist/components/Contractor/ContractorList/useContractorList.js +1 -1
- package/dist/components/Contractor/ContractorList/useContractorList.js.map +1 -1
- package/dist/components/Contractor/Documents/DocumentSigner/documentSignerStateMachine.d.ts +1 -1
- package/dist/components/Contractor/Documents/DocumentSigner/documentSignerStateMachine.js.map +1 -1
- package/dist/components/Contractor/Documents/DocumentsList/DocumentsList.d.ts +3 -1
- package/dist/components/Contractor/Documents/DocumentsList/DocumentsList.js +64 -51
- package/dist/components/Contractor/Documents/DocumentsList/DocumentsList.js.map +1 -1
- package/dist/components/Contractor/Documents/DocumentsList/useContractorDocumentsList/useContractorDocumentsList.d.ts +1 -1
- package/dist/components/Contractor/Documents/DocumentsList/useContractorDocumentsList/useContractorDocumentsList.js +1 -1
- package/dist/components/Contractor/Documents/DocumentsList/useContractorDocumentsList/useContractorDocumentsList.js.map +1 -1
- package/dist/components/Contractor/Documents/SignatureForm/SignatureForm.js +202 -159
- package/dist/components/Contractor/Documents/SignatureForm/SignatureForm.js.map +1 -1
- package/dist/components/Contractor/Documents/SignatureForm/useContractorSignatureForm/contractorSignatureFormSchema.d.ts +1 -1
- package/dist/components/Contractor/Documents/SignatureForm/useContractorSignatureForm/useContractorSignatureForm.d.ts +3 -3
- package/dist/components/Contractor/Documents/SignatureForm/useContractorSignatureForm/useContractorSignatureForm.js +3 -3
- package/dist/components/Contractor/Documents/SignatureForm/useContractorSignatureForm/useContractorSignatureForm.js.map +1 -1
- package/dist/components/Contractor/Documents/SignatureForm/useContractorSignatureForm/w9Fields.d.ts +2 -2
- package/dist/components/Contractor/Documents/SignatureForm/useContractorSignatureForm/w9Fields.js +55 -54
- package/dist/components/Contractor/Documents/SignatureForm/useContractorSignatureForm/w9Fields.js.map +1 -1
- package/dist/components/Contractor/Landing/Landing.js +2 -2
- package/dist/components/Contractor/Landing/Landing.js.map +1 -1
- package/dist/components/Contractor/NewHireReport/NewHireReport.js +2 -2
- package/dist/components/Contractor/NewHireReport/NewHireReport.js.map +1 -1
- package/dist/components/Contractor/PaymentMethod/shared/useContractorBankAccountForm/useContractorBankAccountForm.d.ts +1 -1
- package/dist/components/Contractor/PaymentMethod/shared/useContractorBankAccountForm/useContractorBankAccountForm.js +2 -2
- package/dist/components/Contractor/PaymentMethod/shared/useContractorBankAccountForm/useContractorBankAccountForm.js.map +1 -1
- package/dist/components/Contractor/PaymentMethod/shared/useContractorBankAccountForm/useContractorBankAccountFormSchema.d.ts +1 -1
- package/dist/components/Contractor/PaymentMethod/shared/useContractorPaymentMethodForm/contractorPaymentMethodSchema.d.ts +1 -1
- package/dist/components/Contractor/PaymentMethod/shared/useContractorPaymentMethodForm/contractorPaymentMethodSchema.js.map +1 -1
- package/dist/components/Contractor/PaymentMethod/shared/useContractorPaymentMethodForm/useContractorPaymentMethodForm.d.ts +3 -3
- package/dist/components/Contractor/PaymentMethod/shared/useContractorPaymentMethodForm/useContractorPaymentMethodForm.js +2 -2
- package/dist/components/Contractor/PaymentMethod/shared/useContractorPaymentMethodForm/useContractorPaymentMethodForm.js.map +1 -1
- package/dist/components/Contractor/Payments/CreatePayment/CreatePayment.js +5 -5
- package/dist/components/Contractor/Payments/CreatePayment/CreatePayment.js.map +1 -1
- package/dist/components/Contractor/Payments/CreatePayment/CreatePaymentPresentation.d.ts +2 -2
- package/dist/components/Contractor/Payments/CreatePayment/CreatePaymentPresentation.js.map +1 -1
- package/dist/components/Contractor/Payments/CreatePayment/FastAchSubmissionBlockerBanner.d.ts +2 -2
- package/dist/components/Contractor/Payments/CreatePayment/FastAchSubmissionBlockerBanner.js.map +1 -1
- package/dist/components/Contractor/Payments/CreatePayment/GenericBlocker.d.ts +1 -1
- package/dist/components/Contractor/Payments/CreatePayment/GenericBlocker.js.map +1 -1
- package/dist/components/Contractor/Payments/CreatePayment/PreviewPresentation.d.ts +4 -4
- package/dist/components/Contractor/Payments/CreatePayment/PreviewPresentation.js.map +1 -1
- package/dist/components/Contractor/Payments/CreatePayment/helpers.d.ts +1 -1
- package/dist/components/Contractor/Payments/CreatePayment/helpers.js.map +1 -1
- package/dist/components/Contractor/Payments/PaymentFlow/PaymentFlowComponents.js +2 -2
- package/dist/components/Contractor/Payments/PaymentFlow/PaymentFlowComponents.js.map +1 -1
- package/dist/components/Contractor/Payments/PaymentFlow/paymentStateMachine.js.map +1 -1
- package/dist/components/Contractor/Payments/PaymentHistory/PaymentHistory.js +3 -3
- package/dist/components/Contractor/Payments/PaymentHistory/PaymentHistory.js.map +1 -1
- package/dist/components/Contractor/Payments/PaymentHistory/PaymentHistoryPresentation.d.ts +2 -2
- package/dist/components/Contractor/Payments/PaymentHistory/PaymentHistoryPresentation.js.map +1 -1
- package/dist/components/Contractor/Payments/PaymentStatement/PaymentStatement.js +4 -4
- package/dist/components/Contractor/Payments/PaymentStatement/PaymentStatement.js.map +1 -1
- package/dist/components/Contractor/Payments/PaymentStatement/PaymentStatementPresentation.d.ts +3 -3
- package/dist/components/Contractor/Payments/PaymentStatement/PaymentStatementPresentation.js.map +1 -1
- package/dist/components/Contractor/Payments/PaymentSummary/PaymentSummary.d.ts +17 -5
- package/dist/components/Contractor/Payments/PaymentSummary/PaymentSummary.js +32 -31
- package/dist/components/Contractor/Payments/PaymentSummary/PaymentSummary.js.map +1 -1
- package/dist/components/Contractor/Payments/PaymentSummary/PaymentSummaryPresentation.d.ts +3 -3
- package/dist/components/Contractor/Payments/PaymentSummary/PaymentSummaryPresentation.js.map +1 -1
- package/dist/components/Contractor/Payments/PaymentsList/PaymentsList.d.ts +16 -4
- package/dist/components/Contractor/Payments/PaymentsList/PaymentsList.js +34 -30
- package/dist/components/Contractor/Payments/PaymentsList/PaymentsList.js.map +1 -1
- package/dist/components/Contractor/Payments/PaymentsList/PaymentsListPresentation.d.ts +1 -1
- package/dist/components/Contractor/Payments/PaymentsList/PaymentsListPresentation.js +1 -1
- package/dist/components/Contractor/Payments/PaymentsList/PaymentsListPresentation.js.map +1 -1
- package/dist/components/Contractor/Profile/SelfOnboardingContractorProfile.js +1 -1
- package/dist/components/Contractor/Profile/SelfOnboardingContractorProfile.js.map +1 -1
- package/dist/components/Contractor/Profile/shared/useContractorDetailsForm/contractorDetailsSchema.d.ts +1 -1
- package/dist/components/Contractor/Profile/shared/useContractorDetailsForm/contractorDetailsSchema.js +6 -6
- package/dist/components/Contractor/Profile/shared/useContractorDetailsForm/contractorDetailsSchema.js.map +1 -1
- package/dist/components/Contractor/Profile/shared/useContractorDetailsForm/useContractorDetailsForm.d.ts +2 -2
- package/dist/components/Contractor/Profile/shared/useContractorDetailsForm/useContractorDetailsForm.js +3 -3
- package/dist/components/Contractor/Profile/shared/useContractorDetailsForm/useContractorDetailsForm.js.map +1 -1
- package/dist/components/Contractor/Submit/Submit.js +3 -3
- package/dist/components/Contractor/Submit/Submit.js.map +1 -1
- package/dist/components/Employee/Compensation/management/CompensationCard/CompensationCard.js +1 -1
- package/dist/components/Employee/Compensation/management/CompensationCard/CompensationCard.js.map +1 -1
- package/dist/components/Employee/Compensation/management/CompensationEditForm/CompensationEditForm.js +1 -1
- package/dist/components/Employee/Compensation/management/CompensationEditForm/CompensationEditForm.js.map +1 -1
- package/dist/components/Employee/Compensation/management/CompensationEditJobForm/CompensationEditJobForm.js +1 -1
- package/dist/components/Employee/Compensation/management/CompensationEditJobForm/CompensationEditJobForm.js.map +1 -1
- package/dist/components/Employee/Compensation/management/ManagementCompensationFormBody.js.map +1 -1
- package/dist/components/Employee/Compensation/onboarding/Compensation.d.ts +2 -6
- package/dist/components/Employee/Compensation/onboarding/Compensation.js +38 -42
- package/dist/components/Employee/Compensation/onboarding/Compensation.js.map +1 -1
- package/dist/components/Employee/Compensation/onboarding/CompensationFlowComponents.d.ts +2 -2
- package/dist/components/Employee/Compensation/onboarding/CompensationFlowComponents.js.map +1 -1
- package/dist/components/Employee/Compensation/onboarding/JobsList/JobsList.js +2 -2
- package/dist/components/Employee/Compensation/onboarding/JobsList/JobsList.js.map +1 -1
- package/dist/components/Employee/Compensation/onboarding/JobsList/JobsListPresentation.d.ts +1 -1
- package/dist/components/Employee/Compensation/onboarding/JobsList/JobsListPresentation.js.map +1 -1
- package/dist/components/Employee/Compensation/shared/AddCompensationFormBody.js.map +1 -1
- package/dist/components/Employee/Compensation/shared/derivePrimaryFlsaStatus.d.ts +1 -1
- package/dist/components/Employee/Compensation/shared/derivePrimaryFlsaStatus.js.map +1 -1
- package/dist/components/Employee/Compensation/shared/getPendingCompensationChanges.d.ts +2 -2
- package/dist/components/Employee/Compensation/shared/getPendingCompensationChanges.js.map +1 -1
- package/dist/components/Employee/Compensation/shared/useCompensationForm/compensationSchema.d.ts +2 -2
- package/dist/components/Employee/Compensation/shared/useCompensationForm/fields.d.ts +3 -3
- package/dist/components/Employee/Compensation/shared/useCompensationForm/fields.js.map +1 -1
- package/dist/components/Employee/Compensation/shared/useCompensationForm/useCompensationForm.d.ts +4 -4
- package/dist/components/Employee/Compensation/shared/useCompensationForm/useCompensationForm.js +7 -7
- package/dist/components/Employee/Compensation/shared/useCompensationForm/useCompensationForm.js.map +1 -1
- package/dist/components/Employee/Compensation/shared/useCompensationManagement/useCompensationManagement.d.ts +1 -1
- package/dist/components/Employee/Compensation/shared/useCompensationManagement/useCompensationManagement.js +4 -4
- package/dist/components/Employee/Compensation/shared/useCompensationManagement/useCompensationManagement.js.map +1 -1
- package/dist/components/Employee/Compensation/shared/useJobForm/jobSchema.d.ts +1 -1
- package/dist/components/Employee/Compensation/shared/useJobForm/useJobForm.d.ts +3 -3
- package/dist/components/Employee/Compensation/shared/useJobForm/useJobForm.js +7 -7
- package/dist/components/Employee/Compensation/shared/useJobForm/useJobForm.js.map +1 -1
- package/dist/components/Employee/Dashboard/Dashboard.js +1 -1
- package/dist/components/Employee/Dashboard/Dashboard.js.map +1 -1
- package/dist/components/Employee/Dashboard/dashboardStateMachine.js.map +1 -1
- package/dist/components/Employee/Dashboard/index.d.ts +1 -1
- package/dist/components/Employee/Deductions/management/DeductionsCard/DeductionsCard.js.map +1 -1
- package/dist/components/Employee/Deductions/management/deductionsStateMachine.js.map +1 -1
- package/dist/components/Employee/Deductions/onboarding/DeductionsList/DeductionsList.d.ts +1 -1
- package/dist/components/Employee/Deductions/onboarding/DeductionsList/DeductionsList.js.map +1 -1
- package/dist/components/Employee/Deductions/onboarding/deductionsContextualComponents.d.ts +1 -1
- package/dist/components/Employee/Deductions/onboarding/deductionsContextualComponents.js.map +1 -1
- package/dist/components/Employee/Deductions/shared/DeductionsForm/ChildSupportFormView.d.ts +1 -1
- package/dist/components/Employee/Deductions/shared/DeductionsForm/ChildSupportFormView.js.map +1 -1
- package/dist/components/Employee/Deductions/shared/DeductionsForm/DeductionsForm.d.ts +1 -1
- package/dist/components/Employee/Deductions/shared/DeductionsForm/DeductionsForm.js.map +1 -1
- package/dist/components/Employee/Deductions/shared/DeductionsForm/StandardDeductionForm.d.ts +1 -1
- package/dist/components/Employee/Deductions/shared/DeductionsForm/StandardDeductionForm.js.map +1 -1
- package/dist/components/Employee/Deductions/shared/DeleteDeductionDialog.d.ts +1 -1
- package/dist/components/Employee/Deductions/shared/DeleteDeductionDialog.js.map +1 -1
- package/dist/components/Employee/Deductions/shared/formatDeductionAmount.d.ts +1 -1
- package/dist/components/Employee/Deductions/shared/formatDeductionAmount.js.map +1 -1
- package/dist/components/Employee/Deductions/shared/useChildSupportGarnishmentForm/childSupportGarnishmentFormSchema.d.ts +2 -2
- package/dist/components/Employee/Deductions/shared/useChildSupportGarnishmentForm/childSupportGarnishmentFormSchema.js +1 -1
- package/dist/components/Employee/Deductions/shared/useChildSupportGarnishmentForm/childSupportGarnishmentFormSchema.js.map +1 -1
- package/dist/components/Employee/Deductions/shared/useChildSupportGarnishmentForm/fields.d.ts +1 -1
- package/dist/components/Employee/Deductions/shared/useChildSupportGarnishmentForm/fields.js.map +1 -1
- package/dist/components/Employee/Deductions/shared/useChildSupportGarnishmentForm/useChildSupportGarnishmentForm.d.ts +3 -3
- package/dist/components/Employee/Deductions/shared/useChildSupportGarnishmentForm/useChildSupportGarnishmentForm.js +5 -5
- package/dist/components/Employee/Deductions/shared/useChildSupportGarnishmentForm/useChildSupportGarnishmentForm.js.map +1 -1
- package/dist/components/Employee/Deductions/shared/useDeductionForm/deductionFormSchema.d.ts +2 -2
- package/dist/components/Employee/Deductions/shared/useDeductionForm/deductionFormSchema.js +1 -1
- package/dist/components/Employee/Deductions/shared/useDeductionForm/deductionFormSchema.js.map +1 -1
- package/dist/components/Employee/Deductions/shared/useDeductionForm/fields.d.ts +1 -1
- package/dist/components/Employee/Deductions/shared/useDeductionForm/fields.js.map +1 -1
- package/dist/components/Employee/Deductions/shared/useDeductionForm/useDeductionForm.d.ts +1 -1
- package/dist/components/Employee/Deductions/shared/useDeductionForm/useDeductionForm.js +3 -3
- package/dist/components/Employee/Deductions/shared/useDeductionForm/useDeductionForm.js.map +1 -1
- package/dist/components/Employee/Deductions/shared/useDeductionsList.d.ts +1 -1
- package/dist/components/Employee/Deductions/shared/useDeductionsList.js +2 -2
- package/dist/components/Employee/Deductions/shared/useDeductionsList.js.map +1 -1
- package/dist/components/Employee/Deductions/shared/useDeleteDeduction.d.ts +1 -1
- package/dist/components/Employee/Deductions/shared/useDeleteDeduction.js.map +1 -1
- package/dist/components/Employee/Documents/management/DocumentManager.js +2 -2
- package/dist/components/Employee/Documents/management/DocumentManager.js.map +1 -1
- package/dist/components/Employee/Documents/management/DocumentsCard/DocumentsCard.js.map +1 -1
- package/dist/components/Employee/Documents/onboarding/DocumentSigner/DocumentList/DocumentList.js +1 -1
- package/dist/components/Employee/Documents/onboarding/DocumentSigner/DocumentList/DocumentList.js.map +1 -1
- package/dist/components/Employee/Documents/onboarding/DocumentSigner/DocumentList/useDocumentList.d.ts +1 -1
- package/dist/components/Employee/Documents/onboarding/DocumentSigner/DocumentList/useDocumentList.js +9 -8
- package/dist/components/Employee/Documents/onboarding/DocumentSigner/DocumentList/useDocumentList.js.map +1 -1
- package/dist/components/Employee/Documents/onboarding/DocumentSigner/DocumentSigner.js +2 -2
- package/dist/components/Employee/Documents/onboarding/DocumentSigner/DocumentSigner.js.map +1 -1
- package/dist/components/Employee/Documents/onboarding/DocumentSigner/EmploymentEligibility/EmploymentEligibility.js +3 -3
- package/dist/components/Employee/Documents/onboarding/DocumentSigner/EmploymentEligibility/EmploymentEligibility.js.map +1 -1
- package/dist/components/Employee/Documents/onboarding/DocumentSigner/EmploymentEligibility/EmploymentEligibilityPresentation.js +1 -1
- package/dist/components/Employee/Documents/onboarding/DocumentSigner/EmploymentEligibility/EmploymentEligibilityPresentation.js.map +1 -1
- package/dist/components/Employee/Documents/onboarding/DocumentSigner/EmploymentEligibility/EmploymentEligibilitySchema.d.ts +2 -2
- package/dist/components/Employee/Documents/onboarding/DocumentSigner/EmploymentEligibility/EmploymentEligibilitySchema.js +1 -1
- package/dist/components/Employee/Documents/onboarding/DocumentSigner/EmploymentEligibility/EmploymentEligibilitySchema.js.map +1 -1
- package/dist/components/Employee/Documents/onboarding/DocumentSigner/I9SignatureForm/I9SignatureForm.js +1 -1
- package/dist/components/Employee/Documents/onboarding/DocumentSigner/I9SignatureForm/I9SignatureForm.js.map +1 -1
- package/dist/components/Employee/Documents/onboarding/DocumentSigner/documentSignerStateMachine.d.ts +1 -1
- package/dist/components/Employee/Documents/onboarding/DocumentSigner/documentSignerStateMachine.js.map +1 -1
- package/dist/components/Employee/Documents/onboarding/EmployeeDocuments/EmployeeDocuments.js +3 -6
- package/dist/components/Employee/Documents/onboarding/EmployeeDocuments/EmployeeDocuments.js.map +1 -1
- package/dist/components/Employee/Documents/shared/useDocumentsList/useDocumentsList.d.ts +1 -1
- package/dist/components/Employee/Documents/shared/useDocumentsList/useDocumentsList.js +1 -1
- package/dist/components/Employee/Documents/shared/useDocumentsList/useDocumentsList.js.map +1 -1
- package/dist/components/Employee/Documents/shared/useSignEmployeeForm/signEmployeeFormSchema.d.ts +2 -2
- package/dist/components/Employee/Documents/shared/useSignEmployeeForm/signEmployeeFormSchema.js +27 -32
- package/dist/components/Employee/Documents/shared/useSignEmployeeForm/signEmployeeFormSchema.js.map +1 -1
- package/dist/components/Employee/Documents/shared/useSignEmployeeForm/useSignEmployeeForm.d.ts +1 -1
- package/dist/components/Employee/Documents/shared/useSignEmployeeForm/useSignEmployeeForm.js +3 -3
- package/dist/components/Employee/Documents/shared/useSignEmployeeForm/useSignEmployeeForm.js.map +1 -1
- package/dist/components/Employee/EmployeeList/onboarding/EmployeeList.js.map +1 -1
- package/dist/components/Employee/EmployeeList/onboarding/EmployeeListView.d.ts +1 -1
- package/dist/components/Employee/EmployeeList/onboarding/EmployeeListView.js.map +1 -1
- package/dist/components/Employee/EmployeeList/shared/useEmployeeList.d.ts +3 -3
- package/dist/components/Employee/EmployeeList/shared/useEmployeeList.js +4 -5
- package/dist/components/Employee/EmployeeList/shared/useEmployeeList.js.map +1 -1
- package/dist/components/Employee/FederalTaxes/shared/useFederalTaxesForm/federalTaxesSchema.d.ts +2 -2
- package/dist/components/Employee/FederalTaxes/shared/useFederalTaxesForm/federalTaxesSchema.js +1 -1
- package/dist/components/Employee/FederalTaxes/shared/useFederalTaxesForm/federalTaxesSchema.js.map +1 -1
- package/dist/components/Employee/FederalTaxes/shared/useFederalTaxesForm/useFederalTaxesForm.d.ts +2 -2
- package/dist/components/Employee/FederalTaxes/shared/useFederalTaxesForm/useFederalTaxesForm.js +2 -2
- package/dist/components/Employee/FederalTaxes/shared/useFederalTaxesForm/useFederalTaxesForm.js.map +1 -1
- package/dist/components/Employee/FederalTaxes/shared/useFederalTaxesSummary/useFederalTaxesSummary.d.ts +1 -1
- package/dist/components/Employee/FederalTaxes/shared/useFederalTaxesSummary/useFederalTaxesSummary.js +1 -1
- package/dist/components/Employee/FederalTaxes/shared/useFederalTaxesSummary/useFederalTaxesSummary.js.map +1 -1
- package/dist/components/Employee/HomeAddress/management/HomeAddressEditForm.js.map +1 -1
- package/dist/components/Employee/HomeAddress/management/HomeAddressView.d.ts +1 -1
- package/dist/components/Employee/HomeAddress/management/HomeAddressView.js.map +1 -1
- package/dist/components/Employee/HomeAddress/management/getPendingFutureHomeAddress.d.ts +1 -1
- package/dist/components/Employee/HomeAddress/management/getPendingFutureHomeAddress.js.map +1 -1
- package/dist/components/Employee/HomeAddress/management/useHomeAddressManagement.d.ts +1 -1
- package/dist/components/Employee/HomeAddress/management/useHomeAddressManagement.js +3 -3
- package/dist/components/Employee/HomeAddress/management/useHomeAddressManagement.js.map +1 -1
- package/dist/components/Employee/HomeAddress/shared/useHomeAddressSummary/useHomeAddressSummary.d.ts +1 -1
- package/dist/components/Employee/HomeAddress/shared/useHomeAddressSummary/useHomeAddressSummary.js +1 -1
- package/dist/components/Employee/HomeAddress/shared/useHomeAddressSummary/useHomeAddressSummary.js.map +1 -1
- package/dist/components/Employee/Landing/Landing.js +2 -2
- package/dist/components/Employee/Landing/Landing.js.map +1 -1
- package/dist/components/Employee/OnboardingExecutionFlow/OnboardingExecutionFlowComponents.d.ts +1 -1
- package/dist/components/Employee/OnboardingExecutionFlow/OnboardingExecutionFlowComponents.js.map +1 -1
- package/dist/components/Employee/OnboardingExecutionFlow/onboardingExecutionStateMachine.d.ts +1 -1
- package/dist/components/Employee/OnboardingExecutionFlow/onboardingExecutionStateMachine.js +1 -3
- package/dist/components/Employee/OnboardingExecutionFlow/onboardingExecutionStateMachine.js.map +1 -1
- package/dist/components/Employee/OnboardingSummary/OnboardingSummary.js +55 -49
- package/dist/components/Employee/OnboardingSummary/OnboardingSummary.js.map +1 -1
- package/dist/components/Employee/PaymentMethod/shared/BankFormBody/BankFormBody.d.ts +1 -1
- package/dist/components/Employee/PaymentMethod/shared/BankFormBody/BankFormBody.js.map +1 -1
- package/dist/components/Employee/PaymentMethod/shared/SplitPaymentsFormBody/SplitPaymentsFormBody.d.ts +1 -1
- package/dist/components/Employee/PaymentMethod/shared/SplitPaymentsFormBody/SplitPaymentsFormBody.js.map +1 -1
- package/dist/components/Employee/PaymentMethod/shared/useBankForm/useBankForm.d.ts +1 -1
- package/dist/components/Employee/PaymentMethod/shared/useBankForm/useBankForm.js +1 -1
- package/dist/components/Employee/PaymentMethod/shared/useBankForm/useBankForm.js.map +1 -1
- package/dist/components/Employee/PaymentMethod/shared/useBankForm/useBankFormSchema.d.ts +1 -1
- package/dist/components/Employee/PaymentMethod/shared/usePaymentMethodForm/usePaymentMethodForm.d.ts +1 -1
- package/dist/components/Employee/PaymentMethod/shared/usePaymentMethodForm/usePaymentMethodForm.js +2 -2
- package/dist/components/Employee/PaymentMethod/shared/usePaymentMethodForm/usePaymentMethodForm.js.map +1 -1
- package/dist/components/Employee/PaymentMethod/shared/usePaymentMethodList.d.ts +2 -2
- package/dist/components/Employee/PaymentMethod/shared/usePaymentMethodList.js +4 -4
- package/dist/components/Employee/PaymentMethod/shared/usePaymentMethodList.js.map +1 -1
- package/dist/components/Employee/PaymentMethod/shared/useSplitPaymentsForm/useSplitPaymentsForm.d.ts +2 -2
- package/dist/components/Employee/PaymentMethod/shared/useSplitPaymentsForm/useSplitPaymentsForm.js +3 -3
- package/dist/components/Employee/PaymentMethod/shared/useSplitPaymentsForm/useSplitPaymentsForm.js.map +1 -1
- package/dist/components/Employee/PaymentMethod/shared/useSplitPaymentsForm/useSplitPaymentsFormSchema.d.ts +1 -1
- package/dist/components/Employee/Paystubs/shared/usePaystubsList/usePaystubsList.d.ts +1 -1
- package/dist/components/Employee/Paystubs/shared/usePaystubsList/usePaystubsList.js +3 -3
- package/dist/components/Employee/Paystubs/shared/usePaystubsList/usePaystubsList.js.map +1 -1
- package/dist/components/Employee/Profile/onboarding/AdminProfile.js.map +1 -1
- package/dist/components/Employee/Profile/onboarding/EmployeeProfile.js +1 -1
- package/dist/components/Employee/Profile/onboarding/EmployeeProfile.js.map +1 -1
- package/dist/components/Employee/Profile/shared/useEmployeeDetailsForm/employeeDetailsSchema.d.ts +2 -2
- package/dist/components/Employee/Profile/shared/useEmployeeDetailsForm/useEmployeeDetailsForm.d.ts +1 -1
- package/dist/components/Employee/Profile/shared/useEmployeeDetailsForm/useEmployeeDetailsForm.js +5 -5
- package/dist/components/Employee/Profile/shared/useEmployeeDetailsForm/useEmployeeDetailsForm.js.map +1 -1
- package/dist/components/Employee/Profile/shared/useEmployeeProfileSummary/useEmployeeProfileSummary.d.ts +1 -1
- package/dist/components/Employee/Profile/shared/useEmployeeProfileSummary/useEmployeeProfileSummary.js +1 -1
- package/dist/components/Employee/Profile/shared/useEmployeeProfileSummary/useEmployeeProfileSummary.js.map +1 -1
- package/dist/components/Employee/Profile/shared/useHomeAddressForm/homeAddressSchema.d.ts +1 -1
- package/dist/components/Employee/Profile/shared/useHomeAddressForm/useCurrentHomeAddressForm.js +1 -1
- package/dist/components/Employee/Profile/shared/useHomeAddressForm/useCurrentHomeAddressForm.js.map +1 -1
- package/dist/components/Employee/Profile/shared/useHomeAddressForm/useHomeAddressForm.d.ts +2 -2
- package/dist/components/Employee/Profile/shared/useHomeAddressForm/useHomeAddressForm.js +4 -4
- package/dist/components/Employee/Profile/shared/useHomeAddressForm/useHomeAddressForm.js.map +1 -1
- package/dist/components/Employee/Profile/shared/useWorkAddressForm/fields.d.ts +1 -1
- package/dist/components/Employee/Profile/shared/useWorkAddressForm/fields.js.map +1 -1
- package/dist/components/Employee/Profile/shared/useWorkAddressForm/useCurrentWorkAddressForm.js +1 -1
- package/dist/components/Employee/Profile/shared/useWorkAddressForm/useCurrentWorkAddressForm.js.map +1 -1
- package/dist/components/Employee/Profile/shared/useWorkAddressForm/useWorkAddressForm.d.ts +2 -2
- package/dist/components/Employee/Profile/shared/useWorkAddressForm/useWorkAddressForm.js +5 -5
- package/dist/components/Employee/Profile/shared/useWorkAddressForm/useWorkAddressForm.js.map +1 -1
- package/dist/components/Employee/SelfOnboardingFlow/SelfOnboardingComponents.d.ts +1 -1
- package/dist/components/Employee/SelfOnboardingFlow/SelfOnboardingComponents.js.map +1 -1
- package/dist/components/Employee/StateTaxes/management/StateTaxesCard/StateTaxesCard.js.map +1 -1
- package/dist/components/Employee/StateTaxes/shared/useEmployeeStateTaxesForm/__fixtures__/stateTaxesFixtures.d.ts +1 -1
- package/dist/components/Employee/StateTaxes/shared/useEmployeeStateTaxesForm/__fixtures__/toWireFormat.d.ts +1 -1
- package/dist/components/Employee/StateTaxes/shared/useEmployeeStateTaxesForm/employeeStateTaxesSchema.d.ts +1 -1
- package/dist/components/Employee/StateTaxes/shared/useEmployeeStateTaxesForm/employeeStateTaxesSchema.js.map +1 -1
- package/dist/components/Employee/StateTaxes/shared/useEmployeeStateTaxesForm/fieldMapping.d.ts +1 -1
- package/dist/components/Employee/StateTaxes/shared/useEmployeeStateTaxesForm/fieldMapping.js.map +1 -1
- package/dist/components/Employee/StateTaxes/shared/useEmployeeStateTaxesForm/fields.d.ts +1 -1
- package/dist/components/Employee/StateTaxes/shared/useEmployeeStateTaxesForm/fields.js.map +1 -1
- package/dist/components/Employee/StateTaxes/shared/useEmployeeStateTaxesForm/useEmployeeStateTaxesForm.d.ts +1 -1
- package/dist/components/Employee/StateTaxes/shared/useEmployeeStateTaxesForm/useEmployeeStateTaxesForm.js +2 -2
- package/dist/components/Employee/StateTaxes/shared/useEmployeeStateTaxesForm/useEmployeeStateTaxesForm.js.map +1 -1
- package/dist/components/Employee/StateTaxes/shared/useStateTaxesSummary/useStateTaxesSummary.d.ts +1 -1
- package/dist/components/Employee/StateTaxes/shared/useStateTaxesSummary/useStateTaxesSummary.js +1 -1
- package/dist/components/Employee/StateTaxes/shared/useStateTaxesSummary/useStateTaxesSummary.js.map +1 -1
- package/dist/components/Employee/Terminations/TerminateEmployee/TerminateEmployee.js +9 -9
- package/dist/components/Employee/Terminations/TerminateEmployee/TerminateEmployee.js.map +1 -1
- package/dist/components/Employee/Terminations/TerminateEmployee/TerminateEmployeePresentation.d.ts +1 -1
- package/dist/components/Employee/Terminations/TerminateEmployee/TerminateEmployeePresentation.js.map +1 -1
- package/dist/components/Employee/Terminations/TerminationSummary/TerminationSummary.js +4 -4
- package/dist/components/Employee/Terminations/TerminationSummary/TerminationSummary.js.map +1 -1
- package/dist/components/Employee/WorkAddress/management/WorkAddressEditForm.js.map +1 -1
- package/dist/components/Employee/WorkAddress/management/WorkAddressView.d.ts +1 -1
- package/dist/components/Employee/WorkAddress/management/WorkAddressView.js.map +1 -1
- package/dist/components/Employee/WorkAddress/management/getPendingFutureWorkAddress.d.ts +2 -2
- package/dist/components/Employee/WorkAddress/management/getPendingFutureWorkAddress.js.map +1 -1
- package/dist/components/Employee/WorkAddress/management/useWorkAddressManagement.d.ts +1 -1
- package/dist/components/Employee/WorkAddress/management/useWorkAddressManagement.js +3 -3
- package/dist/components/Employee/WorkAddress/management/useWorkAddressManagement.js.map +1 -1
- package/dist/components/Employee/WorkAddress/shared/useEmployeeWorkAddressSummary/useEmployeeWorkAddressSummary.d.ts +1 -1
- package/dist/components/Employee/WorkAddress/shared/useEmployeeWorkAddressSummary/useEmployeeWorkAddressSummary.js +1 -1
- package/dist/components/Employee/WorkAddress/shared/useEmployeeWorkAddressSummary/useEmployeeWorkAddressSummary.js.map +1 -1
- package/dist/components/Employee/exports/employeeManagement.d.ts +1 -1
- package/dist/components/InformationRequests/InformationRequestForm/InformationRequestForm.d.ts +4 -5
- package/dist/components/InformationRequests/InformationRequestForm/InformationRequestForm.js +101 -125
- package/dist/components/InformationRequests/InformationRequestForm/InformationRequestForm.js.map +1 -1
- package/dist/components/InformationRequests/InformationRequestList/InformationRequestList.js +2 -2
- package/dist/components/InformationRequests/InformationRequestList/InformationRequestList.js.map +1 -1
- package/dist/components/InformationRequests/InformationRequestsComponents.d.ts +0 -5
- package/dist/components/InformationRequests/InformationRequestsComponents.js +12 -13
- package/dist/components/InformationRequests/InformationRequestsComponents.js.map +1 -1
- package/dist/components/Payroll/ConfirmWireDetails/ConfirmWireDetails.js +1 -1
- package/dist/components/Payroll/ConfirmWireDetails/ConfirmWireDetails.js.map +1 -1
- package/dist/components/Payroll/ConfirmWireDetails/ConfirmWireDetailsBanner/ConfirmWireDetailsBanner.js +2 -2
- package/dist/components/Payroll/ConfirmWireDetails/ConfirmWireDetailsBanner/ConfirmWireDetailsBanner.js.map +1 -1
- package/dist/components/Payroll/ConfirmWireDetails/ConfirmWireDetailsForm/ConfirmWireDetailsForm.js +3 -3
- package/dist/components/Payroll/ConfirmWireDetails/ConfirmWireDetailsForm/ConfirmWireDetailsForm.js.map +1 -1
- package/dist/components/Payroll/ConfirmWireDetails/WireInstructions/WireInstructions.js +2 -2
- package/dist/components/Payroll/ConfirmWireDetails/WireInstructions/WireInstructions.js.map +1 -1
- package/dist/components/Payroll/Dismissal/DismissalFlowComponents.js +5 -5
- package/dist/components/Payroll/Dismissal/DismissalFlowComponents.js.map +1 -1
- package/dist/components/Payroll/Dismissal/DismissalPayPeriodSelection/DismissalPayPeriodSelection.js +4 -4
- package/dist/components/Payroll/Dismissal/DismissalPayPeriodSelection/DismissalPayPeriodSelection.js.map +1 -1
- package/dist/components/Payroll/GrossUpModal/GrossUpModal.js +8 -7
- package/dist/components/Payroll/GrossUpModal/GrossUpModal.js.map +1 -1
- package/dist/components/Payroll/OffCycle/OffCycleFlowComponents.d.ts +1 -1
- package/dist/components/Payroll/OffCycle/OffCycleFlowComponents.js +9 -9
- package/dist/components/Payroll/OffCycle/OffCycleFlowComponents.js.map +1 -1
- package/dist/components/Payroll/OffCycle/index.d.ts +1 -1
- package/dist/components/Payroll/OffCycleCreation/OffCycleCreation.js +4 -4
- package/dist/components/Payroll/OffCycleCreation/OffCycleCreation.js.map +1 -1
- package/dist/components/Payroll/OffCycleTaxWithholdingModal/OffCycleTaxWithholdingModal.js +1 -1
- package/dist/components/Payroll/OffCycleTaxWithholdingModal/OffCycleTaxWithholdingModal.js.map +1 -1
- package/dist/components/Payroll/OffCycleTaxWithholdingTable/OffCycleTaxWithholdingTableTypes.d.ts +2 -2
- package/dist/components/Payroll/OffCycleTaxWithholdingTable/OffCycleTaxWithholdingTableTypes.js +1 -1
- package/dist/components/Payroll/OffCycleTaxWithholdingTable/OffCycleTaxWithholdingTableTypes.js.map +1 -1
- package/dist/components/Payroll/PayrollBlocker/components/PayrollBlockerList.js +4 -4
- package/dist/components/Payroll/PayrollBlocker/components/PayrollBlockerList.js.map +1 -1
- package/dist/components/Payroll/PayrollBlocker/payrollHelpers.js +2 -2
- package/dist/components/Payroll/PayrollBlocker/payrollHelpers.js.map +1 -1
- package/dist/components/Payroll/PayrollConfiguration/PayrollConfiguration.js +100 -95
- package/dist/components/Payroll/PayrollConfiguration/PayrollConfiguration.js.map +1 -1
- package/dist/components/Payroll/PayrollConfiguration/PayrollConfigurationPresentation.d.ts +5 -6
- package/dist/components/Payroll/PayrollConfiguration/PayrollConfigurationPresentation.js.map +1 -1
- package/dist/components/Payroll/PayrollConfiguration/usePayrollConfigurationData.d.ts +5 -5
- package/dist/components/Payroll/PayrollConfiguration/usePayrollConfigurationData.js +6 -6
- package/dist/components/Payroll/PayrollConfiguration/usePayrollConfigurationData.js.map +1 -1
- package/dist/components/Payroll/PayrollEditEmployee/PayrollEditEmployee.js +57 -56
- package/dist/components/Payroll/PayrollEditEmployee/PayrollEditEmployee.js.map +1 -1
- package/dist/components/Payroll/PayrollEditEmployee/PayrollEditEmployeePresentation.d.ts +4 -4
- package/dist/components/Payroll/PayrollEditEmployee/PayrollEditEmployeePresentation.js +1 -1
- package/dist/components/Payroll/PayrollEditEmployee/PayrollEditEmployeePresentation.js.map +1 -1
- package/dist/components/Payroll/PayrollEditEmployee/TimeOffField.d.ts +2 -2
- package/dist/components/Payroll/PayrollEditEmployee/TimeOffField.js.map +1 -1
- package/dist/components/Payroll/PayrollExecutionFlow/PayrollExecutionFlow.d.ts +24 -7
- package/dist/components/Payroll/PayrollExecutionFlow/PayrollExecutionFlow.js +37 -33
- package/dist/components/Payroll/PayrollExecutionFlow/PayrollExecutionFlow.js.map +1 -1
- package/dist/components/Payroll/PayrollExecutionFlow/payrollExecutionMachine.js +2 -2
- package/dist/components/Payroll/PayrollExecutionFlow/payrollExecutionMachine.js.map +1 -1
- package/dist/components/Payroll/PayrollFlow/PayrollExecutionFlowContextual.js +7 -7
- package/dist/components/Payroll/PayrollFlow/PayrollExecutionFlowContextual.js.map +1 -1
- package/dist/components/Payroll/PayrollFlow/PayrollFlowComponents.d.ts +1 -1
- package/dist/components/Payroll/PayrollFlow/PayrollFlowComponents.js.map +1 -1
- package/dist/components/Payroll/PayrollFlow/TransitionFlowContextual.js +2 -2
- package/dist/components/Payroll/PayrollFlow/TransitionFlowContextual.js.map +1 -1
- package/dist/components/Payroll/PayrollFlow/payrollStateMachine.js.map +1 -1
- package/dist/components/Payroll/PayrollHistory/PayrollHistory.js +4 -4
- package/dist/components/Payroll/PayrollHistory/PayrollHistory.js.map +1 -1
- package/dist/components/Payroll/PayrollHistory/PayrollHistoryPresentation.d.ts +2 -2
- package/dist/components/Payroll/PayrollHistory/PayrollHistoryPresentation.js.map +1 -1
- package/dist/components/Payroll/PayrollLanding/PayrollLandingFlowComponents.js +2 -2
- package/dist/components/Payroll/PayrollLanding/PayrollLandingFlowComponents.js.map +1 -1
- package/dist/components/Payroll/PayrollList/PayrollList.js +8 -8
- package/dist/components/Payroll/PayrollList/PayrollList.js.map +1 -1
- package/dist/components/Payroll/PayrollList/PayrollListPresentation.d.ts +3 -3
- package/dist/components/Payroll/PayrollList/PayrollListPresentation.js +1 -1
- package/dist/components/Payroll/PayrollList/PayrollListPresentation.js.map +1 -1
- package/dist/components/Payroll/PayrollOverview/PayrollOverview.js +7 -7
- package/dist/components/Payroll/PayrollOverview/PayrollOverview.js.map +1 -1
- package/dist/components/Payroll/PayrollOverview/PayrollOverviewPresentation.d.ts +4 -4
- package/dist/components/Payroll/PayrollOverview/PayrollOverviewPresentation.js +31 -31
- package/dist/components/Payroll/PayrollOverview/PayrollOverviewPresentation.js.map +1 -1
- package/dist/components/Payroll/PayrollOverview/SubmissionBlockers/FastAchSubmissionBlockerBanner.d.ts +2 -2
- package/dist/components/Payroll/PayrollOverview/SubmissionBlockers/FastAchSubmissionBlockerBanner.js.map +1 -1
- package/dist/components/Payroll/PayrollOverview/SubmissionBlockers/GenericBlocker.d.ts +1 -1
- package/dist/components/Payroll/PayrollOverview/SubmissionBlockers/GenericBlocker.js.map +1 -1
- package/dist/components/Payroll/PayrollReceipts/PayrollReceipts.js +1 -1
- package/dist/components/Payroll/PayrollReceipts/PayrollReceipts.js.map +1 -1
- package/dist/components/Payroll/PayrollReceipts/PayrollReceiptsPresentation.d.ts +1 -1
- package/dist/components/Payroll/PayrollReceipts/PayrollReceiptsPresentation.js.map +1 -1
- package/dist/components/Payroll/PayrollStatusBadges/payrollStatusConfig.d.ts +1 -1
- package/dist/components/Payroll/PayrollStatusBadges/payrollStatusConfig.js +2 -2
- package/dist/components/Payroll/PayrollStatusBadges/payrollStatusConfig.js.map +1 -1
- package/dist/components/Payroll/RecoveryCases/RecoveryCases.d.ts +9 -5
- package/dist/components/Payroll/RecoveryCases/RecoveryCases.js.map +1 -1
- package/dist/components/Payroll/RecoveryCases/RecoveryCasesList/RecoveryCasesList.js +1 -1
- package/dist/components/Payroll/RecoveryCases/RecoveryCasesList/RecoveryCasesList.js.map +1 -1
- package/dist/components/Payroll/RecoveryCases/RecoveryCasesResubmit/RecoveryCasesResubmit.js +2 -2
- package/dist/components/Payroll/RecoveryCases/RecoveryCasesResubmit/RecoveryCasesResubmit.js.map +1 -1
- package/dist/components/Payroll/Transition/TransitionFlowComponents.d.ts +1 -1
- package/dist/components/Payroll/Transition/TransitionFlowComponents.js +2 -2
- package/dist/components/Payroll/Transition/TransitionFlowComponents.js.map +1 -1
- package/dist/components/Payroll/Transition/index.d.ts +1 -1
- package/dist/components/Payroll/TransitionCreation/TransitionCreation.js +4 -4
- package/dist/components/Payroll/TransitionCreation/TransitionCreation.js.map +1 -1
- package/dist/components/Payroll/TransitionPayrollAlert/TransitionPayrollAlert.js +3 -3
- package/dist/components/Payroll/TransitionPayrollAlert/TransitionPayrollAlert.js.map +1 -1
- package/dist/components/Payroll/TransitionPayrollAlert/TransitionPayrollAlertPresentation.d.ts +1 -1
- package/dist/components/Payroll/TransitionPayrollAlert/TransitionPayrollAlertPresentation.js.map +1 -1
- package/dist/components/Payroll/helpers.d.ts +26 -12
- package/dist/components/Payroll/helpers.js +1 -1
- package/dist/components/Payroll/helpers.js.map +1 -1
- package/dist/components/Payroll/index.d.ts +3 -2
- package/dist/components/Payroll/payrollTypes.d.ts +1 -1
- package/dist/components/Payroll/payrollTypes.js +1 -1
- package/dist/components/Payroll/payrollTypes.js.map +1 -1
- package/dist/components/Payroll/usePreparedPayrollData.d.ts +2 -2
- package/dist/components/Payroll/usePreparedPayrollData.js +16 -15
- package/dist/components/Payroll/usePreparedPayrollData.js.map +1 -1
- package/dist/components/Payroll/useUnprocessedTransitionPayPeriods.d.ts +1 -1
- package/dist/components/Payroll/useUnprocessedTransitionPayPeriods.js +3 -3
- package/dist/components/Payroll/useUnprocessedTransitionPayPeriods.js.map +1 -1
- package/dist/components/TimeOff/HolidayPolicyDetail/HolidayPolicyDetail.js +3 -3
- package/dist/components/TimeOff/HolidayPolicyDetail/HolidayPolicyDetail.js.map +1 -1
- package/dist/components/TimeOff/HolidaySelectionForm/HolidaySelectionForm.js +3 -3
- package/dist/components/TimeOff/HolidaySelectionForm/HolidaySelectionForm.js.map +1 -1
- package/dist/components/TimeOff/PolicyList/PolicyList.js +6 -6
- package/dist/components/TimeOff/PolicyList/PolicyList.js.map +1 -1
- package/dist/components/TimeOff/PolicySettings/PolicySettings.js +30 -29
- package/dist/components/TimeOff/PolicySettings/PolicySettings.js.map +1 -1
- package/dist/components/TimeOff/PolicyTypeSelector/PolicyTypeSelector.js +1 -1
- package/dist/components/TimeOff/PolicyTypeSelector/PolicyTypeSelector.js.map +1 -1
- package/dist/components/TimeOff/TimeOffFlow/timeOffPolicyTypes.d.ts +2 -2
- package/dist/components/TimeOff/TimeOffFlow/timeOffPolicyTypes.js.map +1 -1
- package/dist/components/TimeOff/TimeOffManagement/PolicyConfigurationForm/PolicyConfigurationForm.js +27 -26
- package/dist/components/TimeOff/TimeOffManagement/PolicyConfigurationForm/PolicyConfigurationForm.js.map +1 -1
- package/dist/components/TimeOff/TimeOffManagement/SelectEmployees/SelectEmployeesHoliday.js +2 -2
- package/dist/components/TimeOff/TimeOffManagement/SelectEmployees/SelectEmployeesHoliday.js.map +1 -1
- package/dist/components/TimeOff/TimeOffManagement/SelectEmployees/SelectEmployeesPresentationTypes.d.ts +1 -1
- package/dist/components/TimeOff/TimeOffManagement/SelectEmployees/SelectEmployeesTimeOff.js +69 -68
- package/dist/components/TimeOff/TimeOffManagement/SelectEmployees/SelectEmployeesTimeOff.js.map +1 -1
- package/dist/components/TimeOff/TimeOffManagement/SelectEmployees/useSelectEmployeesData.js +20 -20
- package/dist/components/TimeOff/TimeOffManagement/SelectEmployees/useSelectEmployeesData.js.map +1 -1
- package/dist/components/TimeOff/TimeOffPolicyDetail/TimeOffPolicyDetail.js +67 -66
- package/dist/components/TimeOff/TimeOffPolicyDetail/TimeOffPolicyDetail.js.map +1 -1
- package/dist/contexts/ApiProvider/ApiProvider.d.ts +5 -5
- package/dist/contexts/ApiProvider/ApiProvider.js +3 -3
- package/dist/contexts/ApiProvider/ApiProvider.js.map +1 -1
- package/dist/contexts/ApiProvider/apiVersion.d.ts +23 -0
- package/dist/contexts/ApiProvider/apiVersion.js +6 -0
- package/dist/contexts/ApiProvider/apiVersion.js.map +1 -0
- package/dist/contexts/ApiProvider/apiVersionHook.js +3 -2
- package/dist/contexts/ApiProvider/apiVersionHook.js.map +1 -1
- package/dist/contexts/ApiProvider/createSdkQueryClient.d.ts +1 -1
- package/dist/contexts/ApiProvider/createSdkQueryClient.js +7 -6
- package/dist/contexts/ApiProvider/createSdkQueryClient.js.map +1 -1
- package/dist/contexts/ComponentAdapter/adapters/defaultComponentAdapter.js +40 -36
- package/dist/contexts/ComponentAdapter/adapters/defaultComponentAdapter.js.map +1 -1
- package/dist/contexts/ComponentAdapter/componentAdapterTypes.d.ts +2 -0
- package/dist/contexts/ComponentAdapter/createComponentsWithDefaults.d.ts +5 -0
- package/dist/contexts/ComponentAdapter/createComponentsWithDefaults.js +18 -16
- package/dist/contexts/ComponentAdapter/createComponentsWithDefaults.js.map +1 -1
- package/dist/contexts/ComponentAdapter/useComponentContext.d.ts +6 -0
- package/dist/contexts/ComponentAdapter/useComponentContext.js.map +1 -1
- package/dist/contexts/GustoProvider/GustoProvider.d.ts +4 -5
- package/dist/contexts/GustoProvider/GustoProvider.js +6 -6
- package/dist/contexts/GustoProvider/GustoProvider.js.map +1 -1
- package/dist/contexts/GustoProvider/GustoProviderCustomUIAdapter.d.ts +7 -7
- package/dist/contexts/GustoProvider/GustoProviderCustomUIAdapter.js +8 -8
- package/dist/contexts/GustoProvider/GustoProviderCustomUIAdapter.js.map +1 -1
- package/dist/contexts/GustoProvider/index.d.ts +1 -1
- package/dist/contexts/index.d.ts +2 -6
- package/dist/helpers/apiErrorToList.d.ts +1 -1
- package/dist/helpers/apiErrorToList.js.map +1 -1
- package/dist/helpers/formattedStrings.d.ts +2 -2
- package/dist/helpers/formattedStrings.js.map +1 -1
- package/dist/hooks/useCompanyPaymentSpeed.d.ts +1 -1
- package/dist/hooks/useCompanyPaymentSpeed.js +1 -1
- package/dist/hooks/useCompanyPaymentSpeed.js.map +1 -1
- package/dist/i18n/en/Contractor.ContractorList.json.js +18 -16
- package/dist/i18n/en/Contractor.ContractorList.json.js.map +1 -1
- package/dist/i18n/en/Contractor.DocumentsList.json.js +20 -16
- package/dist/i18n/en/Contractor.DocumentsList.json.js.map +1 -1
- package/dist/i18n/en/Contractor.SignatureForm.json.js +5 -5
- package/dist/i18n/en/Employee.OnboardingSummary.json.js +24 -20
- package/dist/i18n/en/Employee.OnboardingSummary.json.js.map +1 -1
- package/dist/i18n/types.d.ts +12 -0
- package/dist/index.d.ts +8 -7
- package/dist/index.js +121 -134
- package/dist/index.js.map +1 -1
- package/dist/models/WA_RISK_CODES.d.ts +5 -2
- package/dist/models/WA_RISK_CODES.js.map +1 -1
- package/dist/models/external.d.ts +236 -226
- package/dist/partner-hook-utils/composeErrorHandler.d.ts +9 -4
- package/dist/partner-hook-utils/composeErrorHandler.js.map +1 -1
- package/dist/partner-hook-utils/form/SDKFormProvider.d.ts +10 -2
- package/dist/partner-hook-utils/form/SDKFormProvider.js +7 -1
- package/dist/partner-hook-utils/form/SDKFormProvider.js.map +1 -1
- package/dist/partner-hook-utils/form/composeSubmitHandler.d.ts +7 -4
- package/dist/partner-hook-utils/form/composeSubmitHandler.js.map +1 -1
- package/dist/partner-hook-utils/form/fields/index.d.ts +1 -0
- package/dist/partner-hook-utils/form/index.d.ts +3 -3
- package/dist/partner-hook-utils/form/useHookFieldResolution.js.map +1 -1
- package/dist/partner-hook-utils/index.d.ts +1 -1
- package/dist/partner-hook-utils/types.d.ts +7 -3
- package/dist/shared/constants.d.ts +2 -2
- package/dist/shared/constants.js +5 -5
- package/dist/shared/constants.js.map +1 -1
- package/dist/style.css +1 -1
- package/dist/types/Helpers.d.ts +11 -0
- package/dist/types/hooks.d.ts +2 -2
- package/dist/types/sdkError.js +3 -3
- package/dist/types/sdkError.js.map +1 -1
- package/docs/guides/endpoint-inventory.json +1201 -297
- package/package.json +12 -12
package/dist/components/Employee/Documents/shared/useSignEmployeeForm/useSignEmployeeForm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useSignEmployeeForm.js","sources":["../../../../../../src/components/Employee/Documents/shared/useSignEmployeeForm/useSignEmployeeForm.tsx"],"sourcesContent":["import type { ComponentType, JSX } from 'react'\nimport { useMemo, useCallback, useState, useEffect } from 'react'\nimport { useForm } from 'react-hook-form'\nimport { zodResolver } from '@hookform/resolvers/zod'\nimport type { Form } from '@gusto/embedded-api-v-2026-02-01/models/components/form'\nimport { useEmployeeFormsGet } from '@gusto/embedded-api-v-2026-02-01/react-query/employeeFormsGet'\nimport { useEmployeeFormsGetPdf } from '@gusto/embedded-api-v-2026-02-01/react-query/employeeFormsGetPdf'\nimport { useEmployeeFormsSignMutation } from '@gusto/embedded-api-v-2026-02-01/react-query/employeeFormsSign'\nimport {\n createSignEmployeeFormSchema,\n MAX_PREPARERS,\n PREPARER_FIELDS_BY_INDEX,\n PREPARERS_BY_INDEX,\n type SignEmployeeFormData,\n type SignEmployeeFormOutputs,\n} from './signEmployeeFormSchema'\nimport {\n SignatureField,\n ConfirmSignatureField,\n UsedPreparerField,\n type SignatureFieldProps,\n type ConfirmSignatureFieldProps,\n type UsedPreparerFieldProps,\n type PreparerTextFieldProps,\n type PreparerSelectFieldProps,\n type PreparerCheckboxFieldProps,\n Preparer1FirstName,\n Preparer1LastName,\n Preparer1Street1,\n Preparer1Street2,\n Preparer1City,\n Preparer1State,\n Preparer1Zip,\n Preparer1Signature,\n Preparer1ConfirmSignature,\n Preparer2FirstName,\n Preparer2LastName,\n Preparer2Street1,\n Preparer2Street2,\n Preparer2City,\n Preparer2State,\n Preparer2Zip,\n Preparer2Signature,\n Preparer2ConfirmSignature,\n Preparer3FirstName,\n Preparer3LastName,\n Preparer3Street1,\n Preparer3Street2,\n Preparer3City,\n Preparer3State,\n Preparer3Zip,\n Preparer3Signature,\n Preparer3ConfirmSignature,\n Preparer4FirstName,\n Preparer4LastName,\n Preparer4Street1,\n Preparer4Street2,\n Preparer4City,\n Preparer4State,\n Preparer4Zip,\n Preparer4Signature,\n Preparer4ConfirmSignature,\n} from './fields'\nimport { useDeriveFieldsMetadata } from '@/partner-hook-utils/form/useDeriveFieldsMetadata'\nimport { useHookFormInternals } from '@/partner-hook-utils/form/useHookFormInternals'\nimport { withOptions } from '@/partner-hook-utils/form/withOptions'\nimport { createGetFormSubmissionValues } from '@/partner-hook-utils/form/getFormSubmissionValues'\nimport { composeErrorHandler } from '@/partner-hook-utils/composeErrorHandler'\nimport type {\n BaseFormHookReady,\n FieldMetadata,\n FieldMetadataWithOptions,\n HookLoadingResult,\n HookSubmitResult,\n} from '@/partner-hook-utils/types'\nimport { useBaseSubmit } from '@/components/Base/useBaseSubmit'\nimport { I9_FORM_NAME, STATES_ABBR, type StateAbbreviation } from '@/shared/constants'\n\nconst stateOptions = STATES_ABBR.map(abbr => ({ label: abbr, value: abbr }))\n\n// ── Preparer field groups ──────────────────────────────────────────────\n\nconst preparer1Fields = {\n FirstName: Preparer1FirstName,\n LastName: Preparer1LastName,\n Street1: Preparer1Street1,\n Street2: Preparer1Street2,\n City: Preparer1City,\n State: Preparer1State,\n Zip: Preparer1Zip,\n Signature: Preparer1Signature,\n ConfirmSignature: Preparer1ConfirmSignature,\n} satisfies PreparerFieldGroup\n\nconst preparer2Fields = {\n FirstName: Preparer2FirstName,\n LastName: Preparer2LastName,\n Street1: Preparer2Street1,\n Street2: Preparer2Street2,\n City: Preparer2City,\n State: Preparer2State,\n Zip: Preparer2Zip,\n Signature: Preparer2Signature,\n ConfirmSignature: Preparer2ConfirmSignature,\n} satisfies PreparerFieldGroup\n\nconst preparer3Fields = {\n FirstName: Preparer3FirstName,\n LastName: Preparer3LastName,\n Street1: Preparer3Street1,\n Street2: Preparer3Street2,\n City: Preparer3City,\n State: Preparer3State,\n Zip: Preparer3Zip,\n Signature: Preparer3Signature,\n ConfirmSignature: Preparer3ConfirmSignature,\n} satisfies PreparerFieldGroup\n\nconst preparer4Fields = {\n FirstName: Preparer4FirstName,\n LastName: Preparer4LastName,\n Street1: Preparer4Street1,\n Street2: Preparer4Street2,\n City: Preparer4City,\n State: Preparer4State,\n Zip: Preparer4Zip,\n Signature: Preparer4Signature,\n ConfirmSignature: Preparer4ConfirmSignature,\n} satisfies PreparerFieldGroup\n\n/**\n * Field group exposed for each I-9 preparer/translator on {@link useSignEmployeeForm}.\n *\n * @remarks\n * Each preparer (1–4) exposes the same nine sub-fields covering name,\n * address, signature, and consent. Render the sub-fields directly on the\n * group, e.g. `<Fields.Preparer1.FirstName />`.\n *\n * @public\n */\nexport type PreparerFieldGroup = {\n /** Preparer's first name. */\n FirstName: (props: PreparerTextFieldProps) => JSX.Element\n /** Preparer's last name. */\n LastName: (props: PreparerTextFieldProps) => JSX.Element\n /** Preparer's street address line 1. */\n Street1: (props: PreparerTextFieldProps) => JSX.Element\n /** Preparer's street address line 2. */\n Street2: (props: PreparerTextFieldProps) => JSX.Element\n /** Preparer's city. */\n City: (props: PreparerTextFieldProps) => JSX.Element\n /** Preparer's state. */\n State: (props: PreparerSelectFieldProps) => JSX.Element\n /** Preparer's ZIP code. */\n Zip: (props: PreparerTextFieldProps) => JSX.Element\n /** Preparer's typed signature. */\n Signature: (props: PreparerTextFieldProps) => JSX.Element\n /** Preparer's electronic-signature consent checkbox. */\n ConfirmSignature: (props: PreparerCheckboxFieldProps) => JSX.Element\n}\n\n// ── Types ──────────────────────────────────────────────────────────────\n\n/**\n * Props for {@link useSignEmployeeForm}.\n *\n * @public\n */\nexport interface UseSignEmployeeFormProps {\n /** The associated employee identifier. */\n employeeId: string\n /** The UUID of the employee form to sign. */\n formId: string\n}\n\n/**\n * Field components exposed by {@link useSignEmployeeForm} on `form.Fields`.\n *\n * @remarks\n * `Signature` and `ConfirmSignature` are always present. `UsedPreparer` and\n * the `Preparer1`–`Preparer4` field groups are only defined when the form\n * being signed is an I-9 and the preparer count has reached that index —\n * always null-check before rendering.\n *\n * @public\n */\nexport interface SignEmployeeFormFields {\n /** Bound to `signature`. Text input for the employee's typed signature; always present. */\n Signature: ComponentType<SignatureFieldProps>\n /** Bound to `confirmSignature`. Checkbox for the employee's electronic-signature consent; always present. */\n ConfirmSignature: ComponentType<ConfirmSignatureFieldProps>\n /** Bound to `usedPreparer`. Radio group asking whether a preparer/translator assisted; defined only for I-9 forms. */\n UsedPreparer: ComponentType<UsedPreparerFieldProps> | undefined\n /** First preparer field group; defined only for I-9 forms when `preparers.count >= 1`. */\n Preparer1: PreparerFieldGroup | undefined\n /** Second preparer field group; defined only for I-9 forms when `preparers.count >= 2`. */\n Preparer2: PreparerFieldGroup | undefined\n /** Third preparer field group; defined only for I-9 forms when `preparers.count >= 3`. */\n Preparer3: PreparerFieldGroup | undefined\n /** Fourth preparer field group; defined only for I-9 forms when `preparers.count >= 4`. */\n Preparer4: PreparerFieldGroup | undefined\n}\n\n/**\n * Ready-state shape returned by {@link useSignEmployeeForm} once the form metadata and PDF have loaded.\n *\n * @public\n */\nexport interface UseSignEmployeeFormReady extends BaseFormHookReady<\n SignEmployeeFormFieldsMetadata,\n SignEmployeeFormData,\n SignEmployeeFormFields\n> {\n /** Loaded data — the form entity and a preview PDF URL. */\n data: {\n /** The employee form entity fetched from the API (includes `uuid`, `name`, `title`). */\n form: Form\n /** URL to the form's signed PDF for preview, or `undefined` while it is still being generated. */\n pdfUrl: string | null | undefined\n }\n /** Submit-state flags. */\n status: {\n /** `true` while the sign mutation is in flight. */\n isPending: boolean\n /** Always `'create'`; the hook always submits as a signing operation. */\n mode: 'create'\n }\n /** Imperative actions exposed by the hook. */\n actions: {\n /** Validates the form and submits the signature. Resolves with the signed form on success. */\n onSubmit: () => Promise<HookSubmitResult<Form> | undefined>\n /** Adds an additional preparer/translator section (up to 4). Defined only for I-9 forms. */\n addPreparer?: () => void\n /** Removes the last preparer/translator section and unregisters its fields. Defined only for I-9 forms. */\n removePreparer?: () => void\n }\n /** Form bindings — `Fields`, `fieldsMetadata`, and I-9 preparer state. */\n form: BaseFormHookReady<\n SignEmployeeFormFieldsMetadata,\n SignEmployeeFormData,\n SignEmployeeFormFields\n >['form'] & {\n /** Preparer-section state. Defined only for I-9 forms. */\n preparers?: {\n /** Current number of preparer sections, between 0 and 4. */\n count: number\n /** `true` when fewer than 4 preparers are active. */\n canAdd: boolean\n /** `true` when at least 1 preparer is active. */\n canRemove: boolean\n }\n }\n}\n\n/**\n * Field metadata for a standard (non-I-9) employee form — only the signature and\n * its confirmation are collected.\n *\n * @remarks\n * This is the {@link SignEmployeeFormFieldsMetadata} variant returned when the\n * form being signed is not an I-9. Every entry is a plain {@link FieldMetadata}.\n *\n * @public\n * @interface\n */\nexport type SignEmployeeBaseFieldsMetadata = {\n /** The typed-signature field. */\n signature: FieldMetadata\n /** The signature-confirmation field. */\n confirmSignature: FieldMetadata\n}\n\n/**\n * Field metadata for an I-9 employee form, which additionally collects\n * preparer/translator certification for up to four preparers.\n *\n * @remarks\n * A superset of {@link SignEmployeeBaseFieldsMetadata}. `usedPreparer` is a\n * yes/no radio and each `preparer{N}State` is a US-state select\n * ({@link StateAbbreviation}); every other preparer field is a plain text\n * {@link FieldMetadata}. Preparer entries beyond the active preparer count are\n * still typed here but only populated once that preparer section is added.\n *\n * @public\n * @interface\n */\nexport type SignEmployeeI9FieldsMetadata = Omit<\n Record<keyof SignEmployeeFormData, FieldMetadata>,\n 'usedPreparer' | 'preparerState' | 'preparer2State' | 'preparer3State' | 'preparer4State'\n> & {\n /** Yes/no radio: whether a preparer or translator assisted with the form. */\n usedPreparer: FieldMetadataWithOptions<boolean>\n /** US-state select for the first preparer's address. */\n preparerState: FieldMetadataWithOptions<StateAbbreviation>\n /** US-state select for the second preparer's address. */\n preparer2State: FieldMetadataWithOptions<StateAbbreviation>\n /** US-state select for the third preparer's address. */\n preparer3State: FieldMetadataWithOptions<StateAbbreviation>\n /** US-state select for the fourth preparer's address. */\n preparer4State: FieldMetadataWithOptions<StateAbbreviation>\n}\n\n/**\n * Shape of the `form.fieldsMetadata` object returned by {@link useSignEmployeeForm}.\n *\n * @remarks\n * A discriminated union keyed on whether the form is an I-9. Narrow with an `in`\n * check on a preparer field before reading the I-9 entries:\n *\n * ```ts\n * const { fieldsMetadata } = form\n * if ('usedPreparer' in fieldsMetadata) {\n * // fieldsMetadata is SignEmployeeI9FieldsMetadata\n * fieldsMetadata.preparerState.options\n * }\n * ```\n *\n * @public\n */\nexport type SignEmployeeFormFieldsMetadata =\n SignEmployeeBaseFieldsMetadata | SignEmployeeI9FieldsMetadata\n\nfunction buildSignEmployeeFieldsMetadata(\n baseMetadata: Record<keyof SignEmployeeFormData, FieldMetadata>,\n isI9: boolean,\n): SignEmployeeFormFieldsMetadata {\n if (!isI9) {\n return baseMetadata\n }\n\n return {\n ...baseMetadata,\n usedPreparer: withOptions(baseMetadata.usedPreparer, [\n { label: 'No, I completed this myself', value: 'no' },\n { label: 'Yes, I used a preparer/translator', value: 'yes' },\n ]),\n preparerState: withOptions(baseMetadata.preparerState, stateOptions, STATES_ABBR),\n preparer2State: withOptions(baseMetadata.preparer2State, stateOptions, STATES_ABBR),\n preparer3State: withOptions(baseMetadata.preparer3State, stateOptions, STATES_ABBR),\n preparer4State: withOptions(baseMetadata.preparer4State, stateOptions, STATES_ABBR),\n }\n}\n// ── Hook ───────────────────────────────────────────────────────────────\n\n/**\n * Headless hook for signing an employee form — captures a typed signature, electronic consent, and (for I-9 forms) preparer/translator certification.\n *\n * @remarks\n * The hook fetches the form metadata and PDF, then exposes the\n * {@link BaseFormHookReady} contract with `Fields`, `fieldsMetadata`,\n * `onSubmit`, and error handling. The hook inspects the form's `name` to\n * detect I-9 forms; when the form is an I-9, `Fields.UsedPreparer` and the\n * `Fields.Preparer1`–`Preparer4` field groups become defined, along with\n * `actions.addPreparer` / `actions.removePreparer` and `form.preparers`\n * state. Selecting `usedPreparer: 'yes'` automatically reveals the first\n * preparer section; switching back to `'no'` removes all preparer sections\n * and unregisters their fields.\n *\n * Unlike the CRUD-oriented form hooks (`useEmployeeDetailsForm`,\n * `useCompensationForm`, `useWorkAddressForm`), this hook does not accept\n * `defaultValues`, `requiredFields`, or `validationMode` — the form shape is\n * fixed and all fields except preparer street-2 are required.\n *\n * @param props - See {@link UseSignEmployeeFormProps}.\n * @returns A {@link HookLoadingResult} while loading, or a {@link UseSignEmployeeFormReady} once the form is loaded.\n * @public\n *\n * @example\n * ```tsx\n * import { useSignEmployeeForm, SDKFormProvider } from '@gusto/embedded-react-sdk'\n *\n * function SignFormPage({ employeeId, formId }: { employeeId: string; formId: string }) {\n * const signForm = useSignEmployeeForm({ employeeId, formId })\n *\n * if (signForm.isLoading) return <div>Loading...</div>\n *\n * const { Fields } = signForm.form\n *\n * return (\n * <SDKFormProvider formHookResult={signForm}>\n * <form\n * onSubmit={e => {\n * e.preventDefault()\n * void signForm.actions.onSubmit()\n * }}\n * >\n * <Fields.Signature\n * label=\"Signature\"\n * description=\"Type your full, legal name.\"\n * validationMessages={{ REQUIRED: 'Signature is required' }}\n * />\n * <Fields.ConfirmSignature\n * label=\"I agree to sign electronically\"\n * validationMessages={{ REQUIRED: 'You must agree to sign electronically' }}\n * />\n * <button type=\"submit\" disabled={signForm.status.isPending}>\n * Sign form\n * </button>\n * </form>\n * </SDKFormProvider>\n * )\n * }\n * ```\n */\nexport function useSignEmployeeForm({\n employeeId,\n formId,\n}: UseSignEmployeeFormProps): HookLoadingResult | UseSignEmployeeFormReady {\n const formQuery = useEmployeeFormsGet({ employeeId, formId })\n const pdfQuery = useEmployeeFormsGetPdf({ employeeId, formId })\n\n const form = formQuery.data?.form\n const pdfUrl = pdfQuery.data?.formPdf?.documentUrl\n const isI9 = form?.name === I9_FORM_NAME\n\n const [preparerCount, setPreparerCount] = useState(0)\n\n const [schema, metadataConfig] = useMemo(\n () => createSignEmployeeFormSchema({ isI9, preparerCount }),\n [isI9, preparerCount],\n )\n\n const formMethods = useForm<SignEmployeeFormData, unknown, SignEmployeeFormOutputs>({\n resolver: zodResolver(schema),\n defaultValues: {\n signature: '',\n confirmSignature: false,\n usedPreparer: 'no',\n },\n })\n\n const { mutateAsync: signForm, isPending } = useEmployeeFormsSignMutation()\n\n const {\n baseSubmitHandler,\n error: submitError,\n setError: setSubmitError,\n } = useBaseSubmit('SignEmployeeForm')\n\n // The signed PDF is a preview convenience: `pdfUrl` is optional and both the\n // viewer and the download link already degrade gracefully when it's absent.\n // A failed — or not-yet-ready — PDF fetch must NOT surface as a page-level\n // signing error. In particular the global post-mutation invalidation forces a\n // `getPdf` refetch the instant a sign succeeds, which races backend generation\n // of the signed PDF; surfacing that transient failure as \"there was a problem\n // with your submission\" is misleading when the signature actually went through\n // (SDK-947). Only the form query feeds the error surface.\n const queries = [formQuery]\n const errorHandling = composeErrorHandler(queries, { submitError, setSubmitError })\n\n const baseMetadata = useDeriveFieldsMetadata(metadataConfig, formMethods.control)\n\n const fieldsMetadata = useMemo(\n () => buildSignEmployeeFieldsMetadata(baseMetadata, isI9),\n [baseMetadata, isI9],\n )\n\n const addPreparer = useCallback(() => {\n setPreparerCount(prev => Math.min(prev + 1, MAX_PREPARERS))\n }, [])\n\n const removePreparer = useCallback(() => {\n setPreparerCount(prev => {\n if (prev <= 0) return prev\n const preparerFields = PREPARER_FIELDS_BY_INDEX[prev - 1]\n if (!preparerFields) return prev\n for (const name of preparerFields) {\n formMethods.unregister(name)\n }\n return prev - 1\n })\n }, [formMethods.unregister])\n\n const usedPreparer = isI9 ? formMethods.watch('usedPreparer') : undefined\n\n useEffect(() => {\n if (!isI9) return\n if (usedPreparer === 'yes' && preparerCount === 0) {\n addPreparer()\n }\n if (usedPreparer === 'no' && preparerCount > 0) {\n for (let i = preparerCount; i > 0; i--) {\n removePreparer()\n }\n }\n }, [usedPreparer, isI9, preparerCount, addPreparer, removePreparer])\n\n const onSubmit = async (): Promise<HookSubmitResult<Form> | undefined> => {\n let submitResult: HookSubmitResult<Form> | undefined\n\n await new Promise<void>(resolve => {\n void formMethods.handleSubmit(\n async (data: SignEmployeeFormOutputs) => {\n await baseSubmitHandler(data, async payload => {\n const requestBody: Record<string, unknown> = {\n signatureText: payload.signature,\n agree: payload.confirmSignature,\n }\n\n if (isI9) {\n Object.assign(requestBody, buildPreparerPayload(payload, preparerCount))\n }\n\n const result = await signForm({\n request: {\n employeeId,\n formId: form!.uuid,\n requestBody: requestBody as {\n signatureText: string\n agree: boolean\n signedByIpAddress: string\n },\n },\n })\n\n if (result.form) {\n submitResult = { mode: 'create', data: result.form }\n }\n })\n resolve()\n },\n () => {\n resolve()\n },\n )()\n })\n\n return submitResult\n }\n\n const hookFormInternals = useHookFormInternals(formMethods)\n\n const isDataLoading = formQuery.isLoading || pdfQuery.isLoading\n\n if (isDataLoading || !form) {\n return { isLoading: true as const, errorHandling }\n }\n\n return {\n isLoading: false as const,\n data: { form, pdfUrl },\n status: { isPending, mode: 'create' as const },\n actions: {\n onSubmit,\n ...(isI9 ? { addPreparer, removePreparer } : {}),\n },\n errorHandling,\n form: {\n Fields: {\n Signature: SignatureField,\n ConfirmSignature: ConfirmSignatureField,\n UsedPreparer: isI9 ? UsedPreparerField : undefined,\n Preparer1: isI9 && preparerCount >= 1 ? preparer1Fields : undefined,\n Preparer2: isI9 && preparerCount >= 2 ? preparer2Fields : undefined,\n Preparer3: isI9 && preparerCount >= 3 ? preparer3Fields : undefined,\n Preparer4: isI9 && preparerCount >= 4 ? preparer4Fields : undefined,\n },\n fieldsMetadata,\n hookFormInternals,\n getFormSubmissionValues: createGetFormSubmissionValues(formMethods, schema),\n ...(isI9\n ? {\n preparers: {\n count: preparerCount,\n canAdd: preparerCount < MAX_PREPARERS,\n canRemove: preparerCount > 0,\n },\n }\n : {}),\n },\n }\n}\n\n// ── Helpers ─────────────────────────────────────────────────────────────\n\nfunction buildPreparerPayload(payload: SignEmployeeFormOutputs, count: number) {\n if (payload.usedPreparer !== 'yes' || count === 0) {\n return { preparer: false }\n }\n\n const result: Record<string, unknown> = { preparer: true }\n\n for (let index = 0; index < count; index++) {\n if (index > 0) {\n result[`preparer${String(index + 1)}`] = true\n }\n\n const preparer = PREPARERS_BY_INDEX[index]\n if (!preparer) continue\n\n result[preparer.firstName] = payload[preparer.firstName]\n result[preparer.lastName] = payload[preparer.lastName]\n result[preparer.street1] = payload[preparer.street1]\n if (payload[preparer.street2]) {\n result[preparer.street2] = payload[preparer.street2]\n }\n result[preparer.city] = payload[preparer.city]\n result[preparer.state] = payload[preparer.state]\n result[preparer.zip] = payload[preparer.zip]\n result[preparer.signature] = payload[preparer.signature]\n result[preparer.agree] = 'true'\n }\n\n return result\n}\n\n/**\n * Result of {@link useSignEmployeeForm} — a discriminated union on `isLoading`.\n *\n * @public\n */\nexport type UseSignEmployeeFormResult = HookLoadingResult | UseSignEmployeeFormReady\n"],"names":["stateOptions","STATES_ABBR","abbr","preparer1Fields","Preparer1FirstName","Preparer1LastName","Preparer1Street1","Preparer1Street2","Preparer1City","Preparer1State","Preparer1Zip","Preparer1Signature","Preparer1ConfirmSignature","preparer2Fields","Preparer2FirstName","Preparer2LastName","Preparer2Street1","Preparer2Street2","Preparer2City","Preparer2State","Preparer2Zip","Preparer2Signature","Preparer2ConfirmSignature","preparer3Fields","Preparer3FirstName","Preparer3LastName","Preparer3Street1","Preparer3Street2","Preparer3City","Preparer3State","Preparer3Zip","Preparer3Signature","Preparer3ConfirmSignature","preparer4Fields","Preparer4FirstName","Preparer4LastName","Preparer4Street1","Preparer4Street2","Preparer4City","Preparer4State","Preparer4Zip","Preparer4Signature","Preparer4ConfirmSignature","buildSignEmployeeFieldsMetadata","baseMetadata","isI9","withOptions","useSignEmployeeForm","employeeId","formId","formQuery","useEmployeeFormsGet","pdfQuery","useEmployeeFormsGetPdf","form","pdfUrl","I9_FORM_NAME","preparerCount","setPreparerCount","useState","schema","metadataConfig","useMemo","createSignEmployeeFormSchema","formMethods","useForm","zodResolver","signForm","isPending","useEmployeeFormsSignMutation","baseSubmitHandler","submitError","setSubmitError","useBaseSubmit","errorHandling","composeErrorHandler","useDeriveFieldsMetadata","fieldsMetadata","addPreparer","useCallback","prev","MAX_PREPARERS","removePreparer","preparerFields","PREPARER_FIELDS_BY_INDEX","name","usedPreparer","useEffect","i","onSubmit","submitResult","resolve","data","payload","requestBody","buildPreparerPayload","result","hookFormInternals","useHookFormInternals","SignatureField","ConfirmSignatureField","UsedPreparerField","createGetFormSubmissionValues","count","index","preparer","PREPARERS_BY_INDEX"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useSignEmployeeForm.js","sources":["../../../../../../src/components/Employee/Documents/shared/useSignEmployeeForm/useSignEmployeeForm.tsx"],"sourcesContent":["import type { ComponentType, JSX } from 'react'\nimport { useMemo, useCallback, useState, useEffect } from 'react'\nimport { useForm } from 'react-hook-form'\nimport { zodResolver } from '@hookform/resolvers/zod'\nimport type { Form } from '@gusto/embedded-api/models/components/form'\nimport { useEmployeeFormsGet } from '@gusto/embedded-api/react-query/employeeFormsGet'\nimport { useEmployeeFormsGetPdf } from '@gusto/embedded-api/react-query/employeeFormsGetPdf'\nimport { useEmployeeFormsSignMutation } from '@gusto/embedded-api/react-query/employeeFormsSign'\nimport {\n createSignEmployeeFormSchema,\n MAX_PREPARERS,\n PREPARER_FIELDS_BY_INDEX,\n PREPARERS_BY_INDEX,\n type SignEmployeeFormData,\n type SignEmployeeFormOutputs,\n} from './signEmployeeFormSchema'\nimport {\n SignatureField,\n ConfirmSignatureField,\n UsedPreparerField,\n type SignatureFieldProps,\n type ConfirmSignatureFieldProps,\n type UsedPreparerFieldProps,\n type PreparerTextFieldProps,\n type PreparerSelectFieldProps,\n type PreparerCheckboxFieldProps,\n Preparer1FirstName,\n Preparer1LastName,\n Preparer1Street1,\n Preparer1Street2,\n Preparer1City,\n Preparer1State,\n Preparer1Zip,\n Preparer1Signature,\n Preparer1ConfirmSignature,\n Preparer2FirstName,\n Preparer2LastName,\n Preparer2Street1,\n Preparer2Street2,\n Preparer2City,\n Preparer2State,\n Preparer2Zip,\n Preparer2Signature,\n Preparer2ConfirmSignature,\n Preparer3FirstName,\n Preparer3LastName,\n Preparer3Street1,\n Preparer3Street2,\n Preparer3City,\n Preparer3State,\n Preparer3Zip,\n Preparer3Signature,\n Preparer3ConfirmSignature,\n Preparer4FirstName,\n Preparer4LastName,\n Preparer4Street1,\n Preparer4Street2,\n Preparer4City,\n Preparer4State,\n Preparer4Zip,\n Preparer4Signature,\n Preparer4ConfirmSignature,\n} from './fields'\nimport { useDeriveFieldsMetadata } from '@/partner-hook-utils/form/useDeriveFieldsMetadata'\nimport { useHookFormInternals } from '@/partner-hook-utils/form/useHookFormInternals'\nimport { withOptions } from '@/partner-hook-utils/form/withOptions'\nimport { createGetFormSubmissionValues } from '@/partner-hook-utils/form/getFormSubmissionValues'\nimport { composeErrorHandler } from '@/partner-hook-utils/composeErrorHandler'\nimport type {\n BaseFormHookReady,\n FieldMetadata,\n FieldMetadataWithOptions,\n HookLoadingResult,\n HookSubmitResult,\n} from '@/partner-hook-utils/types'\nimport { useBaseSubmit } from '@/components/Base/useBaseSubmit'\nimport { I9_FORM_NAME, STATES_ABBR, type StateAbbreviation } from '@/shared/constants'\n\nconst stateOptions = STATES_ABBR.map(abbr => ({ label: abbr, value: abbr }))\n\n// ── Preparer field groups ──────────────────────────────────────────────\n\nconst preparer1Fields = {\n FirstName: Preparer1FirstName,\n LastName: Preparer1LastName,\n Street1: Preparer1Street1,\n Street2: Preparer1Street2,\n City: Preparer1City,\n State: Preparer1State,\n Zip: Preparer1Zip,\n Signature: Preparer1Signature,\n ConfirmSignature: Preparer1ConfirmSignature,\n} satisfies PreparerFieldGroup\n\nconst preparer2Fields = {\n FirstName: Preparer2FirstName,\n LastName: Preparer2LastName,\n Street1: Preparer2Street1,\n Street2: Preparer2Street2,\n City: Preparer2City,\n State: Preparer2State,\n Zip: Preparer2Zip,\n Signature: Preparer2Signature,\n ConfirmSignature: Preparer2ConfirmSignature,\n} satisfies PreparerFieldGroup\n\nconst preparer3Fields = {\n FirstName: Preparer3FirstName,\n LastName: Preparer3LastName,\n Street1: Preparer3Street1,\n Street2: Preparer3Street2,\n City: Preparer3City,\n State: Preparer3State,\n Zip: Preparer3Zip,\n Signature: Preparer3Signature,\n ConfirmSignature: Preparer3ConfirmSignature,\n} satisfies PreparerFieldGroup\n\nconst preparer4Fields = {\n FirstName: Preparer4FirstName,\n LastName: Preparer4LastName,\n Street1: Preparer4Street1,\n Street2: Preparer4Street2,\n City: Preparer4City,\n State: Preparer4State,\n Zip: Preparer4Zip,\n Signature: Preparer4Signature,\n ConfirmSignature: Preparer4ConfirmSignature,\n} satisfies PreparerFieldGroup\n\n/**\n * Field group exposed for each I-9 preparer/translator on {@link useSignEmployeeForm}.\n *\n * @remarks\n * Each preparer (1–4) exposes the same nine sub-fields covering name,\n * address, signature, and consent. Render the sub-fields directly on the\n * group, e.g. `<Fields.Preparer1.FirstName />`.\n *\n * @public\n */\nexport type PreparerFieldGroup = {\n /** Preparer's first name. */\n FirstName: (props: PreparerTextFieldProps) => JSX.Element\n /** Preparer's last name. */\n LastName: (props: PreparerTextFieldProps) => JSX.Element\n /** Preparer's street address line 1. */\n Street1: (props: PreparerTextFieldProps) => JSX.Element\n /** Preparer's street address line 2. */\n Street2: (props: PreparerTextFieldProps) => JSX.Element\n /** Preparer's city. */\n City: (props: PreparerTextFieldProps) => JSX.Element\n /** Preparer's state. */\n State: (props: PreparerSelectFieldProps) => JSX.Element\n /** Preparer's ZIP code. */\n Zip: (props: PreparerTextFieldProps) => JSX.Element\n /** Preparer's typed signature. */\n Signature: (props: PreparerTextFieldProps) => JSX.Element\n /** Preparer's electronic-signature consent checkbox. */\n ConfirmSignature: (props: PreparerCheckboxFieldProps) => JSX.Element\n}\n\n// ── Types ──────────────────────────────────────────────────────────────\n\n/**\n * Props for {@link useSignEmployeeForm}.\n *\n * @public\n */\nexport interface UseSignEmployeeFormProps {\n /** The associated employee identifier. */\n employeeId: string\n /** The UUID of the employee form to sign. */\n formId: string\n}\n\n/**\n * Field components exposed by {@link useSignEmployeeForm} on `form.Fields`.\n *\n * @remarks\n * `Signature` and `ConfirmSignature` are always present. `UsedPreparer` and\n * the `Preparer1`–`Preparer4` field groups are only defined when the form\n * being signed is an I-9 and the preparer count has reached that index —\n * always null-check before rendering.\n *\n * @public\n */\nexport interface SignEmployeeFormFields {\n /** Bound to `signature`. Text input for the employee's typed signature; always present. */\n Signature: ComponentType<SignatureFieldProps>\n /** Bound to `confirmSignature`. Checkbox for the employee's electronic-signature consent; always present. */\n ConfirmSignature: ComponentType<ConfirmSignatureFieldProps>\n /** Bound to `usedPreparer`. Radio group asking whether a preparer/translator assisted; defined only for I-9 forms. */\n UsedPreparer: ComponentType<UsedPreparerFieldProps> | undefined\n /** First preparer field group; defined only for I-9 forms when `preparers.count >= 1`. */\n Preparer1: PreparerFieldGroup | undefined\n /** Second preparer field group; defined only for I-9 forms when `preparers.count >= 2`. */\n Preparer2: PreparerFieldGroup | undefined\n /** Third preparer field group; defined only for I-9 forms when `preparers.count >= 3`. */\n Preparer3: PreparerFieldGroup | undefined\n /** Fourth preparer field group; defined only for I-9 forms when `preparers.count >= 4`. */\n Preparer4: PreparerFieldGroup | undefined\n}\n\n/**\n * Ready-state shape returned by {@link useSignEmployeeForm} once the form metadata and PDF have loaded.\n *\n * @public\n */\nexport interface UseSignEmployeeFormReady extends BaseFormHookReady<\n SignEmployeeFormFieldsMetadata,\n SignEmployeeFormData,\n SignEmployeeFormFields\n> {\n /** Loaded data — the form entity and a preview PDF URL. */\n data: {\n /** The employee form entity fetched from the API (includes `uuid`, `name`, `title`). */\n form: Form\n /** URL to the form's signed PDF for preview, or `undefined` while it is still being generated. */\n pdfUrl: string | null | undefined\n }\n /** Submit-state flags. */\n status: {\n /** `true` while the sign mutation is in flight. */\n isPending: boolean\n /** Always `'create'`; the hook always submits as a signing operation. */\n mode: 'create'\n }\n /** Imperative actions exposed by the hook. */\n actions: {\n /** Validates the form and submits the signature. Resolves with the signed form on success. */\n onSubmit: () => Promise<HookSubmitResult<Form> | undefined>\n /** Adds an additional preparer/translator section (up to 4). Defined only for I-9 forms. */\n addPreparer?: () => void\n /** Removes the last preparer/translator section and unregisters its fields. Defined only for I-9 forms. */\n removePreparer?: () => void\n }\n /** Form bindings — `Fields`, `fieldsMetadata`, and I-9 preparer state. */\n form: BaseFormHookReady<\n SignEmployeeFormFieldsMetadata,\n SignEmployeeFormData,\n SignEmployeeFormFields\n >['form'] & {\n /** Preparer-section state. Defined only for I-9 forms. */\n preparers?: {\n /** Current number of preparer sections, between 0 and 4. */\n count: number\n /** `true` when fewer than 4 preparers are active. */\n canAdd: boolean\n /** `true` when at least 1 preparer is active. */\n canRemove: boolean\n }\n }\n}\n\n/**\n * Field metadata for a standard (non-I-9) employee form — only the signature and\n * its confirmation are collected.\n *\n * @remarks\n * This is the {@link SignEmployeeFormFieldsMetadata} variant returned when the\n * form being signed is not an I-9. Every entry is a plain {@link FieldMetadata}.\n *\n * @public\n * @interface\n */\nexport type SignEmployeeBaseFieldsMetadata = {\n /** The typed-signature field. */\n signature: FieldMetadata\n /** The signature-confirmation field. */\n confirmSignature: FieldMetadata\n}\n\n/**\n * Field metadata for an I-9 employee form, which additionally collects\n * preparer/translator certification for up to four preparers.\n *\n * @remarks\n * A superset of {@link SignEmployeeBaseFieldsMetadata}. `usedPreparer` is a\n * yes/no radio and each `preparer{N}State` is a US-state select\n * ({@link StateAbbreviation}); every other preparer field is a plain text\n * {@link FieldMetadata}. Preparer entries beyond the active preparer count are\n * still typed here but only populated once that preparer section is added.\n *\n * @public\n * @interface\n */\nexport type SignEmployeeI9FieldsMetadata = Omit<\n Record<keyof SignEmployeeFormData, FieldMetadata>,\n 'usedPreparer' | 'preparerState' | 'preparer2State' | 'preparer3State' | 'preparer4State'\n> & {\n /** Yes/no radio: whether a preparer or translator assisted with the form. */\n usedPreparer: FieldMetadataWithOptions<boolean>\n /** US-state select for the first preparer's address. */\n preparerState: FieldMetadataWithOptions<StateAbbreviation>\n /** US-state select for the second preparer's address. */\n preparer2State: FieldMetadataWithOptions<StateAbbreviation>\n /** US-state select for the third preparer's address. */\n preparer3State: FieldMetadataWithOptions<StateAbbreviation>\n /** US-state select for the fourth preparer's address. */\n preparer4State: FieldMetadataWithOptions<StateAbbreviation>\n}\n\n/**\n * Shape of the `form.fieldsMetadata` object returned by {@link useSignEmployeeForm}.\n *\n * @remarks\n * A discriminated union keyed on whether the form is an I-9. Narrow with an `in`\n * check on a preparer field before reading the I-9 entries:\n *\n * ```ts\n * const { fieldsMetadata } = form\n * if ('usedPreparer' in fieldsMetadata) {\n * // fieldsMetadata is SignEmployeeI9FieldsMetadata\n * fieldsMetadata.preparerState.options\n * }\n * ```\n *\n * @public\n */\nexport type SignEmployeeFormFieldsMetadata =\n SignEmployeeBaseFieldsMetadata | SignEmployeeI9FieldsMetadata\n\nfunction buildSignEmployeeFieldsMetadata(\n baseMetadata: Record<keyof SignEmployeeFormData, FieldMetadata>,\n isI9: boolean,\n): SignEmployeeFormFieldsMetadata {\n if (!isI9) {\n return baseMetadata\n }\n\n return {\n ...baseMetadata,\n usedPreparer: withOptions(baseMetadata.usedPreparer, [\n { label: 'No, I completed this myself', value: 'no' },\n { label: 'Yes, I used a preparer/translator', value: 'yes' },\n ]),\n preparerState: withOptions(baseMetadata.preparerState, stateOptions, STATES_ABBR),\n preparer2State: withOptions(baseMetadata.preparer2State, stateOptions, STATES_ABBR),\n preparer3State: withOptions(baseMetadata.preparer3State, stateOptions, STATES_ABBR),\n preparer4State: withOptions(baseMetadata.preparer4State, stateOptions, STATES_ABBR),\n }\n}\n// ── Hook ───────────────────────────────────────────────────────────────\n\n/**\n * Headless hook for signing an employee form — captures a typed signature, electronic consent, and (for I-9 forms) preparer/translator certification.\n *\n * @remarks\n * The hook fetches the form metadata and PDF, then exposes the\n * {@link BaseFormHookReady} contract with `Fields`, `fieldsMetadata`,\n * `onSubmit`, and error handling. The hook inspects the form's `name` to\n * detect I-9 forms; when the form is an I-9, `Fields.UsedPreparer` and the\n * `Fields.Preparer1`–`Preparer4` field groups become defined, along with\n * `actions.addPreparer` / `actions.removePreparer` and `form.preparers`\n * state. Selecting `usedPreparer: 'yes'` automatically reveals the first\n * preparer section; switching back to `'no'` removes all preparer sections\n * and unregisters their fields.\n *\n * Unlike the CRUD-oriented form hooks (`useEmployeeDetailsForm`,\n * `useCompensationForm`, `useWorkAddressForm`), this hook does not accept\n * `defaultValues`, `requiredFields`, or `validationMode` — the form shape is\n * fixed and all fields except preparer street-2 are required.\n *\n * @param props - See {@link UseSignEmployeeFormProps}.\n * @returns A {@link HookLoadingResult} while loading, or a {@link UseSignEmployeeFormReady} once the form is loaded.\n * @public\n *\n * @example\n * ```tsx\n * import { useSignEmployeeForm, SDKFormProvider } from '@gusto/embedded-react-sdk'\n *\n * function SignFormPage({ employeeId, formId }: { employeeId: string; formId: string }) {\n * const signForm = useSignEmployeeForm({ employeeId, formId })\n *\n * if (signForm.isLoading) return <div>Loading...</div>\n *\n * const { Fields } = signForm.form\n *\n * return (\n * <SDKFormProvider formHookResult={signForm}>\n * <form\n * onSubmit={e => {\n * e.preventDefault()\n * void signForm.actions.onSubmit()\n * }}\n * >\n * <Fields.Signature\n * label=\"Signature\"\n * description=\"Type your full, legal name.\"\n * validationMessages={{ REQUIRED: 'Signature is required' }}\n * />\n * <Fields.ConfirmSignature\n * label=\"I agree to sign electronically\"\n * validationMessages={{ REQUIRED: 'You must agree to sign electronically' }}\n * />\n * <button type=\"submit\" disabled={signForm.status.isPending}>\n * Sign form\n * </button>\n * </form>\n * </SDKFormProvider>\n * )\n * }\n * ```\n */\nexport function useSignEmployeeForm({\n employeeId,\n formId,\n}: UseSignEmployeeFormProps): HookLoadingResult | UseSignEmployeeFormReady {\n const formQuery = useEmployeeFormsGet({ employeeId, formId })\n const pdfQuery = useEmployeeFormsGetPdf({ employeeId, formId })\n\n const form = formQuery.data?.form\n const pdfUrl = pdfQuery.data?.formPdf?.documentUrl\n const isI9 = form?.name === I9_FORM_NAME\n\n const [preparerCount, setPreparerCount] = useState(0)\n\n const [schema, metadataConfig] = useMemo(\n () => createSignEmployeeFormSchema({ isI9, preparerCount }),\n [isI9, preparerCount],\n )\n\n const formMethods = useForm<SignEmployeeFormData, unknown, SignEmployeeFormOutputs>({\n resolver: zodResolver(schema),\n defaultValues: {\n signature: '',\n confirmSignature: false,\n usedPreparer: 'no',\n },\n })\n\n const { mutateAsync: signForm, isPending } = useEmployeeFormsSignMutation()\n\n const {\n baseSubmitHandler,\n error: submitError,\n setError: setSubmitError,\n } = useBaseSubmit('SignEmployeeForm')\n\n // The signed PDF is a preview convenience: `pdfUrl` is optional and both the\n // viewer and the download link already degrade gracefully when it's absent.\n // A failed — or not-yet-ready — PDF fetch must NOT surface as a page-level\n // signing error. In particular the global post-mutation invalidation forces a\n // `getPdf` refetch the instant a sign succeeds, which races backend generation\n // of the signed PDF; surfacing that transient failure as \"there was a problem\n // with your submission\" is misleading when the signature actually went through\n // (SDK-947). Only the form query feeds the error surface.\n const queries = [formQuery]\n const errorHandling = composeErrorHandler(queries, { submitError, setSubmitError })\n\n const baseMetadata = useDeriveFieldsMetadata(metadataConfig, formMethods.control)\n\n const fieldsMetadata = useMemo(\n () => buildSignEmployeeFieldsMetadata(baseMetadata, isI9),\n [baseMetadata, isI9],\n )\n\n const addPreparer = useCallback(() => {\n setPreparerCount(prev => Math.min(prev + 1, MAX_PREPARERS))\n }, [])\n\n const removePreparer = useCallback(() => {\n setPreparerCount(prev => {\n if (prev <= 0) return prev\n const preparerFields = PREPARER_FIELDS_BY_INDEX[prev - 1]\n if (!preparerFields) return prev\n for (const name of preparerFields) {\n formMethods.unregister(name)\n }\n return prev - 1\n })\n }, [formMethods.unregister])\n\n const usedPreparer = isI9 ? formMethods.watch('usedPreparer') : undefined\n\n useEffect(() => {\n if (!isI9) return\n if (usedPreparer === 'yes' && preparerCount === 0) {\n addPreparer()\n }\n if (usedPreparer === 'no' && preparerCount > 0) {\n for (let i = preparerCount; i > 0; i--) {\n removePreparer()\n }\n }\n }, [usedPreparer, isI9, preparerCount, addPreparer, removePreparer])\n\n const onSubmit = async (): Promise<HookSubmitResult<Form> | undefined> => {\n let submitResult: HookSubmitResult<Form> | undefined\n\n await new Promise<void>(resolve => {\n void formMethods.handleSubmit(\n async (data: SignEmployeeFormOutputs) => {\n await baseSubmitHandler(data, async payload => {\n const requestBody: Record<string, unknown> = {\n signatureText: payload.signature,\n agree: payload.confirmSignature,\n }\n\n if (isI9) {\n Object.assign(requestBody, buildPreparerPayload(payload, preparerCount))\n }\n\n const result = await signForm({\n request: {\n employeeId,\n formId: form!.uuid,\n requestBody: requestBody as {\n signatureText: string\n agree: boolean\n signedByIpAddress: string\n },\n },\n })\n\n if (result.form) {\n submitResult = { mode: 'create', data: result.form }\n }\n })\n resolve()\n },\n () => {\n resolve()\n },\n )()\n })\n\n return submitResult\n }\n\n const hookFormInternals = useHookFormInternals(formMethods)\n\n const isDataLoading = formQuery.isLoading || pdfQuery.isLoading\n\n if (isDataLoading || !form) {\n return { isLoading: true as const, errorHandling }\n }\n\n return {\n isLoading: false as const,\n data: { form, pdfUrl },\n status: { isPending, mode: 'create' as const },\n actions: {\n onSubmit,\n ...(isI9 ? { addPreparer, removePreparer } : {}),\n },\n errorHandling,\n form: {\n Fields: {\n Signature: SignatureField,\n ConfirmSignature: ConfirmSignatureField,\n UsedPreparer: isI9 ? UsedPreparerField : undefined,\n Preparer1: isI9 && preparerCount >= 1 ? preparer1Fields : undefined,\n Preparer2: isI9 && preparerCount >= 2 ? preparer2Fields : undefined,\n Preparer3: isI9 && preparerCount >= 3 ? preparer3Fields : undefined,\n Preparer4: isI9 && preparerCount >= 4 ? preparer4Fields : undefined,\n },\n fieldsMetadata,\n hookFormInternals,\n getFormSubmissionValues: createGetFormSubmissionValues(formMethods, schema),\n ...(isI9\n ? {\n preparers: {\n count: preparerCount,\n canAdd: preparerCount < MAX_PREPARERS,\n canRemove: preparerCount > 0,\n },\n }\n : {}),\n },\n }\n}\n\n// ── Helpers ─────────────────────────────────────────────────────────────\n\nfunction buildPreparerPayload(payload: SignEmployeeFormOutputs, count: number) {\n if (payload.usedPreparer !== 'yes' || count === 0) {\n return { preparer: false }\n }\n\n const result: Record<string, unknown> = { preparer: true }\n\n for (let index = 0; index < count; index++) {\n if (index > 0) {\n result[`preparer${String(index + 1)}`] = true\n }\n\n const preparer = PREPARERS_BY_INDEX[index]\n if (!preparer) continue\n\n result[preparer.firstName] = payload[preparer.firstName]\n result[preparer.lastName] = payload[preparer.lastName]\n result[preparer.street1] = payload[preparer.street1]\n if (payload[preparer.street2]) {\n result[preparer.street2] = payload[preparer.street2]\n }\n result[preparer.city] = payload[preparer.city]\n result[preparer.state] = payload[preparer.state]\n result[preparer.zip] = payload[preparer.zip]\n result[preparer.signature] = payload[preparer.signature]\n result[preparer.agree] = 'true'\n }\n\n return result\n}\n\n/**\n * Result of {@link useSignEmployeeForm} — a discriminated union on `isLoading`.\n *\n * @public\n */\nexport type UseSignEmployeeFormResult = HookLoadingResult | UseSignEmployeeFormReady\n"],"names":["stateOptions","STATES_ABBR","abbr","preparer1Fields","Preparer1FirstName","Preparer1LastName","Preparer1Street1","Preparer1Street2","Preparer1City","Preparer1State","Preparer1Zip","Preparer1Signature","Preparer1ConfirmSignature","preparer2Fields","Preparer2FirstName","Preparer2LastName","Preparer2Street1","Preparer2Street2","Preparer2City","Preparer2State","Preparer2Zip","Preparer2Signature","Preparer2ConfirmSignature","preparer3Fields","Preparer3FirstName","Preparer3LastName","Preparer3Street1","Preparer3Street2","Preparer3City","Preparer3State","Preparer3Zip","Preparer3Signature","Preparer3ConfirmSignature","preparer4Fields","Preparer4FirstName","Preparer4LastName","Preparer4Street1","Preparer4Street2","Preparer4City","Preparer4State","Preparer4Zip","Preparer4Signature","Preparer4ConfirmSignature","buildSignEmployeeFieldsMetadata","baseMetadata","isI9","withOptions","useSignEmployeeForm","employeeId","formId","formQuery","useEmployeeFormsGet","pdfQuery","useEmployeeFormsGetPdf","form","pdfUrl","I9_FORM_NAME","preparerCount","setPreparerCount","useState","schema","metadataConfig","useMemo","createSignEmployeeFormSchema","formMethods","useForm","zodResolver","signForm","isPending","useEmployeeFormsSignMutation","baseSubmitHandler","submitError","setSubmitError","useBaseSubmit","errorHandling","composeErrorHandler","useDeriveFieldsMetadata","fieldsMetadata","addPreparer","useCallback","prev","MAX_PREPARERS","removePreparer","preparerFields","PREPARER_FIELDS_BY_INDEX","name","usedPreparer","useEffect","i","onSubmit","submitResult","resolve","data","payload","requestBody","buildPreparerPayload","result","hookFormInternals","useHookFormInternals","SignatureField","ConfirmSignatureField","UsedPreparerField","createGetFormSubmissionValues","count","index","preparer","PREPARERS_BY_INDEX"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EmployeeList.js","sources":["../../../../../src/components/Employee/EmployeeList/onboarding/EmployeeList.tsx"],"sourcesContent":["import type { OnboardingStatus } from '@gusto/embedded-api
|
|
1
|
+
{"version":3,"file":"EmployeeList.js","sources":["../../../../../src/components/Employee/EmployeeList/onboarding/EmployeeList.tsx"],"sourcesContent":["import type { OnboardingStatus } from '@gusto/embedded-api/models/operations/putv1employeesemployeeidonboardingstatus'\nimport { useEmployeeList } from '../shared/useEmployeeList'\nimport { EmployeeListView } from './EmployeeListView'\nimport { BaseBoundaries, BaseLayout, type BaseComponentInterface } from '@/components/Base/Base'\nimport { useI18n, useComponentDictionary } from '@/i18n'\nimport { componentEvents } from '@/shared/constants'\n\n/**\n * Props for {@link EmployeeList}.\n *\n * @public\n */\nexport interface EmployeeListProps extends BaseComponentInterface<'Employee.EmployeeList'> {\n /** The associated company identifier. */\n companyId: string\n /**\n * Controls visibility of the Continue button in the employee list.\n *\n * @remarks\n *\n * When `true`, displays a Continue button below the populated employee list and\n * a Skip button in the empty state. These controls trigger the `employee/onboarding/done` event,\n * allowing navigation to the next step in a multi-step flow (e.g., company onboarding).\n *\n * When `false` (default), hides both buttons. Use this when the employee list is the final destination\n * in its flow and no further navigation is needed (e.g., standalone employee onboarding where\n * the list is the terminal screen).\n *\n * @defaultValue `false`\n */\n showContinueButton?: boolean\n}\n\nfunction EmployeeListRoot({\n companyId,\n onEvent,\n dictionary,\n showContinueButton = false,\n}: EmployeeListProps) {\n useI18n('Employee.EmployeeList')\n useComponentDictionary('Employee.EmployeeList', dictionary)\n\n const employeeList = useEmployeeList({\n companyId,\n })\n\n if (employeeList.isLoading) {\n return <BaseLayout isLoading error={employeeList.errorHandling.errors} />\n }\n\n const handleEdit = (employeeId: string, onboardingStatus?: OnboardingStatus) => {\n onEvent(componentEvents.EMPLOYEE_UPDATE, { employeeId, onboardingStatus })\n }\n\n const handleAddEmployee = () => {\n onEvent(componentEvents.EMPLOYEE_CREATE)\n }\n\n const handleSkip = () => {\n onEvent(componentEvents.EMPLOYEE_ONBOARDING_DONE)\n }\n\n return (\n <BaseLayout error={employeeList.errorHandling.errors}>\n <EmployeeListView\n employees={employeeList.data.employees}\n isFetching={employeeList.status.isFetching}\n pagination={employeeList.pagination}\n status={employeeList.status}\n onEdit={handleEdit}\n onDelete={async (employeeId: string) => {\n await employeeList.actions.onDelete(employeeId)\n onEvent(componentEvents.EMPLOYEE_DELETED, { employeeId })\n }}\n onCancelSelfOnboarding={async (employeeId: string) => {\n const onboardingStatus = await employeeList.actions.onCancelSelfOnboarding(employeeId)\n if (!onboardingStatus) return\n onEvent(componentEvents.EMPLOYEE_ONBOARDING_STATUS_UPDATED, onboardingStatus)\n }}\n onReview={async (employeeId: string) => {\n const onboardingStatus = await employeeList.actions.onReview(employeeId)\n if (!onboardingStatus) return\n onEvent(componentEvents.EMPLOYEE_ONBOARDING_STATUS_UPDATED, onboardingStatus)\n onEvent(componentEvents.EMPLOYEE_UPDATE, {\n employeeId,\n onboardingStatus: onboardingStatus.onboardingStatus,\n })\n }}\n onAddEmployee={handleAddEmployee}\n onSkip={handleSkip}\n showContinueButton={showContinueButton}\n />\n </BaseLayout>\n )\n}\n\n/**\n * Renders a paginated list of a company's employees with per-row onboarding actions (edit,\n * delete, review, cancel self-onboarding) and an \"Add employee\" entry point.\n *\n * @events\n * | Event | Description | Data |\n * | ----- | ----------- | ---- |\n * | `employee/create` | Fired when the user clicks \"Add employee\". | — |\n * | `employee/update` | Fired when the user selects \"Edit\" or \"Review\" on a row. | `{ employeeId: string, onboardingStatus?: OnboardingStatus }` |\n * | `employee/deleted` | Fired after a row's delete action completes. | `{ employeeId: string }` |\n * | `employee/onboardingStatus/updated` | Fired after the \"Review\" or \"Cancel self-onboarding\" action updates an employee's onboarding status. | The updated `EmployeeOnboardingStatus` record |\n * | `employee/onboarding/done` | Fired when the user clicks the skip/done control to leave the onboarding employee list. | — |\n *\n * @public\n */\nexport function EmployeeList({ FallbackComponent, ...props }: EmployeeListProps) {\n return (\n <BaseBoundaries componentName=\"Employee.EmployeeList\" FallbackComponent={FallbackComponent}>\n <EmployeeListRoot {...props} />\n </BaseBoundaries>\n )\n}\n"],"names":["EmployeeListRoot","companyId","onEvent","dictionary","showContinueButton","useI18n","useComponentDictionary","employeeList","useEmployeeList","BaseLayout","handleEdit","employeeId","onboardingStatus","componentEvents","handleAddEmployee","handleSkip","jsx","EmployeeListView","EmployeeList","FallbackComponent","props","BaseBoundaries"],"mappings":";;;;;;AAiCA,SAASA,EAAiB;AAAA,EACxB,WAAAC;AAAA,EACA,SAAAC;AAAA,EACA,YAAAC;AAAA,EACA,oBAAAC,IAAqB;AACvB,GAAsB;AACpB,EAAAC,EAAQ,uBAAuB,GAC/BC,EAAuB,yBAAyBH,CAAU;AAE1D,QAAMI,IAAeC,EAAgB;AAAA,IACnC,WAAAP;AAAA,EAAA,CACD;AAED,MAAIM,EAAa;AACf,6BAAQE,GAAA,EAAW,WAAS,IAAC,OAAOF,EAAa,cAAc,QAAQ;AAGzE,QAAMG,IAAa,CAACC,GAAoBC,MAAwC;AAC9E,IAAAV,EAAQW,EAAgB,iBAAiB,EAAE,YAAAF,GAAY,kBAAAC,GAAkB;AAAA,EAC3E,GAEME,IAAoB,MAAM;AAC9B,IAAAZ,EAAQW,EAAgB,eAAe;AAAA,EACzC,GAEME,IAAa,MAAM;AACvB,IAAAb,EAAQW,EAAgB,wBAAwB;AAAA,EAClD;AAEA,SACE,gBAAAG,EAACP,GAAA,EAAW,OAAOF,EAAa,cAAc,QAC5C,UAAA,gBAAAS;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,WAAWV,EAAa,KAAK;AAAA,MAC7B,YAAYA,EAAa,OAAO;AAAA,MAChC,YAAYA,EAAa;AAAA,MACzB,QAAQA,EAAa;AAAA,MACrB,QAAQG;AAAA,MACR,UAAU,OAAOC,MAAuB;AACtC,cAAMJ,EAAa,QAAQ,SAASI,CAAU,GAC9CT,EAAQW,EAAgB,kBAAkB,EAAE,YAAAF,EAAA,CAAY;AAAA,MAC1D;AAAA,MACA,wBAAwB,OAAOA,MAAuB;AACpD,cAAMC,IAAmB,MAAML,EAAa,QAAQ,uBAAuBI,CAAU;AACrF,QAAKC,KACLV,EAAQW,EAAgB,oCAAoCD,CAAgB;AAAA,MAC9E;AAAA,MACA,UAAU,OAAOD,MAAuB;AACtC,cAAMC,IAAmB,MAAML,EAAa,QAAQ,SAASI,CAAU;AACvE,QAAKC,MACLV,EAAQW,EAAgB,oCAAoCD,CAAgB,GAC5EV,EAAQW,EAAgB,iBAAiB;AAAA,UACvC,YAAAF;AAAA,UACA,kBAAkBC,EAAiB;AAAA,QAAA,CACpC;AAAA,MACH;AAAA,MACA,eAAeE;AAAA,MACf,QAAQC;AAAA,MACR,oBAAAX;AAAA,IAAA;AAAA,EAAA,GAEJ;AAEJ;AAiBO,SAASc,EAAa,EAAE,mBAAAC,GAAmB,GAAGC,KAA4B;AAC/E,SACE,gBAAAJ,EAACK,KAAe,eAAc,yBAAwB,mBAAAF,GACpD,UAAA,gBAAAH,EAAChB,GAAA,EAAkB,GAAGoB,EAAA,CAAO,EAAA,CAC/B;AAEJ;"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { OnboardingStatus } from '@gusto/embedded-api
|
|
1
|
+
import { OnboardingStatus } from '@gusto/embedded-api/models/operations/putv1employeesemployeeidonboardingstatus';
|
|
2
2
|
import { UseEmployeeListResult, EmployeeWithActions } from '../shared/useEmployeeList';
|
|
3
3
|
/** @internal */
|
|
4
4
|
export interface EmployeeListViewProps extends Pick<Extract<UseEmployeeListResult, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EmployeeListView.js","sources":["../../../../../src/components/Employee/EmployeeList/onboarding/EmployeeListView.tsx"],"sourcesContent":["import { useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport type { OnboardingStatus } from '@gusto/embedded-api
|
|
1
|
+
{"version":3,"file":"EmployeeListView.js","sources":["../../../../../src/components/Employee/EmployeeList/onboarding/EmployeeListView.tsx"],"sourcesContent":["import { useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport type { OnboardingStatus } from '@gusto/embedded-api/models/operations/putv1employeesemployeeidonboardingstatus'\nimport type { UseEmployeeListResult, EmployeeWithActions } from '../shared/useEmployeeList'\nimport { DataView, EmptyData, ActionsLayout, useDataView, Flex } from '@/components/Common'\nimport { useComponentContext } from '@/contexts/ComponentAdapter/useComponentContext'\nimport { HamburgerMenu } from '@/components/Common/HamburgerMenu'\nimport { EmployeeOnboardingStatusBadge } from '@/components/Common/OnboardingStatusBadge'\nimport PencilSvg from '@/assets/icons/pencil.svg?react'\nimport TrashCanSvg from '@/assets/icons/trashcan.svg?react'\nimport { firstLastName } from '@/helpers/formattedStrings'\nimport PlusCircleIcon from '@/assets/icons/plus-circle.svg?react'\n\n/** @internal */\nexport interface EmployeeListViewProps extends Pick<\n Extract<UseEmployeeListResult, { isLoading: false }>,\n 'pagination' | 'status'\n> {\n employees: EmployeeWithActions[]\n isFetching: boolean\n onEdit: (employeeId: string, onboardingStatus?: OnboardingStatus) => void\n onDelete: (employeeId: string) => Promise<void>\n onCancelSelfOnboarding: (employeeId: string) => Promise<void>\n onReview: (employeeId: string) => Promise<void>\n onAddEmployee: () => void\n onSkip: () => void\n showContinueButton: boolean\n}\n\n/** @internal */\nexport function EmployeeListView({\n employees,\n isFetching,\n pagination,\n status,\n onEdit,\n onDelete,\n onCancelSelfOnboarding,\n onReview,\n onAddEmployee,\n onSkip,\n showContinueButton,\n}: EmployeeListViewProps) {\n const { t } = useTranslation('Employee.EmployeeList')\n const Components = useComponentContext()\n const [employeeToDelete, setEmployeeToDelete] = useState<string | null>(null)\n\n const { ...dataViewProps } = useDataView({\n data: employees,\n columns: [\n {\n key: 'name',\n title: t('nameLabel'),\n render: (employee: EmployeeWithActions) => {\n return firstLastName({\n first_name: employee.firstName,\n last_name: employee.lastName,\n })\n },\n },\n {\n key: 'status',\n title: t('statusLabel'),\n render: (employee: EmployeeWithActions) => (\n <EmployeeOnboardingStatusBadge\n onboarded={employee.onboarded}\n onboardingStatus={employee.onboardingStatus}\n />\n ),\n },\n ],\n itemMenu: employee => {\n const menuItems = []\n\n if (employee.allowedActions.includes('edit')) {\n menuItems.push({\n label: t('editCta'),\n onClick: () => {\n onEdit(employee.uuid, employee.onboardingStatus ?? undefined)\n },\n icon: <PencilSvg aria-hidden />,\n })\n }\n\n if (employee.allowedActions.includes('cancel_self_onboarding')) {\n menuItems.push({\n label: t('cancelSelfOnboardingCta'),\n onClick: () => {\n void onCancelSelfOnboarding(employee.uuid)\n },\n icon: <PencilSvg aria-hidden />,\n })\n }\n\n if (employee.allowedActions.includes('review')) {\n menuItems.push({\n label: t('reviewCta'),\n onClick: () => {\n void onReview(employee.uuid)\n },\n icon: <PencilSvg aria-hidden />,\n })\n }\n\n if (employee.allowedActions.includes('delete')) {\n menuItems.push({\n label: t('deleteCta'),\n onClick: () => {\n setEmployeeToDelete(employee.uuid)\n },\n icon: <TrashCanSvg aria-hidden />,\n })\n }\n\n return <HamburgerMenu items={menuItems} triggerLabel={t('hamburgerTitle')} />\n },\n isFetching,\n pagination,\n emptyState: () => (\n <EmptyData title={t('emptyTableTitle')} description={t('emptyTableDescription')}>\n <ActionsLayout justifyContent=\"center\">\n {showContinueButton && (\n <Components.Button variant=\"secondary\" onClick={onSkip}>\n {t('skipCta')}\n </Components.Button>\n )}\n <Components.Button variant=\"primary\" onClick={onAddEmployee} icon={<PlusCircleIcon />}>\n {t('addEmployeeCta')}\n </Components.Button>\n </ActionsLayout>\n </EmptyData>\n ),\n })\n\n return (\n <>\n <Flex flexDirection=\"column\" gap={24}>\n <Flex justifyContent=\"space-between\" alignItems=\"center\">\n <Components.Heading as=\"h2\">{t('title')}</Components.Heading>\n\n {employees.length > 0 && (\n <Components.Button\n variant=\"secondary\"\n onClick={onAddEmployee}\n icon={<PlusCircleIcon />}\n >\n {t('addAnotherCta')}\n </Components.Button>\n )}\n </Flex>\n\n <DataView label={t('employeeListLabel')} {...dataViewProps} />\n\n {showContinueButton && employees.length > 0 && (\n <ActionsLayout>\n <Components.Button onClick={onSkip}>{t('continueCta')}</Components.Button>\n </ActionsLayout>\n )}\n </Flex>\n\n <Components.Dialog\n isOpen={!!employeeToDelete}\n onClose={() => {\n setEmployeeToDelete(null)\n }}\n onPrimaryActionClick={async () => {\n if (employeeToDelete) {\n try {\n await onDelete(employeeToDelete)\n setEmployeeToDelete(null)\n } catch {\n // Keep dialog open on error\n }\n }\n }}\n isPrimaryActionLoading={status.isPending}\n isDestructive\n title={t('deleteDialog.title')}\n primaryActionLabel={t('deleteDialog.confirmCta')}\n closeActionLabel={t('deleteDialog.cancelCta')}\n >\n {t('deleteDialog.description')}\n </Components.Dialog>\n </>\n )\n}\n"],"names":["EmployeeListView","employees","isFetching","pagination","status","onEdit","onDelete","onCancelSelfOnboarding","onReview","onAddEmployee","onSkip","showContinueButton","useTranslation","Components","useComponentContext","employeeToDelete","setEmployeeToDelete","useState","dataViewProps","useDataView","employee","firstLastName","jsx","EmployeeOnboardingStatusBadge","menuItems","PencilSvg","TrashCanSvg","HamburgerMenu","EmptyData","jsxs","ActionsLayout","PlusCircleIcon","Fragment","Flex","DataView"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { Employee } from '@gusto/embedded-api
|
|
2
|
-
import { Job } from '@gusto/embedded-api
|
|
3
|
-
import { EmployeeOnboardingStatus as EmployeeOnboardingStatusEntity } from '@gusto/embedded-api
|
|
1
|
+
import { Employee } from '@gusto/embedded-api/models/components/employee';
|
|
2
|
+
import { Job } from '@gusto/embedded-api/models/components/job';
|
|
3
|
+
import { EmployeeOnboardingStatus as EmployeeOnboardingStatusEntity } from '@gusto/embedded-api/models/components/employeeonboardingstatus';
|
|
4
4
|
import { PaginationControlProps } from '../../../Common/PaginationControl/PaginationControlTypes';
|
|
5
5
|
import { HookLoadingResult, BaseHookReady } from '../../../../partner-hook-utils/types';
|
|
6
6
|
/**
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { useMemo as b } from "react";
|
|
2
|
-
import { useEmployeesList as L } from "@gusto/embedded-api
|
|
3
|
-
import { useEmployeesDeleteMutation as M } from "@gusto/embedded-api
|
|
4
|
-
import { useEmployeesUpdateOnboardingStatusMutation as w } from "@gusto/embedded-api
|
|
2
|
+
import { useEmployeesList as L } from "@gusto/embedded-api/react-query/employeesList";
|
|
3
|
+
import { useEmployeesDeleteMutation as M } from "@gusto/embedded-api/react-query/employeesDelete";
|
|
4
|
+
import { useEmployeesUpdateOnboardingStatusMutation as w } from "@gusto/embedded-api/react-query/employeesUpdateOnboardingStatus";
|
|
5
5
|
import { keepPreviousData as y } from "@tanstack/react-query";
|
|
6
6
|
import { usePagination as B } from "../../../../hooks/usePagination/usePagination.js";
|
|
7
7
|
import { useBaseSubmit as G } from "../../../Base/useBaseSubmit.js";
|
|
@@ -9,8 +9,7 @@ import { composeErrorHandler as R } from "../../../../partner-hook-utils/compose
|
|
|
9
9
|
import { EmployeeOnboardingStatus as r, EmployeeSelfOnboardingStatuses as v } from "../../../../shared/constants.js";
|
|
10
10
|
function C(e, s) {
|
|
11
11
|
const a = [];
|
|
12
|
-
return s !== "terminated" && (e.onboardingStatus === r.ADMIN_ONBOARDING_INCOMPLETE || e.onboardingStatus === r.SELF_ONBOARDING_PENDING_INVITE || e.onboardingStatus === r.SELF_ONBOARDING_AWAITING_ADMIN_REVIEW || e.onboardingStatus === r.ONBOARDING_COMPLETED) && a.push("edit"), e.onboardingStatus &&
|
|
13
|
-
v.has(e.onboardingStatus) && a.push("cancel_self_onboarding"), e.onboardingStatus === r.SELF_ONBOARDING_COMPLETED_BY_EMPLOYEE && a.push("review"), e.onboarded || a.push("delete"), s === "active" && a.push("dismiss"), s === "terminated" && a.push("rehire"), a;
|
|
12
|
+
return s !== "terminated" && (e.onboardingStatus === r.ADMIN_ONBOARDING_INCOMPLETE || e.onboardingStatus === r.SELF_ONBOARDING_PENDING_INVITE || e.onboardingStatus === r.SELF_ONBOARDING_AWAITING_ADMIN_REVIEW || e.onboardingStatus === r.ONBOARDING_COMPLETED) && a.push("edit"), e.onboardingStatus && v.has(e.onboardingStatus) && a.push("cancel_self_onboarding"), e.onboardingStatus === r.SELF_ONBOARDING_COMPLETED_BY_EMPLOYEE && a.push("review"), e.onboarded || a.push("delete"), s === "active" && a.push("dismiss"), s === "terminated" && a.push("rehire"), a;
|
|
14
13
|
}
|
|
15
14
|
function J({
|
|
16
15
|
companyId: e,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useEmployeeList.js","sources":["../../../../../src/components/Employee/EmployeeList/shared/useEmployeeList.tsx"],"sourcesContent":["import { useMemo } from 'react'\nimport { useEmployeesList } from '@gusto/embedded-api-v-2026-02-01/react-query/employeesList'\nimport type { Employee } from '@gusto/embedded-api-v-2026-02-01/models/components/employee'\nimport type { Job } from '@gusto/embedded-api-v-2026-02-01/models/components/job'\nimport type { EmployeeOnboardingStatus as EmployeeOnboardingStatusEntity } from '@gusto/embedded-api-v-2026-02-01/models/components/employeeonboardingstatus'\nimport { useEmployeesDeleteMutation } from '@gusto/embedded-api-v-2026-02-01/react-query/employeesDelete'\nimport { useEmployeesUpdateOnboardingStatusMutation } from '@gusto/embedded-api-v-2026-02-01/react-query/employeesUpdateOnboardingStatus'\nimport { keepPreviousData } from '@tanstack/react-query'\nimport { usePagination } from '@/hooks/usePagination/usePagination'\nimport type { PaginationControlProps } from '@/components/Common/PaginationControl/PaginationControlTypes'\nimport { useBaseSubmit } from '@/components/Base/useBaseSubmit'\nimport { composeErrorHandler } from '@/partner-hook-utils/composeErrorHandler'\nimport { EmployeeOnboardingStatus, EmployeeSelfOnboardingStatuses } from '@/shared/constants'\nimport type { HookLoadingResult, BaseHookReady } from '@/partner-hook-utils/types'\n\n/**\n * Action that may be performed on an employee row, determined by the employee's onboarding state\n * and the `employeeType` filter passed to {@link useEmployeeList}.\n *\n * @public\n */\nexport type EmployeeAction =\n 'edit' | 'delete' | 'cancel_self_onboarding' | 'review' | 'dismiss' | 'rehire'\n\n/**\n * An employee entity extended with the actions permitted on it and a reference to its primary job.\n *\n * @public\n */\nexport interface EmployeeWithActions extends Employee {\n /** Actions permitted for this employee given its onboarding status and the active filter. */\n allowedActions: EmployeeAction[]\n /** The employee's primary job, if one is marked primary. */\n primaryJob?: Job\n}\n\n/**\n * Filter applied to {@link useEmployeeList} that scopes the result set and tailors the per-row action list.\n *\n * @public\n */\nexport type EmployeeType = 'active' | 'onboarding' | 'terminated'\n\n/**\n * Props for {@link useEmployeeList}.\n *\n * @public\n */\nexport interface UseEmployeeListProps {\n /** The associated company identifier. */\n companyId: string\n /** Filters the list and tailors the allowed actions. Omit to list all employees. */\n employeeType?: EmployeeType\n}\n\n/**\n * Ready state of {@link useEmployeeList}.\n *\n * @public\n */\nexport interface UseEmployeeListReady extends BaseHookReady<\n { employees: EmployeeWithActions[] },\n { isFetching: boolean; isPending: boolean }\n> {\n /** Pagination controls for the current employee list page. */\n pagination: PaginationControlProps\n /** Actions that mutate an employee's state, gated by the entry's `allowedActions`. */\n actions: {\n /** Deletes the employee. */\n onDelete: (employeeId: string) => Promise<void>\n /** Moves the employee into the admin-review onboarding status. Resolves to the updated record, or `undefined` if the call failed. */\n onReview: (employeeId: string) => Promise<EmployeeOnboardingStatusEntity | undefined>\n /** Reverts a self-onboarding employee to admin-driven onboarding. Resolves to the updated record, or `undefined` if the call failed. */\n onCancelSelfOnboarding: (\n employeeId: string,\n ) => Promise<EmployeeOnboardingStatusEntity | undefined>\n }\n}\n\n/**\n * Return type of {@link useEmployeeList}.\n *\n * @public\n */\nexport type UseEmployeeListResult = HookLoadingResult | UseEmployeeListReady\n\nfunction deriveAllowedActions(employee: Employee, employeeType?: EmployeeType): EmployeeAction[] {\n const actions: EmployeeAction[] = []\n\n // Edit action - available for certain onboarding statuses, but not for terminated employees\n if (\n employeeType !== 'terminated' &&\n (employee.onboardingStatus === EmployeeOnboardingStatus.ADMIN_ONBOARDING_INCOMPLETE ||\n employee.onboardingStatus === EmployeeOnboardingStatus.SELF_ONBOARDING_PENDING_INVITE ||\n employee.onboardingStatus ===\n EmployeeOnboardingStatus.SELF_ONBOARDING_AWAITING_ADMIN_REVIEW ||\n employee.onboardingStatus === EmployeeOnboardingStatus.ONBOARDING_COMPLETED)\n ) {\n actions.push('edit')\n }\n\n // Cancel self onboarding - available for employees in self-onboarding flow\n if (\n employee.onboardingStatus &&\n // @ts-expect-error: onboardingStatus during runtime can be one of self onboarding statuses\n EmployeeSelfOnboardingStatuses.has(employee.onboardingStatus)\n ) {\n actions.push('cancel_self_onboarding')\n }\n\n // Review action - available when employee completed self-onboarding\n if (\n employee.onboardingStatus === EmployeeOnboardingStatus.SELF_ONBOARDING_COMPLETED_BY_EMPLOYEE\n ) {\n actions.push('review')\n }\n\n // Delete action - available for non-onboarded employees\n if (!employee.onboarded) {\n actions.push('delete')\n }\n\n // Tab-specific actions for ManagementEmployeeList\n if (employeeType === 'active') {\n actions.push('dismiss')\n }\n\n if (employeeType === 'terminated') {\n actions.push('rehire')\n }\n\n return actions\n}\n\n/**\n * Fetches a paginated list of a company's employees and decorates each entry with the actions\n * allowed for its current onboarding state.\n *\n * @remarks\n * `employeeType` maps to a server-side filter and changes which actions appear on each row:\n * `'active'` adds `dismiss`, `'terminated'` adds `rehire`, `'onboarding'` adds none. Omit it\n * to list every employee.\n *\n * Page changes use placeholder data: the previous page stays rendered while the next one loads,\n * and `status.isFetching` flips to `true` during the request.\n *\n * @param input - Company and optional filter for the list.\n * @returns A {@link HookLoadingResult} while the first page is in flight, or a {@link UseEmployeeListReady} once data has arrived.\n * @public\n *\n * @example\n * ```tsx\n * import { useEmployeeList } from '@gusto/embedded-react-sdk'\n *\n * function EmployeeListPage({ companyId }: { companyId: string }) {\n * const employeeList = useEmployeeList({ companyId, employeeType: 'onboarding' })\n *\n * if (employeeList.isLoading) return <div>Loading...</div>\n *\n * return (\n * <ul>\n * {employeeList.data.employees.map(employee => (\n * <li key={employee.uuid}>\n * {employee.firstName} {employee.lastName}\n * {employee.allowedActions.includes('delete') && (\n * <button onClick={() => employeeList.actions.onDelete(employee.uuid)}>Delete</button>\n * )}\n * </li>\n * ))}\n * </ul>\n * )\n * }\n * ```\n */\nexport function useEmployeeList({\n companyId,\n employeeType,\n}: UseEmployeeListProps): UseEmployeeListResult {\n const { currentPage, itemsPerPage, getPaginationProps } = usePagination()\n\n const queryParams = useMemo(() => {\n const baseParams = {\n companyId,\n page: currentPage,\n per: itemsPerPage,\n }\n\n switch (employeeType) {\n case 'active':\n return { ...baseParams, onboardedActive: true }\n case 'onboarding':\n return { ...baseParams, onboarded: false }\n case 'terminated':\n return { ...baseParams, terminated: true }\n default:\n return baseParams\n }\n }, [companyId, currentPage, itemsPerPage, employeeType])\n\n const employeesQuery = useEmployeesList(queryParams, { placeholderData: keepPreviousData })\n\n const deleteEmployeeMutation = useEmployeesDeleteMutation()\n const updateOnboardingStatusMutation = useEmployeesUpdateOnboardingStatusMutation()\n\n const {\n baseSubmitHandler,\n error: submitError,\n setError: setSubmitError,\n } = useBaseSubmit('EmployeeList')\n\n const errorHandling = composeErrorHandler([employeesQuery], { submitError, setSubmitError })\n\n const isPending = deleteEmployeeMutation.isPending || updateOnboardingStatusMutation.isPending\n\n const { data, isFetching } = employeesQuery\n\n const employees = useMemo<EmployeeWithActions[]>(() => {\n return (data?.showEmployees ?? []).map(employee => {\n const primaryJob = employee.jobs?.find(job => job.primary === true)\n\n return {\n ...employee,\n allowedActions: deriveAllowedActions(employee, employeeType),\n primaryJob,\n }\n })\n }, [data?.showEmployees, employeeType])\n\n const paginationProps = data?.httpMeta.response.headers\n ? getPaginationProps(data.httpMeta.response.headers, isFetching)\n : {\n handleNextPage: () => {},\n handleFirstPage: () => {},\n handleLastPage: () => {},\n handlePreviousPage: () => {},\n handleItemsPerPageChange: () => {},\n currentPage: 1,\n totalPages: 1,\n totalCount: 0,\n itemsPerPage: 5 as const,\n }\n\n const onDelete = async (employeeId: string): Promise<void> => {\n await baseSubmitHandler(employeeId, async id => {\n await deleteEmployeeMutation.mutateAsync({\n request: { employeeId: id },\n })\n })\n }\n\n const onReview = async (\n employeeId: string,\n ): Promise<EmployeeOnboardingStatusEntity | undefined> => {\n let onboardingStatus: EmployeeOnboardingStatusEntity | undefined\n\n await baseSubmitHandler(employeeId, async id => {\n const result = await updateOnboardingStatusMutation.mutateAsync({\n request: {\n employeeId: id,\n requestBody: {\n onboardingStatus: EmployeeOnboardingStatus.SELF_ONBOARDING_AWAITING_ADMIN_REVIEW,\n },\n },\n })\n\n onboardingStatus = result.employeeOnboardingStatus\n })\n\n return onboardingStatus\n }\n\n const onCancelSelfOnboarding = async (\n employeeId: string,\n ): Promise<EmployeeOnboardingStatusEntity | undefined> => {\n let onboardingStatus: EmployeeOnboardingStatusEntity | undefined\n\n await baseSubmitHandler(employeeId, async id => {\n const result = await updateOnboardingStatusMutation.mutateAsync({\n request: {\n employeeId: id,\n requestBody: {\n onboardingStatus: EmployeeOnboardingStatus.ADMIN_ONBOARDING_INCOMPLETE,\n },\n },\n })\n\n onboardingStatus = result.employeeOnboardingStatus\n })\n\n return onboardingStatus\n }\n\n const isLoading = !data && isFetching\n\n if (isLoading) {\n return {\n isLoading: true,\n errorHandling,\n }\n }\n\n return {\n isLoading: false,\n data: {\n employees,\n },\n pagination: paginationProps,\n status: { isFetching, isPending },\n actions: { onDelete, onReview, onCancelSelfOnboarding },\n errorHandling,\n }\n}\n"],"names":["deriveAllowedActions","employee","employeeType","actions","EmployeeOnboardingStatus","EmployeeSelfOnboardingStatuses","useEmployeeList","companyId","currentPage","itemsPerPage","getPaginationProps","usePagination","queryParams","useMemo","baseParams","employeesQuery","useEmployeesList","keepPreviousData","deleteEmployeeMutation","useEmployeesDeleteMutation","updateOnboardingStatusMutation","useEmployeesUpdateOnboardingStatusMutation","baseSubmitHandler","submitError","setSubmitError","useBaseSubmit","errorHandling","composeErrorHandler","isPending","data","isFetching","employees","primaryJob","job","paginationProps","onDelete","employeeId","id","onReview","onboardingStatus","onCancelSelfOnboarding"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useEmployeeList.js","sources":["../../../../../src/components/Employee/EmployeeList/shared/useEmployeeList.tsx"],"sourcesContent":["import { useMemo } from 'react'\nimport { useEmployeesList } from '@gusto/embedded-api/react-query/employeesList'\nimport type { Employee } from '@gusto/embedded-api/models/components/employee'\nimport type { Job } from '@gusto/embedded-api/models/components/job'\nimport type { EmployeeOnboardingStatus as EmployeeOnboardingStatusEntity } from '@gusto/embedded-api/models/components/employeeonboardingstatus'\nimport { useEmployeesDeleteMutation } from '@gusto/embedded-api/react-query/employeesDelete'\nimport { useEmployeesUpdateOnboardingStatusMutation } from '@gusto/embedded-api/react-query/employeesUpdateOnboardingStatus'\nimport { keepPreviousData } from '@tanstack/react-query'\nimport { usePagination } from '@/hooks/usePagination/usePagination'\nimport type { PaginationControlProps } from '@/components/Common/PaginationControl/PaginationControlTypes'\nimport { useBaseSubmit } from '@/components/Base/useBaseSubmit'\nimport { composeErrorHandler } from '@/partner-hook-utils/composeErrorHandler'\nimport { EmployeeOnboardingStatus, EmployeeSelfOnboardingStatuses } from '@/shared/constants'\nimport type { HookLoadingResult, BaseHookReady } from '@/partner-hook-utils/types'\n\n/**\n * Action that may be performed on an employee row, determined by the employee's onboarding state\n * and the `employeeType` filter passed to {@link useEmployeeList}.\n *\n * @public\n */\nexport type EmployeeAction =\n 'edit' | 'delete' | 'cancel_self_onboarding' | 'review' | 'dismiss' | 'rehire'\n\n/**\n * An employee entity extended with the actions permitted on it and a reference to its primary job.\n *\n * @public\n */\nexport interface EmployeeWithActions extends Employee {\n /** Actions permitted for this employee given its onboarding status and the active filter. */\n allowedActions: EmployeeAction[]\n /** The employee's primary job, if one is marked primary. */\n primaryJob?: Job\n}\n\n/**\n * Filter applied to {@link useEmployeeList} that scopes the result set and tailors the per-row action list.\n *\n * @public\n */\nexport type EmployeeType = 'active' | 'onboarding' | 'terminated'\n\n/**\n * Props for {@link useEmployeeList}.\n *\n * @public\n */\nexport interface UseEmployeeListProps {\n /** The associated company identifier. */\n companyId: string\n /** Filters the list and tailors the allowed actions. Omit to list all employees. */\n employeeType?: EmployeeType\n}\n\n/**\n * Ready state of {@link useEmployeeList}.\n *\n * @public\n */\nexport interface UseEmployeeListReady extends BaseHookReady<\n { employees: EmployeeWithActions[] },\n { isFetching: boolean; isPending: boolean }\n> {\n /** Pagination controls for the current employee list page. */\n pagination: PaginationControlProps\n /** Actions that mutate an employee's state, gated by the entry's `allowedActions`. */\n actions: {\n /** Deletes the employee. */\n onDelete: (employeeId: string) => Promise<void>\n /** Moves the employee into the admin-review onboarding status. Resolves to the updated record, or `undefined` if the call failed. */\n onReview: (employeeId: string) => Promise<EmployeeOnboardingStatusEntity | undefined>\n /** Reverts a self-onboarding employee to admin-driven onboarding. Resolves to the updated record, or `undefined` if the call failed. */\n onCancelSelfOnboarding: (\n employeeId: string,\n ) => Promise<EmployeeOnboardingStatusEntity | undefined>\n }\n}\n\n/**\n * Return type of {@link useEmployeeList}.\n *\n * @public\n */\nexport type UseEmployeeListResult = HookLoadingResult | UseEmployeeListReady\n\nfunction deriveAllowedActions(employee: Employee, employeeType?: EmployeeType): EmployeeAction[] {\n const actions: EmployeeAction[] = []\n\n // Edit action - available for certain onboarding statuses, but not for terminated employees\n if (\n employeeType !== 'terminated' &&\n (employee.onboardingStatus === EmployeeOnboardingStatus.ADMIN_ONBOARDING_INCOMPLETE ||\n employee.onboardingStatus === EmployeeOnboardingStatus.SELF_ONBOARDING_PENDING_INVITE ||\n employee.onboardingStatus ===\n EmployeeOnboardingStatus.SELF_ONBOARDING_AWAITING_ADMIN_REVIEW ||\n employee.onboardingStatus === EmployeeOnboardingStatus.ONBOARDING_COMPLETED)\n ) {\n actions.push('edit')\n }\n\n // Cancel self onboarding - available for employees in self-onboarding flow\n if (employee.onboardingStatus && EmployeeSelfOnboardingStatuses.has(employee.onboardingStatus)) {\n actions.push('cancel_self_onboarding')\n }\n\n // Review action - available when employee completed self-onboarding\n if (\n employee.onboardingStatus === EmployeeOnboardingStatus.SELF_ONBOARDING_COMPLETED_BY_EMPLOYEE\n ) {\n actions.push('review')\n }\n\n // Delete action - available for non-onboarded employees\n if (!employee.onboarded) {\n actions.push('delete')\n }\n\n // Tab-specific actions for ManagementEmployeeList\n if (employeeType === 'active') {\n actions.push('dismiss')\n }\n\n if (employeeType === 'terminated') {\n actions.push('rehire')\n }\n\n return actions\n}\n\n/**\n * Fetches a paginated list of a company's employees and decorates each entry with the actions\n * allowed for its current onboarding state.\n *\n * @remarks\n * `employeeType` maps to a server-side filter and changes which actions appear on each row:\n * `'active'` adds `dismiss`, `'terminated'` adds `rehire`, `'onboarding'` adds none. Omit it\n * to list every employee.\n *\n * Page changes use placeholder data: the previous page stays rendered while the next one loads,\n * and `status.isFetching` flips to `true` during the request.\n *\n * @param input - Company and optional filter for the list.\n * @returns A {@link HookLoadingResult} while the first page is in flight, or a {@link UseEmployeeListReady} once data has arrived.\n * @public\n *\n * @example\n * ```tsx\n * import { useEmployeeList } from '@gusto/embedded-react-sdk'\n *\n * function EmployeeListPage({ companyId }: { companyId: string }) {\n * const employeeList = useEmployeeList({ companyId, employeeType: 'onboarding' })\n *\n * if (employeeList.isLoading) return <div>Loading...</div>\n *\n * return (\n * <ul>\n * {employeeList.data.employees.map(employee => (\n * <li key={employee.uuid}>\n * {employee.firstName} {employee.lastName}\n * {employee.allowedActions.includes('delete') && (\n * <button onClick={() => employeeList.actions.onDelete(employee.uuid)}>Delete</button>\n * )}\n * </li>\n * ))}\n * </ul>\n * )\n * }\n * ```\n */\nexport function useEmployeeList({\n companyId,\n employeeType,\n}: UseEmployeeListProps): UseEmployeeListResult {\n const { currentPage, itemsPerPage, getPaginationProps } = usePagination()\n\n const queryParams = useMemo(() => {\n const baseParams = {\n companyId,\n page: currentPage,\n per: itemsPerPage,\n }\n\n switch (employeeType) {\n case 'active':\n return { ...baseParams, onboardedActive: true }\n case 'onboarding':\n return { ...baseParams, onboarded: false }\n case 'terminated':\n return { ...baseParams, terminated: true }\n default:\n return baseParams\n }\n }, [companyId, currentPage, itemsPerPage, employeeType])\n\n const employeesQuery = useEmployeesList(queryParams, { placeholderData: keepPreviousData })\n\n const deleteEmployeeMutation = useEmployeesDeleteMutation()\n const updateOnboardingStatusMutation = useEmployeesUpdateOnboardingStatusMutation()\n\n const {\n baseSubmitHandler,\n error: submitError,\n setError: setSubmitError,\n } = useBaseSubmit('EmployeeList')\n\n const errorHandling = composeErrorHandler([employeesQuery], { submitError, setSubmitError })\n\n const isPending = deleteEmployeeMutation.isPending || updateOnboardingStatusMutation.isPending\n\n const { data, isFetching } = employeesQuery\n\n const employees = useMemo<EmployeeWithActions[]>(() => {\n return (data?.showEmployees ?? []).map(employee => {\n const primaryJob = employee.jobs?.find(job => job.primary === true)\n\n return {\n ...employee,\n allowedActions: deriveAllowedActions(employee, employeeType),\n primaryJob,\n }\n })\n }, [data?.showEmployees, employeeType])\n\n const paginationProps = data?.httpMeta.response.headers\n ? getPaginationProps(data.httpMeta.response.headers, isFetching)\n : {\n handleNextPage: () => {},\n handleFirstPage: () => {},\n handleLastPage: () => {},\n handlePreviousPage: () => {},\n handleItemsPerPageChange: () => {},\n currentPage: 1,\n totalPages: 1,\n totalCount: 0,\n itemsPerPage: 5 as const,\n }\n\n const onDelete = async (employeeId: string): Promise<void> => {\n await baseSubmitHandler(employeeId, async id => {\n await deleteEmployeeMutation.mutateAsync({\n request: { employeeId: id },\n })\n })\n }\n\n const onReview = async (\n employeeId: string,\n ): Promise<EmployeeOnboardingStatusEntity | undefined> => {\n let onboardingStatus: EmployeeOnboardingStatusEntity | undefined\n\n await baseSubmitHandler(employeeId, async id => {\n const result = await updateOnboardingStatusMutation.mutateAsync({\n request: {\n employeeId: id,\n requestBody: {\n onboardingStatus: EmployeeOnboardingStatus.SELF_ONBOARDING_AWAITING_ADMIN_REVIEW,\n },\n },\n })\n\n onboardingStatus = result.employeeOnboardingStatus\n })\n\n return onboardingStatus\n }\n\n const onCancelSelfOnboarding = async (\n employeeId: string,\n ): Promise<EmployeeOnboardingStatusEntity | undefined> => {\n let onboardingStatus: EmployeeOnboardingStatusEntity | undefined\n\n await baseSubmitHandler(employeeId, async id => {\n const result = await updateOnboardingStatusMutation.mutateAsync({\n request: {\n employeeId: id,\n requestBody: {\n onboardingStatus: EmployeeOnboardingStatus.ADMIN_ONBOARDING_INCOMPLETE,\n },\n },\n })\n\n onboardingStatus = result.employeeOnboardingStatus\n })\n\n return onboardingStatus\n }\n\n const isLoading = !data && isFetching\n\n if (isLoading) {\n return {\n isLoading: true,\n errorHandling,\n }\n }\n\n return {\n isLoading: false,\n data: {\n employees,\n },\n pagination: paginationProps,\n status: { isFetching, isPending },\n actions: { onDelete, onReview, onCancelSelfOnboarding },\n errorHandling,\n }\n}\n"],"names":["deriveAllowedActions","employee","employeeType","actions","EmployeeOnboardingStatus","EmployeeSelfOnboardingStatuses","useEmployeeList","companyId","currentPage","itemsPerPage","getPaginationProps","usePagination","queryParams","useMemo","baseParams","employeesQuery","useEmployeesList","keepPreviousData","deleteEmployeeMutation","useEmployeesDeleteMutation","updateOnboardingStatusMutation","useEmployeesUpdateOnboardingStatusMutation","baseSubmitHandler","submitError","setSubmitError","useBaseSubmit","errorHandling","composeErrorHandler","isPending","data","isFetching","employees","primaryJob","job","paginationProps","onDelete","employeeId","id","onReview","onboardingStatus","onCancelSelfOnboarding"],"mappings":";;;;;;;;;AAsFA,SAASA,EAAqBC,GAAoBC,GAA+C;AAC/F,QAAMC,IAA4B,CAAA;AAGlC,SACED,MAAiB,iBAChBD,EAAS,qBAAqBG,EAAyB,+BACtDH,EAAS,qBAAqBG,EAAyB,kCACvDH,EAAS,qBACPG,EAAyB,yCAC3BH,EAAS,qBAAqBG,EAAyB,yBAEzDD,EAAQ,KAAK,MAAM,GAIjBF,EAAS,oBAAoBI,EAA+B,IAAIJ,EAAS,gBAAgB,KAC3FE,EAAQ,KAAK,wBAAwB,GAKrCF,EAAS,qBAAqBG,EAAyB,yCAEvDD,EAAQ,KAAK,QAAQ,GAIlBF,EAAS,aACZE,EAAQ,KAAK,QAAQ,GAInBD,MAAiB,YACnBC,EAAQ,KAAK,SAAS,GAGpBD,MAAiB,gBACnBC,EAAQ,KAAK,QAAQ,GAGhBA;AACT;AA0CO,SAASG,EAAgB;AAAA,EAC9B,WAAAC;AAAA,EACA,cAAAL;AACF,GAAgD;AAC9C,QAAM,EAAE,aAAAM,GAAa,cAAAC,GAAc,oBAAAC,EAAA,IAAuBC,EAAA,GAEpDC,IAAcC,EAAQ,MAAM;AAChC,UAAMC,IAAa;AAAA,MACjB,WAAAP;AAAA,MACA,MAAMC;AAAA,MACN,KAAKC;AAAA,IAAA;AAGP,YAAQP,GAAA;AAAA,MACN,KAAK;AACH,eAAO,EAAE,GAAGY,GAAY,iBAAiB,GAAA;AAAA,MAC3C,KAAK;AACH,eAAO,EAAE,GAAGA,GAAY,WAAW,GAAA;AAAA,MACrC,KAAK;AACH,eAAO,EAAE,GAAGA,GAAY,YAAY,GAAA;AAAA,MACtC;AACE,eAAOA;AAAA,IAAA;AAAA,EAEb,GAAG,CAACP,GAAWC,GAAaC,GAAcP,CAAY,CAAC,GAEjDa,IAAiBC,EAAiBJ,GAAa,EAAE,iBAAiBK,GAAkB,GAEpFC,IAAyBC,EAAA,GACzBC,IAAiCC,EAAA,GAEjC;AAAA,IACJ,mBAAAC;AAAA,IACA,OAAOC;AAAA,IACP,UAAUC;AAAA,EAAA,IACRC,EAAc,cAAc,GAE1BC,IAAgBC,EAAoB,CAACZ,CAAc,GAAG,EAAE,aAAAQ,GAAa,gBAAAC,GAAgB,GAErFI,IAAYV,EAAuB,aAAaE,EAA+B,WAE/E,EAAE,MAAAS,GAAM,YAAAC,EAAA,IAAef,GAEvBgB,IAAYlB,EAA+B,OACvCgB,GAAM,iBAAiB,CAAA,GAAI,IAAI,CAAA5B,MAAY;AACjD,UAAM+B,IAAa/B,EAAS,MAAM,KAAK,CAAAgC,MAAOA,EAAI,YAAY,EAAI;AAElE,WAAO;AAAA,MACL,GAAGhC;AAAA,MACH,gBAAgBD,EAAqBC,GAAUC,CAAY;AAAA,MAC3D,YAAA8B;AAAA,IAAA;AAAA,EAEJ,CAAC,GACA,CAACH,GAAM,eAAe3B,CAAY,CAAC,GAEhCgC,IAAkBL,GAAM,SAAS,SAAS,UAC5CnB,EAAmBmB,EAAK,SAAS,SAAS,SAASC,CAAU,IAC7D;AAAA,IACE,gBAAgB,MAAM;AAAA,IAAC;AAAA,IACvB,iBAAiB,MAAM;AAAA,IAAC;AAAA,IACxB,gBAAgB,MAAM;AAAA,IAAC;AAAA,IACvB,oBAAoB,MAAM;AAAA,IAAC;AAAA,IAC3B,0BAA0B,MAAM;AAAA,IAAC;AAAA,IACjC,aAAa;AAAA,IACb,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,cAAc;AAAA,EAAA,GAGdK,IAAW,OAAOC,MAAsC;AAC5D,UAAMd,EAAkBc,GAAY,OAAMC,MAAM;AAC9C,YAAMnB,EAAuB,YAAY;AAAA,QACvC,SAAS,EAAE,YAAYmB,EAAA;AAAA,MAAG,CAC3B;AAAA,IACH,CAAC;AAAA,EACH,GAEMC,IAAW,OACfF,MACwD;AACxD,QAAIG;AAEJ,iBAAMjB,EAAkBc,GAAY,OAAMC,MAAM;AAU9C,MAAAE,KATe,MAAMnB,EAA+B,YAAY;AAAA,QAC9D,SAAS;AAAA,UACP,YAAYiB;AAAA,UACZ,aAAa;AAAA,YACX,kBAAkBjC,EAAyB;AAAA,UAAA;AAAA,QAC7C;AAAA,MACF,CACD,GAEyB;AAAA,IAC5B,CAAC,GAEMmC;AAAA,EACT,GAEMC,IAAyB,OAC7BJ,MACwD;AACxD,QAAIG;AAEJ,iBAAMjB,EAAkBc,GAAY,OAAMC,MAAM;AAU9C,MAAAE,KATe,MAAMnB,EAA+B,YAAY;AAAA,QAC9D,SAAS;AAAA,UACP,YAAYiB;AAAA,UACZ,aAAa;AAAA,YACX,kBAAkBjC,EAAyB;AAAA,UAAA;AAAA,QAC7C;AAAA,MACF,CACD,GAEyB;AAAA,IAC5B,CAAC,GAEMmC;AAAA,EACT;AAIA,SAFkB,CAACV,KAAQC,IAGlB;AAAA,IACL,WAAW;AAAA,IACX,eAAAJ;AAAA,EAAA,IAIG;AAAA,IACL,WAAW;AAAA,IACX,MAAM;AAAA,MACJ,WAAAK;AAAA,IAAA;AAAA,IAEF,YAAYG;AAAA,IACZ,QAAQ,EAAE,YAAAJ,GAAY,WAAAF,EAAA;AAAA,IACtB,SAAS,EAAE,UAAAO,GAAU,UAAAG,GAAU,wBAAAE,EAAA;AAAA,IAC/B,eAAAd;AAAA,EAAA;AAEJ;"}
|
package/dist/components/Employee/FederalTaxes/shared/useFederalTaxesForm/federalTaxesSchema.d.ts
CHANGED
|
@@ -34,7 +34,7 @@ export type FilingStatusValue = (typeof FILING_STATUS_VALUES)[number];
|
|
|
34
34
|
*
|
|
35
35
|
* @public
|
|
36
36
|
*/
|
|
37
|
-
export type FederalTaxesField = "
|
|
37
|
+
export type FederalTaxesField = "deductions" | "dependentsAmount" | "extraWithholding" | "filingStatus" | "otherIncome" | "twoJobs";
|
|
38
38
|
/**
|
|
39
39
|
* Shape of the values managed by the federal taxes form.
|
|
40
40
|
*
|
|
@@ -50,7 +50,7 @@ export type FederalTaxesFormOutputs = FederalTaxesFormData;
|
|
|
50
50
|
*
|
|
51
51
|
* @public
|
|
52
52
|
*/
|
|
53
|
-
export type FederalTaxesOptionalFieldsToRequire = { create?: ("
|
|
53
|
+
export type FederalTaxesOptionalFieldsToRequire = { create?: ("deductions" | "dependentsAmount" | "extraWithholding" | "otherIncome" | "twoJobs")[] | undefined; update?: ("deductions" | "dependentsAmount" | "extraWithholding" | "otherIncome" | "twoJobs")[] | undefined; };
|
|
54
54
|
/** @internal */
|
|
55
55
|
interface FederalTaxesSchemaOptions {
|
|
56
56
|
optionalFieldsToRequire?: FederalTaxesOptionalFieldsToRequire;
|
package/dist/components/Employee/FederalTaxes/shared/useFederalTaxesForm/federalTaxesSchema.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { z as e } from "zod";
|
|
2
|
-
import { FilingStatus as r } from "@gusto/embedded-api
|
|
2
|
+
import { FilingStatus as r } from "@gusto/embedded-api/models/operations/putv1employeesemployeeidfederaltaxes";
|
|
3
3
|
import { buildFormSchema as i } from "../../../../../partner-hook-utils/form/buildFormSchema.js";
|
|
4
4
|
import { coerceNaN as o, coerceStringBoolean as s } from "../../../../../partner-hook-utils/form/preprocessors.js";
|
|
5
5
|
const d = {
|
package/dist/components/Employee/FederalTaxes/shared/useFederalTaxesForm/federalTaxesSchema.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"federalTaxesSchema.js","sources":["../../../../../../src/components/Employee/FederalTaxes/shared/useFederalTaxesForm/federalTaxesSchema.ts"],"sourcesContent":["import { z } from 'zod'\nimport { FilingStatus } from '@gusto/embedded-api
|
|
1
|
+
{"version":3,"file":"federalTaxesSchema.js","sources":["../../../../../../src/components/Employee/FederalTaxes/shared/useFederalTaxesForm/federalTaxesSchema.ts"],"sourcesContent":["import { z } from 'zod'\nimport { FilingStatus } from '@gusto/embedded-api/models/operations/putv1employeesemployeeidfederaltaxes'\nimport {\n buildFormSchema,\n type RequiredFieldConfig,\n type OptionalFieldsToRequire,\n} from '@/partner-hook-utils/form/buildFormSchema'\nimport { coerceNaN, coerceStringBoolean } from '@/partner-hook-utils/form/preprocessors'\n\n// ── Error codes ────────────────────────────────────────────────────────\n\n/**\n * Validation error codes emitted by the federal taxes form schema. Map these\n * codes to localized copy in `validationMessages` when composing the hook.\n *\n * @public\n */\nexport const FederalTaxesErrorCodes = {\n REQUIRED: 'REQUIRED',\n} as const\n\n/**\n * Union of validation error code strings emitted by the federal taxes form\n * schema.\n *\n * @public\n */\nexport type FederalTaxesErrorCode =\n (typeof FederalTaxesErrorCodes)[keyof typeof FederalTaxesErrorCodes]\n\n// ── Filing status options ──────────────────────────────────────────────\n\n/**\n * Supported W-4 filing status values: single, married filing jointly, head of\n * household, and exempt from withholding.\n *\n * @public\n */\nexport const FILING_STATUS_VALUES = [\n FilingStatus.Single,\n FilingStatus.Married,\n FilingStatus.HeadOfHousehold,\n FilingStatus.ExemptFromWithholding,\n] as const\n\n/**\n * Union of filing status values that the form accepts.\n *\n * @public\n */\nexport type FilingStatusValue = (typeof FILING_STATUS_VALUES)[number]\n\n// ── Field validators ───────────────────────────────────────────────────\n\n// `filingStatus` is typed as `string` (not `z.enum`) so the initial empty form state is valid\n// for parsing while still failing the required check via `buildFormSchema`. The actual value is\n// constrained at the UI layer via the Select's options, and cast back to `FilingStatus` at\n// submission time.\nconst fieldValidators = {\n filingStatus: z.string(),\n twoJobs: z.preprocess(coerceStringBoolean, z.boolean()),\n dependentsAmount: z.preprocess(coerceNaN(0), z.number()),\n otherIncome: z.preprocess(coerceNaN(0), z.number()),\n deductions: z.preprocess(coerceNaN(0), z.number()),\n extraWithholding: z.preprocess(coerceNaN(0), z.number()),\n}\n\n/**\n * Field names accepted by the federal taxes form.\n *\n * @public\n */\nexport type FederalTaxesField = keyof typeof fieldValidators\n\n/**\n * Shape of the values managed by the federal taxes form.\n *\n * @public\n * @interface\n */\nexport type FederalTaxesFormData = {\n [K in keyof typeof fieldValidators]: z.infer<(typeof fieldValidators)[K]>\n}\n/** @internal */\nexport type FederalTaxesFormOutputs = FederalTaxesFormData\n\n// ── Required fields config ─────────────────────────────────────────────\n\n// Only `filingStatus` is required by the API on update. The remaining fields are\n// optional by default so partners can decide their own UX; the bundled\n// `<FederalTaxes>` component promotes them to required via `optionalFieldsToRequire`\n// to preserve the original (all-required) behavior.\nconst requiredFieldsConfig = {\n twoJobs: 'never',\n dependentsAmount: 'never',\n otherIncome: 'never',\n deductions: 'never',\n extraWithholding: 'never',\n} satisfies RequiredFieldConfig<typeof fieldValidators>\n\n// ── Schema factory ─────────────────────────────────────────────────────\n\n/**\n * Keys of optional federal taxes fields that can be promoted to required via\n * the hook's `optionalFieldsToRequire` option.\n *\n * @public\n */\nexport type FederalTaxesOptionalFieldsToRequire = OptionalFieldsToRequire<\n typeof requiredFieldsConfig\n>\n\n/** @internal */\ninterface FederalTaxesSchemaOptions {\n optionalFieldsToRequire?: FederalTaxesOptionalFieldsToRequire\n}\n\n/** @internal */\nexport function createFederalTaxesSchema(options: FederalTaxesSchemaOptions = {}) {\n const { optionalFieldsToRequire } = options\n\n return buildFormSchema(fieldValidators, {\n requiredFieldsConfig,\n requiredErrorCode: FederalTaxesErrorCodes.REQUIRED,\n mode: 'update',\n optionalFieldsToRequire,\n })\n}\n"],"names":["FederalTaxesErrorCodes","FILING_STATUS_VALUES","FilingStatus","fieldValidators","z","coerceStringBoolean","coerceNaN","requiredFieldsConfig","createFederalTaxesSchema","options","optionalFieldsToRequire","buildFormSchema"],"mappings":";;;;AAiBO,MAAMA,IAAyB;AAAA,EACpC,UAAU;AACZ,GAmBaC,IAAuB;AAAA,EAClCC,EAAa;AAAA,EACbA,EAAa;AAAA,EACbA,EAAa;AAAA,EACbA,EAAa;AACf,GAeMC,IAAkB;AAAA,EACtB,cAAcC,EAAE,OAAA;AAAA,EAChB,SAASA,EAAE,WAAWC,GAAqBD,EAAE,SAAS;AAAA,EACtD,kBAAkBA,EAAE,WAAWE,EAAU,CAAC,GAAGF,EAAE,QAAQ;AAAA,EACvD,aAAaA,EAAE,WAAWE,EAAU,CAAC,GAAGF,EAAE,QAAQ;AAAA,EAClD,YAAYA,EAAE,WAAWE,EAAU,CAAC,GAAGF,EAAE,QAAQ;AAAA,EACjD,kBAAkBA,EAAE,WAAWE,EAAU,CAAC,GAAGF,EAAE,QAAQ;AACzD,GA2BMG,IAAuB;AAAA,EAC3B,SAAS;AAAA,EACT,kBAAkB;AAAA,EAClB,aAAa;AAAA,EACb,YAAY;AAAA,EACZ,kBAAkB;AACpB;AAoBO,SAASC,EAAyBC,IAAqC,IAAI;AAChF,QAAM,EAAE,yBAAAC,MAA4BD;AAEpC,SAAOE,EAAgBR,GAAiB;AAAA,IACtC,sBAAAI;AAAA,IACA,mBAAmBP,EAAuB;AAAA,IAC1C,MAAM;AAAA,IACN,yBAAAU;AAAA,EAAA,CACD;AACH;"}
|
package/dist/components/Employee/FederalTaxes/shared/useFederalTaxesForm/useFederalTaxesForm.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ComponentType } from 'react';
|
|
2
2
|
import { UseFormProps } from 'react-hook-form';
|
|
3
|
-
import { EmployeeFederalTax } from '@gusto/embedded-api
|
|
3
|
+
import { EmployeeFederalTax } from '@gusto/embedded-api/models/components/employeefederaltax';
|
|
4
4
|
import { FederalTaxesOptionalFieldsToRequire, FederalTaxesFormData, FilingStatusValue } from './federalTaxesSchema';
|
|
5
5
|
import { FilingStatusFieldProps, TwoJobsFieldProps, DependentsAmountFieldProps, OtherIncomeFieldProps, DeductionsFieldProps, ExtraWithholdingFieldProps } from './fields';
|
|
6
6
|
import { BaseFormHookReady, FieldMetadata, HookLoadingResult, HookSubmitResult } from '../../../../../partner-hook-utils/types';
|
|
@@ -136,4 +136,4 @@ export type UseFederalTaxesFormResult = HookLoadingResult | UseFederalTaxesFormR
|
|
|
136
136
|
*
|
|
137
137
|
* @public
|
|
138
138
|
*/
|
|
139
|
-
export type FederalTaxesFieldsMetadata = { filingStatus: import("../../../../../partner-hook-utils/types").FieldMetadataWithOptions<"
|
|
139
|
+
export type FederalTaxesFieldsMetadata = { filingStatus: import("../../../../../partner-hook-utils/types").FieldMetadataWithOptions<"Exempt from withholding" | "Head of Household" | "Married" | "Single">; twoJobs: import("../../../../../partner-hook-utils/types").FieldMetadataWithOptions<boolean>; dependentsAmount: FieldMetadata; otherIncome: FieldMetadata; deductions: FieldMetadata; extraWithholding: FieldMetadata; };
|
package/dist/components/Employee/FederalTaxes/shared/useFederalTaxesForm/useFederalTaxesForm.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { useMemo as d } from "react";
|
|
2
2
|
import { useForm as _ } from "react-hook-form";
|
|
3
3
|
import { zodResolver as L } from "@hookform/resolvers/zod";
|
|
4
|
-
import { useEmployeeTaxSetupGetFederalTaxes as U } from "@gusto/embedded-api
|
|
5
|
-
import { useEmployeeTaxSetupUpdateFederalTaxesMutation as D } from "@gusto/embedded-api
|
|
4
|
+
import { useEmployeeTaxSetupGetFederalTaxes as U } from "@gusto/embedded-api/react-query/employeeTaxSetupGetFederalTaxes";
|
|
5
|
+
import { useEmployeeTaxSetupUpdateFederalTaxesMutation as D } from "@gusto/embedded-api/react-query/employeeTaxSetupUpdateFederalTaxes";
|
|
6
6
|
import { createFederalTaxesSchema as H, FILING_STATUS_VALUES as l } from "./federalTaxesSchema.js";
|
|
7
7
|
import { ExtraWithholdingField as k, DeductionsField as G, OtherIncomeField as B, DependentsAmountField as P, TwoJobsField as R, FilingStatusField as q } from "./fields.js";
|
|
8
8
|
import { useDeriveFieldsMetadata as z } from "../../../../../partner-hook-utils/form/useDeriveFieldsMetadata.js";
|
package/dist/components/Employee/FederalTaxes/shared/useFederalTaxesForm/useFederalTaxesForm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useFederalTaxesForm.js","sources":["../../../../../../src/components/Employee/FederalTaxes/shared/useFederalTaxesForm/useFederalTaxesForm.tsx"],"sourcesContent":["import type { ComponentType } from 'react'\nimport { useMemo } from 'react'\nimport { useForm } from 'react-hook-form'\nimport type { UseFormProps } from 'react-hook-form'\nimport { zodResolver } from '@hookform/resolvers/zod'\nimport type { EmployeeFederalTax } from '@gusto/embedded-api-v-2026-02-01/models/components/employeefederaltax'\nimport type { EmployeeFederalTaxRev2020 } from '@gusto/embedded-api-v-2026-02-01/models/components/employeefederaltaxrev2020'\nimport { useEmployeeTaxSetupGetFederalTaxes } from '@gusto/embedded-api-v-2026-02-01/react-query/employeeTaxSetupGetFederalTaxes'\nimport { useEmployeeTaxSetupUpdateFederalTaxesMutation } from '@gusto/embedded-api-v-2026-02-01/react-query/employeeTaxSetupUpdateFederalTaxes'\nimport type {\n FilingStatus,\n PutV1EmployeesEmployeeIdFederalTaxesRequestBody,\n} from '@gusto/embedded-api-v-2026-02-01/models/operations/putv1employeesemployeeidfederaltaxes'\nimport {\n createFederalTaxesSchema,\n FILING_STATUS_VALUES,\n type FederalTaxesOptionalFieldsToRequire,\n type FederalTaxesFormData,\n type FederalTaxesFormOutputs,\n type FilingStatusValue,\n} from './federalTaxesSchema'\nimport type {\n FilingStatusFieldProps,\n TwoJobsFieldProps,\n DependentsAmountFieldProps,\n OtherIncomeFieldProps,\n DeductionsFieldProps,\n ExtraWithholdingFieldProps,\n} from './fields'\nimport {\n FilingStatusField,\n TwoJobsField,\n DependentsAmountField,\n OtherIncomeField,\n DeductionsField,\n ExtraWithholdingField,\n} from './fields'\nimport { useDeriveFieldsMetadata } from '@/partner-hook-utils/form/useDeriveFieldsMetadata'\nimport { useHookFormInternals } from '@/partner-hook-utils/form/useHookFormInternals'\nimport { createGetFormSubmissionValues } from '@/partner-hook-utils/form/getFormSubmissionValues'\nimport { withOptions } from '@/partner-hook-utils/form/withOptions'\nimport { composeErrorHandler } from '@/partner-hook-utils/composeErrorHandler'\nimport type {\n BaseFormHookReady,\n FieldMetadata,\n FieldsMetadata,\n HookLoadingResult,\n HookSubmitResult,\n} from '@/partner-hook-utils/types'\nimport { useBaseSubmit } from '@/components/Base/useBaseSubmit'\nimport { SDKInternalError } from '@/types/sdkError'\n\nexport type { FederalTaxesOptionalFieldsToRequire } from './federalTaxesSchema'\n\n/**\n * Configuration options for {@link useFederalTaxesForm}.\n *\n * @remarks\n * The federal tax record is created automatically with the employee, so the\n * hook is always in update mode and only `employeeId` is required.\n *\n * @public\n */\nexport interface UseFederalTaxesFormProps {\n /** UUID of the employee whose federal tax record is being updated. */\n employeeId: string\n /** Override fields that are optional on update to be required. By default only `filingStatus` is required; pass `{ update: ['twoJobs', 'dependentsAmount', 'otherIncome', 'deductions', 'extraWithholding'] }` to require any subset. See {@link FederalTaxesOptionalFieldsToRequire}. */\n optionalFieldsToRequire?: FederalTaxesOptionalFieldsToRequire\n /** Pre-fill form values. Server data takes precedence when the employee already has values on file. */\n defaultValues?: Partial<FederalTaxesFormData>\n /** Passed through to react-hook-form. Defaults to `'onSubmit'`. */\n validationMode?: UseFormProps['mode']\n /** Auto-focus the first invalid field on submit. Set to `false` when using `composeSubmitHandler` so submit-time focus is coordinated across multiple forms. Defaults to `true`. */\n shouldFocusError?: boolean\n}\n\n/**\n * Pre-bound field components exposed on `useFederalTaxesForm().form.Fields`.\n *\n * @public\n */\nexport interface FederalTaxesFormFields {\n /** Bound to `filingStatus`. Filing status select. */\n FilingStatus: ComponentType<FilingStatusFieldProps>\n /** Bound to `twoJobs`. Multiple-jobs (Step 2c) radio group. */\n TwoJobs: ComponentType<TwoJobsFieldProps>\n /** Bound to `dependentsAmount`. Dependents amount (Step 3) currency input. */\n DependentsAmount: ComponentType<DependentsAmountFieldProps>\n /** Bound to `otherIncome`. Other income (Step 4a) currency input. */\n OtherIncome: ComponentType<OtherIncomeFieldProps>\n /** Bound to `deductions`. Deductions (Step 4b) currency input. */\n Deductions: ComponentType<DeductionsFieldProps>\n /** Bound to `extraWithholding`. Extra withholding (Step 4c) currency input. */\n ExtraWithholding: ComponentType<ExtraWithholdingFieldProps>\n}\n\n/**\n * Ready-state shape returned by {@link useFederalTaxesForm} once data has loaded.\n *\n * @remarks\n * Discriminated by `isLoading: false`. Extends {@link BaseFormHookReady} with\n * the federal-taxes specific `data`, `status`, and `actions`.\n *\n * @public\n */\nexport interface UseFederalTaxesFormReady extends BaseFormHookReady<\n FederalTaxesFieldsMetadata,\n FederalTaxesFormData,\n FederalTaxesFormFields\n> {\n /** The loaded federal tax record. */\n data: {\n /** The current federal tax record for the employee. */\n employeeFederalTax: EmployeeFederalTax\n }\n /** Submission state. `mode` is always `'update'` — the federal tax record is created with the employee, so this hook has no create mode. */\n status: {\n /** `true` while the update mutation is in flight. */\n isPending: boolean\n /** Always `'update'` — the federal tax record is created when the employee is created. */\n mode: 'update'\n }\n /** Submit actions exposed by the hook. */\n actions: {\n /** Validates the form, runs the update mutation, and resolves to a {@link HookSubmitResult} containing the updated record. Resolves to `undefined` on validation failure or mutation error. */\n onSubmit: () => Promise<HookSubmitResult<EmployeeFederalTax> | undefined>\n }\n}\n\nfunction isRev2020(federalTax: EmployeeFederalTax): federalTax is EmployeeFederalTaxRev2020 {\n return federalTax.w4DataType === 'rev_2020_w4'\n}\n\nfunction toFilingStatus(value: string | null | undefined): FilingStatusValue | '' {\n if (!value) return ''\n return FILING_STATUS_VALUES.find(allowed => allowed === value) ?? ''\n}\n\nfunction toNumber(value: string | null | undefined): number | undefined {\n if (value === null || value === undefined || value === '') return undefined\n const parsed = Number(value)\n return Number.isNaN(parsed) ? undefined : parsed\n}\n\n/** @internal */\nfunction buildFederalTaxesFieldsMetadata(\n base: Record<keyof FederalTaxesFormData, FieldMetadata>,\n {\n filingStatusOptions,\n twoJobsOptions,\n }: {\n filingStatusOptions: Array<{ value: FilingStatusValue; label: string }>\n twoJobsOptions: Array<{ value: string; label: string }>\n },\n) {\n return {\n filingStatus: withOptions<FilingStatusValue>(\n base.filingStatus,\n filingStatusOptions,\n FILING_STATUS_VALUES,\n ),\n twoJobs: withOptions<boolean>(base.twoJobs, twoJobsOptions, [true, false]),\n dependentsAmount: base.dependentsAmount,\n otherIncome: base.otherIncome,\n deductions: base.deductions,\n extraWithholding: base.extraWithholding,\n } satisfies FieldsMetadata\n}\n\n/**\n * Headless hook for updating an employee's federal tax (W-4) withholding information — filing status, multiple-jobs flag, dependents, other income, deductions, and extra withholding.\n *\n * @remarks\n * The federal tax record is created automatically with the employee, so this hook is always in update mode. Only the revised 2020 W-4 format is supported for updates. By default only `filingStatus` is required; promote any of `twoJobs`, `dependentsAmount`, `otherIncome`, `deductions`, or `extraWithholding` to required via `optionalFieldsToRequire.update`.\n *\n * @param props - See {@link UseFederalTaxesFormProps}.\n * @returns A {@link HookLoadingResult} while data is loading, or a {@link UseFederalTaxesFormReady} once the federal tax record is loaded.\n * @public\n *\n * @example\n * ```tsx\n * import { useFederalTaxesForm, SDKFormProvider } from '@gusto/embedded-react-sdk'\n *\n * function FederalTaxesPage({ employeeId }: { employeeId: string }) {\n * const federalTaxes = useFederalTaxesForm({ employeeId })\n *\n * if (federalTaxes.isLoading) return <div>Loading...</div>\n *\n * const { Fields } = federalTaxes.form\n *\n * return (\n * <SDKFormProvider formHookResult={federalTaxes}>\n * <form\n * onSubmit={e => {\n * e.preventDefault()\n * void federalTaxes.actions.onSubmit()\n * }}\n * >\n * <Fields.FilingStatus label=\"Federal filing status\" />\n * <Fields.TwoJobs label=\"Multiple jobs (2c)\" />\n * <Fields.DependentsAmount label=\"Dependents\" />\n * <Fields.OtherIncome label=\"Other income\" />\n * <Fields.Deductions label=\"Deductions\" />\n * <Fields.ExtraWithholding label=\"Extra withholding\" />\n * <button type=\"submit\" disabled={federalTaxes.status.isPending}>Save</button>\n * </form>\n * </SDKFormProvider>\n * )\n * }\n * ```\n */\nexport function useFederalTaxesForm({\n employeeId,\n optionalFieldsToRequire,\n defaultValues: partnerDefaults,\n validationMode = 'onSubmit',\n shouldFocusError = true,\n}: UseFederalTaxesFormProps): HookLoadingResult | UseFederalTaxesFormReady {\n const federalTaxesQuery = useEmployeeTaxSetupGetFederalTaxes({ employeeUuid: employeeId })\n\n const employeeFederalTax = federalTaxesQuery.data?.employeeFederalTax\n\n const [schema, metadataConfig] = useMemo(\n () => createFederalTaxesSchema({ optionalFieldsToRequire }),\n [optionalFieldsToRequire],\n )\n\n const filingStatusOptions = useMemo(\n () => FILING_STATUS_VALUES.map(value => ({ value, label: value })),\n [],\n )\n\n const twoJobsOptions = useMemo(\n () => [\n { label: 'Yes', value: 'true' },\n { label: 'No', value: 'false' },\n ],\n [],\n )\n\n const resolvedDefaults: FederalTaxesFormData = useMemo(() => {\n const rev2020Source =\n employeeFederalTax && isRev2020(employeeFederalTax) ? employeeFederalTax : undefined\n\n const fromServerFilingStatus = toFilingStatus(rev2020Source?.filingStatus)\n\n return {\n filingStatus: fromServerFilingStatus || partnerDefaults?.filingStatus || '',\n twoJobs: rev2020Source?.twoJobs ?? partnerDefaults?.twoJobs ?? false,\n dependentsAmount:\n toNumber(rev2020Source?.dependentsAmount) ?? partnerDefaults?.dependentsAmount ?? 0,\n otherIncome: toNumber(rev2020Source?.otherIncome) ?? partnerDefaults?.otherIncome ?? 0,\n deductions: toNumber(rev2020Source?.deductions) ?? partnerDefaults?.deductions ?? 0,\n extraWithholding:\n toNumber(rev2020Source?.extraWithholding) ?? partnerDefaults?.extraWithholding ?? 0,\n }\n }, [employeeFederalTax, partnerDefaults])\n\n const formMethods = useForm<FederalTaxesFormData, unknown, FederalTaxesFormOutputs>({\n resolver: zodResolver(schema),\n mode: validationMode,\n shouldFocusError,\n defaultValues: resolvedDefaults,\n values: resolvedDefaults,\n resetOptions: { keepDirtyValues: true },\n })\n\n const { mutateAsync: updateFederalTaxes, isPending } =\n useEmployeeTaxSetupUpdateFederalTaxesMutation()\n\n const {\n baseSubmitHandler,\n error: submitError,\n setError: setSubmitError,\n } = useBaseSubmit('FederalTaxesForm')\n\n const errorHandling = composeErrorHandler([federalTaxesQuery], { submitError, setSubmitError })\n\n const baseMetadata = useDeriveFieldsMetadata(metadataConfig, formMethods.control)\n const fieldsMetadata = buildFederalTaxesFieldsMetadata(baseMetadata, {\n filingStatusOptions,\n twoJobsOptions,\n })\n\n const onSubmit = async (): Promise<HookSubmitResult<EmployeeFederalTax> | undefined> => {\n let submitResult: HookSubmitResult<EmployeeFederalTax> | undefined\n\n await new Promise<void>(resolve => {\n void formMethods.handleSubmit(\n async (data: FederalTaxesFormOutputs) => {\n await baseSubmitHandler(data, async payload => {\n if (!employeeFederalTax) {\n throw new SDKInternalError('Federal taxes record was not loaded before submit')\n }\n\n const requestBody: PutV1EmployeesEmployeeIdFederalTaxesRequestBody = {\n filingStatus: payload.filingStatus as FilingStatus,\n twoJobs: payload.twoJobs,\n dependentsAmount: payload.dependentsAmount,\n otherIncome: payload.otherIncome,\n deductions: payload.deductions,\n extraWithholding: payload.extraWithholding,\n w4DataType: 'rev_2020_w4',\n version: employeeFederalTax.version,\n }\n\n const response = await updateFederalTaxes({\n request: {\n employeeUuid: employeeId,\n requestBody,\n },\n })\n\n if (!response.employeeFederalTax) {\n throw new SDKInternalError('Federal taxes update did not return an updated record')\n }\n\n submitResult = { mode: 'update', data: response.employeeFederalTax }\n })\n resolve()\n },\n () => {\n resolve()\n },\n )()\n })\n\n return submitResult\n }\n\n const hookFormInternals = useHookFormInternals(formMethods)\n\n if (federalTaxesQuery.isLoading || !employeeFederalTax) {\n return { isLoading: true as const, errorHandling }\n }\n\n return {\n isLoading: false as const,\n data: {\n employeeFederalTax,\n },\n status: {\n isPending,\n mode: 'update' as const,\n },\n actions: { onSubmit },\n errorHandling,\n form: {\n Fields: {\n FilingStatus: FilingStatusField,\n TwoJobs: TwoJobsField,\n DependentsAmount: DependentsAmountField,\n OtherIncome: OtherIncomeField,\n Deductions: DeductionsField,\n ExtraWithholding: ExtraWithholdingField,\n },\n fieldsMetadata,\n hookFormInternals,\n getFormSubmissionValues: createGetFormSubmissionValues(formMethods, schema),\n },\n }\n}\n\n/**\n * Discriminated union returned by {@link useFederalTaxesForm} — either the loading state or the ready state.\n *\n * @remarks\n * Use this type when threading the hook result through helpers (e.g.\n * presentational components). Discriminate on `isLoading` to narrow to\n * {@link UseFederalTaxesFormReady}.\n *\n * @public\n */\nexport type UseFederalTaxesFormResult = HookLoadingResult | UseFederalTaxesFormReady\n\n/**\n * Metadata for each {@link useFederalTaxesForm} field, exposed on `form.fieldsMetadata`.\n *\n * @remarks\n * Includes per-field `isDisabled`, `isRequired`, and the dynamic option list\n * for select and radio fields (`filingStatus`, `twoJobs`).\n *\n * @public\n */\nexport type FederalTaxesFieldsMetadata = ReturnType<typeof buildFederalTaxesFieldsMetadata>\n"],"names":["isRev2020","federalTax","toFilingStatus","value","FILING_STATUS_VALUES","allowed","toNumber","parsed","buildFederalTaxesFieldsMetadata","base","filingStatusOptions","twoJobsOptions","withOptions","useFederalTaxesForm","employeeId","optionalFieldsToRequire","partnerDefaults","validationMode","shouldFocusError","federalTaxesQuery","useEmployeeTaxSetupGetFederalTaxes","employeeFederalTax","schema","metadataConfig","useMemo","createFederalTaxesSchema","resolvedDefaults","rev2020Source","formMethods","useForm","zodResolver","updateFederalTaxes","isPending","useEmployeeTaxSetupUpdateFederalTaxesMutation","baseSubmitHandler","submitError","setSubmitError","useBaseSubmit","errorHandling","composeErrorHandler","baseMetadata","useDeriveFieldsMetadata","fieldsMetadata","onSubmit","submitResult","resolve","data","payload","SDKInternalError","requestBody","response","hookFormInternals","useHookFormInternals","FilingStatusField","TwoJobsField","DependentsAmountField","OtherIncomeField","DeductionsField","ExtraWithholdingField","createGetFormSubmissionValues"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useFederalTaxesForm.js","sources":["../../../../../../src/components/Employee/FederalTaxes/shared/useFederalTaxesForm/useFederalTaxesForm.tsx"],"sourcesContent":["import type { ComponentType } from 'react'\nimport { useMemo } from 'react'\nimport { useForm } from 'react-hook-form'\nimport type { UseFormProps } from 'react-hook-form'\nimport { zodResolver } from '@hookform/resolvers/zod'\nimport type { EmployeeFederalTax } from '@gusto/embedded-api/models/components/employeefederaltax'\nimport type { EmployeeFederalTaxRev2020 } from '@gusto/embedded-api/models/components/employeefederaltaxrev2020'\nimport { useEmployeeTaxSetupGetFederalTaxes } from '@gusto/embedded-api/react-query/employeeTaxSetupGetFederalTaxes'\nimport { useEmployeeTaxSetupUpdateFederalTaxesMutation } from '@gusto/embedded-api/react-query/employeeTaxSetupUpdateFederalTaxes'\nimport type {\n FilingStatus,\n PutV1EmployeesEmployeeIdFederalTaxesRequestBody,\n} from '@gusto/embedded-api/models/operations/putv1employeesemployeeidfederaltaxes'\nimport {\n createFederalTaxesSchema,\n FILING_STATUS_VALUES,\n type FederalTaxesOptionalFieldsToRequire,\n type FederalTaxesFormData,\n type FederalTaxesFormOutputs,\n type FilingStatusValue,\n} from './federalTaxesSchema'\nimport type {\n FilingStatusFieldProps,\n TwoJobsFieldProps,\n DependentsAmountFieldProps,\n OtherIncomeFieldProps,\n DeductionsFieldProps,\n ExtraWithholdingFieldProps,\n} from './fields'\nimport {\n FilingStatusField,\n TwoJobsField,\n DependentsAmountField,\n OtherIncomeField,\n DeductionsField,\n ExtraWithholdingField,\n} from './fields'\nimport { useDeriveFieldsMetadata } from '@/partner-hook-utils/form/useDeriveFieldsMetadata'\nimport { useHookFormInternals } from '@/partner-hook-utils/form/useHookFormInternals'\nimport { createGetFormSubmissionValues } from '@/partner-hook-utils/form/getFormSubmissionValues'\nimport { withOptions } from '@/partner-hook-utils/form/withOptions'\nimport { composeErrorHandler } from '@/partner-hook-utils/composeErrorHandler'\nimport type {\n BaseFormHookReady,\n FieldMetadata,\n FieldsMetadata,\n HookLoadingResult,\n HookSubmitResult,\n} from '@/partner-hook-utils/types'\nimport { useBaseSubmit } from '@/components/Base/useBaseSubmit'\nimport { SDKInternalError } from '@/types/sdkError'\n\nexport type { FederalTaxesOptionalFieldsToRequire } from './federalTaxesSchema'\n\n/**\n * Configuration options for {@link useFederalTaxesForm}.\n *\n * @remarks\n * The federal tax record is created automatically with the employee, so the\n * hook is always in update mode and only `employeeId` is required.\n *\n * @public\n */\nexport interface UseFederalTaxesFormProps {\n /** UUID of the employee whose federal tax record is being updated. */\n employeeId: string\n /** Override fields that are optional on update to be required. By default only `filingStatus` is required; pass `{ update: ['twoJobs', 'dependentsAmount', 'otherIncome', 'deductions', 'extraWithholding'] }` to require any subset. See {@link FederalTaxesOptionalFieldsToRequire}. */\n optionalFieldsToRequire?: FederalTaxesOptionalFieldsToRequire\n /** Pre-fill form values. Server data takes precedence when the employee already has values on file. */\n defaultValues?: Partial<FederalTaxesFormData>\n /** Passed through to react-hook-form. Defaults to `'onSubmit'`. */\n validationMode?: UseFormProps['mode']\n /** Auto-focus the first invalid field on submit. Set to `false` when using `composeSubmitHandler` so submit-time focus is coordinated across multiple forms. Defaults to `true`. */\n shouldFocusError?: boolean\n}\n\n/**\n * Pre-bound field components exposed on `useFederalTaxesForm().form.Fields`.\n *\n * @public\n */\nexport interface FederalTaxesFormFields {\n /** Bound to `filingStatus`. Filing status select. */\n FilingStatus: ComponentType<FilingStatusFieldProps>\n /** Bound to `twoJobs`. Multiple-jobs (Step 2c) radio group. */\n TwoJobs: ComponentType<TwoJobsFieldProps>\n /** Bound to `dependentsAmount`. Dependents amount (Step 3) currency input. */\n DependentsAmount: ComponentType<DependentsAmountFieldProps>\n /** Bound to `otherIncome`. Other income (Step 4a) currency input. */\n OtherIncome: ComponentType<OtherIncomeFieldProps>\n /** Bound to `deductions`. Deductions (Step 4b) currency input. */\n Deductions: ComponentType<DeductionsFieldProps>\n /** Bound to `extraWithholding`. Extra withholding (Step 4c) currency input. */\n ExtraWithholding: ComponentType<ExtraWithholdingFieldProps>\n}\n\n/**\n * Ready-state shape returned by {@link useFederalTaxesForm} once data has loaded.\n *\n * @remarks\n * Discriminated by `isLoading: false`. Extends {@link BaseFormHookReady} with\n * the federal-taxes specific `data`, `status`, and `actions`.\n *\n * @public\n */\nexport interface UseFederalTaxesFormReady extends BaseFormHookReady<\n FederalTaxesFieldsMetadata,\n FederalTaxesFormData,\n FederalTaxesFormFields\n> {\n /** The loaded federal tax record. */\n data: {\n /** The current federal tax record for the employee. */\n employeeFederalTax: EmployeeFederalTax\n }\n /** Submission state. `mode` is always `'update'` — the federal tax record is created with the employee, so this hook has no create mode. */\n status: {\n /** `true` while the update mutation is in flight. */\n isPending: boolean\n /** Always `'update'` — the federal tax record is created when the employee is created. */\n mode: 'update'\n }\n /** Submit actions exposed by the hook. */\n actions: {\n /** Validates the form, runs the update mutation, and resolves to a {@link HookSubmitResult} containing the updated record. Resolves to `undefined` on validation failure or mutation error. */\n onSubmit: () => Promise<HookSubmitResult<EmployeeFederalTax> | undefined>\n }\n}\n\nfunction isRev2020(federalTax: EmployeeFederalTax): federalTax is EmployeeFederalTaxRev2020 {\n return federalTax.w4DataType === 'rev_2020_w4'\n}\n\nfunction toFilingStatus(value: string | null | undefined): FilingStatusValue | '' {\n if (!value) return ''\n return FILING_STATUS_VALUES.find(allowed => allowed === value) ?? ''\n}\n\nfunction toNumber(value: string | null | undefined): number | undefined {\n if (value === null || value === undefined || value === '') return undefined\n const parsed = Number(value)\n return Number.isNaN(parsed) ? undefined : parsed\n}\n\n/** @internal */\nfunction buildFederalTaxesFieldsMetadata(\n base: Record<keyof FederalTaxesFormData, FieldMetadata>,\n {\n filingStatusOptions,\n twoJobsOptions,\n }: {\n filingStatusOptions: Array<{ value: FilingStatusValue; label: string }>\n twoJobsOptions: Array<{ value: string; label: string }>\n },\n) {\n return {\n filingStatus: withOptions<FilingStatusValue>(\n base.filingStatus,\n filingStatusOptions,\n FILING_STATUS_VALUES,\n ),\n twoJobs: withOptions<boolean>(base.twoJobs, twoJobsOptions, [true, false]),\n dependentsAmount: base.dependentsAmount,\n otherIncome: base.otherIncome,\n deductions: base.deductions,\n extraWithholding: base.extraWithholding,\n } satisfies FieldsMetadata\n}\n\n/**\n * Headless hook for updating an employee's federal tax (W-4) withholding information — filing status, multiple-jobs flag, dependents, other income, deductions, and extra withholding.\n *\n * @remarks\n * The federal tax record is created automatically with the employee, so this hook is always in update mode. Only the revised 2020 W-4 format is supported for updates. By default only `filingStatus` is required; promote any of `twoJobs`, `dependentsAmount`, `otherIncome`, `deductions`, or `extraWithholding` to required via `optionalFieldsToRequire.update`.\n *\n * @param props - See {@link UseFederalTaxesFormProps}.\n * @returns A {@link HookLoadingResult} while data is loading, or a {@link UseFederalTaxesFormReady} once the federal tax record is loaded.\n * @public\n *\n * @example\n * ```tsx\n * import { useFederalTaxesForm, SDKFormProvider } from '@gusto/embedded-react-sdk'\n *\n * function FederalTaxesPage({ employeeId }: { employeeId: string }) {\n * const federalTaxes = useFederalTaxesForm({ employeeId })\n *\n * if (federalTaxes.isLoading) return <div>Loading...</div>\n *\n * const { Fields } = federalTaxes.form\n *\n * return (\n * <SDKFormProvider formHookResult={federalTaxes}>\n * <form\n * onSubmit={e => {\n * e.preventDefault()\n * void federalTaxes.actions.onSubmit()\n * }}\n * >\n * <Fields.FilingStatus label=\"Federal filing status\" />\n * <Fields.TwoJobs label=\"Multiple jobs (2c)\" />\n * <Fields.DependentsAmount label=\"Dependents\" />\n * <Fields.OtherIncome label=\"Other income\" />\n * <Fields.Deductions label=\"Deductions\" />\n * <Fields.ExtraWithholding label=\"Extra withholding\" />\n * <button type=\"submit\" disabled={federalTaxes.status.isPending}>Save</button>\n * </form>\n * </SDKFormProvider>\n * )\n * }\n * ```\n */\nexport function useFederalTaxesForm({\n employeeId,\n optionalFieldsToRequire,\n defaultValues: partnerDefaults,\n validationMode = 'onSubmit',\n shouldFocusError = true,\n}: UseFederalTaxesFormProps): HookLoadingResult | UseFederalTaxesFormReady {\n const federalTaxesQuery = useEmployeeTaxSetupGetFederalTaxes({ employeeUuid: employeeId })\n\n const employeeFederalTax = federalTaxesQuery.data?.employeeFederalTax\n\n const [schema, metadataConfig] = useMemo(\n () => createFederalTaxesSchema({ optionalFieldsToRequire }),\n [optionalFieldsToRequire],\n )\n\n const filingStatusOptions = useMemo(\n () => FILING_STATUS_VALUES.map(value => ({ value, label: value })),\n [],\n )\n\n const twoJobsOptions = useMemo(\n () => [\n { label: 'Yes', value: 'true' },\n { label: 'No', value: 'false' },\n ],\n [],\n )\n\n const resolvedDefaults: FederalTaxesFormData = useMemo(() => {\n const rev2020Source =\n employeeFederalTax && isRev2020(employeeFederalTax) ? employeeFederalTax : undefined\n\n const fromServerFilingStatus = toFilingStatus(rev2020Source?.filingStatus)\n\n return {\n filingStatus: fromServerFilingStatus || partnerDefaults?.filingStatus || '',\n twoJobs: rev2020Source?.twoJobs ?? partnerDefaults?.twoJobs ?? false,\n dependentsAmount:\n toNumber(rev2020Source?.dependentsAmount) ?? partnerDefaults?.dependentsAmount ?? 0,\n otherIncome: toNumber(rev2020Source?.otherIncome) ?? partnerDefaults?.otherIncome ?? 0,\n deductions: toNumber(rev2020Source?.deductions) ?? partnerDefaults?.deductions ?? 0,\n extraWithholding:\n toNumber(rev2020Source?.extraWithholding) ?? partnerDefaults?.extraWithholding ?? 0,\n }\n }, [employeeFederalTax, partnerDefaults])\n\n const formMethods = useForm<FederalTaxesFormData, unknown, FederalTaxesFormOutputs>({\n resolver: zodResolver(schema),\n mode: validationMode,\n shouldFocusError,\n defaultValues: resolvedDefaults,\n values: resolvedDefaults,\n resetOptions: { keepDirtyValues: true },\n })\n\n const { mutateAsync: updateFederalTaxes, isPending } =\n useEmployeeTaxSetupUpdateFederalTaxesMutation()\n\n const {\n baseSubmitHandler,\n error: submitError,\n setError: setSubmitError,\n } = useBaseSubmit('FederalTaxesForm')\n\n const errorHandling = composeErrorHandler([federalTaxesQuery], { submitError, setSubmitError })\n\n const baseMetadata = useDeriveFieldsMetadata(metadataConfig, formMethods.control)\n const fieldsMetadata = buildFederalTaxesFieldsMetadata(baseMetadata, {\n filingStatusOptions,\n twoJobsOptions,\n })\n\n const onSubmit = async (): Promise<HookSubmitResult<EmployeeFederalTax> | undefined> => {\n let submitResult: HookSubmitResult<EmployeeFederalTax> | undefined\n\n await new Promise<void>(resolve => {\n void formMethods.handleSubmit(\n async (data: FederalTaxesFormOutputs) => {\n await baseSubmitHandler(data, async payload => {\n if (!employeeFederalTax) {\n throw new SDKInternalError('Federal taxes record was not loaded before submit')\n }\n\n const requestBody: PutV1EmployeesEmployeeIdFederalTaxesRequestBody = {\n filingStatus: payload.filingStatus as FilingStatus,\n twoJobs: payload.twoJobs,\n dependentsAmount: payload.dependentsAmount,\n otherIncome: payload.otherIncome,\n deductions: payload.deductions,\n extraWithholding: payload.extraWithholding,\n w4DataType: 'rev_2020_w4',\n version: employeeFederalTax.version,\n }\n\n const response = await updateFederalTaxes({\n request: {\n employeeUuid: employeeId,\n requestBody,\n },\n })\n\n if (!response.employeeFederalTax) {\n throw new SDKInternalError('Federal taxes update did not return an updated record')\n }\n\n submitResult = { mode: 'update', data: response.employeeFederalTax }\n })\n resolve()\n },\n () => {\n resolve()\n },\n )()\n })\n\n return submitResult\n }\n\n const hookFormInternals = useHookFormInternals(formMethods)\n\n if (federalTaxesQuery.isLoading || !employeeFederalTax) {\n return { isLoading: true as const, errorHandling }\n }\n\n return {\n isLoading: false as const,\n data: {\n employeeFederalTax,\n },\n status: {\n isPending,\n mode: 'update' as const,\n },\n actions: { onSubmit },\n errorHandling,\n form: {\n Fields: {\n FilingStatus: FilingStatusField,\n TwoJobs: TwoJobsField,\n DependentsAmount: DependentsAmountField,\n OtherIncome: OtherIncomeField,\n Deductions: DeductionsField,\n ExtraWithholding: ExtraWithholdingField,\n },\n fieldsMetadata,\n hookFormInternals,\n getFormSubmissionValues: createGetFormSubmissionValues(formMethods, schema),\n },\n }\n}\n\n/**\n * Discriminated union returned by {@link useFederalTaxesForm} — either the loading state or the ready state.\n *\n * @remarks\n * Use this type when threading the hook result through helpers (e.g.\n * presentational components). Discriminate on `isLoading` to narrow to\n * {@link UseFederalTaxesFormReady}.\n *\n * @public\n */\nexport type UseFederalTaxesFormResult = HookLoadingResult | UseFederalTaxesFormReady\n\n/**\n * Metadata for each {@link useFederalTaxesForm} field, exposed on `form.fieldsMetadata`.\n *\n * @remarks\n * Includes per-field `isDisabled`, `isRequired`, and the dynamic option list\n * for select and radio fields (`filingStatus`, `twoJobs`).\n *\n * @public\n */\nexport type FederalTaxesFieldsMetadata = ReturnType<typeof buildFederalTaxesFieldsMetadata>\n"],"names":["isRev2020","federalTax","toFilingStatus","value","FILING_STATUS_VALUES","allowed","toNumber","parsed","buildFederalTaxesFieldsMetadata","base","filingStatusOptions","twoJobsOptions","withOptions","useFederalTaxesForm","employeeId","optionalFieldsToRequire","partnerDefaults","validationMode","shouldFocusError","federalTaxesQuery","useEmployeeTaxSetupGetFederalTaxes","employeeFederalTax","schema","metadataConfig","useMemo","createFederalTaxesSchema","resolvedDefaults","rev2020Source","formMethods","useForm","zodResolver","updateFederalTaxes","isPending","useEmployeeTaxSetupUpdateFederalTaxesMutation","baseSubmitHandler","submitError","setSubmitError","useBaseSubmit","errorHandling","composeErrorHandler","baseMetadata","useDeriveFieldsMetadata","fieldsMetadata","onSubmit","submitResult","resolve","data","payload","SDKInternalError","requestBody","response","hookFormInternals","useHookFormInternals","FilingStatusField","TwoJobsField","DependentsAmountField","OtherIncomeField","DeductionsField","ExtraWithholdingField","createGetFormSubmissionValues"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { GetV1EmployeesEmployeeIdFederalTaxesResponse } from '@gusto/embedded-api
|
|
1
|
+
import { GetV1EmployeesEmployeeIdFederalTaxesResponse } from '@gusto/embedded-api/models/operations/getv1employeesemployeeidfederaltaxes';
|
|
2
2
|
import { BaseHookReady, HookLoadingResult } from '../../../../../partner-hook-utils/types';
|
|
3
3
|
type EmployeeFederalTax = NonNullable<GetV1EmployeesEmployeeIdFederalTaxesResponse['employeeFederalTax']>;
|
|
4
4
|
/**
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { useEmployeeTaxSetupGetFederalTaxes as i } from "@gusto/embedded-api
|
|
1
|
+
import { useEmployeeTaxSetupGetFederalTaxes as i } from "@gusto/embedded-api/react-query/employeeTaxSetupGetFederalTaxes";
|
|
2
2
|
import { composeErrorHandler as o } from "../../../../../partner-hook-utils/composeErrorHandler.js";
|
|
3
3
|
function n({
|
|
4
4
|
employeeId: r
|