@gusto/embedded-react-sdk 0.48.1 → 0.48.2
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 +23 -0
- package/dist/components/Common/DocumentList/DocumentList.js +12 -12
- package/dist/components/Common/DocumentList/DocumentList.js.map +1 -1
- package/dist/components/Common/DocumentList/DocumentList.module.scss.js +3 -5
- package/dist/components/Common/DocumentList/DocumentList.module.scss.js.map +1 -1
- package/dist/components/Common/HorizontalFieldLayout/HorizontalFieldLayoutTypes.d.ts +1 -0
- package/dist/components/Common/PaginationControl/PaginationControlTypes.d.ts +7 -3
- package/dist/components/Common/PayrollLoading/PayrollLoadingTypes.d.ts +1 -0
- package/dist/components/Common/UI/Alert/AlertTypes.d.ts +1 -0
- package/dist/components/Common/UI/Alert/AlertTypes.js.map +1 -1
- package/dist/components/Common/UI/Badge/BadgeTypes.d.ts +1 -0
- package/dist/components/Common/UI/Badge/BadgeTypes.js.map +1 -1
- package/dist/components/Common/UI/Banner/BannerTypes.d.ts +1 -0
- package/dist/components/Common/UI/Banner/BannerTypes.js.map +1 -1
- package/dist/components/Common/UI/Box/BoxTypes.d.ts +1 -0
- package/dist/components/Common/UI/BoxHeader/BoxHeaderTypes.d.ts +1 -0
- package/dist/components/Common/UI/BoxHeader/BoxHeaderTypes.js.map +1 -1
- package/dist/components/Common/UI/Breadcrumbs/BreadcrumbsTypes.d.ts +2 -0
- package/dist/components/Common/UI/Breadcrumbs/BreadcrumbsTypes.js.map +1 -1
- package/dist/components/Common/UI/Button/ButtonTypes.d.ts +4 -2
- package/dist/components/Common/UI/Button/ButtonTypes.js.map +1 -1
- package/dist/components/Common/UI/CalendarPreview/CalendarPreviewTypes.d.ts +3 -2
- package/dist/components/Common/UI/Card/CardTypes.d.ts +1 -0
- package/dist/components/Common/UI/Checkbox/CheckboxTypes.d.ts +1 -0
- package/dist/components/Common/UI/Checkbox/CheckboxTypes.js.map +1 -1
- package/dist/components/Common/UI/CheckboxGroup/CheckboxGroupTypes.d.ts +2 -0
- package/dist/components/Common/UI/CheckboxGroup/CheckboxGroupTypes.js.map +1 -1
- package/dist/components/Common/UI/ComboBox/ComboBoxTypes.d.ts +2 -0
- package/dist/components/Common/UI/DatePicker/DatePickerTypes.d.ts +1 -0
- package/dist/components/Common/UI/DateRangePicker/DateRangePickerTypes.d.ts +2 -0
- package/dist/components/Common/UI/DescriptionList/DescriptionListTypes.d.ts +2 -0
- package/dist/components/Common/UI/DescriptionList/DescriptionListTypes.js.map +1 -1
- package/dist/components/Common/UI/Dialog/DialogTypes.d.ts +1 -0
- package/dist/components/Common/UI/Dialog/DialogTypes.js.map +1 -1
- package/dist/components/Common/UI/FileInput/FileInputTypes.d.ts +1 -0
- package/dist/components/Common/UI/FileInput/FileInputTypes.js.map +1 -1
- package/dist/components/Common/UI/Heading/HeadingTypes.d.ts +1 -0
- package/dist/components/Common/UI/Link/LinkTypes.d.ts +4 -3
- package/dist/components/Common/UI/List/ListTypes.d.ts +13 -4
- package/dist/components/Common/UI/LoadingSpinner/LoadingSpinnerTypes.d.ts +1 -0
- package/dist/components/Common/UI/LoadingSpinner/LoadingSpinnerTypes.js.map +1 -1
- package/dist/components/Common/UI/Menu/MenuTypes.d.ts +2 -0
- package/dist/components/Common/UI/Menu/MenuTypes.js.map +1 -1
- package/dist/components/Common/UI/Modal/ModalTypes.d.ts +1 -0
- package/dist/components/Common/UI/Modal/ModalTypes.js.map +1 -1
- package/dist/components/Common/UI/MultiSelectComboBox/MultiSelectComboBoxTypes.d.ts +2 -0
- package/dist/components/Common/UI/NumberInput/NumberInputTypes.d.ts +1 -0
- package/dist/components/Common/UI/ProgressBar/ProgressBarTypes.d.ts +1 -0
- package/dist/components/Common/UI/Radio/RadioTypes.d.ts +1 -0
- package/dist/components/Common/UI/Radio/RadioTypes.js.map +1 -1
- package/dist/components/Common/UI/RadioGroup/RadioGroupTypes.d.ts +2 -0
- package/dist/components/Common/UI/RadioGroup/RadioGroupTypes.js.map +1 -1
- package/dist/components/Common/UI/Select/SelectTypes.d.ts +2 -0
- package/dist/components/Common/UI/Switch/SwitchTypes.d.ts +1 -0
- package/dist/components/Common/UI/Switch/SwitchTypes.js.map +1 -1
- package/dist/components/Common/UI/Table/TableTypes.d.ts +3 -0
- package/dist/components/Common/UI/Table/TableTypes.js.map +1 -1
- package/dist/components/Common/UI/Tabs/TabsTypes.d.ts +2 -0
- package/dist/components/Common/UI/Text/TextTypes.d.ts +1 -0
- package/dist/components/Common/UI/Text/TextTypes.js.map +1 -1
- package/dist/components/Common/UI/TextArea/TextAreaTypes.d.ts +1 -0
- package/dist/components/Common/UI/TextArea/TextAreaTypes.js.map +1 -1
- package/dist/components/Common/UI/TextInput/TextInputTypes.d.ts +1 -0
- package/dist/components/Common/UI/TextInput/TextInputTypes.js.map +1 -1
- package/dist/components/Company/AssignSignatory/CreateSignatory/CreateSignatoryForm.js +13 -13
- package/dist/components/Company/AssignSignatory/CreateSignatory/useCreateSignatory.js +18 -3
- package/dist/components/Company/AssignSignatory/CreateSignatory/useCreateSignatory.js.map +1 -1
- package/dist/components/Company/AssignSignatory/InviteSignatory/useInviteSignatory.js +18 -3
- package/dist/components/Company/AssignSignatory/InviteSignatory/useInviteSignatory.js.map +1 -1
- package/dist/components/Company/AssignSignatory/useAssignSignatory.js +20 -5
- package/dist/components/Company/AssignSignatory/useAssignSignatory.js.map +1 -1
- package/dist/components/Company/BankAccount/BankAccount.js +7 -6
- package/dist/components/Company/BankAccount/BankAccount.js.map +1 -1
- package/dist/components/Company/BankAccount/BankAccountForm/context.js +18 -3
- package/dist/components/Company/BankAccount/BankAccountForm/context.js.map +1 -1
- package/dist/components/Company/DocumentSigner/DocumentList/useDocumentList.js +18 -3
- package/dist/components/Company/DocumentSigner/DocumentList/useDocumentList.js.map +1 -1
- package/dist/components/Company/DocumentSigner/DocumentSigner.js +3 -2
- package/dist/components/Company/DocumentSigner/DocumentSigner.js.map +1 -1
- package/dist/components/Company/FederalTaxes/useFederalTaxes.js +27 -12
- package/dist/components/Company/FederalTaxes/useFederalTaxes.js.map +1 -1
- package/dist/components/Company/Industry/Context.js +21 -6
- package/dist/components/Company/Industry/Context.js.map +1 -1
- package/dist/components/Company/Locations/LocationForm/useLocationForm.js +18 -3
- package/dist/components/Company/Locations/LocationForm/useLocationForm.js.map +1 -1
- package/dist/components/Company/Locations/LocationsList/useLocationsList.js +18 -3
- package/dist/components/Company/Locations/LocationsList/useLocationsList.js.map +1 -1
- package/dist/components/Company/OnboardingOverview/context.js +19 -4
- package/dist/components/Company/OnboardingOverview/context.js.map +1 -1
- package/dist/components/Company/PaySchedule/PayScheduleForm.js +3 -2
- package/dist/components/Company/PaySchedule/PayScheduleForm.js.map +1 -1
- package/dist/components/Company/StateTaxes/StateTaxesForm/context.js +18 -3
- package/dist/components/Company/StateTaxes/StateTaxesForm/context.js.map +1 -1
- package/dist/components/Company/StateTaxes/StateTaxesList/context.js +18 -3
- package/dist/components/Company/StateTaxes/StateTaxesList/context.js.map +1 -1
- package/dist/components/Contractor/Address/useAddress.js +20 -5
- package/dist/components/Contractor/Address/useAddress.js.map +1 -1
- package/dist/components/Contractor/Payments/PaymentStatement/PaymentStatement.js +3 -2
- package/dist/components/Contractor/Payments/PaymentStatement/PaymentStatement.js.map +1 -1
- package/dist/components/Contractor/Payments/PaymentsList/PaymentsList.js +3 -2
- package/dist/components/Contractor/Payments/PaymentsList/PaymentsList.js.map +1 -1
- package/dist/components/Contractor/Profile/ContractorProfileForm.js +13 -13
- package/dist/components/Contractor/Profile/useContractorProfile.js +29 -21
- package/dist/components/Contractor/Profile/useContractorProfile.js.map +1 -1
- package/dist/components/Employee/Compensation/management/Compensation.js +3 -2
- package/dist/components/Employee/Compensation/management/Compensation.js.map +1 -1
- package/dist/components/Employee/Compensation/management/CompensationAddAnotherJobForm/CompensationAddAnotherJobForm.js +9 -8
- package/dist/components/Employee/Compensation/management/CompensationAddAnotherJobForm/CompensationAddAnotherJobForm.js.map +1 -1
- package/dist/components/Employee/Compensation/management/CompensationAddJobForm/CompensationAddJobForm.js +3 -2
- package/dist/components/Employee/Compensation/management/CompensationAddJobForm/CompensationAddJobForm.js.map +1 -1
- package/dist/components/Employee/Compensation/management/CompensationEditForm/CompensationEditForm.js +3 -2
- package/dist/components/Employee/Compensation/management/CompensationEditForm/CompensationEditForm.js.map +1 -1
- package/dist/components/Employee/Compensation/management/CompensationEditJobForm/CompensationEditJobForm.js +3 -2
- package/dist/components/Employee/Compensation/management/CompensationEditJobForm/CompensationEditJobForm.js.map +1 -1
- package/dist/components/Employee/Compensation/management/CompensationEditPendingJobForm/CompensationEditPendingJobForm.js +3 -2
- package/dist/components/Employee/Compensation/management/CompensationEditPendingJobForm/CompensationEditPendingJobForm.js.map +1 -1
- package/dist/components/Employee/Compensation/onboarding/Compensation.js +3 -2
- package/dist/components/Employee/Compensation/onboarding/Compensation.js.map +1 -1
- package/dist/components/Employee/Compensation/onboarding/EditCompensation/EditCompensation.js +3 -2
- package/dist/components/Employee/Compensation/onboarding/EditCompensation/EditCompensation.js.map +1 -1
- package/dist/components/Employee/Deductions/management/Deductions.js +3 -2
- package/dist/components/Employee/Deductions/management/Deductions.js.map +1 -1
- package/dist/components/Employee/Deductions/management/DeductionsEditForm/DeductionsEditForm.js +3 -2
- package/dist/components/Employee/Deductions/management/DeductionsEditForm/DeductionsEditForm.js.map +1 -1
- package/dist/components/Employee/Documents/management/Documents.js +3 -2
- package/dist/components/Employee/Documents/management/Documents.js.map +1 -1
- package/dist/components/Employee/Documents/onboarding/DocumentSigner/DocumentList/DocumentList.d.ts +25 -5
- package/dist/components/Employee/Documents/onboarding/DocumentSigner/DocumentList/DocumentList.js.map +1 -1
- package/dist/components/Employee/Documents/onboarding/DocumentSigner/DocumentList/index.d.ts +3 -0
- package/dist/components/Employee/Documents/onboarding/DocumentSigner/DocumentList/useDocumentList.js +18 -3
- package/dist/components/Employee/Documents/onboarding/DocumentSigner/DocumentList/useDocumentList.js.map +1 -1
- package/dist/components/Employee/Documents/onboarding/DocumentSigner/DocumentSigner.js +12 -11
- package/dist/components/Employee/Documents/onboarding/DocumentSigner/DocumentSigner.js.map +1 -1
- package/dist/components/Employee/Documents/onboarding/DocumentSigner/EmploymentEligibility/EmploymentEligibilityPresentation.js +16 -16
- package/dist/components/Employee/Documents/onboarding/DocumentSigner/I9SignatureForm/I9SignatureForm.d.ts +28 -5
- package/dist/components/Employee/Documents/onboarding/DocumentSigner/I9SignatureForm/I9SignatureForm.js.map +1 -1
- package/dist/components/Employee/Documents/onboarding/DocumentSigner/I9SignatureForm/index.d.ts +3 -0
- package/dist/components/Employee/Documents/shared/SignatureForm/SignatureForm.d.ts +26 -5
- package/dist/components/Employee/Documents/shared/SignatureForm/SignatureForm.js.map +1 -1
- package/dist/components/Employee/Documents/shared/SignatureForm/index.d.ts +3 -0
- package/dist/components/Employee/FederalTaxes/management/FederalTaxes.js +10 -9
- package/dist/components/Employee/FederalTaxes/management/FederalTaxes.js.map +1 -1
- package/dist/components/Employee/FederalTaxes/management/FederalTaxesEditForm.js +3 -2
- package/dist/components/Employee/FederalTaxes/management/FederalTaxesEditForm.js.map +1 -1
- package/dist/components/Employee/FederalTaxes/onboarding/FederalTaxes.js +9 -8
- package/dist/components/Employee/FederalTaxes/onboarding/FederalTaxes.js.map +1 -1
- package/dist/components/Employee/FederalTaxes/shared/FederalTaxesView.js +14 -13
- package/dist/components/Employee/FederalTaxes/shared/FederalTaxesView.js.map +1 -1
- package/dist/components/Employee/HomeAddress/management/HomeAddress.js +3 -2
- package/dist/components/Employee/HomeAddress/management/HomeAddress.js.map +1 -1
- package/dist/components/Employee/PaymentMethod/management/PaymentMethod.js +7 -6
- package/dist/components/Employee/PaymentMethod/management/PaymentMethod.js.map +1 -1
- package/dist/components/Employee/PaymentMethod/onboarding/PaymentMethod.js +7 -6
- package/dist/components/Employee/PaymentMethod/onboarding/PaymentMethod.js.map +1 -1
- package/dist/components/Employee/Profile/management/Profile.js +12 -11
- package/dist/components/Employee/Profile/management/Profile.js.map +1 -1
- package/dist/components/Employee/Profile/management/ProfileEditForm.js +13 -12
- package/dist/components/Employee/Profile/management/ProfileEditForm.js.map +1 -1
- package/dist/components/Employee/Profile/onboarding/AdminProfile.js +11 -10
- package/dist/components/Employee/Profile/onboarding/AdminProfile.js.map +1 -1
- package/dist/components/Employee/Profile/onboarding/EmployeeProfile.js +3 -2
- package/dist/components/Employee/Profile/onboarding/EmployeeProfile.js.map +1 -1
- package/dist/components/Employee/Profile/onboarding/Profile.js +12 -11
- package/dist/components/Employee/Profile/onboarding/Profile.js.map +1 -1
- package/dist/components/Employee/StateTaxes/management/StateTaxes.js +10 -9
- package/dist/components/Employee/StateTaxes/management/StateTaxes.js.map +1 -1
- package/dist/components/Employee/StateTaxes/management/StateTaxesEditForm.js +7 -6
- package/dist/components/Employee/StateTaxes/management/StateTaxesEditForm.js.map +1 -1
- package/dist/components/Employee/StateTaxes/onboarding/StateTaxes.js +3 -2
- package/dist/components/Employee/StateTaxes/onboarding/StateTaxes.js.map +1 -1
- package/dist/components/Employee/StateTaxes/shared/EmployeeStateTaxesView.js +3 -2
- package/dist/components/Employee/StateTaxes/shared/EmployeeStateTaxesView.js.map +1 -1
- package/dist/components/Employee/Terminations/TerminateEmployee/TerminateEmployeePresentation.js +10 -10
- package/dist/components/Employee/WorkAddress/management/WorkAddress.js +7 -6
- package/dist/components/Employee/WorkAddress/management/WorkAddress.js.map +1 -1
- package/dist/components/Employee/exports/employeeOnboarding.d.ts +3 -0
- package/dist/components/Employee/exports/employeeOnboarding.js +28 -22
- package/dist/components/Employee/exports/employeeOnboarding.js.map +1 -1
- package/dist/components/InformationRequests/InformationRequestForm/InformationRequestForm.d.ts +36 -2
- package/dist/components/InformationRequests/InformationRequestForm/InformationRequestForm.js.map +1 -1
- package/dist/components/InformationRequests/InformationRequestForm/index.d.ts +1 -1
- package/dist/components/InformationRequests/InformationRequestList/InformationRequestList.d.ts +22 -2
- package/dist/components/InformationRequests/InformationRequestList/InformationRequestList.js +8 -7
- package/dist/components/InformationRequests/InformationRequestList/InformationRequestList.js.map +1 -1
- package/dist/components/InformationRequests/InformationRequestList/index.d.ts +1 -1
- package/dist/components/InformationRequests/InformationRequests.d.ts +29 -2
- package/dist/components/InformationRequests/InformationRequests.js +8 -7
- package/dist/components/InformationRequests/InformationRequests.js.map +1 -1
- package/dist/components/InformationRequests/InformationRequestsComponents.d.ts +2 -0
- package/dist/components/InformationRequests/InformationRequestsComponents.js.map +1 -1
- package/dist/components/InformationRequests/index.d.ts +3 -3
- package/dist/components/InformationRequests/informationRequestsStateMachine.d.ts +2 -0
- package/dist/components/InformationRequests/informationRequestsStateMachine.js.map +1 -1
- package/dist/components/Payroll/ConfirmWireDetails/ConfirmWireDetails.d.ts +36 -3
- package/dist/components/Payroll/ConfirmWireDetails/ConfirmWireDetails.js +22 -17
- package/dist/components/Payroll/ConfirmWireDetails/ConfirmWireDetails.js.map +1 -1
- package/dist/components/Payroll/ConfirmWireDetails/ConfirmWireDetailsBanner/ConfirmWireDetailsBanner.d.ts +1 -0
- package/dist/components/Payroll/ConfirmWireDetails/ConfirmWireDetailsBanner/ConfirmWireDetailsBanner.js +3 -2
- package/dist/components/Payroll/ConfirmWireDetails/ConfirmWireDetailsBanner/ConfirmWireDetailsBanner.js.map +1 -1
- package/dist/components/Payroll/ConfirmWireDetails/ConfirmWireDetailsComponents.d.ts +14 -0
- package/dist/components/Payroll/ConfirmWireDetails/ConfirmWireDetailsComponents.js.map +1 -1
- package/dist/components/Payroll/ConfirmWireDetails/ConfirmWireDetailsForm/ConfirmWireDetailsForm.d.ts +1 -8
- package/dist/components/Payroll/ConfirmWireDetails/ConfirmWireDetailsForm/ConfirmWireDetailsForm.js +9 -10
- package/dist/components/Payroll/ConfirmWireDetails/ConfirmWireDetailsForm/ConfirmWireDetailsForm.js.map +1 -1
- package/dist/components/Payroll/ConfirmWireDetails/WireInstructions/WireInstructions.d.ts +1 -1
- package/dist/components/Payroll/ConfirmWireDetails/WireInstructions/WireInstructions.js +1 -1
- package/dist/components/Payroll/ConfirmWireDetails/WireInstructions/WireInstructions.js.map +1 -1
- package/dist/components/Payroll/ConfirmWireDetails/confirmWireDetailsStateMachine.d.ts +11 -0
- package/dist/components/Payroll/ConfirmWireDetails/confirmWireDetailsStateMachine.js.map +1 -1
- package/dist/components/Payroll/ConfirmWireDetails/index.d.ts +1 -2
- package/dist/components/Payroll/ConfirmWireDetails/types.d.ts +23 -0
- package/dist/components/Payroll/Dismissal/DismissalFlow.d.ts +18 -0
- package/dist/components/Payroll/Dismissal/DismissalFlow.js.map +1 -1
- package/dist/components/Payroll/Dismissal/DismissalFlowComponents.d.ts +15 -0
- package/dist/components/Payroll/Dismissal/DismissalFlowComponents.js.map +1 -1
- package/dist/components/Payroll/Dismissal/DismissalPayPeriodSelection/DismissalPayPeriodSelection.d.ts +24 -0
- package/dist/components/Payroll/Dismissal/DismissalPayPeriodSelection/DismissalPayPeriodSelection.js.map +1 -1
- package/dist/components/Payroll/Dismissal/DismissalPayPeriodSelection/DismissalPayPeriodSelectionPresentation.d.ts +7 -0
- package/dist/components/Payroll/Dismissal/DismissalPayPeriodSelection/DismissalPayPeriodSelectionPresentation.js.map +1 -1
- package/dist/components/Payroll/Dismissal/dismissalStateMachine.d.ts +2 -0
- package/dist/components/Payroll/Dismissal/dismissalStateMachine.js.map +1 -1
- package/dist/components/Payroll/Dismissal/index.d.ts +1 -1
- package/dist/components/Payroll/GrossUpModal/GrossUpModal.d.ts +1 -0
- package/dist/components/Payroll/GrossUpModal/GrossUpModal.js +33 -25
- package/dist/components/Payroll/GrossUpModal/GrossUpModal.js.map +1 -1
- package/dist/components/Payroll/GrossUpModal/GrossUpModalTypes.d.ts +5 -0
- package/dist/components/Payroll/GrossUpModal/index.d.ts +0 -1
- package/dist/components/Payroll/OffCycle/OffCycleFlow.d.ts +31 -0
- package/dist/components/Payroll/OffCycle/OffCycleFlow.js.map +1 -1
- package/dist/components/Payroll/OffCycle/OffCycleFlowComponents.d.ts +20 -0
- package/dist/components/Payroll/OffCycle/OffCycleFlowComponents.js.map +1 -1
- package/dist/components/Payroll/OffCycle/offCycleStateMachine.d.ts +2 -0
- package/dist/components/Payroll/OffCycle/offCycleStateMachine.js.map +1 -1
- package/dist/components/Payroll/OffCycleCreation/OffCycleCreation.d.ts +20 -0
- package/dist/components/Payroll/OffCycleCreation/OffCycleCreation.js.map +1 -1
- package/dist/components/Payroll/OffCycleCreation/OffCycleCreationPresentation.d.ts +1 -0
- package/dist/components/Payroll/OffCycleCreation/OffCycleCreationPresentation.js.map +1 -1
- package/dist/components/Payroll/OffCycleCreation/OffCycleCreationTypes.d.ts +24 -0
- package/dist/components/Payroll/OffCycleCreation/index.d.ts +1 -1
- package/dist/components/Payroll/OffCycleDeductionsSetting/OffCycleDeductionsSetting.d.ts +16 -0
- package/dist/components/Payroll/OffCycleDeductionsSetting/OffCycleDeductionsSetting.js.map +1 -1
- package/dist/components/Payroll/OffCycleDeductionsSetting/types.d.ts +13 -0
- package/dist/components/Payroll/OffCyclePayPeriodDateForm/OffCyclePayPeriodDateFormPresentation.d.ts +1 -0
- package/dist/components/Payroll/OffCyclePayPeriodDateForm/OffCyclePayPeriodDateFormPresentation.js +1 -1
- package/dist/components/Payroll/OffCyclePayPeriodDateForm/OffCyclePayPeriodDateFormPresentation.js.map +1 -1
- package/dist/components/Payroll/OffCyclePayPeriodDateForm/OffCyclePayPeriodDateFormTypes.d.ts +18 -1
- package/dist/components/Payroll/OffCyclePayPeriodDateForm/OffCyclePayPeriodDateFormTypes.js.map +1 -1
- package/dist/components/Payroll/OffCyclePayPeriodDateForm/useOffCyclePayPeriodDateValidation.d.ts +1 -1
- package/dist/components/Payroll/OffCyclePayPeriodDateForm/useOffCyclePayPeriodDateValidation.js +0 -1
- package/dist/components/Payroll/OffCyclePayPeriodDateForm/useOffCyclePayPeriodDateValidation.js.map +1 -1
- package/dist/components/Payroll/OffCycleReasonSelection/OffCycleReasonSelection.d.ts +15 -0
- package/dist/components/Payroll/OffCycleReasonSelection/OffCycleReasonSelection.js.map +1 -1
- package/dist/components/Payroll/OffCycleReasonSelection/OffCycleReasonSelectionPresentation.d.ts +1 -0
- package/dist/components/Payroll/OffCycleReasonSelection/OffCycleReasonSelectionPresentation.js.map +1 -1
- package/dist/components/Payroll/OffCycleReasonSelection/types.d.ts +43 -0
- package/dist/components/Payroll/OffCycleReasonSelection/types.js.map +1 -1
- package/dist/components/Payroll/OffCycleTaxWithholdingModal/OffCycleTaxWithholdingModal.d.ts +1 -0
- package/dist/components/Payroll/OffCycleTaxWithholdingModal/OffCycleTaxWithholdingModal.js.map +1 -1
- package/dist/components/Payroll/OffCycleTaxWithholdingModal/OffCycleTaxWithholdingModalTypes.d.ts +5 -1
- package/dist/components/Payroll/OffCycleTaxWithholdingModal/index.d.ts +0 -1
- package/dist/components/Payroll/OffCycleTaxWithholdingTable/OffCycleTaxWithholdingTable.d.ts +1 -0
- package/dist/components/Payroll/OffCycleTaxWithholdingTable/OffCycleTaxWithholdingTable.js.map +1 -1
- package/dist/components/Payroll/OffCycleTaxWithholdingTable/OffCycleTaxWithholdingTableTypes.d.ts +14 -0
- package/dist/components/Payroll/OffCycleTaxWithholdingTable/OffCycleTaxWithholdingTableTypes.js.map +1 -1
- package/dist/components/Payroll/OffCycleTaxWithholdingTable/index.d.ts +0 -2
- package/dist/components/Payroll/PayrollBlocker/components/PayrollBlockerAlerts.d.ts +3 -0
- package/dist/components/Payroll/PayrollBlocker/components/PayrollBlockerAlerts.js.map +1 -1
- package/dist/components/Payroll/PayrollBlocker/components/PayrollBlockerList.d.ts +19 -5
- package/dist/components/Payroll/PayrollBlocker/components/PayrollBlockerList.js +3 -2
- package/dist/components/Payroll/PayrollBlocker/components/PayrollBlockerList.js.map +1 -1
- package/dist/components/Payroll/PayrollBlocker/index.d.ts +0 -1
- package/dist/components/Payroll/PayrollBlocker/payrollHelpers.d.ts +17 -11
- package/dist/components/Payroll/PayrollBlocker/payrollHelpers.js +0 -2
- package/dist/components/Payroll/PayrollBlocker/payrollHelpers.js.map +1 -1
- package/dist/components/Payroll/PayrollConfiguration/PayrollConfiguration.d.ts +31 -3
- package/dist/components/Payroll/PayrollConfiguration/PayrollConfiguration.js +1 -2
- package/dist/components/Payroll/PayrollConfiguration/PayrollConfiguration.js.map +1 -1
- package/dist/components/Payroll/PayrollConfiguration/PayrollConfigurationPresentation.d.ts +1 -0
- package/dist/components/Payroll/PayrollConfiguration/PayrollConfigurationPresentation.js.map +1 -1
- package/dist/components/Payroll/PayrollConfiguration/grossUpHelpers.d.ts +2 -0
- package/dist/components/Payroll/PayrollConfiguration/grossUpHelpers.js.map +1 -1
- package/dist/components/Payroll/PayrollConfiguration/usePayrollConfigurationData.d.ts +2 -0
- package/dist/components/Payroll/PayrollConfiguration/usePayrollConfigurationData.js.map +1 -1
- package/dist/components/Payroll/PayrollEditEmployee/PayrollEditEmployee.d.ts +42 -3
- package/dist/components/Payroll/PayrollEditEmployee/PayrollEditEmployee.js +1 -2
- package/dist/components/Payroll/PayrollEditEmployee/PayrollEditEmployee.js.map +1 -1
- package/dist/components/Payroll/PayrollEditEmployee/PayrollEditEmployeePresentation.d.ts +3 -1
- package/dist/components/Payroll/PayrollEditEmployee/PayrollEditEmployeePresentation.js +0 -1
- package/dist/components/Payroll/PayrollEditEmployee/PayrollEditEmployeePresentation.js.map +1 -1
- package/dist/components/Payroll/PayrollEditEmployee/TimeOffField.d.ts +8 -6
- package/dist/components/Payroll/PayrollEditEmployee/TimeOffField.js +0 -1
- package/dist/components/Payroll/PayrollEditEmployee/TimeOffField.js.map +1 -1
- package/dist/components/Payroll/PayrollExecutionFlow/PayrollExecutionFlow.d.ts +65 -0
- package/dist/components/Payroll/PayrollExecutionFlow/PayrollExecutionFlow.js.map +1 -1
- package/dist/components/Payroll/PayrollExecutionFlow/index.d.ts +0 -1
- package/dist/components/Payroll/PayrollExecutionFlow/payrollExecutionMachine.d.ts +2 -0
- package/dist/components/Payroll/PayrollExecutionFlow/payrollExecutionMachine.js.map +1 -1
- package/dist/components/Payroll/PayrollFlow/OffCycleFlowContextual.d.ts +1 -0
- package/dist/components/Payroll/PayrollFlow/OffCycleFlowContextual.js.map +1 -1
- package/dist/components/Payroll/PayrollFlow/PayrollExecutionFlowContextual.d.ts +1 -0
- package/dist/components/Payroll/PayrollFlow/PayrollExecutionFlowContextual.js.map +1 -1
- package/dist/components/Payroll/PayrollFlow/PayrollFlow.d.ts +38 -0
- package/dist/components/Payroll/PayrollFlow/PayrollFlow.js.map +1 -1
- package/dist/components/Payroll/PayrollFlow/PayrollFlowComponents.d.ts +27 -0
- package/dist/components/Payroll/PayrollFlow/PayrollFlowComponents.js.map +1 -1
- package/dist/components/Payroll/PayrollFlow/TransitionFlowContextual.d.ts +1 -0
- package/dist/components/Payroll/PayrollFlow/TransitionFlowContextual.js.map +1 -1
- package/dist/components/Payroll/PayrollFlow/payrollStateMachine.d.ts +2 -0
- package/dist/components/Payroll/PayrollFlow/payrollStateMachine.js.map +1 -1
- package/dist/components/Payroll/PayrollHistory/PayrollHistory.d.ts +25 -1
- package/dist/components/Payroll/PayrollHistory/PayrollHistory.js +1 -2
- package/dist/components/Payroll/PayrollHistory/PayrollHistory.js.map +1 -1
- package/dist/components/Payroll/PayrollHistory/PayrollHistoryPresentation.d.ts +1 -0
- package/dist/components/Payroll/PayrollHistory/PayrollHistoryPresentation.js.map +1 -1
- package/dist/components/Payroll/PayrollLanding/PayrollLanding.d.ts +33 -4
- package/dist/components/Payroll/PayrollLanding/PayrollLanding.js +1 -2
- package/dist/components/Payroll/PayrollLanding/PayrollLanding.js.map +1 -1
- package/dist/components/Payroll/PayrollLanding/PayrollLandingFlowComponents.d.ts +19 -0
- package/dist/components/Payroll/PayrollLanding/PayrollLandingFlowComponents.js.map +1 -1
- package/dist/components/Payroll/PayrollLanding/payrollLandingStateMachine.d.ts +2 -0
- package/dist/components/Payroll/PayrollLanding/payrollLandingStateMachine.js.map +1 -1
- package/dist/components/Payroll/PayrollList/PayrollList.d.ts +32 -13
- package/dist/components/Payroll/PayrollList/PayrollList.js.map +1 -1
- package/dist/components/Payroll/PayrollList/PayrollListPresentation.d.ts +1 -0
- package/dist/components/Payroll/PayrollList/PayrollListPresentation.js +65 -68
- package/dist/components/Payroll/PayrollList/PayrollListPresentation.js.map +1 -1
- package/dist/components/Payroll/PayrollList/types.d.ts +1 -0
- package/dist/components/Payroll/PayrollOverview/PayrollOverview.d.ts +39 -3
- package/dist/components/Payroll/PayrollOverview/PayrollOverview.js +1 -2
- package/dist/components/Payroll/PayrollOverview/PayrollOverview.js.map +1 -1
- package/dist/components/Payroll/PayrollOverview/PayrollOverviewPresentation.d.ts +1 -0
- package/dist/components/Payroll/PayrollOverview/PayrollOverviewPresentation.js.map +1 -1
- package/dist/components/Payroll/PayrollOverview/PayrollOverviewTypes.d.ts +1 -0
- package/dist/components/Payroll/PayrollOverview/PayrollOverviewTypes.js.map +1 -1
- package/dist/components/Payroll/PayrollOverview/SubmissionBlockers/FastAchSubmissionBlockerBanner.d.ts +1 -0
- package/dist/components/Payroll/PayrollOverview/SubmissionBlockers/FastAchSubmissionBlockerBanner.js.map +1 -1
- package/dist/components/Payroll/PayrollOverview/SubmissionBlockers/GenericBlocker.d.ts +1 -0
- package/dist/components/Payroll/PayrollOverview/SubmissionBlockers/GenericBlocker.js.map +1 -1
- package/dist/components/Payroll/PayrollReceipts/PayrollReceipts.d.ts +26 -3
- package/dist/components/Payroll/PayrollReceipts/PayrollReceipts.js +8 -12
- package/dist/components/Payroll/PayrollReceipts/PayrollReceipts.js.map +1 -1
- package/dist/components/Payroll/PayrollReceipts/PayrollReceiptsPresentation.d.ts +1 -0
- package/dist/components/Payroll/PayrollReceipts/PayrollReceiptsPresentation.js.map +1 -1
- package/dist/components/Payroll/PayrollStatusBadges/PayrollStatusBadges.d.ts +1 -0
- package/dist/components/Payroll/PayrollStatusBadges/PayrollStatusBadges.js.map +1 -1
- package/dist/components/Payroll/PayrollStatusBadges/index.d.ts +0 -2
- package/dist/components/Payroll/PayrollStatusBadges/payrollStatusConfig.d.ts +26 -0
- package/dist/components/Payroll/PayrollStatusBadges/payrollStatusConfig.js.map +1 -1
- package/dist/components/Payroll/PayrollStatusBadges/usePayrollStatusBadges.d.ts +2 -0
- package/dist/components/Payroll/PayrollStatusBadges/usePayrollStatusBadges.js.map +1 -1
- package/dist/components/Payroll/RecoveryCases/RecoveryCases.d.ts +21 -1
- package/dist/components/Payroll/RecoveryCases/RecoveryCases.js +7 -6
- package/dist/components/Payroll/RecoveryCases/RecoveryCases.js.map +1 -1
- package/dist/components/Payroll/RecoveryCases/RecoveryCasesComponents.d.ts +5 -0
- package/dist/components/Payroll/RecoveryCases/RecoveryCasesComponents.js.map +1 -1
- package/dist/components/Payroll/RecoveryCases/RecoveryCasesList/RecoveryCasesList.d.ts +1 -0
- package/dist/components/Payroll/RecoveryCases/RecoveryCasesList/RecoveryCasesList.js +3 -2
- package/dist/components/Payroll/RecoveryCases/RecoveryCasesList/RecoveryCasesList.js.map +1 -1
- package/dist/components/Payroll/RecoveryCases/RecoveryCasesResubmit/RecoveryCasesResubmit.d.ts +1 -0
- package/dist/components/Payroll/RecoveryCases/RecoveryCasesResubmit/RecoveryCasesResubmit.js.map +1 -1
- package/dist/components/Payroll/RecoveryCases/index.d.ts +0 -1
- package/dist/components/Payroll/RecoveryCases/recoveryCasesStateMachine.d.ts +5 -0
- package/dist/components/Payroll/RecoveryCases/recoveryCasesStateMachine.js.map +1 -1
- package/dist/components/Payroll/RecoveryCases/useRecoveryCaseErrorCode.d.ts +5 -0
- package/dist/components/Payroll/RecoveryCases/useRecoveryCaseErrorCode.js.map +1 -1
- package/dist/components/Payroll/Transition/TransitionFlow.d.ts +21 -0
- package/dist/components/Payroll/Transition/TransitionFlow.js.map +1 -1
- package/dist/components/Payroll/Transition/TransitionFlowComponents.d.ts +23 -0
- package/dist/components/Payroll/Transition/TransitionFlowComponents.js.map +1 -1
- package/dist/components/Payroll/Transition/transitionStateMachine.d.ts +2 -0
- package/dist/components/Payroll/Transition/transitionStateMachine.js.map +1 -1
- package/dist/components/Payroll/TransitionCreation/TransitionCreation.d.ts +20 -0
- package/dist/components/Payroll/TransitionCreation/TransitionCreation.js.map +1 -1
- package/dist/components/Payroll/TransitionCreation/TransitionCreationPresentation.d.ts +7 -0
- package/dist/components/Payroll/TransitionCreation/TransitionCreationPresentation.js +10 -10
- package/dist/components/Payroll/TransitionCreation/TransitionCreationPresentation.js.map +1 -1
- package/dist/components/Payroll/TransitionCreation/TransitionCreationTypes.d.ts +27 -0
- package/dist/components/Payroll/TransitionCreation/TransitionCreationTypes.js.map +1 -1
- package/dist/components/Payroll/TransitionPayrollAlert/TransitionPayrollAlert.d.ts +1 -0
- package/dist/components/Payroll/TransitionPayrollAlert/TransitionPayrollAlert.js.map +1 -1
- package/dist/components/Payroll/TransitionPayrollAlert/TransitionPayrollAlertPresentation.d.ts +5 -0
- package/dist/components/Payroll/TransitionPayrollAlert/TransitionPayrollAlertPresentation.js.map +1 -1
- package/dist/components/Payroll/helpers.d.ts +157 -26
- package/dist/components/Payroll/helpers.js +0 -1
- package/dist/components/Payroll/helpers.js.map +1 -1
- package/dist/components/Payroll/index.d.ts +11 -2
- package/dist/components/Payroll/payrollTypes.d.ts +24 -0
- package/dist/components/Payroll/payrollTypes.js.map +1 -1
- package/dist/components/Payroll/usePreparedPayrollData.d.ts +12 -0
- package/dist/components/Payroll/usePreparedPayrollData.js +34 -22
- package/dist/components/Payroll/usePreparedPayrollData.js.map +1 -1
- package/dist/components/Payroll/useUnprocessedTransitionPayPeriods.d.ts +7 -0
- package/dist/components/Payroll/useUnprocessedTransitionPayPeriods.js.map +1 -1
- package/dist/components/TimeOff/AddEmployeesHoliday/AddEmployeesHoliday.d.ts +19 -0
- package/dist/components/TimeOff/AddEmployeesHoliday/AddEmployeesHoliday.js +3 -2
- package/dist/components/TimeOff/AddEmployeesHoliday/AddEmployeesHoliday.js.map +1 -1
- package/dist/components/TimeOff/AddEmployeesToPolicy/AddEmployeesToPolicy.d.ts +44 -0
- package/dist/components/TimeOff/AddEmployeesToPolicy/AddEmployeesToPolicy.js +3 -2
- package/dist/components/TimeOff/AddEmployeesToPolicy/AddEmployeesToPolicy.js.map +1 -1
- package/dist/components/TimeOff/HolidayPolicyDetail/HolidayPolicyDetail.d.ts +4 -0
- package/dist/components/TimeOff/HolidayPolicyDetail/HolidayPolicyDetail.js.map +1 -1
- package/dist/components/TimeOff/HolidayPolicyDetail/HolidayPolicyDetailPresentation.d.ts +1 -0
- package/dist/components/TimeOff/HolidayPolicyDetail/HolidayPolicyDetailPresentation.js.map +1 -1
- package/dist/components/TimeOff/HolidayPolicyDetail/HolidayPolicyDetailTypes.d.ts +28 -2
- package/dist/components/TimeOff/HolidayPolicyDetail/index.d.ts +0 -2
- package/dist/components/TimeOff/HolidaySelectionForm/HolidaySelectionForm.d.ts +26 -0
- package/dist/components/TimeOff/HolidaySelectionForm/HolidaySelectionForm.js.map +1 -1
- package/dist/components/TimeOff/HolidaySelectionForm/HolidaySelectionFormPresentation.d.ts +1 -0
- package/dist/components/TimeOff/HolidaySelectionForm/HolidaySelectionFormPresentation.js.map +1 -1
- package/dist/components/TimeOff/HolidaySelectionForm/HolidaySelectionFormTypes.d.ts +10 -0
- package/dist/components/TimeOff/PolicyList/PolicyList.d.ts +25 -0
- package/dist/components/TimeOff/PolicyList/PolicyList.js +3 -2
- package/dist/components/TimeOff/PolicyList/PolicyList.js.map +1 -1
- package/dist/components/TimeOff/PolicyList/PolicyListPresentation.d.ts +1 -0
- package/dist/components/TimeOff/PolicyList/PolicyListPresentation.js.map +1 -1
- package/dist/components/TimeOff/PolicyList/PolicyListTypes.d.ts +17 -0
- package/dist/components/TimeOff/PolicySettings/PolicySettings.d.ts +22 -0
- package/dist/components/TimeOff/PolicySettings/PolicySettings.js.map +1 -1
- package/dist/components/TimeOff/PolicySettings/PolicySettingsPresentation.d.ts +14 -0
- package/dist/components/TimeOff/PolicySettings/PolicySettingsPresentation.js.map +1 -1
- package/dist/components/TimeOff/PolicySettings/PolicySettingsTypes.d.ts +31 -0
- package/dist/components/TimeOff/PolicyTypeSelector/PolicyTypeSelector.d.ts +23 -0
- package/dist/components/TimeOff/PolicyTypeSelector/PolicyTypeSelector.js.map +1 -1
- package/dist/components/TimeOff/PolicyTypeSelector/PolicyTypeSelectorPresentation.d.ts +1 -0
- package/dist/components/TimeOff/PolicyTypeSelector/PolicyTypeSelectorPresentation.js.map +1 -1
- package/dist/components/TimeOff/PolicyTypeSelector/PolicyTypeSelectorTypes.d.ts +10 -0
- package/dist/components/TimeOff/TimeOffFlow/TimeOffFlow.d.ts +42 -0
- package/dist/components/TimeOff/TimeOffFlow/TimeOffFlow.js.map +1 -1
- package/dist/components/TimeOff/TimeOffFlow/TimeOffFlowComponents.d.ts +26 -0
- package/dist/components/TimeOff/TimeOffFlow/TimeOffFlowComponents.js.map +1 -1
- package/dist/components/TimeOff/TimeOffFlow/timeOffPolicyTypes.d.ts +15 -2
- package/dist/components/TimeOff/TimeOffFlow/timeOffPolicyTypes.js +1 -6
- package/dist/components/TimeOff/TimeOffFlow/timeOffPolicyTypes.js.map +1 -1
- package/dist/components/TimeOff/TimeOffFlow/timeOffStateMachine.d.ts +1 -0
- package/dist/components/TimeOff/TimeOffFlow/timeOffStateMachine.js.map +1 -1
- package/dist/components/TimeOff/TimeOffManagement/PolicyConfigurationForm/PolicyConfigurationForm.d.ts +29 -0
- package/dist/components/TimeOff/TimeOffManagement/PolicyConfigurationForm/PolicyConfigurationForm.js.map +1 -1
- package/dist/components/TimeOff/TimeOffManagement/PolicyConfigurationForm/PolicyConfigurationFormPresentation.d.ts +1 -0
- package/dist/components/TimeOff/TimeOffManagement/PolicyConfigurationForm/PolicyConfigurationFormPresentation.js.map +1 -1
- package/dist/components/TimeOff/TimeOffManagement/PolicyConfigurationForm/PolicyConfigurationFormTypes.d.ts +59 -1
- package/dist/components/TimeOff/TimeOffManagement/PolicyConfigurationForm/index.d.ts +0 -3
- package/dist/components/TimeOff/TimeOffManagement/SelectEmployees/SelectEmployeesHoliday.d.ts +1 -0
- package/dist/components/TimeOff/TimeOffManagement/SelectEmployees/SelectEmployeesHoliday.js.map +1 -1
- package/dist/components/TimeOff/TimeOffManagement/SelectEmployees/SelectEmployeesPresentation.d.ts +1 -0
- package/dist/components/TimeOff/TimeOffManagement/SelectEmployees/SelectEmployeesPresentation.js +43 -42
- package/dist/components/TimeOff/TimeOffManagement/SelectEmployees/SelectEmployeesPresentation.js.map +1 -1
- package/dist/components/TimeOff/TimeOffManagement/SelectEmployees/SelectEmployeesPresentationTypes.d.ts +2 -0
- package/dist/components/TimeOff/TimeOffManagement/SelectEmployees/SelectEmployeesTimeOff.d.ts +1 -0
- package/dist/components/TimeOff/TimeOffManagement/SelectEmployees/SelectEmployeesTimeOff.js.map +1 -1
- package/dist/components/TimeOff/TimeOffManagement/SelectEmployees/useSelectEmployeesData.d.ts +3 -0
- package/dist/components/TimeOff/TimeOffManagement/SelectEmployees/useSelectEmployeesData.js.map +1 -1
- package/dist/components/TimeOff/TimeOffPolicyDetail/EditEmployeeBalanceModal.d.ts +9 -0
- package/dist/components/TimeOff/TimeOffPolicyDetail/EditEmployeeBalanceModal.js.map +1 -1
- package/dist/components/TimeOff/TimeOffPolicyDetail/TimeOffPolicyDetail.d.ts +25 -0
- package/dist/components/TimeOff/TimeOffPolicyDetail/TimeOffPolicyDetail.js.map +1 -1
- package/dist/components/TimeOff/TimeOffPolicyDetail/TimeOffPolicyDetailPresentation.d.ts +14 -0
- package/dist/components/TimeOff/TimeOffPolicyDetail/TimeOffPolicyDetailPresentation.js.map +1 -1
- package/dist/components/TimeOff/TimeOffPolicyDetail/TimeOffPolicyDetailTypes.d.ts +97 -6
- package/dist/components/TimeOff/TimeOffPolicyDetail/index.d.ts +1 -5
- package/dist/components/TimeOff/ViewHolidayEmployees/ViewHolidayEmployees.d.ts +23 -0
- package/dist/components/TimeOff/ViewHolidayEmployees/ViewHolidayEmployees.js.map +1 -1
- package/dist/components/TimeOff/ViewHolidayPolicyDetails/ViewHolidayPolicyDetails.d.ts +22 -0
- package/dist/components/TimeOff/ViewHolidayPolicyDetails/ViewHolidayPolicyDetails.js.map +1 -1
- package/dist/components/TimeOff/ViewHolidaySchedule/ViewHolidaySchedule.d.ts +22 -0
- package/dist/components/TimeOff/ViewHolidaySchedule/ViewHolidaySchedule.js.map +1 -1
- package/dist/components/TimeOff/index.d.ts +8 -2
- package/dist/components/TimeOff/shared/EmployeeTable/EmployeeTable.d.ts +1 -0
- package/dist/components/TimeOff/shared/EmployeeTable/EmployeeTable.js +48 -49
- package/dist/components/TimeOff/shared/EmployeeTable/EmployeeTable.js.map +1 -1
- package/dist/components/TimeOff/shared/EmployeeTable/EmployeeTableTypes.d.ts +66 -0
- package/dist/components/TimeOff/shared/PolicyDetailLayout/PolicyDetailLayout.d.ts +1 -0
- package/dist/components/TimeOff/shared/PolicyDetailLayout/PolicyDetailLayout.js.map +1 -1
- package/dist/components/TimeOff/shared/PolicyDetailLayout/PolicyDetailLayoutTypes.d.ts +28 -0
- package/dist/components/TimeOff/shared/PolicyDetailLayout/index.d.ts +0 -1
- package/dist/components/TimeOff/shared/holidayHelpers.d.ts +5 -0
- package/dist/components/TimeOff/shared/holidayHelpers.js.map +1 -1
- package/dist/contexts/ComponentAdapter/componentAdapterTypes.d.ts +4 -4
- package/dist/contexts/ComponentAdapter/createComponentsWithDefaults.d.ts +39 -39
- package/dist/contexts/ComponentAdapter/createComponentsWithDefaults.js.map +1 -1
- package/dist/contexts/ComponentAdapter/useComponentContext.d.ts +42 -42
- package/dist/contexts/ComponentAdapter/useComponentContext.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +206 -205
- package/dist/partner-hook-utils/form/fields/DatePickerHookField.js +1 -1
- package/dist/shared/constants.d.ts +12 -1
- package/dist/shared/constants.js.map +1 -1
- package/docs/reference/endpoint-inventory.json +55 -0
- package/package.json +6 -5
- package/dist/assets/icons/feature-icon-check.svg.js +0 -10
- package/dist/assets/icons/feature-icon-check.svg.js.map +0 -1
- package/dist/components/Payroll/PayrollEditEmployee/index.d.ts +0 -4
- package/dist/components/Payroll/PayrollFlow/index.d.ts +0 -3
- package/dist/components/TimeOff/TimeOffFlow/index.d.ts +0 -3
- package/dist/components/TimeOff/shared/EmployeeTable/index.d.ts +0 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PolicyConfigurationFormPresentation.js","sources":["../../../../../src/components/TimeOff/TimeOffManagement/PolicyConfigurationForm/PolicyConfigurationFormPresentation.tsx"],"sourcesContent":["import { useCallback, useEffect, useId, useMemo } from 'react'\nimport { FormProvider, useForm, useWatch } from 'react-hook-form'\nimport { useTranslation } from 'react-i18next'\nimport type {\n AccrualMethod,\n AccrualMethodFixed,\n PolicyConfigurationFormData,\n PolicyConfigurationFormPresentationProps,\n ResetDateType,\n} from './PolicyConfigurationFormTypes'\nimport styles from './PolicyConfigurationForm.module.scss'\nimport {\n Flex,\n ActionsLayout,\n RadioGroupField,\n NumberInputField,\n CheckboxField,\n SelectField,\n TextInputField,\n} from '@/components/Common'\nimport { Form as HtmlForm } from '@/components/Common/Form'\nimport { useComponentContext } from '@/contexts/ComponentAdapter/useComponentContext'\nimport { useLocale } from '@/contexts/LocaleProvider/useLocale'\nimport { useI18n } from '@/i18n'\nimport { getDaysInMonth } from '@/helpers/dateFormatting'\n\nexport function PolicyConfigurationFormPresentation({\n onContinue,\n onCancel,\n defaultValues,\n editingPolicyName,\n isPending = false,\n lockedAccrualCategory,\n}: PolicyConfigurationFormPresentationProps) {\n useI18n('Company.TimeOff.CreateTimeOffPolicy')\n const { t } = useTranslation('Company.TimeOff.CreateTimeOffPolicy')\n const { Heading, Text, Button } = useComponentContext()\n const { locale } = useLocale()\n const headingId = useId()\n\n const monthOptions = useMemo(() => {\n const formatter = new Intl.DateTimeFormat(locale, { month: 'long' })\n return Array.from({ length: 12 }, (_, i) => ({\n value: i + 1,\n label: formatter.format(new Date(2024, i)),\n }))\n }, [locale])\n\n const formMethods = useForm<PolicyConfigurationFormData>({\n defaultValues: {\n name: '',\n resetMonth: 1,\n resetDay: 1,\n ...defaultValues,\n },\n })\n\n const { control, setValue, getValues } = formMethods\n const name = useWatch({ control, name: 'name' })\n const accrualMethod = useWatch({ control, name: 'accrualMethod' })\n const resetDateType = useWatch({ control, name: 'resetDateType' })\n const resetMonth = useWatch({ control, name: 'resetMonth' })\n const isContinueDisabled = !name.trim() || !accrualMethod\n\n const dayOptions = useMemo(() => {\n const days = getDaysInMonth(resetMonth ?? 1)\n return Array.from({ length: days }, (_, i) => ({\n value: i + 1,\n label: String(i + 1),\n }))\n }, [resetMonth])\n\n useEffect(() => {\n const maxDay = getDaysInMonth(resetMonth ?? 1)\n const currentDay = getValues('resetDay')\n if (currentDay != null && currentDay > maxDay) {\n setValue('resetDay', maxDay)\n }\n }, [resetMonth, getValues, setValue])\n\n useEffect(() => {\n if (accrualMethod === 'unlimited') {\n return\n }\n if (accrualMethod !== 'per_hour_paid') {\n setValue('accrualRateUnit', undefined)\n setValue('includeOvertime', undefined)\n setValue('allPaidHours', undefined)\n }\n if (accrualMethod !== 'per_calendar_year') {\n setValue('accrualMethodFixed', undefined)\n }\n }, [accrualMethod, setValue])\n\n const handleResetDateTypeChange = useCallback(\n (value: ResetDateType) => {\n if (value === 'per_anniversary_year') {\n setValue('resetMonth', 1)\n setValue('resetDay', 1)\n }\n },\n [setValue],\n )\n\n const accrualMethodOptions = useMemo(() => {\n const allOptions = [\n {\n value: 'per_hour_paid' as AccrualMethod,\n label: t('policyDetails.perHourPaidLabel'),\n description: t('policyDetails.perHourPaidHint'),\n },\n {\n value: 'per_calendar_year' as AccrualMethod,\n label: t('policyDetails.perYearLabel'),\n description: t('policyDetails.perYearHint'),\n },\n {\n value: 'unlimited' as AccrualMethod,\n label: t('policyDetails.unlimitedLabel'),\n description: t('policyDetails.unlimitedHint'),\n },\n ]\n if (lockedAccrualCategory === 'unlimited') {\n return allOptions.filter(option => option.value === 'unlimited')\n }\n if (lockedAccrualCategory === 'accrual_based') {\n return allOptions.filter(option => option.value !== 'unlimited')\n }\n return allOptions\n }, [t, lockedAccrualCategory])\n\n const accrualMethodFixedOptions = useMemo(\n () => [\n {\n value: 'per_pay_period' as AccrualMethodFixed,\n label: t('policyDetails.perPayPeriodLabel'),\n description: t('policyDetails.perPayPeriodHint'),\n },\n {\n value: 'all_at_once' as AccrualMethodFixed,\n label: t('policyDetails.allAtOnceLabel'),\n description: t('policyDetails.allAtOnceHint'),\n },\n ],\n [t],\n )\n\n const resetDateTypeOptions = useMemo(\n () => [\n {\n value: 'per_anniversary_year' as ResetDateType,\n label: t('policyDetails.perAnniversaryYearLabel'),\n },\n {\n value: 'per_calendar_year' as ResetDateType,\n label: t('policyDetails.perCalendarYearLabel'),\n },\n ],\n [t],\n )\n\n const handleSubmit = (data: PolicyConfigurationFormData) => {\n onContinue(data)\n }\n\n const isHourlyMethod = accrualMethod === 'per_hour_paid'\n const isFixedMethod = accrualMethod === 'per_calendar_year'\n const showResetDate = isHourlyMethod || isFixedMethod\n const showCustomDateFields = resetDateType === 'per_calendar_year'\n\n return (\n <FormProvider {...formMethods}>\n <HtmlForm aria-labelledby={headingId} onSubmit={formMethods.handleSubmit(handleSubmit)}>\n <Flex flexDirection=\"column\" gap={32}>\n <Heading as=\"h2\" id={headingId}>\n {editingPolicyName\n ? t('policyDetails.editTitle', { name: editingPolicyName })\n : t('policyDetails.createTitle')}\n </Heading>\n\n <Flex flexDirection=\"column\" gap={20}>\n <TextInputField\n name=\"name\"\n label={t('policyDetails.policyNameLabel')}\n isRequired\n errorMessage={t('policyDetails.validations.policyName')}\n />\n\n {accrualMethodOptions.length === 1 ? (\n <Flex flexDirection=\"column\" gap={4}>\n <Text weight=\"medium\">{t('policyDetails.accrualMethodLabel')}</Text>\n <Text>{accrualMethodOptions[0]!.label}</Text>\n </Flex>\n ) : (\n <RadioGroupField<AccrualMethod>\n name=\"accrualMethod\"\n label={t('policyDetails.accrualMethodLabel')}\n description={t('policyDetails.accrualMethodHint')}\n options={accrualMethodOptions}\n isRequired\n errorMessage={t('policyDetails.validations.accrualMethod')}\n />\n )}\n\n {isHourlyMethod && (\n <>\n <hr className={styles.divider} />\n\n <NumberInputField\n className={styles.narrowInput}\n name=\"accrualRate\"\n label={t('policyDetails.employeesWillAccrueLabel')}\n adornmentEnd={t('policyDetails.hoursUnit')}\n isRequired\n errorMessage={t('policyDetails.validations.accrualRate')}\n min={0}\n />\n\n <NumberInputField\n className={styles.narrowInput}\n name=\"accrualRateUnit\"\n label={t('policyDetails.forEveryLabel')}\n adornmentEnd={t('policyDetails.hoursWorkedUnit')}\n isRequired\n errorMessage={t('policyDetails.validations.accrualRateUnit')}\n min={1}\n />\n\n <Flex flexDirection=\"column\" gap={8}>\n <Text>{t('policyDetails.additionalOptionsLabel')}</Text>\n <CheckboxField\n name=\"includeOvertime\"\n label={t('policyDetails.includeOvertimeLabel')}\n />\n <CheckboxField name=\"allPaidHours\" label={t('policyDetails.allPaidHoursLabel')} />\n </Flex>\n </>\n )}\n\n {isFixedMethod && (\n <>\n <hr className={styles.divider} />\n\n <NumberInputField\n className={styles.narrowInput}\n name=\"accrualRate\"\n label={t('policyDetails.fixedAccrualRateLabel')}\n description={t('policyDetails.fixedAccrualRateHint')}\n adornmentEnd={t('policyDetails.hoursUnit')}\n isRequired\n errorMessage={t('policyDetails.validations.accrualRate')}\n min={0}\n />\n\n <RadioGroupField<AccrualMethodFixed>\n name=\"accrualMethodFixed\"\n label={t('policyDetails.accrualMethodFixed')}\n description={t('policyDetails.accrualMethodFixedHint')}\n options={accrualMethodFixedOptions}\n isRequired\n errorMessage={t('policyDetails.validations.accrualMethodFixed')}\n />\n </>\n )}\n\n {showResetDate && (\n <>\n <hr className={styles.divider} />\n\n <RadioGroupField<ResetDateType>\n name=\"resetDateType\"\n label={t('policyDetails.policyResetDateType')}\n description={t('policyDetails.policyResetDateTypeHint')}\n options={resetDateTypeOptions}\n isRequired={!isHourlyMethod}\n errorMessage={t('policyDetails.validations.resetDateType')}\n onChange={handleResetDateTypeChange}\n />\n\n {showCustomDateFields && (\n <Flex gap={8}>\n <SelectField<number>\n className={styles.dateSelect}\n name=\"resetMonth\"\n label={t('policyDetails.monthLabel')}\n options={monthOptions}\n />\n <SelectField<number>\n className={styles.dateSelect}\n name=\"resetDay\"\n label={t('policyDetails.dayLabel')}\n options={dayOptions}\n />\n </Flex>\n )}\n </>\n )}\n\n <ActionsLayout>\n <Button variant=\"secondary\" onClick={onCancel} isDisabled={isPending}>\n {t('cancelCta')}\n </Button>\n <Button\n variant=\"primary\"\n type=\"submit\"\n isLoading={isPending}\n isDisabled={isContinueDisabled}\n >\n {t('continueCta')}\n </Button>\n </ActionsLayout>\n </Flex>\n </Flex>\n </HtmlForm>\n </FormProvider>\n )\n}\n"],"names":["PolicyConfigurationFormPresentation","onContinue","onCancel","defaultValues","editingPolicyName","isPending","lockedAccrualCategory","useI18n","t","useTranslation","Heading","Text","Button","useComponentContext","locale","useLocale","headingId","useId","monthOptions","useMemo","formatter","_","i","formMethods","useForm","control","setValue","getValues","name","useWatch","accrualMethod","resetDateType","resetMonth","isContinueDisabled","dayOptions","days","getDaysInMonth","useEffect","maxDay","currentDay","handleResetDateTypeChange","useCallback","value","accrualMethodOptions","allOptions","option","accrualMethodFixedOptions","resetDateTypeOptions","handleSubmit","data","isHourlyMethod","isFixedMethod","showResetDate","showCustomDateFields","FormProvider","jsx","HtmlForm","jsxs","Flex","TextInputField","RadioGroupField","Fragment","styles","NumberInputField","CheckboxField","SelectField","ActionsLayout"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"PolicyConfigurationFormPresentation.js","sources":["../../../../../src/components/TimeOff/TimeOffManagement/PolicyConfigurationForm/PolicyConfigurationFormPresentation.tsx"],"sourcesContent":["import { useCallback, useEffect, useId, useMemo } from 'react'\nimport { FormProvider, useForm, useWatch } from 'react-hook-form'\nimport { useTranslation } from 'react-i18next'\nimport type {\n AccrualMethod,\n AccrualMethodFixed,\n PolicyConfigurationFormData,\n PolicyConfigurationFormPresentationProps,\n ResetDateType,\n} from './PolicyConfigurationFormTypes'\nimport styles from './PolicyConfigurationForm.module.scss'\nimport {\n Flex,\n ActionsLayout,\n RadioGroupField,\n NumberInputField,\n CheckboxField,\n SelectField,\n TextInputField,\n} from '@/components/Common'\nimport { Form as HtmlForm } from '@/components/Common/Form'\nimport { useComponentContext } from '@/contexts/ComponentAdapter/useComponentContext'\nimport { useLocale } from '@/contexts/LocaleProvider/useLocale'\nimport { useI18n } from '@/i18n'\nimport { getDaysInMonth } from '@/helpers/dateFormatting'\n\n/** @internal */\nexport function PolicyConfigurationFormPresentation({\n onContinue,\n onCancel,\n defaultValues,\n editingPolicyName,\n isPending = false,\n lockedAccrualCategory,\n}: PolicyConfigurationFormPresentationProps) {\n useI18n('Company.TimeOff.CreateTimeOffPolicy')\n const { t } = useTranslation('Company.TimeOff.CreateTimeOffPolicy')\n const { Heading, Text, Button } = useComponentContext()\n const { locale } = useLocale()\n const headingId = useId()\n\n const monthOptions = useMemo(() => {\n const formatter = new Intl.DateTimeFormat(locale, { month: 'long' })\n return Array.from({ length: 12 }, (_, i) => ({\n value: i + 1,\n label: formatter.format(new Date(2024, i)),\n }))\n }, [locale])\n\n const formMethods = useForm<PolicyConfigurationFormData>({\n defaultValues: {\n name: '',\n resetMonth: 1,\n resetDay: 1,\n ...defaultValues,\n },\n })\n\n const { control, setValue, getValues } = formMethods\n const name = useWatch({ control, name: 'name' })\n const accrualMethod = useWatch({ control, name: 'accrualMethod' })\n const resetDateType = useWatch({ control, name: 'resetDateType' })\n const resetMonth = useWatch({ control, name: 'resetMonth' })\n const isContinueDisabled = !name.trim() || !accrualMethod\n\n const dayOptions = useMemo(() => {\n const days = getDaysInMonth(resetMonth ?? 1)\n return Array.from({ length: days }, (_, i) => ({\n value: i + 1,\n label: String(i + 1),\n }))\n }, [resetMonth])\n\n useEffect(() => {\n const maxDay = getDaysInMonth(resetMonth ?? 1)\n const currentDay = getValues('resetDay')\n if (currentDay != null && currentDay > maxDay) {\n setValue('resetDay', maxDay)\n }\n }, [resetMonth, getValues, setValue])\n\n useEffect(() => {\n if (accrualMethod === 'unlimited') {\n return\n }\n if (accrualMethod !== 'per_hour_paid') {\n setValue('accrualRateUnit', undefined)\n setValue('includeOvertime', undefined)\n setValue('allPaidHours', undefined)\n }\n if (accrualMethod !== 'per_calendar_year') {\n setValue('accrualMethodFixed', undefined)\n }\n }, [accrualMethod, setValue])\n\n const handleResetDateTypeChange = useCallback(\n (value: ResetDateType) => {\n if (value === 'per_anniversary_year') {\n setValue('resetMonth', 1)\n setValue('resetDay', 1)\n }\n },\n [setValue],\n )\n\n const accrualMethodOptions = useMemo(() => {\n const allOptions = [\n {\n value: 'per_hour_paid' as AccrualMethod,\n label: t('policyDetails.perHourPaidLabel'),\n description: t('policyDetails.perHourPaidHint'),\n },\n {\n value: 'per_calendar_year' as AccrualMethod,\n label: t('policyDetails.perYearLabel'),\n description: t('policyDetails.perYearHint'),\n },\n {\n value: 'unlimited' as AccrualMethod,\n label: t('policyDetails.unlimitedLabel'),\n description: t('policyDetails.unlimitedHint'),\n },\n ]\n if (lockedAccrualCategory === 'unlimited') {\n return allOptions.filter(option => option.value === 'unlimited')\n }\n if (lockedAccrualCategory === 'accrual_based') {\n return allOptions.filter(option => option.value !== 'unlimited')\n }\n return allOptions\n }, [t, lockedAccrualCategory])\n\n const accrualMethodFixedOptions = useMemo(\n () => [\n {\n value: 'per_pay_period' as AccrualMethodFixed,\n label: t('policyDetails.perPayPeriodLabel'),\n description: t('policyDetails.perPayPeriodHint'),\n },\n {\n value: 'all_at_once' as AccrualMethodFixed,\n label: t('policyDetails.allAtOnceLabel'),\n description: t('policyDetails.allAtOnceHint'),\n },\n ],\n [t],\n )\n\n const resetDateTypeOptions = useMemo(\n () => [\n {\n value: 'per_anniversary_year' as ResetDateType,\n label: t('policyDetails.perAnniversaryYearLabel'),\n },\n {\n value: 'per_calendar_year' as ResetDateType,\n label: t('policyDetails.perCalendarYearLabel'),\n },\n ],\n [t],\n )\n\n const handleSubmit = (data: PolicyConfigurationFormData) => {\n onContinue(data)\n }\n\n const isHourlyMethod = accrualMethod === 'per_hour_paid'\n const isFixedMethod = accrualMethod === 'per_calendar_year'\n const showResetDate = isHourlyMethod || isFixedMethod\n const showCustomDateFields = resetDateType === 'per_calendar_year'\n\n return (\n <FormProvider {...formMethods}>\n <HtmlForm aria-labelledby={headingId} onSubmit={formMethods.handleSubmit(handleSubmit)}>\n <Flex flexDirection=\"column\" gap={32}>\n <Heading as=\"h2\" id={headingId}>\n {editingPolicyName\n ? t('policyDetails.editTitle', { name: editingPolicyName })\n : t('policyDetails.createTitle')}\n </Heading>\n\n <Flex flexDirection=\"column\" gap={20}>\n <TextInputField\n name=\"name\"\n label={t('policyDetails.policyNameLabel')}\n isRequired\n errorMessage={t('policyDetails.validations.policyName')}\n />\n\n {accrualMethodOptions.length === 1 ? (\n <Flex flexDirection=\"column\" gap={4}>\n <Text weight=\"medium\">{t('policyDetails.accrualMethodLabel')}</Text>\n <Text>{accrualMethodOptions[0]!.label}</Text>\n </Flex>\n ) : (\n <RadioGroupField<AccrualMethod>\n name=\"accrualMethod\"\n label={t('policyDetails.accrualMethodLabel')}\n description={t('policyDetails.accrualMethodHint')}\n options={accrualMethodOptions}\n isRequired\n errorMessage={t('policyDetails.validations.accrualMethod')}\n />\n )}\n\n {isHourlyMethod && (\n <>\n <hr className={styles.divider} />\n\n <NumberInputField\n className={styles.narrowInput}\n name=\"accrualRate\"\n label={t('policyDetails.employeesWillAccrueLabel')}\n adornmentEnd={t('policyDetails.hoursUnit')}\n isRequired\n errorMessage={t('policyDetails.validations.accrualRate')}\n min={0}\n />\n\n <NumberInputField\n className={styles.narrowInput}\n name=\"accrualRateUnit\"\n label={t('policyDetails.forEveryLabel')}\n adornmentEnd={t('policyDetails.hoursWorkedUnit')}\n isRequired\n errorMessage={t('policyDetails.validations.accrualRateUnit')}\n min={1}\n />\n\n <Flex flexDirection=\"column\" gap={8}>\n <Text>{t('policyDetails.additionalOptionsLabel')}</Text>\n <CheckboxField\n name=\"includeOvertime\"\n label={t('policyDetails.includeOvertimeLabel')}\n />\n <CheckboxField name=\"allPaidHours\" label={t('policyDetails.allPaidHoursLabel')} />\n </Flex>\n </>\n )}\n\n {isFixedMethod && (\n <>\n <hr className={styles.divider} />\n\n <NumberInputField\n className={styles.narrowInput}\n name=\"accrualRate\"\n label={t('policyDetails.fixedAccrualRateLabel')}\n description={t('policyDetails.fixedAccrualRateHint')}\n adornmentEnd={t('policyDetails.hoursUnit')}\n isRequired\n errorMessage={t('policyDetails.validations.accrualRate')}\n min={0}\n />\n\n <RadioGroupField<AccrualMethodFixed>\n name=\"accrualMethodFixed\"\n label={t('policyDetails.accrualMethodFixed')}\n description={t('policyDetails.accrualMethodFixedHint')}\n options={accrualMethodFixedOptions}\n isRequired\n errorMessage={t('policyDetails.validations.accrualMethodFixed')}\n />\n </>\n )}\n\n {showResetDate && (\n <>\n <hr className={styles.divider} />\n\n <RadioGroupField<ResetDateType>\n name=\"resetDateType\"\n label={t('policyDetails.policyResetDateType')}\n description={t('policyDetails.policyResetDateTypeHint')}\n options={resetDateTypeOptions}\n isRequired={!isHourlyMethod}\n errorMessage={t('policyDetails.validations.resetDateType')}\n onChange={handleResetDateTypeChange}\n />\n\n {showCustomDateFields && (\n <Flex gap={8}>\n <SelectField<number>\n className={styles.dateSelect}\n name=\"resetMonth\"\n label={t('policyDetails.monthLabel')}\n options={monthOptions}\n />\n <SelectField<number>\n className={styles.dateSelect}\n name=\"resetDay\"\n label={t('policyDetails.dayLabel')}\n options={dayOptions}\n />\n </Flex>\n )}\n </>\n )}\n\n <ActionsLayout>\n <Button variant=\"secondary\" onClick={onCancel} isDisabled={isPending}>\n {t('cancelCta')}\n </Button>\n <Button\n variant=\"primary\"\n type=\"submit\"\n isLoading={isPending}\n isDisabled={isContinueDisabled}\n >\n {t('continueCta')}\n </Button>\n </ActionsLayout>\n </Flex>\n </Flex>\n </HtmlForm>\n </FormProvider>\n )\n}\n"],"names":["PolicyConfigurationFormPresentation","onContinue","onCancel","defaultValues","editingPolicyName","isPending","lockedAccrualCategory","useI18n","t","useTranslation","Heading","Text","Button","useComponentContext","locale","useLocale","headingId","useId","monthOptions","useMemo","formatter","_","i","formMethods","useForm","control","setValue","getValues","name","useWatch","accrualMethod","resetDateType","resetMonth","isContinueDisabled","dayOptions","days","getDaysInMonth","useEffect","maxDay","currentDay","handleResetDateTypeChange","useCallback","value","accrualMethodOptions","allOptions","option","accrualMethodFixedOptions","resetDateTypeOptions","handleSubmit","data","isHourlyMethod","isFixedMethod","showResetDate","showCustomDateFields","FormProvider","jsx","HtmlForm","jsxs","Flex","TextInputField","RadioGroupField","Fragment","styles","NumberInputField","CheckboxField","SelectField","ActionsLayout"],"mappings":"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"}
|
|
@@ -1,24 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Top-level accrual method selected on the policy configuration form.
|
|
3
|
+
*
|
|
4
|
+
* @remarks
|
|
5
|
+
* `per_hour_paid` covers all hourly accrual variants — the `allPaidHours` and
|
|
6
|
+
* `includeOvertime` toggles on {@link PolicyConfigurationFormData} narrow it to
|
|
7
|
+
* a specific API accrual method on submit.
|
|
8
|
+
*
|
|
9
|
+
* @public
|
|
10
|
+
*/
|
|
1
11
|
export type AccrualMethod = 'per_hour_paid' | 'per_calendar_year' | 'unlimited';
|
|
12
|
+
/**
|
|
13
|
+
* Sub-method for fixed (per-calendar-year) accrual — whether hours are granted
|
|
14
|
+
* at the start of the year or spread evenly across pay periods.
|
|
15
|
+
*
|
|
16
|
+
* @public
|
|
17
|
+
*/
|
|
2
18
|
export type AccrualMethodFixed = 'per_pay_period' | 'all_at_once';
|
|
19
|
+
/**
|
|
20
|
+
* When a policy's balance resets — on each employee's hire anniversary or on
|
|
21
|
+
* a fixed calendar month/day shared across all employees.
|
|
22
|
+
*
|
|
23
|
+
* @public
|
|
24
|
+
*/
|
|
3
25
|
export type ResetDateType = 'per_anniversary_year' | 'per_calendar_year';
|
|
26
|
+
/**
|
|
27
|
+
* Values collected by {@link PolicyConfigurationForm} for a sick or vacation
|
|
28
|
+
* time off policy.
|
|
29
|
+
*
|
|
30
|
+
* @remarks
|
|
31
|
+
* Fields beyond `name` and `accrualMethod` are conditionally relevant based on
|
|
32
|
+
* the selected `accrualMethod`:
|
|
33
|
+
*
|
|
34
|
+
* - `unlimited` — no other fields apply.
|
|
35
|
+
* - `per_hour_paid` — `accrualRate`, `accrualRateUnit`, `includeOvertime`, and
|
|
36
|
+
* `allPaidHours` configure the hourly accrual variant.
|
|
37
|
+
* - `per_calendar_year` — `accrualRate` and `accrualMethodFixed` configure how
|
|
38
|
+
* hours are granted; `resetDateType` plus `resetMonth`/`resetDay` configure
|
|
39
|
+
* when balances reset.
|
|
40
|
+
*
|
|
41
|
+
* @public
|
|
42
|
+
*/
|
|
4
43
|
export interface PolicyConfigurationFormData {
|
|
44
|
+
/** Display name of the policy. */
|
|
5
45
|
name: string;
|
|
46
|
+
/** Top-level accrual strategy selected by the user. */
|
|
6
47
|
accrualMethod: AccrualMethod;
|
|
48
|
+
/** Hours accrued per `accrualRateUnit` (hourly) or per year (fixed). */
|
|
7
49
|
accrualRate?: number;
|
|
50
|
+
/** Hours worked needed to earn `accrualRate` hours of time off. Hourly only. */
|
|
8
51
|
accrualRateUnit?: number;
|
|
52
|
+
/** Whether overtime hours count toward accrual. Hourly only. */
|
|
9
53
|
includeOvertime?: boolean;
|
|
54
|
+
/** Whether all paid hours (not just worked hours) count toward accrual. Hourly only. */
|
|
10
55
|
allPaidHours?: boolean;
|
|
56
|
+
/** For `per_calendar_year`: grant hours all at once or spread per pay period. */
|
|
11
57
|
accrualMethodFixed?: AccrualMethodFixed;
|
|
58
|
+
/** Whether balances reset on anniversary or on a fixed calendar date. */
|
|
12
59
|
resetDateType?: ResetDateType;
|
|
60
|
+
/** Reset month (1–12) when `resetDateType` is `per_calendar_year`. */
|
|
13
61
|
resetMonth?: number;
|
|
62
|
+
/** Reset day of month when `resetDateType` is `per_calendar_year`. */
|
|
14
63
|
resetDay?: number;
|
|
15
64
|
}
|
|
16
|
-
|
|
65
|
+
/** @internal */
|
|
66
|
+
type LockedAccrualCategory = 'unlimited' | 'accrual_based';
|
|
67
|
+
/** @internal */
|
|
17
68
|
export interface PolicyConfigurationFormPresentationProps {
|
|
69
|
+
/** Called with form values when the user submits a valid form. */
|
|
18
70
|
onContinue: (data: PolicyConfigurationFormData) => void;
|
|
71
|
+
/** Called when the user clicks the cancel button. */
|
|
19
72
|
onCancel: () => void;
|
|
73
|
+
/** Pre-populated values to merge into the form's defaults. */
|
|
20
74
|
defaultValues?: Partial<PolicyConfigurationFormData>;
|
|
75
|
+
/** When set, renders the edit-title variant with this policy name. */
|
|
21
76
|
editingPolicyName?: string;
|
|
77
|
+
/** When true, disables actions and shows the submit button in a loading state. */
|
|
22
78
|
isPending?: boolean;
|
|
79
|
+
/** Restricts the accrual method options when editing a completed policy. */
|
|
23
80
|
lockedAccrualCategory?: LockedAccrualCategory;
|
|
24
81
|
}
|
|
82
|
+
export {};
|
|
@@ -1,6 +1,3 @@
|
|
|
1
1
|
import "./types/i18next.d.ts"
|
|
2
2
|
export { PolicyConfigurationForm } from './PolicyConfigurationForm';
|
|
3
3
|
export type { PolicyConfigurationFormProps } from './PolicyConfigurationForm';
|
|
4
|
-
export { PolicyConfigurationFormPresentation } from './PolicyConfigurationFormPresentation';
|
|
5
|
-
export type { PolicyConfigurationFormPresentationProps } from './PolicyConfigurationFormTypes';
|
|
6
|
-
export type { PolicyConfigurationFormData, AccrualMethod, AccrualMethodFixed, ResetDateType, } from './PolicyConfigurationFormTypes';
|
package/dist/components/TimeOff/TimeOffManagement/SelectEmployees/SelectEmployeesHoliday.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SelectEmployeesHoliday.js","sources":["../../../../../src/components/TimeOff/TimeOffManagement/SelectEmployees/SelectEmployeesHoliday.tsx"],"sourcesContent":["import { useCallback, useMemo } from 'react'\nimport { useQueryClient } from '@tanstack/react-query'\nimport { useHolidayPayPoliciesAddEmployeesMutation } from '@gusto/embedded-api-v-2025-11-15/react-query/holidayPayPoliciesAddEmployees'\nimport {\n useHolidayPayPoliciesGetSuspense,\n queryKeyHolidayPayPoliciesGet,\n invalidateAllHolidayPayPoliciesGet,\n type HolidayPayPoliciesGetQueryData,\n} from '@gusto/embedded-api-v-2025-11-15/react-query/holidayPayPoliciesGet'\nimport type { HolidayPayPolicy } from '@gusto/embedded-api-v-2025-11-15/models/components/holidaypaypolicy'\nimport { SelectEmployeesPresentation } from './SelectEmployeesPresentation'\nimport { useSelectEmployeesData } from './useSelectEmployeesData'\nimport { useBase } from '@/components/Base/useBase'\nimport { componentEvents } from '@/shared/constants'\n\ninterface SelectEmployeesHolidayProps {\n companyId: string\n mode?: 'standalone' | 'wizard'\n}\n\nexport function SelectEmployeesHoliday(props: SelectEmployeesHolidayProps) {\n if (props.mode === 'wizard') {\n return <SelectEmployeesHolidayInner {...props} mode=\"wizard\" />\n }\n return <StandaloneLoader {...props} />\n}\n\nfunction StandaloneLoader(props: SelectEmployeesHolidayProps) {\n const { data: policyResponse } = useHolidayPayPoliciesGetSuspense({\n companyUuid: props.companyId,\n })\n const policy = policyResponse.holidayPayPolicy\n if (!policy) throw new Error('Unexpected response: missing holidayPayPolicy')\n\n const existingAssigneeUuids = useMemo(() => {\n const set = new Set<string>()\n for (const e of policy.employees) {\n if (e.uuid) set.add(e.uuid)\n }\n return set\n }, [policy.employees])\n\n return (\n <SelectEmployeesHolidayInner\n {...props}\n mode=\"standalone\"\n existingAssigneeUuids={existingAssigneeUuids}\n version={policy.version}\n />\n )\n}\n\ninterface InnerProps extends SelectEmployeesHolidayProps {\n existingAssigneeUuids?: Set<string>\n version?: string\n}\n\nfunction SelectEmployeesHolidayInner({\n companyId,\n mode = 'standalone',\n existingAssigneeUuids,\n version,\n}: InnerProps) {\n const { onEvent, baseSubmitHandler } = useBase()\n const queryClient = useQueryClient()\n const {\n filteredEmployees,\n selectedUuids,\n searchValue,\n pagination,\n isFetching,\n handleSelect,\n handleSelectAll,\n handleSearchChange,\n handleSearchClear,\n } = useSelectEmployeesData(companyId, existingAssigneeUuids)\n\n const { mutateAsync: addEmployees, isPending: isAddPending } =\n useHolidayPayPoliciesAddEmployeesMutation()\n\n const handleContinue = useCallback(async () => {\n const toAdd = [...selectedUuids]\n\n if (mode === 'wizard') {\n onEvent(componentEvents.TIME_OFF_HOLIDAY_ADD_EMPLOYEES_DONE, {\n employeeUuids: toAdd,\n })\n return\n }\n\n if (toAdd.length === 0) {\n onEvent(componentEvents.TIME_OFF_HOLIDAY_ADD_EMPLOYEES_DONE)\n return\n }\n\n await baseSubmitHandler({}, async () => {\n const response = await addEmployees({\n request: {\n companyUuid: companyId,\n requestBody: {\n version: version ?? '',\n employees: toAdd.map(uuid => ({ uuid })),\n },\n },\n })\n const latestPolicy: HolidayPayPolicy | undefined = response.holidayPayPolicy\n // Seed the GET cache from the mutation response so that the next mount\n // of HolidayPolicyDetail reads fresh data immediately. invalidateQueries\n // alone only refetches *active* subscriptions, but we navigate away\n // before the refetch can complete.\n if (latestPolicy) {\n queryClient.setQueryData<HolidayPayPoliciesGetQueryData>(\n queryKeyHolidayPayPoliciesGet(companyId, {}),\n prev =>\n prev\n ? { ...prev, holidayPayPolicy: latestPolicy }\n : (undefined as unknown as HolidayPayPoliciesGetQueryData),\n )\n }\n await invalidateAllHolidayPayPoliciesGet(queryClient)\n onEvent(componentEvents.TIME_OFF_HOLIDAY_ADD_EMPLOYEES_DONE, latestPolicy)\n })\n }, [\n mode,\n selectedUuids,\n baseSubmitHandler,\n addEmployees,\n companyId,\n version,\n queryClient,\n onEvent,\n ])\n\n const handleBack = useCallback(() => {\n onEvent(componentEvents.CANCEL)\n }, [onEvent])\n\n return (\n <SelectEmployeesPresentation\n employees={filteredEmployees}\n selectedUuids={selectedUuids}\n searchValue={searchValue}\n onSelect={handleSelect}\n onSelectAll={handleSelectAll}\n onSearchChange={handleSearchChange}\n onSearchClear={handleSearchClear}\n onBack={handleBack}\n onContinue={handleContinue}\n isHolidayPolicy\n pagination={pagination}\n isFetching={isFetching}\n isPending={isAddPending}\n />\n )\n}\n"],"names":["SelectEmployeesHoliday","props","jsx","SelectEmployeesHolidayInner","StandaloneLoader","policyResponse","useHolidayPayPoliciesGetSuspense","policy","existingAssigneeUuids","useMemo","set","e","companyId","mode","version","onEvent","baseSubmitHandler","useBase","queryClient","useQueryClient","filteredEmployees","selectedUuids","searchValue","pagination","isFetching","handleSelect","handleSelectAll","handleSearchChange","handleSearchClear","useSelectEmployeesData","addEmployees","isAddPending","useHolidayPayPoliciesAddEmployeesMutation","handleContinue","useCallback","toAdd","componentEvents","latestPolicy","uuid","queryKeyHolidayPayPoliciesGet","prev","invalidateAllHolidayPayPoliciesGet","handleBack","SelectEmployeesPresentation"],"mappings":";;;;;;;;;
|
|
1
|
+
{"version":3,"file":"SelectEmployeesHoliday.js","sources":["../../../../../src/components/TimeOff/TimeOffManagement/SelectEmployees/SelectEmployeesHoliday.tsx"],"sourcesContent":["import { useCallback, useMemo } from 'react'\nimport { useQueryClient } from '@tanstack/react-query'\nimport { useHolidayPayPoliciesAddEmployeesMutation } from '@gusto/embedded-api-v-2025-11-15/react-query/holidayPayPoliciesAddEmployees'\nimport {\n useHolidayPayPoliciesGetSuspense,\n queryKeyHolidayPayPoliciesGet,\n invalidateAllHolidayPayPoliciesGet,\n type HolidayPayPoliciesGetQueryData,\n} from '@gusto/embedded-api-v-2025-11-15/react-query/holidayPayPoliciesGet'\nimport type { HolidayPayPolicy } from '@gusto/embedded-api-v-2025-11-15/models/components/holidaypaypolicy'\nimport { SelectEmployeesPresentation } from './SelectEmployeesPresentation'\nimport { useSelectEmployeesData } from './useSelectEmployeesData'\nimport { useBase } from '@/components/Base/useBase'\nimport { componentEvents } from '@/shared/constants'\n\ninterface SelectEmployeesHolidayProps {\n companyId: string\n mode?: 'standalone' | 'wizard'\n}\n\n/** @internal */\nexport function SelectEmployeesHoliday(props: SelectEmployeesHolidayProps) {\n if (props.mode === 'wizard') {\n return <SelectEmployeesHolidayInner {...props} mode=\"wizard\" />\n }\n return <StandaloneLoader {...props} />\n}\n\nfunction StandaloneLoader(props: SelectEmployeesHolidayProps) {\n const { data: policyResponse } = useHolidayPayPoliciesGetSuspense({\n companyUuid: props.companyId,\n })\n const policy = policyResponse.holidayPayPolicy\n if (!policy) throw new Error('Unexpected response: missing holidayPayPolicy')\n\n const existingAssigneeUuids = useMemo(() => {\n const set = new Set<string>()\n for (const e of policy.employees) {\n if (e.uuid) set.add(e.uuid)\n }\n return set\n }, [policy.employees])\n\n return (\n <SelectEmployeesHolidayInner\n {...props}\n mode=\"standalone\"\n existingAssigneeUuids={existingAssigneeUuids}\n version={policy.version}\n />\n )\n}\n\ninterface InnerProps extends SelectEmployeesHolidayProps {\n existingAssigneeUuids?: Set<string>\n version?: string\n}\n\nfunction SelectEmployeesHolidayInner({\n companyId,\n mode = 'standalone',\n existingAssigneeUuids,\n version,\n}: InnerProps) {\n const { onEvent, baseSubmitHandler } = useBase()\n const queryClient = useQueryClient()\n const {\n filteredEmployees,\n selectedUuids,\n searchValue,\n pagination,\n isFetching,\n handleSelect,\n handleSelectAll,\n handleSearchChange,\n handleSearchClear,\n } = useSelectEmployeesData(companyId, existingAssigneeUuids)\n\n const { mutateAsync: addEmployees, isPending: isAddPending } =\n useHolidayPayPoliciesAddEmployeesMutation()\n\n const handleContinue = useCallback(async () => {\n const toAdd = [...selectedUuids]\n\n if (mode === 'wizard') {\n onEvent(componentEvents.TIME_OFF_HOLIDAY_ADD_EMPLOYEES_DONE, {\n employeeUuids: toAdd,\n })\n return\n }\n\n if (toAdd.length === 0) {\n onEvent(componentEvents.TIME_OFF_HOLIDAY_ADD_EMPLOYEES_DONE)\n return\n }\n\n await baseSubmitHandler({}, async () => {\n const response = await addEmployees({\n request: {\n companyUuid: companyId,\n requestBody: {\n version: version ?? '',\n employees: toAdd.map(uuid => ({ uuid })),\n },\n },\n })\n const latestPolicy: HolidayPayPolicy | undefined = response.holidayPayPolicy\n // Seed the GET cache from the mutation response so that the next mount\n // of HolidayPolicyDetail reads fresh data immediately. invalidateQueries\n // alone only refetches *active* subscriptions, but we navigate away\n // before the refetch can complete.\n if (latestPolicy) {\n queryClient.setQueryData<HolidayPayPoliciesGetQueryData>(\n queryKeyHolidayPayPoliciesGet(companyId, {}),\n prev =>\n prev\n ? { ...prev, holidayPayPolicy: latestPolicy }\n : (undefined as unknown as HolidayPayPoliciesGetQueryData),\n )\n }\n await invalidateAllHolidayPayPoliciesGet(queryClient)\n onEvent(componentEvents.TIME_OFF_HOLIDAY_ADD_EMPLOYEES_DONE, latestPolicy)\n })\n }, [\n mode,\n selectedUuids,\n baseSubmitHandler,\n addEmployees,\n companyId,\n version,\n queryClient,\n onEvent,\n ])\n\n const handleBack = useCallback(() => {\n onEvent(componentEvents.CANCEL)\n }, [onEvent])\n\n return (\n <SelectEmployeesPresentation\n employees={filteredEmployees}\n selectedUuids={selectedUuids}\n searchValue={searchValue}\n onSelect={handleSelect}\n onSelectAll={handleSelectAll}\n onSearchChange={handleSearchChange}\n onSearchClear={handleSearchClear}\n onBack={handleBack}\n onContinue={handleContinue}\n isHolidayPolicy\n pagination={pagination}\n isFetching={isFetching}\n isPending={isAddPending}\n />\n )\n}\n"],"names":["SelectEmployeesHoliday","props","jsx","SelectEmployeesHolidayInner","StandaloneLoader","policyResponse","useHolidayPayPoliciesGetSuspense","policy","existingAssigneeUuids","useMemo","set","e","companyId","mode","version","onEvent","baseSubmitHandler","useBase","queryClient","useQueryClient","filteredEmployees","selectedUuids","searchValue","pagination","isFetching","handleSelect","handleSelectAll","handleSearchChange","handleSearchClear","useSelectEmployeesData","addEmployees","isAddPending","useHolidayPayPoliciesAddEmployeesMutation","handleContinue","useCallback","toAdd","componentEvents","latestPolicy","uuid","queryKeyHolidayPayPoliciesGet","prev","invalidateAllHolidayPayPoliciesGet","handleBack","SelectEmployeesPresentation"],"mappings":"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"}
|
package/dist/components/TimeOff/TimeOffManagement/SelectEmployees/SelectEmployeesPresentation.d.ts
CHANGED
|
@@ -1,2 +1,3 @@
|
|
|
1
1
|
import { SelectEmployeesPresentationProps } from './SelectEmployeesPresentationTypes';
|
|
2
|
+
/** @internal */
|
|
2
3
|
export declare function SelectEmployeesPresentation({ employees, selectedUuids, searchValue, onSelect, onSelectAll, onSearchChange, onSearchClear, onBack, onContinue, isHolidayPolicy, balances, onBalanceChange, pagination, isFetching, isPending, }: SelectEmployeesPresentationProps): import("react").JSX.Element;
|
package/dist/components/TimeOff/TimeOffManagement/SelectEmployees/SelectEmployeesPresentation.js
CHANGED
|
@@ -2,52 +2,53 @@ import { jsxs as r, jsx as t } from "react/jsx-runtime";
|
|
|
2
2
|
import { useTranslation as $ } from "react-i18next";
|
|
3
3
|
import { useId as j } from "react";
|
|
4
4
|
import { EmployeeTable as v } from "../../shared/EmployeeTable/EmployeeTable.js";
|
|
5
|
-
import
|
|
6
|
-
import { Flex as
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
|
|
11
|
-
|
|
5
|
+
import L from "./SelectEmployeesPresentation.module.scss.js";
|
|
6
|
+
import { Flex as u } from "../../../Common/Flex/Flex.js";
|
|
7
|
+
import { EmptyData as A } from "../../../Common/EmptyData/EmptyData.js";
|
|
8
|
+
import { ActionsLayout as B } from "../../../Common/ActionsLayout/ActionsLayout.js";
|
|
9
|
+
import { useComponentContext as H } from "../../../../contexts/ComponentAdapter/useComponentContext.js";
|
|
10
|
+
import { useI18n as N } from "../../../../i18n/I18n.js";
|
|
11
|
+
const O = (i) => /^\d*\.?\d*$/.test(i);
|
|
12
|
+
function R({
|
|
12
13
|
employees: i,
|
|
13
|
-
selectedUuids:
|
|
14
|
+
selectedUuids: p,
|
|
14
15
|
searchValue: o,
|
|
15
|
-
onSelect:
|
|
16
|
-
onSelectAll:
|
|
17
|
-
onSearchChange:
|
|
18
|
-
onSearchClear:
|
|
19
|
-
onBack:
|
|
20
|
-
onContinue:
|
|
21
|
-
isHolidayPolicy:
|
|
22
|
-
balances:
|
|
16
|
+
onSelect: f,
|
|
17
|
+
onSelectAll: h,
|
|
18
|
+
onSearchChange: y,
|
|
19
|
+
onSearchClear: C,
|
|
20
|
+
onBack: g,
|
|
21
|
+
onContinue: b,
|
|
22
|
+
isHolidayPolicy: l = !1,
|
|
23
|
+
balances: x,
|
|
23
24
|
onBalanceChange: m,
|
|
24
|
-
pagination:
|
|
25
|
-
isFetching:
|
|
26
|
-
isPending:
|
|
25
|
+
pagination: I,
|
|
26
|
+
isFetching: S,
|
|
27
|
+
isPending: s = !1
|
|
27
28
|
}) {
|
|
28
|
-
|
|
29
|
-
const { t: e } = $("Company.TimeOff.SelectEmployees"),
|
|
30
|
-
return /* @__PURE__ */ r(
|
|
31
|
-
/* @__PURE__ */ r(
|
|
32
|
-
/* @__PURE__ */ t(
|
|
33
|
-
/* @__PURE__ */ t(
|
|
29
|
+
N("Company.TimeOff.SelectEmployees");
|
|
30
|
+
const { t: e } = $("Company.TimeOff.SelectEmployees"), c = H(), { Heading: T, Text: k, Button: d, Alert: D } = c, E = j();
|
|
31
|
+
return /* @__PURE__ */ r(u, { flexDirection: "column", alignItems: "stretch", gap: 32, children: [
|
|
32
|
+
/* @__PURE__ */ r(u, { flexDirection: "column", gap: 4, children: [
|
|
33
|
+
/* @__PURE__ */ t(T, { as: "h2", children: e("title") }),
|
|
34
|
+
/* @__PURE__ */ t(k, { variant: "supporting", children: e(l ? "holidayDescription" : "description") })
|
|
34
35
|
] }),
|
|
35
|
-
!
|
|
36
|
+
!l && /* @__PURE__ */ t(D, { status: "warning", label: e("reassignmentWarning") }),
|
|
36
37
|
/* @__PURE__ */ t(
|
|
37
38
|
v,
|
|
38
39
|
{
|
|
39
40
|
data: i,
|
|
40
41
|
searchValue: o,
|
|
41
|
-
onSearchChange:
|
|
42
|
-
onSearchClear:
|
|
42
|
+
onSearchChange: y,
|
|
43
|
+
onSearchClear: C,
|
|
43
44
|
hideSearch: i.length === 0 && o.length === 0,
|
|
44
45
|
selectionMode: "multiple",
|
|
45
|
-
onSelect:
|
|
46
|
-
onSelectAll:
|
|
47
|
-
getIsItemSelected: (n) =>
|
|
48
|
-
isFetching:
|
|
49
|
-
pagination:
|
|
50
|
-
emptyState: () => /* @__PURE__ */ t(
|
|
46
|
+
onSelect: f,
|
|
47
|
+
onSelectAll: h,
|
|
48
|
+
getIsItemSelected: (n) => p.has(n.uuid),
|
|
49
|
+
isFetching: S,
|
|
50
|
+
pagination: I,
|
|
51
|
+
emptyState: () => /* @__PURE__ */ t(A, { title: e("emptyState") }),
|
|
51
52
|
additionalColumns: [
|
|
52
53
|
{
|
|
53
54
|
key: "department",
|
|
@@ -58,16 +59,16 @@ function K({
|
|
|
58
59
|
key: "balance",
|
|
59
60
|
title: e("startingBalanceColumn"),
|
|
60
61
|
justify: "end",
|
|
61
|
-
render: (n) => /* @__PURE__ */ t("div", { className:
|
|
62
|
-
|
|
62
|
+
render: (n) => /* @__PURE__ */ t("div", { className: L.balanceInput, children: /* @__PURE__ */ t(
|
|
63
|
+
c.TextInput,
|
|
63
64
|
{
|
|
64
65
|
name: `balance-${n.uuid}`,
|
|
65
66
|
label: e("startingBalanceColumn"),
|
|
66
67
|
shouldVisuallyHideLabel: !0,
|
|
67
68
|
"aria-labelledby": `employee-name-${n.uuid} ${E}`,
|
|
68
|
-
value:
|
|
69
|
+
value: x?.[n.uuid] ?? "",
|
|
69
70
|
onChange: (a) => {
|
|
70
|
-
a !== "" && !
|
|
71
|
+
a !== "" && !O(a) || m(n.uuid, a);
|
|
71
72
|
},
|
|
72
73
|
placeholder: "0"
|
|
73
74
|
}
|
|
@@ -77,13 +78,13 @@ function K({
|
|
|
77
78
|
]
|
|
78
79
|
}
|
|
79
80
|
),
|
|
80
|
-
/* @__PURE__ */ r(
|
|
81
|
-
/* @__PURE__ */ t(
|
|
82
|
-
/* @__PURE__ */ t(
|
|
81
|
+
/* @__PURE__ */ r(B, { children: [
|
|
82
|
+
/* @__PURE__ */ t(d, { variant: "secondary", onClick: g, isDisabled: s, children: e("backCta") }),
|
|
83
|
+
/* @__PURE__ */ t(d, { variant: "primary", onClick: b, isLoading: s, children: e("continueCta") })
|
|
83
84
|
] })
|
|
84
85
|
] });
|
|
85
86
|
}
|
|
86
87
|
export {
|
|
87
|
-
|
|
88
|
+
R as SelectEmployeesPresentation
|
|
88
89
|
};
|
|
89
90
|
//# sourceMappingURL=SelectEmployeesPresentation.js.map
|
package/dist/components/TimeOff/TimeOffManagement/SelectEmployees/SelectEmployeesPresentation.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SelectEmployeesPresentation.js","sources":["../../../../../src/components/TimeOff/TimeOffManagement/SelectEmployees/SelectEmployeesPresentation.tsx"],"sourcesContent":["import { useTranslation } from 'react-i18next'\nimport { useId } from 'react'\nimport { EmployeeTable } from '../../shared/EmployeeTable/EmployeeTable'\nimport type {\n EmployeeItem,\n SelectEmployeesPresentationProps,\n} from './SelectEmployeesPresentationTypes'\nimport styles from './SelectEmployeesPresentation.module.scss'\nimport { ActionsLayout, Flex } from '@/components/Common'\nimport { useComponentContext } from '@/contexts/ComponentAdapter/useComponentContext'\nimport { useI18n } from '@/i18n'\n\nconst isNumericInput = (value: string) => /^\\d*\\.?\\d*$/.test(value)\n\nexport function SelectEmployeesPresentation({\n employees,\n selectedUuids,\n searchValue,\n onSelect,\n onSelectAll,\n onSearchChange,\n onSearchClear,\n onBack,\n onContinue,\n isHolidayPolicy = false,\n balances,\n onBalanceChange,\n pagination,\n isFetching,\n isPending = false,\n}: SelectEmployeesPresentationProps) {\n useI18n('Company.TimeOff.SelectEmployees')\n const { t } = useTranslation('Company.TimeOff.SelectEmployees')\n const Components = useComponentContext()\n const { Heading, Text, Button, Alert } = Components\n const balanceColHeaderId = useId()\n\n return (\n <Flex flexDirection=\"column\" alignItems=\"stretch\" gap={32}>\n <Flex flexDirection=\"column\" gap={4}>\n <Heading as=\"h2\">{t('title')}</Heading>\n <Text variant=\"supporting\">\n {isHolidayPolicy ? t('holidayDescription') : t('description')}\n </Text>\n </Flex>\n\n {!isHolidayPolicy && <Alert status=\"warning\" label={t('reassignmentWarning')} />}\n\n <EmployeeTable<EmployeeItem>\n data={employees}\n searchValue={searchValue}\n onSearchChange={onSearchChange}\n onSearchClear={onSearchClear}\n hideSearch={employees.length === 0 && searchValue.length === 0}\n selectionMode=\"multiple\"\n onSelect={onSelect}\n onSelectAll={onSelectAll}\n getIsItemSelected={item => selectedUuids.has(item.uuid)}\n isFetching={isFetching}\n pagination={pagination}\n emptyState={() =>
|
|
1
|
+
{"version":3,"file":"SelectEmployeesPresentation.js","sources":["../../../../../src/components/TimeOff/TimeOffManagement/SelectEmployees/SelectEmployeesPresentation.tsx"],"sourcesContent":["import { useTranslation } from 'react-i18next'\nimport { useId } from 'react'\nimport { EmployeeTable } from '../../shared/EmployeeTable/EmployeeTable'\nimport type {\n EmployeeItem,\n SelectEmployeesPresentationProps,\n} from './SelectEmployeesPresentationTypes'\nimport styles from './SelectEmployeesPresentation.module.scss'\nimport { ActionsLayout, Flex, EmptyData } from '@/components/Common'\nimport { useComponentContext } from '@/contexts/ComponentAdapter/useComponentContext'\nimport { useI18n } from '@/i18n'\n\nconst isNumericInput = (value: string) => /^\\d*\\.?\\d*$/.test(value)\n\n/** @internal */\nexport function SelectEmployeesPresentation({\n employees,\n selectedUuids,\n searchValue,\n onSelect,\n onSelectAll,\n onSearchChange,\n onSearchClear,\n onBack,\n onContinue,\n isHolidayPolicy = false,\n balances,\n onBalanceChange,\n pagination,\n isFetching,\n isPending = false,\n}: SelectEmployeesPresentationProps) {\n useI18n('Company.TimeOff.SelectEmployees')\n const { t } = useTranslation('Company.TimeOff.SelectEmployees')\n const Components = useComponentContext()\n const { Heading, Text, Button, Alert } = Components\n const balanceColHeaderId = useId()\n\n return (\n <Flex flexDirection=\"column\" alignItems=\"stretch\" gap={32}>\n <Flex flexDirection=\"column\" gap={4}>\n <Heading as=\"h2\">{t('title')}</Heading>\n <Text variant=\"supporting\">\n {isHolidayPolicy ? t('holidayDescription') : t('description')}\n </Text>\n </Flex>\n\n {!isHolidayPolicy && <Alert status=\"warning\" label={t('reassignmentWarning')} />}\n\n <EmployeeTable<EmployeeItem>\n data={employees}\n searchValue={searchValue}\n onSearchChange={onSearchChange}\n onSearchClear={onSearchClear}\n hideSearch={employees.length === 0 && searchValue.length === 0}\n selectionMode=\"multiple\"\n onSelect={onSelect}\n onSelectAll={onSelectAll}\n getIsItemSelected={item => selectedUuids.has(item.uuid)}\n isFetching={isFetching}\n pagination={pagination}\n emptyState={() => <EmptyData title={t('emptyState')} />}\n additionalColumns={[\n {\n key: 'department' as keyof EmployeeItem,\n title: t('departmentColumn'),\n },\n ...(onBalanceChange\n ? [\n {\n key: 'balance' as keyof EmployeeItem,\n title: t('startingBalanceColumn'),\n justify: 'end' as const,\n render: (employee: EmployeeItem) => (\n <div className={styles.balanceInput}>\n <Components.TextInput\n name={`balance-${employee.uuid}`}\n label={t('startingBalanceColumn')}\n shouldVisuallyHideLabel\n aria-labelledby={`employee-name-${employee.uuid} ${balanceColHeaderId}`}\n value={balances?.[employee.uuid] ?? ''}\n onChange={(value: string) => {\n if (value !== '' && !isNumericInput(value)) return\n onBalanceChange(employee.uuid, value)\n }}\n placeholder=\"0\"\n />\n </div>\n ),\n },\n ]\n : []),\n ]}\n />\n\n <ActionsLayout>\n <Button variant=\"secondary\" onClick={onBack} isDisabled={isPending}>\n {t('backCta')}\n </Button>\n <Button variant=\"primary\" onClick={onContinue} isLoading={isPending}>\n {t('continueCta')}\n </Button>\n </ActionsLayout>\n </Flex>\n )\n}\n"],"names":["isNumericInput","value","SelectEmployeesPresentation","employees","selectedUuids","searchValue","onSelect","onSelectAll","onSearchChange","onSearchClear","onBack","onContinue","isHolidayPolicy","balances","onBalanceChange","pagination","isFetching","isPending","useI18n","t","useTranslation","Components","useComponentContext","Heading","Text","Button","Alert","balanceColHeaderId","useId","Flex","jsxs","jsx","EmployeeTable","item","EmptyData","employee","styles","ActionsLayout"],"mappings":";;;;;;;;;;AAYA,MAAMA,IAAiB,CAACC,MAAkB,cAAc,KAAKA,CAAK;AAG3D,SAASC,EAA4B;AAAA,EAC1C,WAAAC;AAAA,EACA,eAAAC;AAAA,EACA,aAAAC;AAAA,EACA,UAAAC;AAAA,EACA,aAAAC;AAAA,EACA,gBAAAC;AAAA,EACA,eAAAC;AAAA,EACA,QAAAC;AAAA,EACA,YAAAC;AAAA,EACA,iBAAAC,IAAkB;AAAA,EAClB,UAAAC;AAAA,EACA,iBAAAC;AAAA,EACA,YAAAC;AAAA,EACA,YAAAC;AAAA,EACA,WAAAC,IAAY;AACd,GAAqC;AACnC,EAAAC,EAAQ,iCAAiC;AACzC,QAAM,EAAE,GAAAC,EAAA,IAAMC,EAAe,iCAAiC,GACxDC,IAAaC,EAAA,GACb,EAAE,SAAAC,GAAS,MAAAC,GAAM,QAAAC,GAAQ,OAAAC,MAAUL,GACnCM,IAAqBC,EAAA;AAE3B,2BACGC,GAAA,EAAK,eAAc,UAAS,YAAW,WAAU,KAAK,IACrD,UAAA;AAAA,IAAA,gBAAAC,EAACD,GAAA,EAAK,eAAc,UAAS,KAAK,GAChC,UAAA;AAAA,MAAA,gBAAAE,EAACR,GAAA,EAAQ,IAAG,MAAM,UAAAJ,EAAE,OAAO,GAAE;AAAA,MAC7B,gBAAAY,EAACP,GAAA,EAAK,SAAQ,cACX,UAAkBL,EAAlBP,IAAoB,uBAA0B,aAAN,EAAmB,CAC9D;AAAA,IAAA,GACF;AAAA,IAEC,CAACA,KAAmB,gBAAAmB,EAACL,GAAA,EAAM,QAAO,WAAU,OAAOP,EAAE,qBAAqB,GAAG;AAAA,IAE9E,gBAAAY;AAAA,MAACC;AAAA,MAAA;AAAA,QACC,MAAM7B;AAAA,QACN,aAAAE;AAAA,QACA,gBAAAG;AAAA,QACA,eAAAC;AAAA,QACA,YAAYN,EAAU,WAAW,KAAKE,EAAY,WAAW;AAAA,QAC7D,eAAc;AAAA,QACd,UAAAC;AAAA,QACA,aAAAC;AAAA,QACA,mBAAmB,CAAA0B,MAAQ7B,EAAc,IAAI6B,EAAK,IAAI;AAAA,QACtD,YAAAjB;AAAA,QACA,YAAAD;AAAA,QACA,YAAY,MAAM,gBAAAgB,EAACG,KAAU,OAAOf,EAAE,YAAY,GAAG;AAAA,QACrD,mBAAmB;AAAA,UACjB;AAAA,YACE,KAAK;AAAA,YACL,OAAOA,EAAE,kBAAkB;AAAA,UAAA;AAAA,UAE7B,GAAIL,IACA;AAAA,YACE;AAAA,cACE,KAAK;AAAA,cACL,OAAOK,EAAE,uBAAuB;AAAA,cAChC,SAAS;AAAA,cACT,QAAQ,CAACgB,wBACN,OAAA,EAAI,WAAWC,EAAO,cACrB,UAAA,gBAAAL;AAAA,gBAACV,EAAW;AAAA,gBAAX;AAAA,kBACC,MAAM,WAAWc,EAAS,IAAI;AAAA,kBAC9B,OAAOhB,EAAE,uBAAuB;AAAA,kBAChC,yBAAuB;AAAA,kBACvB,mBAAiB,iBAAiBgB,EAAS,IAAI,IAAIR,CAAkB;AAAA,kBACrE,OAAOd,IAAWsB,EAAS,IAAI,KAAK;AAAA,kBACpC,UAAU,CAAClC,MAAkB;AAC3B,oBAAIA,MAAU,MAAM,CAACD,EAAeC,CAAK,KACzCa,EAAgBqB,EAAS,MAAMlC,CAAK;AAAA,kBACtC;AAAA,kBACA,aAAY;AAAA,gBAAA;AAAA,cAAA,EACd,CACF;AAAA,YAAA;AAAA,UAEJ,IAEF,CAAA;AAAA,QAAC;AAAA,MACP;AAAA,IAAA;AAAA,sBAGDoC,GAAA,EACC,UAAA;AAAA,MAAA,gBAAAN,EAACN,GAAA,EAAO,SAAQ,aAAY,SAASf,GAAQ,YAAYO,GACtD,UAAAE,EAAE,SAAS,EAAA,CACd;AAAA,MACA,gBAAAY,EAACN,GAAA,EAAO,SAAQ,WAAU,SAASd,GAAY,WAAWM,GACvD,UAAAE,EAAE,aAAa,EAAA,CAClB;AAAA,IAAA,EAAA,CACF;AAAA,EAAA,GACF;AAEJ;"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { PaidTimeOff } from '@gusto/embedded-api-v-2025-11-15/models/components/paidtimeoff';
|
|
2
2
|
import { PaginationControlProps } from '../../../Common/PaginationControl/PaginationControlTypes';
|
|
3
|
+
/** @internal */
|
|
3
4
|
export interface EmployeeItem {
|
|
4
5
|
uuid: string;
|
|
5
6
|
firstName?: string | null;
|
|
@@ -9,6 +10,7 @@ export interface EmployeeItem {
|
|
|
9
10
|
balance?: string | null;
|
|
10
11
|
eligiblePaidTimeOff?: PaidTimeOff[];
|
|
11
12
|
}
|
|
13
|
+
/** @internal */
|
|
12
14
|
export interface SelectEmployeesPresentationProps {
|
|
13
15
|
employees: EmployeeItem[];
|
|
14
16
|
selectedUuids: Set<string>;
|
package/dist/components/TimeOff/TimeOffManagement/SelectEmployees/SelectEmployeesTimeOff.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SelectEmployeesTimeOff.js","sources":["../../../../../src/components/TimeOff/TimeOffManagement/SelectEmployees/SelectEmployeesTimeOff.tsx"],"sourcesContent":["import { useCallback, useMemo, useRef, useState } from 'react'\nimport { useTimeOffPoliciesAddEmployeesMutation } from '@gusto/embedded-api-v-2025-11-15/react-query/timeOffPoliciesAddEmployees'\nimport { useTimeOffPoliciesGetSuspense } from '@gusto/embedded-api-v-2025-11-15/react-query/timeOffPoliciesGet'\nimport { useTimeOffPoliciesUpdateMutation } from '@gusto/embedded-api-v-2025-11-15/react-query/timeOffPoliciesUpdate'\nimport { UnprocessableEntityError } from '@gusto/embedded-api-v-2025-11-15/models/errors/unprocessableentityerror'\nimport { useQueryClient } from '@tanstack/react-query'\nimport { useTranslation } from 'react-i18next'\nimport type { CreatableTimeOffPolicyType } from '../../TimeOffFlow/timeOffPolicyTypes'\nimport { SelectEmployeesPresentation } from './SelectEmployeesPresentation'\nimport { matchesEmployeeSearch, useSelectEmployeesData } from './useSelectEmployeesData'\nimport type { EmployeeItem } from './SelectEmployeesPresentationTypes'\nimport { useBase } from '@/components/Base/useBase'\nimport { SDKInternalError } from '@/types/sdkError'\nimport { componentEvents } from '@/shared/constants'\nimport { useI18n } from '@/i18n'\n\ninterface SelectEmployeesTimeOffProps {\n companyId: string\n policyId: string\n policyType: CreatableTimeOffPolicyType\n mode?: 'standalone' | 'wizard'\n}\n\nconst PAID_TIME_OFF_NAME_BY_POLICY_TYPE: Record<CreatableTimeOffPolicyType, string> = {\n vacation: 'Vacation Hours',\n sick: 'Sick Hours',\n}\n\nfunction extractCarryOverBalance(\n employee: EmployeeItem | undefined,\n policyType: CreatableTimeOffPolicyType,\n): string | undefined {\n if (!employee) return undefined\n const targetName = PAID_TIME_OFF_NAME_BY_POLICY_TYPE[policyType]\n const matching = employee.eligiblePaidTimeOff?.find(pto => pto.name === targetName)\n const balance = matching?.accrualBalance\n return balance && balance.length > 0 ? balance : undefined\n}\n\nfunction deriveCarryOverBalances(\n employees: EmployeeItem[],\n policyType: CreatableTimeOffPolicyType,\n): Record<string, string> {\n const map: Record<string, string> = {}\n for (const employee of employees) {\n const balance = extractCarryOverBalance(employee, policyType)\n if (balance) {\n map[employee.uuid] = balance\n }\n }\n return map\n}\n\nexport function SelectEmployeesTimeOff(props: SelectEmployeesTimeOffProps) {\n if (props.mode === 'wizard') {\n return <SelectEmployeesTimeOffInner {...props} mode=\"wizard\" />\n }\n return <StandaloneLoader {...props} />\n}\n\nfunction StandaloneLoader(props: SelectEmployeesTimeOffProps) {\n const { data: policyResponse } = useTimeOffPoliciesGetSuspense({\n timeOffPolicyUuid: props.policyId,\n })\n const policy = policyResponse.timeOffPolicy\n if (!policy) throw new Error('Unexpected response: missing timeOffPolicy')\n\n const isUnlimited = policy.accrualMethod === 'unlimited'\n\n const existingAssigneeUuids = useMemo(() => {\n const set = new Set<string>()\n for (const e of policy.employees) {\n if (e.uuid) set.add(e.uuid)\n }\n return set\n }, [policy.employees])\n\n return (\n <SelectEmployeesTimeOffInner\n {...props}\n mode=\"standalone\"\n existingAssigneeUuids={existingAssigneeUuids}\n hideBalances={isUnlimited}\n />\n )\n}\n\ninterface InnerProps extends SelectEmployeesTimeOffProps {\n existingAssigneeUuids?: Set<string>\n hideBalances?: boolean\n}\n\nfunction SelectEmployeesTimeOffInner({\n companyId,\n policyId,\n policyType,\n mode = 'standalone',\n existingAssigneeUuids,\n hideBalances = false,\n}: InnerProps) {\n useI18n('Company.TimeOff.SelectEmployees')\n const { t } = useTranslation('Company.TimeOff.SelectEmployees')\n const { onEvent, baseSubmitHandler } = useBase()\n const queryClient = useQueryClient()\n const {\n filteredEmployees,\n eligibleEmployees,\n selectedUuids,\n searchValue,\n pagination,\n isFetching,\n handleSelect,\n handleSelectAll,\n handleSearchChange,\n handleSearchClear,\n } = useSelectEmployeesData(companyId, existingAssigneeUuids)\n\n // Captures the full Employee record at the moment a row is selected so\n // their record is still available for the reassignment-warning check at\n // submit time even if the user has since searched/paginated the row out of\n // view. Without this, `selectedUuids` would point at UUIDs we no longer\n // have data for.\n const selectedEmployeesRef = useRef(new Map<string, EmployeeItem>())\n\n const handleSelectWithCapture = useCallback(\n (item: EmployeeItem, checked: boolean) => {\n if (checked) {\n selectedEmployeesRef.current.set(item.uuid, item)\n } else {\n selectedEmployeesRef.current.delete(item.uuid)\n }\n handleSelect(item, checked)\n },\n [handleSelect],\n )\n\n const handleSelectAllWithCapture = useCallback(\n (checked: boolean) => {\n // Mirror the hook's scope: full search-filtered list across pages, not\n // just the visible page slice. Keeps `selectedEmployeesRef` in sync so\n // off-page selections survive a submit (carry-over balances, etc.).\n const scope = searchValue\n ? eligibleEmployees.filter(employee => matchesEmployeeSearch(employee, searchValue))\n : eligibleEmployees\n for (const item of scope) {\n if (checked) {\n selectedEmployeesRef.current.set(item.uuid, item)\n } else {\n selectedEmployeesRef.current.delete(item.uuid)\n }\n }\n handleSelectAll(checked)\n },\n [eligibleEmployees, searchValue, handleSelectAll],\n )\n\n const carryOverBalances = useMemo(\n () => deriveCarryOverBalances(eligibleEmployees, policyType),\n [eligibleEmployees, policyType],\n )\n\n const [balances, setBalances] = useState<Record<string, string>>({})\n\n const effectiveBalances = useMemo<Record<string, string>>(\n () => ({ ...carryOverBalances, ...balances }),\n [carryOverBalances, balances],\n )\n\n const { mutateAsync: addEmployees, isPending: isAddPending } =\n useTimeOffPoliciesAddEmployeesMutation()\n const { mutateAsync: updatePolicy, isPending: isUpdatePending } =\n useTimeOffPoliciesUpdateMutation()\n const isSubmitPending = isAddPending || isUpdatePending\n\n const handleBalanceChange = useCallback((uuid: string, value: string) => {\n setBalances(prev => ({ ...prev, [uuid]: value }))\n }, [])\n\n const buildAddPayload = useCallback(\n (uuids: string[]) =>\n uuids.map(uuid => {\n if (hideBalances) return { uuid, balance: '0' }\n const userValue = balances[uuid]\n const carryOver = extractCarryOverBalance(\n selectedEmployeesRef.current.get(uuid),\n policyType,\n )\n const balance = userValue && userValue.length > 0 ? userValue : (carryOver ?? '0')\n return { uuid, balance }\n }),\n [hideBalances, balances, policyType],\n )\n\n const submitAdd = useCallback(\n async (toAdd: string[]) => {\n await baseSubmitHandler({}, async () => {\n let policyResult: unknown\n if (toAdd.length > 0) {\n const response = await addEmployees({\n request: {\n timeOffPolicyUuid: policyId,\n requestBody: { employees: buildAddPayload(toAdd) },\n },\n })\n policyResult = response.timeOffPolicy\n }\n if (mode === 'wizard' && policyResult) {\n const version =\n typeof policyResult === 'object' && 'version' in policyResult\n ? String((policyResult as { version: unknown }).version)\n : ''\n try {\n await updatePolicy({\n request: {\n timeOffPolicyUuid: policyId,\n requestBody: { complete: true, version },\n },\n })\n } catch (err) {\n if (err instanceof UnprocessableEntityError) {\n const apiMessage = err.errors[0]?.message ?? ''\n throw new SDKInternalError(\n t('errors.completePolicyFailed', { details: apiMessage }),\n 'api_error',\n )\n }\n throw err\n }\n }\n void queryClient.invalidateQueries({\n queryKey: ['@gusto/embedded-api-v-2025-11-15', 'timeOffPolicies', 'get'],\n })\n onEvent(componentEvents.TIME_OFF_ADD_EMPLOYEES_DONE, policyResult)\n })\n },\n [\n mode,\n baseSubmitHandler,\n addEmployees,\n buildAddPayload,\n updatePolicy,\n policyId,\n queryClient,\n onEvent,\n t,\n ],\n )\n\n const handleContinue = useCallback(async () => {\n const toAdd = [...selectedUuids]\n\n if (toAdd.length === 0 && mode === 'standalone') {\n onEvent(componentEvents.TIME_OFF_ADD_EMPLOYEES_DONE)\n return\n }\n\n await submitAdd(toAdd)\n }, [mode, selectedUuids, onEvent, submitAdd])\n\n const handleBack = useCallback(() => {\n onEvent(componentEvents.TIME_OFF_ADD_EMPLOYEES_BACK)\n }, [onEvent])\n\n return (\n <SelectEmployeesPresentation\n employees={filteredEmployees}\n selectedUuids={selectedUuids}\n searchValue={searchValue}\n onSelect={handleSelectWithCapture}\n onSelectAll={handleSelectAllWithCapture}\n onSearchChange={handleSearchChange}\n onSearchClear={handleSearchClear}\n onBack={handleBack}\n onContinue={handleContinue}\n balances={hideBalances ? undefined : effectiveBalances}\n onBalanceChange={hideBalances ? undefined : handleBalanceChange}\n pagination={pagination}\n isFetching={isFetching}\n isPending={isSubmitPending}\n />\n )\n}\n"],"names":["PAID_TIME_OFF_NAME_BY_POLICY_TYPE","extractCarryOverBalance","employee","policyType","targetName","balance","pto","deriveCarryOverBalances","employees","map","SelectEmployeesTimeOff","props","jsx","SelectEmployeesTimeOffInner","StandaloneLoader","policyResponse","useTimeOffPoliciesGetSuspense","policy","isUnlimited","existingAssigneeUuids","useMemo","set","e","companyId","policyId","mode","hideBalances","useI18n","t","useTranslation","onEvent","baseSubmitHandler","useBase","queryClient","useQueryClient","filteredEmployees","eligibleEmployees","selectedUuids","searchValue","pagination","isFetching","handleSelect","handleSelectAll","handleSearchChange","handleSearchClear","useSelectEmployeesData","selectedEmployeesRef","useRef","handleSelectWithCapture","useCallback","item","checked","handleSelectAllWithCapture","scope","matchesEmployeeSearch","carryOverBalances","balances","setBalances","useState","effectiveBalances","addEmployees","isAddPending","useTimeOffPoliciesAddEmployeesMutation","updatePolicy","isUpdatePending","useTimeOffPoliciesUpdateMutation","isSubmitPending","handleBalanceChange","uuid","value","prev","buildAddPayload","uuids","userValue","carryOver","submitAdd","toAdd","policyResult","version","err","UnprocessableEntityError","apiMessage","SDKInternalError","componentEvents","handleContinue","handleBack","SelectEmployeesPresentation"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SelectEmployeesTimeOff.js","sources":["../../../../../src/components/TimeOff/TimeOffManagement/SelectEmployees/SelectEmployeesTimeOff.tsx"],"sourcesContent":["import { useCallback, useMemo, useRef, useState } from 'react'\nimport { useTimeOffPoliciesAddEmployeesMutation } from '@gusto/embedded-api-v-2025-11-15/react-query/timeOffPoliciesAddEmployees'\nimport { useTimeOffPoliciesGetSuspense } from '@gusto/embedded-api-v-2025-11-15/react-query/timeOffPoliciesGet'\nimport { useTimeOffPoliciesUpdateMutation } from '@gusto/embedded-api-v-2025-11-15/react-query/timeOffPoliciesUpdate'\nimport { UnprocessableEntityError } from '@gusto/embedded-api-v-2025-11-15/models/errors/unprocessableentityerror'\nimport { useQueryClient } from '@tanstack/react-query'\nimport { useTranslation } from 'react-i18next'\nimport type { CreatableTimeOffPolicyType } from '../../TimeOffFlow/timeOffPolicyTypes'\nimport { SelectEmployeesPresentation } from './SelectEmployeesPresentation'\nimport { matchesEmployeeSearch, useSelectEmployeesData } from './useSelectEmployeesData'\nimport type { EmployeeItem } from './SelectEmployeesPresentationTypes'\nimport { useBase } from '@/components/Base/useBase'\nimport { SDKInternalError } from '@/types/sdkError'\nimport { componentEvents } from '@/shared/constants'\nimport { useI18n } from '@/i18n'\n\ninterface SelectEmployeesTimeOffProps {\n companyId: string\n policyId: string\n policyType: CreatableTimeOffPolicyType\n mode?: 'standalone' | 'wizard'\n}\n\nconst PAID_TIME_OFF_NAME_BY_POLICY_TYPE: Record<CreatableTimeOffPolicyType, string> = {\n vacation: 'Vacation Hours',\n sick: 'Sick Hours',\n}\n\nfunction extractCarryOverBalance(\n employee: EmployeeItem | undefined,\n policyType: CreatableTimeOffPolicyType,\n): string | undefined {\n if (!employee) return undefined\n const targetName = PAID_TIME_OFF_NAME_BY_POLICY_TYPE[policyType]\n const matching = employee.eligiblePaidTimeOff?.find(pto => pto.name === targetName)\n const balance = matching?.accrualBalance\n return balance && balance.length > 0 ? balance : undefined\n}\n\nfunction deriveCarryOverBalances(\n employees: EmployeeItem[],\n policyType: CreatableTimeOffPolicyType,\n): Record<string, string> {\n const map: Record<string, string> = {}\n for (const employee of employees) {\n const balance = extractCarryOverBalance(employee, policyType)\n if (balance) {\n map[employee.uuid] = balance\n }\n }\n return map\n}\n\n/** @internal */\nexport function SelectEmployeesTimeOff(props: SelectEmployeesTimeOffProps) {\n if (props.mode === 'wizard') {\n return <SelectEmployeesTimeOffInner {...props} mode=\"wizard\" />\n }\n return <StandaloneLoader {...props} />\n}\n\nfunction StandaloneLoader(props: SelectEmployeesTimeOffProps) {\n const { data: policyResponse } = useTimeOffPoliciesGetSuspense({\n timeOffPolicyUuid: props.policyId,\n })\n const policy = policyResponse.timeOffPolicy\n if (!policy) throw new Error('Unexpected response: missing timeOffPolicy')\n\n const isUnlimited = policy.accrualMethod === 'unlimited'\n\n const existingAssigneeUuids = useMemo(() => {\n const set = new Set<string>()\n for (const e of policy.employees) {\n if (e.uuid) set.add(e.uuid)\n }\n return set\n }, [policy.employees])\n\n return (\n <SelectEmployeesTimeOffInner\n {...props}\n mode=\"standalone\"\n existingAssigneeUuids={existingAssigneeUuids}\n hideBalances={isUnlimited}\n />\n )\n}\n\ninterface InnerProps extends SelectEmployeesTimeOffProps {\n existingAssigneeUuids?: Set<string>\n hideBalances?: boolean\n}\n\nfunction SelectEmployeesTimeOffInner({\n companyId,\n policyId,\n policyType,\n mode = 'standalone',\n existingAssigneeUuids,\n hideBalances = false,\n}: InnerProps) {\n useI18n('Company.TimeOff.SelectEmployees')\n const { t } = useTranslation('Company.TimeOff.SelectEmployees')\n const { onEvent, baseSubmitHandler } = useBase()\n const queryClient = useQueryClient()\n const {\n filteredEmployees,\n eligibleEmployees,\n selectedUuids,\n searchValue,\n pagination,\n isFetching,\n handleSelect,\n handleSelectAll,\n handleSearchChange,\n handleSearchClear,\n } = useSelectEmployeesData(companyId, existingAssigneeUuids)\n\n // Captures the full Employee record at the moment a row is selected so\n // their record is still available for the reassignment-warning check at\n // submit time even if the user has since searched/paginated the row out of\n // view. Without this, `selectedUuids` would point at UUIDs we no longer\n // have data for.\n const selectedEmployeesRef = useRef(new Map<string, EmployeeItem>())\n\n const handleSelectWithCapture = useCallback(\n (item: EmployeeItem, checked: boolean) => {\n if (checked) {\n selectedEmployeesRef.current.set(item.uuid, item)\n } else {\n selectedEmployeesRef.current.delete(item.uuid)\n }\n handleSelect(item, checked)\n },\n [handleSelect],\n )\n\n const handleSelectAllWithCapture = useCallback(\n (checked: boolean) => {\n // Mirror the hook's scope: full search-filtered list across pages, not\n // just the visible page slice. Keeps `selectedEmployeesRef` in sync so\n // off-page selections survive a submit (carry-over balances, etc.).\n const scope = searchValue\n ? eligibleEmployees.filter(employee => matchesEmployeeSearch(employee, searchValue))\n : eligibleEmployees\n for (const item of scope) {\n if (checked) {\n selectedEmployeesRef.current.set(item.uuid, item)\n } else {\n selectedEmployeesRef.current.delete(item.uuid)\n }\n }\n handleSelectAll(checked)\n },\n [eligibleEmployees, searchValue, handleSelectAll],\n )\n\n const carryOverBalances = useMemo(\n () => deriveCarryOverBalances(eligibleEmployees, policyType),\n [eligibleEmployees, policyType],\n )\n\n const [balances, setBalances] = useState<Record<string, string>>({})\n\n const effectiveBalances = useMemo<Record<string, string>>(\n () => ({ ...carryOverBalances, ...balances }),\n [carryOverBalances, balances],\n )\n\n const { mutateAsync: addEmployees, isPending: isAddPending } =\n useTimeOffPoliciesAddEmployeesMutation()\n const { mutateAsync: updatePolicy, isPending: isUpdatePending } =\n useTimeOffPoliciesUpdateMutation()\n const isSubmitPending = isAddPending || isUpdatePending\n\n const handleBalanceChange = useCallback((uuid: string, value: string) => {\n setBalances(prev => ({ ...prev, [uuid]: value }))\n }, [])\n\n const buildAddPayload = useCallback(\n (uuids: string[]) =>\n uuids.map(uuid => {\n if (hideBalances) return { uuid, balance: '0' }\n const userValue = balances[uuid]\n const carryOver = extractCarryOverBalance(\n selectedEmployeesRef.current.get(uuid),\n policyType,\n )\n const balance = userValue && userValue.length > 0 ? userValue : (carryOver ?? '0')\n return { uuid, balance }\n }),\n [hideBalances, balances, policyType],\n )\n\n const submitAdd = useCallback(\n async (toAdd: string[]) => {\n await baseSubmitHandler({}, async () => {\n let policyResult: unknown\n if (toAdd.length > 0) {\n const response = await addEmployees({\n request: {\n timeOffPolicyUuid: policyId,\n requestBody: { employees: buildAddPayload(toAdd) },\n },\n })\n policyResult = response.timeOffPolicy\n }\n if (mode === 'wizard' && policyResult) {\n const version =\n typeof policyResult === 'object' && 'version' in policyResult\n ? String((policyResult as { version: unknown }).version)\n : ''\n try {\n await updatePolicy({\n request: {\n timeOffPolicyUuid: policyId,\n requestBody: { complete: true, version },\n },\n })\n } catch (err) {\n if (err instanceof UnprocessableEntityError) {\n const apiMessage = err.errors[0]?.message ?? ''\n throw new SDKInternalError(\n t('errors.completePolicyFailed', { details: apiMessage }),\n 'api_error',\n )\n }\n throw err\n }\n }\n void queryClient.invalidateQueries({\n queryKey: ['@gusto/embedded-api-v-2025-11-15', 'timeOffPolicies', 'get'],\n })\n onEvent(componentEvents.TIME_OFF_ADD_EMPLOYEES_DONE, policyResult)\n })\n },\n [\n mode,\n baseSubmitHandler,\n addEmployees,\n buildAddPayload,\n updatePolicy,\n policyId,\n queryClient,\n onEvent,\n t,\n ],\n )\n\n const handleContinue = useCallback(async () => {\n const toAdd = [...selectedUuids]\n\n if (toAdd.length === 0 && mode === 'standalone') {\n onEvent(componentEvents.TIME_OFF_ADD_EMPLOYEES_DONE)\n return\n }\n\n await submitAdd(toAdd)\n }, [mode, selectedUuids, onEvent, submitAdd])\n\n const handleBack = useCallback(() => {\n onEvent(componentEvents.TIME_OFF_ADD_EMPLOYEES_BACK)\n }, [onEvent])\n\n return (\n <SelectEmployeesPresentation\n employees={filteredEmployees}\n selectedUuids={selectedUuids}\n searchValue={searchValue}\n onSelect={handleSelectWithCapture}\n onSelectAll={handleSelectAllWithCapture}\n onSearchChange={handleSearchChange}\n onSearchClear={handleSearchClear}\n onBack={handleBack}\n onContinue={handleContinue}\n balances={hideBalances ? undefined : effectiveBalances}\n onBalanceChange={hideBalances ? undefined : handleBalanceChange}\n pagination={pagination}\n isFetching={isFetching}\n isPending={isSubmitPending}\n />\n )\n}\n"],"names":["PAID_TIME_OFF_NAME_BY_POLICY_TYPE","extractCarryOverBalance","employee","policyType","targetName","balance","pto","deriveCarryOverBalances","employees","map","SelectEmployeesTimeOff","props","jsx","SelectEmployeesTimeOffInner","StandaloneLoader","policyResponse","useTimeOffPoliciesGetSuspense","policy","isUnlimited","existingAssigneeUuids","useMemo","set","e","companyId","policyId","mode","hideBalances","useI18n","t","useTranslation","onEvent","baseSubmitHandler","useBase","queryClient","useQueryClient","filteredEmployees","eligibleEmployees","selectedUuids","searchValue","pagination","isFetching","handleSelect","handleSelectAll","handleSearchChange","handleSearchClear","useSelectEmployeesData","selectedEmployeesRef","useRef","handleSelectWithCapture","useCallback","item","checked","handleSelectAllWithCapture","scope","matchesEmployeeSearch","carryOverBalances","balances","setBalances","useState","effectiveBalances","addEmployees","isAddPending","useTimeOffPoliciesAddEmployeesMutation","updatePolicy","isUpdatePending","useTimeOffPoliciesUpdateMutation","isSubmitPending","handleBalanceChange","uuid","value","prev","buildAddPayload","uuids","userValue","carryOver","submitAdd","toAdd","policyResult","version","err","UnprocessableEntityError","apiMessage","SDKInternalError","componentEvents","handleContinue","handleBack","SelectEmployeesPresentation"],"mappings":"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"}
|
package/dist/components/TimeOff/TimeOffManagement/SelectEmployees/useSelectEmployeesData.d.ts
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import { EmployeeItem } from './SelectEmployeesPresentationTypes';
|
|
2
|
+
/** @internal */
|
|
2
3
|
export declare function isStartedByToday(hireDate: string | undefined): boolean;
|
|
4
|
+
/** @internal */
|
|
3
5
|
export declare function matchesEmployeeSearch(employee: EmployeeItem, query: string): boolean;
|
|
6
|
+
/** @internal */
|
|
4
7
|
export declare function useSelectEmployeesData(companyId: string, excludeUuids?: Set<string>): {
|
|
5
8
|
filteredEmployees: EmployeeItem[];
|
|
6
9
|
eligibleEmployees: EmployeeItem[];
|
package/dist/components/TimeOff/TimeOffManagement/SelectEmployees/useSelectEmployeesData.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useSelectEmployeesData.js","sources":["../../../../../src/components/TimeOff/TimeOffManagement/SelectEmployees/useSelectEmployeesData.ts"],"sourcesContent":["import { useCallback, useMemo, useState } from 'react'\nimport {\n buildEmployeesListQuery,\n useEmployeesListSuspense,\n} from '@gusto/embedded-api-v-2025-11-15/react-query/employeesList'\nimport { useGustoEmbeddedContext } from '@gusto/embedded-api-v-2025-11-15/react-query/_context'\nimport { useSuspenseQueries } from '@tanstack/react-query'\nimport { Include } from '@gusto/embedded-api-v-2025-11-15/models/operations/getv1companiescompanyidemployees'\nimport type { PaidTimeOff } from '@gusto/embedded-api-v-2025-11-15/models/components/paidtimeoff'\nimport type { EmployeeItem } from './SelectEmployeesPresentationTypes'\nimport { useClientPagination } from '@/hooks/useClientPagination/useClientPagination'\n\nconst SERVER_MAX_PER_PAGE = 100\n\n// Employees whose primary job's hire_date is in the future are rejected by\n// `POST /time_off_policies/:uuid/add_employees` as \"ineligible\" with no\n// per-uuid reason in the response. We can detect this from the employees\n// list response, so we drop them client-side to prevent the error.\nexport function isStartedByToday(hireDate: string | undefined): boolean {\n if (!hireDate) return false\n const today = new Date().toISOString().slice(0, 10)\n return hireDate <= today\n}\n\n// Single source of truth for the search predicate so the client-pagination\n// hook and the select-all handler agree on what's \"in scope\" for a query.\nexport function matchesEmployeeSearch(employee: EmployeeItem, query: string): boolean {\n return `${employee.firstName ?? ''} ${employee.lastName ?? ''} ${employee.department ?? ''}`\n .toLowerCase()\n .includes(query.toLowerCase())\n}\n\nexport function useSelectEmployeesData(companyId: string, excludeUuids?: Set<string>) {\n const gustoClient = useGustoEmbeddedContext()\n const [selectedUuids, setSelectedUuids] = useState<Set<string>>(() => new Set())\n\n // Fetch the full employees list up front so filter, search, and pagination\n // can all be applied client-side. include: all_compensations is required to\n // populate eligiblePaidTimeOff, which carries each employee's current\n // balance on their existing time-off policies — used to pre-fill carry-over\n // balances for selection.\n const { data: firstPage, isFetching: isFirstPageFetching } = useEmployeesListSuspense({\n companyId,\n terminated: false,\n page: 1,\n per: SERVER_MAX_PER_PAGE,\n include: [Include.AllCompensations],\n })\n\n const totalServerPages = Number(firstPage.httpMeta.response.headers.get('x-total-pages') ?? 1)\n\n // For each additional server page we fire a suspense query in parallel.\n // No explicit concurrency cap: typical embedded customers are <100\n // employees (one server page, zero extra requests). For larger companies\n // the browser's per-origin connection limit (~6) acts as the natural\n // ceiling. If this flow ever needs to support thousands of employees,\n // reconsider — either a server-side eligibility filter or a paginated\n // fetch-as-you-scroll strategy would be the right escape hatches.\n const restPageResults = useSuspenseQueries({\n queries: Array.from({ length: Math.max(0, totalServerPages - 1) }, (_, i) =>\n buildEmployeesListQuery(gustoClient, {\n companyId,\n terminated: false,\n page: i + 2,\n per: SERVER_MAX_PER_PAGE,\n include: [Include.AllCompensations],\n }),\n ),\n })\n\n const eligibleEmployees = useMemo<EmployeeItem[]>(() => {\n const showEmployees = [\n ...(firstPage.showEmployees ?? []),\n ...restPageResults.flatMap(r => r.data.showEmployees ?? []),\n ]\n return showEmployees\n .filter(e => isStartedByToday((e.jobs?.find(job => job.primary) ?? e.jobs?.[0])?.hireDate))\n .filter(e => !excludeUuids?.has(e.uuid))\n .map(e => ({\n uuid: e.uuid,\n firstName: e.firstName,\n lastName: e.lastName,\n jobTitle: e.jobs?.find(job => job.primary)?.title ?? e.jobs?.[0]?.title ?? null,\n department: e.department ?? null,\n eligiblePaidTimeOff: e.eligiblePaidTimeOff as PaidTimeOff[] | undefined,\n }))\n }, [firstPage.showEmployees, restPageResults, excludeUuids])\n\n const {\n data: filteredEmployees,\n pagination,\n searchValue,\n actions: paginationActions,\n } = useClientPagination(eligibleEmployees, {\n searchPredicate: matchesEmployeeSearch,\n defaultItemsPerPage: 25,\n })\n\n const isRestFetching = restPageResults.some(r => r.isFetching)\n const isFetching = isFirstPageFetching || isRestFetching\n\n const handleSelect = useCallback((item: EmployeeItem, checked: boolean) => {\n setSelectedUuids(prev => {\n const next = new Set(prev)\n if (checked) next.add(item.uuid)\n else next.delete(item.uuid)\n return next\n })\n }, [])\n\n // Select-all scopes to the full search-filtered list (every page), not just\n // the rendered page slice that DataView passes in. This matches the user\n // expectation that \"select all\" actually means \"all\" — including any\n // employees the current pagination has scrolled off-screen. The second\n // argument from DataView (the visible page slice) is intentionally ignored.\n const handleSelectAll = useCallback(\n (checked: boolean, _visibleItems?: EmployeeItem[]) => {\n const scope = searchValue\n ? eligibleEmployees.filter(employee => matchesEmployeeSearch(employee, searchValue))\n : eligibleEmployees\n setSelectedUuids(prev => {\n const next = new Set(prev)\n for (const item of scope) {\n if (checked) next.add(item.uuid)\n else next.delete(item.uuid)\n }\n return next\n })\n },\n [eligibleEmployees, searchValue],\n )\n\n return {\n filteredEmployees,\n eligibleEmployees,\n eligibleCount: eligibleEmployees.length,\n selectedUuids,\n searchValue,\n pagination,\n isFetching,\n handleSelect,\n handleSelectAll,\n handleSearchChange: paginationActions.onSearchChange,\n handleSearchClear: paginationActions.onSearchClear,\n }\n}\n"],"names":["SERVER_MAX_PER_PAGE","isStartedByToday","hireDate","today","matchesEmployeeSearch","employee","query","useSelectEmployeesData","companyId","excludeUuids","gustoClient","useGustoEmbeddedContext","selectedUuids","setSelectedUuids","useState","firstPage","isFirstPageFetching","useEmployeesListSuspense","Include","totalServerPages","restPageResults","useSuspenseQueries","_","i","buildEmployeesListQuery","eligibleEmployees","useMemo","r","job","filteredEmployees","pagination","searchValue","paginationActions","useClientPagination","isRestFetching","isFetching","handleSelect","useCallback","item","checked","prev","next","handleSelectAll","_visibleItems","scope"],"mappings":";;;;;;AAYA,MAAMA,IAAsB;
|
|
1
|
+
{"version":3,"file":"useSelectEmployeesData.js","sources":["../../../../../src/components/TimeOff/TimeOffManagement/SelectEmployees/useSelectEmployeesData.ts"],"sourcesContent":["import { useCallback, useMemo, useState } from 'react'\nimport {\n buildEmployeesListQuery,\n useEmployeesListSuspense,\n} from '@gusto/embedded-api-v-2025-11-15/react-query/employeesList'\nimport { useGustoEmbeddedContext } from '@gusto/embedded-api-v-2025-11-15/react-query/_context'\nimport { useSuspenseQueries } from '@tanstack/react-query'\nimport { Include } from '@gusto/embedded-api-v-2025-11-15/models/operations/getv1companiescompanyidemployees'\nimport type { PaidTimeOff } from '@gusto/embedded-api-v-2025-11-15/models/components/paidtimeoff'\nimport type { EmployeeItem } from './SelectEmployeesPresentationTypes'\nimport { useClientPagination } from '@/hooks/useClientPagination/useClientPagination'\n\nconst SERVER_MAX_PER_PAGE = 100\n\n// Employees whose primary job's hire_date is in the future are rejected by\n// `POST /time_off_policies/:uuid/add_employees` as \"ineligible\" with no\n// per-uuid reason in the response. We can detect this from the employees\n// list response, so we drop them client-side to prevent the error.\n/** @internal */\nexport function isStartedByToday(hireDate: string | undefined): boolean {\n if (!hireDate) return false\n const today = new Date().toISOString().slice(0, 10)\n return hireDate <= today\n}\n\n// Single source of truth for the search predicate so the client-pagination\n// hook and the select-all handler agree on what's \"in scope\" for a query.\n/** @internal */\nexport function matchesEmployeeSearch(employee: EmployeeItem, query: string): boolean {\n return `${employee.firstName ?? ''} ${employee.lastName ?? ''} ${employee.department ?? ''}`\n .toLowerCase()\n .includes(query.toLowerCase())\n}\n\n/** @internal */\nexport function useSelectEmployeesData(companyId: string, excludeUuids?: Set<string>) {\n const gustoClient = useGustoEmbeddedContext()\n const [selectedUuids, setSelectedUuids] = useState<Set<string>>(() => new Set())\n\n // Fetch the full employees list up front so filter, search, and pagination\n // can all be applied client-side. include: all_compensations is required to\n // populate eligiblePaidTimeOff, which carries each employee's current\n // balance on their existing time-off policies — used to pre-fill carry-over\n // balances for selection.\n const { data: firstPage, isFetching: isFirstPageFetching } = useEmployeesListSuspense({\n companyId,\n terminated: false,\n page: 1,\n per: SERVER_MAX_PER_PAGE,\n include: [Include.AllCompensations],\n })\n\n const totalServerPages = Number(firstPage.httpMeta.response.headers.get('x-total-pages') ?? 1)\n\n // For each additional server page we fire a suspense query in parallel.\n // No explicit concurrency cap: typical embedded customers are <100\n // employees (one server page, zero extra requests). For larger companies\n // the browser's per-origin connection limit (~6) acts as the natural\n // ceiling. If this flow ever needs to support thousands of employees,\n // reconsider — either a server-side eligibility filter or a paginated\n // fetch-as-you-scroll strategy would be the right escape hatches.\n const restPageResults = useSuspenseQueries({\n queries: Array.from({ length: Math.max(0, totalServerPages - 1) }, (_, i) =>\n buildEmployeesListQuery(gustoClient, {\n companyId,\n terminated: false,\n page: i + 2,\n per: SERVER_MAX_PER_PAGE,\n include: [Include.AllCompensations],\n }),\n ),\n })\n\n const eligibleEmployees = useMemo<EmployeeItem[]>(() => {\n const showEmployees = [\n ...(firstPage.showEmployees ?? []),\n ...restPageResults.flatMap(r => r.data.showEmployees ?? []),\n ]\n return showEmployees\n .filter(e => isStartedByToday((e.jobs?.find(job => job.primary) ?? e.jobs?.[0])?.hireDate))\n .filter(e => !excludeUuids?.has(e.uuid))\n .map(e => ({\n uuid: e.uuid,\n firstName: e.firstName,\n lastName: e.lastName,\n jobTitle: e.jobs?.find(job => job.primary)?.title ?? e.jobs?.[0]?.title ?? null,\n department: e.department ?? null,\n eligiblePaidTimeOff: e.eligiblePaidTimeOff as PaidTimeOff[] | undefined,\n }))\n }, [firstPage.showEmployees, restPageResults, excludeUuids])\n\n const {\n data: filteredEmployees,\n pagination,\n searchValue,\n actions: paginationActions,\n } = useClientPagination(eligibleEmployees, {\n searchPredicate: matchesEmployeeSearch,\n defaultItemsPerPage: 25,\n })\n\n const isRestFetching = restPageResults.some(r => r.isFetching)\n const isFetching = isFirstPageFetching || isRestFetching\n\n const handleSelect = useCallback((item: EmployeeItem, checked: boolean) => {\n setSelectedUuids(prev => {\n const next = new Set(prev)\n if (checked) next.add(item.uuid)\n else next.delete(item.uuid)\n return next\n })\n }, [])\n\n // Select-all scopes to the full search-filtered list (every page), not just\n // the rendered page slice that DataView passes in. This matches the user\n // expectation that \"select all\" actually means \"all\" — including any\n // employees the current pagination has scrolled off-screen. The second\n // argument from DataView (the visible page slice) is intentionally ignored.\n const handleSelectAll = useCallback(\n (checked: boolean, _visibleItems?: EmployeeItem[]) => {\n const scope = searchValue\n ? eligibleEmployees.filter(employee => matchesEmployeeSearch(employee, searchValue))\n : eligibleEmployees\n setSelectedUuids(prev => {\n const next = new Set(prev)\n for (const item of scope) {\n if (checked) next.add(item.uuid)\n else next.delete(item.uuid)\n }\n return next\n })\n },\n [eligibleEmployees, searchValue],\n )\n\n return {\n filteredEmployees,\n eligibleEmployees,\n eligibleCount: eligibleEmployees.length,\n selectedUuids,\n searchValue,\n pagination,\n isFetching,\n handleSelect,\n handleSelectAll,\n handleSearchChange: paginationActions.onSearchChange,\n handleSearchClear: paginationActions.onSearchClear,\n }\n}\n"],"names":["SERVER_MAX_PER_PAGE","isStartedByToday","hireDate","today","matchesEmployeeSearch","employee","query","useSelectEmployeesData","companyId","excludeUuids","gustoClient","useGustoEmbeddedContext","selectedUuids","setSelectedUuids","useState","firstPage","isFirstPageFetching","useEmployeesListSuspense","Include","totalServerPages","restPageResults","useSuspenseQueries","_","i","buildEmployeesListQuery","eligibleEmployees","useMemo","r","job","filteredEmployees","pagination","searchValue","paginationActions","useClientPagination","isRestFetching","isFetching","handleSelect","useCallback","item","checked","prev","next","handleSelectAll","_visibleItems","scope"],"mappings":"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"}
|
|
@@ -1,11 +1,20 @@
|
|
|
1
1
|
import { SDKError } from '../../../types/sdkError';
|
|
2
|
+
/** @internal */
|
|
2
3
|
export interface EditEmployeeBalanceModalProps {
|
|
4
|
+
/** Whether the modal is open. */
|
|
3
5
|
isOpen: boolean;
|
|
6
|
+
/** Called when the modal requests to close. */
|
|
4
7
|
onClose: () => void;
|
|
8
|
+
/** Display name of the employee whose balance is being edited. */
|
|
5
9
|
employeeName: string;
|
|
10
|
+
/** Current balance in hours. */
|
|
6
11
|
currentBalance: number;
|
|
12
|
+
/** Called with the new balance when the user confirms the change. */
|
|
7
13
|
onConfirm: (newBalance: number) => void;
|
|
14
|
+
/** Whether the confirmation is in flight. */
|
|
8
15
|
isPending: boolean;
|
|
16
|
+
/** Error to display in the modal, if any. */
|
|
9
17
|
error?: SDKError | null;
|
|
10
18
|
}
|
|
19
|
+
/** @internal */
|
|
11
20
|
export declare function EditEmployeeBalanceModal({ isOpen, onClose, employeeName, currentBalance, onConfirm, isPending, error, }: EditEmployeeBalanceModalProps): import("react").JSX.Element;
|