@gusto/embedded-react-sdk 0.55.7 → 0.56.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (379) hide show
  1. package/CHANGELOG.md +63 -0
  2. package/dist/components/Common/FadeIn/FadeIn.module.scss.js +4 -4
  3. package/dist/components/Common/FieldCaption/FieldCaption.js +22 -18
  4. package/dist/components/Common/FieldCaption/FieldCaption.js.map +1 -1
  5. package/dist/components/Common/Flex/Flex.js +17 -15
  6. package/dist/components/Common/Flex/Flex.js.map +1 -1
  7. package/dist/components/Common/UI/Breadcrumbs/Breadcrumbs.js +1 -1
  8. package/dist/components/Common/UI/FileInput/FileInput.js +1 -1
  9. package/dist/components/Common/UI/Heading/Heading.module.scss.js +7 -7
  10. package/dist/components/Common/UI/Menu/MenuTypes.js.map +1 -1
  11. package/dist/components/Common/UI/MultiSelectComboBox/MultiSelectComboBox.js +43 -42
  12. package/dist/components/Common/UI/MultiSelectComboBox/MultiSelectComboBox.js.map +1 -1
  13. package/dist/components/Common/UI/ProgressBar/ProgressBar.js +4 -4
  14. package/dist/components/Company/AssignSignatory/CreateSignatory/useCreateSignatory.js +5 -3
  15. package/dist/components/Company/AssignSignatory/CreateSignatory/useCreateSignatory.js.map +1 -1
  16. package/dist/components/Company/AssignSignatory/InviteSignatory/useInviteSignatory.js +5 -3
  17. package/dist/components/Company/AssignSignatory/InviteSignatory/useInviteSignatory.js.map +1 -1
  18. package/dist/components/Company/AssignSignatory/useAssignSignatory.js +7 -5
  19. package/dist/components/Company/AssignSignatory/useAssignSignatory.js.map +1 -1
  20. package/dist/components/Company/BankAccount/BankAccountForm/context.js +5 -3
  21. package/dist/components/Company/BankAccount/BankAccountForm/context.js.map +1 -1
  22. package/dist/components/Company/DocumentSigner/DocumentList/useDocumentList.js +5 -3
  23. package/dist/components/Company/DocumentSigner/DocumentList/useDocumentList.js.map +1 -1
  24. package/dist/components/Company/DocumentSigner/SignatureForm/SignatureForm.js +27 -27
  25. package/dist/components/Company/DocumentSigner/SignatureForm/SignatureForm.js.map +1 -1
  26. package/dist/components/Company/FederalTaxes/useFederalTaxes.js +10 -8
  27. package/dist/components/Company/FederalTaxes/useFederalTaxes.js.map +1 -1
  28. package/dist/components/Company/Industry/Context.js +8 -6
  29. package/dist/components/Company/Industry/Context.js.map +1 -1
  30. package/dist/components/Company/Locations/LocationForm/useLocationForm.js +5 -3
  31. package/dist/components/Company/Locations/LocationForm/useLocationForm.js.map +1 -1
  32. package/dist/components/Company/Locations/LocationsList/useLocationsList.js +5 -3
  33. package/dist/components/Company/Locations/LocationsList/useLocationsList.js.map +1 -1
  34. package/dist/components/Company/OnboardingOverview/context.js +5 -3
  35. package/dist/components/Company/OnboardingOverview/context.js.map +1 -1
  36. package/dist/components/Company/PaySchedule/PaySchedule.js +45 -30
  37. package/dist/components/Company/PaySchedule/PaySchedule.js.map +1 -1
  38. package/dist/components/Company/PaySchedule/PayScheduleComponents.js +12 -11
  39. package/dist/components/Company/PaySchedule/PayScheduleComponents.js.map +1 -1
  40. package/dist/components/Company/PaySchedule/PayScheduleForm.js +72 -55
  41. package/dist/components/Company/PaySchedule/PayScheduleForm.js.map +1 -1
  42. package/dist/components/Company/PaySchedule/shared/usePayScheduleForm/fields.js +24 -20
  43. package/dist/components/Company/PaySchedule/shared/usePayScheduleForm/fields.js.map +1 -1
  44. package/dist/components/Company/PaySchedule/shared/usePayScheduleForm/payScheduleSchema.js +33 -29
  45. package/dist/components/Company/PaySchedule/shared/usePayScheduleForm/payScheduleSchema.js.map +1 -1
  46. package/dist/components/Company/PaySchedule/shared/usePayScheduleForm/usePayScheduleForm.js +131 -115
  47. package/dist/components/Company/PaySchedule/shared/usePayScheduleForm/usePayScheduleForm.js.map +1 -1
  48. package/dist/components/Company/StateTaxes/StateTaxesForm/context.js +5 -3
  49. package/dist/components/Company/StateTaxes/StateTaxesForm/context.js.map +1 -1
  50. package/dist/components/Company/StateTaxes/StateTaxesList/context.js +5 -3
  51. package/dist/components/Company/StateTaxes/StateTaxesList/context.js.map +1 -1
  52. package/dist/components/Company/StateTaxes/TaxRateManagement/context.js +5 -3
  53. package/dist/components/Company/StateTaxes/TaxRateManagement/context.js.map +1 -1
  54. package/dist/components/Contractor/ContractorList/management/ManagementContractorList.js +31 -29
  55. package/dist/components/Contractor/ContractorList/management/ManagementContractorList.js.map +1 -1
  56. package/dist/components/Contractor/ContractorList/management/ManagementContractorListView.js +110 -109
  57. package/dist/components/Contractor/ContractorList/management/ManagementContractorListView.js.map +1 -1
  58. package/dist/components/Contractor/ContractorList/onboarding/ContractorList.js +21 -19
  59. package/dist/components/Contractor/ContractorList/onboarding/ContractorList.js.map +1 -1
  60. package/dist/components/Contractor/ContractorList/onboarding/ContractorListView.js +56 -55
  61. package/dist/components/Contractor/ContractorList/onboarding/ContractorListView.js.map +1 -1
  62. package/dist/components/Contractor/Dashboard/Dashboard.js +34 -33
  63. package/dist/components/Contractor/Dashboard/Dashboard.js.map +1 -1
  64. package/dist/components/Contractor/Payments/CreateHistoricalPayment/CreateHistoricalPayment.js +117 -115
  65. package/dist/components/Contractor/Payments/CreateHistoricalPayment/CreateHistoricalPayment.js.map +1 -1
  66. package/dist/components/Contractor/Payments/CreatePayment/CreatePayment.js +77 -75
  67. package/dist/components/Contractor/Payments/CreatePayment/CreatePayment.js.map +1 -1
  68. package/dist/components/Contractor/Payments/CreatePayment/CreatePaymentPresentation.js +44 -43
  69. package/dist/components/Contractor/Payments/CreatePayment/CreatePaymentPresentation.js.map +1 -1
  70. package/dist/components/Contractor/Payments/CreatePayment/PreviewPresentation.js +40 -39
  71. package/dist/components/Contractor/Payments/CreatePayment/PreviewPresentation.js.map +1 -1
  72. package/dist/components/Contractor/Payments/HistoricalPaymentSummary/HistoricalPaymentSummary.js +35 -29
  73. package/dist/components/Contractor/Payments/HistoricalPaymentSummary/HistoricalPaymentSummary.js.map +1 -1
  74. package/dist/components/Contractor/Payments/PaymentHistory/PaymentHistory.js +21 -20
  75. package/dist/components/Contractor/Payments/PaymentHistory/PaymentHistory.js.map +1 -1
  76. package/dist/components/Contractor/Payments/PaymentHistory/PaymentHistoryPresentation.js +41 -40
  77. package/dist/components/Contractor/Payments/PaymentHistory/PaymentHistoryPresentation.js.map +1 -1
  78. package/dist/components/Contractor/Payments/PaymentStatement/PaymentStatement.js +21 -20
  79. package/dist/components/Contractor/Payments/PaymentStatement/PaymentStatement.js.map +1 -1
  80. package/dist/components/Contractor/Payments/PaymentStatement/PaymentStatementPresentation.js +33 -32
  81. package/dist/components/Contractor/Payments/PaymentStatement/PaymentStatementPresentation.js.map +1 -1
  82. package/dist/components/Contractor/Payments/PaymentsList/PaymentsList.js +80 -78
  83. package/dist/components/Contractor/Payments/PaymentsList/PaymentsList.js.map +1 -1
  84. package/dist/components/Contractor/Payments/PaymentsList/PaymentsListPresentation.js +44 -43
  85. package/dist/components/Contractor/Payments/PaymentsList/PaymentsListPresentation.js.map +1 -1
  86. package/dist/components/Contractor/Submit/Submit.js +113 -105
  87. package/dist/components/Contractor/Submit/Submit.js.map +1 -1
  88. package/dist/components/Contractor/Submit/SubmitDone.js +11 -11
  89. package/dist/components/Contractor/Submit/SubmitDone.js.map +1 -1
  90. package/dist/components/Employee/Compensation/management/CompensationAddJobForm/CompensationAddJobForm.js +20 -18
  91. package/dist/components/Employee/Compensation/management/CompensationAddJobForm/CompensationAddJobForm.js.map +1 -1
  92. package/dist/components/Employee/Compensation/management/CompensationEditForm/CompensationEditForm.js +18 -15
  93. package/dist/components/Employee/Compensation/management/CompensationEditForm/CompensationEditForm.js.map +1 -1
  94. package/dist/components/Employee/Dashboard/Dashboard.js +33 -32
  95. package/dist/components/Employee/Dashboard/Dashboard.js.map +1 -1
  96. package/dist/components/Employee/Deductions/management/DeductionsEditForm/DeductionsEditForm.js +21 -19
  97. package/dist/components/Employee/Deductions/management/DeductionsEditForm/DeductionsEditForm.js.map +1 -1
  98. package/dist/components/Employee/Documents/management/DocumentManager.js +34 -26
  99. package/dist/components/Employee/Documents/management/DocumentManager.js.map +1 -1
  100. package/dist/components/Employee/Documents/onboarding/DocumentSigner/DocumentList/useDocumentList.js +5 -3
  101. package/dist/components/Employee/Documents/onboarding/DocumentSigner/DocumentList/useDocumentList.js.map +1 -1
  102. package/dist/components/Employee/Documents/onboarding/DocumentSigner/EmploymentEligibility/EmploymentEligibility.js +30 -29
  103. package/dist/components/Employee/Documents/onboarding/DocumentSigner/EmploymentEligibility/EmploymentEligibility.js.map +1 -1
  104. package/dist/components/Employee/Documents/onboarding/DocumentSigner/EmploymentEligibility/EmploymentEligibilityPresentation.js +54 -53
  105. package/dist/components/Employee/Documents/onboarding/DocumentSigner/EmploymentEligibility/EmploymentEligibilityPresentation.js.map +1 -1
  106. package/dist/components/Employee/Documents/onboarding/EmployeeDocuments/EmployeeDocuments.js +29 -28
  107. package/dist/components/Employee/Documents/onboarding/EmployeeDocuments/EmployeeDocuments.js.map +1 -1
  108. package/dist/components/Employee/Documents/onboarding/EmployeeDocuments/EmployeeDocumentsPresentation.js +16 -15
  109. package/dist/components/Employee/Documents/onboarding/EmployeeDocuments/EmployeeDocumentsPresentation.js.map +1 -1
  110. package/dist/components/Employee/EmployeeList/management/ManagementEmployeeList.js +27 -25
  111. package/dist/components/Employee/EmployeeList/management/ManagementEmployeeList.js.map +1 -1
  112. package/dist/components/Employee/EmployeeList/management/ManagementEmployeeListView.js +121 -111
  113. package/dist/components/Employee/EmployeeList/management/ManagementEmployeeListView.js.map +1 -1
  114. package/dist/components/Employee/EmployeeList/onboarding/EmployeeList.js +22 -20
  115. package/dist/components/Employee/EmployeeList/onboarding/EmployeeList.js.map +1 -1
  116. package/dist/components/Employee/EmployeeList/onboarding/EmployeeListView.js +24 -23
  117. package/dist/components/Employee/EmployeeList/onboarding/EmployeeListView.js.map +1 -1
  118. package/dist/components/Employee/EmployeeList/shared/useEmployeeList.js +52 -43
  119. package/dist/components/Employee/EmployeeList/shared/useEmployeeList.js.map +1 -1
  120. package/dist/components/Employee/EmployeeListFlow/employeeListStateMachine.js +29 -26
  121. package/dist/components/Employee/EmployeeListFlow/employeeListStateMachine.js.map +1 -1
  122. package/dist/components/Employee/FederalTaxes/shared/FederalTaxesView.js +1 -1
  123. package/dist/components/Employee/HomeAddress/management/HomeAddressEditForm.js +19 -17
  124. package/dist/components/Employee/HomeAddress/management/HomeAddressEditForm.js.map +1 -1
  125. package/dist/components/Employee/HomeAddress/management/HomeAddressView.js +79 -78
  126. package/dist/components/Employee/HomeAddress/management/HomeAddressView.js.map +1 -1
  127. package/dist/components/Employee/PaymentMethod/management/PaymentMethodBankForm.js +4 -4
  128. package/dist/components/Employee/PaymentMethod/onboarding/BankForm.js +4 -4
  129. package/dist/components/Employee/Terminations/TerminateEmployee/TerminateEmployee.js +40 -39
  130. package/dist/components/Employee/Terminations/TerminateEmployee/TerminateEmployee.js.map +1 -1
  131. package/dist/components/Employee/Terminations/TerminateEmployee/TerminateEmployeePresentation.js +31 -30
  132. package/dist/components/Employee/Terminations/TerminateEmployee/TerminateEmployeePresentation.js.map +1 -1
  133. package/dist/components/Employee/Terminations/TerminationSummary/TerminationSummary.js +43 -41
  134. package/dist/components/Employee/Terminations/TerminationSummary/TerminationSummary.js.map +1 -1
  135. package/dist/components/Employee/Terminations/TerminationSummary/TerminationSummaryPresentation.js +20 -19
  136. package/dist/components/Employee/Terminations/TerminationSummary/TerminationSummaryPresentation.js.map +1 -1
  137. package/dist/components/Employee/WorkAddress/management/WorkAddressEditForm.js +19 -17
  138. package/dist/components/Employee/WorkAddress/management/WorkAddressEditForm.js.map +1 -1
  139. package/dist/components/Employee/WorkAddress/management/WorkAddressView.js +49 -48
  140. package/dist/components/Employee/WorkAddress/management/WorkAddressView.js.map +1 -1
  141. package/dist/components/Flow/Flow.js +1 -1
  142. package/dist/components/InformationRequests/InformationRequestList/InformationRequestList.js +28 -28
  143. package/dist/components/InformationRequests/InformationRequestList/InformationRequestList.js.map +1 -1
  144. package/dist/components/Payroll/ConfirmWireDetails/ConfirmWireDetails.js +37 -36
  145. package/dist/components/Payroll/ConfirmWireDetails/ConfirmWireDetails.js.map +1 -1
  146. package/dist/components/Payroll/ConfirmWireDetails/ConfirmWireDetailsBanner/ConfirmWireDetailsBanner.js +36 -35
  147. package/dist/components/Payroll/ConfirmWireDetails/ConfirmWireDetailsBanner/ConfirmWireDetailsBanner.js.map +1 -1
  148. package/dist/components/Payroll/Dismissal/DismissalPayPeriodSelection/DismissalPayPeriodSelection.js +35 -28
  149. package/dist/components/Payroll/Dismissal/DismissalPayPeriodSelection/DismissalPayPeriodSelection.js.map +1 -1
  150. package/dist/components/Payroll/Dismissal/DismissalPayPeriodSelection/DismissalPayPeriodSelectionPresentation.js +23 -22
  151. package/dist/components/Payroll/Dismissal/DismissalPayPeriodSelection/DismissalPayPeriodSelectionPresentation.js.map +1 -1
  152. package/dist/components/Payroll/GrossUpModal/GrossUpModal.js +48 -45
  153. package/dist/components/Payroll/GrossUpModal/GrossUpModal.js.map +1 -1
  154. package/dist/components/Payroll/OffCycleCreation/OffCycleCreation.js +85 -77
  155. package/dist/components/Payroll/OffCycleCreation/OffCycleCreation.js.map +1 -1
  156. package/dist/components/Payroll/OffCycleCreation/OffCycleCreationPresentation.js +63 -59
  157. package/dist/components/Payroll/OffCycleCreation/OffCycleCreationPresentation.js.map +1 -1
  158. package/dist/components/Payroll/OffCycleDeductionsSetting/OffCycleDeductionsSetting.js +23 -21
  159. package/dist/components/Payroll/OffCycleDeductionsSetting/OffCycleDeductionsSetting.js.map +1 -1
  160. package/dist/components/Payroll/OffCycleReasonSelection/OffCycleReasonSelection.js +26 -19
  161. package/dist/components/Payroll/OffCycleReasonSelection/OffCycleReasonSelection.js.map +1 -1
  162. package/dist/components/Payroll/OffCycleReasonSelection/OffCycleReasonSelectionPresentation.js +14 -12
  163. package/dist/components/Payroll/OffCycleReasonSelection/OffCycleReasonSelectionPresentation.js.map +1 -1
  164. package/dist/components/Payroll/PayrollConfiguration/PayrollConfiguration.js +184 -162
  165. package/dist/components/Payroll/PayrollConfiguration/PayrollConfiguration.js.map +1 -1
  166. package/dist/components/Payroll/PayrollConfiguration/PayrollConfigurationPresentation.js +67 -65
  167. package/dist/components/Payroll/PayrollConfiguration/PayrollConfigurationPresentation.js.map +1 -1
  168. package/dist/components/Payroll/PayrollConfiguration/useCalculationPoll.js +48 -34
  169. package/dist/components/Payroll/PayrollConfiguration/useCalculationPoll.js.map +1 -1
  170. package/dist/components/Payroll/PayrollEditEmployee/PayrollEditEmployee.js +43 -41
  171. package/dist/components/Payroll/PayrollEditEmployee/PayrollEditEmployee.js.map +1 -1
  172. package/dist/components/Payroll/PayrollEditEmployee/PayrollEditEmployeePresentation.js +225 -223
  173. package/dist/components/Payroll/PayrollEditEmployee/PayrollEditEmployeePresentation.js.map +1 -1
  174. package/dist/components/Payroll/PayrollEditEmployee/shared/usePayrollEditEmployeeForm/fields.js +78 -75
  175. package/dist/components/Payroll/PayrollEditEmployee/shared/usePayrollEditEmployeeForm/fields.js.map +1 -1
  176. package/dist/components/Payroll/PayrollEditEmployee/shared/usePayrollEditEmployeeForm/payrollEditEmployeeHelpers.js +27 -27
  177. package/dist/components/Payroll/PayrollEditEmployee/shared/usePayrollEditEmployeeForm/payrollEditEmployeeHelpers.js.map +1 -1
  178. package/dist/components/Payroll/PayrollEditEmployee/shared/usePayrollEditEmployeeForm/payrollEditEmployeeSchema.js +19 -19
  179. package/dist/components/Payroll/PayrollEditEmployee/shared/usePayrollEditEmployeeForm/payrollEditEmployeeSchema.js.map +1 -1
  180. package/dist/components/Payroll/PayrollEditEmployee/shared/usePayrollEditEmployeeForm/usePayrollEditEmployeeForm.js +51 -48
  181. package/dist/components/Payroll/PayrollEditEmployee/shared/usePayrollEditEmployeeForm/usePayrollEditEmployeeForm.js.map +1 -1
  182. package/dist/components/Payroll/PayrollHistory/PayrollHistory.js +58 -48
  183. package/dist/components/Payroll/PayrollHistory/PayrollHistory.js.map +1 -1
  184. package/dist/components/Payroll/PayrollHistory/PayrollHistoryPresentation.js +58 -57
  185. package/dist/components/Payroll/PayrollHistory/PayrollHistoryPresentation.js.map +1 -1
  186. package/dist/components/Payroll/PayrollLanding/PayrollLandingFlowComponents.js +83 -69
  187. package/dist/components/Payroll/PayrollLanding/PayrollLandingFlowComponents.js.map +1 -1
  188. package/dist/components/Payroll/PayrollList/PayrollList.js +62 -60
  189. package/dist/components/Payroll/PayrollList/PayrollList.js.map +1 -1
  190. package/dist/components/Payroll/PayrollList/PayrollListPresentation.js +119 -117
  191. package/dist/components/Payroll/PayrollList/PayrollListPresentation.js.map +1 -1
  192. package/dist/components/Payroll/PayrollOverview/PayrollOverview.js +187 -171
  193. package/dist/components/Payroll/PayrollOverview/PayrollOverview.js.map +1 -1
  194. package/dist/components/Payroll/PayrollOverview/PayrollOverviewPresentation.js +120 -110
  195. package/dist/components/Payroll/PayrollOverview/PayrollOverviewPresentation.js.map +1 -1
  196. package/dist/components/Payroll/PayrollOverview/useSubmissionPoll.js +45 -34
  197. package/dist/components/Payroll/PayrollOverview/useSubmissionPoll.js.map +1 -1
  198. package/dist/components/Payroll/PayrollReceipts/PayrollReceipts.js +20 -14
  199. package/dist/components/Payroll/PayrollReceipts/PayrollReceipts.js.map +1 -1
  200. package/dist/components/Payroll/PayrollReceipts/PayrollReceiptsPresentation.js +62 -61
  201. package/dist/components/Payroll/PayrollReceipts/PayrollReceiptsPresentation.js.map +1 -1
  202. package/dist/components/Payroll/PayrollReceipts/PayrollReceiptsPresentation.module.scss.js +14 -14
  203. package/dist/components/Payroll/PrintChecks/PrintChecksBanner/PrintChecksBanner.js +24 -17
  204. package/dist/components/Payroll/PrintChecks/PrintChecksBanner/PrintChecksBanner.js.map +1 -1
  205. package/dist/components/Payroll/PrintChecks/PrintChecksFailure/PrintChecksFailure.js +22 -22
  206. package/dist/components/Payroll/PrintChecks/PrintChecksFailure/PrintChecksFailure.js.map +1 -1
  207. package/dist/components/Payroll/PrintChecks/PrintChecksForm/PrintChecksForm.js +88 -80
  208. package/dist/components/Payroll/PrintChecks/PrintChecksForm/PrintChecksForm.js.map +1 -1
  209. package/dist/components/Payroll/PrintChecks/PrintChecksForm/useGenerationPoll.js +52 -37
  210. package/dist/components/Payroll/PrintChecks/PrintChecksForm/useGenerationPoll.js.map +1 -1
  211. package/dist/components/Payroll/PrintChecks/PrintChecksSummary/PrintChecksSummary.js +26 -26
  212. package/dist/components/Payroll/PrintChecks/PrintChecksSummary/PrintChecksSummary.js.map +1 -1
  213. package/dist/components/Payroll/RecoveryCases/RecoveryCasesResubmit/RecoveryCasesResubmit.js +32 -32
  214. package/dist/components/Payroll/RecoveryCases/RecoveryCasesResubmit/RecoveryCasesResubmit.js.map +1 -1
  215. package/dist/components/Payroll/TransitionCreation/TransitionCreation.js +50 -48
  216. package/dist/components/Payroll/TransitionCreation/TransitionCreation.js.map +1 -1
  217. package/dist/components/Payroll/TransitionCreation/TransitionCreationPresentation.js +34 -33
  218. package/dist/components/Payroll/TransitionCreation/TransitionCreationPresentation.js.map +1 -1
  219. package/dist/components/Payroll/TransitionCreation/TransitionCreationTypes.js.map +1 -1
  220. package/dist/components/Payroll/TransitionPayrollAlert/TransitionPayrollAlert.js +28 -24
  221. package/dist/components/Payroll/TransitionPayrollAlert/TransitionPayrollAlert.js.map +1 -1
  222. package/dist/components/Payroll/UNSTABLE_PayrollEditEmployee/UNSTABLE_PayrollEditEmployee.js +255 -228
  223. package/dist/components/Payroll/UNSTABLE_PayrollEditEmployee/UNSTABLE_PayrollEditEmployee.js.map +1 -1
  224. package/dist/components/Payroll/UNSTABLE_PayrollEditEmployee/UNSTABLE_PayrollEditEmployee.module.scss.js +8 -4
  225. package/dist/components/Payroll/UNSTABLE_PayrollEditEmployee/UNSTABLE_PayrollEditEmployee.module.scss.js.map +1 -1
  226. package/dist/components/Payroll/usePreparedPayrollData.js +10 -8
  227. package/dist/components/Payroll/usePreparedPayrollData.js.map +1 -1
  228. package/dist/components/TimeOff/AddEmployeesHoliday/AddEmployeesHoliday.js +5 -5
  229. package/dist/components/TimeOff/AddEmployeesHoliday/AddEmployeesHoliday.js.map +1 -1
  230. package/dist/components/TimeOff/AddEmployeesToPolicy/AddEmployeesToPolicy.js +8 -7
  231. package/dist/components/TimeOff/AddEmployeesToPolicy/AddEmployeesToPolicy.js.map +1 -1
  232. package/dist/components/TimeOff/HolidayPolicyDetail/HolidayPolicyDetail.js +51 -50
  233. package/dist/components/TimeOff/HolidayPolicyDetail/HolidayPolicyDetail.js.map +1 -1
  234. package/dist/components/TimeOff/HolidayPolicyDetail/HolidayPolicyDetailPresentation.js +20 -18
  235. package/dist/components/TimeOff/HolidayPolicyDetail/HolidayPolicyDetailPresentation.js.map +1 -1
  236. package/dist/components/TimeOff/HolidaySelectionForm/HolidaySelectionForm.js +51 -49
  237. package/dist/components/TimeOff/HolidaySelectionForm/HolidaySelectionForm.js.map +1 -1
  238. package/dist/components/TimeOff/HolidaySelectionForm/HolidaySelectionFormPresentation.js +20 -20
  239. package/dist/components/TimeOff/HolidaySelectionForm/HolidaySelectionFormPresentation.js.map +1 -1
  240. package/dist/components/TimeOff/PolicyList/PolicyList.js +50 -49
  241. package/dist/components/TimeOff/PolicyList/PolicyList.js.map +1 -1
  242. package/dist/components/TimeOff/PolicyList/PolicyListPresentation.js +34 -33
  243. package/dist/components/TimeOff/PolicyList/PolicyListPresentation.js.map +1 -1
  244. package/dist/components/TimeOff/PolicySettings/PolicySettings.js +46 -45
  245. package/dist/components/TimeOff/PolicySettings/PolicySettings.js.map +1 -1
  246. package/dist/components/TimeOff/PolicySettings/PolicySettingsPresentation.js +152 -143
  247. package/dist/components/TimeOff/PolicySettings/PolicySettingsPresentation.js.map +1 -1
  248. package/dist/components/TimeOff/PolicyTypeSelector/PolicyTypeSelector.js +14 -13
  249. package/dist/components/TimeOff/PolicyTypeSelector/PolicyTypeSelector.js.map +1 -1
  250. package/dist/components/TimeOff/PolicyTypeSelector/PolicyTypeSelectorPresentation.js +44 -35
  251. package/dist/components/TimeOff/PolicyTypeSelector/PolicyTypeSelectorPresentation.js.map +1 -1
  252. package/dist/components/TimeOff/TimeOffManagement/PolicyConfigurationForm/PolicyConfigurationForm.js +88 -71
  253. package/dist/components/TimeOff/TimeOffManagement/PolicyConfigurationForm/PolicyConfigurationForm.js.map +1 -1
  254. package/dist/components/TimeOff/TimeOffManagement/PolicyConfigurationForm/PolicyConfigurationFormPresentation.js +164 -155
  255. package/dist/components/TimeOff/TimeOffManagement/PolicyConfigurationForm/PolicyConfigurationFormPresentation.js.map +1 -1
  256. package/dist/components/TimeOff/TimeOffManagement/SelectEmployees/SelectEmployeesHoliday.js +57 -55
  257. package/dist/components/TimeOff/TimeOffManagement/SelectEmployees/SelectEmployeesHoliday.js.map +1 -1
  258. package/dist/components/TimeOff/TimeOffManagement/SelectEmployees/SelectEmployeesPresentation.js +25 -24
  259. package/dist/components/TimeOff/TimeOffManagement/SelectEmployees/SelectEmployeesPresentation.js.map +1 -1
  260. package/dist/components/TimeOff/TimeOffManagement/SelectEmployees/SelectEmployeesTimeOff.js +94 -92
  261. package/dist/components/TimeOff/TimeOffManagement/SelectEmployees/SelectEmployeesTimeOff.js.map +1 -1
  262. package/dist/components/TimeOff/TimeOffPolicyDetail/TimeOffPolicyDetail.js +156 -155
  263. package/dist/components/TimeOff/TimeOffPolicyDetail/TimeOffPolicyDetail.js.map +1 -1
  264. package/dist/components/TimeOff/TimeOffPolicyDetail/TimeOffPolicyDetailPresentation.js +21 -19
  265. package/dist/components/TimeOff/TimeOffPolicyDetail/TimeOffPolicyDetailPresentation.js.map +1 -1
  266. package/dist/components/TimeOff/shared/PolicyDetailLayout/PolicyDetailLayout.js +28 -26
  267. package/dist/components/TimeOff/shared/PolicyDetailLayout/PolicyDetailLayout.js.map +1 -1
  268. package/dist/contexts/ApiProvider/ApiProvider.js +29 -28
  269. package/dist/contexts/ApiProvider/ApiProvider.js.map +1 -1
  270. package/dist/contexts/ApiProvider/apiVersionMismatchHook.js +15 -0
  271. package/dist/contexts/ApiProvider/apiVersionMismatchHook.js.map +1 -0
  272. package/dist/contexts/ComponentAdapter/useComponentContext.js.map +1 -1
  273. package/dist/contexts/GustoProvider/GustoProviderCustomUIAdapter.js.map +1 -1
  274. package/dist/contexts/ThemeProvider/ThemeProvider.js +32 -26
  275. package/dist/contexts/ThemeProvider/ThemeProvider.js.map +1 -1
  276. package/dist/contexts/UnstableFeaturesProvider/useUnstableFeature.js.map +1 -1
  277. package/dist/hooks/usePollingTask/usePollingTask.js +53 -41
  278. package/dist/hooks/usePollingTask/usePollingTask.js.map +1 -1
  279. package/dist/i18n/en/Company.PaySchedule.json.js +22 -20
  280. package/dist/i18n/en/Company.PaySchedule.json.js.map +1 -1
  281. package/dist/i18n/en/Employee.ManagementEmployeeList.json.js +28 -24
  282. package/dist/i18n/en/Employee.ManagementEmployeeList.json.js.map +1 -1
  283. package/dist/i18n/en/Payroll.GrossUpModal.json.js +12 -10
  284. package/dist/i18n/en/Payroll.GrossUpModal.json.js.map +1 -1
  285. package/dist/i18n/en/Payroll.PayrollConfiguration.json.js +8 -8
  286. package/dist/i18n/en/Payroll.PayrollOverview.json.js +15 -15
  287. package/dist/i18n/en/Payroll.UNSTABLE_PayrollEditEmployee.json.js +62 -58
  288. package/dist/i18n/en/Payroll.UNSTABLE_PayrollEditEmployee.json.js.map +1 -1
  289. package/dist/package.json.js +1 -1
  290. package/dist/src/components/Common/FieldCaption/FieldCaption.d.ts +2 -16
  291. package/dist/src/components/Common/FieldCaption/FieldCaptionTypes.d.ts +22 -0
  292. package/dist/src/components/Common/FieldCaption/index.d.ts +1 -0
  293. package/dist/src/components/Common/Flex/Flex.d.ts +3 -1
  294. package/dist/src/components/Common/UI/ComboBox/ComboBoxTypes.d.ts +1 -1
  295. package/dist/src/components/Common/UI/DatePicker/DatePickerTypes.d.ts +2 -1
  296. package/dist/src/components/Common/UI/Menu/MenuTypes.d.ts +1 -1
  297. package/dist/src/components/Common/UI/MultiSelectComboBox/MultiSelectComboBox.d.ts +1 -1
  298. package/dist/src/components/Common/UI/MultiSelectComboBox/MultiSelectComboBoxTypes.d.ts +5 -0
  299. package/dist/src/components/Common/UI/Select/SelectTypes.d.ts +2 -1
  300. package/dist/src/components/Company/PaySchedule/PaySchedule.d.ts +10 -2
  301. package/dist/src/components/Company/PaySchedule/PayScheduleComponents.d.ts +1 -0
  302. package/dist/src/components/Company/PaySchedule/shared/usePayScheduleForm/fields.d.ts +9 -1
  303. package/dist/src/components/Company/PaySchedule/shared/usePayScheduleForm/index.d.ts +2 -2
  304. package/dist/src/components/Company/PaySchedule/shared/usePayScheduleForm/payScheduleSchema.d.ts +21 -5
  305. package/dist/src/components/Company/PaySchedule/shared/usePayScheduleForm/usePayScheduleForm.d.ts +21 -3
  306. package/dist/src/components/Contractor/ContractorList/management/ManagementContractorListView.d.ts +3 -1
  307. package/dist/src/components/Contractor/ContractorList/onboarding/ContractorListView.d.ts +3 -1
  308. package/dist/src/components/Contractor/Payments/CreatePayment/CreatePaymentPresentation.d.ts +3 -1
  309. package/dist/src/components/Contractor/Payments/CreatePayment/PreviewPresentation.d.ts +3 -1
  310. package/dist/src/components/Contractor/Payments/PaymentHistory/PaymentHistoryPresentation.d.ts +3 -1
  311. package/dist/src/components/Contractor/Payments/PaymentStatement/PaymentStatementPresentation.d.ts +3 -1
  312. package/dist/src/components/Contractor/Payments/PaymentsList/PaymentsListPresentation.d.ts +3 -1
  313. package/dist/src/components/Contractor/Submit/SubmitDone.d.ts +3 -1
  314. package/dist/src/components/Employee/Compensation/management/CompensationEditForm/CompensationEditForm.d.ts +1 -1
  315. package/dist/src/components/Employee/Documents/onboarding/DocumentSigner/EmploymentEligibility/EmploymentEligibilityPresentation.d.ts +3 -1
  316. package/dist/src/components/Employee/Documents/onboarding/EmployeeDocuments/EmployeeDocumentsPresentation.d.ts +3 -1
  317. package/dist/src/components/Employee/EmployeeList/management/ManagementEmployeeListView.d.ts +3 -1
  318. package/dist/src/components/Employee/EmployeeList/onboarding/EmployeeListView.d.ts +3 -1
  319. package/dist/src/components/Employee/EmployeeList/shared/useEmployeeList.d.ts +11 -2
  320. package/dist/src/components/Employee/EmployeeListFlow/employeeListStateMachine.test.d.ts +1 -0
  321. package/dist/src/components/Employee/HomeAddress/management/HomeAddressView.d.ts +3 -1
  322. package/dist/src/components/Employee/Terminations/TerminateEmployee/TerminateEmployeePresentation.d.ts +3 -1
  323. package/dist/src/components/Employee/Terminations/TerminationSummary/TerminationSummaryPresentation.d.ts +3 -1
  324. package/dist/src/components/Employee/WorkAddress/management/WorkAddressView.d.ts +3 -1
  325. package/dist/src/components/Payroll/Dismissal/DismissalPayPeriodSelection/DismissalPayPeriodSelectionPresentation.d.ts +3 -1
  326. package/dist/src/components/Payroll/OffCycleCreation/OffCycleCreationPresentation.d.ts +1 -1
  327. package/dist/src/components/Payroll/OffCycleCreation/OffCycleCreationTypes.d.ts +8 -0
  328. package/dist/src/components/Payroll/OffCycleReasonSelection/OffCycleReasonSelectionPresentation.d.ts +3 -1
  329. package/dist/src/components/Payroll/PayrollConfiguration/PayrollConfigurationPresentation.d.ts +3 -1
  330. package/dist/src/components/Payroll/PayrollConfiguration/useCalculationPoll.d.ts +6 -1
  331. package/dist/src/components/Payroll/PayrollEditEmployee/PayrollEditEmployeePresentation.d.ts +3 -1
  332. package/dist/src/components/Payroll/PayrollEditEmployee/shared/usePayrollEditEmployeeForm/fields.d.ts +9 -9
  333. package/dist/src/components/Payroll/PayrollEditEmployee/shared/usePayrollEditEmployeeForm/payrollEditEmployeeHelpers.d.ts +2 -2
  334. package/dist/src/components/Payroll/PayrollEditEmployee/shared/usePayrollEditEmployeeForm/payrollEditEmployeeSchema.d.ts +4 -4
  335. package/dist/src/components/Payroll/PayrollHistory/PayrollHistoryPresentation.d.ts +3 -1
  336. package/dist/src/components/Payroll/PayrollList/PayrollListPresentation.d.ts +3 -1
  337. package/dist/src/components/Payroll/PayrollOverview/PayrollOverviewPresentation.d.ts +2 -1
  338. package/dist/src/components/Payroll/PayrollOverview/useSubmissionPoll.d.ts +10 -1
  339. package/dist/src/components/Payroll/PayrollReceipts/PayrollReceiptsPresentation.d.ts +2 -1
  340. package/dist/src/components/Payroll/TransitionCreation/TransitionCreationPresentation.d.ts +1 -1
  341. package/dist/src/components/Payroll/TransitionCreation/TransitionCreationTypes.d.ts +2 -0
  342. package/dist/src/components/Payroll/TransitionPayrollAlert/TransitionPayrollAlert.d.ts +3 -1
  343. package/dist/src/components/Payroll/UNSTABLE_PayrollEditEmployee/UNSTABLE_PayrollEditEmployee.d.ts +1 -1
  344. package/dist/src/components/TimeOff/AddEmployeesHoliday/AddEmployeesHoliday.d.ts +1 -1
  345. package/dist/src/components/TimeOff/AddEmployeesToPolicy/AddEmployeesToPolicy.d.ts +1 -1
  346. package/dist/src/components/TimeOff/HolidayPolicyDetail/HolidayPolicyDetailPresentation.d.ts +1 -1
  347. package/dist/src/components/TimeOff/HolidayPolicyDetail/HolidayPolicyDetailTypes.d.ts +2 -0
  348. package/dist/src/components/TimeOff/HolidaySelectionForm/HolidaySelectionFormTypes.d.ts +2 -0
  349. package/dist/src/components/TimeOff/PolicyList/PolicyListPresentation.d.ts +1 -1
  350. package/dist/src/components/TimeOff/PolicyList/PolicyListTypes.d.ts +2 -0
  351. package/dist/src/components/TimeOff/PolicySettings/PolicySettingsPresentation.d.ts +1 -1
  352. package/dist/src/components/TimeOff/PolicySettings/PolicySettingsTypes.d.ts +2 -0
  353. package/dist/src/components/TimeOff/PolicyTypeSelector/PolicyTypeSelectorPresentation.d.ts +1 -1
  354. package/dist/src/components/TimeOff/PolicyTypeSelector/PolicyTypeSelectorTypes.d.ts +2 -0
  355. package/dist/src/components/TimeOff/TimeOffManagement/PolicyConfigurationForm/PolicyConfigurationFormPresentation.d.ts +1 -1
  356. package/dist/src/components/TimeOff/TimeOffManagement/PolicyConfigurationForm/PolicyConfigurationFormTypes.d.ts +2 -0
  357. package/dist/src/components/TimeOff/TimeOffManagement/SelectEmployees/SelectEmployeesHoliday.d.ts +2 -0
  358. package/dist/src/components/TimeOff/TimeOffManagement/SelectEmployees/SelectEmployeesPresentation.d.ts +1 -1
  359. package/dist/src/components/TimeOff/TimeOffManagement/SelectEmployees/SelectEmployeesPresentationTypes.d.ts +2 -0
  360. package/dist/src/components/TimeOff/TimeOffManagement/SelectEmployees/SelectEmployeesTimeOff.d.ts +2 -0
  361. package/dist/src/components/TimeOff/TimeOffPolicyDetail/TimeOffPolicyDetailPresentation.d.ts +1 -1
  362. package/dist/src/components/TimeOff/TimeOffPolicyDetail/TimeOffPolicyDetailTypes.d.ts +3 -0
  363. package/dist/src/components/TimeOff/shared/PolicyDetailLayout/PolicyDetailLayout.d.ts +1 -1
  364. package/dist/src/components/TimeOff/shared/PolicyDetailLayout/PolicyDetailLayoutTypes.d.ts +2 -0
  365. package/dist/src/contexts/ApiProvider/ApiProvider.d.ts +5 -3
  366. package/dist/src/contexts/ApiProvider/apiVersionMismatchHook.d.ts +3 -0
  367. package/dist/src/contexts/ApiProvider/apiVersionMismatchHook.test.d.ts +1 -0
  368. package/dist/src/contexts/ComponentAdapter/componentAdapterTypes.d.ts +1 -0
  369. package/dist/src/contexts/ComponentAdapter/useComponentContext.d.ts +4 -1
  370. package/dist/src/contexts/GustoProvider/GustoProviderCustomUIAdapter.d.ts +9 -1
  371. package/dist/src/contexts/ThemeProvider/ThemeProvider.d.ts +8 -3
  372. package/dist/src/contexts/UnstableFeaturesProvider/useUnstableFeature.d.ts +4 -1
  373. package/dist/src/hooks/usePollingTask/usePollingTask.d.ts +55 -14
  374. package/dist/src/i18n/types.d.ts +42 -2
  375. package/dist/src/index.d.ts +1 -1
  376. package/dist/src/models/external.d.ts +1 -0
  377. package/dist/style.css +1 -1
  378. package/docs/guides/endpoint-inventory.json +5 -0
  379. package/package.json +20 -19
@@ -1 +1 @@
1
- {"version":3,"file":"PayrollConfiguration.js","sources":["../../../../src/components/Payroll/PayrollConfiguration/PayrollConfiguration.tsx"],"sourcesContent":["import { useEffect, useMemo, useRef, useState, type ReactNode } from 'react'\nimport { usePayrollsGetSuspense } from '@gusto/embedded-api/react-query/payrollsGet'\nimport { payrollsCalculate } from '@gusto/embedded-api/funcs/payrollsCalculate'\nimport { useGustoEmbeddedContext } from '@gusto/embedded-api/react-query/_context'\nimport type { GetV1CompaniesCompanyIdPayrollsPayrollIdRequest } from '@gusto/embedded-api/models/operations/getv1companiescompanyidpayrollspayrollid'\nimport type { Employee } from '@gusto/embedded-api/models/components/employee'\nimport { useTranslation } from 'react-i18next'\nimport { usePayrollsUpdateMutation } from '@gusto/embedded-api/react-query/payrollsUpdate'\nimport { usePayrollsCalculateGrossUpMutation } from '@gusto/embedded-api/react-query/payrollsCalculateGrossUp'\nimport type { PayrollEmployeeCompensationsType } from '@gusto/embedded-api/models/components/payrollemployeecompensationstype'\nimport type { PayrollUpdateEmployeeCompensations } from '@gusto/embedded-api/models/components/payrollupdate'\nimport { usePayrollsGetBlockersSuspense } from '@gusto/embedded-api/react-query/payrollsGetBlockers'\nimport { payrollSubmitHandler, type ApiPayrollBlocker } from '../PayrollBlocker/payrollHelpers'\nimport { GrossUpModal } from '../GrossUpModal'\nimport { PayrollOverview } from '../PayrollOverview/PayrollOverview'\nimport type { PayrollFlowAlert } from '../PayrollFlow/PayrollFlowComponents'\nimport { PayrollConfigurationPresentation } from './PayrollConfigurationPresentation'\nimport { usePayrollConfigurationData } from './usePayrollConfigurationData'\nimport { getGrossUpTargetCompensationName, isGrossUpEligible } from './grossUpHelpers'\nimport { useCalculationPoll, isCalculatingStatus, type PayrollShow } from './useCalculationPoll'\nimport type { BaseComponentInterface } from '@/components/Base/Base'\nimport { BaseComponent } from '@/components/Base/Base'\nimport { componentEvents, type EventType } from '@/shared/constants'\nimport { useComponentDictionary, useI18n } from '@/i18n'\nimport { useBase } from '@/components/Base'\nimport { useDateFormatter } from '@/hooks/useDateFormatter'\nimport { SDKInternalError } from '@/types/sdkError'\n\n/**\n * Props for {@link PayrollConfiguration}.\n *\n * @public\n */\nexport interface PayrollConfigurationProps extends BaseComponentInterface<'Payroll.PayrollConfiguration'> {\n /** The associated company identifier. */\n companyId: string\n /** The associated payroll identifier. */\n payrollId: string\n /** Optional alert components to render above the configuration content. */\n alerts?: ReactNode\n /** Whether to show the reimbursements column in the compensation table. Defaults to `true`. */\n withReimbursements?: boolean\n}\n\n/**\n * Handles the configuration phase of payroll processing, allowing users to review and modify employee compensation before calculating the payroll.\n *\n * @remarks\n * If the payroll turns out to already be processed (e.g. another actor submitted it while this\n * screen was open), this component emits `runPayroll/alreadyProcessed` and then renders\n * {@link PayrollOverview} in its place — the read-only breakdown with the gated \"Cancel payroll\"\n * action — instead of the configuration table. Events from that delegated view (e.g.\n * `runPayroll/cancelled`) are emitted through this component's own `onEvent`.\n *\n * Emits the following events:\n *\n * @events\n * | Event | Description | Data |\n * | ----- | ----------- | ---- |\n * | `runPayroll/employee/edit` | An employee row is selected for editing | `{ employeeId, firstName, lastName }` |\n * | `runPayroll/employee/skip` | An employee is skipped or unskipped for this payroll | `{ employeeId }` |\n * | `runPayroll/employee/saved` | Employee compensation changes are persisted | `{ payrollPrepared }` |\n * | `runPayroll/calculated` | Payroll calculation completes successfully | `{ payrollId, alert, payPeriod }` |\n * | `runPayroll/alreadyProcessed` | The payroll turns out to already be processed while configuring it | `{ payrollId, alert, payPeriod }` |\n * | `runPayroll/processingFailed` | Payroll calculation fails or times out | — |\n * | `runPayroll/blockers/viewAll` | The \"view all blockers\" affordance is selected | — |\n * | `runPayroll/grossUp/selected` | The set-net-earnings menu item is selected for an employee | `{ employeeUuid }` |\n * | `runPayroll/grossUp/calculated` | A gross-up amount is calculated from a target net pay | `{ grossUp, netPay, employeeUuid }` |\n *\n * @param props - See {@link PayrollConfigurationProps}.\n * @returns The payroll configuration screen.\n * @public\n */\nexport function PayrollConfiguration(props: PayrollConfigurationProps) {\n return (\n <BaseComponent {...props}>\n <Root {...props}>{props.children}</Root>\n </BaseComponent>\n )\n}\n\nconst Root = ({\n onEvent,\n companyId,\n payrollId,\n dictionary,\n alerts,\n withReimbursements = true,\n}: PayrollConfigurationProps) => {\n useComponentDictionary('Payroll.PayrollConfiguration', dictionary)\n useI18n('Payroll.PayrollConfiguration')\n const { t } = useTranslation('Payroll.PayrollConfiguration')\n const { baseSubmitHandler } = useBase()\n const dateFormatter = useDateFormatter()\n\n const [isCalculatingPayroll, setIsCalculatingPayroll] = useState(false)\n // True once this screen has read a \"calculating\" status for the payroll, whether we started that\n // calc or someone else did. Calling prepare after that would wipe the result, so we use this to\n // keep prepare off.\n const hasSeenCalculatingRef = useRef(false)\n const gustoClient = useGustoEmbeddedContext()\n\n const payrollRequest = useMemo<GetV1CompaniesCompanyIdPayrollsPayrollIdRequest>(\n () => ({\n companyId,\n payrollId,\n include: ['taxes', 'benefits', 'deductions', 'payroll_status_meta'],\n }),\n [companyId, payrollId],\n )\n\n const { data: payrollData, refetch: refetchPayroll } = usePayrollsGetSuspense(payrollRequest)\n\n const excludedEmployeeUuids = useMemo(\n () =>\n payrollData.payrollShow?.employeeCompensations\n ?.filter(comp => comp.excluded)\n .map(comp => comp.employeeUuid!)\n .filter(Boolean) ?? [],\n [payrollData.payrollShow?.employeeCompensations],\n )\n\n // Remember once we've seen it calculating.\n if (isCalculatingStatus(payrollData.payrollShow?.processingRequest)) {\n hasSeenCalculatingRef.current = true\n }\n\n const { data: blockersData } = usePayrollsGetBlockersSuspense({\n companyUuid: companyId,\n })\n\n const payrollBlockerList = blockersData.payrollBlockers ?? []\n\n const blockersFromApi: ApiPayrollBlocker[] = payrollBlockerList.map(blocker => ({\n key: blocker.key,\n message: blocker.message,\n }))\n\n const [payrollBlockers, setPayrollBlockers] = useState(blockersFromApi)\n\n const { start: startCalculationPoll, isPolling } = useCalculationPoll({\n refetch: refetchPayroll,\n onCalculated: (payroll: PayrollShow | undefined) => {\n onEvent(componentEvents.RUN_PAYROLL_CALCULATED, {\n payrollId,\n alert: {\n type: 'success',\n title: t('alerts.progressSaved'),\n alertKey: 'progressSaved',\n },\n payPeriod: payroll?.payPeriod,\n })\n setPayrollBlockers([])\n },\n onProcessingFailed: (payroll: PayrollShow | undefined) => {\n onEvent(componentEvents.RUN_PAYROLL_PROCESSING_FAILED)\n // Let prepare run again on retry — but only when there is no calculation for it to wipe.\n if (payroll?.calculatedAt == null) {\n hasSeenCalculatingRef.current = false\n }\n },\n })\n\n // Show the loading state the whole time we're calculating, so a second tab shows the loader\n // instead of a blank table until it moves to the overview.\n const isCalculatingActive = isCalculatingPayroll || isPolling || hasSeenCalculatingRef.current\n\n const {\n employeeDetails,\n employeeCompensations,\n paySchedule,\n payPeriod,\n payrollCategory,\n pagination,\n isLoading,\n isAlreadyProcessed,\n refetch,\n } = usePayrollConfigurationData({\n companyId,\n payrollId,\n // Don't prepare while calculating, or once we've seen it calculate. If the payroll was already\n // calculated when we opened (e.g. clicking Edit), we do prepare so it can be edited.\n disablePrepare: isPolling || isCalculatingPayroll || hasSeenCalculatingRef.current,\n excludedEmployeeUuids,\n })\n\n const alreadyProcessedAlert: PayrollFlowAlert = useMemo(\n () => ({\n type: 'error',\n title: t('alerts.alreadyProcessed'),\n alertKey: 'alreadyProcessed',\n }),\n [t],\n )\n\n const hasFiredAlreadyProcessedRef = useRef(false)\n\n useEffect(() => {\n if (!isAlreadyProcessed) {\n hasFiredAlreadyProcessedRef.current = false\n return\n }\n if (hasFiredAlreadyProcessedRef.current) return\n hasFiredAlreadyProcessedRef.current = true\n onEvent(componentEvents.RUN_PAYROLL_ALREADY_PROCESSED, {\n payrollId,\n alert: alreadyProcessedAlert,\n payPeriod: payrollData.payrollShow?.payPeriod,\n })\n }, [\n isAlreadyProcessed,\n onEvent,\n payrollId,\n alreadyProcessedAlert,\n payrollData.payrollShow?.payPeriod,\n ])\n\n const { mutateAsync: updatePayroll, isPending: isUpdatingPayroll } = usePayrollsUpdateMutation()\n\n const { mutateAsync: calculateGrossUpMutation } = usePayrollsCalculateGrossUpMutation()\n\n const [grossUpEmployeeUuid, setGrossUpEmployeeUuid] = useState<string | null>(null)\n const [isGrossUpModalOpen, setIsGrossUpModalOpen] = useState(false)\n\n const grossUpEnabled = isGrossUpEligible(payrollCategory)\n const grossUpTargetCompensation = getGrossUpTargetCompensationName(payrollCategory)\n\n const onGrossUpSelect = (employeeUuid: string) => {\n setGrossUpEmployeeUuid(employeeUuid)\n setIsGrossUpModalOpen(true)\n onEvent(componentEvents.RUN_PAYROLL_GROSS_UP_SELECTED, { employeeUuid })\n }\n\n const onCalculateGrossUp = async (netPay: number): Promise<string | null> => {\n if (!grossUpEmployeeUuid) return null\n let grossUp: string | null = null\n\n await baseSubmitHandler(null, async () => {\n const result = await calculateGrossUpMutation({\n request: {\n payrollUuid: payrollId,\n payrollGrossUpRequest: {\n employeeUuid: grossUpEmployeeUuid,\n netPay: netPay.toString(),\n },\n },\n })\n\n grossUp = result.payrollGrossUpResponse?.grossUp ?? null\n\n if (grossUp) {\n onEvent(componentEvents.RUN_PAYROLL_GROSS_UP_CALCULATED, {\n grossUp,\n netPay,\n employeeUuid: grossUpEmployeeUuid,\n })\n }\n })\n\n return grossUp\n }\n\n const onGrossUpApply = async (grossAmount: string) => {\n if (!grossUpEmployeeUuid || !grossUpTargetCompensation) {\n throw new SDKInternalError(\n 'Unable to apply gross-up: missing employee or target compensation.',\n )\n }\n\n const employeeComp = employeeCompensations.find(ec => ec.employeeUuid === grossUpEmployeeUuid)\n if (!employeeComp) {\n throw new SDKInternalError('Unable to apply gross-up: employee compensation not found.')\n }\n\n const existingFixed = employeeComp.fixedCompensations ?? []\n const hasTargetCompensation = existingFixed.some(\n fc => fc.name?.toLowerCase() === grossUpTargetCompensation.toLowerCase(),\n )\n\n const updatedFixedCompensations = existingFixed.map(fc => ({\n name: fc.name,\n jobUuid: fc.jobUuid,\n amount:\n fc.name?.toLowerCase() === grossUpTargetCompensation.toLowerCase() ? grossAmount : '0',\n }))\n\n if (!hasTargetCompensation) {\n const primaryJobUuid =\n employeeComp.hourlyCompensations?.[0]?.jobUuid ?? existingFixed[0]?.jobUuid ?? ''\n updatedFixedCompensations.push({\n name: grossUpTargetCompensation,\n jobUuid: primaryJobUuid,\n amount: grossAmount,\n })\n }\n\n const updatedHourlyCompensations = (employeeComp.hourlyCompensations ?? []).map(hc => ({\n name: hc.name,\n jobUuid: hc.jobUuid,\n hours: '0',\n }))\n\n const updatedPaidTimeOff = (employeeComp.paidTimeOff ?? []).map(pto => ({\n name: pto.name,\n hours: '0',\n }))\n\n const transformedCompensation = transformEmployeeCompensation({\n ...employeeComp,\n fixedCompensations: updatedFixedCompensations,\n hourlyCompensations: updatedHourlyCompensations,\n paidTimeOff: updatedPaidTimeOff,\n })\n\n await baseSubmitHandler({}, async () => {\n const result = await updatePayroll({\n request: {\n companyId,\n payrollId,\n payrollUpdate: {\n employeeCompensations: [{ ...transformedCompensation, excluded: false }],\n },\n },\n })\n onEvent(componentEvents.RUN_PAYROLL_EMPLOYEE_SAVED, {\n payrollPrepared: result.payrollPrepared,\n })\n await refetch()\n })\n\n setGrossUpEmployeeUuid(null)\n setIsGrossUpModalOpen(false)\n }\n\n const handleGrossUpApply = async (grossAmount: string) => {\n try {\n await onGrossUpApply(grossAmount)\n } catch {\n // Modal stays open; error is surfaced by baseSubmitHandler\n }\n }\n\n const onCalculatePayroll = async () => {\n setPayrollBlockers([])\n // Mark it right away so prepare can't run and cancel the calculation we just started.\n hasSeenCalculatingRef.current = true\n\n await baseSubmitHandler({}, async () => {\n const result = await payrollSubmitHandler(async () => {\n setIsCalculatingPayroll(true)\n try {\n const calcResult = await payrollsCalculate(gustoClient, {\n companyId,\n payrollId,\n })\n if (!calcResult.ok) {\n throw calcResult.error\n }\n startCalculationPoll({\n baselineCalculatedAt: payrollData.payrollShow?.calculatedAt?.getTime() ?? null,\n // We just submitted the payroll, so we haven't yet seen it return with the calculating status\n sawCalculatingThisPoll: false,\n })\n } catch (error) {\n // Calculate itself failed before polling ever started (e.g. a 409 conflict), so let\n // prepare run again on retry -- otherwise hasSeenCalculatingRef stays stuck true forever\n // with no RUN_PAYROLL_CALCULATED/RUN_PAYROLL_PROCESSING_FAILED event ever firing.\n hasSeenCalculatingRef.current = false\n throw error\n } finally {\n setIsCalculatingPayroll(false)\n }\n })\n\n if (!result.success && result.blockers.length > 0) {\n setPayrollBlockers(result.blockers)\n }\n })\n }\n\n const onEdit = (employee: Employee) => {\n onEvent(componentEvents.RUN_PAYROLL_EMPLOYEE_EDIT, {\n employeeId: employee.uuid,\n firstName: employee.firstName,\n lastName: employee.lastName,\n })\n }\n\n const transformEmployeeCompensation = (\n compensation: PayrollEmployeeCompensationsType,\n ): PayrollUpdateEmployeeCompensations => {\n const { paymentMethod } = compensation\n return {\n employeeUuid: compensation.employeeUuid,\n version: compensation.version,\n excluded: compensation.excluded,\n fixedCompensations: compensation.fixedCompensations,\n hourlyCompensations: compensation.hourlyCompensations,\n paidTimeOff: compensation.paidTimeOff,\n deductions: compensation.deductions,\n ...(paymentMethod && paymentMethod !== 'Historical' ? { paymentMethod } : {}),\n memo: compensation.memo || undefined,\n }\n }\n\n const onToggleExclude = async (employeeCompensation: PayrollEmployeeCompensationsType) => {\n onEvent(componentEvents.RUN_PAYROLL_EMPLOYEE_SKIP, {\n employeeId: employeeCompensation.employeeUuid,\n })\n await baseSubmitHandler({}, async () => {\n const transformedCompensation = transformEmployeeCompensation(employeeCompensation)\n const result = await updatePayroll({\n request: {\n companyId,\n payrollId,\n payrollUpdate: {\n employeeCompensations: [\n { ...transformedCompensation, excluded: !transformedCompensation.excluded },\n ],\n },\n },\n })\n onEvent(componentEvents.RUN_PAYROLL_EMPLOYEE_SAVED, {\n payrollPrepared: result.payrollPrepared,\n })\n await refetch()\n })\n }\n\n const onViewBlockers = () => {\n onEvent(componentEvents.RUN_PAYROLL_BLOCKERS_VIEW_ALL)\n }\n\n // Pick up a calculation this screen didn't start (another tab, another admin). Starting a poll\n // from rendered data is fine — only the decision to *finish* one must not depend on a render,\n // and that lives in the poll loop.\n useEffect(() => {\n if (isPolling) return\n if (!isCalculatingStatus(payrollData.payrollShow?.processingRequest)) return\n\n startCalculationPoll({\n baselineCalculatedAt: payrollData.payrollShow?.calculatedAt?.getTime() ?? null,\n // We have seen the calculating status, which is why we're starting to poll now until it completes or fails.\n sawCalculatingThisPoll: true,\n })\n }, [\n payrollData.payrollShow?.processingRequest,\n payrollData.payrollShow?.calculatedAt,\n isPolling,\n startCalculationPoll,\n ])\n\n const payrollAlert = (() => {\n const statusMeta = payrollData.payrollShow?.payrollStatusMeta\n\n const isLatePayroll =\n statusMeta?.payrollLate &&\n statusMeta.initialCheckDate &&\n statusMeta.expectedDebitTime &&\n statusMeta.expectedCheckDate\n\n if (isLatePayroll) {\n return {\n label: t('alerts.payrollLate', {\n initialCheckDate: dateFormatter.formatShortWithWeekday(statusMeta.initialCheckDate),\n }),\n content: t('alerts.payrollLateText', {\n ...dateFormatter.formatWithTime(statusMeta.expectedDebitTime),\n newCheckDate: dateFormatter.formatShortWithWeekday(statusMeta.expectedCheckDate),\n }),\n variant: 'warning' as const,\n }\n }\n\n const { payrollShow } = payrollData\n\n if (payrollShow?.checkDate && payrollShow.payrollDeadline) {\n return {\n label: t('alerts.directDepositDeadline', {\n payDate: dateFormatter.formatShortWithWeekday(payrollShow.checkDate),\n ...dateFormatter.formatWithTime(payrollShow.payrollDeadline),\n }),\n content: t('alerts.directDepositDeadlineText'),\n variant: 'info' as const,\n }\n }\n\n return undefined\n })()\n\n if (isAlreadyProcessed) {\n const onAlreadyProcessedOverviewEvent = (type: EventType, data?: unknown) => {\n if (type === componentEvents.RUN_PAYROLL_CANCELLED) {\n // Cancelling un-processes the payroll, making it editable again — re-run prepare so\n // this component drops back into the configuration table for the same payrollId.\n void refetch()\n }\n onEvent(type, data)\n }\n\n return (\n <PayrollOverview\n companyId={companyId}\n payrollId={payrollId}\n onEvent={onAlreadyProcessedOverviewEvent}\n withReimbursements={withReimbursements}\n alerts={[alreadyProcessedAlert]}\n />\n )\n }\n\n return (\n <>\n <PayrollConfigurationPresentation\n onCalculatePayroll={onCalculatePayroll}\n isCalculateDisabled={blockersFromApi.length > 0}\n onEdit={onEdit}\n onToggleExclude={onToggleExclude}\n onViewBlockers={onViewBlockers}\n employeeCompensations={employeeCompensations}\n employeeDetails={employeeDetails}\n payPeriod={payPeriod}\n paySchedule={paySchedule}\n payrollCategory={payrollCategory}\n alerts={alerts}\n payrollAlert={payrollAlert}\n isPending={isCalculatingActive || isLoading || isUpdatingPayroll}\n isCalculating={isCalculatingActive}\n payrollBlockers={payrollBlockers}\n pagination={pagination}\n withReimbursements={withReimbursements}\n grossUpEnabled={grossUpEnabled}\n onGrossUpSelect={onGrossUpSelect}\n />\n {grossUpEnabled && (\n <GrossUpModal\n isOpen={isGrossUpModalOpen}\n onCalculateGrossUp={onCalculateGrossUp}\n onApply={handleGrossUpApply}\n onCancel={() => {\n setIsGrossUpModalOpen(false)\n }}\n />\n )}\n </>\n )\n}\n"],"names":["PayrollConfiguration","props","jsx","BaseComponent","Root","onEvent","companyId","payrollId","dictionary","alerts","withReimbursements","useComponentDictionary","useI18n","t","useTranslation","baseSubmitHandler","useBase","dateFormatter","useDateFormatter","isCalculatingPayroll","setIsCalculatingPayroll","useState","hasSeenCalculatingRef","useRef","gustoClient","useGustoEmbeddedContext","payrollRequest","useMemo","payrollData","refetchPayroll","usePayrollsGetSuspense","excludedEmployeeUuids","comp","isCalculatingStatus","blockersData","usePayrollsGetBlockersSuspense","blockersFromApi","blocker","payrollBlockers","setPayrollBlockers","startCalculationPoll","isPolling","useCalculationPoll","payroll","componentEvents","isCalculatingActive","employeeDetails","employeeCompensations","paySchedule","payPeriod","payrollCategory","pagination","isLoading","isAlreadyProcessed","refetch","usePayrollConfigurationData","alreadyProcessedAlert","hasFiredAlreadyProcessedRef","useEffect","updatePayroll","isUpdatingPayroll","usePayrollsUpdateMutation","calculateGrossUpMutation","usePayrollsCalculateGrossUpMutation","grossUpEmployeeUuid","setGrossUpEmployeeUuid","isGrossUpModalOpen","setIsGrossUpModalOpen","grossUpEnabled","isGrossUpEligible","grossUpTargetCompensation","getGrossUpTargetCompensationName","onGrossUpSelect","employeeUuid","onCalculateGrossUp","netPay","grossUp","onGrossUpApply","grossAmount","SDKInternalError","employeeComp","ec","existingFixed","hasTargetCompensation","fc","updatedFixedCompensations","primaryJobUuid","updatedHourlyCompensations","hc","updatedPaidTimeOff","pto","transformedCompensation","transformEmployeeCompensation","result","handleGrossUpApply","onCalculatePayroll","payrollSubmitHandler","calcResult","payrollsCalculate","error","onEdit","employee","compensation","paymentMethod","onToggleExclude","employeeCompensation","onViewBlockers","payrollAlert","statusMeta","payrollShow","PayrollOverview","type","data","jsxs","Fragment","PayrollConfigurationPresentation","GrossUpModal"],"mappings":"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"}
1
+ {"version":3,"file":"PayrollConfiguration.js","sources":["../../../../src/components/Payroll/PayrollConfiguration/PayrollConfiguration.tsx"],"sourcesContent":["import { useEffect, useMemo, useRef, useState, type ReactNode } from 'react'\nimport { usePayrollsGetSuspense } from '@gusto/embedded-api/react-query/payrollsGet'\nimport { payrollsCalculate } from '@gusto/embedded-api/funcs/payrollsCalculate'\nimport { useGustoEmbeddedContext } from '@gusto/embedded-api/react-query/_context'\nimport type { GetV1CompaniesCompanyIdPayrollsPayrollIdRequest } from '@gusto/embedded-api/models/operations/getv1companiescompanyidpayrollspayrollid'\nimport type { Employee } from '@gusto/embedded-api/models/components/employee'\nimport { useTranslation } from 'react-i18next'\nimport { usePayrollsUpdateMutation } from '@gusto/embedded-api/react-query/payrollsUpdate'\nimport { usePayrollsCalculateGrossUpMutation } from '@gusto/embedded-api/react-query/payrollsCalculateGrossUp'\nimport type { PayrollEmployeeCompensationsType } from '@gusto/embedded-api/models/components/payrollemployeecompensationstype'\nimport type { PayrollUpdateEmployeeCompensations } from '@gusto/embedded-api/models/components/payrollupdate'\nimport { usePayrollsGetBlockersSuspense } from '@gusto/embedded-api/react-query/payrollsGetBlockers'\nimport { payrollSubmitHandler, type ApiPayrollBlocker } from '../PayrollBlocker/payrollHelpers'\nimport { GrossUpModal } from '../GrossUpModal'\nimport { PayrollOverview } from '../PayrollOverview/PayrollOverview'\nimport type { PayrollFlowAlert } from '../PayrollFlow/PayrollFlowComponents'\nimport { PayrollConfigurationPresentation } from './PayrollConfigurationPresentation'\nimport { usePayrollConfigurationData } from './usePayrollConfigurationData'\nimport { getGrossUpTargetCompensationName, isGrossUpEligible } from './grossUpHelpers'\nimport { useCalculationPoll, isCalculatingStatus, type PayrollShow } from './useCalculationPoll'\nimport type { BaseComponentInterface } from '@/components/Base/Base'\nimport { BaseComponent } from '@/components/Base/Base'\nimport { componentEvents, type EventType } from '@/shared/constants'\nimport { useComponentDictionary, useI18n } from '@/i18n'\nimport { useBase } from '@/components/Base'\nimport { useDateFormatter } from '@/hooks/useDateFormatter'\nimport { SDKInternalError } from '@/types/sdkError'\n\n/**\n * Props for {@link PayrollConfiguration}.\n *\n * @public\n */\nexport interface PayrollConfigurationProps extends BaseComponentInterface<'Payroll.PayrollConfiguration'> {\n /** The associated company identifier. */\n companyId: string\n /** The associated payroll identifier. */\n payrollId: string\n /** Optional alert components to render above the configuration content. */\n alerts?: ReactNode\n /** Whether to show the reimbursements column in the compensation table. Defaults to `true`. */\n withReimbursements?: boolean\n}\n\n/**\n * Handles the configuration phase of payroll processing, allowing users to review and modify employee compensation before calculating the payroll.\n *\n * @remarks\n * If the payroll turns out to already be processed (e.g. another actor submitted it while this\n * screen was open), this component emits `runPayroll/alreadyProcessed` and then renders\n * {@link PayrollOverview} in its place — the read-only breakdown with the gated \"Cancel payroll\"\n * action — instead of the configuration table. Events from that delegated view (e.g.\n * `runPayroll/cancelled`) are emitted through this component's own `onEvent`.\n *\n * Emits the following events:\n *\n * @events\n * | Event | Description | Data |\n * | ----- | ----------- | ---- |\n * | `runPayroll/employee/edit` | An employee row is selected for editing | `{ employeeId, firstName, lastName }` |\n * | `runPayroll/employee/skip` | An employee is skipped or unskipped for this payroll | `{ employeeId }` |\n * | `runPayroll/employee/saved` | Employee compensation changes are persisted | `{ payrollPrepared }` |\n * | `runPayroll/calculated` | Payroll calculation completes successfully | `{ payrollId, alert, payPeriod }` |\n * | `runPayroll/alreadyProcessed` | The payroll turns out to already be processed while configuring it | `{ payrollId, alert, payPeriod }` |\n * | `runPayroll/processingFailed` | Payroll calculation fails or times out | — |\n * | `runPayroll/blockers/viewAll` | The \"view all blockers\" affordance is selected | — |\n * | `runPayroll/grossUp/selected` | The set-net-earnings menu item is selected for an employee | `{ employeeUuid }` |\n * | `runPayroll/grossUp/calculated` | A gross-up amount is calculated from a target net pay | `{ grossUp, netPay, employeeUuid }` |\n *\n * @param props - See {@link PayrollConfigurationProps}.\n * @returns The payroll configuration screen.\n * @public\n */\nexport function PayrollConfiguration(props: PayrollConfigurationProps) {\n return (\n <BaseComponent {...props}>\n <Root {...props}>{props.children}</Root>\n </BaseComponent>\n )\n}\n\nconst Root = ({\n onEvent,\n companyId,\n payrollId,\n dictionary,\n alerts,\n withReimbursements = true,\n className,\n}: PayrollConfigurationProps) => {\n useComponentDictionary('Payroll.PayrollConfiguration', dictionary)\n useI18n('Payroll.PayrollConfiguration')\n const { t } = useTranslation('Payroll.PayrollConfiguration')\n const { baseSubmitHandler, setError } = useBase()\n const dateFormatter = useDateFormatter()\n\n const [isCalculatingPayroll, setIsCalculatingPayroll] = useState(false)\n // True once this screen has read a \"calculating\" status for the payroll, whether we started that\n // calc or someone else did. Calling prepare after that would wipe the result, so we use this to\n // keep prepare off.\n const hasSeenCalculatingRef = useRef(false)\n // Set when a poll ends in a non-retryable read error without confirming a calculated/failed\n // outcome. Guards the auto-pickup effect below from re-arming a poll against the same stale\n // \"Calculating\" read over and over -- it only clears once the status genuinely leaves Calculating.\n const hasTerminalPollErrorRef = useRef(false)\n const gustoClient = useGustoEmbeddedContext()\n\n const payrollRequest = useMemo<GetV1CompaniesCompanyIdPayrollsPayrollIdRequest>(\n () => ({\n companyId,\n payrollId,\n include: ['taxes', 'benefits', 'deductions', 'payroll_status_meta'],\n }),\n [companyId, payrollId],\n )\n\n const { data: payrollData, refetch: refetchPayroll } = usePayrollsGetSuspense(payrollRequest)\n\n const excludedEmployeeUuids = useMemo(\n () =>\n payrollData.payrollShow?.employeeCompensations\n ?.filter(comp => comp.excluded)\n .map(comp => comp.employeeUuid!)\n .filter(Boolean) ?? [],\n [payrollData.payrollShow?.employeeCompensations],\n )\n\n // Remember once we've seen it calculating.\n if (isCalculatingStatus(payrollData.payrollShow?.processingRequest)) {\n hasSeenCalculatingRef.current = true\n }\n\n const { data: blockersData } = usePayrollsGetBlockersSuspense({\n companyUuid: companyId,\n })\n\n const payrollBlockerList = blockersData.payrollBlockers ?? []\n\n const blockersFromApi: ApiPayrollBlocker[] = payrollBlockerList.map(blocker => ({\n key: blocker.key,\n message: blocker.message,\n }))\n\n const [payrollBlockers, setPayrollBlockers] = useState(blockersFromApi)\n // Drives the loader gate below. Deliberately separate from `error` -- `baseSubmitHandler`\n // clears `error` at the start of *any* submit (e.g. skipping an employee, applying a gross-up),\n // which would otherwise reopen this gate and get the loader stuck on with no poll running to\n // ever clear it (SDK-1276). Only the same sites that used to own the old boolean flag touch it.\n const [hasProcessingFailedAlert, setHasProcessingFailedAlert] = useState(false)\n\n const emitProcessingFailed = () => {\n onEvent(componentEvents.RUN_PAYROLL_PROCESSING_FAILED)\n setHasProcessingFailedAlert(true)\n setError({\n category: 'internal_error',\n message: `${t('alerts.processingFailed.label')}. ${t('alerts.processingFailed.message')}`,\n fieldErrors: [],\n })\n }\n\n const onProcessingFailed = (payroll: PayrollShow | undefined) => {\n emitProcessingFailed()\n // Let prepare run again on retry — but only when there is no calculation for it to wipe.\n if (payroll?.calculatedAt == null) {\n hasSeenCalculatingRef.current = false\n }\n }\n\n const { start: startCalculationPoll, isPolling } = useCalculationPoll({\n refetch: refetchPayroll,\n onCalculated: (payroll: PayrollShow | undefined) => {\n onEvent(componentEvents.RUN_PAYROLL_CALCULATED, {\n payrollId,\n alert: {\n type: 'success',\n title: t('alerts.progressSaved'),\n alertKey: 'progressSaved',\n },\n payPeriod: payroll?.payPeriod,\n })\n setPayrollBlockers([])\n },\n onProcessingFailed,\n // Unlike a real processing failure, we never confirmed whether the calculation actually\n // succeeded server-side, so this must not reset hasSeenCalculatingRef — doing so would\n // re-arm prepare and risk wiping a calculation that may have genuinely completed.\n onError: () => {\n hasTerminalPollErrorRef.current = true\n emitProcessingFailed()\n },\n })\n\n // Show the loading state the whole time we're calculating, so a second tab shows the loader\n // instead of a blank table until it moves to the overview. Once the failed/error alert is\n // showing, the poll has already reached a terminal state, so the loading UI must clear even\n // though hasSeenCalculatingRef stays true (it still guards prepare separately, below).\n const isCalculatingActive =\n !hasProcessingFailedAlert &&\n (isCalculatingPayroll || isPolling || hasSeenCalculatingRef.current)\n\n const {\n employeeDetails,\n employeeCompensations,\n paySchedule,\n payPeriod,\n payrollCategory,\n pagination,\n isLoading,\n isAlreadyProcessed,\n refetch,\n } = usePayrollConfigurationData({\n companyId,\n payrollId,\n // Don't prepare while calculating, or once we've seen it calculate. If the payroll was already\n // calculated when we opened (e.g. clicking Edit), we do prepare so it can be edited.\n disablePrepare: isPolling || isCalculatingPayroll || hasSeenCalculatingRef.current,\n excludedEmployeeUuids,\n })\n\n const alreadyProcessedAlert: PayrollFlowAlert = useMemo(\n () => ({\n type: 'error',\n title: t('alerts.alreadyProcessed'),\n alertKey: 'alreadyProcessed',\n }),\n [t],\n )\n\n const hasFiredAlreadyProcessedRef = useRef(false)\n\n useEffect(() => {\n if (!isAlreadyProcessed) {\n hasFiredAlreadyProcessedRef.current = false\n return\n }\n if (hasFiredAlreadyProcessedRef.current) return\n hasFiredAlreadyProcessedRef.current = true\n onEvent(componentEvents.RUN_PAYROLL_ALREADY_PROCESSED, {\n payrollId,\n alert: alreadyProcessedAlert,\n payPeriod: payrollData.payrollShow?.payPeriod,\n })\n }, [\n isAlreadyProcessed,\n onEvent,\n payrollId,\n alreadyProcessedAlert,\n payrollData.payrollShow?.payPeriod,\n ])\n\n const { mutateAsync: updatePayroll, isPending: isUpdatingPayroll } = usePayrollsUpdateMutation()\n\n const { mutateAsync: calculateGrossUpMutation } = usePayrollsCalculateGrossUpMutation()\n\n const [grossUpEmployeeUuid, setGrossUpEmployeeUuid] = useState<string | null>(null)\n const [isGrossUpModalOpen, setIsGrossUpModalOpen] = useState(false)\n\n const grossUpEnabled = isGrossUpEligible(payrollCategory)\n const grossUpTargetCompensation = getGrossUpTargetCompensationName(payrollCategory)\n\n const onGrossUpSelect = (employeeUuid: string) => {\n setGrossUpEmployeeUuid(employeeUuid)\n setIsGrossUpModalOpen(true)\n onEvent(componentEvents.RUN_PAYROLL_GROSS_UP_SELECTED, { employeeUuid })\n }\n\n const onCalculateGrossUp = async (netPay: number): Promise<string | null> => {\n if (!grossUpEmployeeUuid) return null\n let grossUp: string | null = null\n\n await baseSubmitHandler(null, async () => {\n const result = await calculateGrossUpMutation({\n request: {\n payrollUuid: payrollId,\n payrollGrossUpRequest: {\n employeeUuid: grossUpEmployeeUuid,\n netPay: netPay.toString(),\n },\n },\n })\n\n grossUp = result.payrollGrossUpResponse?.grossUp ?? null\n\n if (grossUp) {\n onEvent(componentEvents.RUN_PAYROLL_GROSS_UP_CALCULATED, {\n grossUp,\n netPay,\n employeeUuid: grossUpEmployeeUuid,\n })\n }\n })\n\n return grossUp\n }\n\n const onGrossUpApply = async (grossAmount: string) => {\n if (!grossUpEmployeeUuid || !grossUpTargetCompensation) {\n throw new SDKInternalError(\n 'Unable to apply gross-up: missing employee or target compensation.',\n )\n }\n\n const employeeComp = employeeCompensations.find(ec => ec.employeeUuid === grossUpEmployeeUuid)\n if (!employeeComp) {\n throw new SDKInternalError('Unable to apply gross-up: employee compensation not found.')\n }\n\n const existingFixed = employeeComp.fixedCompensations ?? []\n const hasTargetCompensation = existingFixed.some(\n fc => fc.name?.toLowerCase() === grossUpTargetCompensation.toLowerCase(),\n )\n\n const updatedFixedCompensations = existingFixed.map(fc => ({\n name: fc.name,\n jobUuid: fc.jobUuid,\n amount:\n fc.name?.toLowerCase() === grossUpTargetCompensation.toLowerCase() ? grossAmount : '0',\n }))\n\n if (!hasTargetCompensation) {\n const primaryJobUuid =\n employeeComp.hourlyCompensations?.[0]?.jobUuid ?? existingFixed[0]?.jobUuid ?? ''\n updatedFixedCompensations.push({\n name: grossUpTargetCompensation,\n jobUuid: primaryJobUuid,\n amount: grossAmount,\n })\n }\n\n const updatedHourlyCompensations = (employeeComp.hourlyCompensations ?? []).map(hc => ({\n name: hc.name,\n jobUuid: hc.jobUuid,\n hours: '0',\n }))\n\n const updatedPaidTimeOff = (employeeComp.paidTimeOff ?? []).map(pto => ({\n name: pto.name,\n hours: '0',\n }))\n\n const transformedCompensation = transformEmployeeCompensation({\n ...employeeComp,\n fixedCompensations: updatedFixedCompensations,\n hourlyCompensations: updatedHourlyCompensations,\n paidTimeOff: updatedPaidTimeOff,\n })\n\n await baseSubmitHandler({}, async () => {\n const result = await updatePayroll({\n request: {\n companyId,\n payrollId,\n payrollUpdate: {\n employeeCompensations: [{ ...transformedCompensation, excluded: false }],\n },\n },\n })\n onEvent(componentEvents.RUN_PAYROLL_EMPLOYEE_SAVED, {\n payrollPrepared: result.payrollPrepared,\n })\n await refetch()\n })\n\n setGrossUpEmployeeUuid(null)\n setIsGrossUpModalOpen(false)\n }\n\n const handleGrossUpApply = async (grossAmount: string) => {\n try {\n await onGrossUpApply(grossAmount)\n } catch {\n // Modal stays open; error is surfaced by baseSubmitHandler\n }\n }\n\n const onCalculatePayroll = async () => {\n setPayrollBlockers([])\n setHasProcessingFailedAlert(false)\n setError(null)\n // Mark it right away so prepare can't run and cancel the calculation we just started.\n hasSeenCalculatingRef.current = true\n\n await baseSubmitHandler({}, async () => {\n const result = await payrollSubmitHandler(async () => {\n setIsCalculatingPayroll(true)\n try {\n const calcResult = await payrollsCalculate(gustoClient, {\n companyId,\n payrollId,\n })\n if (!calcResult.ok) {\n throw calcResult.error\n }\n startCalculationPoll({\n baselineCalculatedAt: payrollData.payrollShow?.calculatedAt?.getTime() ?? null,\n // We just submitted the payroll, so we haven't yet seen it return with the calculating status\n sawCalculatingThisPoll: false,\n })\n } catch (error) {\n // Calculate itself failed before polling ever started (e.g. a 409 conflict), so let\n // prepare run again on retry -- otherwise hasSeenCalculatingRef stays stuck true forever\n // with no RUN_PAYROLL_CALCULATED/RUN_PAYROLL_PROCESSING_FAILED event ever firing.\n hasSeenCalculatingRef.current = false\n throw error\n } finally {\n setIsCalculatingPayroll(false)\n }\n })\n\n if (!result.success && result.blockers.length > 0) {\n setPayrollBlockers(result.blockers)\n }\n })\n }\n\n const onEdit = (employee: Employee) => {\n onEvent(componentEvents.RUN_PAYROLL_EMPLOYEE_EDIT, {\n employeeId: employee.uuid,\n firstName: employee.firstName,\n lastName: employee.lastName,\n })\n }\n\n const transformEmployeeCompensation = (\n compensation: PayrollEmployeeCompensationsType,\n ): PayrollUpdateEmployeeCompensations => {\n const { paymentMethod } = compensation\n return {\n employeeUuid: compensation.employeeUuid,\n version: compensation.version,\n excluded: compensation.excluded,\n fixedCompensations: compensation.fixedCompensations,\n hourlyCompensations: compensation.hourlyCompensations,\n paidTimeOff: compensation.paidTimeOff,\n deductions: compensation.deductions,\n ...(paymentMethod && paymentMethod !== 'Historical' ? { paymentMethod } : {}),\n memo: compensation.memo || undefined,\n }\n }\n\n const onToggleExclude = async (employeeCompensation: PayrollEmployeeCompensationsType) => {\n onEvent(componentEvents.RUN_PAYROLL_EMPLOYEE_SKIP, {\n employeeId: employeeCompensation.employeeUuid,\n })\n await baseSubmitHandler({}, async () => {\n const transformedCompensation = transformEmployeeCompensation(employeeCompensation)\n const result = await updatePayroll({\n request: {\n companyId,\n payrollId,\n payrollUpdate: {\n employeeCompensations: [\n { ...transformedCompensation, excluded: !transformedCompensation.excluded },\n ],\n },\n },\n })\n onEvent(componentEvents.RUN_PAYROLL_EMPLOYEE_SAVED, {\n payrollPrepared: result.payrollPrepared,\n })\n await refetch()\n })\n }\n\n const onViewBlockers = () => {\n onEvent(componentEvents.RUN_PAYROLL_BLOCKERS_VIEW_ALL)\n }\n\n // Pick up a calculation this screen didn't start (another tab, another admin). Starting a poll\n // from rendered data is fine — only the decision to *finish* one must not depend on a render,\n // and that lives in the poll loop.\n useEffect(() => {\n if (isPolling) return\n if (!isCalculatingStatus(payrollData.payrollShow?.processingRequest)) {\n // The status only leaves Calculating on a genuinely fresh read, so this is where a prior\n // terminal failure stops blocking future pickups.\n hasTerminalPollErrorRef.current = false\n return\n }\n // A read error we already reported for this same stale \"Calculating\" snapshot -- retrying it\n // immediately would just spin (fail, isPolling flips false, this effect fires again, repeat)\n // instead of waiting for a genuinely new read.\n if (hasTerminalPollErrorRef.current) return\n\n // A fresh calculating status means a real calculation is in flight again -- even right after\n // this screen's own deadline reported one as failed -- so any stale failure alert must not\n // linger over it and block the loading UI.\n setHasProcessingFailedAlert(false)\n setError(null)\n startCalculationPoll({\n baselineCalculatedAt: payrollData.payrollShow?.calculatedAt?.getTime() ?? null,\n // We have seen the calculating status, which is why we're starting to poll now until it completes or fails.\n sawCalculatingThisPoll: true,\n })\n }, [\n payrollData.payrollShow?.processingRequest,\n payrollData.payrollShow?.calculatedAt,\n isPolling,\n startCalculationPoll,\n setError,\n ])\n\n const payrollAlert = (() => {\n const statusMeta = payrollData.payrollShow?.payrollStatusMeta\n\n const isLatePayroll =\n statusMeta?.payrollLate &&\n statusMeta.initialCheckDate &&\n statusMeta.expectedDebitTime &&\n statusMeta.expectedCheckDate\n\n if (isLatePayroll) {\n return {\n label: t('alerts.payrollLate', {\n initialCheckDate: dateFormatter.formatShortWithWeekday(statusMeta.initialCheckDate),\n }),\n content: t('alerts.payrollLateText', {\n ...dateFormatter.formatWithTime(statusMeta.expectedDebitTime),\n newCheckDate: dateFormatter.formatShortWithWeekday(statusMeta.expectedCheckDate),\n }),\n variant: 'warning' as const,\n }\n }\n\n const { payrollShow } = payrollData\n\n if (payrollShow?.checkDate && payrollShow.payrollDeadline) {\n return {\n label: t('alerts.directDepositDeadline', {\n payDate: dateFormatter.formatShortWithWeekday(payrollShow.checkDate),\n ...dateFormatter.formatWithTime(payrollShow.payrollDeadline),\n }),\n content: t('alerts.directDepositDeadlineText'),\n variant: 'info' as const,\n }\n }\n\n return undefined\n })()\n\n if (isAlreadyProcessed) {\n const onAlreadyProcessedOverviewEvent = (type: EventType, data?: unknown) => {\n if (type === componentEvents.RUN_PAYROLL_CANCELLED) {\n // Cancelling un-processes the payroll, making it editable again — re-run prepare so\n // this component drops back into the configuration table for the same payrollId.\n void refetch()\n }\n onEvent(type, data)\n }\n\n return (\n <PayrollOverview\n className={className}\n companyId={companyId}\n payrollId={payrollId}\n onEvent={onAlreadyProcessedOverviewEvent}\n withReimbursements={withReimbursements}\n alerts={[alreadyProcessedAlert]}\n />\n )\n }\n\n return (\n <>\n <PayrollConfigurationPresentation\n className={className}\n onCalculatePayroll={onCalculatePayroll}\n isCalculateDisabled={blockersFromApi.length > 0}\n onEdit={onEdit}\n onToggleExclude={onToggleExclude}\n onViewBlockers={onViewBlockers}\n employeeCompensations={employeeCompensations}\n employeeDetails={employeeDetails}\n payPeriod={payPeriod}\n paySchedule={paySchedule}\n payrollCategory={payrollCategory}\n alerts={alerts}\n payrollAlert={payrollAlert}\n isPending={isCalculatingActive || isLoading || isUpdatingPayroll}\n isCalculating={isCalculatingActive}\n payrollBlockers={payrollBlockers}\n pagination={pagination}\n withReimbursements={withReimbursements}\n grossUpEnabled={grossUpEnabled}\n onGrossUpSelect={onGrossUpSelect}\n />\n {grossUpEnabled && (\n <GrossUpModal\n isOpen={isGrossUpModalOpen}\n onCalculateGrossUp={onCalculateGrossUp}\n onApply={handleGrossUpApply}\n onCancel={() => {\n setIsGrossUpModalOpen(false)\n }}\n />\n )}\n </>\n )\n}\n"],"names":["PayrollConfiguration","props","jsx","BaseComponent","Root","onEvent","companyId","payrollId","dictionary","alerts","withReimbursements","className","useComponentDictionary","useI18n","t","useTranslation","baseSubmitHandler","setError","useBase","dateFormatter","useDateFormatter","isCalculatingPayroll","setIsCalculatingPayroll","useState","hasSeenCalculatingRef","useRef","hasTerminalPollErrorRef","gustoClient","useGustoEmbeddedContext","payrollRequest","useMemo","payrollData","refetchPayroll","usePayrollsGetSuspense","excludedEmployeeUuids","comp","isCalculatingStatus","blockersData","usePayrollsGetBlockersSuspense","blockersFromApi","blocker","payrollBlockers","setPayrollBlockers","hasProcessingFailedAlert","setHasProcessingFailedAlert","emitProcessingFailed","componentEvents","onProcessingFailed","payroll","startCalculationPoll","isPolling","useCalculationPoll","isCalculatingActive","employeeDetails","employeeCompensations","paySchedule","payPeriod","payrollCategory","pagination","isLoading","isAlreadyProcessed","refetch","usePayrollConfigurationData","alreadyProcessedAlert","hasFiredAlreadyProcessedRef","useEffect","updatePayroll","isUpdatingPayroll","usePayrollsUpdateMutation","calculateGrossUpMutation","usePayrollsCalculateGrossUpMutation","grossUpEmployeeUuid","setGrossUpEmployeeUuid","isGrossUpModalOpen","setIsGrossUpModalOpen","grossUpEnabled","isGrossUpEligible","grossUpTargetCompensation","getGrossUpTargetCompensationName","onGrossUpSelect","employeeUuid","onCalculateGrossUp","netPay","grossUp","onGrossUpApply","grossAmount","SDKInternalError","employeeComp","ec","existingFixed","hasTargetCompensation","fc","updatedFixedCompensations","primaryJobUuid","updatedHourlyCompensations","hc","updatedPaidTimeOff","pto","transformedCompensation","transformEmployeeCompensation","result","handleGrossUpApply","onCalculatePayroll","payrollSubmitHandler","calcResult","payrollsCalculate","error","onEdit","employee","compensation","paymentMethod","onToggleExclude","employeeCompensation","onViewBlockers","payrollAlert","statusMeta","payrollShow","PayrollOverview","type","data","jsxs","Fragment","PayrollConfigurationPresentation","GrossUpModal"],"mappings":"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"}
@@ -1,34 +1,36 @@
1
- import { jsx as r, jsxs as o, Fragment as V } from "react/jsx-runtime";
2
- import { useRef as _ } from "react";
3
- import { useTranslation as z, Trans as K } from "react-i18next";
4
- import { useFormatEmployeePayRate as W, getRegularHours as X, getOvertimeHours as q, formatHoursDisplay as R, getTotalPtoHours as J, getAdditionalEarnings as Q, getReimbursements as Y, calculateGrossPay as Z } from "../helpers.js";
1
+ import { jsx as r, jsxs as o, Fragment as _ } from "react/jsx-runtime";
2
+ import { useRef as z } from "react";
3
+ import K from "classnames";
4
+ import { useTranslation as W, Trans as X } from "react-i18next";
5
+ import { useFormatEmployeePayRate as q, getRegularHours as J, getOvertimeHours as Q, formatHoursDisplay as R, getTotalPtoHours as Y, getAdditionalEarnings as Z, getReimbursements as $, calculateGrossPay as ee } from "../helpers.js";
5
6
  import { PayrollCategory as E } from "../payrollTypes.js";
6
- import { PayrollBlockerAlerts as $ } from "../PayrollBlocker/components/PayrollBlockerAlerts.js";
7
- import ee from "./PayrollConfigurationPresentation.module.scss.js";
8
- import { useI18n as te } from "../../../i18n/I18n.js";
7
+ import { PayrollBlockerAlerts as te } from "../PayrollBlocker/components/PayrollBlockerAlerts.js";
8
+ import re from "./PayrollConfigurationPresentation.module.scss.js";
9
+ import { useI18n as ne } from "../../../i18n/I18n.js";
9
10
  import { Flex as u, FlexItem as b } from "../../Common/Flex/Flex.js";
10
- import { Grid as re } from "../../Common/Grid/Grid.js";
11
- import { HamburgerMenu as ne } from "../../Common/HamburgerMenu/HamburgerMenu.js";
12
- import { useComponentContext as oe } from "../../../contexts/ComponentAdapter/useComponentContext.js";
13
- import ie from "../../../assets/icons/pencil.svg.js";
14
- import le from "../../../assets/icons/x-circle.svg.js";
15
- import ae from "../../../assets/icons/plus-circle.svg.js";
16
- import se from "../../../assets/icons/coins-hand.svg.js";
17
- import { formatNumberAsCurrency as p, firstLastName as me } from "../../../helpers/formattedStrings.js";
18
- import { useDateFormatter as ce } from "../../../hooks/useDateFormatter.js";
19
- import ue from "../../../hooks/useContainerBreakpoints/useContainerBreakpoints.js";
20
- import { useUnstableFeature as de } from "../../../contexts/UnstableFeaturesProvider/useUnstableFeature.js";
21
- import { PayrollLoading as pe } from "../../Common/PayrollLoading/PayrollLoading.js";
22
- import { DataView as fe } from "../../Common/DataView/DataView.js";
23
- const ge = (l, f) => l?.startDate && l.endDate ? f.formatPayPeriod(l.startDate, l.endDate) : { startDate: "", endDate: "" }, Se = ({
24
- employeeCompensations: l,
25
- employeeDetails: f,
11
+ import { Grid as oe } from "../../Common/Grid/Grid.js";
12
+ import { HamburgerMenu as ie } from "../../Common/HamburgerMenu/HamburgerMenu.js";
13
+ import { useComponentContext as le } from "../../../contexts/ComponentAdapter/useComponentContext.js";
14
+ import ae from "../../../assets/icons/pencil.svg.js";
15
+ import se from "../../../assets/icons/x-circle.svg.js";
16
+ import me from "../../../assets/icons/plus-circle.svg.js";
17
+ import ce from "../../../assets/icons/coins-hand.svg.js";
18
+ import { formatNumberAsCurrency as p, firstLastName as ue } from "../../../helpers/formattedStrings.js";
19
+ import { useDateFormatter as de } from "../../../hooks/useDateFormatter.js";
20
+ import pe from "../../../hooks/useContainerBreakpoints/useContainerBreakpoints.js";
21
+ import { useUnstableFeature as fe } from "../../../contexts/UnstableFeaturesProvider/useUnstableFeature.js";
22
+ import { PayrollLoading as ge } from "../../Common/PayrollLoading/PayrollLoading.js";
23
+ import { DataView as ye } from "../../Common/DataView/DataView.js";
24
+ const he = (l, f) => l?.startDate && l.endDate ? f.formatPayPeriod(l.startDate, l.endDate) : { startDate: "", endDate: "" }, Ve = ({
25
+ className: l,
26
+ employeeCompensations: f,
27
+ employeeDetails: j,
26
28
  payPeriod: g,
27
- paySchedule: j,
28
- onEdit: w,
29
- onToggleExclude: H,
29
+ paySchedule: w,
30
+ onEdit: H,
31
+ onToggleExclude: M,
30
32
  onCalculatePayroll: D,
31
- onViewBlockers: M,
33
+ onViewBlockers: N,
32
34
  payrollCategory: y = E.Regular,
33
35
  alerts: P,
34
36
  payrollAlert: m,
@@ -36,18 +38,18 @@ const ge = (l, f) => l?.startDate && l.endDate ? f.formatPayPeriod(l.startDate,
36
38
  isCalculating: a,
37
39
  payrollBlockers: C = [],
38
40
  pagination: F,
39
- withReimbursements: N = !0,
41
+ withReimbursements: U = !0,
40
42
  isCalculateDisabled: k = !1,
41
- grossUpEnabled: U = !1,
42
- onGrossUpSelect: B
43
+ grossUpEnabled: B = !1,
44
+ onGrossUpSelect: G
43
45
  }) => {
44
- const { Button: x, Heading: T, Text: d, Badge: G, Alert: I } = oe();
45
- te("Payroll.PayrollConfiguration");
46
- const { t } = z("Payroll.PayrollConfiguration"), O = ce(), S = W(), A = de("payrollRegularRateOfPay"), v = _(null), s = ue({ ref: v }).includes("small"), c = new Map(f.map((e) => [e.uuid, e])), L = (e) => {
46
+ const { Button: x, Heading: T, Text: d, Badge: I, Alert: O } = le();
47
+ ne("Payroll.PayrollConfiguration");
48
+ const { t } = W("Payroll.PayrollConfiguration"), S = de(), A = q(), L = fe("payrollRegularRateOfPay"), v = z(null), s = pe({ ref: v }).includes("small"), c = new Map(j.map((e) => [e.uuid, e])), V = (e) => {
47
49
  const n = c.get(e);
48
- return (n ? me({ first_name: n.firstName, last_name: n.lastName }) : "") || t("unknownEmployeeFallback");
50
+ return (n ? ue({ first_name: n.firstName, last_name: n.lastName }) : "") || t("unknownEmployeeFallback");
49
51
  };
50
- return /* @__PURE__ */ r("div", { ref: v, className: ee.container, children: /* @__PURE__ */ o(u, { flexDirection: "column", gap: 32, children: [
52
+ return /* @__PURE__ */ r("div", { ref: v, className: K(re.container, l), children: /* @__PURE__ */ o(u, { flexDirection: "column", gap: 32, children: [
51
53
  /* @__PURE__ */ o(
52
54
  u,
53
55
  {
@@ -59,13 +61,13 @@ const ge = (l, f) => l?.startDate && l.endDate ? f.formatPayPeriod(l.startDate,
59
61
  /* @__PURE__ */ o(b, { children: [
60
62
  /* @__PURE__ */ r(T, { as: "h1", children: t("pageTitle") }),
61
63
  g && /* @__PURE__ */ r(d, { variant: "supporting", children: /* @__PURE__ */ r(
62
- K,
64
+ X,
63
65
  {
64
66
  i18nKey: y === E.Dismissal ? "descriptionDismissal" : "description",
65
67
  t,
66
68
  components: { dateWrapper: /* @__PURE__ */ r(d, { weight: "bold", as: "span" }) },
67
69
  values: {
68
- ...ge(g, O),
70
+ ...he(g, S),
69
71
  payrollType: y
70
72
  }
71
73
  }
@@ -91,22 +93,22 @@ const ge = (l, f) => l?.startDate && l.endDate ? f.formatPayPeriod(l.startDate,
91
93
  ]
92
94
  }
93
95
  ),
94
- (P || m) && /* @__PURE__ */ o(re, { gap: 16, gridTemplateColumns: "1fr", children: [
95
- m && /* @__PURE__ */ r(I, { label: m.label, status: m.variant, children: m.content }),
96
+ (P || m) && /* @__PURE__ */ o(oe, { gap: 16, gridTemplateColumns: "1fr", children: [
97
+ m && /* @__PURE__ */ r(O, { label: m.label, status: m.variant, children: m.content }),
96
98
  P
97
99
  ] }),
98
100
  h ? /* @__PURE__ */ r(
99
- pe,
101
+ ge,
100
102
  {
101
103
  title: t(a ? "calculatingTitle" : "loadingTitle"),
102
104
  description: t(a ? "calculatingDescription" : "loadingDescription")
103
105
  }
104
- ) : /* @__PURE__ */ o(V, { children: [
106
+ ) : /* @__PURE__ */ o(_, { children: [
105
107
  C.length > 0 && /* @__PURE__ */ r(
106
- $,
108
+ te,
107
109
  {
108
110
  blockers: C,
109
- onViewBlockersClick: M
111
+ onViewBlockersClick: N
110
112
  }
111
113
  ),
112
114
  /* @__PURE__ */ o(u, { flexDirection: "column", gap: 20, children: [
@@ -115,18 +117,18 @@ const ge = (l, f) => l?.startDate && l.endDate ? f.formatPayPeriod(l.startDate,
115
117
  /* @__PURE__ */ r(d, { variant: "supporting", children: t("hoursAndEarningsDescription") })
116
118
  ] }),
117
119
  /* @__PURE__ */ r(
118
- fe,
120
+ ye,
119
121
  {
120
122
  label: t("employeeCompensationsTitle"),
121
123
  columns: [
122
124
  {
123
125
  title: t("tableColumns.employees"),
124
126
  render: (e) => {
125
- const n = c.get(e.employeeUuid || ""), i = S(n);
127
+ const n = c.get(e.employeeUuid || ""), i = A(n);
126
128
  return /* @__PURE__ */ o(u, { flexDirection: "column", gap: 0, children: [
127
- L(e.employeeUuid || ""),
129
+ V(e.employeeUuid || ""),
128
130
  i && /* @__PURE__ */ r(d, { size: "xs", variant: "supporting", children: i }),
129
- e.excluded && /* @__PURE__ */ r(G, { status: "warning", children: t("skippedBadge") })
131
+ e.excluded && /* @__PURE__ */ r(I, { status: "warning", children: t("skippedBadge") })
130
132
  ] });
131
133
  }
132
134
  },
@@ -134,7 +136,7 @@ const ge = (l, f) => l?.startDate && l.endDate ? f.formatPayPeriod(l.startDate,
134
136
  title: t("tableColumns.hours"),
135
137
  justify: "end",
136
138
  render: (e) => {
137
- const n = X(e), i = q(e);
139
+ const n = J(e), i = Q(e);
138
140
  return R(n + i);
139
141
  }
140
142
  },
@@ -142,7 +144,7 @@ const ge = (l, f) => l?.startDate && l.endDate ? f.formatPayPeriod(l.startDate,
142
144
  title: t("tableColumns.timeOff"),
143
145
  justify: "end",
144
146
  render: (e) => {
145
- const n = J(e);
147
+ const n = Y(e);
146
148
  return R(n);
147
149
  }
148
150
  },
@@ -150,16 +152,16 @@ const ge = (l, f) => l?.startDate && l.endDate ? f.formatPayPeriod(l.startDate,
150
152
  title: t("tableColumns.additionalEarnings"),
151
153
  justify: "end",
152
154
  render: (e) => {
153
- const n = Q(e);
155
+ const n = Z(e);
154
156
  return p(n);
155
157
  }
156
158
  },
157
- ...N ? [
159
+ ...U ? [
158
160
  {
159
161
  title: t("tableColumns.reimbursements"),
160
162
  justify: "end",
161
163
  render: (e) => {
162
- const n = Y(e);
164
+ const n = $(e);
163
165
  return p(n);
164
166
  }
165
167
  }
@@ -168,45 +170,45 @@ const ge = (l, f) => l?.startDate && l.endDate ? f.formatPayPeriod(l.startDate,
168
170
  title: t("tableColumns.totalPay"),
169
171
  justify: "end",
170
172
  render: (e) => {
171
- if (A)
173
+ if (L)
172
174
  return p(Number(e.grossPay ?? 0));
173
- const n = c.get(e.employeeUuid || ""), i = n ? Z(
175
+ const n = c.get(e.employeeUuid || ""), i = n ? ee(
174
176
  e,
175
177
  n,
176
178
  g?.startDate,
177
- j,
179
+ w,
178
180
  y
179
181
  ) : 0;
180
182
  return p(i);
181
183
  }
182
184
  }
183
185
  ],
184
- data: l,
186
+ data: f,
185
187
  itemMenu: (e) => /* @__PURE__ */ r(
186
- ne,
188
+ ie,
187
189
  {
188
190
  items: [
189
191
  {
190
192
  label: t("editMenu.edit"),
191
- icon: /* @__PURE__ */ r(ie, { "aria-hidden": !0 }),
193
+ icon: /* @__PURE__ */ r(ae, { "aria-hidden": !0 }),
192
194
  onClick: () => {
193
195
  const n = c.get(e.employeeUuid || "");
194
- n && w(n);
196
+ n && H(n);
195
197
  }
196
198
  },
197
199
  {
198
200
  label: t(e.excluded ? "editMenu.unskip" : "editMenu.skip"),
199
- icon: e.excluded ? /* @__PURE__ */ r(ae, { "aria-hidden": !0 }) : /* @__PURE__ */ r(le, { "aria-hidden": !0 }),
201
+ icon: e.excluded ? /* @__PURE__ */ r(me, { "aria-hidden": !0 }) : /* @__PURE__ */ r(se, { "aria-hidden": !0 }),
200
202
  onClick: () => {
201
- c.get(e.employeeUuid || "") && H(e);
203
+ c.get(e.employeeUuid || "") && M(e);
202
204
  }
203
205
  },
204
- ...U ? [
206
+ ...B ? [
205
207
  {
206
208
  label: t("editMenu.setNetEarnings"),
207
- icon: /* @__PURE__ */ r(se, { "aria-hidden": !0 }),
209
+ icon: /* @__PURE__ */ r(ce, { "aria-hidden": !0 }),
208
210
  onClick: () => {
209
- e.employeeUuid && B?.(e.employeeUuid);
211
+ e.employeeUuid && G?.(e.employeeUuid);
210
212
  }
211
213
  }
212
214
  ] : []
@@ -222,6 +224,6 @@ const ge = (l, f) => l?.startDate && l.endDate ? f.formatPayPeriod(l.startDate,
222
224
  ] }) });
223
225
  };
224
226
  export {
225
- Se as PayrollConfigurationPresentation
227
+ Ve as PayrollConfigurationPresentation
226
228
  };
227
229
  //# sourceMappingURL=PayrollConfigurationPresentation.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PayrollConfigurationPresentation.js","sources":["../../../../src/components/Payroll/PayrollConfiguration/PayrollConfigurationPresentation.tsx"],"sourcesContent":["import type { ReactNode } from 'react'\nimport { useRef } from 'react'\nimport type { PayrollEmployeeCompensationsType } from '@gusto/embedded-api/models/components/payrollemployeecompensationstype'\nimport type { Employee } from '@gusto/embedded-api/models/components/employee'\nimport type { PayrollPayPeriodType } from '@gusto/embedded-api/models/components/payrollpayperiodtype'\nimport type { PayScheduleShow as PayScheduleObject } from '@gusto/embedded-api/models/components/payscheduleshow'\nimport { Trans, useTranslation } from 'react-i18next'\nimport {\n useFormatEmployeePayRate,\n getRegularHours,\n getOvertimeHours,\n getTotalPtoHours,\n getAdditionalEarnings,\n getReimbursements,\n formatHoursDisplay,\n calculateGrossPay,\n} from '../helpers'\nimport { PayrollCategory } from '../payrollTypes'\nimport type { ApiPayrollBlocker } from '../PayrollBlocker/payrollHelpers'\nimport { PayrollBlockerAlerts } from '../PayrollBlocker/components/PayrollBlockerAlerts'\nimport styles from './PayrollConfigurationPresentation.module.scss'\nimport { useI18n } from '@/i18n'\nimport { DataView, Flex, FlexItem, Grid, PayrollLoading } from '@/components/Common'\nimport type { PaginationControlProps } from '@/components/Common/PaginationControl/PaginationControlTypes'\nimport { useComponentContext } from '@/contexts/ComponentAdapter/useComponentContext'\nimport { HamburgerMenu } from '@/components/Common/HamburgerMenu'\nimport PencilSvg from '@/assets/icons/pencil.svg?react'\nimport XCircle from '@/assets/icons/x-circle.svg?react'\nimport PlusCircle from '@/assets/icons/plus-circle.svg?react'\nimport CoinsHandSvg from '@/assets/icons/coins-hand.svg?react'\nimport { firstLastName, formatNumberAsCurrency } from '@/helpers/formattedStrings'\nimport { useDateFormatter } from '@/hooks/useDateFormatter'\nimport useContainerBreakpoints from '@/hooks/useContainerBreakpoints/useContainerBreakpoints'\nimport { useUnstableFeature } from '@/contexts/UnstableFeaturesProvider/useUnstableFeature'\n\ninterface PayrollConfigurationPresentationProps {\n employeeCompensations: PayrollEmployeeCompensationsType[]\n employeeDetails: Employee[]\n payPeriod?: PayrollPayPeriodType\n paySchedule?: PayScheduleObject\n onCalculatePayroll: () => void\n onEdit: (employee: Employee) => void\n onToggleExclude: (employeeCompensation: PayrollEmployeeCompensationsType) => void\n onViewBlockers: () => void\n payrollCategory?: PayrollCategory\n alerts?: ReactNode\n payrollAlert?: {\n label: string\n content?: ReactNode\n variant: 'info' | 'warning'\n }\n isPending?: boolean\n isCalculating?: boolean\n payrollBlockers?: ApiPayrollBlocker[]\n pagination?: PaginationControlProps\n withReimbursements?: boolean\n isCalculateDisabled?: boolean\n grossUpEnabled?: boolean\n onGrossUpSelect?: (employeeUuid: string) => void\n}\n\nconst getPayrollConfigurationTitle = (\n payPeriod: PayrollPayPeriodType | undefined,\n dateFormatter: ReturnType<typeof useDateFormatter>,\n) => {\n if (payPeriod?.startDate && payPeriod.endDate) {\n return dateFormatter.formatPayPeriod(payPeriod.startDate, payPeriod.endDate)\n }\n return { startDate: '', endDate: '' }\n}\n\n/** @internal */\nexport const PayrollConfigurationPresentation = ({\n employeeCompensations,\n employeeDetails,\n payPeriod,\n paySchedule,\n onEdit,\n onToggleExclude,\n onCalculatePayroll,\n onViewBlockers,\n payrollCategory = PayrollCategory.Regular,\n alerts,\n payrollAlert,\n isPending,\n isCalculating,\n payrollBlockers = [],\n pagination,\n withReimbursements = true,\n isCalculateDisabled = false,\n grossUpEnabled = false,\n onGrossUpSelect,\n}: PayrollConfigurationPresentationProps) => {\n const { Button, Heading, Text, Badge, Alert } = useComponentContext()\n useI18n('Payroll.PayrollConfiguration')\n const { t } = useTranslation('Payroll.PayrollConfiguration')\n const dateFormatter = useDateFormatter()\n const formatEmployeePayRate = useFormatEmployeePayRate()\n const isRegularRateOfPayEnabled = useUnstableFeature('payrollRegularRateOfPay')\n const containerRef = useRef<HTMLDivElement>(null)\n const breakpoints = useContainerBreakpoints({ ref: containerRef })\n const isDesktop = breakpoints.includes('small')\n\n const employeeMap = new Map(employeeDetails.map(employee => [employee.uuid, employee]))\n\n const getEmployeeName = (employeeUuid: string) => {\n const employee = employeeMap.get(employeeUuid)\n const name = employee\n ? firstLastName({ first_name: employee.firstName, last_name: employee.lastName })\n : ''\n return name || t('unknownEmployeeFallback')\n }\n\n return (\n <div ref={containerRef} className={styles.container}>\n <Flex flexDirection=\"column\" gap={32}>\n <Flex\n flexDirection={isDesktop ? 'row' : 'column'}\n justifyContent={isDesktop ? 'space-between' : 'normal'}\n alignItems={isDesktop ? 'center' : 'stretch'}\n gap={isDesktop ? 0 : 16}\n >\n <FlexItem>\n <Heading as=\"h1\">{t('pageTitle')}</Heading>\n {payPeriod && (\n <Text variant=\"supporting\">\n <Trans\n i18nKey={\n payrollCategory === PayrollCategory.Dismissal\n ? 'descriptionDismissal'\n : 'description'\n }\n t={t}\n components={{ dateWrapper: <Text weight=\"bold\" as=\"span\" /> }}\n values={{\n ...getPayrollConfigurationTitle(payPeriod, dateFormatter),\n payrollType: payrollCategory,\n }}\n />\n </Text>\n )}\n </FlexItem>\n <FlexItem flexGrow={isDesktop ? 0 : 0}>\n {isDesktop ? (\n <Button\n title={t('calculatePayrollTitle')}\n onClick={onCalculatePayroll}\n isDisabled={isCalculateDisabled || isPending || isCalculating}\n >\n {isCalculating ? t('calculatingPayroll') : t('calculatePayroll')}\n </Button>\n ) : (\n <Flex flexDirection=\"column\" justifyContent=\"normal\" alignItems=\"stretch\" gap={12}>\n <Button\n title={t('calculatePayrollTitle')}\n onClick={onCalculatePayroll}\n isDisabled={isCalculateDisabled || isPending || isCalculating}\n >\n {isCalculating ? t('calculatingPayroll') : t('calculatePayroll')}\n </Button>\n </Flex>\n )}\n </FlexItem>\n </Flex>\n\n {(alerts || payrollAlert) && (\n <Grid gap={16} gridTemplateColumns=\"1fr\">\n {payrollAlert && (\n <Alert label={payrollAlert.label} status={payrollAlert.variant}>\n {payrollAlert.content}\n </Alert>\n )}\n {alerts}\n </Grid>\n )}\n\n {isPending ? (\n <PayrollLoading\n title={isCalculating ? t('calculatingTitle') : t('loadingTitle')}\n description={isCalculating ? t('calculatingDescription') : t('loadingDescription')}\n />\n ) : (\n <>\n {payrollBlockers.length > 0 && (\n <PayrollBlockerAlerts\n blockers={payrollBlockers}\n onViewBlockersClick={onViewBlockers}\n />\n )}\n <Flex flexDirection=\"column\" gap={20}>\n <FlexItem>\n <Heading as=\"h2\" styledAs=\"h3\">\n {t('hoursAndEarningsTitle')}\n </Heading>\n <Text variant=\"supporting\">{t('hoursAndEarningsDescription')}</Text>\n </FlexItem>\n\n <DataView\n label={t('employeeCompensationsTitle')}\n columns={[\n {\n title: t('tableColumns.employees'),\n render: (item: PayrollEmployeeCompensationsType) => {\n const employee = employeeMap.get(item.employeeUuid || '')\n const payRateDisplay = formatEmployeePayRate(employee)\n return (\n <Flex flexDirection=\"column\" gap={0}>\n {getEmployeeName(item.employeeUuid || '')}\n {payRateDisplay && (\n <Text size=\"xs\" variant=\"supporting\">\n {payRateDisplay}\n </Text>\n )}\n {item.excluded && <Badge status=\"warning\">{t('skippedBadge')}</Badge>}\n </Flex>\n )\n },\n },\n {\n title: t('tableColumns.hours'),\n justify: 'end',\n render: (item: PayrollEmployeeCompensationsType) => {\n const hours = getRegularHours(item)\n const overtimeHours = getOvertimeHours(item)\n return formatHoursDisplay(hours + overtimeHours)\n },\n },\n {\n title: t('tableColumns.timeOff'),\n justify: 'end',\n render: (item: PayrollEmployeeCompensationsType) => {\n const ptoHours = getTotalPtoHours(item)\n return formatHoursDisplay(ptoHours)\n },\n },\n {\n title: t('tableColumns.additionalEarnings'),\n justify: 'end',\n render: (item: PayrollEmployeeCompensationsType) => {\n const earnings = getAdditionalEarnings(item)\n return formatNumberAsCurrency(earnings)\n },\n },\n ...(withReimbursements\n ? [\n {\n title: t('tableColumns.reimbursements'),\n justify: 'end' as const,\n render: (item: PayrollEmployeeCompensationsType) => {\n const reimbursements = getReimbursements(item)\n return formatNumberAsCurrency(reimbursements)\n },\n },\n ]\n : []),\n {\n title: t('tableColumns.totalPay'),\n justify: 'end',\n render: (item: PayrollEmployeeCompensationsType) => {\n if (isRegularRateOfPayEnabled) {\n return formatNumberAsCurrency(Number(item.grossPay ?? 0))\n }\n const employee = employeeMap.get(item.employeeUuid || '')\n const calculatedGrossPay = employee\n ? calculateGrossPay(\n item,\n employee,\n payPeriod?.startDate,\n paySchedule,\n payrollCategory,\n )\n : 0\n return formatNumberAsCurrency(calculatedGrossPay)\n },\n },\n ]}\n data={employeeCompensations}\n itemMenu={(item: PayrollEmployeeCompensationsType) => (\n <HamburgerMenu\n items={[\n {\n label: t('editMenu.edit'),\n icon: <PencilSvg aria-hidden />,\n onClick: () => {\n const employee = employeeMap.get(item.employeeUuid || '')\n if (employee) {\n onEdit(employee)\n }\n },\n },\n {\n label: t(item.excluded ? 'editMenu.unskip' : 'editMenu.skip'),\n icon: item.excluded ? <PlusCircle aria-hidden /> : <XCircle aria-hidden />,\n onClick: () => {\n const employee = employeeMap.get(item.employeeUuid || '')\n if (employee) {\n onToggleExclude(item)\n }\n },\n },\n ...(grossUpEnabled\n ? [\n {\n label: t('editMenu.setNetEarnings'),\n icon: <CoinsHandSvg aria-hidden />,\n onClick: () => {\n if (item.employeeUuid) {\n onGrossUpSelect?.(item.employeeUuid)\n }\n },\n },\n ]\n : []),\n ]}\n triggerLabel={t('editMenu.edit')}\n />\n )}\n pagination={pagination}\n />\n </Flex>\n </>\n )}\n </Flex>\n </div>\n )\n}\n"],"names":["getPayrollConfigurationTitle","payPeriod","dateFormatter","PayrollConfigurationPresentation","employeeCompensations","employeeDetails","paySchedule","onEdit","onToggleExclude","onCalculatePayroll","onViewBlockers","payrollCategory","PayrollCategory","alerts","payrollAlert","isPending","isCalculating","payrollBlockers","pagination","withReimbursements","isCalculateDisabled","grossUpEnabled","onGrossUpSelect","Button","Heading","Text","Badge","Alert","useComponentContext","useI18n","useTranslation","useDateFormatter","formatEmployeePayRate","useFormatEmployeePayRate","isRegularRateOfPayEnabled","useUnstableFeature","containerRef","useRef","isDesktop","useContainerBreakpoints","employeeMap","employee","getEmployeeName","employeeUuid","firstLastName","jsx","styles","jsxs","Flex","FlexItem","Trans","Grid","PayrollLoading","Fragment","PayrollBlockerAlerts","DataView","item","payRateDisplay","hours","getRegularHours","overtimeHours","getOvertimeHours","formatHoursDisplay","ptoHours","getTotalPtoHours","earnings","getAdditionalEarnings","formatNumberAsCurrency","reimbursements","getReimbursements","calculatedGrossPay","calculateGrossPay","HamburgerMenu","PencilSvg","PlusCircle","XCircle","CoinsHandSvg"],"mappings":"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"}
1
+ {"version":3,"file":"PayrollConfigurationPresentation.js","sources":["../../../../src/components/Payroll/PayrollConfiguration/PayrollConfigurationPresentation.tsx"],"sourcesContent":["import type { ReactNode } from 'react'\nimport { useRef } from 'react'\nimport classNames from 'classnames'\nimport type { PayrollEmployeeCompensationsType } from '@gusto/embedded-api/models/components/payrollemployeecompensationstype'\nimport type { Employee } from '@gusto/embedded-api/models/components/employee'\nimport type { PayrollPayPeriodType } from '@gusto/embedded-api/models/components/payrollpayperiodtype'\nimport type { PayScheduleShow as PayScheduleObject } from '@gusto/embedded-api/models/components/payscheduleshow'\nimport { Trans, useTranslation } from 'react-i18next'\nimport {\n useFormatEmployeePayRate,\n getRegularHours,\n getOvertimeHours,\n getTotalPtoHours,\n getAdditionalEarnings,\n getReimbursements,\n formatHoursDisplay,\n calculateGrossPay,\n} from '../helpers'\nimport { PayrollCategory } from '../payrollTypes'\nimport type { ApiPayrollBlocker } from '../PayrollBlocker/payrollHelpers'\nimport { PayrollBlockerAlerts } from '../PayrollBlocker/components/PayrollBlockerAlerts'\nimport styles from './PayrollConfigurationPresentation.module.scss'\nimport { useI18n } from '@/i18n'\nimport { DataView, Flex, FlexItem, Grid, PayrollLoading } from '@/components/Common'\nimport type { PaginationControlProps } from '@/components/Common/PaginationControl/PaginationControlTypes'\nimport { useComponentContext } from '@/contexts/ComponentAdapter/useComponentContext'\nimport { HamburgerMenu } from '@/components/Common/HamburgerMenu'\nimport PencilSvg from '@/assets/icons/pencil.svg?react'\nimport XCircle from '@/assets/icons/x-circle.svg?react'\nimport PlusCircle from '@/assets/icons/plus-circle.svg?react'\nimport CoinsHandSvg from '@/assets/icons/coins-hand.svg?react'\nimport { firstLastName, formatNumberAsCurrency } from '@/helpers/formattedStrings'\nimport { useDateFormatter } from '@/hooks/useDateFormatter'\nimport useContainerBreakpoints from '@/hooks/useContainerBreakpoints/useContainerBreakpoints'\nimport { useUnstableFeature } from '@/contexts/UnstableFeaturesProvider/useUnstableFeature'\n\ninterface PayrollConfigurationPresentationProps {\n /** CSS class name applied to the root element. */\n className?: string\n employeeCompensations: PayrollEmployeeCompensationsType[]\n employeeDetails: Employee[]\n payPeriod?: PayrollPayPeriodType\n paySchedule?: PayScheduleObject\n onCalculatePayroll: () => void\n onEdit: (employee: Employee) => void\n onToggleExclude: (employeeCompensation: PayrollEmployeeCompensationsType) => void\n onViewBlockers: () => void\n payrollCategory?: PayrollCategory\n alerts?: ReactNode\n payrollAlert?: {\n label: string\n content?: ReactNode\n variant: 'info' | 'warning'\n }\n isPending?: boolean\n isCalculating?: boolean\n payrollBlockers?: ApiPayrollBlocker[]\n pagination?: PaginationControlProps\n withReimbursements?: boolean\n isCalculateDisabled?: boolean\n grossUpEnabled?: boolean\n onGrossUpSelect?: (employeeUuid: string) => void\n}\n\nconst getPayrollConfigurationTitle = (\n payPeriod: PayrollPayPeriodType | undefined,\n dateFormatter: ReturnType<typeof useDateFormatter>,\n) => {\n if (payPeriod?.startDate && payPeriod.endDate) {\n return dateFormatter.formatPayPeriod(payPeriod.startDate, payPeriod.endDate)\n }\n return { startDate: '', endDate: '' }\n}\n\n/** @internal */\nexport const PayrollConfigurationPresentation = ({\n className,\n employeeCompensations,\n employeeDetails,\n payPeriod,\n paySchedule,\n onEdit,\n onToggleExclude,\n onCalculatePayroll,\n onViewBlockers,\n payrollCategory = PayrollCategory.Regular,\n alerts,\n payrollAlert,\n isPending,\n isCalculating,\n payrollBlockers = [],\n pagination,\n withReimbursements = true,\n isCalculateDisabled = false,\n grossUpEnabled = false,\n onGrossUpSelect,\n}: PayrollConfigurationPresentationProps) => {\n const { Button, Heading, Text, Badge, Alert } = useComponentContext()\n useI18n('Payroll.PayrollConfiguration')\n const { t } = useTranslation('Payroll.PayrollConfiguration')\n const dateFormatter = useDateFormatter()\n const formatEmployeePayRate = useFormatEmployeePayRate()\n const isRegularRateOfPayEnabled = useUnstableFeature('payrollRegularRateOfPay')\n const containerRef = useRef<HTMLDivElement>(null)\n const breakpoints = useContainerBreakpoints({ ref: containerRef })\n const isDesktop = breakpoints.includes('small')\n\n const employeeMap = new Map(employeeDetails.map(employee => [employee.uuid, employee]))\n\n const getEmployeeName = (employeeUuid: string) => {\n const employee = employeeMap.get(employeeUuid)\n const name = employee\n ? firstLastName({ first_name: employee.firstName, last_name: employee.lastName })\n : ''\n return name || t('unknownEmployeeFallback')\n }\n\n return (\n <div ref={containerRef} className={classNames(styles.container, className)}>\n <Flex flexDirection=\"column\" gap={32}>\n <Flex\n flexDirection={isDesktop ? 'row' : 'column'}\n justifyContent={isDesktop ? 'space-between' : 'normal'}\n alignItems={isDesktop ? 'center' : 'stretch'}\n gap={isDesktop ? 0 : 16}\n >\n <FlexItem>\n <Heading as=\"h1\">{t('pageTitle')}</Heading>\n {payPeriod && (\n <Text variant=\"supporting\">\n <Trans\n i18nKey={\n payrollCategory === PayrollCategory.Dismissal\n ? 'descriptionDismissal'\n : 'description'\n }\n t={t}\n components={{ dateWrapper: <Text weight=\"bold\" as=\"span\" /> }}\n values={{\n ...getPayrollConfigurationTitle(payPeriod, dateFormatter),\n payrollType: payrollCategory,\n }}\n />\n </Text>\n )}\n </FlexItem>\n <FlexItem flexGrow={isDesktop ? 0 : 0}>\n {isDesktop ? (\n <Button\n title={t('calculatePayrollTitle')}\n onClick={onCalculatePayroll}\n isDisabled={isCalculateDisabled || isPending || isCalculating}\n >\n {isCalculating ? t('calculatingPayroll') : t('calculatePayroll')}\n </Button>\n ) : (\n <Flex flexDirection=\"column\" justifyContent=\"normal\" alignItems=\"stretch\" gap={12}>\n <Button\n title={t('calculatePayrollTitle')}\n onClick={onCalculatePayroll}\n isDisabled={isCalculateDisabled || isPending || isCalculating}\n >\n {isCalculating ? t('calculatingPayroll') : t('calculatePayroll')}\n </Button>\n </Flex>\n )}\n </FlexItem>\n </Flex>\n\n {(alerts || payrollAlert) && (\n <Grid gap={16} gridTemplateColumns=\"1fr\">\n {payrollAlert && (\n <Alert label={payrollAlert.label} status={payrollAlert.variant}>\n {payrollAlert.content}\n </Alert>\n )}\n {alerts}\n </Grid>\n )}\n\n {isPending ? (\n <PayrollLoading\n title={isCalculating ? t('calculatingTitle') : t('loadingTitle')}\n description={isCalculating ? t('calculatingDescription') : t('loadingDescription')}\n />\n ) : (\n <>\n {payrollBlockers.length > 0 && (\n <PayrollBlockerAlerts\n blockers={payrollBlockers}\n onViewBlockersClick={onViewBlockers}\n />\n )}\n <Flex flexDirection=\"column\" gap={20}>\n <FlexItem>\n <Heading as=\"h2\" styledAs=\"h3\">\n {t('hoursAndEarningsTitle')}\n </Heading>\n <Text variant=\"supporting\">{t('hoursAndEarningsDescription')}</Text>\n </FlexItem>\n\n <DataView\n label={t('employeeCompensationsTitle')}\n columns={[\n {\n title: t('tableColumns.employees'),\n render: (item: PayrollEmployeeCompensationsType) => {\n const employee = employeeMap.get(item.employeeUuid || '')\n const payRateDisplay = formatEmployeePayRate(employee)\n return (\n <Flex flexDirection=\"column\" gap={0}>\n {getEmployeeName(item.employeeUuid || '')}\n {payRateDisplay && (\n <Text size=\"xs\" variant=\"supporting\">\n {payRateDisplay}\n </Text>\n )}\n {item.excluded && <Badge status=\"warning\">{t('skippedBadge')}</Badge>}\n </Flex>\n )\n },\n },\n {\n title: t('tableColumns.hours'),\n justify: 'end',\n render: (item: PayrollEmployeeCompensationsType) => {\n const hours = getRegularHours(item)\n const overtimeHours = getOvertimeHours(item)\n return formatHoursDisplay(hours + overtimeHours)\n },\n },\n {\n title: t('tableColumns.timeOff'),\n justify: 'end',\n render: (item: PayrollEmployeeCompensationsType) => {\n const ptoHours = getTotalPtoHours(item)\n return formatHoursDisplay(ptoHours)\n },\n },\n {\n title: t('tableColumns.additionalEarnings'),\n justify: 'end',\n render: (item: PayrollEmployeeCompensationsType) => {\n const earnings = getAdditionalEarnings(item)\n return formatNumberAsCurrency(earnings)\n },\n },\n ...(withReimbursements\n ? [\n {\n title: t('tableColumns.reimbursements'),\n justify: 'end' as const,\n render: (item: PayrollEmployeeCompensationsType) => {\n const reimbursements = getReimbursements(item)\n return formatNumberAsCurrency(reimbursements)\n },\n },\n ]\n : []),\n {\n title: t('tableColumns.totalPay'),\n justify: 'end',\n render: (item: PayrollEmployeeCompensationsType) => {\n if (isRegularRateOfPayEnabled) {\n return formatNumberAsCurrency(Number(item.grossPay ?? 0))\n }\n const employee = employeeMap.get(item.employeeUuid || '')\n const calculatedGrossPay = employee\n ? calculateGrossPay(\n item,\n employee,\n payPeriod?.startDate,\n paySchedule,\n payrollCategory,\n )\n : 0\n return formatNumberAsCurrency(calculatedGrossPay)\n },\n },\n ]}\n data={employeeCompensations}\n itemMenu={(item: PayrollEmployeeCompensationsType) => (\n <HamburgerMenu\n items={[\n {\n label: t('editMenu.edit'),\n icon: <PencilSvg aria-hidden />,\n onClick: () => {\n const employee = employeeMap.get(item.employeeUuid || '')\n if (employee) {\n onEdit(employee)\n }\n },\n },\n {\n label: t(item.excluded ? 'editMenu.unskip' : 'editMenu.skip'),\n icon: item.excluded ? <PlusCircle aria-hidden /> : <XCircle aria-hidden />,\n onClick: () => {\n const employee = employeeMap.get(item.employeeUuid || '')\n if (employee) {\n onToggleExclude(item)\n }\n },\n },\n ...(grossUpEnabled\n ? [\n {\n label: t('editMenu.setNetEarnings'),\n icon: <CoinsHandSvg aria-hidden />,\n onClick: () => {\n if (item.employeeUuid) {\n onGrossUpSelect?.(item.employeeUuid)\n }\n },\n },\n ]\n : []),\n ]}\n triggerLabel={t('editMenu.edit')}\n />\n )}\n pagination={pagination}\n />\n </Flex>\n </>\n )}\n </Flex>\n </div>\n )\n}\n"],"names":["getPayrollConfigurationTitle","payPeriod","dateFormatter","PayrollConfigurationPresentation","className","employeeCompensations","employeeDetails","paySchedule","onEdit","onToggleExclude","onCalculatePayroll","onViewBlockers","payrollCategory","PayrollCategory","alerts","payrollAlert","isPending","isCalculating","payrollBlockers","pagination","withReimbursements","isCalculateDisabled","grossUpEnabled","onGrossUpSelect","Button","Heading","Text","Badge","Alert","useComponentContext","useI18n","useTranslation","useDateFormatter","formatEmployeePayRate","useFormatEmployeePayRate","isRegularRateOfPayEnabled","useUnstableFeature","containerRef","useRef","isDesktop","useContainerBreakpoints","employeeMap","employee","getEmployeeName","employeeUuid","firstLastName","jsx","classNames","styles","jsxs","Flex","FlexItem","Trans","Grid","PayrollLoading","Fragment","PayrollBlockerAlerts","DataView","item","payRateDisplay","hours","getRegularHours","overtimeHours","getOvertimeHours","formatHoursDisplay","ptoHours","getTotalPtoHours","earnings","getAdditionalEarnings","formatNumberAsCurrency","reimbursements","getReimbursements","calculatedGrossPay","calculateGrossPay","HamburgerMenu","PencilSvg","PlusCircle","XCircle","CoinsHandSvg"],"mappings":"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"}