@gusto/embedded-react-sdk 0.55.1 → 0.55.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 (161) hide show
  1. package/CHANGELOG.md +36 -0
  2. package/dist/components/Common/FieldLayout/FieldLayout.js +6 -6
  3. package/dist/components/Common/Fieldset/Fieldset.js +6 -6
  4. package/dist/components/Common/HorizontalFieldLayout/HorizontalFieldLayout.js +6 -6
  5. package/dist/components/Common/UI/Breadcrumbs/Breadcrumbs.js +1 -1
  6. package/dist/components/Common/UI/FileInput/FileInput.js +1 -1
  7. package/dist/components/Common/UI/MultiSelectComboBox/MultiSelectComboBox.js +58 -49
  8. package/dist/components/Common/UI/MultiSelectComboBox/MultiSelectComboBox.js.map +1 -1
  9. package/dist/components/Common/UI/MultiSelectComboBox/MultiSelectComboBox.module.scss.js +14 -10
  10. package/dist/components/Common/UI/MultiSelectComboBox/MultiSelectComboBox.module.scss.js.map +1 -1
  11. package/dist/components/Common/UI/MultiSelectComboBox/MultiSelectComboBoxTypes.d.ts +4 -0
  12. package/dist/components/Common/UI/ProgressBar/ProgressBar.js +4 -4
  13. package/dist/components/Company/AssignSignatory/CreateSignatory/useCreateSignatory.js +6 -3
  14. package/dist/components/Company/AssignSignatory/CreateSignatory/useCreateSignatory.js.map +1 -1
  15. package/dist/components/Company/AssignSignatory/InviteSignatory/useInviteSignatory.js +6 -3
  16. package/dist/components/Company/AssignSignatory/InviteSignatory/useInviteSignatory.js.map +1 -1
  17. package/dist/components/Company/AssignSignatory/useAssignSignatory.js +8 -5
  18. package/dist/components/Company/AssignSignatory/useAssignSignatory.js.map +1 -1
  19. package/dist/components/Company/BankAccount/BankAccountForm/context.js +6 -3
  20. package/dist/components/Company/BankAccount/BankAccountForm/context.js.map +1 -1
  21. package/dist/components/Company/DocumentSigner/DocumentList/DocumentList.d.ts +4 -0
  22. package/dist/components/Company/DocumentSigner/DocumentList/DocumentList.js.map +1 -1
  23. package/dist/components/Company/DocumentSigner/DocumentList/List.js +11 -8
  24. package/dist/components/Company/DocumentSigner/DocumentList/List.js.map +1 -1
  25. package/dist/components/Company/DocumentSigner/DocumentList/useDocumentList.js +6 -3
  26. package/dist/components/Company/DocumentSigner/DocumentList/useDocumentList.js.map +1 -1
  27. package/dist/components/Company/FederalTaxes/useFederalTaxes.js +11 -8
  28. package/dist/components/Company/FederalTaxes/useFederalTaxes.js.map +1 -1
  29. package/dist/components/Company/Industry/Context.js +9 -6
  30. package/dist/components/Company/Industry/Context.js.map +1 -1
  31. package/dist/components/Company/Locations/LocationForm/useLocationForm.js +6 -3
  32. package/dist/components/Company/Locations/LocationForm/useLocationForm.js.map +1 -1
  33. package/dist/components/Company/Locations/LocationsList/useLocationsList.js +6 -3
  34. package/dist/components/Company/Locations/LocationsList/useLocationsList.js.map +1 -1
  35. package/dist/components/Company/OnboardingOverview/context.js +6 -3
  36. package/dist/components/Company/OnboardingOverview/context.js.map +1 -1
  37. package/dist/components/Company/StateTaxes/StateTaxesForm/context.js +6 -3
  38. package/dist/components/Company/StateTaxes/StateTaxesForm/context.js.map +1 -1
  39. package/dist/components/Company/StateTaxes/StateTaxesList/context.js +6 -3
  40. package/dist/components/Company/StateTaxes/StateTaxesList/context.js.map +1 -1
  41. package/dist/components/Company/StateTaxes/TaxRateManagement/context.js +6 -3
  42. package/dist/components/Company/StateTaxes/TaxRateManagement/context.js.map +1 -1
  43. package/dist/components/Employee/Compensation/shared/useJobForm/useJobForm.js +116 -116
  44. package/dist/components/Employee/Compensation/shared/useJobForm/useJobForm.js.map +1 -1
  45. package/dist/components/Employee/Documents/onboarding/DocumentSigner/DocumentList/DocumentList.d.ts +4 -0
  46. package/dist/components/Employee/Documents/onboarding/DocumentSigner/DocumentList/DocumentList.js +19 -19
  47. package/dist/components/Employee/Documents/onboarding/DocumentSigner/DocumentList/DocumentList.js.map +1 -1
  48. package/dist/components/Employee/Documents/onboarding/DocumentSigner/DocumentList/List.js +16 -13
  49. package/dist/components/Employee/Documents/onboarding/DocumentSigner/DocumentList/List.js.map +1 -1
  50. package/dist/components/Employee/Documents/onboarding/DocumentSigner/DocumentList/useDocumentList.js +6 -3
  51. package/dist/components/Employee/Documents/onboarding/DocumentSigner/DocumentList/useDocumentList.js.map +1 -1
  52. package/dist/components/Employee/Documents/onboarding/DocumentSigner/DocumentSigner.d.ts +4 -0
  53. package/dist/components/Employee/Documents/onboarding/DocumentSigner/DocumentSigner.js.map +1 -1
  54. package/dist/components/Employee/FederalTaxes/shared/FederalTaxesView.js +1 -1
  55. package/dist/components/Employee/PaymentMethod/management/PaymentMethodBankForm.js +4 -4
  56. package/dist/components/Employee/PaymentMethod/onboarding/BankForm.js +4 -4
  57. package/dist/components/Flow/Flow.js +1 -1
  58. package/dist/components/Payroll/GrossUpModal/GrossUpModal.js +3 -2
  59. package/dist/components/Payroll/GrossUpModal/GrossUpModal.js.map +1 -1
  60. package/dist/components/Payroll/OffCycleCreation/OffCycleCreation.js +75 -71
  61. package/dist/components/Payroll/OffCycleCreation/OffCycleCreation.js.map +1 -1
  62. package/dist/components/Payroll/PayrollConfiguration/PayrollConfiguration.d.ts +7 -0
  63. package/dist/components/Payroll/PayrollConfiguration/PayrollConfiguration.js +202 -165
  64. package/dist/components/Payroll/PayrollConfiguration/PayrollConfiguration.js.map +1 -1
  65. package/dist/components/Payroll/PayrollConfiguration/usePayrollConfigurationData.d.ts +1 -0
  66. package/dist/components/Payroll/PayrollConfiguration/usePayrollConfigurationData.js +88 -82
  67. package/dist/components/Payroll/PayrollConfiguration/usePayrollConfigurationData.js.map +1 -1
  68. package/dist/components/Payroll/PayrollExecutionFlow/PayrollExecutionFlow.d.ts +1 -0
  69. package/dist/components/Payroll/PayrollExecutionFlow/PayrollExecutionFlow.js.map +1 -1
  70. package/dist/components/Payroll/PayrollExecutionFlow/payrollExecutionMachine.js +73 -48
  71. package/dist/components/Payroll/PayrollExecutionFlow/payrollExecutionMachine.js.map +1 -1
  72. package/dist/components/Payroll/PayrollFlow/PayrollFlow.d.ts +1 -1
  73. package/dist/components/Payroll/PayrollFlow/PayrollFlow.js +22 -20
  74. package/dist/components/Payroll/PayrollFlow/PayrollFlow.js.map +1 -1
  75. package/dist/components/Payroll/PayrollFlow/PayrollFlowComponents.d.ts +3 -0
  76. package/dist/components/Payroll/PayrollFlow/PayrollFlowComponents.js +22 -20
  77. package/dist/components/Payroll/PayrollFlow/PayrollFlowComponents.js.map +1 -1
  78. package/dist/components/Payroll/PayrollLanding/PayrollLanding.d.ts +2 -0
  79. package/dist/components/Payroll/PayrollLanding/PayrollLanding.js +34 -26
  80. package/dist/components/Payroll/PayrollLanding/PayrollLanding.js.map +1 -1
  81. package/dist/components/Payroll/PayrollLanding/PayrollLandingFlowComponents.d.ts +4 -0
  82. package/dist/components/Payroll/PayrollLanding/PayrollLandingFlowComponents.js +51 -43
  83. package/dist/components/Payroll/PayrollLanding/PayrollLandingFlowComponents.js.map +1 -1
  84. package/dist/components/Payroll/PayrollList/PayrollList.d.ts +2 -0
  85. package/dist/components/Payroll/PayrollList/PayrollList.js +48 -47
  86. package/dist/components/Payroll/PayrollList/PayrollList.js.map +1 -1
  87. package/dist/components/Payroll/PayrollList/PayrollListPresentation.d.ts +2 -1
  88. package/dist/components/Payroll/PayrollList/PayrollListPresentation.js +44 -43
  89. package/dist/components/Payroll/PayrollList/PayrollListPresentation.js.map +1 -1
  90. package/dist/components/Payroll/PayrollOverview/PayrollOverview.d.ts +15 -1
  91. package/dist/components/Payroll/PayrollOverview/PayrollOverview.js +188 -172
  92. package/dist/components/Payroll/PayrollOverview/PayrollOverview.js.map +1 -1
  93. package/dist/components/Payroll/PayrollOverview/PayrollOverviewPresentation.d.ts +3 -1
  94. package/dist/components/Payroll/PayrollOverview/PayrollOverviewPresentation.js +110 -118
  95. package/dist/components/Payroll/PayrollOverview/PayrollOverviewPresentation.js.map +1 -1
  96. package/dist/components/Payroll/PayrollReceipts/PayrollReceipts.js +22 -16
  97. package/dist/components/Payroll/PayrollReceipts/PayrollReceipts.js.map +1 -1
  98. package/dist/components/Payroll/PayrollReceipts/PayrollReceiptsPresentation.js +58 -49
  99. package/dist/components/Payroll/PayrollReceipts/PayrollReceiptsPresentation.js.map +1 -1
  100. package/dist/components/Payroll/PrintChecks/PrintChecks.d.ts +21 -0
  101. package/dist/components/Payroll/PrintChecks/PrintChecks.js +68 -0
  102. package/dist/components/Payroll/PrintChecks/PrintChecks.js.map +1 -0
  103. package/dist/components/Payroll/PrintChecks/PrintChecksBanner/PrintChecksBanner.d.ts +9 -0
  104. package/dist/components/Payroll/PrintChecks/PrintChecksBanner/PrintChecksBanner.js +34 -0
  105. package/dist/components/Payroll/PrintChecks/PrintChecksBanner/PrintChecksBanner.js.map +1 -0
  106. package/dist/components/Payroll/PrintChecks/PrintChecksBanner/index.d.ts +1 -0
  107. package/dist/components/Payroll/PrintChecks/PrintChecksComponents.d.ts +48 -0
  108. package/dist/components/Payroll/PrintChecks/PrintChecksComponents.js +26 -0
  109. package/dist/components/Payroll/PrintChecks/PrintChecksComponents.js.map +1 -0
  110. package/dist/components/Payroll/PrintChecks/PrintChecksFailure/PrintChecksFailure.d.ts +14 -0
  111. package/dist/components/Payroll/PrintChecks/PrintChecksFailure/PrintChecksFailure.js +47 -0
  112. package/dist/components/Payroll/PrintChecks/PrintChecksFailure/PrintChecksFailure.js.map +1 -0
  113. package/dist/components/Payroll/PrintChecks/PrintChecksFailure/index.d.ts +1 -0
  114. package/dist/components/Payroll/PrintChecks/PrintChecksForm/PrintChecksForm.d.ts +16 -0
  115. package/dist/components/Payroll/PrintChecks/PrintChecksForm/PrintChecksForm.js +144 -0
  116. package/dist/components/Payroll/PrintChecks/PrintChecksForm/PrintChecksForm.js.map +1 -0
  117. package/dist/components/Payroll/PrintChecks/PrintChecksForm/index.d.ts +1 -0
  118. package/dist/components/Payroll/PrintChecks/PrintChecksSummary/PrintChecksSummary.d.ts +14 -0
  119. package/dist/components/Payroll/PrintChecks/PrintChecksSummary/PrintChecksSummary.js +39 -0
  120. package/dist/components/Payroll/PrintChecks/PrintChecksSummary/PrintChecksSummary.js.map +1 -0
  121. package/dist/components/Payroll/PrintChecks/PrintChecksSummary/index.d.ts +1 -0
  122. package/dist/components/Payroll/PrintChecks/index.d.ts +2 -0
  123. package/dist/components/Payroll/PrintChecks/printChecksStateMachine.d.ts +33 -0
  124. package/dist/components/Payroll/PrintChecks/printChecksStateMachine.js +93 -0
  125. package/dist/components/Payroll/PrintChecks/printChecksStateMachine.js.map +1 -0
  126. package/dist/components/Payroll/PrintChecks/types.d.ts +14 -0
  127. package/dist/components/Payroll/helpers.d.ts +0 -15
  128. package/dist/components/Payroll/helpers.js +13 -18
  129. package/dist/components/Payroll/helpers.js.map +1 -1
  130. package/dist/components/Payroll/index.d.ts +2 -0
  131. package/dist/components/Payroll/index.js +26 -24
  132. package/dist/components/Payroll/index.js.map +1 -1
  133. package/dist/components/Payroll/usePreparedPayrollData.js +15 -12
  134. package/dist/components/Payroll/usePreparedPayrollData.js.map +1 -1
  135. package/dist/i18n/I18n.js +4 -0
  136. package/dist/i18n/I18n.js.map +1 -1
  137. package/dist/i18n/en/Company.DocumentList.json.js +34 -32
  138. package/dist/i18n/en/Company.DocumentList.json.js.map +1 -1
  139. package/dist/i18n/en/Employee.DocumentSigner.json.js +24 -22
  140. package/dist/i18n/en/Employee.DocumentSigner.json.js.map +1 -1
  141. package/dist/i18n/en/Payroll.PayrollConfiguration.json.js +9 -9
  142. package/dist/i18n/en/Payroll.PayrollOverview.json.js +36 -36
  143. package/dist/i18n/en/Payroll.PayrollReceipts.json.js +2 -2
  144. package/dist/i18n/en/Payroll.PrintChecksBanner.json.js +14 -0
  145. package/dist/i18n/en/Payroll.PrintChecksBanner.json.js.map +1 -0
  146. package/dist/i18n/en/Payroll.PrintChecksFailure.json.js +12 -0
  147. package/dist/i18n/en/Payroll.PrintChecksFailure.json.js.map +1 -0
  148. package/dist/i18n/en/Payroll.PrintChecksForm.json.js +28 -0
  149. package/dist/i18n/en/Payroll.PrintChecksForm.json.js.map +1 -0
  150. package/dist/i18n/en/Payroll.PrintChecksSummary.json.js +14 -0
  151. package/dist/i18n/en/Payroll.PrintChecksSummary.json.js.map +1 -0
  152. package/dist/i18n/types.d.ts +376 -8
  153. package/dist/models/external.d.ts +3 -0
  154. package/dist/partner-hook-utils/form/buildFormSchema.js +60 -54
  155. package/dist/partner-hook-utils/form/buildFormSchema.js.map +1 -1
  156. package/dist/shared/constants.d.ts +28 -0
  157. package/dist/shared/constants.js +61 -50
  158. package/dist/shared/constants.js.map +1 -1
  159. package/dist/style.css +1 -1
  160. package/docs/guides/endpoint-inventory.json +26 -0
  161. package/package.json +6 -6
@@ -1,169 +1,195 @@
1
- import { jsx as P, jsxs as pe, Fragment as ce } from "react/jsx-runtime";
2
- import { useState as f, useRef as me, useMemo as de, useEffect as G } from "react";
3
- import { useQueryClient as ye } from "@tanstack/react-query";
4
- import { usePayrollsGetSuspense as fe } from "@gusto/embedded-api/react-query/payrollsGet";
5
- import { payrollsCalculate as Ce } from "@gusto/embedded-api/funcs/payrollsCalculate";
6
- import { useGustoEmbeddedContext as Ue } from "@gusto/embedded-api/react-query/_context";
7
- import { PayrollProcessingRequestStatus as _ } from "@gusto/embedded-api/models/components/payrollprocessingrequest";
8
- import { useTranslation as Pe } from "react-i18next";
9
- import { usePayrollsUpdateMutation as ge } from "@gusto/embedded-api/react-query/payrollsUpdate";
10
- import { usePayrollsCalculateGrossUpMutation as he } from "@gusto/embedded-api/react-query/payrollsCalculateGrossUp";
11
- import { usePayrollsGetBlockersSuspense as Le } from "@gusto/embedded-api/react-query/payrollsGetBlockers";
12
- import { payrollSubmitHandler as Se } from "../PayrollBlocker/payrollHelpers.js";
13
- import { hasDirectDepositEmployees as we } from "../helpers.js";
14
- import { PayrollConfigurationPresentation as _e } from "./PayrollConfigurationPresentation.js";
15
- import { usePayrollConfigurationData as Re } from "./usePayrollConfigurationData.js";
16
- import { isGrossUpEligible as Ae, getGrossUpTargetCompensationName as De } from "./grossUpHelpers.js";
17
- import { BaseComponent as Ee } from "../../Base/Base.js";
18
- import { componentEvents as i } from "../../../shared/constants.js";
19
- import { useComponentDictionary as Oe, useI18n as Te } from "../../../i18n/I18n.js";
20
- import { useBase as xe } from "../../Base/useBase.js";
21
- import { useDateFormatter as be } from "../../../hooks/useDateFormatter.js";
22
- import { SDKInternalError as N } from "../../../types/sdkError.js";
23
- import { API_QUERY_NAMESPACE as ke } from "../../../contexts/ApiProvider/apiVersion.js";
24
- import { GrossUpModal as Ge } from "../GrossUpModal/GrossUpModal.js";
25
- const Ne = (t) => t?.status === _.Calculating, Me = (t, n) => n != null && (t?.status === _.CalculateSuccess || t == null);
26
- function uo(t) {
27
- return /* @__PURE__ */ P(Ee, { ...t, children: /* @__PURE__ */ P(Ye, { ...t, children: t.children }) });
1
+ import { jsx as f, jsxs as fe, Fragment as Ce } from "react/jsx-runtime";
2
+ import { useState as y, useRef as B, useMemo as q, useEffect as D } from "react";
3
+ import { useQueryClient as Pe } from "@tanstack/react-query";
4
+ import { usePayrollsGetSuspense as Ue } from "@gusto/embedded-api/react-query/payrollsGet";
5
+ import { payrollsCalculate as Le } from "@gusto/embedded-api/funcs/payrollsCalculate";
6
+ import { useGustoEmbeddedContext as ge } from "@gusto/embedded-api/react-query/_context";
7
+ import { PayrollProcessingRequestStatus as E } from "@gusto/embedded-api/models/components/payrollprocessingrequest";
8
+ import { useTranslation as he } from "react-i18next";
9
+ import { usePayrollsUpdateMutation as Se } from "@gusto/embedded-api/react-query/payrollsUpdate";
10
+ import { usePayrollsCalculateGrossUpMutation as Ae } from "@gusto/embedded-api/react-query/payrollsCalculateGrossUp";
11
+ import { usePayrollsGetBlockersSuspense as _e } from "@gusto/embedded-api/react-query/payrollsGetBlockers";
12
+ import { payrollSubmitHandler as we } from "../PayrollBlocker/payrollHelpers.js";
13
+ import { PayrollOverview as Re } from "../PayrollOverview/PayrollOverview.js";
14
+ import { PayrollConfigurationPresentation as De } from "./PayrollConfigurationPresentation.js";
15
+ import { usePayrollConfigurationData as Ee } from "./usePayrollConfigurationData.js";
16
+ import { isGrossUpEligible as Oe, getGrossUpTargetCompensationName as Te } from "./grossUpHelpers.js";
17
+ import { BaseComponent as xe } from "../../Base/Base.js";
18
+ import { componentEvents as l } from "../../../shared/constants.js";
19
+ import { useComponentDictionary as be, useI18n as ke } from "../../../i18n/I18n.js";
20
+ import { useBase as Ne } from "../../Base/useBase.js";
21
+ import { useDateFormatter as Ge } from "../../../hooks/useDateFormatter.js";
22
+ import { SDKInternalError as F } from "../../../types/sdkError.js";
23
+ import { API_QUERY_NAMESPACE as Ye } from "../../../contexts/ApiProvider/apiVersion.js";
24
+ import { GrossUpModal as Me } from "../GrossUpModal/GrossUpModal.js";
25
+ const Be = (t) => t?.status === E.Calculating, qe = (t, u) => u != null && (t?.status === E.CalculateSuccess || t == null);
26
+ function mo(t) {
27
+ return /* @__PURE__ */ f(xe, { ...t, children: /* @__PURE__ */ f(Fe, { ...t, children: t.children }) });
28
28
  }
29
- const Ye = ({
29
+ const Fe = ({
30
30
  onEvent: t,
31
- companyId: n,
32
- payrollId: u,
33
- dictionary: M,
34
- alerts: Y,
35
- withReimbursements: B = !0
31
+ companyId: u,
32
+ payrollId: i,
33
+ dictionary: j,
34
+ alerts: v,
35
+ withReimbursements: O = !0
36
36
  }) => {
37
- Oe("Payroll.PayrollConfiguration", M), Te("Payroll.PayrollConfiguration");
38
- const { t: p } = Pe("Payroll.PayrollConfiguration"), { baseSubmitHandler: C } = xe(), c = be(), [r, m] = f(!1), [g, R] = f(!1), h = me(null), q = Ue(), j = ye(), { data: s } = fe(
37
+ be("Payroll.PayrollConfiguration", j), ke("Payroll.PayrollConfiguration");
38
+ const { t: c } = he("Payroll.PayrollConfiguration"), { baseSubmitHandler: C } = Ne(), p = Ge(), [n, m] = y(!1), [U, T] = y(!1), L = B(null), W = ge(), K = Pe(), { data: s } = Ue(
39
39
  {
40
- companyId: n,
41
- payrollId: u,
40
+ companyId: u,
41
+ payrollId: i,
42
42
  include: ["taxes", "benefits", "deductions", "payroll_status_meta"]
43
43
  },
44
- { refetchInterval: r ? 5e3 : !1 }
45
- ), F = de(
44
+ { refetchInterval: n ? 5e3 : !1 }
45
+ ), H = q(
46
46
  () => s.payrollShow?.employeeCompensations?.filter((e) => e.excluded).map((e) => e.employeeUuid).filter(Boolean) ?? [],
47
47
  [s.payrollShow?.employeeCompensations]
48
48
  ), {
49
- employeeDetails: W,
50
- employeeCompensations: A,
49
+ employeeDetails: V,
50
+ employeeCompensations: x,
51
51
  paySchedule: I,
52
- payPeriod: K,
53
- payrollCategory: L,
54
- pagination: H,
55
- isLoading: V,
56
- refetch: D
57
- } = Re({
58
- companyId: n,
59
- payrollId: u,
60
- isCalculating: r || g,
61
- excludedEmployeeUuids: F
62
- }), { mutateAsync: E, isPending: Q } = ge(), { mutateAsync: v } = he(), [d, O] = f(null), [J, S] = f(!1), T = Ae(L), U = De(L), z = (e) => {
63
- O(e), S(!0), t(i.RUN_PAYROLL_GROSS_UP_SELECTED, { employeeUuid: e });
64
- }, X = async (e) => {
52
+ payPeriod: Q,
53
+ payrollCategory: g,
54
+ pagination: J,
55
+ isLoading: z,
56
+ isAlreadyProcessed: h,
57
+ refetch: S
58
+ } = Ee({
59
+ companyId: u,
60
+ payrollId: i,
61
+ isCalculating: n || U,
62
+ excludedEmployeeUuids: H
63
+ }), A = q(
64
+ () => ({
65
+ type: "error",
66
+ title: c("alerts.alreadyProcessed"),
67
+ alertKey: "alreadyProcessed"
68
+ }),
69
+ [c]
70
+ ), _ = B(!1);
71
+ D(() => {
72
+ if (!h) {
73
+ _.current = !1;
74
+ return;
75
+ }
76
+ _.current || (_.current = !0, t(l.RUN_PAYROLL_ALREADY_PROCESSED, {
77
+ payrollId: i,
78
+ alert: A,
79
+ payPeriod: s.payrollShow?.payPeriod
80
+ }));
81
+ }, [
82
+ h,
83
+ t,
84
+ i,
85
+ A,
86
+ s.payrollShow?.payPeriod
87
+ ]);
88
+ const { mutateAsync: b, isPending: X } = Se(), { mutateAsync: Z } = Ae(), [d, k] = y(null), [$, w] = y(!1), N = Oe(g), P = Te(g), ee = (e) => {
89
+ k(e), w(!0), t(l.RUN_PAYROLL_GROSS_UP_SELECTED, { employeeUuid: e });
90
+ }, oe = async (e) => {
65
91
  if (!d) return null;
66
92
  let o = null;
67
93
  return await C(null, async () => {
68
- o = (await v({
94
+ o = (await Z({
69
95
  request: {
70
- payrollUuid: u,
96
+ payrollUuid: i,
71
97
  payrollGrossUpRequest: {
72
98
  employeeUuid: d,
73
99
  netPay: e.toString()
74
100
  }
75
101
  }
76
- })).payrollGrossUpResponse?.grossUp ?? null, o && t(i.RUN_PAYROLL_GROSS_UP_CALCULATED, {
102
+ })).payrollGrossUpResponse?.grossUp ?? null, o && t(l.RUN_PAYROLL_GROSS_UP_CALCULATED, {
77
103
  grossUp: o,
78
104
  netPay: e,
79
105
  employeeUuid: d
80
106
  });
81
107
  }), o;
82
- }, Z = async (e) => {
83
- if (!d || !U)
84
- throw new N(
108
+ }, te = async (e) => {
109
+ if (!d || !P)
110
+ throw new F(
85
111
  "Unable to apply gross-up: missing employee or target compensation."
86
112
  );
87
- const o = A.find((a) => a.employeeUuid === d);
113
+ const o = x.find((a) => a.employeeUuid === d);
88
114
  if (!o)
89
- throw new N("Unable to apply gross-up: employee compensation not found.");
90
- const l = o.fixedCompensations ?? [], y = l.some(
91
- (a) => a.name?.toLowerCase() === U.toLowerCase()
92
- ), k = l.map((a) => ({
115
+ throw new F("Unable to apply gross-up: employee compensation not found.");
116
+ const r = o.fixedCompensations ?? [], pe = r.some(
117
+ (a) => a.name?.toLowerCase() === P.toLowerCase()
118
+ ), M = r.map((a) => ({
93
119
  name: a.name,
94
120
  jobUuid: a.jobUuid,
95
- amount: a.name?.toLowerCase() === U.toLowerCase() ? e : "0"
121
+ amount: a.name?.toLowerCase() === P.toLowerCase() ? e : "0"
96
122
  }));
97
- if (!y) {
98
- const a = o.hourlyCompensations?.[0]?.jobUuid ?? l[0]?.jobUuid ?? "";
99
- k.push({
100
- name: U,
123
+ if (!pe) {
124
+ const a = o.hourlyCompensations?.[0]?.jobUuid ?? r[0]?.jobUuid ?? "";
125
+ M.push({
126
+ name: P,
101
127
  jobUuid: a,
102
128
  amount: e
103
129
  });
104
130
  }
105
- const ie = (o.hourlyCompensations ?? []).map((a) => ({
131
+ const me = (o.hourlyCompensations ?? []).map((a) => ({
106
132
  name: a.name,
107
133
  jobUuid: a.jobUuid,
108
134
  hours: "0"
109
- })), ne = (o.paidTimeOff ?? []).map((a) => ({
135
+ })), de = (o.paidTimeOff ?? []).map((a) => ({
110
136
  name: a.name,
111
137
  hours: "0"
112
- })), ue = b({
138
+ })), ye = Y({
113
139
  ...o,
114
- fixedCompensations: k,
115
- hourlyCompensations: ie,
116
- paidTimeOff: ne
140
+ fixedCompensations: M,
141
+ hourlyCompensations: me,
142
+ paidTimeOff: de
117
143
  });
118
144
  await C({}, async () => {
119
- const a = await E({
145
+ const a = await b({
120
146
  request: {
121
- companyId: n,
122
- payrollId: u,
147
+ companyId: u,
148
+ payrollId: i,
123
149
  payrollUpdate: {
124
- employeeCompensations: [{ ...ue, excluded: !1 }]
150
+ employeeCompensations: [{ ...ye, excluded: !1 }]
125
151
  }
126
152
  }
127
153
  });
128
- t(i.RUN_PAYROLL_EMPLOYEE_SAVED, {
154
+ t(l.RUN_PAYROLL_EMPLOYEE_SAVED, {
129
155
  payrollPrepared: a.payrollPrepared
130
- }), await D();
131
- }), O(null), S(!1);
132
- }, $ = async (e) => {
156
+ }), await S();
157
+ }), k(null), w(!1);
158
+ }, ae = async (e) => {
133
159
  try {
134
- await Z(e);
160
+ await te(e);
135
161
  } catch {
136
162
  }
137
- }, { data: ee } = Le({
138
- companyUuid: n
139
- }), x = (ee.payrollBlockers ?? []).map((e) => ({
163
+ }, { data: se } = _e({
164
+ companyUuid: u
165
+ }), G = (se.payrollBlockers ?? []).map((e) => ({
140
166
  key: e.key,
141
167
  message: e.message
142
- })), [oe, w] = f(x), te = async () => {
143
- w([]), h.current = s.payrollShow?.calculatedAt?.getTime() ?? null, await C({}, async () => {
144
- const e = await Se(async () => {
145
- R(!0);
168
+ })), [re, R] = y(G), le = async () => {
169
+ R([]), L.current = s.payrollShow?.calculatedAt?.getTime() ?? null, await C({}, async () => {
170
+ const e = await we(async () => {
171
+ T(!0);
146
172
  try {
147
- const o = await Ce(q, {
148
- companyId: n,
149
- payrollId: u
173
+ const o = await Le(W, {
174
+ companyId: u,
175
+ payrollId: i
150
176
  });
151
177
  if (!o.ok)
152
178
  throw o.error;
153
- j.invalidateQueries({ queryKey: [ke] }), m(!0);
179
+ K.invalidateQueries({ queryKey: [Ye] }), m(!0);
154
180
  } finally {
155
- R(!1);
181
+ T(!1);
156
182
  }
157
183
  });
158
- !e.success && e.blockers.length > 0 && w(e.blockers);
184
+ !e.success && e.blockers.length > 0 && R(e.blockers);
159
185
  });
160
- }, ae = (e) => {
161
- t(i.RUN_PAYROLL_EMPLOYEE_EDIT, {
186
+ }, ie = (e) => {
187
+ t(l.RUN_PAYROLL_EMPLOYEE_EDIT, {
162
188
  employeeId: e.uuid,
163
189
  firstName: e.firstName,
164
190
  lastName: e.lastName
165
191
  });
166
- }, b = (e) => {
192
+ }, Y = (e) => {
167
193
  const { paymentMethod: o } = e;
168
194
  return {
169
195
  employeeUuid: e.employeeUuid,
@@ -176,14 +202,14 @@ const Ye = ({
176
202
  ...o && o !== "Historical" ? { paymentMethod: o } : {},
177
203
  memo: e.memo || void 0
178
204
  };
179
- }, se = async (e) => {
180
- t(i.RUN_PAYROLL_EMPLOYEE_SKIP, {
205
+ }, ne = async (e) => {
206
+ t(l.RUN_PAYROLL_EMPLOYEE_SKIP, {
181
207
  employeeId: e.employeeUuid
182
208
  }), await C({}, async () => {
183
- const o = b(e), l = await E({
209
+ const o = Y(e), r = await b({
184
210
  request: {
185
- companyId: n,
186
- payrollId: u,
211
+ companyId: u,
212
+ payrollId: i,
187
213
  payrollUpdate: {
188
214
  employeeCompensations: [
189
215
  { ...o, excluded: !o.excluded }
@@ -191,104 +217,115 @@ const Ye = ({
191
217
  }
192
218
  }
193
219
  });
194
- t(i.RUN_PAYROLL_EMPLOYEE_SAVED, {
195
- payrollPrepared: l.payrollPrepared
196
- }), await D();
220
+ t(l.RUN_PAYROLL_EMPLOYEE_SAVED, {
221
+ payrollPrepared: r.payrollPrepared
222
+ }), await S();
197
223
  });
198
- }, le = () => {
199
- t(i.RUN_PAYROLL_BLOCKERS_VIEW_ALL);
224
+ }, ue = () => {
225
+ t(l.RUN_PAYROLL_BLOCKERS_VIEW_ALL);
200
226
  };
201
- G(() => {
202
- Ne(s.payrollShow?.processingRequest) && !r && (h.current = s.payrollShow?.calculatedAt?.getTime() ?? null, m(!0));
203
- const e = s.payrollShow?.calculatedAt, o = e?.getTime() !== h.current;
204
- r && o && Me(s.payrollShow?.processingRequest, e) && (t(i.RUN_PAYROLL_CALCULATED, {
205
- payrollId: u,
227
+ D(() => {
228
+ Be(s.payrollShow?.processingRequest) && !n && (L.current = s.payrollShow?.calculatedAt?.getTime() ?? null, m(!0));
229
+ const e = s.payrollShow?.calculatedAt, o = e?.getTime() !== L.current;
230
+ n && o && qe(s.payrollShow?.processingRequest, e) && (t(l.RUN_PAYROLL_CALCULATED, {
231
+ payrollId: i,
206
232
  alert: {
207
233
  type: "success",
208
- title: p("alerts.progressSaved"),
234
+ title: c("alerts.progressSaved"),
209
235
  alertKey: "progressSaved"
210
236
  },
211
237
  payPeriod: s.payrollShow?.payPeriod
212
- }), w([]), m(!1)), r && s.payrollShow?.processingRequest?.status === _.ProcessingFailed && (t(i.RUN_PAYROLL_PROCESSING_FAILED), m(!1));
238
+ }), R([]), m(!1)), n && s.payrollShow?.processingRequest?.status === E.ProcessingFailed && (t(l.RUN_PAYROLL_PROCESSING_FAILED), m(!1));
213
239
  }, [
214
240
  s.payrollShow?.processingRequest?.status,
215
241
  s.payrollShow?.calculatedAt,
216
- r,
242
+ n,
217
243
  t,
218
- p,
219
- u
220
- ]), G(() => {
221
- if (!r) return;
244
+ c,
245
+ i
246
+ ]), D(() => {
247
+ if (!n) return;
222
248
  const e = 180 * 1e3, o = setTimeout(() => {
223
- t(i.RUN_PAYROLL_PROCESSING_FAILED), m(!1);
249
+ t(l.RUN_PAYROLL_PROCESSING_FAILED), m(!1);
224
250
  }, e);
225
251
  return () => {
226
252
  clearTimeout(o);
227
253
  };
228
- }, [r, t]);
229
- const re = (() => {
254
+ }, [n, t]);
255
+ const ce = (() => {
230
256
  const e = s.payrollShow?.payrollStatusMeta;
231
257
  if (e?.payrollLate && e.initialCheckDate && e.expectedDebitTime && e.expectedCheckDate)
232
258
  return {
233
- label: p("alerts.payrollLate", {
234
- initialCheckDate: c.formatShortWithWeekday(e.initialCheckDate)
259
+ label: c("alerts.payrollLate", {
260
+ initialCheckDate: p.formatShortWithWeekday(e.initialCheckDate)
235
261
  }),
236
- content: p("alerts.payrollLateText", {
237
- ...c.formatWithTime(e.expectedDebitTime),
238
- newCheckDate: c.formatShortWithWeekday(e.expectedCheckDate)
262
+ content: c("alerts.payrollLateText", {
263
+ ...p.formatWithTime(e.expectedDebitTime),
264
+ newCheckDate: p.formatShortWithWeekday(e.expectedCheckDate)
239
265
  }),
240
266
  variant: "warning"
241
267
  };
242
- const { payrollShow: l } = s, y = l?.employeeCompensations;
243
- if (l && y && y.length > 0 && we(y))
268
+ const { payrollShow: r } = s;
269
+ if (r?.checkDate && r.payrollDeadline)
244
270
  return {
245
- label: p("alerts.directDepositDeadline", {
246
- payDate: c.formatShortWithWeekday(l.checkDate),
247
- ...c.formatWithTime(l.payrollDeadline)
271
+ label: c("alerts.directDepositDeadline", {
272
+ payDate: p.formatShortWithWeekday(r.checkDate),
273
+ ...p.formatWithTime(r.payrollDeadline)
248
274
  }),
249
- content: p("alerts.directDepositDeadlineText"),
275
+ content: c("alerts.directDepositDeadlineText"),
250
276
  variant: "info"
251
277
  };
252
278
  })();
253
- return /* @__PURE__ */ pe(ce, { children: [
254
- /* @__PURE__ */ P(
255
- _e,
279
+ return h ? /* @__PURE__ */ f(
280
+ Re,
281
+ {
282
+ companyId: u,
283
+ payrollId: i,
284
+ onEvent: (o, r) => {
285
+ o === l.RUN_PAYROLL_CANCELLED && S(), t(o, r);
286
+ },
287
+ withReimbursements: O,
288
+ alerts: [A]
289
+ }
290
+ ) : /* @__PURE__ */ fe(Ce, { children: [
291
+ /* @__PURE__ */ f(
292
+ De,
256
293
  {
257
- onCalculatePayroll: te,
258
- isCalculateDisabled: x.length > 0,
259
- onEdit: ae,
260
- onToggleExclude: se,
261
- onViewBlockers: le,
262
- employeeCompensations: A,
263
- employeeDetails: W,
264
- payPeriod: K,
294
+ onCalculatePayroll: le,
295
+ isCalculateDisabled: G.length > 0,
296
+ onEdit: ie,
297
+ onToggleExclude: ne,
298
+ onViewBlockers: ue,
299
+ employeeCompensations: x,
300
+ employeeDetails: V,
301
+ payPeriod: Q,
265
302
  paySchedule: I,
266
- payrollCategory: L,
267
- alerts: Y,
268
- payrollAlert: re,
269
- isPending: r || V || Q || g,
270
- isCalculating: g || r,
271
- payrollBlockers: oe,
272
- pagination: H,
273
- withReimbursements: B,
274
- grossUpEnabled: T,
275
- onGrossUpSelect: z
303
+ payrollCategory: g,
304
+ alerts: v,
305
+ payrollAlert: ce,
306
+ isPending: n || z || X || U,
307
+ isCalculating: U || n,
308
+ payrollBlockers: re,
309
+ pagination: J,
310
+ withReimbursements: O,
311
+ grossUpEnabled: N,
312
+ onGrossUpSelect: ee
276
313
  }
277
314
  ),
278
- T && /* @__PURE__ */ P(
279
- Ge,
315
+ N && /* @__PURE__ */ f(
316
+ Me,
280
317
  {
281
- isOpen: J,
282
- onCalculateGrossUp: X,
283
- onApply: $,
318
+ isOpen: $,
319
+ onCalculateGrossUp: oe,
320
+ onApply: ae,
284
321
  onCancel: () => {
285
- S(!1);
322
+ w(!1);
286
323
  }
287
324
  }
288
325
  )
289
326
  ] });
290
327
  };
291
328
  export {
292
- uo as PayrollConfiguration
329
+ mo as PayrollConfiguration
293
330
  };
294
331
  //# 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 { useQueryClient } from '@tanstack/react-query'\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 { PayrollProcessingRequest } from '@gusto/embedded-api/models/components/payrollprocessingrequest'\nimport { PayrollProcessingRequestStatus } from '@gusto/embedded-api/models/components/payrollprocessingrequest'\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 { hasDirectDepositEmployees } from '../helpers'\nimport { GrossUpModal } from '../GrossUpModal'\nimport { PayrollConfigurationPresentation } from './PayrollConfigurationPresentation'\nimport { usePayrollConfigurationData } from './usePayrollConfigurationData'\nimport { getGrossUpTargetCompensationName, isGrossUpEligible } from './grossUpHelpers'\nimport type { BaseComponentInterface } from '@/components/Base/Base'\nimport { BaseComponent } from '@/components/Base/Base'\nimport { componentEvents } from '@/shared/constants'\nimport { useComponentDictionary, useI18n } from '@/i18n'\nimport { useBase } from '@/components/Base'\nimport { useDateFormatter } from '@/hooks/useDateFormatter'\nimport { SDKInternalError } from '@/types/sdkError'\nimport { API_QUERY_NAMESPACE } from '@/contexts/ApiProvider/apiVersion'\n\nconst isCalculatingStatus = (processingRequest?: PayrollProcessingRequest | null) =>\n processingRequest?.status === PayrollProcessingRequestStatus.Calculating\n\nconst isCalculatedStatus = (\n processingRequest?: PayrollProcessingRequest | null,\n calculatedAt?: Date | null,\n) =>\n calculatedAt != null &&\n (processingRequest?.status === PayrollProcessingRequestStatus.CalculateSuccess ||\n processingRequest == null)\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 * 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/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 [isPolling, setIsPolling] = useState(false)\n const [isCalculatingPayroll, setIsCalculatingPayroll] = useState(false)\n const previousCalculatedAtRef = useRef<number | null>(null)\n const gustoClient = useGustoEmbeddedContext()\n const queryClient = useQueryClient()\n\n const { data: payrollData } = usePayrollsGetSuspense(\n {\n companyId,\n payrollId,\n include: ['taxes', 'benefits', 'deductions', 'payroll_status_meta'],\n },\n { refetchInterval: isPolling ? 5_000 : false },\n )\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 const {\n employeeDetails,\n employeeCompensations,\n paySchedule,\n payPeriod,\n payrollCategory,\n pagination,\n isLoading,\n refetch,\n } = usePayrollConfigurationData({\n companyId,\n payrollId,\n isCalculating: isPolling || isCalculatingPayroll,\n excludedEmployeeUuids,\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 { 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 onCalculatePayroll = async () => {\n setPayrollBlockers([])\n previousCalculatedAtRef.current = payrollData.payrollShow?.calculatedAt?.getTime() ?? null\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 // `payrollsCalculate` is a raw func, so it skips the global onSuccess\n // invalidation that mutation hooks get; invalidate here so cached payroll\n // reads (e.g. PayrollOverview's separate key) refetch fresh. SDK-1018.\n void queryClient.invalidateQueries({ queryKey: [API_QUERY_NAMESPACE] })\n setIsPolling(true)\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 useEffect(() => {\n if (isCalculatingStatus(payrollData.payrollShow?.processingRequest) && !isPolling) {\n previousCalculatedAtRef.current = payrollData.payrollShow?.calculatedAt?.getTime() ?? null\n setIsPolling(true)\n }\n const currentCalculatedAt = payrollData.payrollShow?.calculatedAt\n const isNewCalculation = currentCalculatedAt?.getTime() !== previousCalculatedAtRef.current\n if (\n isPolling &&\n isNewCalculation &&\n isCalculatedStatus(payrollData.payrollShow?.processingRequest, currentCalculatedAt)\n ) {\n onEvent(componentEvents.RUN_PAYROLL_CALCULATED, {\n payrollId,\n alert: {\n type: 'success',\n title: t('alerts.progressSaved'),\n alertKey: 'progressSaved',\n },\n payPeriod: payrollData.payrollShow?.payPeriod,\n })\n setPayrollBlockers([])\n setIsPolling(false)\n }\n if (\n isPolling &&\n payrollData.payrollShow?.processingRequest?.status ===\n PayrollProcessingRequestStatus.ProcessingFailed\n ) {\n onEvent(componentEvents.RUN_PAYROLL_PROCESSING_FAILED)\n setIsPolling(false)\n }\n }, [\n payrollData.payrollShow?.processingRequest?.status,\n payrollData.payrollShow?.calculatedAt,\n isPolling,\n onEvent,\n t,\n payrollId,\n ])\n\n useEffect(() => {\n if (!isPolling) return\n\n const POLLING_TIMEOUT_MS = 3 * 60 * 1000\n const timeoutId = setTimeout(() => {\n onEvent(componentEvents.RUN_PAYROLL_PROCESSING_FAILED)\n setIsPolling(false)\n }, POLLING_TIMEOUT_MS)\n\n return () => {\n clearTimeout(timeoutId)\n }\n }, [isPolling, onEvent])\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 const allCompensations = payrollShow?.employeeCompensations\n\n if (\n payrollShow &&\n allCompensations &&\n allCompensations.length > 0 &&\n hasDirectDepositEmployees(allCompensations)\n ) {\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 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={isPolling || isLoading || isUpdatingPayroll || isCalculatingPayroll}\n isCalculating={isCalculatingPayroll || isPolling}\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":["isCalculatingStatus","processingRequest","PayrollProcessingRequestStatus","isCalculatedStatus","calculatedAt","PayrollConfiguration","props","jsx","BaseComponent","Root","onEvent","companyId","payrollId","dictionary","alerts","withReimbursements","useComponentDictionary","useI18n","t","useTranslation","baseSubmitHandler","useBase","dateFormatter","useDateFormatter","isPolling","setIsPolling","useState","isCalculatingPayroll","setIsCalculatingPayroll","previousCalculatedAtRef","useRef","gustoClient","useGustoEmbeddedContext","queryClient","useQueryClient","payrollData","usePayrollsGetSuspense","excludedEmployeeUuids","useMemo","comp","employeeDetails","employeeCompensations","paySchedule","payPeriod","payrollCategory","pagination","isLoading","refetch","usePayrollConfigurationData","updatePayroll","isUpdatingPayroll","usePayrollsUpdateMutation","calculateGrossUpMutation","usePayrollsCalculateGrossUpMutation","grossUpEmployeeUuid","setGrossUpEmployeeUuid","isGrossUpModalOpen","setIsGrossUpModalOpen","grossUpEnabled","isGrossUpEligible","grossUpTargetCompensation","getGrossUpTargetCompensationName","onGrossUpSelect","employeeUuid","componentEvents","onCalculateGrossUp","netPay","grossUp","onGrossUpApply","grossAmount","SDKInternalError","employeeComp","ec","existingFixed","hasTargetCompensation","fc","updatedFixedCompensations","primaryJobUuid","updatedHourlyCompensations","hc","updatedPaidTimeOff","pto","transformedCompensation","transformEmployeeCompensation","result","handleGrossUpApply","blockersData","usePayrollsGetBlockersSuspense","blockersFromApi","blocker","payrollBlockers","setPayrollBlockers","onCalculatePayroll","payrollSubmitHandler","calcResult","payrollsCalculate","API_QUERY_NAMESPACE","onEdit","employee","compensation","paymentMethod","onToggleExclude","employeeCompensation","onViewBlockers","useEffect","currentCalculatedAt","isNewCalculation","POLLING_TIMEOUT_MS","timeoutId","payrollAlert","statusMeta","payrollShow","allCompensations","hasDirectDepositEmployees","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 { useQueryClient } from '@tanstack/react-query'\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 { PayrollProcessingRequest } from '@gusto/embedded-api/models/components/payrollprocessingrequest'\nimport { PayrollProcessingRequestStatus } from '@gusto/embedded-api/models/components/payrollprocessingrequest'\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 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'\nimport { API_QUERY_NAMESPACE } from '@/contexts/ApiProvider/apiVersion'\n\nconst isCalculatingStatus = (processingRequest?: PayrollProcessingRequest | null) =>\n processingRequest?.status === PayrollProcessingRequestStatus.Calculating\n\nconst isCalculatedStatus = (\n processingRequest?: PayrollProcessingRequest | null,\n calculatedAt?: Date | null,\n) =>\n calculatedAt != null &&\n (processingRequest?.status === PayrollProcessingRequestStatus.CalculateSuccess ||\n processingRequest == null)\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 [isPolling, setIsPolling] = useState(false)\n const [isCalculatingPayroll, setIsCalculatingPayroll] = useState(false)\n const previousCalculatedAtRef = useRef<number | null>(null)\n const gustoClient = useGustoEmbeddedContext()\n const queryClient = useQueryClient()\n\n const { data: payrollData } = usePayrollsGetSuspense(\n {\n companyId,\n payrollId,\n include: ['taxes', 'benefits', 'deductions', 'payroll_status_meta'],\n },\n { refetchInterval: isPolling ? 5_000 : false },\n )\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 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 isCalculating: isPolling || isCalculatingPayroll,\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 { 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 onCalculatePayroll = async () => {\n setPayrollBlockers([])\n previousCalculatedAtRef.current = payrollData.payrollShow?.calculatedAt?.getTime() ?? null\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 // `payrollsCalculate` is a raw func, so it skips the global onSuccess\n // invalidation that mutation hooks get; invalidate here so cached payroll\n // reads (e.g. PayrollOverview's separate key) refetch fresh. SDK-1018.\n void queryClient.invalidateQueries({ queryKey: [API_QUERY_NAMESPACE] })\n setIsPolling(true)\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 useEffect(() => {\n if (isCalculatingStatus(payrollData.payrollShow?.processingRequest) && !isPolling) {\n previousCalculatedAtRef.current = payrollData.payrollShow?.calculatedAt?.getTime() ?? null\n setIsPolling(true)\n }\n const currentCalculatedAt = payrollData.payrollShow?.calculatedAt\n const isNewCalculation = currentCalculatedAt?.getTime() !== previousCalculatedAtRef.current\n if (\n isPolling &&\n isNewCalculation &&\n isCalculatedStatus(payrollData.payrollShow?.processingRequest, currentCalculatedAt)\n ) {\n onEvent(componentEvents.RUN_PAYROLL_CALCULATED, {\n payrollId,\n alert: {\n type: 'success',\n title: t('alerts.progressSaved'),\n alertKey: 'progressSaved',\n },\n payPeriod: payrollData.payrollShow?.payPeriod,\n })\n setPayrollBlockers([])\n setIsPolling(false)\n }\n if (\n isPolling &&\n payrollData.payrollShow?.processingRequest?.status ===\n PayrollProcessingRequestStatus.ProcessingFailed\n ) {\n onEvent(componentEvents.RUN_PAYROLL_PROCESSING_FAILED)\n setIsPolling(false)\n }\n }, [\n payrollData.payrollShow?.processingRequest?.status,\n payrollData.payrollShow?.calculatedAt,\n isPolling,\n onEvent,\n t,\n payrollId,\n ])\n\n useEffect(() => {\n if (!isPolling) return\n\n const POLLING_TIMEOUT_MS = 3 * 60 * 1000\n const timeoutId = setTimeout(() => {\n onEvent(componentEvents.RUN_PAYROLL_PROCESSING_FAILED)\n setIsPolling(false)\n }, POLLING_TIMEOUT_MS)\n\n return () => {\n clearTimeout(timeoutId)\n }\n }, [isPolling, onEvent])\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={isPolling || isLoading || isUpdatingPayroll || isCalculatingPayroll}\n isCalculating={isCalculatingPayroll || isPolling}\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":["isCalculatingStatus","processingRequest","PayrollProcessingRequestStatus","isCalculatedStatus","calculatedAt","PayrollConfiguration","props","jsx","BaseComponent","Root","onEvent","companyId","payrollId","dictionary","alerts","withReimbursements","useComponentDictionary","useI18n","t","useTranslation","baseSubmitHandler","useBase","dateFormatter","useDateFormatter","isPolling","setIsPolling","useState","isCalculatingPayroll","setIsCalculatingPayroll","previousCalculatedAtRef","useRef","gustoClient","useGustoEmbeddedContext","queryClient","useQueryClient","payrollData","usePayrollsGetSuspense","excludedEmployeeUuids","useMemo","comp","employeeDetails","employeeCompensations","paySchedule","payPeriod","payrollCategory","pagination","isLoading","isAlreadyProcessed","refetch","usePayrollConfigurationData","alreadyProcessedAlert","hasFiredAlreadyProcessedRef","useEffect","componentEvents","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","blockersData","usePayrollsGetBlockersSuspense","blockersFromApi","blocker","payrollBlockers","setPayrollBlockers","onCalculatePayroll","payrollSubmitHandler","calcResult","payrollsCalculate","API_QUERY_NAMESPACE","onEdit","employee","compensation","paymentMethod","onToggleExclude","employeeCompensation","onViewBlockers","currentCalculatedAt","isNewCalculation","POLLING_TIMEOUT_MS","timeoutId","payrollAlert","statusMeta","payrollShow","PayrollOverview","type","data","jsxs","Fragment","PayrollConfigurationPresentation","GrossUpModal"],"mappings":"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"}