@gusto/embedded-react-sdk 0.55.5 → 0.55.6
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 +24 -0
- package/dist/components/Common/DataView/DataTable/DataTable.js +44 -41
- package/dist/components/Common/DataView/DataTable/DataTable.js.map +1 -1
- package/dist/components/Common/RequirementsList/RequirementsList.js +21 -12
- package/dist/components/Common/RequirementsList/RequirementsList.js.map +1 -1
- package/dist/components/Common/UI/Table/Table.module.scss.js +1 -1
- package/dist/components/Company/AssignSignatory/CreateSignatory/useCreateSignatory.js +3 -6
- package/dist/components/Company/AssignSignatory/CreateSignatory/useCreateSignatory.js.map +1 -1
- package/dist/components/Company/AssignSignatory/InviteSignatory/useInviteSignatory.js +3 -6
- package/dist/components/Company/AssignSignatory/InviteSignatory/useInviteSignatory.js.map +1 -1
- package/dist/components/Company/AssignSignatory/useAssignSignatory.js +5 -8
- package/dist/components/Company/AssignSignatory/useAssignSignatory.js.map +1 -1
- package/dist/components/Company/BankAccount/BankAccountForm/context.js +3 -6
- package/dist/components/Company/BankAccount/BankAccountForm/context.js.map +1 -1
- package/dist/components/Company/DocumentSigner/DocumentList/useDocumentList.js +3 -6
- package/dist/components/Company/DocumentSigner/DocumentList/useDocumentList.js.map +1 -1
- package/dist/components/Company/FederalTaxes/useFederalTaxes.js +8 -11
- package/dist/components/Company/FederalTaxes/useFederalTaxes.js.map +1 -1
- package/dist/components/Company/Industry/Context.js +6 -9
- package/dist/components/Company/Industry/Context.js.map +1 -1
- package/dist/components/Company/Locations/LocationForm/useLocationForm.js +3 -6
- package/dist/components/Company/Locations/LocationForm/useLocationForm.js.map +1 -1
- package/dist/components/Company/Locations/LocationsList/useLocationsList.js +3 -6
- package/dist/components/Company/Locations/LocationsList/useLocationsList.js.map +1 -1
- package/dist/components/Company/OnboardingOverview/context.js +3 -6
- package/dist/components/Company/OnboardingOverview/context.js.map +1 -1
- package/dist/components/Company/PaySchedule/PaySchedule.js +21 -15
- package/dist/components/Company/PaySchedule/PaySchedule.js.map +1 -1
- package/dist/components/Company/StateTaxes/StateTaxesForm/context.js +3 -6
- package/dist/components/Company/StateTaxes/StateTaxesForm/context.js.map +1 -1
- package/dist/components/Company/StateTaxes/StateTaxesList/context.js +3 -6
- package/dist/components/Company/StateTaxes/StateTaxesList/context.js.map +1 -1
- package/dist/components/Company/StateTaxes/TaxRateManagement/TaxRateHistorySection.js +1 -0
- package/dist/components/Company/StateTaxes/TaxRateManagement/TaxRateHistorySection.js.map +1 -1
- package/dist/components/Company/StateTaxes/TaxRateManagement/context.js +3 -6
- package/dist/components/Company/StateTaxes/TaxRateManagement/context.js.map +1 -1
- package/dist/components/Contractor/Compensation/management/CompensationEditForm.js +20 -17
- package/dist/components/Contractor/Compensation/management/CompensationEditForm.js.map +1 -1
- package/dist/components/Contractor/Compensation/shared/useContractorPayForm/contractorPaySchema.d.ts +1 -0
- package/dist/components/Contractor/Compensation/shared/useContractorPayForm/contractorPaySchema.js +21 -17
- package/dist/components/Contractor/Compensation/shared/useContractorPayForm/contractorPaySchema.js.map +1 -1
- package/dist/components/Contractor/Compensation/shared/useContractorPayForm/fields.d.ts +7 -1
- package/dist/components/Contractor/Compensation/shared/useContractorPayForm/fields.js.map +1 -1
- package/dist/components/Contractor/Compensation/shared/useContractorPayForm/index.d.ts +1 -1
- package/dist/components/Contractor/ContractorList/management/ManagementContractorListView.js +112 -100
- package/dist/components/Contractor/ContractorList/management/ManagementContractorListView.js.map +1 -1
- package/dist/components/Contractor/ContractorList/onboarding/ContractorListView.js +46 -40
- package/dist/components/Contractor/ContractorList/onboarding/ContractorListView.js.map +1 -1
- package/dist/components/Contractor/Payments/PaymentStatement/PaymentStatementPresentation.js +10 -9
- package/dist/components/Contractor/Payments/PaymentStatement/PaymentStatementPresentation.js.map +1 -1
- package/dist/components/Contractor/Profile/onboarding/ContractorProfile.js +22 -19
- package/dist/components/Contractor/Profile/onboarding/ContractorProfile.js.map +1 -1
- package/dist/components/Contractor/Profile/shared/useContractorDetailsForm/contractorDetailsSchema.d.ts +1 -0
- package/dist/components/Contractor/Profile/shared/useContractorDetailsForm/contractorDetailsSchema.js +34 -30
- package/dist/components/Contractor/Profile/shared/useContractorDetailsForm/contractorDetailsSchema.js.map +1 -1
- package/dist/components/Contractor/Profile/shared/useContractorDetailsForm/fields.d.ts +7 -1
- package/dist/components/Contractor/Profile/shared/useContractorDetailsForm/fields.js.map +1 -1
- package/dist/components/Contractor/Profile/shared/useContractorDetailsForm/index.d.ts +1 -1
- package/dist/components/Contractor/Profile/shared/useContractorDetailsForm/useContractorDetailsForm.js +32 -32
- package/dist/components/Contractor/Profile/shared/useContractorDetailsForm/useContractorDetailsForm.js.map +1 -1
- package/dist/components/Employee/Compensation/onboarding/JobsList/JobsListPresentation.js +1 -0
- package/dist/components/Employee/Compensation/onboarding/JobsList/JobsListPresentation.js.map +1 -1
- package/dist/components/Employee/Deductions/management/DeductionsCard/DeductionsCard.js +11 -10
- package/dist/components/Employee/Deductions/management/DeductionsCard/DeductionsCard.js.map +1 -1
- package/dist/components/Employee/Deductions/onboarding/DeductionsList/DeductionsList.js +7 -6
- package/dist/components/Employee/Deductions/onboarding/DeductionsList/DeductionsList.js.map +1 -1
- package/dist/components/Employee/Documents/onboarding/DocumentSigner/DocumentList/useDocumentList.js +3 -6
- package/dist/components/Employee/Documents/onboarding/DocumentSigner/DocumentList/useDocumentList.js.map +1 -1
- package/dist/components/Employee/PaymentMethod/onboarding/ListView.js +20 -19
- package/dist/components/Employee/PaymentMethod/onboarding/ListView.js.map +1 -1
- package/dist/components/Employee/Paystubs/management/PaystubsCard/PaystubsCard.js +12 -10
- package/dist/components/Employee/Paystubs/management/PaystubsCard/PaystubsCard.js.map +1 -1
- package/dist/components/Payroll/GrossUpModal/GrossUpModal.js +2 -3
- package/dist/components/Payroll/GrossUpModal/GrossUpModal.js.map +1 -1
- package/dist/components/Payroll/OffCyclePayPeriodDateForm/OffCyclePayPeriodDateFormPresentation.js +13 -12
- package/dist/components/Payroll/OffCyclePayPeriodDateForm/OffCyclePayPeriodDateFormPresentation.js.map +1 -1
- package/dist/components/Payroll/OffCycleTaxWithholdingTable/OffCycleTaxWithholdingTable.module.scss.js +1 -1
- package/dist/components/Payroll/PayrollConfiguration/PayrollConfiguration.js +200 -195
- package/dist/components/Payroll/PayrollConfiguration/PayrollConfiguration.js.map +1 -1
- package/dist/components/Payroll/PayrollConfiguration/PayrollConfigurationPresentation.js +93 -85
- package/dist/components/Payroll/PayrollConfiguration/PayrollConfigurationPresentation.js.map +1 -1
- package/dist/components/Payroll/PayrollConfiguration/useCalculationPoll.d.ts +50 -0
- package/dist/components/Payroll/PayrollConfiguration/useCalculationPoll.js +52 -0
- package/dist/components/Payroll/PayrollConfiguration/useCalculationPoll.js.map +1 -0
- package/dist/components/Payroll/PayrollEditEmployee/PayrollEditEmployee.js +52 -50
- package/dist/components/Payroll/PayrollEditEmployee/PayrollEditEmployee.js.map +1 -1
- package/dist/components/Payroll/PayrollEditEmployee/PayrollEditEmployeePresentation.js +259 -255
- package/dist/components/Payroll/PayrollEditEmployee/PayrollEditEmployeePresentation.js.map +1 -1
- package/dist/components/Payroll/PayrollEditEmployee/shared/usePayrollEditEmployeeForm/fields.d.ts +278 -0
- package/dist/components/Payroll/PayrollEditEmployee/shared/usePayrollEditEmployeeForm/index.d.ts +1 -0
- package/dist/components/Payroll/PayrollEditEmployee/shared/usePayrollEditEmployeeForm/payrollEditEmployeeHelpers.d.ts +108 -0
- package/dist/components/Payroll/PayrollEditEmployee/shared/usePayrollEditEmployeeForm/payrollEditEmployeeHelpers.test.d.ts +1 -0
- package/dist/components/Payroll/PayrollEditEmployee/shared/usePayrollEditEmployeeForm/payrollEditEmployeeSchema.d.ts +95 -0
- package/dist/components/Payroll/PayrollEditEmployee/shared/usePayrollEditEmployeeForm/payrollEditEmployeeSchema.test.d.ts +1 -0
- package/dist/components/Payroll/PayrollEditEmployee/shared/usePayrollEditEmployeeForm/usePayrollEditEmployeeForm.d.ts +126 -0
- package/dist/components/Payroll/PayrollHistory/PayrollHistoryPresentation.js +1 -0
- package/dist/components/Payroll/PayrollHistory/PayrollHistoryPresentation.js.map +1 -1
- package/dist/components/Payroll/PayrollOverview/PayrollOverview.js +191 -183
- package/dist/components/Payroll/PayrollOverview/PayrollOverview.js.map +1 -1
- package/dist/components/Payroll/PayrollOverview/PayrollOverviewPresentation.js +117 -107
- package/dist/components/Payroll/PayrollOverview/PayrollOverviewPresentation.js.map +1 -1
- package/dist/components/Payroll/PayrollOverview/useSubmissionPoll.d.ts +39 -0
- package/dist/components/Payroll/PayrollOverview/useSubmissionPoll.js +46 -0
- package/dist/components/Payroll/PayrollOverview/useSubmissionPoll.js.map +1 -0
- package/dist/components/Payroll/PayrollReceipts/PayrollReceiptsPresentation.js +40 -34
- package/dist/components/Payroll/PayrollReceipts/PayrollReceiptsPresentation.js.map +1 -1
- package/dist/components/Payroll/PrintChecks/PrintChecksForm/PrintChecksForm.js +72 -87
- package/dist/components/Payroll/PrintChecks/PrintChecksForm/PrintChecksForm.js.map +1 -1
- package/dist/components/Payroll/PrintChecks/PrintChecksForm/useGenerationPoll.d.ts +17 -0
- package/dist/components/Payroll/PrintChecks/PrintChecksForm/useGenerationPoll.js +55 -0
- package/dist/components/Payroll/PrintChecks/PrintChecksForm/useGenerationPoll.js.map +1 -0
- package/dist/components/Payroll/RecoveryCases/RecoveryCasesList/RecoveryCasesList.js +2 -0
- package/dist/components/Payroll/RecoveryCases/RecoveryCasesList/RecoveryCasesList.js.map +1 -1
- package/dist/components/Payroll/UNSTABLE_PayrollEditEmployee/UNSTABLE_PayrollEditEmployee.d.ts +13 -0
- package/dist/components/Payroll/UNSTABLE_PayrollEditEmployee/UNSTABLE_PayrollEditEmployee.js +58 -0
- package/dist/components/Payroll/UNSTABLE_PayrollEditEmployee/UNSTABLE_PayrollEditEmployee.js.map +1 -0
- package/dist/components/Payroll/UNSTABLE_PayrollEditEmployee/UNSTABLE_PayrollEditEmployee.module.scss.js +8 -0
- package/dist/components/Payroll/UNSTABLE_PayrollEditEmployee/UNSTABLE_PayrollEditEmployee.module.scss.js.map +1 -0
- package/dist/components/Payroll/helpers.d.ts +15 -0
- package/dist/components/Payroll/helpers.js.map +1 -1
- package/dist/components/Payroll/usePreparedPayrollData.js +12 -15
- package/dist/components/Payroll/usePreparedPayrollData.js.map +1 -1
- package/dist/components/TimeOff/shared/EmployeeTable/EmployeeTable.js +35 -35
- package/dist/components/TimeOff/shared/EmployeeTable/EmployeeTable.js.map +1 -1
- package/dist/components/TimeOff/shared/EmployeeTable/EmployeeTable.module.scss.js +4 -4
- package/dist/contexts/UnstableFeaturesProvider/useUnstableFeature.d.ts +2 -0
- package/dist/contexts/UnstableFeaturesProvider/useUnstableFeature.js.map +1 -1
- package/dist/hooks/usePollingTask/usePollingTask.d.ts +101 -0
- package/dist/hooks/usePollingTask/usePollingTask.js +50 -0
- package/dist/hooks/usePollingTask/usePollingTask.js.map +1 -0
- package/dist/hooks/usePollingTask/usePollingTask.test.d.ts +1 -0
- package/dist/i18n/I18n.js +147 -30
- package/dist/i18n/I18n.js.map +1 -1
- package/dist/i18n/en/Contractor.ContractorList.json.js +14 -12
- package/dist/i18n/en/Contractor.ContractorList.json.js.map +1 -1
- package/dist/i18n/en/Contractor.Management.Compensation.json.js +6 -6
- package/dist/i18n/en/Contractor.ManagementContractorList.json.js +8 -8
- package/dist/i18n/en/Contractor.Profile.json.js +5 -5
- package/dist/i18n/en/Payroll.OffCyclePayPeriodDateForm.json.js +7 -5
- package/dist/i18n/en/Payroll.OffCyclePayPeriodDateForm.json.js.map +1 -1
- package/dist/i18n/en/Payroll.PayrollHistory.json.js +8 -8
- package/dist/i18n/en/Payroll.PayrollOverview.json.js +16 -16
- package/dist/i18n/en/Payroll.UNSTABLE_PayrollEditEmployee.json.js +98 -0
- package/dist/i18n/en/Payroll.UNSTABLE_PayrollEditEmployee.json.js.map +1 -0
- package/dist/i18n/en/common.json.d.ts +1 -0
- package/dist/i18n/en/common.json.js +1 -1
- package/dist/i18n/es_US/Company.Addresses.json.js +8 -0
- package/dist/i18n/es_US/Company.Addresses.json.js.map +1 -0
- package/dist/i18n/es_US/Company.AssignSignatory.json.js +22 -0
- package/dist/i18n/es_US/Company.AssignSignatory.json.js.map +1 -0
- package/dist/i18n/es_US/Company.BankAccount.json.js +20 -0
- package/dist/i18n/es_US/Company.BankAccount.json.js.map +1 -0
- package/dist/i18n/es_US/Company.DocumentList.json.js +28 -0
- package/dist/i18n/es_US/Company.DocumentList.json.js.map +1 -0
- package/dist/i18n/es_US/Company.FederalTaxes.json.js +28 -0
- package/dist/i18n/es_US/Company.FederalTaxes.json.js.map +1 -0
- package/dist/i18n/es_US/Company.Industry.json.js +12 -0
- package/dist/i18n/es_US/Company.Industry.json.js.map +1 -0
- package/dist/i18n/es_US/Company.Locations.json.js +44 -0
- package/dist/i18n/es_US/Company.Locations.json.js.map +1 -0
- package/dist/i18n/es_US/Company.OnboardingOverview.json.js +24 -0
- package/dist/i18n/es_US/Company.OnboardingOverview.json.js.map +1 -0
- package/dist/i18n/es_US/Company.PaySchedule.json.js +36 -0
- package/dist/i18n/es_US/Company.PaySchedule.json.js.map +1 -0
- package/dist/i18n/es_US/Company.SignatureForm.json.js +20 -0
- package/dist/i18n/es_US/Company.SignatureForm.json.js.map +1 -0
- package/dist/i18n/es_US/Company.StateTaxes.json.js +12 -0
- package/dist/i18n/es_US/Company.StateTaxes.json.js.map +1 -0
- package/dist/i18n/es_US/Company.TimeOff.CreateTimeOffPolicy.json.js +18 -0
- package/dist/i18n/es_US/Company.TimeOff.CreateTimeOffPolicy.json.js.map +1 -0
- package/dist/i18n/es_US/Company.TimeOff.EmployeeTable.json.js +26 -0
- package/dist/i18n/es_US/Company.TimeOff.EmployeeTable.json.js.map +1 -0
- package/dist/i18n/es_US/Company.TimeOff.HolidayPolicy.json.js +26 -0
- package/dist/i18n/es_US/Company.TimeOff.HolidayPolicy.json.js.map +1 -0
- package/dist/i18n/es_US/Company.TimeOff.PolicyDetail.json.js +14 -0
- package/dist/i18n/es_US/Company.TimeOff.PolicyDetail.json.js.map +1 -0
- package/dist/i18n/es_US/Company.TimeOff.SelectEmployees.json.js +22 -0
- package/dist/i18n/es_US/Company.TimeOff.SelectEmployees.json.js.map +1 -0
- package/dist/i18n/es_US/Company.TimeOff.SelectPolicyType.json.js +26 -0
- package/dist/i18n/es_US/Company.TimeOff.SelectPolicyType.json.js.map +1 -0
- package/dist/i18n/es_US/Company.TimeOff.TimeOffPolicies.json.js +40 -0
- package/dist/i18n/es_US/Company.TimeOff.TimeOffPolicies.json.js.map +1 -0
- package/dist/i18n/es_US/Company.TimeOff.TimeOffPolicyDetails.json.js +52 -0
- package/dist/i18n/es_US/Company.TimeOff.TimeOffPolicyDetails.json.js.map +1 -0
- package/dist/i18n/es_US/Company.TimeOff.TimeOffRequests.json.js +21 -0
- package/dist/i18n/es_US/Company.TimeOff.TimeOffRequests.json.js.map +1 -0
- package/dist/i18n/es_US/Contractor.Address.json.js +22 -0
- package/dist/i18n/es_US/Contractor.Address.json.js.map +1 -0
- package/dist/i18n/es_US/Contractor.BankAccountFields.json.js +12 -0
- package/dist/i18n/es_US/Contractor.BankAccountFields.json.js.map +1 -0
- package/dist/i18n/es_US/Contractor.ContractorList.json.js +24 -0
- package/dist/i18n/es_US/Contractor.ContractorList.json.js.map +1 -0
- package/dist/i18n/es_US/Contractor.Dashboard.json.js +14 -0
- package/dist/i18n/es_US/Contractor.Dashboard.json.js.map +1 -0
- package/dist/i18n/es_US/Contractor.DocumentsList.json.js +18 -0
- package/dist/i18n/es_US/Contractor.DocumentsList.json.js.map +1 -0
- package/dist/i18n/es_US/Contractor.Landing.json.js +18 -0
- package/dist/i18n/es_US/Contractor.Landing.json.js.map +1 -0
- package/dist/i18n/es_US/Contractor.Management.Address.json.js +14 -0
- package/dist/i18n/es_US/Contractor.Management.Address.json.js.map +1 -0
- package/dist/i18n/es_US/Contractor.Management.Compensation.json.js +22 -0
- package/dist/i18n/es_US/Contractor.Management.Compensation.json.js.map +1 -0
- package/dist/i18n/es_US/Contractor.Management.Documents.json.js +16 -0
- package/dist/i18n/es_US/Contractor.Management.Documents.json.js.map +1 -0
- package/dist/i18n/es_US/Contractor.Management.PaymentMethod.json.js +24 -0
- package/dist/i18n/es_US/Contractor.Management.PaymentMethod.json.js.map +1 -0
- package/dist/i18n/es_US/Contractor.Management.Profile.json.js +20 -0
- package/dist/i18n/es_US/Contractor.Management.Profile.json.js.map +1 -0
- package/dist/i18n/es_US/Contractor.ManagementContractorList.json.js +48 -0
- package/dist/i18n/es_US/Contractor.ManagementContractorList.json.js.map +1 -0
- package/dist/i18n/es_US/Contractor.NewHireReport.json.js +22 -0
- package/dist/i18n/es_US/Contractor.NewHireReport.json.js.map +1 -0
- package/dist/i18n/es_US/Contractor.OnboardingSummary.json.js +10 -0
- package/dist/i18n/es_US/Contractor.OnboardingSummary.json.js.map +1 -0
- package/dist/i18n/es_US/Contractor.PaymentMethod.json.js +20 -0
- package/dist/i18n/es_US/Contractor.PaymentMethod.json.js.map +1 -0
- package/dist/i18n/es_US/Contractor.Payments.CreateHistoricalPayment.json.js +34 -0
- package/dist/i18n/es_US/Contractor.Payments.CreateHistoricalPayment.json.js.map +1 -0
- package/dist/i18n/es_US/Contractor.Payments.CreatePayment.json.js +42 -0
- package/dist/i18n/es_US/Contractor.Payments.CreatePayment.json.js.map +1 -0
- package/dist/i18n/es_US/Contractor.Payments.HistoricalPaymentSummary.json.js +42 -0
- package/dist/i18n/es_US/Contractor.Payments.HistoricalPaymentSummary.json.js.map +1 -0
- package/dist/i18n/es_US/Contractor.Payments.PaymentHistory.json.js +26 -0
- package/dist/i18n/es_US/Contractor.Payments.PaymentHistory.json.js.map +1 -0
- package/dist/i18n/es_US/Contractor.Payments.PaymentStatement.json.js +22 -0
- package/dist/i18n/es_US/Contractor.Payments.PaymentStatement.json.js.map +1 -0
- package/dist/i18n/es_US/Contractor.Payments.PaymentSummary.json.js +54 -0
- package/dist/i18n/es_US/Contractor.Payments.PaymentSummary.json.js.map +1 -0
- package/dist/i18n/es_US/Contractor.Payments.PaymentsList.json.js +32 -0
- package/dist/i18n/es_US/Contractor.Payments.PaymentsList.json.js.map +1 -0
- package/dist/i18n/es_US/Contractor.Profile.json.js +18 -0
- package/dist/i18n/es_US/Contractor.Profile.json.js.map +1 -0
- package/dist/i18n/es_US/Contractor.SelectContractors.json.js +18 -0
- package/dist/i18n/es_US/Contractor.SelectContractors.json.js.map +1 -0
- package/dist/i18n/es_US/Contractor.SignatureForm.json.js +34 -0
- package/dist/i18n/es_US/Contractor.SignatureForm.json.js.map +1 -0
- package/dist/i18n/es_US/Contractor.Submit.json.js +26 -0
- package/dist/i18n/es_US/Contractor.Submit.json.js.map +1 -0
- package/dist/i18n/es_US/Employee.BankAccount.json.js +14 -0
- package/dist/i18n/es_US/Employee.BankAccount.json.js.map +1 -0
- package/dist/i18n/es_US/Employee.BankFormBody.json.js +12 -0
- package/dist/i18n/es_US/Employee.BankFormBody.json.js.map +1 -0
- package/dist/i18n/es_US/Employee.Compensation.json.js +68 -0
- package/dist/i18n/es_US/Employee.Compensation.json.js.map +1 -0
- package/dist/i18n/es_US/Employee.Dashboard.json.js +12 -0
- package/dist/i18n/es_US/Employee.Dashboard.json.js.map +1 -0
- package/dist/i18n/es_US/Employee.Deductions.json.js +142 -0
- package/dist/i18n/es_US/Employee.Deductions.json.js.map +1 -0
- package/dist/i18n/es_US/Employee.DeductionsForm.json.js +24 -0
- package/dist/i18n/es_US/Employee.DeductionsForm.json.js.map +1 -0
- package/dist/i18n/es_US/Employee.DocumentManager.json.js +10 -0
- package/dist/i18n/es_US/Employee.DocumentManager.json.js.map +1 -0
- package/dist/i18n/es_US/Employee.DocumentSigner.json.js +28 -0
- package/dist/i18n/es_US/Employee.DocumentSigner.json.js.map +1 -0
- package/dist/i18n/es_US/Employee.EmployeeDocuments.json.js +10 -0
- package/dist/i18n/es_US/Employee.EmployeeDocuments.json.js.map +1 -0
- package/dist/i18n/es_US/Employee.EmployeeList.json.js +30 -0
- package/dist/i18n/es_US/Employee.EmployeeList.json.js.map +1 -0
- package/dist/i18n/es_US/Employee.EmploymentEligibility.json.js +22 -0
- package/dist/i18n/es_US/Employee.EmploymentEligibility.json.js.map +1 -0
- package/dist/i18n/es_US/Employee.FederalTaxes.json.js +46 -0
- package/dist/i18n/es_US/Employee.FederalTaxes.json.js.map +1 -0
- package/dist/i18n/es_US/Employee.FederalTaxesView.json.js +38 -0
- package/dist/i18n/es_US/Employee.FederalTaxesView.json.js.map +1 -0
- package/dist/i18n/es_US/Employee.HomeAddress.json.js +24 -0
- package/dist/i18n/es_US/Employee.HomeAddress.json.js.map +1 -0
- package/dist/i18n/es_US/Employee.I9SignatureForm.json.js +64 -0
- package/dist/i18n/es_US/Employee.I9SignatureForm.json.js.map +1 -0
- package/dist/i18n/es_US/Employee.Landing.json.js +16 -0
- package/dist/i18n/es_US/Employee.Landing.json.js.map +1 -0
- package/dist/i18n/es_US/Employee.Management.Compensation.json.js +66 -0
- package/dist/i18n/es_US/Employee.Management.Compensation.json.js.map +1 -0
- package/dist/i18n/es_US/Employee.Management.Deductions.json.js +26 -0
- package/dist/i18n/es_US/Employee.Management.Deductions.json.js.map +1 -0
- package/dist/i18n/es_US/Employee.Management.Documents.json.js +18 -0
- package/dist/i18n/es_US/Employee.Management.Documents.json.js.map +1 -0
- package/dist/i18n/es_US/Employee.Management.FederalTaxes.json.js +42 -0
- package/dist/i18n/es_US/Employee.Management.FederalTaxes.json.js.map +1 -0
- package/dist/i18n/es_US/Employee.Management.HomeAddress.json.js +56 -0
- package/dist/i18n/es_US/Employee.Management.HomeAddress.json.js.map +1 -0
- package/dist/i18n/es_US/Employee.Management.PaymentMethod.json.js +24 -0
- package/dist/i18n/es_US/Employee.Management.PaymentMethod.json.js.map +1 -0
- package/dist/i18n/es_US/Employee.Management.PaymentMethodBankForm.json.js +12 -0
- package/dist/i18n/es_US/Employee.Management.PaymentMethodBankForm.json.js.map +1 -0
- package/dist/i18n/es_US/Employee.Management.PaymentMethodSplitForm.json.js +22 -0
- package/dist/i18n/es_US/Employee.Management.PaymentMethodSplitForm.json.js.map +1 -0
- package/dist/i18n/es_US/Employee.Management.Paystubs.json.js +28 -0
- package/dist/i18n/es_US/Employee.Management.Paystubs.json.js.map +1 -0
- package/dist/i18n/es_US/Employee.Management.Profile.json.js +16 -0
- package/dist/i18n/es_US/Employee.Management.Profile.json.js.map +1 -0
- package/dist/i18n/es_US/Employee.Management.StateTaxes.json.js +16 -0
- package/dist/i18n/es_US/Employee.Management.StateTaxes.json.js.map +1 -0
- package/dist/i18n/es_US/Employee.Management.WorkAddress.json.js +52 -0
- package/dist/i18n/es_US/Employee.Management.WorkAddress.json.js.map +1 -0
- package/dist/i18n/es_US/Employee.ManagementEmployeeList.json.js +26 -0
- package/dist/i18n/es_US/Employee.ManagementEmployeeList.json.js.map +1 -0
- package/dist/i18n/es_US/Employee.OnboardingSummary.json.js +22 -0
- package/dist/i18n/es_US/Employee.OnboardingSummary.json.js.map +1 -0
- package/dist/i18n/es_US/Employee.PaySchedules.json.js +12 -0
- package/dist/i18n/es_US/Employee.PaySchedules.json.js.map +1 -0
- package/dist/i18n/es_US/Employee.PaymentMethod.json.js +68 -0
- package/dist/i18n/es_US/Employee.PaymentMethod.json.js.map +1 -0
- package/dist/i18n/es_US/Employee.Profile.json.js +32 -0
- package/dist/i18n/es_US/Employee.Profile.json.js.map +1 -0
- package/dist/i18n/es_US/Employee.SplitPaycheck.json.js +26 -0
- package/dist/i18n/es_US/Employee.SplitPaycheck.json.js.map +1 -0
- package/dist/i18n/es_US/Employee.SplitPaymentsFormBody.json.js +22 -0
- package/dist/i18n/es_US/Employee.SplitPaymentsFormBody.json.js.map +1 -0
- package/dist/i18n/es_US/Employee.StateTaxes.json.js +14 -0
- package/dist/i18n/es_US/Employee.StateTaxes.json.js.map +1 -0
- package/dist/i18n/es_US/Employee.StateTaxesView.json.js +12 -0
- package/dist/i18n/es_US/Employee.StateTaxesView.json.js.map +1 -0
- package/dist/i18n/es_US/Employee.Terminations.TerminateEmployee.json.js +18 -0
- package/dist/i18n/es_US/Employee.Terminations.TerminateEmployee.json.js.map +1 -0
- package/dist/i18n/es_US/Employee.Terminations.TerminationFlow.json.js +12 -0
- package/dist/i18n/es_US/Employee.Terminations.TerminationFlow.json.js.map +1 -0
- package/dist/i18n/es_US/Employee.Terminations.TerminationSummary.json.js +20 -0
- package/dist/i18n/es_US/Employee.Terminations.TerminationSummary.json.js.map +1 -0
- package/dist/i18n/es_US/InformationRequests.InformationRequestForm.json.js +20 -0
- package/dist/i18n/es_US/InformationRequests.InformationRequestForm.json.js.map +1 -0
- package/dist/i18n/es_US/InformationRequests.InformationRequestList.json.js +18 -0
- package/dist/i18n/es_US/InformationRequests.InformationRequestList.json.js.map +1 -0
- package/dist/i18n/es_US/InformationRequests.json.js +8 -0
- package/dist/i18n/es_US/InformationRequests.json.js.map +1 -0
- package/dist/i18n/es_US/Payroll.Common.json.js +8 -0
- package/dist/i18n/es_US/Payroll.Common.json.js.map +1 -0
- package/dist/i18n/es_US/Payroll.ConfirmWireDetailsBanner.json.js +14 -0
- package/dist/i18n/es_US/Payroll.ConfirmWireDetailsBanner.json.js.map +1 -0
- package/dist/i18n/es_US/Payroll.ConfirmWireDetailsForm.json.js +26 -0
- package/dist/i18n/es_US/Payroll.ConfirmWireDetailsForm.json.js.map +1 -0
- package/dist/i18n/es_US/Payroll.Dismissal.json.js +16 -0
- package/dist/i18n/es_US/Payroll.Dismissal.json.js.map +1 -0
- package/dist/i18n/es_US/Payroll.EmployeeSelection.json.js +8 -0
- package/dist/i18n/es_US/Payroll.EmployeeSelection.json.js.map +1 -0
- package/dist/i18n/es_US/Payroll.GrossUpModal.json.js +26 -0
- package/dist/i18n/es_US/Payroll.GrossUpModal.json.js.map +1 -0
- package/dist/i18n/es_US/Payroll.OffCycle.json.js +8 -0
- package/dist/i18n/es_US/Payroll.OffCycle.json.js.map +1 -0
- package/dist/i18n/es_US/Payroll.OffCycleCreation.json.js +16 -0
- package/dist/i18n/es_US/Payroll.OffCycleCreation.json.js.map +1 -0
- package/dist/i18n/es_US/Payroll.OffCycleDeductionsSetting.json.js +8 -0
- package/dist/i18n/es_US/Payroll.OffCycleDeductionsSetting.json.js.map +1 -0
- package/dist/i18n/es_US/Payroll.OffCyclePayPeriodDateForm.json.js +14 -0
- package/dist/i18n/es_US/Payroll.OffCyclePayPeriodDateForm.json.js.map +1 -0
- package/dist/i18n/es_US/Payroll.OffCycleReasonSelection.json.js +12 -0
- package/dist/i18n/es_US/Payroll.OffCycleReasonSelection.json.js.map +1 -0
- package/dist/i18n/es_US/Payroll.OffCycleTaxWithholding.json.js +16 -0
- package/dist/i18n/es_US/Payroll.OffCycleTaxWithholding.json.js.map +1 -0
- package/dist/i18n/es_US/Payroll.PayrollBlocker.json.js +34 -0
- package/dist/i18n/es_US/Payroll.PayrollBlocker.json.js.map +1 -0
- package/dist/i18n/es_US/Payroll.PayrollConfiguration.json.js +44 -0
- package/dist/i18n/es_US/Payroll.PayrollConfiguration.json.js.map +1 -0
- package/dist/i18n/es_US/Payroll.PayrollEditEmployee.json.js +66 -0
- package/dist/i18n/es_US/Payroll.PayrollEditEmployee.json.js.map +1 -0
- package/dist/i18n/es_US/Payroll.PayrollHistory.json.js +22 -0
- package/dist/i18n/es_US/Payroll.PayrollHistory.json.js.map +1 -0
- package/dist/i18n/es_US/Payroll.PayrollLanding.json.js +16 -0
- package/dist/i18n/es_US/Payroll.PayrollLanding.json.js.map +1 -0
- package/dist/i18n/es_US/Payroll.PayrollList.json.js +38 -0
- package/dist/i18n/es_US/Payroll.PayrollList.json.js.map +1 -0
- package/dist/i18n/es_US/Payroll.PayrollOverview.json.js +70 -0
- package/dist/i18n/es_US/Payroll.PayrollOverview.json.js.map +1 -0
- package/dist/i18n/es_US/Payroll.PayrollReceipts.json.js +20 -0
- package/dist/i18n/es_US/Payroll.PayrollReceipts.json.js.map +1 -0
- package/dist/i18n/es_US/Payroll.RecoveryCasesList.json.js +20 -0
- package/dist/i18n/es_US/Payroll.RecoveryCasesList.json.js.map +1 -0
- package/dist/i18n/es_US/Payroll.RecoveryCasesResubmit.json.js +8 -0
- package/dist/i18n/es_US/Payroll.RecoveryCasesResubmit.json.js.map +1 -0
- package/dist/i18n/es_US/Payroll.Transition.json.js +8 -0
- package/dist/i18n/es_US/Payroll.Transition.json.js.map +1 -0
- package/dist/i18n/es_US/Payroll.TransitionCreation.json.js +20 -0
- package/dist/i18n/es_US/Payroll.TransitionCreation.json.js.map +1 -0
- package/dist/i18n/es_US/Payroll.TransitionPayrollAlert.json.js +18 -0
- package/dist/i18n/es_US/Payroll.TransitionPayrollAlert.json.js.map +1 -0
- package/dist/i18n/es_US/Payroll.WireInstructions.json.js +30 -0
- package/dist/i18n/es_US/Payroll.WireInstructions.json.js.map +1 -0
- package/dist/i18n/es_US/common.json.js +44 -0
- package/dist/i18n/es_US/common.json.js.map +1 -0
- package/dist/i18n/types.d.ts +262 -6
- package/dist/index.d.ts +2 -2
- package/dist/models/external.d.ts +23 -0
- package/dist/style.css +1 -1
- package/docs/guides/endpoint-inventory.json +5 -0
- package/package.json +10 -10
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fields.js","sources":["../../../../../../src/components/Contractor/Profile/shared/useContractorDetailsForm/fields.tsx"],"sourcesContent":["import type {\n ContractorDetailsErrorCodes,\n ContractorDetailsFormData,\n} from './contractorDetailsSchema'\nimport type { TextInputHookFieldProps } from '@/partner-hook-utils/form/fields/TextInputHookField'\nimport type { NumberInputHookFieldProps } from '@/partner-hook-utils/form/fields/NumberInputHookField'\nimport type { DatePickerHookFieldProps } from '@/partner-hook-utils/form/fields/DatePickerHookField'\nimport type { SwitchHookFieldProps } from '@/partner-hook-utils/form/fields/SwitchHookField'\nimport type { RadioGroupHookFieldProps } from '@/partner-hook-utils/form/fields/RadioGroupHookField'\nimport type { SelectHookFieldProps } from '@/partner-hook-utils/form/fields/SelectHookField'\nimport {\n TextInputHookField,\n NumberInputHookField,\n DatePickerHookField,\n SwitchHookField,\n RadioGroupHookField,\n SelectHookField,\n} from '@/partner-hook-utils/form/fields'\nimport { useFormFieldsMetadataContext } from '@/partner-hook-utils/form/FormFieldsMetadataContext'\nimport type { HookFieldProps } from '@/partner-hook-utils/types'\nimport { normalizeSSN, usePlaceholderSSN } from '@/helpers/ssn'\nimport { normalizeEin, usePlaceholderEin } from '@/helpers/federalEin'\n\n/**\n * Error code emitted by fields of {@link useContractorDetailsForm} that only\n * produce `REQUIRED`.\n *\n * @public\n */\nexport type RequiredValidation = typeof ContractorDetailsErrorCodes.REQUIRED\n\n/**\n * Validation error codes emitted by the name fields of {@link useContractorDetailsForm}.\n *\n * @public\n */\nexport type NameValidation = (typeof ContractorDetailsErrorCodes)['REQUIRED' | 'INVALID_NAME']\n\n/**\n * Validation error codes emitted by the `email` field of {@link useContractorDetailsForm}.\n *\n * @public\n */\nexport type EmailValidation = (typeof ContractorDetailsErrorCodes)['REQUIRED' | 'INVALID_EMAIL']\n\n/**\n * Format-validation error code emitted by the `ssn` field of {@link useContractorDetailsForm}.\n *\n * @public\n */\nexport type SsnValidation = typeof ContractorDetailsErrorCodes.INVALID_SSN\n\n/**\n * Required-field error code emitted by the `ssn` field of {@link useContractorDetailsForm}.\n *\n * @public\n */\nexport type SsnRequiredValidation = typeof ContractorDetailsErrorCodes.REQUIRED\n\n/**\n * Format-validation error code emitted by the `ein` field of {@link useContractorDetailsForm}.\n *\n * @public\n */\nexport type EinValidation = typeof ContractorDetailsErrorCodes.INVALID_EIN\n\n/**\n * Required-field error code emitted by the `ein` field of {@link useContractorDetailsForm}.\n *\n * @public\n */\nexport type EinRequiredValidation = typeof ContractorDetailsErrorCodes.REQUIRED\n\n/**\n * Props accepted by {@link useContractorDetailsForm}'s `Fields.Type` component.\n *\n * @public\n */\nexport type TypeFieldProps = HookFieldProps<\n RadioGroupHookFieldProps<never, ContractorDetailsFormData['type']>\n>\n\n/** @internal */\nexport function TypeField(props: TypeFieldProps) {\n return <RadioGroupHookField {...props} name=\"type\" />\n}\n\n/**\n * Props accepted by {@link useContractorDetailsForm}'s `Fields.WageType` component.\n *\n * @public\n */\nexport type WageTypeFieldProps = HookFieldProps<\n RadioGroupHookFieldProps<never, ContractorDetailsFormData['wageType']>\n>\n\n/** @internal */\nexport function WageTypeField(props: WageTypeFieldProps) {\n return <RadioGroupHookField {...props} name=\"wageType\" />\n}\n\n/**\n * Props accepted by {@link useContractorDetailsForm}'s `Fields.StartDate` component.\n *\n * @public\n */\nexport type StartDateFieldProps = HookFieldProps<DatePickerHookFieldProps<RequiredValidation>>\n\n/** @internal */\nexport function StartDateField(props: StartDateFieldProps) {\n return <DatePickerHookField {...props} name=\"startDate\" />\n}\n\n/**\n * Props accepted by {@link useContractorDetailsForm}'s `Fields.HourlyRate` component.\n *\n * @public\n */\nexport type HourlyRateFieldProps = HookFieldProps<NumberInputHookFieldProps<RequiredValidation>>\n\n/** @internal */\nexport function HourlyRateField(props: HourlyRateFieldProps) {\n return <NumberInputHookField {...props} name=\"hourlyRate\" />\n}\n\n/**\n * Props accepted by {@link useContractorDetailsForm}'s `Fields.SelfOnboarding` component.\n *\n * @public\n */\nexport type SelfOnboardingFieldProps = HookFieldProps<SwitchHookFieldProps>\n\n/** @internal */\nexport function SelfOnboardingField(props: SelfOnboardingFieldProps) {\n return <SwitchHookField {...props} name=\"selfOnboarding\" />\n}\n\n/**\n * Props accepted by {@link useContractorDetailsForm}'s `Fields.FileNewHireReport` component.\n *\n * @public\n */\nexport type FileNewHireReportFieldProps = HookFieldProps<SwitchHookFieldProps>\n\n/** @internal */\nexport function FileNewHireReportField(props: FileNewHireReportFieldProps) {\n return <SwitchHookField {...props} name=\"fileNewHireReport\" />\n}\n\n/**\n * Props accepted by {@link useContractorDetailsForm}'s `Fields.Email` component.\n *\n * @public\n */\nexport type EmailFieldProps = HookFieldProps<TextInputHookFieldProps<EmailValidation>>\n\n/** @internal */\nexport function EmailField(props: EmailFieldProps) {\n return <TextInputHookField {...props} name=\"email\" />\n}\n\n/**\n * Props accepted by {@link useContractorDetailsForm}'s `Fields.FirstName` component.\n *\n * @public\n */\nexport type FirstNameFieldProps = HookFieldProps<TextInputHookFieldProps<NameValidation>>\n\n/** @internal */\nexport function FirstNameField(props: FirstNameFieldProps) {\n return <TextInputHookField {...props} name=\"firstName\" />\n}\n\n/**\n * Props accepted by {@link useContractorDetailsForm}'s `Fields.LastName` component.\n *\n * @public\n */\nexport type LastNameFieldProps = HookFieldProps<TextInputHookFieldProps<NameValidation>>\n\n/** @internal */\nexport function LastNameField(props: LastNameFieldProps) {\n return <TextInputHookField {...props} name=\"lastName\" />\n}\n\n/**\n * Props accepted by {@link useContractorDetailsForm}'s `Fields.MiddleInitial` component.\n *\n * @public\n */\nexport type MiddleInitialFieldProps = HookFieldProps<TextInputHookFieldProps<RequiredValidation>>\n\n/** @internal */\nexport function MiddleInitialField(props: MiddleInitialFieldProps) {\n return <TextInputHookField {...props} name=\"middleInitial\" />\n}\n\n/**\n * Props accepted by {@link useContractorDetailsForm}'s `Fields.BusinessName` component.\n *\n * @public\n */\nexport type BusinessNameFieldProps = HookFieldProps<TextInputHookFieldProps<RequiredValidation>>\n\n/** @internal */\nexport function BusinessNameField(props: BusinessNameFieldProps) {\n return <TextInputHookField {...props} name=\"businessName\" />\n}\n\n/**\n * Props accepted by {@link useContractorDetailsForm}'s `Fields.Ssn` component.\n *\n * @public\n */\nexport type SsnFieldProps = HookFieldProps<\n TextInputHookFieldProps<SsnValidation, SsnRequiredValidation>\n>\n\n/** @internal */\nexport function SsnField(props: SsnFieldProps) {\n const metadataContext = useFormFieldsMetadataContext()\n const metadata = props.formHookResult?.form.fieldsMetadata ?? metadataContext?.metadata ?? {}\n const placeholderSSN = usePlaceholderSSN(metadata.ssn?.hasRedactedValue)\n return (\n <TextInputHookField\n {...props}\n name=\"ssn\"\n transform={normalizeSSN}\n placeholder={placeholderSSN}\n />\n )\n}\n\n/**\n * Props accepted by {@link useContractorDetailsForm}'s `Fields.Ein` component.\n *\n * @public\n */\nexport type EinFieldProps = HookFieldProps<\n TextInputHookFieldProps<EinValidation, EinRequiredValidation>\n>\n\n/** @internal */\nexport function EinField(props: EinFieldProps) {\n const metadataContext = useFormFieldsMetadataContext()\n const metadata = props.formHookResult?.form.fieldsMetadata ?? metadataContext?.metadata ?? {}\n const placeholderEin = usePlaceholderEin(metadata.ein?.hasRedactedValue)\n return (\n <TextInputHookField\n {...props}\n name=\"ein\"\n transform={normalizeEin}\n placeholder={placeholderEin}\n />\n )\n}\n\n/**\n * Props accepted by {@link useContractorDetailsForm}'s `Fields.WorkState` component.\n *\n * @public\n */\nexport type WorkStateFieldProps = HookFieldProps<SelectHookFieldProps<RequiredValidation, string>>\n\n/** @internal */\nexport function WorkStateField(props: WorkStateFieldProps) {\n return <SelectHookField {...props} name=\"workState\" />\n}\n"],"names":["TypeField","props","jsx","RadioGroupHookField","WageTypeField","StartDateField","DatePickerHookField","HourlyRateField","NumberInputHookField","SelfOnboardingField","SwitchHookField","FileNewHireReportField","EmailField","TextInputHookField","FirstNameField","LastNameField","MiddleInitialField","BusinessNameField","SsnField","metadataContext","useFormFieldsMetadataContext","metadata","placeholderSSN","usePlaceholderSSN","normalizeSSN","EinField","placeholderEin","usePlaceholderEin","normalizeEin","WorkStateField","SelectHookField"],"mappings":";;;;;;;;;;AAmFO,SAASA,EAAUC,GAAuB;AAC/C,SAAO,gBAAAC,EAACC,GAAA,EAAqB,GAAGF,GAAO,MAAK,QAAO;AACrD;AAYO,SAASG,EAAcH,GAA2B;AACvD,SAAO,gBAAAC,EAACC,GAAA,EAAqB,GAAGF,GAAO,MAAK,YAAW;AACzD;AAUO,SAASI,EAAeJ,GAA4B;AACzD,SAAO,gBAAAC,EAACI,GAAA,EAAqB,GAAGL,GAAO,MAAK,aAAY;AAC1D;AAUO,SAASM,EAAgBN,GAA6B;AAC3D,SAAO,gBAAAC,EAACM,GAAA,EAAsB,GAAGP,GAAO,MAAK,cAAa;AAC5D;AAUO,SAASQ,EAAoBR,GAAiC;AACnE,SAAO,gBAAAC,EAACQ,GAAA,EAAiB,GAAGT,GAAO,MAAK,kBAAiB;AAC3D;AAUO,SAASU,EAAuBV,GAAoC;AACzE,SAAO,gBAAAC,EAACQ,GAAA,EAAiB,GAAGT,GAAO,MAAK,qBAAoB;AAC9D;AAUO,SAASW,EAAWX,GAAwB;AACjD,SAAO,gBAAAC,EAACW,GAAA,EAAoB,GAAGZ,GAAO,MAAK,SAAQ;AACrD;AAUO,SAASa,EAAeb,GAA4B;AACzD,SAAO,gBAAAC,EAACW,GAAA,EAAoB,GAAGZ,GAAO,MAAK,aAAY;AACzD;AAUO,SAASc,EAAcd,GAA2B;AACvD,SAAO,gBAAAC,EAACW,GAAA,EAAoB,GAAGZ,GAAO,MAAK,YAAW;AACxD;AAUO,SAASe,EAAmBf,GAAgC;AACjE,SAAO,gBAAAC,EAACW,GAAA,EAAoB,GAAGZ,GAAO,MAAK,iBAAgB;AAC7D;AAUO,SAASgB,EAAkBhB,GAA+B;AAC/D,SAAO,gBAAAC,EAACW,GAAA,EAAoB,GAAGZ,GAAO,MAAK,gBAAe;AAC5D;AAYO,SAASiB,EAASjB,GAAsB;AAC7C,QAAMkB,IAAkBC,EAAA,GAClBC,IAAWpB,EAAM,gBAAgB,KAAK,kBAAkBkB,GAAiB,YAAY,CAAA,GACrFG,IAAiBC,EAAkBF,EAAS,KAAK,gBAAgB;AACvE,SACE,gBAAAnB;AAAA,IAACW;AAAA,IAAA;AAAA,MACE,GAAGZ;AAAA,MACJ,MAAK;AAAA,MACL,WAAWuB;AAAA,MACX,aAAaF;AAAA,IAAA;AAAA,EAAA;AAGnB;AAYO,SAASG,EAASxB,GAAsB;AAC7C,QAAMkB,IAAkBC,EAAA,GAClBC,IAAWpB,EAAM,gBAAgB,KAAK,kBAAkBkB,GAAiB,YAAY,CAAA,GACrFO,IAAiBC,EAAkBN,EAAS,KAAK,gBAAgB;AACvE,SACE,gBAAAnB;AAAA,IAACW;AAAA,IAAA;AAAA,MACE,GAAGZ;AAAA,MACJ,MAAK;AAAA,MACL,WAAW2B;AAAA,MACX,aAAaF;AAAA,IAAA;AAAA,EAAA;AAGnB;AAUO,SAASG,EAAe5B,GAA4B;AACzD,SAAO,gBAAAC,EAAC4B,GAAA,EAAiB,GAAG7B,GAAO,MAAK,aAAY;AACtD;"}
|
|
1
|
+
{"version":3,"file":"fields.js","sources":["../../../../../../src/components/Contractor/Profile/shared/useContractorDetailsForm/fields.tsx"],"sourcesContent":["import type {\n ContractorDetailsErrorCodes,\n ContractorDetailsFormData,\n} from './contractorDetailsSchema'\nimport type { TextInputHookFieldProps } from '@/partner-hook-utils/form/fields/TextInputHookField'\nimport type { NumberInputHookFieldProps } from '@/partner-hook-utils/form/fields/NumberInputHookField'\nimport type { DatePickerHookFieldProps } from '@/partner-hook-utils/form/fields/DatePickerHookField'\nimport type { SwitchHookFieldProps } from '@/partner-hook-utils/form/fields/SwitchHookField'\nimport type { RadioGroupHookFieldProps } from '@/partner-hook-utils/form/fields/RadioGroupHookField'\nimport type { SelectHookFieldProps } from '@/partner-hook-utils/form/fields/SelectHookField'\nimport {\n TextInputHookField,\n NumberInputHookField,\n DatePickerHookField,\n SwitchHookField,\n RadioGroupHookField,\n SelectHookField,\n} from '@/partner-hook-utils/form/fields'\nimport { useFormFieldsMetadataContext } from '@/partner-hook-utils/form/FormFieldsMetadataContext'\nimport type { HookFieldProps } from '@/partner-hook-utils/types'\nimport { normalizeSSN, usePlaceholderSSN } from '@/helpers/ssn'\nimport { normalizeEin, usePlaceholderEin } from '@/helpers/federalEin'\n\n/**\n * Error code emitted by fields of {@link useContractorDetailsForm} that only\n * produce `REQUIRED`.\n *\n * @public\n */\nexport type RequiredValidation = typeof ContractorDetailsErrorCodes.REQUIRED\n\n/**\n * Validation code for an hourly rate above the server's maximum cap.\n *\n * @public\n */\nexport type MaxHourlyRateValidation = typeof ContractorDetailsErrorCodes.MAX_HOURLY_RATE\n\n/**\n * Validation error codes emitted by the name fields of {@link useContractorDetailsForm}.\n *\n * @public\n */\nexport type NameValidation = (typeof ContractorDetailsErrorCodes)['REQUIRED' | 'INVALID_NAME']\n\n/**\n * Validation error codes emitted by the `email` field of {@link useContractorDetailsForm}.\n *\n * @public\n */\nexport type EmailValidation = (typeof ContractorDetailsErrorCodes)['REQUIRED' | 'INVALID_EMAIL']\n\n/**\n * Format-validation error code emitted by the `ssn` field of {@link useContractorDetailsForm}.\n *\n * @public\n */\nexport type SsnValidation = typeof ContractorDetailsErrorCodes.INVALID_SSN\n\n/**\n * Required-field error code emitted by the `ssn` field of {@link useContractorDetailsForm}.\n *\n * @public\n */\nexport type SsnRequiredValidation = typeof ContractorDetailsErrorCodes.REQUIRED\n\n/**\n * Format-validation error code emitted by the `ein` field of {@link useContractorDetailsForm}.\n *\n * @public\n */\nexport type EinValidation = typeof ContractorDetailsErrorCodes.INVALID_EIN\n\n/**\n * Required-field error code emitted by the `ein` field of {@link useContractorDetailsForm}.\n *\n * @public\n */\nexport type EinRequiredValidation = typeof ContractorDetailsErrorCodes.REQUIRED\n\n/**\n * Props accepted by {@link useContractorDetailsForm}'s `Fields.Type` component.\n *\n * @public\n */\nexport type TypeFieldProps = HookFieldProps<\n RadioGroupHookFieldProps<never, ContractorDetailsFormData['type']>\n>\n\n/** @internal */\nexport function TypeField(props: TypeFieldProps) {\n return <RadioGroupHookField {...props} name=\"type\" />\n}\n\n/**\n * Props accepted by {@link useContractorDetailsForm}'s `Fields.WageType` component.\n *\n * @public\n */\nexport type WageTypeFieldProps = HookFieldProps<\n RadioGroupHookFieldProps<never, ContractorDetailsFormData['wageType']>\n>\n\n/** @internal */\nexport function WageTypeField(props: WageTypeFieldProps) {\n return <RadioGroupHookField {...props} name=\"wageType\" />\n}\n\n/**\n * Props accepted by {@link useContractorDetailsForm}'s `Fields.StartDate` component.\n *\n * @public\n */\nexport type StartDateFieldProps = HookFieldProps<DatePickerHookFieldProps<RequiredValidation>>\n\n/** @internal */\nexport function StartDateField(props: StartDateFieldProps) {\n return <DatePickerHookField {...props} name=\"startDate\" />\n}\n\n/**\n * Props accepted by {@link useContractorDetailsForm}'s `Fields.HourlyRate` component.\n *\n * @public\n */\nexport type HourlyRateFieldProps = HookFieldProps<\n NumberInputHookFieldProps<RequiredValidation | MaxHourlyRateValidation>\n>\n\n/** @internal */\nexport function HourlyRateField(props: HourlyRateFieldProps) {\n return <NumberInputHookField {...props} name=\"hourlyRate\" />\n}\n\n/**\n * Props accepted by {@link useContractorDetailsForm}'s `Fields.SelfOnboarding` component.\n *\n * @public\n */\nexport type SelfOnboardingFieldProps = HookFieldProps<SwitchHookFieldProps>\n\n/** @internal */\nexport function SelfOnboardingField(props: SelfOnboardingFieldProps) {\n return <SwitchHookField {...props} name=\"selfOnboarding\" />\n}\n\n/**\n * Props accepted by {@link useContractorDetailsForm}'s `Fields.FileNewHireReport` component.\n *\n * @public\n */\nexport type FileNewHireReportFieldProps = HookFieldProps<SwitchHookFieldProps>\n\n/** @internal */\nexport function FileNewHireReportField(props: FileNewHireReportFieldProps) {\n return <SwitchHookField {...props} name=\"fileNewHireReport\" />\n}\n\n/**\n * Props accepted by {@link useContractorDetailsForm}'s `Fields.Email` component.\n *\n * @public\n */\nexport type EmailFieldProps = HookFieldProps<TextInputHookFieldProps<EmailValidation>>\n\n/** @internal */\nexport function EmailField(props: EmailFieldProps) {\n return <TextInputHookField {...props} name=\"email\" />\n}\n\n/**\n * Props accepted by {@link useContractorDetailsForm}'s `Fields.FirstName` component.\n *\n * @public\n */\nexport type FirstNameFieldProps = HookFieldProps<TextInputHookFieldProps<NameValidation>>\n\n/** @internal */\nexport function FirstNameField(props: FirstNameFieldProps) {\n return <TextInputHookField {...props} name=\"firstName\" />\n}\n\n/**\n * Props accepted by {@link useContractorDetailsForm}'s `Fields.LastName` component.\n *\n * @public\n */\nexport type LastNameFieldProps = HookFieldProps<TextInputHookFieldProps<NameValidation>>\n\n/** @internal */\nexport function LastNameField(props: LastNameFieldProps) {\n return <TextInputHookField {...props} name=\"lastName\" />\n}\n\n/**\n * Props accepted by {@link useContractorDetailsForm}'s `Fields.MiddleInitial` component.\n *\n * @public\n */\nexport type MiddleInitialFieldProps = HookFieldProps<TextInputHookFieldProps<RequiredValidation>>\n\n/** @internal */\nexport function MiddleInitialField(props: MiddleInitialFieldProps) {\n return <TextInputHookField {...props} name=\"middleInitial\" />\n}\n\n/**\n * Props accepted by {@link useContractorDetailsForm}'s `Fields.BusinessName` component.\n *\n * @public\n */\nexport type BusinessNameFieldProps = HookFieldProps<TextInputHookFieldProps<RequiredValidation>>\n\n/** @internal */\nexport function BusinessNameField(props: BusinessNameFieldProps) {\n return <TextInputHookField {...props} name=\"businessName\" />\n}\n\n/**\n * Props accepted by {@link useContractorDetailsForm}'s `Fields.Ssn` component.\n *\n * @public\n */\nexport type SsnFieldProps = HookFieldProps<\n TextInputHookFieldProps<SsnValidation, SsnRequiredValidation>\n>\n\n/** @internal */\nexport function SsnField(props: SsnFieldProps) {\n const metadataContext = useFormFieldsMetadataContext()\n const metadata = props.formHookResult?.form.fieldsMetadata ?? metadataContext?.metadata ?? {}\n const placeholderSSN = usePlaceholderSSN(metadata.ssn?.hasRedactedValue)\n return (\n <TextInputHookField\n {...props}\n name=\"ssn\"\n transform={normalizeSSN}\n placeholder={placeholderSSN}\n />\n )\n}\n\n/**\n * Props accepted by {@link useContractorDetailsForm}'s `Fields.Ein` component.\n *\n * @public\n */\nexport type EinFieldProps = HookFieldProps<\n TextInputHookFieldProps<EinValidation, EinRequiredValidation>\n>\n\n/** @internal */\nexport function EinField(props: EinFieldProps) {\n const metadataContext = useFormFieldsMetadataContext()\n const metadata = props.formHookResult?.form.fieldsMetadata ?? metadataContext?.metadata ?? {}\n const placeholderEin = usePlaceholderEin(metadata.ein?.hasRedactedValue)\n return (\n <TextInputHookField\n {...props}\n name=\"ein\"\n transform={normalizeEin}\n placeholder={placeholderEin}\n />\n )\n}\n\n/**\n * Props accepted by {@link useContractorDetailsForm}'s `Fields.WorkState` component.\n *\n * @public\n */\nexport type WorkStateFieldProps = HookFieldProps<SelectHookFieldProps<RequiredValidation, string>>\n\n/** @internal */\nexport function WorkStateField(props: WorkStateFieldProps) {\n return <SelectHookField {...props} name=\"workState\" />\n}\n"],"names":["TypeField","props","jsx","RadioGroupHookField","WageTypeField","StartDateField","DatePickerHookField","HourlyRateField","NumberInputHookField","SelfOnboardingField","SwitchHookField","FileNewHireReportField","EmailField","TextInputHookField","FirstNameField","LastNameField","MiddleInitialField","BusinessNameField","SsnField","metadataContext","useFormFieldsMetadataContext","metadata","placeholderSSN","usePlaceholderSSN","normalizeSSN","EinField","placeholderEin","usePlaceholderEin","normalizeEin","WorkStateField","SelectHookField"],"mappings":";;;;;;;;;;AA0FO,SAASA,EAAUC,GAAuB;AAC/C,SAAO,gBAAAC,EAACC,GAAA,EAAqB,GAAGF,GAAO,MAAK,QAAO;AACrD;AAYO,SAASG,EAAcH,GAA2B;AACvD,SAAO,gBAAAC,EAACC,GAAA,EAAqB,GAAGF,GAAO,MAAK,YAAW;AACzD;AAUO,SAASI,EAAeJ,GAA4B;AACzD,SAAO,gBAAAC,EAACI,GAAA,EAAqB,GAAGL,GAAO,MAAK,aAAY;AAC1D;AAYO,SAASM,EAAgBN,GAA6B;AAC3D,SAAO,gBAAAC,EAACM,GAAA,EAAsB,GAAGP,GAAO,MAAK,cAAa;AAC5D;AAUO,SAASQ,EAAoBR,GAAiC;AACnE,SAAO,gBAAAC,EAACQ,GAAA,EAAiB,GAAGT,GAAO,MAAK,kBAAiB;AAC3D;AAUO,SAASU,EAAuBV,GAAoC;AACzE,SAAO,gBAAAC,EAACQ,GAAA,EAAiB,GAAGT,GAAO,MAAK,qBAAoB;AAC9D;AAUO,SAASW,EAAWX,GAAwB;AACjD,SAAO,gBAAAC,EAACW,GAAA,EAAoB,GAAGZ,GAAO,MAAK,SAAQ;AACrD;AAUO,SAASa,EAAeb,GAA4B;AACzD,SAAO,gBAAAC,EAACW,GAAA,EAAoB,GAAGZ,GAAO,MAAK,aAAY;AACzD;AAUO,SAASc,EAAcd,GAA2B;AACvD,SAAO,gBAAAC,EAACW,GAAA,EAAoB,GAAGZ,GAAO,MAAK,YAAW;AACxD;AAUO,SAASe,EAAmBf,GAAgC;AACjE,SAAO,gBAAAC,EAACW,GAAA,EAAoB,GAAGZ,GAAO,MAAK,iBAAgB;AAC7D;AAUO,SAASgB,EAAkBhB,GAA+B;AAC/D,SAAO,gBAAAC,EAACW,GAAA,EAAoB,GAAGZ,GAAO,MAAK,gBAAe;AAC5D;AAYO,SAASiB,EAASjB,GAAsB;AAC7C,QAAMkB,IAAkBC,EAAA,GAClBC,IAAWpB,EAAM,gBAAgB,KAAK,kBAAkBkB,GAAiB,YAAY,CAAA,GACrFG,IAAiBC,EAAkBF,EAAS,KAAK,gBAAgB;AACvE,SACE,gBAAAnB;AAAA,IAACW;AAAA,IAAA;AAAA,MACE,GAAGZ;AAAA,MACJ,MAAK;AAAA,MACL,WAAWuB;AAAA,MACX,aAAaF;AAAA,IAAA;AAAA,EAAA;AAGnB;AAYO,SAASG,EAASxB,GAAsB;AAC7C,QAAMkB,IAAkBC,EAAA,GAClBC,IAAWpB,EAAM,gBAAgB,KAAK,kBAAkBkB,GAAiB,YAAY,CAAA,GACrFO,IAAiBC,EAAkBN,EAAS,KAAK,gBAAgB;AACvE,SACE,gBAAAnB;AAAA,IAACW;AAAA,IAAA;AAAA,MACE,GAAGZ;AAAA,MACJ,MAAK;AAAA,MACL,WAAW2B;AAAA,MACX,aAAaF;AAAA,IAAA;AAAA,EAAA;AAGnB;AAUO,SAASG,EAAe5B,GAA4B;AACzD,SAAO,gBAAAC,EAAC4B,GAAA,EAAiB,GAAG7B,GAAO,MAAK,aAAY;AACtD;"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
export { useContractorDetailsForm } from './useContractorDetailsForm';
|
|
2
2
|
export type { ContractorDetailsSubmitOptions, ContractorDetailsOptionalFieldsToRequire, UseContractorDetailsFormSharedProps, UseContractorDetailsFormProps, UseContractorDetailsFormResult, UseContractorDetailsFormReady, ContractorDetailsFieldsMetadata, ContractorDetailsFormFields, } from './useContractorDetailsForm';
|
|
3
3
|
export { ContractorType, WageType, ContractorDetailsErrorCodes, type ContractorDetailsErrorCode, type ContractorDetailsFormData, } from './contractorDetailsSchema';
|
|
4
|
-
export type { RequiredValidation as ContractorDetailsRequiredValidation, NameValidation as ContractorDetailsNameValidation, EmailValidation as ContractorDetailsEmailValidation, SsnValidation as ContractorDetailsSsnValidation, SsnRequiredValidation as ContractorDetailsSsnRequiredValidation, EinValidation as ContractorDetailsEinValidation, EinRequiredValidation as ContractorDetailsEinRequiredValidation, TypeFieldProps, WageTypeFieldProps, StartDateFieldProps, HourlyRateFieldProps, SelfOnboardingFieldProps, FileNewHireReportFieldProps, EmailFieldProps, FirstNameFieldProps, LastNameFieldProps, MiddleInitialFieldProps, BusinessNameFieldProps, SsnFieldProps, EinFieldProps, WorkStateFieldProps, } from './fields';
|
|
4
|
+
export type { RequiredValidation as ContractorDetailsRequiredValidation, MaxHourlyRateValidation as ContractorDetailsMaxHourlyRateValidation, NameValidation as ContractorDetailsNameValidation, EmailValidation as ContractorDetailsEmailValidation, SsnValidation as ContractorDetailsSsnValidation, SsnRequiredValidation as ContractorDetailsSsnRequiredValidation, EinValidation as ContractorDetailsEinValidation, EinRequiredValidation as ContractorDetailsEinRequiredValidation, TypeFieldProps, WageTypeFieldProps, StartDateFieldProps, HourlyRateFieldProps, SelfOnboardingFieldProps, FileNewHireReportFieldProps, EmailFieldProps, FirstNameFieldProps, LastNameFieldProps, MiddleInitialFieldProps, BusinessNameFieldProps, SsnFieldProps, EinFieldProps, WorkStateFieldProps, } from './fields';
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { useMemo as D } from "react";
|
|
2
|
-
import { useForm as re, useWatch as
|
|
3
|
-
import { zodResolver as
|
|
4
|
-
import { useContractorsGet as
|
|
2
|
+
import { useForm as re, useWatch as ne } from "react-hook-form";
|
|
3
|
+
import { zodResolver as se } from "@hookform/resolvers/zod";
|
|
4
|
+
import { useContractorsGet as ae } from "@gusto/embedded-api/react-query/contractorsGet";
|
|
5
5
|
import { useContractorsCreateMutation as de } from "@gusto/embedded-api/react-query/contractorsCreate";
|
|
6
6
|
import { useContractorsUpdateMutation as le } from "@gusto/embedded-api/react-query/contractorsUpdate";
|
|
7
|
-
import { createContractorDetailsSchema as me, WageType as m, ContractorType as
|
|
8
|
-
import { WorkStateField as ue, EinField as ce, SsnField as fe, BusinessNameField as ge, MiddleInitialField as Ne, LastNameField as pe, FirstNameField as we, EmailField as Se, FileNewHireReportField as ye, SelfOnboardingField as ve, HourlyRateField as
|
|
7
|
+
import { createContractorDetailsSchema as me, WageType as m, ContractorType as a } from "./contractorDetailsSchema.js";
|
|
8
|
+
import { WorkStateField as ue, EinField as ce, SsnField as fe, BusinessNameField as ge, MiddleInitialField as Ne, LastNameField as pe, FirstNameField as we, EmailField as Se, FileNewHireReportField as ye, SelfOnboardingField as ve, HourlyRateField as be, StartDateField as Fe, WageTypeField as Re, TypeField as he } from "./fields.js";
|
|
9
9
|
import { useDeriveFieldsMetadata as Oe } from "../../../../../partner-hook-utils/form/useDeriveFieldsMetadata.js";
|
|
10
10
|
import { useHookFormInternals as Te } from "../../../../../partner-hook-utils/form/useHookFormInternals.js";
|
|
11
11
|
import { createGetFormSubmissionValues as He } from "../../../../../partner-hook-utils/form/getFormSubmissionValues.js";
|
|
@@ -17,12 +17,12 @@ import { SDKInternalError as g } from "../../../../../types/sdkError.js";
|
|
|
17
17
|
import { removeNonDigits as A } from "../../../../../helpers/formattedStrings.js";
|
|
18
18
|
const Me = (e) => !!e?.onboardingStatus && Ie.has(e.onboardingStatus), Be = (e) => e ? e.onboardingStatus === L.ADMIN_ONBOARDING_INCOMPLETE || e.onboardingStatus === L.SELF_ONBOARDING_NOT_INVITED : !0;
|
|
19
19
|
function ke(e) {
|
|
20
|
-
const
|
|
20
|
+
const n = [a.Individual, a.Business], u = [m.Hourly, m.Fixed];
|
|
21
21
|
return {
|
|
22
22
|
type: w(
|
|
23
23
|
e.type,
|
|
24
|
-
|
|
25
|
-
|
|
24
|
+
n.map((r) => ({ value: r, label: r })),
|
|
25
|
+
n
|
|
26
26
|
),
|
|
27
27
|
wageType: w(
|
|
28
28
|
e.wageType,
|
|
@@ -49,7 +49,7 @@ function ke(e) {
|
|
|
49
49
|
}
|
|
50
50
|
function $e({
|
|
51
51
|
companyId: e,
|
|
52
|
-
contractorId:
|
|
52
|
+
contractorId: n,
|
|
53
53
|
withSelfOnboardingField: u = !0,
|
|
54
54
|
showEmailField: r = !1,
|
|
55
55
|
optionalFieldsToRequire: S,
|
|
@@ -57,15 +57,15 @@ function $e({
|
|
|
57
57
|
validationMode: W = "onSubmit",
|
|
58
58
|
shouldFocusError: V = !0
|
|
59
59
|
}) {
|
|
60
|
-
const N =
|
|
61
|
-
{ contractorUuid:
|
|
62
|
-
{ enabled: !!
|
|
63
|
-
), t = N.data?.contractor, c = !
|
|
64
|
-
() => me({ mode: y, optionalFieldsToRequire: S, hasSsn: v, hasEin:
|
|
65
|
-
[y, S, v,
|
|
60
|
+
const N = ae(
|
|
61
|
+
{ contractorUuid: n ?? "" },
|
|
62
|
+
{ enabled: !!n }
|
|
63
|
+
), t = N.data?.contractor, c = !n, _ = Be(t), y = c ? "create" : "update", v = t?.hasSsn ?? !1, b = t?.hasEin ?? !1, [F, P] = D(
|
|
64
|
+
() => me({ mode: y, optionalFieldsToRequire: S, hasSsn: v, hasEin: b }),
|
|
65
|
+
[y, S, v, b]
|
|
66
66
|
), R = t?.hourlyRate != null ? parseFloat(t.hourlyRate) : void 0, h = D(
|
|
67
67
|
() => ({
|
|
68
|
-
type: t?.type ?? o?.type ??
|
|
68
|
+
type: t?.type ?? o?.type ?? a.Individual,
|
|
69
69
|
wageType: t?.wageType ?? o?.wageType ?? m.Fixed,
|
|
70
70
|
startDate: t?.startDate ?? o?.startDate ?? (/* @__PURE__ */ new Date()).toISOString().split("T")[0],
|
|
71
71
|
hourlyRate: R ?? o?.hourlyRate ?? NaN,
|
|
@@ -82,20 +82,20 @@ function $e({
|
|
|
82
82
|
}),
|
|
83
83
|
[t, o, R]
|
|
84
84
|
), d = re({
|
|
85
|
-
resolver:
|
|
85
|
+
resolver: se(F),
|
|
86
86
|
mode: W,
|
|
87
87
|
shouldFocusError: V,
|
|
88
88
|
defaultValues: h,
|
|
89
89
|
values: h,
|
|
90
90
|
resetOptions: { keepDirtyValues: !0 }
|
|
91
|
-
}), [O, U, G, x] =
|
|
91
|
+
}), [O, U, G, x] = ne({
|
|
92
92
|
control: d.control,
|
|
93
93
|
name: ["type", "wageType", "selfOnboarding", "fileNewHireReport"]
|
|
94
|
-
}),
|
|
94
|
+
}), s = O === a.Individual, T = O === a.Business, z = U === m.Hourly, H = de(), C = le(), K = H.isPending || C.isPending, {
|
|
95
95
|
baseSubmitHandler: Q,
|
|
96
96
|
error: j,
|
|
97
97
|
setError: J
|
|
98
|
-
} = Ee("ContractorDetailsForm"), I = Ce(
|
|
98
|
+
} = Ee("ContractorDetailsForm"), I = Ce(n ? [N] : [], { submitError: j, setSubmitError: J }), X = Oe(P, d.control), Y = ke(X), Z = async (ee) => {
|
|
99
99
|
let E;
|
|
100
100
|
return await new Promise((M) => {
|
|
101
101
|
d.handleSubmit(
|
|
@@ -106,9 +106,9 @@ function $e({
|
|
|
106
106
|
wageType: i.wageType,
|
|
107
107
|
startDate: i.startDate,
|
|
108
108
|
selfOnboarding: B,
|
|
109
|
-
email: B && i.email || void 0,
|
|
109
|
+
email: (r || B) && i.email || void 0,
|
|
110
110
|
hourlyRate: i.wageType === m.Hourly ? String(i.hourlyRate) : void 0,
|
|
111
|
-
...i.type ===
|
|
111
|
+
...i.type === a.Individual ? {
|
|
112
112
|
firstName: i.firstName,
|
|
113
113
|
lastName: i.lastName,
|
|
114
114
|
middleInitial: i.middleInitial || void 0,
|
|
@@ -163,7 +163,7 @@ function $e({
|
|
|
163
163
|
)();
|
|
164
164
|
}), E;
|
|
165
165
|
}, $ = Te(d);
|
|
166
|
-
return (
|
|
166
|
+
return (n ? N.isLoading : !1) || n && !t ? { isLoading: !0, errorHandling: I } : {
|
|
167
167
|
isLoading: !1,
|
|
168
168
|
data: {
|
|
169
169
|
contractor: t ?? null
|
|
@@ -178,22 +178,22 @@ function $e({
|
|
|
178
178
|
Fields: {
|
|
179
179
|
Type: he,
|
|
180
180
|
WageType: Re,
|
|
181
|
-
StartDate:
|
|
182
|
-
HourlyRate: z ?
|
|
181
|
+
StartDate: Fe,
|
|
182
|
+
HourlyRate: z ? be : void 0,
|
|
183
183
|
SelfOnboarding: u && _ ? ve : void 0,
|
|
184
|
-
FileNewHireReport:
|
|
184
|
+
FileNewHireReport: s ? ye : void 0,
|
|
185
185
|
Email: r || G ? Se : void 0,
|
|
186
|
-
FirstName:
|
|
187
|
-
LastName:
|
|
188
|
-
MiddleInitial:
|
|
186
|
+
FirstName: s ? we : void 0,
|
|
187
|
+
LastName: s ? pe : void 0,
|
|
188
|
+
MiddleInitial: s ? Ne : void 0,
|
|
189
189
|
BusinessName: T ? ge : void 0,
|
|
190
|
-
Ssn:
|
|
190
|
+
Ssn: s ? fe : void 0,
|
|
191
191
|
Ein: T ? ce : void 0,
|
|
192
|
-
WorkState:
|
|
192
|
+
WorkState: s && x ? ue : void 0
|
|
193
193
|
},
|
|
194
194
|
fieldsMetadata: Y,
|
|
195
195
|
hookFormInternals: $,
|
|
196
|
-
getFormSubmissionValues: He(d,
|
|
196
|
+
getFormSubmissionValues: He(d, F)
|
|
197
197
|
}
|
|
198
198
|
};
|
|
199
199
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useContractorDetailsForm.js","sources":["../../../../../../src/components/Contractor/Profile/shared/useContractorDetailsForm/useContractorDetailsForm.tsx"],"sourcesContent":["import { useMemo } from 'react'\nimport type { ComponentType } from 'react'\nimport { useForm, useWatch } from 'react-hook-form'\nimport type { UseFormProps } from 'react-hook-form'\nimport { zodResolver } from '@hookform/resolvers/zod'\nimport type { Contractor } from '@gusto/embedded-api/models/components/contractor'\nimport type { ContractorCreateRequestBody } from '@gusto/embedded-api/models/components/contractorcreaterequestbody'\nimport type { ContractorUpdateRequestBody } from '@gusto/embedded-api/models/components/contractorupdaterequestbody'\nimport { useContractorsGet } from '@gusto/embedded-api/react-query/contractorsGet'\nimport { useContractorsCreateMutation } from '@gusto/embedded-api/react-query/contractorsCreate'\nimport { useContractorsUpdateMutation } from '@gusto/embedded-api/react-query/contractorsUpdate'\nimport {\n ContractorType,\n WageType,\n createContractorDetailsSchema,\n type ContractorDetailsOptionalFieldsToRequire,\n type ContractorDetailsFormData,\n type ContractorDetailsFormOutputs,\n} from './contractorDetailsSchema'\nimport {\n TypeField,\n WageTypeField,\n StartDateField,\n HourlyRateField,\n SelfOnboardingField,\n FileNewHireReportField,\n EmailField,\n FirstNameField,\n LastNameField,\n MiddleInitialField,\n BusinessNameField,\n SsnField,\n EinField,\n WorkStateField,\n} from './fields'\nimport type {\n TypeFieldProps,\n WageTypeFieldProps,\n StartDateFieldProps,\n HourlyRateFieldProps,\n SelfOnboardingFieldProps,\n FileNewHireReportFieldProps,\n EmailFieldProps,\n FirstNameFieldProps,\n LastNameFieldProps,\n MiddleInitialFieldProps,\n BusinessNameFieldProps,\n SsnFieldProps,\n EinFieldProps,\n WorkStateFieldProps,\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 {\n ContractorSelfOnboardingStatuses,\n ContractorOnboardingStatus,\n STATES_ABBR,\n} from '@/shared/constants'\nimport { useBaseSubmit } from '@/components/Base/useBaseSubmit'\nimport { SDKInternalError } from '@/types/sdkError'\nimport { removeNonDigits } from '@/helpers/formattedStrings'\n\nexport type { ContractorDetailsOptionalFieldsToRequire } from './contractorDetailsSchema'\n\n/**\n * Optional overrides passed to {@link UseContractorDetailsFormReady.actions.onSubmit | onSubmit}.\n *\n * @public\n */\nexport interface ContractorDetailsSubmitOptions {\n /** Override the company identifier supplied to the hook (e.g. after creating the company in the same flow). Only used in create mode. */\n companyId?: string\n}\n\n/**\n * Shared options merged into both branches of {@link UseContractorDetailsFormProps}.\n *\n * @public\n */\nexport type UseContractorDetailsFormSharedProps = {\n /** Whether to expose the self-onboarding toggle as `form.Fields.SelfOnboarding`. Defaults to `true`. */\n withSelfOnboardingField?: boolean\n /**\n * Whether `form.Fields.Email` is available regardless of the `selfOnboarding` value.\n *\n * @remarks\n * By default `Email` is only exposed while `selfOnboarding` is `true`, since email is\n * otherwise only collected to send a self-onboarding invite. Set this to `true` for\n * surfaces that let an admin edit an already-onboarded contractor's email directly.\n * Defaults to `false`.\n */\n showEmailField?: boolean\n /** Fields that are optional by default but should be promoted to required for this form instance. */\n optionalFieldsToRequire?: ContractorDetailsOptionalFieldsToRequire\n /** Initial values applied before any contractor data loads. */\n defaultValues?: Partial<ContractorDetailsFormData>\n /** When validation runs. Forwarded to react-hook-form's `mode`. Defaults to `'onSubmit'`. */\n validationMode?: UseFormProps['mode']\n /** Whether react-hook-form should focus the first error on validation failure. Defaults to `true`. */\n shouldFocusError?: boolean\n}\n\n/**\n * Options for {@link useContractorDetailsForm}.\n *\n * @remarks\n * Discriminated by mode: in create mode supply `companyId` and omit\n * `contractorId`; in update mode supply `contractorId` (and optionally\n * `companyId`).\n *\n * @public\n */\nexport type UseContractorDetailsFormProps =\n | (UseContractorDetailsFormSharedProps & { companyId: string; contractorId?: never })\n | (UseContractorDetailsFormSharedProps & { contractorId: string; companyId?: string })\n\n/**\n * The Field components exposed by {@link useContractorDetailsForm} as `form.Fields`.\n *\n * @remarks\n * Conditionally-visible fields are `undefined` when they do not apply to the\n * current `type`, `wageType`, or self-onboarding selection. Always null-check\n * before rendering.\n *\n * @public\n */\nexport interface ContractorDetailsFormFields {\n /** Radio group bound to `type`. Always available. */\n Type: ComponentType<TypeFieldProps>\n /** Radio group bound to `wageType`. Always available. */\n WageType: ComponentType<WageTypeFieldProps>\n /** Date picker bound to `startDate`. Always available. */\n StartDate: ComponentType<StartDateFieldProps>\n /** Number input bound to `hourlyRate`; available only when `wageType` is `Hourly`. */\n HourlyRate: ComponentType<HourlyRateFieldProps> | undefined\n /** Switch bound to `selfOnboarding`; available only when toggleable. */\n SelfOnboarding: ComponentType<SelfOnboardingFieldProps> | undefined\n /** Switch bound to `fileNewHireReport`; available only for individual contractors. */\n FileNewHireReport: ComponentType<FileNewHireReportFieldProps> | undefined\n /** Text input bound to `email`; available only when self-onboarding is enabled. */\n Email: ComponentType<EmailFieldProps> | undefined\n /** Text input bound to `firstName`; available only for individual contractors. */\n FirstName: ComponentType<FirstNameFieldProps> | undefined\n /** Text input bound to `lastName`; available only for individual contractors. */\n LastName: ComponentType<LastNameFieldProps> | undefined\n /** Text input bound to `middleInitial`; available only for individual contractors. */\n MiddleInitial: ComponentType<MiddleInitialFieldProps> | undefined\n /** Text input bound to `businessName`; available only for business contractors. */\n BusinessName: ComponentType<BusinessNameFieldProps> | undefined\n /**\n * Text input bound to `ssn`; available only for individual contractors.\n * Auto-formats as `XXX-XX-XXXX`. When an SSN is already on file the field\n * shows a masked placeholder and the required rule is waived.\n */\n Ssn: ComponentType<SsnFieldProps> | undefined\n /**\n * Text input bound to `ein`; available only for business contractors.\n * Auto-formats as `XX-XXXXXXX`. When an EIN is already on file the field\n * shows a masked placeholder and the required rule is waived.\n */\n Ein: ComponentType<EinFieldProps> | undefined\n /** Select bound to `workState`; available only for individual contractors filing a new-hire report. */\n WorkState: ComponentType<WorkStateFieldProps> | undefined\n}\n\n/**\n * The ready-state result returned by {@link useContractorDetailsForm} once data has loaded.\n *\n * @public\n */\nexport interface UseContractorDetailsFormReady extends BaseFormHookReady<\n ContractorDetailsFieldsMetadata,\n ContractorDetailsFormData,\n ContractorDetailsFormFields\n> {\n /** The loaded contractor data, or `null` in create mode. */\n data: {\n /** The contractor being edited, or `null` in create mode. */\n contractor: Contractor | null\n }\n /** Submit status and form mode. */\n status: {\n /** `true` while the create or update mutation is in flight. */\n isPending: boolean\n /** `'create'` when no `contractorId` was supplied, `'update'` otherwise. */\n mode: 'create' | 'update'\n }\n /** Submit and related actions. */\n actions: {\n /** Validates the form and submits the changes. Returns the created or updated contractor, or `undefined` when validation fails. */\n onSubmit: (\n options?: ContractorDetailsSubmitOptions,\n ) => Promise<HookSubmitResult<Contractor> | undefined>\n }\n}\n\nconst isCurrentlySelfOnboarding = (contractor?: Contractor) =>\n !!contractor?.onboardingStatus &&\n ContractorSelfOnboardingStatuses.has(contractor.onboardingStatus)\n\nconst canToggleSelfOnboarding = (contractor?: Contractor) => {\n if (!contractor) return true\n return (\n contractor.onboardingStatus === ContractorOnboardingStatus.ADMIN_ONBOARDING_INCOMPLETE ||\n contractor.onboardingStatus === ContractorOnboardingStatus.SELF_ONBOARDING_NOT_INVITED\n )\n}\n\n/** @internal */\nfunction buildContractorDetailsFieldsMetadata(\n base: Record<keyof ContractorDetailsFormData, FieldMetadata>,\n) {\n const typeEntries = [ContractorType.Individual, ContractorType.Business]\n const wageTypeEntries = [WageType.Hourly, WageType.Fixed]\n return {\n type: withOptions(\n base.type,\n typeEntries.map(value => ({ value, label: value })),\n typeEntries,\n ),\n wageType: withOptions(\n base.wageType,\n wageTypeEntries.map(value => ({ value, label: value })),\n wageTypeEntries,\n ),\n startDate: base.startDate,\n hourlyRate: base.hourlyRate,\n selfOnboarding: base.selfOnboarding,\n fileNewHireReport: base.fileNewHireReport,\n email: base.email,\n firstName: base.firstName,\n lastName: base.lastName,\n middleInitial: base.middleInitial,\n businessName: base.businessName,\n ssn: base.ssn,\n ein: base.ein,\n workState: withOptions(\n base.workState,\n STATES_ABBR.map(abbr => ({ value: abbr, label: abbr })),\n STATES_ABBR,\n ),\n } satisfies FieldsMetadata\n}\n\n/**\n * Headless hook for creating or updating a contractor's profile details —\n * individual vs. business type, wage type, names, SSN/EIN, work state, and the\n * self-onboarding preference.\n *\n * @remarks\n * Returns a discriminated union: a loading variant while the contractor fetch\n * resolves, and a ready variant exposing the form's data, pending status,\n * submit action, error handling, and bound `Fields`. Field visibility is\n * driven by the current `type` and `wageType` (self-onboarding toggles the\n * `Email` field unless `showEmailField` is set); fields that do not apply are `undefined` on `form.Fields`.\n * SSN/EIN are exposed by contractor type regardless of self-onboarding — each\n * consumer decides whether to render them. Self-onboarding is only toggleable\n * when the contractor's onboarding status allows it.\n *\n * @param input - See {@link UseContractorDetailsFormProps}.\n * @returns A {@link HookLoadingResult} while loading, or a {@link UseContractorDetailsFormReady} once ready.\n * @public\n *\n * @example\n * ```tsx\n * import {\n * useContractorDetailsForm,\n * SDKFormProvider,\n * type UseContractorDetailsFormReady,\n * } from '@gusto/embedded-react-sdk'\n *\n * function ContractorDetailsPage({\n * companyId,\n * contractorId,\n * }: {\n * companyId: string\n * contractorId: string\n * }) {\n * const contractorDetails = useContractorDetailsForm({ companyId, contractorId })\n *\n * if (contractorDetails.isLoading) return <div>Loading...</div>\n *\n * return <ContractorDetailsReady contractorDetails={contractorDetails} />\n * }\n *\n * function ContractorDetailsReady({\n * contractorDetails,\n * }: {\n * contractorDetails: UseContractorDetailsFormReady\n * }) {\n * const { Fields } = contractorDetails.form\n *\n * return (\n * <SDKFormProvider formHookResult={contractorDetails}>\n * <form onSubmit={e => { e.preventDefault(); void contractorDetails.actions.onSubmit() }}>\n * <Fields.Type label=\"Contractor type\" />\n * <Fields.WageType label=\"Wage type\" />\n * {Fields.FirstName && <Fields.FirstName label=\"First name\" />}\n * {Fields.LastName && <Fields.LastName label=\"Last name\" />}\n * {Fields.BusinessName && <Fields.BusinessName label=\"Business name\" />}\n * <Fields.StartDate label=\"Start date\" />\n * <button type=\"submit\" disabled={contractorDetails.status.isPending}>Save</button>\n * </form>\n * </SDKFormProvider>\n * )\n * }\n * ```\n */\nexport function useContractorDetailsForm({\n companyId,\n contractorId,\n withSelfOnboardingField = true,\n showEmailField = false,\n optionalFieldsToRequire,\n defaultValues: partnerDefaults,\n validationMode = 'onSubmit',\n shouldFocusError = true,\n}: UseContractorDetailsFormProps): HookLoadingResult | UseContractorDetailsFormReady {\n const contractorQuery = useContractorsGet(\n { contractorUuid: contractorId ?? '' },\n { enabled: !!contractorId },\n )\n\n const contractor = contractorQuery.data?.contractor\n\n const isCreateMode = !contractorId\n const isSelfOnboardingToggleable = canToggleSelfOnboarding(contractor)\n\n const mode = isCreateMode ? 'create' : 'update'\n const hasSsn = contractor?.hasSsn ?? false\n const hasEin = contractor?.hasEin ?? false\n\n const [schema, metadataConfig] = useMemo(\n () => createContractorDetailsSchema({ mode, optionalFieldsToRequire, hasSsn, hasEin }),\n [mode, optionalFieldsToRequire, hasSsn, hasEin],\n )\n\n const parsedHourlyRate =\n contractor?.hourlyRate != null ? parseFloat(contractor.hourlyRate) : undefined\n\n const resolvedDefaults: ContractorDetailsFormData = useMemo(\n () => ({\n type: contractor?.type ?? partnerDefaults?.type ?? ContractorType.Individual,\n wageType: contractor?.wageType ?? partnerDefaults?.wageType ?? WageType.Fixed,\n startDate:\n contractor?.startDate ??\n partnerDefaults?.startDate ??\n new Date().toISOString().split('T')[0]!,\n hourlyRate: parsedHourlyRate ?? partnerDefaults?.hourlyRate ?? NaN,\n selfOnboarding: partnerDefaults?.selfOnboarding ?? isCurrentlySelfOnboarding(contractor),\n fileNewHireReport:\n contractor?.fileNewHireReport ?? partnerDefaults?.fileNewHireReport ?? false,\n email: contractor?.email ?? partnerDefaults?.email ?? '',\n firstName: contractor?.firstName ?? partnerDefaults?.firstName ?? '',\n lastName: contractor?.lastName ?? partnerDefaults?.lastName ?? '',\n middleInitial: contractor?.middleInitial ?? partnerDefaults?.middleInitial ?? '',\n businessName: contractor?.businessName ?? partnerDefaults?.businessName ?? '',\n workState: contractor?.workState ?? partnerDefaults?.workState ?? '',\n ssn: partnerDefaults?.ssn ?? '',\n ein: partnerDefaults?.ein ?? '',\n }),\n [contractor, partnerDefaults, parsedHourlyRate],\n )\n\n const formMethods = useForm<ContractorDetailsFormData, unknown, ContractorDetailsFormOutputs>({\n resolver: zodResolver(schema),\n mode: validationMode,\n shouldFocusError,\n defaultValues: resolvedDefaults,\n values: resolvedDefaults,\n resetOptions: { keepDirtyValues: true },\n })\n\n const [watchedType, watchedWageType, watchedSelfOnboarding, watchedFileNewHireReport] = useWatch({\n control: formMethods.control,\n name: ['type', 'wageType', 'selfOnboarding', 'fileNewHireReport'],\n })\n\n // Render-gating: a field shows when it applies to the current selection. The\n // schema mirrors this via `getExcludedContractorFields` so off-screen fields\n // never trip a phantom required error.\n const isIndividual = watchedType === ContractorType.Individual\n const isBusiness = watchedType === ContractorType.Business\n const isHourly = watchedWageType === WageType.Hourly\n\n const createContractorMutation = useContractorsCreateMutation()\n const updateContractorMutation = useContractorsUpdateMutation()\n\n const isPending = createContractorMutation.isPending || updateContractorMutation.isPending\n\n const {\n baseSubmitHandler,\n error: submitError,\n setError: setSubmitError,\n } = useBaseSubmit('ContractorDetailsForm')\n\n const queries = contractorId ? [contractorQuery] : []\n const errorHandling = composeErrorHandler(queries, { submitError, setSubmitError })\n\n const baseMetadata = useDeriveFieldsMetadata(metadataConfig, formMethods.control)\n const fieldsMetadata = buildContractorDetailsFieldsMetadata(baseMetadata)\n\n const onSubmit = async (\n options?: ContractorDetailsSubmitOptions,\n ): Promise<HookSubmitResult<Contractor> | undefined> => {\n let submitResult: HookSubmitResult<Contractor> | undefined\n\n await new Promise<void>(resolve => {\n void formMethods.handleSubmit(\n async (data: ContractorDetailsFormOutputs) => {\n await baseSubmitHandler(data, async payload => {\n const selfOnboardingEnabled = payload.selfOnboarding\n const cleanedSsn = payload.ssn ? removeNonDigits(payload.ssn) : ''\n const cleanedEin = payload.ein ? removeNonDigits(payload.ein) : ''\n\n const requestBody: ContractorCreateRequestBody = {\n type: payload.type,\n wageType: payload.wageType,\n startDate: payload.startDate,\n selfOnboarding: selfOnboardingEnabled,\n email: selfOnboardingEnabled ? payload.email || undefined : undefined,\n hourlyRate:\n payload.wageType === WageType.Hourly ? String(payload.hourlyRate) : undefined,\n ...(payload.type === ContractorType.Individual\n ? {\n firstName: payload.firstName,\n lastName: payload.lastName,\n middleInitial: payload.middleInitial || undefined,\n fileNewHireReport: payload.fileNewHireReport,\n workState: payload.fileNewHireReport\n ? payload.workState || undefined\n : undefined,\n ssn: cleanedSsn || undefined,\n }\n : {\n fileNewHireReport: false,\n businessName: payload.businessName,\n ein: cleanedEin || undefined,\n }),\n }\n\n let savedContractor: Contractor\n\n if (isCreateMode) {\n const resolvedCompanyId = options?.companyId ?? companyId\n if (!resolvedCompanyId) {\n throw new SDKInternalError('companyId is required to create a contractor')\n }\n\n const result = await createContractorMutation.mutateAsync({\n request: {\n companyUuid: resolvedCompanyId,\n contractorCreateRequestBody: { ...requestBody, isActive: true },\n },\n })\n\n if (!result.contractor) {\n throw new SDKInternalError('Contractor creation failed')\n }\n\n savedContractor = result.contractor\n } else {\n if (!contractor?.version) {\n throw new SDKInternalError('Contractor version is required for updates')\n }\n\n const updateBody: ContractorUpdateRequestBody = {\n ...requestBody,\n version: contractor.version,\n }\n\n const result = await updateContractorMutation.mutateAsync({\n request: {\n contractorUuid: contractor.uuid,\n contractorUpdateRequestBody: updateBody,\n },\n })\n\n if (!result.contractor) {\n throw new SDKInternalError('Contractor update failed')\n }\n\n savedContractor = result.contractor\n }\n\n submitResult = {\n mode: isCreateMode ? 'create' : 'update',\n data: savedContractor,\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 = contractorId ? contractorQuery.isLoading : false\n\n if (isDataLoading || (contractorId && !contractor)) {\n return { isLoading: true as const, errorHandling }\n }\n\n return {\n isLoading: false as const,\n data: {\n contractor: contractor ?? null,\n },\n status: {\n isPending,\n mode: isCreateMode ? ('create' as const) : ('update' as const),\n },\n actions: { onSubmit },\n errorHandling,\n form: {\n Fields: {\n Type: TypeField,\n WageType: WageTypeField,\n StartDate: StartDateField,\n HourlyRate: isHourly ? HourlyRateField : undefined,\n SelfOnboarding:\n withSelfOnboardingField && isSelfOnboardingToggleable ? SelfOnboardingField : undefined,\n FileNewHireReport: isIndividual ? FileNewHireReportField : undefined,\n Email: showEmailField || watchedSelfOnboarding ? EmailField : undefined,\n FirstName: isIndividual ? FirstNameField : undefined,\n LastName: isIndividual ? LastNameField : undefined,\n MiddleInitial: isIndividual ? MiddleInitialField : undefined,\n BusinessName: isBusiness ? BusinessNameField : undefined,\n Ssn: isIndividual ? SsnField : undefined,\n Ein: isBusiness ? EinField : undefined,\n WorkState: isIndividual && watchedFileNewHireReport ? WorkStateField : undefined,\n },\n fieldsMetadata,\n hookFormInternals,\n getFormSubmissionValues: createGetFormSubmissionValues(formMethods, schema),\n },\n }\n}\n\n/**\n * Return type of {@link useContractorDetailsForm}.\n *\n * @public\n */\nexport type UseContractorDetailsFormResult = HookLoadingResult | UseContractorDetailsFormReady\n\n/**\n * Shape of `form.fieldsMetadata` returned by {@link useContractorDetailsForm}.\n *\n * @public\n */\nexport type ContractorDetailsFieldsMetadata = ReturnType<\n typeof buildContractorDetailsFieldsMetadata\n>\n"],"names":["isCurrentlySelfOnboarding","contractor","ContractorSelfOnboardingStatuses","canToggleSelfOnboarding","ContractorOnboardingStatus","buildContractorDetailsFieldsMetadata","base","typeEntries","ContractorType","wageTypeEntries","WageType","withOptions","value","STATES_ABBR","abbr","useContractorDetailsForm","companyId","contractorId","withSelfOnboardingField","showEmailField","optionalFieldsToRequire","partnerDefaults","validationMode","shouldFocusError","contractorQuery","useContractorsGet","isCreateMode","isSelfOnboardingToggleable","mode","hasSsn","hasEin","schema","metadataConfig","useMemo","createContractorDetailsSchema","parsedHourlyRate","resolvedDefaults","formMethods","useForm","zodResolver","watchedType","watchedWageType","watchedSelfOnboarding","watchedFileNewHireReport","useWatch","isIndividual","isBusiness","isHourly","createContractorMutation","useContractorsCreateMutation","updateContractorMutation","useContractorsUpdateMutation","isPending","baseSubmitHandler","submitError","setSubmitError","useBaseSubmit","errorHandling","composeErrorHandler","baseMetadata","useDeriveFieldsMetadata","fieldsMetadata","onSubmit","options","submitResult","resolve","data","payload","selfOnboardingEnabled","cleanedSsn","removeNonDigits","cleanedEin","requestBody","savedContractor","resolvedCompanyId","SDKInternalError","result","updateBody","hookFormInternals","useHookFormInternals","TypeField","WageTypeField","StartDateField","HourlyRateField","SelfOnboardingField","FileNewHireReportField","EmailField","FirstNameField","LastNameField","MiddleInitialField","BusinessNameField","SsnField","EinField","WorkStateField","createGetFormSubmissionValues"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useContractorDetailsForm.js","sources":["../../../../../../src/components/Contractor/Profile/shared/useContractorDetailsForm/useContractorDetailsForm.tsx"],"sourcesContent":["import { useMemo } from 'react'\nimport type { ComponentType } from 'react'\nimport { useForm, useWatch } from 'react-hook-form'\nimport type { UseFormProps } from 'react-hook-form'\nimport { zodResolver } from '@hookform/resolvers/zod'\nimport type { Contractor } from '@gusto/embedded-api/models/components/contractor'\nimport type { ContractorCreateRequestBody } from '@gusto/embedded-api/models/components/contractorcreaterequestbody'\nimport type { ContractorUpdateRequestBody } from '@gusto/embedded-api/models/components/contractorupdaterequestbody'\nimport { useContractorsGet } from '@gusto/embedded-api/react-query/contractorsGet'\nimport { useContractorsCreateMutation } from '@gusto/embedded-api/react-query/contractorsCreate'\nimport { useContractorsUpdateMutation } from '@gusto/embedded-api/react-query/contractorsUpdate'\nimport {\n ContractorType,\n WageType,\n createContractorDetailsSchema,\n type ContractorDetailsOptionalFieldsToRequire,\n type ContractorDetailsFormData,\n type ContractorDetailsFormOutputs,\n} from './contractorDetailsSchema'\nimport {\n TypeField,\n WageTypeField,\n StartDateField,\n HourlyRateField,\n SelfOnboardingField,\n FileNewHireReportField,\n EmailField,\n FirstNameField,\n LastNameField,\n MiddleInitialField,\n BusinessNameField,\n SsnField,\n EinField,\n WorkStateField,\n} from './fields'\nimport type {\n TypeFieldProps,\n WageTypeFieldProps,\n StartDateFieldProps,\n HourlyRateFieldProps,\n SelfOnboardingFieldProps,\n FileNewHireReportFieldProps,\n EmailFieldProps,\n FirstNameFieldProps,\n LastNameFieldProps,\n MiddleInitialFieldProps,\n BusinessNameFieldProps,\n SsnFieldProps,\n EinFieldProps,\n WorkStateFieldProps,\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 {\n ContractorSelfOnboardingStatuses,\n ContractorOnboardingStatus,\n STATES_ABBR,\n} from '@/shared/constants'\nimport { useBaseSubmit } from '@/components/Base/useBaseSubmit'\nimport { SDKInternalError } from '@/types/sdkError'\nimport { removeNonDigits } from '@/helpers/formattedStrings'\n\nexport type { ContractorDetailsOptionalFieldsToRequire } from './contractorDetailsSchema'\n\n/**\n * Optional overrides passed to {@link UseContractorDetailsFormReady.actions.onSubmit | onSubmit}.\n *\n * @public\n */\nexport interface ContractorDetailsSubmitOptions {\n /** Override the company identifier supplied to the hook (e.g. after creating the company in the same flow). Only used in create mode. */\n companyId?: string\n}\n\n/**\n * Shared options merged into both branches of {@link UseContractorDetailsFormProps}.\n *\n * @public\n */\nexport type UseContractorDetailsFormSharedProps = {\n /** Whether to expose the self-onboarding toggle as `form.Fields.SelfOnboarding`. Defaults to `true`. */\n withSelfOnboardingField?: boolean\n /**\n * Whether `form.Fields.Email` is available regardless of the `selfOnboarding` value.\n *\n * @remarks\n * By default `Email` is only exposed while `selfOnboarding` is `true`, since email is\n * otherwise only collected to send a self-onboarding invite. Set this to `true` for\n * surfaces that let an admin edit an already-onboarded contractor's email directly.\n * Defaults to `false`.\n */\n showEmailField?: boolean\n /** Fields that are optional by default but should be promoted to required for this form instance. */\n optionalFieldsToRequire?: ContractorDetailsOptionalFieldsToRequire\n /** Initial values applied before any contractor data loads. */\n defaultValues?: Partial<ContractorDetailsFormData>\n /** When validation runs. Forwarded to react-hook-form's `mode`. Defaults to `'onSubmit'`. */\n validationMode?: UseFormProps['mode']\n /** Whether react-hook-form should focus the first error on validation failure. Defaults to `true`. */\n shouldFocusError?: boolean\n}\n\n/**\n * Options for {@link useContractorDetailsForm}.\n *\n * @remarks\n * Discriminated by mode: in create mode supply `companyId` and omit\n * `contractorId`; in update mode supply `contractorId` (and optionally\n * `companyId`).\n *\n * @public\n */\nexport type UseContractorDetailsFormProps =\n | (UseContractorDetailsFormSharedProps & { companyId: string; contractorId?: never })\n | (UseContractorDetailsFormSharedProps & { contractorId: string; companyId?: string })\n\n/**\n * The Field components exposed by {@link useContractorDetailsForm} as `form.Fields`.\n *\n * @remarks\n * Conditionally-visible fields are `undefined` when they do not apply to the\n * current `type`, `wageType`, or self-onboarding selection. Always null-check\n * before rendering.\n *\n * @public\n */\nexport interface ContractorDetailsFormFields {\n /** Radio group bound to `type`. Always available. */\n Type: ComponentType<TypeFieldProps>\n /** Radio group bound to `wageType`. Always available. */\n WageType: ComponentType<WageTypeFieldProps>\n /** Date picker bound to `startDate`. Always available. */\n StartDate: ComponentType<StartDateFieldProps>\n /** Number input bound to `hourlyRate`; available only when `wageType` is `Hourly`. */\n HourlyRate: ComponentType<HourlyRateFieldProps> | undefined\n /** Switch bound to `selfOnboarding`; available only when toggleable. */\n SelfOnboarding: ComponentType<SelfOnboardingFieldProps> | undefined\n /** Switch bound to `fileNewHireReport`; available only for individual contractors. */\n FileNewHireReport: ComponentType<FileNewHireReportFieldProps> | undefined\n /** Text input bound to `email`; available only when self-onboarding is enabled. */\n Email: ComponentType<EmailFieldProps> | undefined\n /** Text input bound to `firstName`; available only for individual contractors. */\n FirstName: ComponentType<FirstNameFieldProps> | undefined\n /** Text input bound to `lastName`; available only for individual contractors. */\n LastName: ComponentType<LastNameFieldProps> | undefined\n /** Text input bound to `middleInitial`; available only for individual contractors. */\n MiddleInitial: ComponentType<MiddleInitialFieldProps> | undefined\n /** Text input bound to `businessName`; available only for business contractors. */\n BusinessName: ComponentType<BusinessNameFieldProps> | undefined\n /**\n * Text input bound to `ssn`; available only for individual contractors.\n * Auto-formats as `XXX-XX-XXXX`. When an SSN is already on file the field\n * shows a masked placeholder and the required rule is waived.\n */\n Ssn: ComponentType<SsnFieldProps> | undefined\n /**\n * Text input bound to `ein`; available only for business contractors.\n * Auto-formats as `XX-XXXXXXX`. When an EIN is already on file the field\n * shows a masked placeholder and the required rule is waived.\n */\n Ein: ComponentType<EinFieldProps> | undefined\n /** Select bound to `workState`; available only for individual contractors filing a new-hire report. */\n WorkState: ComponentType<WorkStateFieldProps> | undefined\n}\n\n/**\n * The ready-state result returned by {@link useContractorDetailsForm} once data has loaded.\n *\n * @public\n */\nexport interface UseContractorDetailsFormReady extends BaseFormHookReady<\n ContractorDetailsFieldsMetadata,\n ContractorDetailsFormData,\n ContractorDetailsFormFields\n> {\n /** The loaded contractor data, or `null` in create mode. */\n data: {\n /** The contractor being edited, or `null` in create mode. */\n contractor: Contractor | null\n }\n /** Submit status and form mode. */\n status: {\n /** `true` while the create or update mutation is in flight. */\n isPending: boolean\n /** `'create'` when no `contractorId` was supplied, `'update'` otherwise. */\n mode: 'create' | 'update'\n }\n /** Submit and related actions. */\n actions: {\n /** Validates the form and submits the changes. Returns the created or updated contractor, or `undefined` when validation fails. */\n onSubmit: (\n options?: ContractorDetailsSubmitOptions,\n ) => Promise<HookSubmitResult<Contractor> | undefined>\n }\n}\n\nconst isCurrentlySelfOnboarding = (contractor?: Contractor) =>\n !!contractor?.onboardingStatus &&\n ContractorSelfOnboardingStatuses.has(contractor.onboardingStatus)\n\nconst canToggleSelfOnboarding = (contractor?: Contractor) => {\n if (!contractor) return true\n return (\n contractor.onboardingStatus === ContractorOnboardingStatus.ADMIN_ONBOARDING_INCOMPLETE ||\n contractor.onboardingStatus === ContractorOnboardingStatus.SELF_ONBOARDING_NOT_INVITED\n )\n}\n\n/** @internal */\nfunction buildContractorDetailsFieldsMetadata(\n base: Record<keyof ContractorDetailsFormData, FieldMetadata>,\n) {\n const typeEntries = [ContractorType.Individual, ContractorType.Business]\n const wageTypeEntries = [WageType.Hourly, WageType.Fixed]\n return {\n type: withOptions(\n base.type,\n typeEntries.map(value => ({ value, label: value })),\n typeEntries,\n ),\n wageType: withOptions(\n base.wageType,\n wageTypeEntries.map(value => ({ value, label: value })),\n wageTypeEntries,\n ),\n startDate: base.startDate,\n hourlyRate: base.hourlyRate,\n selfOnboarding: base.selfOnboarding,\n fileNewHireReport: base.fileNewHireReport,\n email: base.email,\n firstName: base.firstName,\n lastName: base.lastName,\n middleInitial: base.middleInitial,\n businessName: base.businessName,\n ssn: base.ssn,\n ein: base.ein,\n workState: withOptions(\n base.workState,\n STATES_ABBR.map(abbr => ({ value: abbr, label: abbr })),\n STATES_ABBR,\n ),\n } satisfies FieldsMetadata\n}\n\n/**\n * Headless hook for creating or updating a contractor's profile details —\n * individual vs. business type, wage type, names, SSN/EIN, work state, and the\n * self-onboarding preference.\n *\n * @remarks\n * Returns a discriminated union: a loading variant while the contractor fetch\n * resolves, and a ready variant exposing the form's data, pending status,\n * submit action, error handling, and bound `Fields`. Field visibility is\n * driven by the current `type` and `wageType` (self-onboarding toggles the\n * `Email` field unless `showEmailField` is set); fields that do not apply are `undefined` on `form.Fields`.\n * SSN/EIN are exposed by contractor type regardless of self-onboarding — each\n * consumer decides whether to render them. Self-onboarding is only toggleable\n * when the contractor's onboarding status allows it.\n *\n * @param input - See {@link UseContractorDetailsFormProps}.\n * @returns A {@link HookLoadingResult} while loading, or a {@link UseContractorDetailsFormReady} once ready.\n * @public\n *\n * @example\n * ```tsx\n * import {\n * useContractorDetailsForm,\n * SDKFormProvider,\n * type UseContractorDetailsFormReady,\n * } from '@gusto/embedded-react-sdk'\n *\n * function ContractorDetailsPage({\n * companyId,\n * contractorId,\n * }: {\n * companyId: string\n * contractorId: string\n * }) {\n * const contractorDetails = useContractorDetailsForm({ companyId, contractorId })\n *\n * if (contractorDetails.isLoading) return <div>Loading...</div>\n *\n * return <ContractorDetailsReady contractorDetails={contractorDetails} />\n * }\n *\n * function ContractorDetailsReady({\n * contractorDetails,\n * }: {\n * contractorDetails: UseContractorDetailsFormReady\n * }) {\n * const { Fields } = contractorDetails.form\n *\n * return (\n * <SDKFormProvider formHookResult={contractorDetails}>\n * <form onSubmit={e => { e.preventDefault(); void contractorDetails.actions.onSubmit() }}>\n * <Fields.Type label=\"Contractor type\" />\n * <Fields.WageType label=\"Wage type\" />\n * {Fields.FirstName && <Fields.FirstName label=\"First name\" />}\n * {Fields.LastName && <Fields.LastName label=\"Last name\" />}\n * {Fields.BusinessName && <Fields.BusinessName label=\"Business name\" />}\n * <Fields.StartDate label=\"Start date\" />\n * <button type=\"submit\" disabled={contractorDetails.status.isPending}>Save</button>\n * </form>\n * </SDKFormProvider>\n * )\n * }\n * ```\n */\nexport function useContractorDetailsForm({\n companyId,\n contractorId,\n withSelfOnboardingField = true,\n showEmailField = false,\n optionalFieldsToRequire,\n defaultValues: partnerDefaults,\n validationMode = 'onSubmit',\n shouldFocusError = true,\n}: UseContractorDetailsFormProps): HookLoadingResult | UseContractorDetailsFormReady {\n const contractorQuery = useContractorsGet(\n { contractorUuid: contractorId ?? '' },\n { enabled: !!contractorId },\n )\n\n const contractor = contractorQuery.data?.contractor\n\n const isCreateMode = !contractorId\n const isSelfOnboardingToggleable = canToggleSelfOnboarding(contractor)\n\n const mode = isCreateMode ? 'create' : 'update'\n const hasSsn = contractor?.hasSsn ?? false\n const hasEin = contractor?.hasEin ?? false\n\n const [schema, metadataConfig] = useMemo(\n () => createContractorDetailsSchema({ mode, optionalFieldsToRequire, hasSsn, hasEin }),\n [mode, optionalFieldsToRequire, hasSsn, hasEin],\n )\n\n const parsedHourlyRate =\n contractor?.hourlyRate != null ? parseFloat(contractor.hourlyRate) : undefined\n\n const resolvedDefaults: ContractorDetailsFormData = useMemo(\n () => ({\n type: contractor?.type ?? partnerDefaults?.type ?? ContractorType.Individual,\n wageType: contractor?.wageType ?? partnerDefaults?.wageType ?? WageType.Fixed,\n startDate:\n contractor?.startDate ??\n partnerDefaults?.startDate ??\n new Date().toISOString().split('T')[0]!,\n hourlyRate: parsedHourlyRate ?? partnerDefaults?.hourlyRate ?? NaN,\n selfOnboarding: partnerDefaults?.selfOnboarding ?? isCurrentlySelfOnboarding(contractor),\n fileNewHireReport:\n contractor?.fileNewHireReport ?? partnerDefaults?.fileNewHireReport ?? false,\n email: contractor?.email ?? partnerDefaults?.email ?? '',\n firstName: contractor?.firstName ?? partnerDefaults?.firstName ?? '',\n lastName: contractor?.lastName ?? partnerDefaults?.lastName ?? '',\n middleInitial: contractor?.middleInitial ?? partnerDefaults?.middleInitial ?? '',\n businessName: contractor?.businessName ?? partnerDefaults?.businessName ?? '',\n workState: contractor?.workState ?? partnerDefaults?.workState ?? '',\n ssn: partnerDefaults?.ssn ?? '',\n ein: partnerDefaults?.ein ?? '',\n }),\n [contractor, partnerDefaults, parsedHourlyRate],\n )\n\n const formMethods = useForm<ContractorDetailsFormData, unknown, ContractorDetailsFormOutputs>({\n resolver: zodResolver(schema),\n mode: validationMode,\n shouldFocusError,\n defaultValues: resolvedDefaults,\n values: resolvedDefaults,\n resetOptions: { keepDirtyValues: true },\n })\n\n const [watchedType, watchedWageType, watchedSelfOnboarding, watchedFileNewHireReport] = useWatch({\n control: formMethods.control,\n name: ['type', 'wageType', 'selfOnboarding', 'fileNewHireReport'],\n })\n\n // Render-gating: a field shows when it applies to the current selection. The\n // schema mirrors this via `getExcludedContractorFields` so off-screen fields\n // never trip a phantom required error.\n const isIndividual = watchedType === ContractorType.Individual\n const isBusiness = watchedType === ContractorType.Business\n const isHourly = watchedWageType === WageType.Hourly\n\n const createContractorMutation = useContractorsCreateMutation()\n const updateContractorMutation = useContractorsUpdateMutation()\n\n const isPending = createContractorMutation.isPending || updateContractorMutation.isPending\n\n const {\n baseSubmitHandler,\n error: submitError,\n setError: setSubmitError,\n } = useBaseSubmit('ContractorDetailsForm')\n\n const queries = contractorId ? [contractorQuery] : []\n const errorHandling = composeErrorHandler(queries, { submitError, setSubmitError })\n\n const baseMetadata = useDeriveFieldsMetadata(metadataConfig, formMethods.control)\n const fieldsMetadata = buildContractorDetailsFieldsMetadata(baseMetadata)\n\n const onSubmit = async (\n options?: ContractorDetailsSubmitOptions,\n ): Promise<HookSubmitResult<Contractor> | undefined> => {\n let submitResult: HookSubmitResult<Contractor> | undefined\n\n await new Promise<void>(resolve => {\n void formMethods.handleSubmit(\n async (data: ContractorDetailsFormOutputs) => {\n await baseSubmitHandler(data, async payload => {\n const selfOnboardingEnabled = payload.selfOnboarding\n const cleanedSsn = payload.ssn ? removeNonDigits(payload.ssn) : ''\n const cleanedEin = payload.ein ? removeNonDigits(payload.ein) : ''\n\n const requestBody: ContractorCreateRequestBody = {\n type: payload.type,\n wageType: payload.wageType,\n startDate: payload.startDate,\n selfOnboarding: selfOnboardingEnabled,\n email:\n showEmailField || selfOnboardingEnabled ? payload.email || undefined : undefined,\n hourlyRate:\n payload.wageType === WageType.Hourly ? String(payload.hourlyRate) : undefined,\n ...(payload.type === ContractorType.Individual\n ? {\n firstName: payload.firstName,\n lastName: payload.lastName,\n middleInitial: payload.middleInitial || undefined,\n fileNewHireReport: payload.fileNewHireReport,\n workState: payload.fileNewHireReport\n ? payload.workState || undefined\n : undefined,\n ssn: cleanedSsn || undefined,\n }\n : {\n fileNewHireReport: false,\n businessName: payload.businessName,\n ein: cleanedEin || undefined,\n }),\n }\n\n let savedContractor: Contractor\n\n if (isCreateMode) {\n const resolvedCompanyId = options?.companyId ?? companyId\n if (!resolvedCompanyId) {\n throw new SDKInternalError('companyId is required to create a contractor')\n }\n\n const result = await createContractorMutation.mutateAsync({\n request: {\n companyUuid: resolvedCompanyId,\n contractorCreateRequestBody: { ...requestBody, isActive: true },\n },\n })\n\n if (!result.contractor) {\n throw new SDKInternalError('Contractor creation failed')\n }\n\n savedContractor = result.contractor\n } else {\n if (!contractor?.version) {\n throw new SDKInternalError('Contractor version is required for updates')\n }\n\n const updateBody: ContractorUpdateRequestBody = {\n ...requestBody,\n version: contractor.version,\n }\n\n const result = await updateContractorMutation.mutateAsync({\n request: {\n contractorUuid: contractor.uuid,\n contractorUpdateRequestBody: updateBody,\n },\n })\n\n if (!result.contractor) {\n throw new SDKInternalError('Contractor update failed')\n }\n\n savedContractor = result.contractor\n }\n\n submitResult = {\n mode: isCreateMode ? 'create' : 'update',\n data: savedContractor,\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 = contractorId ? contractorQuery.isLoading : false\n\n if (isDataLoading || (contractorId && !contractor)) {\n return { isLoading: true as const, errorHandling }\n }\n\n return {\n isLoading: false as const,\n data: {\n contractor: contractor ?? null,\n },\n status: {\n isPending,\n mode: isCreateMode ? ('create' as const) : ('update' as const),\n },\n actions: { onSubmit },\n errorHandling,\n form: {\n Fields: {\n Type: TypeField,\n WageType: WageTypeField,\n StartDate: StartDateField,\n HourlyRate: isHourly ? HourlyRateField : undefined,\n SelfOnboarding:\n withSelfOnboardingField && isSelfOnboardingToggleable ? SelfOnboardingField : undefined,\n FileNewHireReport: isIndividual ? FileNewHireReportField : undefined,\n Email: showEmailField || watchedSelfOnboarding ? EmailField : undefined,\n FirstName: isIndividual ? FirstNameField : undefined,\n LastName: isIndividual ? LastNameField : undefined,\n MiddleInitial: isIndividual ? MiddleInitialField : undefined,\n BusinessName: isBusiness ? BusinessNameField : undefined,\n Ssn: isIndividual ? SsnField : undefined,\n Ein: isBusiness ? EinField : undefined,\n WorkState: isIndividual && watchedFileNewHireReport ? WorkStateField : undefined,\n },\n fieldsMetadata,\n hookFormInternals,\n getFormSubmissionValues: createGetFormSubmissionValues(formMethods, schema),\n },\n }\n}\n\n/**\n * Return type of {@link useContractorDetailsForm}.\n *\n * @public\n */\nexport type UseContractorDetailsFormResult = HookLoadingResult | UseContractorDetailsFormReady\n\n/**\n * Shape of `form.fieldsMetadata` returned by {@link useContractorDetailsForm}.\n *\n * @public\n */\nexport type ContractorDetailsFieldsMetadata = ReturnType<\n typeof buildContractorDetailsFieldsMetadata\n>\n"],"names":["isCurrentlySelfOnboarding","contractor","ContractorSelfOnboardingStatuses","canToggleSelfOnboarding","ContractorOnboardingStatus","buildContractorDetailsFieldsMetadata","base","typeEntries","ContractorType","wageTypeEntries","WageType","withOptions","value","STATES_ABBR","abbr","useContractorDetailsForm","companyId","contractorId","withSelfOnboardingField","showEmailField","optionalFieldsToRequire","partnerDefaults","validationMode","shouldFocusError","contractorQuery","useContractorsGet","isCreateMode","isSelfOnboardingToggleable","mode","hasSsn","hasEin","schema","metadataConfig","useMemo","createContractorDetailsSchema","parsedHourlyRate","resolvedDefaults","formMethods","useForm","zodResolver","watchedType","watchedWageType","watchedSelfOnboarding","watchedFileNewHireReport","useWatch","isIndividual","isBusiness","isHourly","createContractorMutation","useContractorsCreateMutation","updateContractorMutation","useContractorsUpdateMutation","isPending","baseSubmitHandler","submitError","setSubmitError","useBaseSubmit","errorHandling","composeErrorHandler","baseMetadata","useDeriveFieldsMetadata","fieldsMetadata","onSubmit","options","submitResult","resolve","data","payload","selfOnboardingEnabled","cleanedSsn","removeNonDigits","cleanedEin","requestBody","savedContractor","resolvedCompanyId","SDKInternalError","result","updateBody","hookFormInternals","useHookFormInternals","TypeField","WageTypeField","StartDateField","HourlyRateField","SelfOnboardingField","FileNewHireReportField","EmailField","FirstNameField","LastNameField","MiddleInitialField","BusinessNameField","SsnField","EinField","WorkStateField","createGetFormSubmissionValues"],"mappings":"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"}
|
package/dist/components/Employee/Compensation/onboarding/JobsList/JobsListPresentation.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"JobsListPresentation.js","sources":["../../../../../../src/components/Employee/Compensation/onboarding/JobsList/JobsListPresentation.tsx"],"sourcesContent":["import { useTranslation } from 'react-i18next'\nimport { type Job } from '@gusto/embedded-api/models/components/job'\nimport PencilSvg from '@/assets/icons/pencil.svg?react'\nimport TrashCanSvg from '@/assets/icons/trashcan.svg?react'\nimport { ActionsLayout, DataView, Flex, useDataView } from '@/components/Common'\nimport { HamburgerMenu } from '@/components/Common/HamburgerMenu'\nimport { useComponentContext } from '@/contexts/ComponentAdapter/useComponentContext'\nimport { useI18n } from '@/i18n'\nimport { FlsaStatus } from '@/shared/constants'\n\n/** @internal */\nexport interface JobsListPresentationProps {\n /** @internal */\n jobs: Job[]\n /** @internal */\n primaryFlsaStatus: string | undefined\n /** @internal */\n isPending: boolean\n /** @internal */\n onAdd: () => void\n /** @internal */\n onEdit: (jobId: string) => void\n /** @internal */\n onDelete: (jobId: string) => void\n /** @internal */\n onContinue: () => void\n}\n\n/** @internal */\nexport function JobsListPresentation({\n jobs,\n primaryFlsaStatus,\n isPending,\n onAdd,\n onEdit,\n onDelete,\n onContinue,\n}: JobsListPresentationProps) {\n useI18n('Employee.Compensation')\n const { t } = useTranslation('Employee.Compensation')\n const Components = useComponentContext()\n\n const showAddAnotherJob = primaryFlsaStatus === FlsaStatus.NONEXEMPT\n\n const dataViewProps = useDataView({\n data: jobs,\n columns: [\n {\n key: 'title',\n title: t('allCompensations.jobColumn'),\n render: (job: Job) => {\n const currentComp = job.compensations?.find(c => c.uuid === job.currentCompensationUuid)\n return currentComp?.title || ''\n },\n },\n {\n key: 'flsaStatus',\n title: t('allCompensations.typeColumn'),\n render: (job: Job) => {\n const flsaStatus = job.compensations?.find(\n comp => comp.uuid === job.currentCompensationUuid,\n )?.flsaStatus\n return flsaStatus !== undefined ? t(`flsaStatusLabels.${flsaStatus}`) : null\n },\n },\n {\n key: 'rate',\n title: t('allCompensations.amountColumn'),\n render: (job: Job) => job.rate?.toString() || '',\n },\n {\n key: 'paymentUnit',\n title: t('allCompensations.perColumn'),\n render: (job: Job) => job.paymentUnit || '',\n },\n ],\n itemMenu: (job: Job) => (\n <HamburgerMenu\n triggerLabel={t('hamburgerTitle')}\n items={[\n {\n label: t('allCompensations.editCta'),\n icon: <PencilSvg aria-hidden />,\n onClick: () => {\n onEdit(job.uuid)\n },\n },\n ...(!job.primary\n ? [\n {\n label: t('allCompensations.deleteCta'),\n icon: <TrashCanSvg aria-hidden />,\n onClick: () => {\n onDelete(job.uuid)\n },\n },\n ]\n : []),\n ]}\n isLoading={isPending}\n />\n ),\n })\n\n return (\n <Flex flexDirection=\"column\" gap={32}>\n <Components.Heading as=\"h2\">{t('title')}</Components.Heading>\n <DataView\n data-testid=\"data-view\"\n label={t('allCompensations.tableLabel')}\n {...dataViewProps}\n />\n <ActionsLayout>\n {showAddAnotherJob && (\n <Components.Button variant=\"secondary\" onClick={onAdd} isDisabled={isPending}>\n {t('addAnotherJobCta')}\n </Components.Button>\n )}\n <Components.Button onClick={onContinue} isLoading={isPending}>\n {t('submitCta')}\n </Components.Button>\n </ActionsLayout>\n </Flex>\n )\n}\n"],"names":["JobsListPresentation","jobs","primaryFlsaStatus","isPending","onAdd","onEdit","onDelete","onContinue","useI18n","t","useTranslation","Components","useComponentContext","showAddAnotherJob","FlsaStatus","dataViewProps","useDataView","job","c","flsaStatus","comp","jsx","HamburgerMenu","PencilSvg","TrashCanSvg","jsxs","Flex","DataView","ActionsLayout"],"mappings":";;;;;;;;;;;;AA6BO,SAASA,EAAqB;AAAA,EACnC,MAAAC;AAAA,EACA,mBAAAC;AAAA,EACA,WAAAC;AAAA,EACA,OAAAC;AAAA,EACA,QAAAC;AAAA,EACA,UAAAC;AAAA,EACA,YAAAC;AACF,GAA8B;AAC5B,EAAAC,EAAQ,uBAAuB;AAC/B,QAAM,EAAE,GAAAC,EAAA,IAAMC,EAAe,uBAAuB,GAC9CC,IAAaC,EAAA,GAEbC,IAAoBX,MAAsBY,EAAW,WAErDC,IAAgBC,EAAY;AAAA,IAChC,MAAMf;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,KAAK;AAAA,QACL,OAAOQ,EAAE,4BAA4B;AAAA,QACrC,QAAQ,CAACQ,MACaA,EAAI,eAAe,KAAK,OAAKC,EAAE,SAASD,EAAI,uBAAuB,GACnE,SAAS;AAAA,MAC/B;AAAA,MAEF;AAAA,QACE,KAAK;AAAA,QACL,OAAOR,EAAE,6BAA6B;AAAA,QACtC,QAAQ,CAACQ,MAAa;AACpB,gBAAME,IAAaF,EAAI,eAAe;AAAA,YACpC,CAAAG,MAAQA,EAAK,SAASH,EAAI;AAAA,UAAA,GACzB;AACH,iBAAOE,MAAe,SAAYV,EAAE,oBAAoBU,CAAU,EAAE,IAAI;AAAA,QAC1E;AAAA,MAAA;AAAA,MAEF;AAAA,QACE,KAAK;AAAA,QACL,OAAOV,EAAE,+BAA+B;AAAA,QACxC,QAAQ,CAACQ,MAAaA,EAAI,MAAM,cAAc;AAAA,MAAA;AAAA,MAEhD;AAAA,QACE,KAAK;AAAA,QACL,OAAOR,EAAE,4BAA4B;AAAA,QACrC,QAAQ,CAACQ,MAAaA,EAAI,eAAe;AAAA,MAAA;AAAA,IAC3C;AAAA,IAEF,UAAU,CAACA,MACT,gBAAAI;AAAA,MAACC;AAAA,MAAA;AAAA,QACC,cAAcb,EAAE,gBAAgB;AAAA,QAChC,OAAO;AAAA,UACL;AAAA,YACE,OAAOA,EAAE,0BAA0B;AAAA,YACnC,MAAM,gBAAAY,EAACE,GAAA,EAAU,eAAW,GAAA,CAAC;AAAA,YAC7B,SAAS,MAAM;AACb,cAAAlB,EAAOY,EAAI,IAAI;AAAA,YACjB;AAAA,UAAA;AAAA,UAEF,GAAKA,EAAI,UAUL,CAAA,IATA;AAAA,YACE;AAAA,cACE,OAAOR,EAAE,4BAA4B;AAAA,cACrC,MAAM,gBAAAY,EAACG,GAAA,EAAY,eAAW,GAAA,CAAC;AAAA,cAC/B,SAAS,MAAM;AACb,gBAAAlB,EAASW,EAAI,IAAI;AAAA,cACnB;AAAA,YAAA;AAAA,UACF;AAAA,QAED;AAAA,QAEP,WAAWd;AAAA,MAAA;AAAA,IAAA;AAAA,EACb,CAEH;AAED,SACE,gBAAAsB,EAACC,GAAA,EAAK,eAAc,UAAS,KAAK,IAChC,UAAA;AAAA,IAAA,gBAAAL,EAACV,EAAW,SAAX,EAAmB,IAAG,MAAM,UAAAF,EAAE,OAAO,GAAE;AAAA,IACxC,gBAAAY;AAAA,MAACM;AAAA,MAAA;AAAA,QACC,eAAY;AAAA,QACZ,OAAOlB,EAAE,6BAA6B;AAAA,QACrC,GAAGM;AAAA,MAAA;AAAA,IAAA;AAAA,sBAELa,GAAA,EACE,UAAA;AAAA,MAAAf,KACC,gBAAAQ,EAACV,EAAW,QAAX,EAAkB,SAAQ,aAAY,SAASP,GAAO,YAAYD,GAChE,UAAAM,EAAE,kBAAkB,EAAA,CACvB;AAAA,MAEF,gBAAAY,EAACV,EAAW,QAAX,EAAkB,SAASJ,GAAY,WAAWJ,GAChD,UAAAM,EAAE,WAAW,EAAA,CAChB;AAAA,IAAA,EAAA,CACF;AAAA,EAAA,GACF;AAEJ;"}
|
|
1
|
+
{"version":3,"file":"JobsListPresentation.js","sources":["../../../../../../src/components/Employee/Compensation/onboarding/JobsList/JobsListPresentation.tsx"],"sourcesContent":["import { useTranslation } from 'react-i18next'\nimport { type Job } from '@gusto/embedded-api/models/components/job'\nimport PencilSvg from '@/assets/icons/pencil.svg?react'\nimport TrashCanSvg from '@/assets/icons/trashcan.svg?react'\nimport { ActionsLayout, DataView, Flex, useDataView } from '@/components/Common'\nimport { HamburgerMenu } from '@/components/Common/HamburgerMenu'\nimport { useComponentContext } from '@/contexts/ComponentAdapter/useComponentContext'\nimport { useI18n } from '@/i18n'\nimport { FlsaStatus } from '@/shared/constants'\n\n/** @internal */\nexport interface JobsListPresentationProps {\n /** @internal */\n jobs: Job[]\n /** @internal */\n primaryFlsaStatus: string | undefined\n /** @internal */\n isPending: boolean\n /** @internal */\n onAdd: () => void\n /** @internal */\n onEdit: (jobId: string) => void\n /** @internal */\n onDelete: (jobId: string) => void\n /** @internal */\n onContinue: () => void\n}\n\n/** @internal */\nexport function JobsListPresentation({\n jobs,\n primaryFlsaStatus,\n isPending,\n onAdd,\n onEdit,\n onDelete,\n onContinue,\n}: JobsListPresentationProps) {\n useI18n('Employee.Compensation')\n const { t } = useTranslation('Employee.Compensation')\n const Components = useComponentContext()\n\n const showAddAnotherJob = primaryFlsaStatus === FlsaStatus.NONEXEMPT\n\n const dataViewProps = useDataView({\n data: jobs,\n columns: [\n {\n key: 'title',\n title: t('allCompensations.jobColumn'),\n render: (job: Job) => {\n const currentComp = job.compensations?.find(c => c.uuid === job.currentCompensationUuid)\n return currentComp?.title || ''\n },\n },\n {\n key: 'flsaStatus',\n title: t('allCompensations.typeColumn'),\n render: (job: Job) => {\n const flsaStatus = job.compensations?.find(\n comp => comp.uuid === job.currentCompensationUuid,\n )?.flsaStatus\n return flsaStatus !== undefined ? t(`flsaStatusLabels.${flsaStatus}`) : null\n },\n },\n {\n key: 'rate',\n title: t('allCompensations.amountColumn'),\n justify: 'end',\n render: (job: Job) => job.rate?.toString() || '',\n },\n {\n key: 'paymentUnit',\n title: t('allCompensations.perColumn'),\n render: (job: Job) => job.paymentUnit || '',\n },\n ],\n itemMenu: (job: Job) => (\n <HamburgerMenu\n triggerLabel={t('hamburgerTitle')}\n items={[\n {\n label: t('allCompensations.editCta'),\n icon: <PencilSvg aria-hidden />,\n onClick: () => {\n onEdit(job.uuid)\n },\n },\n ...(!job.primary\n ? [\n {\n label: t('allCompensations.deleteCta'),\n icon: <TrashCanSvg aria-hidden />,\n onClick: () => {\n onDelete(job.uuid)\n },\n },\n ]\n : []),\n ]}\n isLoading={isPending}\n />\n ),\n })\n\n return (\n <Flex flexDirection=\"column\" gap={32}>\n <Components.Heading as=\"h2\">{t('title')}</Components.Heading>\n <DataView\n data-testid=\"data-view\"\n label={t('allCompensations.tableLabel')}\n {...dataViewProps}\n />\n <ActionsLayout>\n {showAddAnotherJob && (\n <Components.Button variant=\"secondary\" onClick={onAdd} isDisabled={isPending}>\n {t('addAnotherJobCta')}\n </Components.Button>\n )}\n <Components.Button onClick={onContinue} isLoading={isPending}>\n {t('submitCta')}\n </Components.Button>\n </ActionsLayout>\n </Flex>\n )\n}\n"],"names":["JobsListPresentation","jobs","primaryFlsaStatus","isPending","onAdd","onEdit","onDelete","onContinue","useI18n","t","useTranslation","Components","useComponentContext","showAddAnotherJob","FlsaStatus","dataViewProps","useDataView","job","c","flsaStatus","comp","jsx","HamburgerMenu","PencilSvg","TrashCanSvg","jsxs","Flex","DataView","ActionsLayout"],"mappings":";;;;;;;;;;;;AA6BO,SAASA,EAAqB;AAAA,EACnC,MAAAC;AAAA,EACA,mBAAAC;AAAA,EACA,WAAAC;AAAA,EACA,OAAAC;AAAA,EACA,QAAAC;AAAA,EACA,UAAAC;AAAA,EACA,YAAAC;AACF,GAA8B;AAC5B,EAAAC,EAAQ,uBAAuB;AAC/B,QAAM,EAAE,GAAAC,EAAA,IAAMC,EAAe,uBAAuB,GAC9CC,IAAaC,EAAA,GAEbC,IAAoBX,MAAsBY,EAAW,WAErDC,IAAgBC,EAAY;AAAA,IAChC,MAAMf;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,KAAK;AAAA,QACL,OAAOQ,EAAE,4BAA4B;AAAA,QACrC,QAAQ,CAACQ,MACaA,EAAI,eAAe,KAAK,OAAKC,EAAE,SAASD,EAAI,uBAAuB,GACnE,SAAS;AAAA,MAC/B;AAAA,MAEF;AAAA,QACE,KAAK;AAAA,QACL,OAAOR,EAAE,6BAA6B;AAAA,QACtC,QAAQ,CAACQ,MAAa;AACpB,gBAAME,IAAaF,EAAI,eAAe;AAAA,YACpC,CAAAG,MAAQA,EAAK,SAASH,EAAI;AAAA,UAAA,GACzB;AACH,iBAAOE,MAAe,SAAYV,EAAE,oBAAoBU,CAAU,EAAE,IAAI;AAAA,QAC1E;AAAA,MAAA;AAAA,MAEF;AAAA,QACE,KAAK;AAAA,QACL,OAAOV,EAAE,+BAA+B;AAAA,QACxC,SAAS;AAAA,QACT,QAAQ,CAACQ,MAAaA,EAAI,MAAM,cAAc;AAAA,MAAA;AAAA,MAEhD;AAAA,QACE,KAAK;AAAA,QACL,OAAOR,EAAE,4BAA4B;AAAA,QACrC,QAAQ,CAACQ,MAAaA,EAAI,eAAe;AAAA,MAAA;AAAA,IAC3C;AAAA,IAEF,UAAU,CAACA,MACT,gBAAAI;AAAA,MAACC;AAAA,MAAA;AAAA,QACC,cAAcb,EAAE,gBAAgB;AAAA,QAChC,OAAO;AAAA,UACL;AAAA,YACE,OAAOA,EAAE,0BAA0B;AAAA,YACnC,MAAM,gBAAAY,EAACE,GAAA,EAAU,eAAW,GAAA,CAAC;AAAA,YAC7B,SAAS,MAAM;AACb,cAAAlB,EAAOY,EAAI,IAAI;AAAA,YACjB;AAAA,UAAA;AAAA,UAEF,GAAKA,EAAI,UAUL,CAAA,IATA;AAAA,YACE;AAAA,cACE,OAAOR,EAAE,4BAA4B;AAAA,cACrC,MAAM,gBAAAY,EAACG,GAAA,EAAY,eAAW,GAAA,CAAC;AAAA,cAC/B,SAAS,MAAM;AACb,gBAAAlB,EAASW,EAAI,IAAI;AAAA,cACnB;AAAA,YAAA;AAAA,UACF;AAAA,QAED;AAAA,QAEP,WAAWd;AAAA,MAAA;AAAA,IAAA;AAAA,EACb,CAEH;AAED,SACE,gBAAAsB,EAACC,GAAA,EAAK,eAAc,UAAS,KAAK,IAChC,UAAA;AAAA,IAAA,gBAAAL,EAACV,EAAW,SAAX,EAAmB,IAAG,MAAM,UAAAF,EAAE,OAAO,GAAE;AAAA,IACxC,gBAAAY;AAAA,MAACM;AAAA,MAAA;AAAA,QACC,eAAY;AAAA,QACZ,OAAOlB,EAAE,6BAA6B;AAAA,QACrC,GAAGM;AAAA,MAAA;AAAA,IAAA;AAAA,sBAELa,GAAA,EACE,UAAA;AAAA,MAAAf,KACC,gBAAAQ,EAACV,EAAW,QAAX,EAAkB,SAAQ,aAAY,SAASP,GAAO,YAAYD,GAChE,UAAAM,EAAE,kBAAkB,EAAA,CACvB;AAAA,MAEF,gBAAAY,EAACV,EAAW,QAAX,EAAkB,SAASJ,GAAY,WAAWJ,GAChD,UAAAM,EAAE,WAAW,EAAA,CAChB;AAAA,IAAA,EAAA,CACF;AAAA,EAAA,GACF;AAEJ;"}
|
|
@@ -17,28 +17,28 @@ import G from "../../../../../assets/icons/trashcan.svg.js";
|
|
|
17
17
|
import R from "../../../../../assets/icons/pencil.svg.js";
|
|
18
18
|
import { useDataView as H } from "../../../../Common/DataView/useDataView.js";
|
|
19
19
|
import { DataView as I } from "../../../../Common/DataView/DataView.js";
|
|
20
|
-
function de({ LoaderComponent:
|
|
20
|
+
function de({ LoaderComponent: o, ...r }) {
|
|
21
21
|
return /* @__PURE__ */ i(
|
|
22
22
|
B,
|
|
23
23
|
{
|
|
24
24
|
componentName: "Employee.Management.Deductions",
|
|
25
|
-
LoaderComponent:
|
|
26
|
-
children: /* @__PURE__ */ i(
|
|
25
|
+
LoaderComponent: o,
|
|
26
|
+
children: /* @__PURE__ */ i(j, { LoaderComponent: o, ...r })
|
|
27
27
|
}
|
|
28
28
|
);
|
|
29
29
|
}
|
|
30
|
-
function
|
|
30
|
+
function j({ employeeId: o, onEvent: r, LoaderComponent: D }) {
|
|
31
31
|
O("Employee.Management.Deductions");
|
|
32
|
-
const { t: e } = _("Employee.Management.Deductions"), d = w(), p = u("currency"), f = u("percent"),
|
|
32
|
+
const { t: e } = _("Employee.Management.Deductions"), d = w(), p = u("currency"), f = u("percent"), n = A({ employeeId: o }), {
|
|
33
33
|
pendingDeleteDeduction: c,
|
|
34
34
|
setPendingDeleteDeduction: m,
|
|
35
35
|
handleConfirmDelete: g
|
|
36
36
|
} = P(async (t) => {
|
|
37
|
-
if (
|
|
38
|
-
const a = await
|
|
37
|
+
if (n.isLoading) return;
|
|
38
|
+
const a = await n.actions.onDelete(t);
|
|
39
39
|
a && r(s.EMPLOYEE_MANAGEMENT_DEDUCTIONS_CARD_DELETED, a.data.garnishment);
|
|
40
|
-
}), E =
|
|
41
|
-
r(s.EMPLOYEE_MANAGEMENT_DEDUCTIONS_CARD_ADD_REQUESTED, { employeeId:
|
|
40
|
+
}), E = n.isLoading && n.errorHandling.errors.length === 0, C = n.isLoading ? [] : n.data.deductions, l = n.isLoading ? void 0 : n.status.deletingGarnishmentUuid, h = () => {
|
|
41
|
+
r(s.EMPLOYEE_MANAGEMENT_DEDUCTIONS_CARD_ADD_REQUESTED, { employeeId: o });
|
|
42
42
|
}, y = (t) => {
|
|
43
43
|
r(s.EMPLOYEE_MANAGEMENT_DEDUCTIONS_CARD_EDIT_REQUESTED, t);
|
|
44
44
|
}, L = [
|
|
@@ -55,6 +55,7 @@ function V({ employeeId: n, onEvent: r, LoaderComponent: D }) {
|
|
|
55
55
|
{
|
|
56
56
|
key: "amount",
|
|
57
57
|
title: e("columns.withhold"),
|
|
58
|
+
justify: "end",
|
|
58
59
|
render: (t) => S(t, {
|
|
59
60
|
formatCurrency: p,
|
|
60
61
|
formatPercent: f,
|
|
@@ -89,7 +90,7 @@ function V({ employeeId: n, onEvent: r, LoaderComponent: D }) {
|
|
|
89
90
|
),
|
|
90
91
|
emptyState: () => /* @__PURE__ */ i(k, { title: e("emptyState.title"), description: e("emptyState.description") })
|
|
91
92
|
});
|
|
92
|
-
return /* @__PURE__ */ T(U, { error:
|
|
93
|
+
return /* @__PURE__ */ T(U, { error: n.errorHandling.errors, LoaderComponent: D, children: [
|
|
93
94
|
/* @__PURE__ */ i(
|
|
94
95
|
d.Box,
|
|
95
96
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DeductionsCard.js","sources":["../../../../../../src/components/Employee/Deductions/management/DeductionsCard/DeductionsCard.tsx"],"sourcesContent":["import { useTranslation } from 'react-i18next'\nimport type { Garnishment } from '@gusto/embedded-api/models/components/garnishment'\nimport { useDeductionsList } from '../../shared/useDeductionsList'\nimport { useDeleteDeduction } from '../../shared/useDeleteDeduction'\nimport { DeleteDeductionDialog } from '../../shared/DeleteDeductionDialog'\nimport { formatDeductionAmount } from '../../shared/formatDeductionAmount'\nimport { DataView, useDataView, EmptyData, Loading } from '@/components/Common'\nimport { HamburgerMenu } from '@/components/Common/HamburgerMenu'\nimport { BaseBoundaries, BaseLayout } from '@/components/Base/Base'\nimport { useComponentContext } from '@/contexts/ComponentAdapter/useComponentContext'\nimport useNumberFormatter from '@/hooks/useNumberFormatter'\nimport { useI18n } from '@/i18n'\nimport { componentEvents, type EventType } from '@/shared/constants'\nimport type { OnEventType } from '@/components/Base/useBase'\nimport type { LoaderComponentType } from '@/components/Base'\nimport PlusCircleIcon from '@/assets/icons/plus-circle.svg?react'\nimport TrashCanSvg from '@/assets/icons/trashcan.svg?react'\nimport PencilSvg from '@/assets/icons/pencil.svg?react'\n\n/**\n * Props for {@link DeductionsCard}.\n *\n * @public\n */\nexport interface DeductionsCardProps {\n /** The associated employee identifier. */\n employeeId: string\n /** Callback invoked when the card emits an event. See the events table on {@link DeductionsCard} for the available event types and payloads. */\n onEvent: OnEventType<EventType, unknown>\n /** Custom loading indicator rendered while this component's async data is fetching. Overrides the indicator configured on `GustoProvider` for this instance only. */\n LoaderComponent?: LoaderComponentType\n}\n\n/**\n * Standalone read-only card listing an employee's active deductions, with affordances to add, edit, or delete a deduction.\n *\n * @remarks\n * Fetches its own data and owns the delete confirm dialog. Has no alert API — alert rendering is the consumer's responsibility. Add and edit affordances do not open a form themselves; emit-then-route is the contract, so the consumer listens for the `addRequested` / `editRequested` events and renders {@link DeductionsEditForm} (or its own equivalent) accordingly. For an orchestrated card-plus-form flow, use {@link Deductions} instead.\n *\n * @events\n * | Event | Description | Data |\n * | ----- | ----------- | ---- |\n * | `employee/management/deductions/card/addRequested` | Fired when the \"Add deduction\" CTA is clicked | `{ employeeId: string }` |\n * | `employee/management/deductions/card/editRequested` | Fired when an \"Edit\" CTA is clicked for a deduction | The matching `Garnishment` |\n * | `employee/management/deductions/card/deleted` | Fired after a deduction is deleted via the confirm dialog | The deleted `Garnishment` |\n *\n * @param props - See {@link DeductionsCardProps}.\n * @returns The rendered deductions card.\n * @public\n */\nexport function DeductionsCard({ LoaderComponent, ...props }: DeductionsCardProps) {\n return (\n <BaseBoundaries\n componentName=\"Employee.Management.Deductions\"\n LoaderComponent={LoaderComponent}\n >\n <DeductionsCardContent LoaderComponent={LoaderComponent} {...props} />\n </BaseBoundaries>\n )\n}\n\nfunction DeductionsCardContent({ employeeId, onEvent, LoaderComponent }: DeductionsCardProps) {\n useI18n('Employee.Management.Deductions')\n const { t } = useTranslation('Employee.Management.Deductions')\n const Components = useComponentContext()\n const formatCurrency = useNumberFormatter('currency')\n const formatPercent = useNumberFormatter('percent')\n\n const deductionsList = useDeductionsList({ employeeId })\n\n const {\n pendingDeleteDeduction,\n setPendingDeleteDeduction,\n handleConfirmDelete: handleConfirmDeleteDeduction,\n } = useDeleteDeduction(async garnishment => {\n if (deductionsList.isLoading) return\n const result = await deductionsList.actions.onDelete(garnishment)\n if (result) {\n onEvent(componentEvents.EMPLOYEE_MANAGEMENT_DEDUCTIONS_CARD_DELETED, result.data.garnishment)\n }\n })\n\n // `useDeductionsList` returns `isLoading: true` even when the query has\n // errored and `data` is missing. Treat those rows as \"not loading\" so the\n // section doesn't show a perpetual skeleton while BaseLayout already\n // renders the error alert.\n const isDeductionsLoading =\n deductionsList.isLoading && deductionsList.errorHandling.errors.length === 0\n\n const deductions = deductionsList.isLoading ? [] : deductionsList.data.deductions\n const deletingGarnishmentUuid = deductionsList.isLoading\n ? undefined\n : deductionsList.status.deletingGarnishmentUuid\n\n const handleAdd = () => {\n onEvent(componentEvents.EMPLOYEE_MANAGEMENT_DEDUCTIONS_CARD_ADD_REQUESTED, { employeeId })\n }\n const handleEdit = (garnishment: Garnishment) => {\n onEvent(componentEvents.EMPLOYEE_MANAGEMENT_DEDUCTIONS_CARD_EDIT_REQUESTED, garnishment)\n }\n\n const garnishmentsColumns = [\n {\n key: 'description',\n title: t('columns.deduction'),\n render: (garnishment: Garnishment) => garnishment.description || '-',\n },\n {\n key: 'frequency',\n title: t('columns.frequency'),\n render: (garnishment: Garnishment) => (garnishment.recurring ? t('recurring') : t('oneTime')),\n },\n {\n key: 'amount',\n title: t('columns.withhold'),\n render: (garnishment: Garnishment) =>\n formatDeductionAmount(garnishment, {\n formatCurrency,\n formatPercent,\n formatPerPaycheck: (value: string) => t('amountPerPaycheck', { value }),\n }),\n },\n ]\n\n const garnishmentsDataView = useDataView({\n data: deductions,\n columns: garnishmentsColumns,\n itemMenu: (garnishment: Garnishment) => (\n <HamburgerMenu\n isLoading={deletingGarnishmentUuid === garnishment.uuid}\n items={[\n {\n label: t('editCta'),\n onClick: () => {\n handleEdit(garnishment)\n },\n icon: <PencilSvg aria-hidden />,\n },\n {\n label: t('deleteCta'),\n onClick: () => {\n setPendingDeleteDeduction(garnishment)\n },\n icon: <TrashCanSvg aria-hidden />,\n },\n ]}\n triggerLabel={t('hamburgerTitle')}\n />\n ),\n emptyState: () => (\n <EmptyData title={t('emptyState.title')} description={t('emptyState.description')} />\n ),\n })\n\n return (\n <BaseLayout error={deductionsList.errorHandling.errors} LoaderComponent={LoaderComponent}>\n <Components.Box\n withPadding={false}\n header={\n <Components.BoxHeader\n title={t('title')}\n action={\n <Components.Button variant=\"secondary\" onClick={handleAdd} icon={<PlusCircleIcon />}>\n {t('addDeductionCta')}\n </Components.Button>\n }\n />\n }\n >\n {isDeductionsLoading ? (\n <Loading />\n ) : (\n <DataView label={t('listLabel')} isWithinBox {...garnishmentsDataView} />\n )}\n </Components.Box>\n\n <DeleteDeductionDialog\n pendingDeleteDeduction={pendingDeleteDeduction}\n isPrimaryActionLoading={deletingGarnishmentUuid === pendingDeleteDeduction?.uuid}\n onClose={() => {\n setPendingDeleteDeduction(null)\n }}\n onConfirm={() => {\n void handleConfirmDeleteDeduction()\n }}\n title={t('deleteDeductionDialog.title')}\n description={t('deleteDeductionDialog.description', {\n deduction: pendingDeleteDeduction?.description ?? '',\n })}\n confirmLabel={t('deleteDeductionDialog.confirmCta')}\n cancelLabel={t('deleteDeductionDialog.cancelCta')}\n />\n </BaseLayout>\n )\n}\n"],"names":["DeductionsCard","LoaderComponent","props","jsx","BaseBoundaries","DeductionsCardContent","employeeId","onEvent","useI18n","t","useTranslation","Components","useComponentContext","formatCurrency","useNumberFormatter","formatPercent","deductionsList","useDeductionsList","pendingDeleteDeduction","setPendingDeleteDeduction","handleConfirmDeleteDeduction","useDeleteDeduction","garnishment","result","componentEvents","isDeductionsLoading","deductions","deletingGarnishmentUuid","handleAdd","handleEdit","garnishmentsColumns","formatDeductionAmount","value","garnishmentsDataView","useDataView","HamburgerMenu","PencilSvg","TrashCanSvg","EmptyData","BaseLayout","PlusCircleIcon","Loading","DataView","DeleteDeductionDialog"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DeductionsCard.js","sources":["../../../../../../src/components/Employee/Deductions/management/DeductionsCard/DeductionsCard.tsx"],"sourcesContent":["import { useTranslation } from 'react-i18next'\nimport type { Garnishment } from '@gusto/embedded-api/models/components/garnishment'\nimport { useDeductionsList } from '../../shared/useDeductionsList'\nimport { useDeleteDeduction } from '../../shared/useDeleteDeduction'\nimport { DeleteDeductionDialog } from '../../shared/DeleteDeductionDialog'\nimport { formatDeductionAmount } from '../../shared/formatDeductionAmount'\nimport { DataView, useDataView, EmptyData, Loading } from '@/components/Common'\nimport { HamburgerMenu } from '@/components/Common/HamburgerMenu'\nimport { BaseBoundaries, BaseLayout } from '@/components/Base/Base'\nimport { useComponentContext } from '@/contexts/ComponentAdapter/useComponentContext'\nimport useNumberFormatter from '@/hooks/useNumberFormatter'\nimport { useI18n } from '@/i18n'\nimport { componentEvents, type EventType } from '@/shared/constants'\nimport type { OnEventType } from '@/components/Base/useBase'\nimport type { LoaderComponentType } from '@/components/Base'\nimport PlusCircleIcon from '@/assets/icons/plus-circle.svg?react'\nimport TrashCanSvg from '@/assets/icons/trashcan.svg?react'\nimport PencilSvg from '@/assets/icons/pencil.svg?react'\n\n/**\n * Props for {@link DeductionsCard}.\n *\n * @public\n */\nexport interface DeductionsCardProps {\n /** The associated employee identifier. */\n employeeId: string\n /** Callback invoked when the card emits an event. See the events table on {@link DeductionsCard} for the available event types and payloads. */\n onEvent: OnEventType<EventType, unknown>\n /** Custom loading indicator rendered while this component's async data is fetching. Overrides the indicator configured on `GustoProvider` for this instance only. */\n LoaderComponent?: LoaderComponentType\n}\n\n/**\n * Standalone read-only card listing an employee's active deductions, with affordances to add, edit, or delete a deduction.\n *\n * @remarks\n * Fetches its own data and owns the delete confirm dialog. Has no alert API — alert rendering is the consumer's responsibility. Add and edit affordances do not open a form themselves; emit-then-route is the contract, so the consumer listens for the `addRequested` / `editRequested` events and renders {@link DeductionsEditForm} (or its own equivalent) accordingly. For an orchestrated card-plus-form flow, use {@link Deductions} instead.\n *\n * @events\n * | Event | Description | Data |\n * | ----- | ----------- | ---- |\n * | `employee/management/deductions/card/addRequested` | Fired when the \"Add deduction\" CTA is clicked | `{ employeeId: string }` |\n * | `employee/management/deductions/card/editRequested` | Fired when an \"Edit\" CTA is clicked for a deduction | The matching `Garnishment` |\n * | `employee/management/deductions/card/deleted` | Fired after a deduction is deleted via the confirm dialog | The deleted `Garnishment` |\n *\n * @param props - See {@link DeductionsCardProps}.\n * @returns The rendered deductions card.\n * @public\n */\nexport function DeductionsCard({ LoaderComponent, ...props }: DeductionsCardProps) {\n return (\n <BaseBoundaries\n componentName=\"Employee.Management.Deductions\"\n LoaderComponent={LoaderComponent}\n >\n <DeductionsCardContent LoaderComponent={LoaderComponent} {...props} />\n </BaseBoundaries>\n )\n}\n\nfunction DeductionsCardContent({ employeeId, onEvent, LoaderComponent }: DeductionsCardProps) {\n useI18n('Employee.Management.Deductions')\n const { t } = useTranslation('Employee.Management.Deductions')\n const Components = useComponentContext()\n const formatCurrency = useNumberFormatter('currency')\n const formatPercent = useNumberFormatter('percent')\n\n const deductionsList = useDeductionsList({ employeeId })\n\n const {\n pendingDeleteDeduction,\n setPendingDeleteDeduction,\n handleConfirmDelete: handleConfirmDeleteDeduction,\n } = useDeleteDeduction(async garnishment => {\n if (deductionsList.isLoading) return\n const result = await deductionsList.actions.onDelete(garnishment)\n if (result) {\n onEvent(componentEvents.EMPLOYEE_MANAGEMENT_DEDUCTIONS_CARD_DELETED, result.data.garnishment)\n }\n })\n\n // `useDeductionsList` returns `isLoading: true` even when the query has\n // errored and `data` is missing. Treat those rows as \"not loading\" so the\n // section doesn't show a perpetual skeleton while BaseLayout already\n // renders the error alert.\n const isDeductionsLoading =\n deductionsList.isLoading && deductionsList.errorHandling.errors.length === 0\n\n const deductions = deductionsList.isLoading ? [] : deductionsList.data.deductions\n const deletingGarnishmentUuid = deductionsList.isLoading\n ? undefined\n : deductionsList.status.deletingGarnishmentUuid\n\n const handleAdd = () => {\n onEvent(componentEvents.EMPLOYEE_MANAGEMENT_DEDUCTIONS_CARD_ADD_REQUESTED, { employeeId })\n }\n const handleEdit = (garnishment: Garnishment) => {\n onEvent(componentEvents.EMPLOYEE_MANAGEMENT_DEDUCTIONS_CARD_EDIT_REQUESTED, garnishment)\n }\n\n const garnishmentsColumns = [\n {\n key: 'description',\n title: t('columns.deduction'),\n render: (garnishment: Garnishment) => garnishment.description || '-',\n },\n {\n key: 'frequency',\n title: t('columns.frequency'),\n render: (garnishment: Garnishment) => (garnishment.recurring ? t('recurring') : t('oneTime')),\n },\n {\n key: 'amount',\n title: t('columns.withhold'),\n justify: 'end' as const,\n render: (garnishment: Garnishment) =>\n formatDeductionAmount(garnishment, {\n formatCurrency,\n formatPercent,\n formatPerPaycheck: (value: string) => t('amountPerPaycheck', { value }),\n }),\n },\n ]\n\n const garnishmentsDataView = useDataView({\n data: deductions,\n columns: garnishmentsColumns,\n itemMenu: (garnishment: Garnishment) => (\n <HamburgerMenu\n isLoading={deletingGarnishmentUuid === garnishment.uuid}\n items={[\n {\n label: t('editCta'),\n onClick: () => {\n handleEdit(garnishment)\n },\n icon: <PencilSvg aria-hidden />,\n },\n {\n label: t('deleteCta'),\n onClick: () => {\n setPendingDeleteDeduction(garnishment)\n },\n icon: <TrashCanSvg aria-hidden />,\n },\n ]}\n triggerLabel={t('hamburgerTitle')}\n />\n ),\n emptyState: () => (\n <EmptyData title={t('emptyState.title')} description={t('emptyState.description')} />\n ),\n })\n\n return (\n <BaseLayout error={deductionsList.errorHandling.errors} LoaderComponent={LoaderComponent}>\n <Components.Box\n withPadding={false}\n header={\n <Components.BoxHeader\n title={t('title')}\n action={\n <Components.Button variant=\"secondary\" onClick={handleAdd} icon={<PlusCircleIcon />}>\n {t('addDeductionCta')}\n </Components.Button>\n }\n />\n }\n >\n {isDeductionsLoading ? (\n <Loading />\n ) : (\n <DataView label={t('listLabel')} isWithinBox {...garnishmentsDataView} />\n )}\n </Components.Box>\n\n <DeleteDeductionDialog\n pendingDeleteDeduction={pendingDeleteDeduction}\n isPrimaryActionLoading={deletingGarnishmentUuid === pendingDeleteDeduction?.uuid}\n onClose={() => {\n setPendingDeleteDeduction(null)\n }}\n onConfirm={() => {\n void handleConfirmDeleteDeduction()\n }}\n title={t('deleteDeductionDialog.title')}\n description={t('deleteDeductionDialog.description', {\n deduction: pendingDeleteDeduction?.description ?? '',\n })}\n confirmLabel={t('deleteDeductionDialog.confirmCta')}\n cancelLabel={t('deleteDeductionDialog.cancelCta')}\n />\n </BaseLayout>\n )\n}\n"],"names":["DeductionsCard","LoaderComponent","props","jsx","BaseBoundaries","DeductionsCardContent","employeeId","onEvent","useI18n","t","useTranslation","Components","useComponentContext","formatCurrency","useNumberFormatter","formatPercent","deductionsList","useDeductionsList","pendingDeleteDeduction","setPendingDeleteDeduction","handleConfirmDeleteDeduction","useDeleteDeduction","garnishment","result","componentEvents","isDeductionsLoading","deductions","deletingGarnishmentUuid","handleAdd","handleEdit","garnishmentsColumns","formatDeductionAmount","value","garnishmentsDataView","useDataView","HamburgerMenu","PencilSvg","TrashCanSvg","EmptyData","BaseLayout","PlusCircleIcon","Loading","DataView","DeleteDeductionDialog"],"mappings":"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"}
|
|
@@ -12,7 +12,7 @@ import { useComponentContext as w } from "../../../../../contexts/ComponentAdapt
|
|
|
12
12
|
import { useI18n as B } from "../../../../../i18n/I18n.js";
|
|
13
13
|
import l from "../../../../../assets/icons/plus-circle.svg.js";
|
|
14
14
|
import { useDataView as V } from "../../../../Common/DataView/useDataView.js";
|
|
15
|
-
import { DataView as
|
|
15
|
+
import { DataView as j } from "../../../../Common/DataView/DataView.js";
|
|
16
16
|
function U({
|
|
17
17
|
className: s,
|
|
18
18
|
deductionsList: i,
|
|
@@ -22,7 +22,7 @@ function U({
|
|
|
22
22
|
onContinue: f
|
|
23
23
|
}) {
|
|
24
24
|
B("Employee.Deductions");
|
|
25
|
-
const { t } = k("Employee.Deductions"), r = w(),
|
|
25
|
+
const { t } = k("Employee.Deductions"), r = w(), y = u("currency"), g = u("percent"), { deductions: a } = i.data, h = i.status.isPending, C = a.length === 0, { ...D } = V({
|
|
26
26
|
data: a,
|
|
27
27
|
columns: [
|
|
28
28
|
{
|
|
@@ -37,9 +37,10 @@ function U({
|
|
|
37
37
|
{
|
|
38
38
|
key: "amount",
|
|
39
39
|
title: t("withheldColumn"),
|
|
40
|
+
justify: "end",
|
|
40
41
|
render: (n) => b(n, {
|
|
41
|
-
formatCurrency:
|
|
42
|
-
formatPercent:
|
|
42
|
+
formatCurrency: y,
|
|
43
|
+
formatPercent: g,
|
|
43
44
|
formatPerPaycheck: (x) => t("recurringAmount", { value: x })
|
|
44
45
|
})
|
|
45
46
|
}
|
|
@@ -51,7 +52,7 @@ function U({
|
|
|
51
52
|
itemMenu: (n) => /* @__PURE__ */ e(
|
|
52
53
|
v,
|
|
53
54
|
{
|
|
54
|
-
isLoading:
|
|
55
|
+
isLoading: h,
|
|
55
56
|
items: [
|
|
56
57
|
{
|
|
57
58
|
label: t("editCta"),
|
|
@@ -76,7 +77,7 @@ function U({
|
|
|
76
77
|
/* @__PURE__ */ e(r.Heading, { as: "h2", children: t("pageTitle") }),
|
|
77
78
|
/* @__PURE__ */ e(r.Text, { variant: "supporting", children: t("includeDeductionsDescriptionV2") })
|
|
78
79
|
] }),
|
|
79
|
-
/* @__PURE__ */ e(
|
|
80
|
+
/* @__PURE__ */ e(j, { label: t("deductionsTableLabel"), ...D }),
|
|
80
81
|
/* @__PURE__ */ o(T, { children: [
|
|
81
82
|
!C && /* @__PURE__ */ o(r.Button, { variant: "secondary", onClick: c, children: [
|
|
82
83
|
/* @__PURE__ */ e(l, {}),
|