@gusto/embedded-react-sdk 0.56.2 → 0.56.3

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 (183) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/dist/components/Common/FieldCaption/FieldCaption.js +18 -24
  3. package/dist/components/Common/FieldCaption/FieldCaption.js.map +1 -1
  4. package/dist/components/Common/FieldCaption/FieldCaption.module.scss.js +3 -5
  5. package/dist/components/Common/FieldCaption/FieldCaption.module.scss.js.map +1 -1
  6. package/dist/components/Common/PaginationControl/PaginationControl.js +66 -62
  7. package/dist/components/Common/PaginationControl/PaginationControl.js.map +1 -1
  8. package/dist/components/Common/UI/Breadcrumbs/Breadcrumbs.js +1 -1
  9. package/dist/components/Common/UI/FileInput/FileInput.js +1 -1
  10. package/dist/components/Common/UI/ProgressBar/ProgressBar.js +4 -4
  11. package/dist/components/Company/AssignSignatory/CreateSignatory/useCreateSignatory.js +6 -3
  12. package/dist/components/Company/AssignSignatory/CreateSignatory/useCreateSignatory.js.map +1 -1
  13. package/dist/components/Company/AssignSignatory/InviteSignatory/useInviteSignatory.js +6 -3
  14. package/dist/components/Company/AssignSignatory/InviteSignatory/useInviteSignatory.js.map +1 -1
  15. package/dist/components/Company/AssignSignatory/useAssignSignatory.js +8 -5
  16. package/dist/components/Company/AssignSignatory/useAssignSignatory.js.map +1 -1
  17. package/dist/components/Company/BankAccount/BankAccountForm/context.js +6 -3
  18. package/dist/components/Company/BankAccount/BankAccountForm/context.js.map +1 -1
  19. package/dist/components/Company/DocumentSigner/DocumentList/useDocumentList.js +6 -3
  20. package/dist/components/Company/DocumentSigner/DocumentList/useDocumentList.js.map +1 -1
  21. package/dist/components/Company/FederalTaxes/useFederalTaxes.js +11 -8
  22. package/dist/components/Company/FederalTaxes/useFederalTaxes.js.map +1 -1
  23. package/dist/components/Company/Industry/Context.js +9 -6
  24. package/dist/components/Company/Industry/Context.js.map +1 -1
  25. package/dist/components/Company/Locations/LocationForm/useLocationForm.js +6 -3
  26. package/dist/components/Company/Locations/LocationForm/useLocationForm.js.map +1 -1
  27. package/dist/components/Company/Locations/LocationsList/useLocationsList.js +6 -3
  28. package/dist/components/Company/Locations/LocationsList/useLocationsList.js.map +1 -1
  29. package/dist/components/Company/OnboardingOverview/context.js +6 -3
  30. package/dist/components/Company/OnboardingOverview/context.js.map +1 -1
  31. package/dist/components/Company/PaySchedule/management/PaySchedule.js +60 -0
  32. package/dist/components/Company/PaySchedule/management/PaySchedule.js.map +1 -0
  33. package/dist/components/Company/PaySchedule/management/PayScheduleAssignment/AssignmentReviewStepPresentation.js +67 -0
  34. package/dist/components/Company/PaySchedule/management/PayScheduleAssignment/AssignmentReviewStepPresentation.js.map +1 -0
  35. package/dist/components/Company/PaySchedule/management/PayScheduleAssignment/AssignmentScheduleStepPresentation.js +59 -0
  36. package/dist/components/Company/PaySchedule/management/PayScheduleAssignment/AssignmentScheduleStepPresentation.js.map +1 -0
  37. package/dist/components/Company/PaySchedule/management/PayScheduleAssignment/AssignmentTypeStepPresentation.js +57 -0
  38. package/dist/components/Company/PaySchedule/management/PayScheduleAssignment/AssignmentTypeStepPresentation.js.map +1 -0
  39. package/dist/components/Company/PaySchedule/management/PayScheduleAssignment/PayScheduleAssignment.js +46 -0
  40. package/dist/components/Company/PaySchedule/management/PayScheduleAssignment/PayScheduleAssignment.js.map +1 -0
  41. package/dist/components/Company/PaySchedule/management/PayScheduleAssignment/PayScheduleAssignmentComponents.js +101 -0
  42. package/dist/components/Company/PaySchedule/management/PayScheduleAssignment/PayScheduleAssignmentComponents.js.map +1 -0
  43. package/dist/components/Company/PaySchedule/management/PayScheduleAssignment/payScheduleAssignmentStateMachine.js +81 -0
  44. package/dist/components/Company/PaySchedule/management/PayScheduleAssignment/payScheduleAssignmentStateMachine.js.map +1 -0
  45. package/dist/components/Company/PaySchedule/management/PayScheduleAssignment/stripNullAssignmentPreviewFields.js +18 -0
  46. package/dist/components/Company/PaySchedule/management/PayScheduleAssignment/stripNullAssignmentPreviewFields.js.map +1 -0
  47. package/dist/components/Company/PaySchedule/management/PayScheduleManagementComponents.js +56 -0
  48. package/dist/components/Company/PaySchedule/management/PayScheduleManagementComponents.js.map +1 -0
  49. package/dist/components/Company/PaySchedule/management/PayScheduleOverview.js +34 -0
  50. package/dist/components/Company/PaySchedule/management/PayScheduleOverview.js.map +1 -0
  51. package/dist/components/Company/PaySchedule/management/PayScheduleOverviewPresentation.js +77 -0
  52. package/dist/components/Company/PaySchedule/management/PayScheduleOverviewPresentation.js.map +1 -0
  53. package/dist/components/Company/PaySchedule/management/PayScheduleOverviewPresentation.module.scss.js +10 -0
  54. package/dist/components/Company/PaySchedule/management/PayScheduleOverviewPresentation.module.scss.js.map +1 -0
  55. package/dist/components/Company/PaySchedule/management/payScheduleManagementStateMachine.js +66 -0
  56. package/dist/components/Company/PaySchedule/management/payScheduleManagementStateMachine.js.map +1 -0
  57. package/dist/components/Company/StateTaxes/StateTaxesForm/StateTaxesForm.js +75 -57
  58. package/dist/components/Company/StateTaxes/StateTaxesForm/StateTaxesForm.js.map +1 -1
  59. package/dist/components/Company/StateTaxes/StateTaxesForm/context.js +6 -3
  60. package/dist/components/Company/StateTaxes/StateTaxesForm/context.js.map +1 -1
  61. package/dist/components/Company/StateTaxes/StateTaxesList/context.js +6 -3
  62. package/dist/components/Company/StateTaxes/StateTaxesList/context.js.map +1 -1
  63. package/dist/components/Company/StateTaxes/TaxRateManagement/context.js +6 -3
  64. package/dist/components/Company/StateTaxes/TaxRateManagement/context.js.map +1 -1
  65. package/dist/components/Company/StateTaxes/shared/requirementSetError.js +15 -0
  66. package/dist/components/Company/StateTaxes/shared/requirementSetError.js.map +1 -0
  67. package/dist/components/Company/exports/companyManagement.js +7 -0
  68. package/dist/components/Company/exports/companyManagement.js.map +1 -0
  69. package/dist/components/Employee/Documents/onboarding/DocumentSigner/DocumentList/useDocumentList.js +6 -3
  70. package/dist/components/Employee/Documents/onboarding/DocumentSigner/DocumentList/useDocumentList.js.map +1 -1
  71. package/dist/components/Employee/FederalTaxes/shared/FederalTaxesView.js +1 -1
  72. package/dist/components/Employee/PaymentMethod/management/PaymentMethodBankForm.js +4 -4
  73. package/dist/components/Employee/PaymentMethod/onboarding/BankForm.js +4 -4
  74. package/dist/components/Flow/Flow.js +1 -1
  75. package/dist/components/Payroll/GrossUpModal/GrossUpModal.js +28 -27
  76. package/dist/components/Payroll/GrossUpModal/GrossUpModal.js.map +1 -1
  77. package/dist/components/Payroll/PayrollBlocker/components/PayrollBlockerList.js +51 -58
  78. package/dist/components/Payroll/PayrollBlocker/components/PayrollBlockerList.js.map +1 -1
  79. package/dist/components/Payroll/PayrollBlocker/payrollHelpers.js +12 -7
  80. package/dist/components/Payroll/PayrollBlocker/payrollHelpers.js.map +1 -1
  81. package/dist/components/Payroll/PayrollConfiguration/PayrollConfiguration.js +87 -85
  82. package/dist/components/Payroll/PayrollConfiguration/PayrollConfiguration.js.map +1 -1
  83. package/dist/components/Payroll/PayrollConfiguration/PayrollConfigurationPresentation.js +1 -1
  84. package/dist/components/Payroll/PayrollConfiguration/PayrollConfigurationPresentation.js.map +1 -1
  85. package/dist/components/Payroll/PayrollConfiguration/usePayrollConfigurationData.js +55 -54
  86. package/dist/components/Payroll/PayrollConfiguration/usePayrollConfigurationData.js.map +1 -1
  87. package/dist/components/Payroll/PayrollEditEmployee/PayrollEditEmployee.js +66 -62
  88. package/dist/components/Payroll/PayrollEditEmployee/PayrollEditEmployee.js.map +1 -1
  89. package/dist/components/Payroll/PayrollEditEmployee/PayrollEditEmployeePresentation.js +129 -125
  90. package/dist/components/Payroll/PayrollEditEmployee/PayrollEditEmployeePresentation.js.map +1 -1
  91. package/dist/components/Payroll/PayrollEditEmployee/TimeOffField.js +30 -27
  92. package/dist/components/Payroll/PayrollEditEmployee/TimeOffField.js.map +1 -1
  93. package/dist/components/Payroll/PayrollEditEmployee/shared/usePayrollEditEmployeeForm/fields.js +41 -30
  94. package/dist/components/Payroll/PayrollEditEmployee/shared/usePayrollEditEmployeeForm/fields.js.map +1 -1
  95. package/dist/components/Payroll/PayrollEditEmployee/shared/usePayrollEditEmployeeForm/payrollEditEmployeeHelpers.js.map +1 -1
  96. package/dist/components/Payroll/PayrollEditEmployee/shared/usePayrollEditEmployeeForm/usePayrollEditEmployeeForm.js +159 -152
  97. package/dist/components/Payroll/PayrollEditEmployee/shared/usePayrollEditEmployeeForm/usePayrollEditEmployeeForm.js.map +1 -1
  98. package/dist/components/Payroll/PayrollHistory/PayrollHistoryPresentation.js +61 -59
  99. package/dist/components/Payroll/PayrollHistory/PayrollHistoryPresentation.js.map +1 -1
  100. package/dist/components/Payroll/PayrollLanding/PayrollLandingFlowComponents.js +32 -31
  101. package/dist/components/Payroll/PayrollLanding/PayrollLandingFlowComponents.js.map +1 -1
  102. package/dist/components/Payroll/PayrollList/PayrollList.js +16 -16
  103. package/dist/components/Payroll/PayrollList/PayrollList.js.map +1 -1
  104. package/dist/components/Payroll/PayrollList/PayrollListPresentation.js.map +1 -1
  105. package/dist/components/Payroll/PayrollOverview/PayrollOverview.js +61 -61
  106. package/dist/components/Payroll/PayrollOverview/PayrollOverview.js.map +1 -1
  107. package/dist/components/Payroll/PayrollOverview/PayrollOverviewPresentation.js +192 -193
  108. package/dist/components/Payroll/PayrollOverview/PayrollOverviewPresentation.js.map +1 -1
  109. package/dist/components/Payroll/Transition/TransitionFlow.js +27 -22
  110. package/dist/components/Payroll/Transition/TransitionFlow.js.map +1 -1
  111. package/dist/components/Payroll/TransitionPayrollAlert/TransitionPayrollAlert.js +55 -53
  112. package/dist/components/Payroll/TransitionPayrollAlert/TransitionPayrollAlert.js.map +1 -1
  113. package/dist/components/Payroll/TransitionPayrollAlert/TransitionPayrollAlertPresentation.js +44 -41
  114. package/dist/components/Payroll/TransitionPayrollAlert/TransitionPayrollAlertPresentation.js.map +1 -1
  115. package/dist/components/Payroll/helpers.js +72 -67
  116. package/dist/components/Payroll/helpers.js.map +1 -1
  117. package/dist/components/Payroll/usePreparedPayrollData.js +37 -25
  118. package/dist/components/Payroll/usePreparedPayrollData.js.map +1 -1
  119. package/dist/contexts/ApiProvider/ApiProvider.js +23 -22
  120. package/dist/contexts/ApiProvider/ApiProvider.js.map +1 -1
  121. package/dist/contexts/ApiProvider/informationRequestEnumHook.js +30 -0
  122. package/dist/contexts/ApiProvider/informationRequestEnumHook.js.map +1 -0
  123. package/dist/contexts/UnstableFeaturesProvider/useUnstableFeature.js.map +1 -1
  124. package/dist/helpers/dateFormatting.js.map +1 -1
  125. package/dist/helpers/formattedStrings.js +9 -8
  126. package/dist/helpers/formattedStrings.js.map +1 -1
  127. package/dist/i18n/I18n.js +2 -0
  128. package/dist/i18n/I18n.js.map +1 -1
  129. package/dist/i18n/en/Company.Management.PaySchedule.json.js +24 -0
  130. package/dist/i18n/en/Company.Management.PaySchedule.json.js.map +1 -0
  131. package/dist/i18n/en/Company.Management.PayScheduleAssignment.json.js +18 -0
  132. package/dist/i18n/en/Company.Management.PayScheduleAssignment.json.js.map +1 -0
  133. package/dist/i18n/en/Company.StateTaxes.json.js +1 -1
  134. package/dist/i18n/en/Payroll.GrossUpModal.json.js +12 -14
  135. package/dist/i18n/en/Payroll.GrossUpModal.json.js.map +1 -1
  136. package/dist/i18n/en/Payroll.PayrollOverview.json.js +1 -1
  137. package/dist/i18n/en/common.json.js +36 -38
  138. package/dist/i18n/en/common.json.js.map +1 -1
  139. package/dist/index.js +137 -135
  140. package/dist/index.js.map +1 -1
  141. package/dist/package.json.js +1 -1
  142. package/dist/shared/constants.js +39 -31
  143. package/dist/shared/constants.js.map +1 -1
  144. package/dist/src/components/Company/PaySchedule/management/PaySchedule.d.ts +24 -0
  145. package/dist/src/components/Company/PaySchedule/management/PayScheduleAssignment/AssignmentReviewStepPresentation.d.ts +10 -0
  146. package/dist/src/components/Company/PaySchedule/management/PayScheduleAssignment/AssignmentScheduleStepPresentation.d.ts +11 -0
  147. package/dist/src/components/Company/PaySchedule/management/PayScheduleAssignment/AssignmentTypeStepPresentation.d.ts +9 -0
  148. package/dist/src/components/Company/PaySchedule/management/PayScheduleAssignment/PayScheduleAssignment.d.ts +35 -0
  149. package/dist/src/components/Company/PaySchedule/management/PayScheduleAssignment/PayScheduleAssignmentComponents.d.ts +29 -0
  150. package/dist/src/components/Company/PaySchedule/management/PayScheduleAssignment/index.d.ts +1 -0
  151. package/dist/src/components/Company/PaySchedule/management/PayScheduleAssignment/payScheduleAssignmentStateMachine.d.ts +7 -0
  152. package/dist/src/components/Company/PaySchedule/management/PayScheduleAssignment/stripNullAssignmentPreviewFields.d.ts +12 -0
  153. package/dist/src/components/Company/PaySchedule/management/PayScheduleAssignment/usePayScheduleAssignment.d.ts +9 -0
  154. package/dist/src/components/Company/PaySchedule/management/PayScheduleManagementComponents.d.ts +20 -0
  155. package/dist/src/components/Company/PaySchedule/management/PayScheduleOverview.d.ts +11 -0
  156. package/dist/src/components/Company/PaySchedule/management/PayScheduleOverviewPresentation.d.ts +18 -0
  157. package/dist/src/components/Company/PaySchedule/management/index.d.ts +1 -0
  158. package/dist/src/components/Company/PaySchedule/management/payScheduleManagementStateMachine.d.ts +12 -0
  159. package/dist/src/components/Company/StateTaxes/shared/requirementSetError.d.ts +18 -0
  160. package/dist/src/components/Company/StateTaxes/shared/requirementSetError.test.d.ts +1 -0
  161. package/dist/src/components/Company/exports/companyManagement.d.ts +2 -0
  162. package/dist/src/components/Payroll/PayrollBlocker/payrollHelpers.d.ts +12 -0
  163. package/dist/src/components/Payroll/PayrollConfiguration/usePayrollConfigurationData.d.ts +6 -1
  164. package/dist/src/components/Payroll/PayrollEditEmployee/shared/usePayrollEditEmployeeForm/payrollEditEmployeeHelpers.d.ts +2 -2
  165. package/dist/src/components/Payroll/TransitionPayrollAlert/TransitionPayrollAlert.d.ts +6 -1
  166. package/dist/src/components/Payroll/TransitionPayrollAlert/TransitionPayrollAlertPresentation.d.ts +7 -1
  167. package/dist/src/components/Payroll/helpers.d.ts +34 -0
  168. package/dist/src/components/Payroll/usePreparedPayrollData.d.ts +6 -1
  169. package/dist/src/components/index.d.ts +12 -0
  170. package/dist/src/contexts/ApiProvider/informationRequestEnumHook.d.ts +14 -0
  171. package/dist/src/contexts/ApiProvider/informationRequestEnumHook.test.d.ts +1 -0
  172. package/dist/src/contexts/UnstableFeaturesProvider/useUnstableFeature.d.ts +2 -0
  173. package/dist/src/helpers/dateFormatting.d.ts +2 -2
  174. package/dist/src/helpers/formattedStrings.d.ts +15 -0
  175. package/dist/src/i18n/en/common.json.d.ts +0 -1
  176. package/dist/src/i18n/types.d.ts +96 -6
  177. package/dist/src/models/external.d.ts +12 -0
  178. package/dist/src/shared/constants.d.ts +16 -0
  179. package/dist/style.css +1 -1
  180. package/dist/types/sdkError.js +32 -21
  181. package/dist/types/sdkError.js.map +1 -1
  182. package/docs/guides/endpoint-inventory.json +59 -10
  183. package/package.json +7 -7
@@ -1,51 +1,52 @@
1
- import { jsx as y, jsxs as we, Fragment as Re } from "react/jsx-runtime";
1
+ import { jsx as y, jsxs as Ae, Fragment as Re } from "react/jsx-runtime";
2
2
  import { useState as d, useRef as O, useMemo as b, useEffect as H } from "react";
3
3
  import { usePayrollsGetSuspense as Ee } from "@gusto/embedded-api/react-query/payrollsGet";
4
4
  import { payrollsCalculate as _e } from "@gusto/embedded-api/funcs/payrollsCalculate";
5
5
  import { useGustoEmbeddedContext as De } from "@gusto/embedded-api/react-query/_context";
6
6
  import { useTranslation as Oe } from "react-i18next";
7
7
  import { usePayrollsUpdateMutation as be } from "@gusto/embedded-api/react-query/payrollsUpdate";
8
- import { usePayrollsCalculateGrossUpMutation as xe } from "@gusto/embedded-api/react-query/payrollsCalculateGrossUp";
9
- import { usePayrollsGetBlockersSuspense as Te } from "@gusto/embedded-api/react-query/payrollsGetBlockers";
8
+ import { usePayrollsCalculateGrossUpMutation as Te } from "@gusto/embedded-api/react-query/payrollsCalculateGrossUp";
9
+ import { usePayrollsGetBlockersSuspense as xe } from "@gusto/embedded-api/react-query/payrollsGetBlockers";
10
10
  import { payrollSubmitHandler as ke } from "../PayrollBlocker/payrollHelpers.js";
11
11
  import { PayrollOverview as Ge } from "../PayrollOverview/PayrollOverview.js";
12
- import { PayrollConfigurationPresentation as Ne } from "./PayrollConfigurationPresentation.js";
13
- import { usePayrollConfigurationData as Ye } from "./usePayrollConfigurationData.js";
14
- import { isGrossUpEligible as Fe, getGrossUpTargetCompensationName as Me } from "./grossUpHelpers.js";
15
- import { isCalculatingStatus as K, useCalculationPoll as Be } from "./useCalculationPoll.js";
16
- import { BaseComponent as je } from "../../Base/Base.js";
12
+ import { derivePayrollCategory as Ne, PayrollCategory as Ye } from "../payrollTypes.js";
13
+ import { PayrollConfigurationPresentation as Fe } from "./PayrollConfigurationPresentation.js";
14
+ import { usePayrollConfigurationData as Me } from "./usePayrollConfigurationData.js";
15
+ import { isGrossUpEligible as Be, getGrossUpTargetCompensationName as ve } from "./grossUpHelpers.js";
16
+ import { isCalculatingStatus as K, useCalculationPoll as je } from "./useCalculationPoll.js";
17
+ import { BaseComponent as We } from "../../Base/Base.js";
17
18
  import { componentEvents as i } from "../../../shared/constants.js";
18
- import { useComponentDictionary as ve, useI18n as We } from "../../../i18n/I18n.js";
19
- import { useBase as qe } from "../../Base/useBase.js";
20
- import { useDateFormatter as He } from "../../../hooks/useDateFormatter.js";
19
+ import { useComponentDictionary as qe, useI18n as He } from "../../../i18n/I18n.js";
20
+ import { useBase as Ke } from "../../Base/useBase.js";
21
+ import { useDateFormatter as Ve } from "../../../hooks/useDateFormatter.js";
21
22
  import { SDKInternalError as V } from "../../../types/sdkError.js";
22
- import { GrossUpModal as Ke } from "../GrossUpModal/GrossUpModal.js";
23
- function Co(t) {
24
- return /* @__PURE__ */ y(je, { ...t, children: /* @__PURE__ */ y(Ve, { ...t, children: t.children }) });
23
+ import { GrossUpModal as $e } from "../GrossUpModal/GrossUpModal.js";
24
+ function Uo(t) {
25
+ return /* @__PURE__ */ y(We, { ...t, children: /* @__PURE__ */ y(Je, { ...t, children: t.children }) });
25
26
  }
26
- const Ve = ({
27
+ const Je = ({
27
28
  onEvent: t,
28
29
  companyId: c,
29
- payrollId: s,
30
+ payrollId: l,
30
31
  dictionary: $,
31
32
  alerts: J,
32
- withReimbursements: x = !0,
33
- className: T
33
+ withReimbursements: T = !0,
34
+ className: x
34
35
  }) => {
35
- ve("Payroll.PayrollConfiguration", $), We("Payroll.PayrollConfiguration");
36
- const { t: n } = Oe("Payroll.PayrollConfiguration"), { baseSubmitHandler: f, setError: P } = qe(), p = He(), [k, G] = d(!1), u = O(!1), h = O(!1), z = De(), Q = b(
36
+ qe("Payroll.PayrollConfiguration", $), He("Payroll.PayrollConfiguration");
37
+ const { t: n } = Oe("Payroll.PayrollConfiguration"), { baseSubmitHandler: f, setError: P } = Ke(), p = Ve(), [k, G] = d(!1), u = O(!1), h = O(!1), z = De(), Q = b(
37
38
  () => ({
38
39
  companyId: c,
39
- payrollId: s,
40
+ payrollId: l,
40
41
  include: ["taxes", "benefits", "deductions", "payroll_status_meta"]
41
42
  }),
42
- [c, s]
43
- ), { data: l, refetch: X } = Ee(Q), Z = b(
44
- () => l.payrollShow?.employeeCompensations?.filter((e) => e.excluded).map((e) => e.employeeUuid).filter(Boolean) ?? [],
45
- [l.payrollShow?.employeeCompensations]
43
+ [c, l]
44
+ ), { data: r, refetch: X } = Ee(Q), Z = b(
45
+ () => r.payrollShow?.employeeCompensations?.filter((e) => e.excluded).map((e) => e.employeeUuid).filter(Boolean) ?? [],
46
+ [r.payrollShow?.employeeCompensations]
46
47
  );
47
- K(l.payrollShow?.processingRequest) && (u.current = !0);
48
- const { data: I } = Te({
48
+ K(r.payrollShow?.processingRequest) && (u.current = !0);
49
+ const { data: I } = xe({
49
50
  companyUuid: c
50
51
  }), N = (I.payrollBlockers ?? []).map((e) => ({
51
52
  key: e.key,
@@ -58,11 +59,11 @@ const Ve = ({
58
59
  });
59
60
  }, te = (e) => {
60
61
  Y(), e?.calculatedAt == null && (u.current = !1);
61
- }, { start: A, isPolling: C } = Be({
62
+ }, { start: S, isPolling: C } = je({
62
63
  refetch: X,
63
64
  onCalculated: (e) => {
64
65
  t(i.RUN_PAYROLL_CALCULATED, {
65
- payrollId: s,
66
+ payrollId: l,
66
67
  alert: {
67
68
  type: "success",
68
69
  title: n("alerts.progressSaved"),
@@ -83,18 +84,19 @@ const Ve = ({
83
84
  employeeCompensations: M,
84
85
  paySchedule: re,
85
86
  payPeriod: se,
86
- payrollCategory: S,
87
+ payrollCategory: w,
87
88
  pagination: le,
88
89
  isLoading: ie,
89
- isAlreadyProcessed: w,
90
+ isAlreadyProcessed: A,
90
91
  refetch: R
91
- } = Ye({
92
+ } = Me({
92
93
  companyId: c,
93
- payrollId: s,
94
+ payrollId: l,
94
95
  // Don't prepare while calculating, or once we've seen it calculate. If the payroll was already
95
96
  // calculated when we opened (e.g. clicking Edit), we do prepare so it can be edited.
96
97
  disablePrepare: C || k || u.current,
97
- excludedEmployeeUuids: Z
98
+ excludedEmployeeUuids: Z,
99
+ isTransitionPayroll: Ne(r.payrollShow ?? {}) === Ye.Transition
98
100
  }), E = b(
99
101
  () => ({
100
102
  type: "error",
@@ -104,31 +106,31 @@ const Ve = ({
104
106
  [n]
105
107
  ), _ = O(!1);
106
108
  H(() => {
107
- if (!w) {
109
+ if (!A) {
108
110
  _.current = !1;
109
111
  return;
110
112
  }
111
113
  _.current || (_.current = !0, t(i.RUN_PAYROLL_ALREADY_PROCESSED, {
112
- payrollId: s,
114
+ payrollId: l,
113
115
  alert: E,
114
- payPeriod: l.payrollShow?.payPeriod
116
+ payPeriod: r.payrollShow?.payPeriod
115
117
  }));
116
118
  }, [
117
- w,
119
+ A,
118
120
  t,
119
- s,
121
+ l,
120
122
  E,
121
- l.payrollShow?.payPeriod
123
+ r.payrollShow?.payPeriod
122
124
  ]);
123
- const { mutateAsync: B, isPending: ne } = be(), { mutateAsync: ce } = xe(), [m, j] = d(null), [ue, D] = d(!1), v = Fe(S), g = Me(S), pe = (e) => {
124
- j(e), D(!0), t(i.RUN_PAYROLL_GROSS_UP_SELECTED, { employeeUuid: e });
125
+ const { mutateAsync: B, isPending: ne } = be(), { mutateAsync: ce } = Te(), [m, v] = d(null), [ue, D] = d(!1), j = Be(w), g = ve(w), pe = (e) => {
126
+ v(e), D(!0), t(i.RUN_PAYROLL_GROSS_UP_SELECTED, { employeeUuid: e });
125
127
  }, me = async (e) => {
126
128
  if (!m) return null;
127
129
  let o = null;
128
130
  return await f(null, async () => {
129
131
  o = (await ce({
130
132
  request: {
131
- payrollUuid: s,
133
+ payrollUuid: l,
132
134
  payrollGrossUpRequest: {
133
135
  employeeUuid: m,
134
136
  netPay: e.toString()
@@ -148,15 +150,15 @@ const Ve = ({
148
150
  const o = M.find((a) => a.employeeUuid === m);
149
151
  if (!o)
150
152
  throw new V("Unable to apply gross-up: employee compensation not found.");
151
- const r = o.fixedCompensations ?? [], Ue = r.some(
153
+ const s = o.fixedCompensations ?? [], Ue = s.some(
152
154
  (a) => a.name?.toLowerCase() === g.toLowerCase()
153
- ), q = r.map((a) => ({
155
+ ), q = s.map((a) => ({
154
156
  name: a.name,
155
157
  jobUuid: a.jobUuid,
156
158
  amount: a.name?.toLowerCase() === g.toLowerCase() ? e : "0"
157
159
  }));
158
160
  if (!Ue) {
159
- const a = o.hourlyCompensations?.[0]?.jobUuid ?? r[0]?.jobUuid ?? "";
161
+ const a = o.hourlyCompensations?.[0]?.jobUuid ?? s[0]?.jobUuid ?? "";
160
162
  q.push({
161
163
  name: g,
162
164
  jobUuid: a,
@@ -167,29 +169,29 @@ const Ve = ({
167
169
  name: a.name,
168
170
  jobUuid: a.jobUuid,
169
171
  hours: "0"
170
- })), Ae = (o.paidTimeOff ?? []).map((a) => ({
172
+ })), Se = (o.paidTimeOff ?? []).map((a) => ({
171
173
  name: a.name,
172
174
  hours: "0"
173
- })), Se = W({
175
+ })), we = W({
174
176
  ...o,
175
177
  fixedCompensations: q,
176
178
  hourlyCompensations: Le,
177
- paidTimeOff: Ae
179
+ paidTimeOff: Se
178
180
  });
179
181
  await f({}, async () => {
180
182
  const a = await B({
181
183
  request: {
182
184
  companyId: c,
183
- payrollId: s,
185
+ payrollId: l,
184
186
  payrollUpdate: {
185
- employeeCompensations: [{ ...Se, excluded: !1 }]
187
+ employeeCompensations: [{ ...we, excluded: !1 }]
186
188
  }
187
189
  }
188
190
  });
189
191
  t(i.RUN_PAYROLL_EMPLOYEE_SAVED, {
190
192
  payrollPrepared: a.payrollPrepared
191
193
  }), await R();
192
- }), j(null), D(!1);
194
+ }), v(null), D(!1);
193
195
  }, ye = async (e) => {
194
196
  try {
195
197
  await de(e);
@@ -202,12 +204,12 @@ const Ve = ({
202
204
  try {
203
205
  const o = await _e(z, {
204
206
  companyId: c,
205
- payrollId: s
207
+ payrollId: l
206
208
  });
207
209
  if (!o.ok)
208
210
  throw o.error;
209
- A({
210
- baselineCalculatedAt: l.payrollShow?.calculatedAt?.getTime() ?? null,
211
+ S({
212
+ baselineCalculatedAt: r.payrollShow?.calculatedAt?.getTime() ?? null,
211
213
  // We just submitted the payroll, so we haven't yet seen it return with the calculating status
212
214
  sawCalculatingThisPoll: !1
213
215
  });
@@ -221,7 +223,7 @@ const Ve = ({
221
223
  });
222
224
  }, Pe = (e) => {
223
225
  t(i.RUN_PAYROLL_EMPLOYEE_EDIT, {
224
- payrollId: s,
226
+ payrollId: l,
225
227
  employeeId: e.uuid,
226
228
  firstName: e.firstName,
227
229
  lastName: e.lastName
@@ -243,10 +245,10 @@ const Ve = ({
243
245
  t(i.RUN_PAYROLL_EMPLOYEE_SKIP, {
244
246
  employeeId: e.employeeUuid
245
247
  }), await f({}, async () => {
246
- const o = W(e), r = await B({
248
+ const o = W(e), s = await B({
247
249
  request: {
248
250
  companyId: c,
249
- payrollId: s,
251
+ payrollId: l,
250
252
  payrollUpdate: {
251
253
  employeeCompensations: [
252
254
  { ...o, excluded: !o.excluded }
@@ -255,7 +257,7 @@ const Ve = ({
255
257
  }
256
258
  });
257
259
  t(i.RUN_PAYROLL_EMPLOYEE_SAVED, {
258
- payrollPrepared: r.payrollPrepared
260
+ payrollPrepared: s.payrollPrepared
259
261
  }), await R();
260
262
  });
261
263
  }, ge = () => {
@@ -263,25 +265,25 @@ const Ve = ({
263
265
  };
264
266
  H(() => {
265
267
  if (!C) {
266
- if (!K(l.payrollShow?.processingRequest)) {
268
+ if (!K(r.payrollShow?.processingRequest)) {
267
269
  h.current = !1;
268
270
  return;
269
271
  }
270
- h.current || (L(!1), P(null), A({
271
- baselineCalculatedAt: l.payrollShow?.calculatedAt?.getTime() ?? null,
272
+ h.current || (L(!1), P(null), S({
273
+ baselineCalculatedAt: r.payrollShow?.calculatedAt?.getTime() ?? null,
272
274
  // We have seen the calculating status, which is why we're starting to poll now until it completes or fails.
273
275
  sawCalculatingThisPoll: !0
274
276
  }));
275
277
  }
276
278
  }, [
277
- l.payrollShow?.processingRequest,
278
- l.payrollShow?.calculatedAt,
279
+ r.payrollShow?.processingRequest,
280
+ r.payrollShow?.calculatedAt,
279
281
  C,
280
- A,
282
+ S,
281
283
  P
282
284
  ]);
283
285
  const he = (() => {
284
- const e = l.payrollShow?.payrollStatusMeta;
286
+ const e = r.payrollShow?.payrollStatusMeta;
285
287
  if (e?.payrollLate && e.initialCheckDate && e.expectedDebitTime && e.expectedCheckDate)
286
288
  return {
287
289
  label: n("alerts.payrollLate", {
@@ -293,34 +295,34 @@ const Ve = ({
293
295
  }),
294
296
  variant: "warning"
295
297
  };
296
- const { payrollShow: r } = l;
297
- if (r?.checkDate && r.payrollDeadline)
298
+ const { payrollShow: s } = r;
299
+ if (s?.checkDate && s.payrollDeadline)
298
300
  return {
299
301
  label: n("alerts.directDepositDeadline", {
300
- payDate: p.formatShortWithWeekday(r.checkDate),
301
- ...p.formatWithTime(r.payrollDeadline)
302
+ payDate: p.formatShortWithWeekday(s.checkDate),
303
+ ...p.formatWithTime(s.payrollDeadline)
302
304
  }),
303
305
  content: n("alerts.directDepositDeadlineText"),
304
306
  variant: "info"
305
307
  };
306
308
  })();
307
- return w ? /* @__PURE__ */ y(
309
+ return A ? /* @__PURE__ */ y(
308
310
  Ge,
309
311
  {
310
- className: T,
312
+ className: x,
311
313
  companyId: c,
312
- payrollId: s,
313
- onEvent: (o, r) => {
314
- o === i.RUN_PAYROLL_CANCELLED && R(), t(o, r);
314
+ payrollId: l,
315
+ onEvent: (o, s) => {
316
+ o === i.RUN_PAYROLL_CANCELLED && R(), t(o, s);
315
317
  },
316
- withReimbursements: x,
318
+ withReimbursements: T,
317
319
  alerts: [E]
318
320
  }
319
- ) : /* @__PURE__ */ we(Re, { children: [
321
+ ) : /* @__PURE__ */ Ae(Re, { children: [
320
322
  /* @__PURE__ */ y(
321
- Ne,
323
+ Fe,
322
324
  {
323
- className: T,
325
+ className: x,
324
326
  onCalculatePayroll: fe,
325
327
  isCalculateDisabled: N.length > 0,
326
328
  onEdit: Pe,
@@ -330,20 +332,20 @@ const Ve = ({
330
332
  employeeDetails: ae,
331
333
  payPeriod: se,
332
334
  paySchedule: re,
333
- payrollCategory: S,
335
+ payrollCategory: w,
334
336
  alerts: J,
335
337
  payrollAlert: he,
336
338
  isPending: F || ie || ne,
337
339
  isCalculating: F,
338
340
  payrollBlockers: ee,
339
341
  pagination: le,
340
- withReimbursements: x,
341
- grossUpEnabled: v,
342
+ withReimbursements: T,
343
+ grossUpEnabled: j,
342
344
  onGrossUpSelect: pe
343
345
  }
344
346
  ),
345
- v && /* @__PURE__ */ y(
346
- Ke,
347
+ j && /* @__PURE__ */ y(
348
+ $e,
347
349
  {
348
350
  isOpen: ue,
349
351
  onCalculateGrossUp: me,
@@ -356,6 +358,6 @@ const Ve = ({
356
358
  ] });
357
359
  };
358
360
  export {
359
- Co as PayrollConfiguration
361
+ Uo as PayrollConfiguration
360
362
  };
361
363
  //# sourceMappingURL=PayrollConfiguration.js.map
@@ -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 | `{ payrollId, 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 payrollId,\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
+ {"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 { derivePayrollCategory, PayrollCategory } from '../payrollTypes'\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 | `{ payrollId, 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 isTransitionPayroll:\n derivePayrollCategory(payrollData.payrollShow ?? {}) === PayrollCategory.Transition,\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 payrollId,\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","derivePayrollCategory","PayrollCategory","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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"}
@@ -175,7 +175,7 @@ const he = (l, f) => l?.startDate && l.endDate ? f.formatPayPeriod(l.startDate,
175
175
  const n = c.get(e.employeeUuid || ""), i = n ? ee(
176
176
  e,
177
177
  n,
178
- g?.startDate,
178
+ g?.startDate ?? void 0,
179
179
  w,
180
180
  y
181
181
  ) : 0;