@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.
- package/CHANGELOG.md +36 -0
- package/dist/components/Common/FieldLayout/FieldLayout.js +6 -6
- package/dist/components/Common/Fieldset/Fieldset.js +6 -6
- package/dist/components/Common/HorizontalFieldLayout/HorizontalFieldLayout.js +6 -6
- package/dist/components/Common/UI/Breadcrumbs/Breadcrumbs.js +1 -1
- package/dist/components/Common/UI/FileInput/FileInput.js +1 -1
- package/dist/components/Common/UI/MultiSelectComboBox/MultiSelectComboBox.js +58 -49
- package/dist/components/Common/UI/MultiSelectComboBox/MultiSelectComboBox.js.map +1 -1
- package/dist/components/Common/UI/MultiSelectComboBox/MultiSelectComboBox.module.scss.js +14 -10
- package/dist/components/Common/UI/MultiSelectComboBox/MultiSelectComboBox.module.scss.js.map +1 -1
- package/dist/components/Common/UI/MultiSelectComboBox/MultiSelectComboBoxTypes.d.ts +4 -0
- package/dist/components/Common/UI/ProgressBar/ProgressBar.js +4 -4
- package/dist/components/Company/AssignSignatory/CreateSignatory/useCreateSignatory.js +6 -3
- package/dist/components/Company/AssignSignatory/CreateSignatory/useCreateSignatory.js.map +1 -1
- package/dist/components/Company/AssignSignatory/InviteSignatory/useInviteSignatory.js +6 -3
- package/dist/components/Company/AssignSignatory/InviteSignatory/useInviteSignatory.js.map +1 -1
- package/dist/components/Company/AssignSignatory/useAssignSignatory.js +8 -5
- package/dist/components/Company/AssignSignatory/useAssignSignatory.js.map +1 -1
- package/dist/components/Company/BankAccount/BankAccountForm/context.js +6 -3
- package/dist/components/Company/BankAccount/BankAccountForm/context.js.map +1 -1
- package/dist/components/Company/DocumentSigner/DocumentList/DocumentList.d.ts +4 -0
- package/dist/components/Company/DocumentSigner/DocumentList/DocumentList.js.map +1 -1
- package/dist/components/Company/DocumentSigner/DocumentList/List.js +11 -8
- package/dist/components/Company/DocumentSigner/DocumentList/List.js.map +1 -1
- package/dist/components/Company/DocumentSigner/DocumentList/useDocumentList.js +6 -3
- package/dist/components/Company/DocumentSigner/DocumentList/useDocumentList.js.map +1 -1
- package/dist/components/Company/FederalTaxes/useFederalTaxes.js +11 -8
- package/dist/components/Company/FederalTaxes/useFederalTaxes.js.map +1 -1
- package/dist/components/Company/Industry/Context.js +9 -6
- package/dist/components/Company/Industry/Context.js.map +1 -1
- package/dist/components/Company/Locations/LocationForm/useLocationForm.js +6 -3
- package/dist/components/Company/Locations/LocationForm/useLocationForm.js.map +1 -1
- package/dist/components/Company/Locations/LocationsList/useLocationsList.js +6 -3
- package/dist/components/Company/Locations/LocationsList/useLocationsList.js.map +1 -1
- package/dist/components/Company/OnboardingOverview/context.js +6 -3
- package/dist/components/Company/OnboardingOverview/context.js.map +1 -1
- package/dist/components/Company/StateTaxes/StateTaxesForm/context.js +6 -3
- package/dist/components/Company/StateTaxes/StateTaxesForm/context.js.map +1 -1
- package/dist/components/Company/StateTaxes/StateTaxesList/context.js +6 -3
- package/dist/components/Company/StateTaxes/StateTaxesList/context.js.map +1 -1
- package/dist/components/Company/StateTaxes/TaxRateManagement/context.js +6 -3
- package/dist/components/Company/StateTaxes/TaxRateManagement/context.js.map +1 -1
- package/dist/components/Employee/Compensation/shared/useJobForm/useJobForm.js +116 -116
- package/dist/components/Employee/Compensation/shared/useJobForm/useJobForm.js.map +1 -1
- package/dist/components/Employee/Documents/onboarding/DocumentSigner/DocumentList/DocumentList.d.ts +4 -0
- package/dist/components/Employee/Documents/onboarding/DocumentSigner/DocumentList/DocumentList.js +19 -19
- package/dist/components/Employee/Documents/onboarding/DocumentSigner/DocumentList/DocumentList.js.map +1 -1
- package/dist/components/Employee/Documents/onboarding/DocumentSigner/DocumentList/List.js +16 -13
- package/dist/components/Employee/Documents/onboarding/DocumentSigner/DocumentList/List.js.map +1 -1
- package/dist/components/Employee/Documents/onboarding/DocumentSigner/DocumentList/useDocumentList.js +6 -3
- package/dist/components/Employee/Documents/onboarding/DocumentSigner/DocumentList/useDocumentList.js.map +1 -1
- package/dist/components/Employee/Documents/onboarding/DocumentSigner/DocumentSigner.d.ts +4 -0
- package/dist/components/Employee/Documents/onboarding/DocumentSigner/DocumentSigner.js.map +1 -1
- package/dist/components/Employee/FederalTaxes/shared/FederalTaxesView.js +1 -1
- package/dist/components/Employee/PaymentMethod/management/PaymentMethodBankForm.js +4 -4
- package/dist/components/Employee/PaymentMethod/onboarding/BankForm.js +4 -4
- package/dist/components/Flow/Flow.js +1 -1
- package/dist/components/Payroll/GrossUpModal/GrossUpModal.js +3 -2
- package/dist/components/Payroll/GrossUpModal/GrossUpModal.js.map +1 -1
- package/dist/components/Payroll/OffCycleCreation/OffCycleCreation.js +75 -71
- package/dist/components/Payroll/OffCycleCreation/OffCycleCreation.js.map +1 -1
- package/dist/components/Payroll/PayrollConfiguration/PayrollConfiguration.d.ts +7 -0
- package/dist/components/Payroll/PayrollConfiguration/PayrollConfiguration.js +202 -165
- package/dist/components/Payroll/PayrollConfiguration/PayrollConfiguration.js.map +1 -1
- package/dist/components/Payroll/PayrollConfiguration/usePayrollConfigurationData.d.ts +1 -0
- package/dist/components/Payroll/PayrollConfiguration/usePayrollConfigurationData.js +88 -82
- package/dist/components/Payroll/PayrollConfiguration/usePayrollConfigurationData.js.map +1 -1
- package/dist/components/Payroll/PayrollExecutionFlow/PayrollExecutionFlow.d.ts +1 -0
- package/dist/components/Payroll/PayrollExecutionFlow/PayrollExecutionFlow.js.map +1 -1
- package/dist/components/Payroll/PayrollExecutionFlow/payrollExecutionMachine.js +73 -48
- package/dist/components/Payroll/PayrollExecutionFlow/payrollExecutionMachine.js.map +1 -1
- package/dist/components/Payroll/PayrollFlow/PayrollFlow.d.ts +1 -1
- package/dist/components/Payroll/PayrollFlow/PayrollFlow.js +22 -20
- package/dist/components/Payroll/PayrollFlow/PayrollFlow.js.map +1 -1
- package/dist/components/Payroll/PayrollFlow/PayrollFlowComponents.d.ts +3 -0
- package/dist/components/Payroll/PayrollFlow/PayrollFlowComponents.js +22 -20
- package/dist/components/Payroll/PayrollFlow/PayrollFlowComponents.js.map +1 -1
- package/dist/components/Payroll/PayrollLanding/PayrollLanding.d.ts +2 -0
- package/dist/components/Payroll/PayrollLanding/PayrollLanding.js +34 -26
- package/dist/components/Payroll/PayrollLanding/PayrollLanding.js.map +1 -1
- package/dist/components/Payroll/PayrollLanding/PayrollLandingFlowComponents.d.ts +4 -0
- package/dist/components/Payroll/PayrollLanding/PayrollLandingFlowComponents.js +51 -43
- package/dist/components/Payroll/PayrollLanding/PayrollLandingFlowComponents.js.map +1 -1
- package/dist/components/Payroll/PayrollList/PayrollList.d.ts +2 -0
- package/dist/components/Payroll/PayrollList/PayrollList.js +48 -47
- package/dist/components/Payroll/PayrollList/PayrollList.js.map +1 -1
- package/dist/components/Payroll/PayrollList/PayrollListPresentation.d.ts +2 -1
- package/dist/components/Payroll/PayrollList/PayrollListPresentation.js +44 -43
- package/dist/components/Payroll/PayrollList/PayrollListPresentation.js.map +1 -1
- package/dist/components/Payroll/PayrollOverview/PayrollOverview.d.ts +15 -1
- package/dist/components/Payroll/PayrollOverview/PayrollOverview.js +188 -172
- package/dist/components/Payroll/PayrollOverview/PayrollOverview.js.map +1 -1
- package/dist/components/Payroll/PayrollOverview/PayrollOverviewPresentation.d.ts +3 -1
- package/dist/components/Payroll/PayrollOverview/PayrollOverviewPresentation.js +110 -118
- package/dist/components/Payroll/PayrollOverview/PayrollOverviewPresentation.js.map +1 -1
- package/dist/components/Payroll/PayrollReceipts/PayrollReceipts.js +22 -16
- package/dist/components/Payroll/PayrollReceipts/PayrollReceipts.js.map +1 -1
- package/dist/components/Payroll/PayrollReceipts/PayrollReceiptsPresentation.js +58 -49
- package/dist/components/Payroll/PayrollReceipts/PayrollReceiptsPresentation.js.map +1 -1
- package/dist/components/Payroll/PrintChecks/PrintChecks.d.ts +21 -0
- package/dist/components/Payroll/PrintChecks/PrintChecks.js +68 -0
- package/dist/components/Payroll/PrintChecks/PrintChecks.js.map +1 -0
- package/dist/components/Payroll/PrintChecks/PrintChecksBanner/PrintChecksBanner.d.ts +9 -0
- package/dist/components/Payroll/PrintChecks/PrintChecksBanner/PrintChecksBanner.js +34 -0
- package/dist/components/Payroll/PrintChecks/PrintChecksBanner/PrintChecksBanner.js.map +1 -0
- package/dist/components/Payroll/PrintChecks/PrintChecksBanner/index.d.ts +1 -0
- package/dist/components/Payroll/PrintChecks/PrintChecksComponents.d.ts +48 -0
- package/dist/components/Payroll/PrintChecks/PrintChecksComponents.js +26 -0
- package/dist/components/Payroll/PrintChecks/PrintChecksComponents.js.map +1 -0
- package/dist/components/Payroll/PrintChecks/PrintChecksFailure/PrintChecksFailure.d.ts +14 -0
- package/dist/components/Payroll/PrintChecks/PrintChecksFailure/PrintChecksFailure.js +47 -0
- package/dist/components/Payroll/PrintChecks/PrintChecksFailure/PrintChecksFailure.js.map +1 -0
- package/dist/components/Payroll/PrintChecks/PrintChecksFailure/index.d.ts +1 -0
- package/dist/components/Payroll/PrintChecks/PrintChecksForm/PrintChecksForm.d.ts +16 -0
- package/dist/components/Payroll/PrintChecks/PrintChecksForm/PrintChecksForm.js +144 -0
- package/dist/components/Payroll/PrintChecks/PrintChecksForm/PrintChecksForm.js.map +1 -0
- package/dist/components/Payroll/PrintChecks/PrintChecksForm/index.d.ts +1 -0
- package/dist/components/Payroll/PrintChecks/PrintChecksSummary/PrintChecksSummary.d.ts +14 -0
- package/dist/components/Payroll/PrintChecks/PrintChecksSummary/PrintChecksSummary.js +39 -0
- package/dist/components/Payroll/PrintChecks/PrintChecksSummary/PrintChecksSummary.js.map +1 -0
- package/dist/components/Payroll/PrintChecks/PrintChecksSummary/index.d.ts +1 -0
- package/dist/components/Payroll/PrintChecks/index.d.ts +2 -0
- package/dist/components/Payroll/PrintChecks/printChecksStateMachine.d.ts +33 -0
- package/dist/components/Payroll/PrintChecks/printChecksStateMachine.js +93 -0
- package/dist/components/Payroll/PrintChecks/printChecksStateMachine.js.map +1 -0
- package/dist/components/Payroll/PrintChecks/types.d.ts +14 -0
- package/dist/components/Payroll/helpers.d.ts +0 -15
- package/dist/components/Payroll/helpers.js +13 -18
- package/dist/components/Payroll/helpers.js.map +1 -1
- package/dist/components/Payroll/index.d.ts +2 -0
- package/dist/components/Payroll/index.js +26 -24
- package/dist/components/Payroll/index.js.map +1 -1
- package/dist/components/Payroll/usePreparedPayrollData.js +15 -12
- package/dist/components/Payroll/usePreparedPayrollData.js.map +1 -1
- package/dist/i18n/I18n.js +4 -0
- package/dist/i18n/I18n.js.map +1 -1
- package/dist/i18n/en/Company.DocumentList.json.js +34 -32
- package/dist/i18n/en/Company.DocumentList.json.js.map +1 -1
- package/dist/i18n/en/Employee.DocumentSigner.json.js +24 -22
- package/dist/i18n/en/Employee.DocumentSigner.json.js.map +1 -1
- package/dist/i18n/en/Payroll.PayrollConfiguration.json.js +9 -9
- package/dist/i18n/en/Payroll.PayrollOverview.json.js +36 -36
- package/dist/i18n/en/Payroll.PayrollReceipts.json.js +2 -2
- package/dist/i18n/en/Payroll.PrintChecksBanner.json.js +14 -0
- package/dist/i18n/en/Payroll.PrintChecksBanner.json.js.map +1 -0
- package/dist/i18n/en/Payroll.PrintChecksFailure.json.js +12 -0
- package/dist/i18n/en/Payroll.PrintChecksFailure.json.js.map +1 -0
- package/dist/i18n/en/Payroll.PrintChecksForm.json.js +28 -0
- package/dist/i18n/en/Payroll.PrintChecksForm.json.js.map +1 -0
- package/dist/i18n/en/Payroll.PrintChecksSummary.json.js +14 -0
- package/dist/i18n/en/Payroll.PrintChecksSummary.json.js.map +1 -0
- package/dist/i18n/types.d.ts +376 -8
- package/dist/models/external.d.ts +3 -0
- package/dist/partner-hook-utils/form/buildFormSchema.js +60 -54
- package/dist/partner-hook-utils/form/buildFormSchema.js.map +1 -1
- package/dist/shared/constants.d.ts +28 -0
- package/dist/shared/constants.js +61 -50
- package/dist/shared/constants.js.map +1 -1
- package/dist/style.css +1 -1
- package/docs/guides/endpoint-inventory.json +26 -0
- package/package.json +6 -6
|
@@ -1,169 +1,195 @@
|
|
|
1
|
-
import { jsx as
|
|
2
|
-
import { useState as
|
|
3
|
-
import { useQueryClient as
|
|
4
|
-
import { usePayrollsGetSuspense as
|
|
5
|
-
import { payrollsCalculate as
|
|
6
|
-
import { useGustoEmbeddedContext as
|
|
7
|
-
import { PayrollProcessingRequestStatus as
|
|
8
|
-
import { useTranslation as
|
|
9
|
-
import { usePayrollsUpdateMutation as
|
|
10
|
-
import { usePayrollsCalculateGrossUpMutation as
|
|
11
|
-
import { usePayrollsGetBlockersSuspense as
|
|
12
|
-
import { payrollSubmitHandler as
|
|
13
|
-
import {
|
|
14
|
-
import { PayrollConfigurationPresentation as
|
|
15
|
-
import { usePayrollConfigurationData as
|
|
16
|
-
import { isGrossUpEligible as
|
|
17
|
-
import { BaseComponent as
|
|
18
|
-
import { componentEvents as
|
|
19
|
-
import { useComponentDictionary as
|
|
20
|
-
import { useBase as
|
|
21
|
-
import { useDateFormatter as
|
|
22
|
-
import { SDKInternalError as
|
|
23
|
-
import { API_QUERY_NAMESPACE as
|
|
24
|
-
import { GrossUpModal as
|
|
25
|
-
const
|
|
26
|
-
function
|
|
27
|
-
return /* @__PURE__ */
|
|
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
|
|
29
|
+
const Fe = ({
|
|
30
30
|
onEvent: t,
|
|
31
|
-
companyId:
|
|
32
|
-
payrollId:
|
|
33
|
-
dictionary:
|
|
34
|
-
alerts:
|
|
35
|
-
withReimbursements:
|
|
31
|
+
companyId: u,
|
|
32
|
+
payrollId: i,
|
|
33
|
+
dictionary: j,
|
|
34
|
+
alerts: v,
|
|
35
|
+
withReimbursements: O = !0
|
|
36
36
|
}) => {
|
|
37
|
-
|
|
38
|
-
const { t:
|
|
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:
|
|
41
|
-
payrollId:
|
|
40
|
+
companyId: u,
|
|
41
|
+
payrollId: i,
|
|
42
42
|
include: ["taxes", "benefits", "deductions", "payroll_status_meta"]
|
|
43
43
|
},
|
|
44
|
-
{ refetchInterval:
|
|
45
|
-
),
|
|
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:
|
|
50
|
-
employeeCompensations:
|
|
49
|
+
employeeDetails: V,
|
|
50
|
+
employeeCompensations: x,
|
|
51
51
|
paySchedule: I,
|
|
52
|
-
payPeriod:
|
|
53
|
-
payrollCategory:
|
|
54
|
-
pagination:
|
|
55
|
-
isLoading:
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
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
|
|
94
|
+
o = (await Z({
|
|
69
95
|
request: {
|
|
70
|
-
payrollUuid:
|
|
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(
|
|
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
|
-
},
|
|
83
|
-
if (!d || !
|
|
84
|
-
throw new
|
|
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 =
|
|
113
|
+
const o = x.find((a) => a.employeeUuid === d);
|
|
88
114
|
if (!o)
|
|
89
|
-
throw new
|
|
90
|
-
const
|
|
91
|
-
(a) => a.name?.toLowerCase() ===
|
|
92
|
-
),
|
|
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() ===
|
|
121
|
+
amount: a.name?.toLowerCase() === P.toLowerCase() ? e : "0"
|
|
96
122
|
}));
|
|
97
|
-
if (!
|
|
98
|
-
const a = o.hourlyCompensations?.[0]?.jobUuid ??
|
|
99
|
-
|
|
100
|
-
name:
|
|
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
|
|
131
|
+
const me = (o.hourlyCompensations ?? []).map((a) => ({
|
|
106
132
|
name: a.name,
|
|
107
133
|
jobUuid: a.jobUuid,
|
|
108
134
|
hours: "0"
|
|
109
|
-
})),
|
|
135
|
+
})), de = (o.paidTimeOff ?? []).map((a) => ({
|
|
110
136
|
name: a.name,
|
|
111
137
|
hours: "0"
|
|
112
|
-
})),
|
|
138
|
+
})), ye = Y({
|
|
113
139
|
...o,
|
|
114
|
-
fixedCompensations:
|
|
115
|
-
hourlyCompensations:
|
|
116
|
-
paidTimeOff:
|
|
140
|
+
fixedCompensations: M,
|
|
141
|
+
hourlyCompensations: me,
|
|
142
|
+
paidTimeOff: de
|
|
117
143
|
});
|
|
118
144
|
await C({}, async () => {
|
|
119
|
-
const a = await
|
|
145
|
+
const a = await b({
|
|
120
146
|
request: {
|
|
121
|
-
companyId:
|
|
122
|
-
payrollId:
|
|
147
|
+
companyId: u,
|
|
148
|
+
payrollId: i,
|
|
123
149
|
payrollUpdate: {
|
|
124
|
-
employeeCompensations: [{ ...
|
|
150
|
+
employeeCompensations: [{ ...ye, excluded: !1 }]
|
|
125
151
|
}
|
|
126
152
|
}
|
|
127
153
|
});
|
|
128
|
-
t(
|
|
154
|
+
t(l.RUN_PAYROLL_EMPLOYEE_SAVED, {
|
|
129
155
|
payrollPrepared: a.payrollPrepared
|
|
130
|
-
}), await
|
|
131
|
-
}),
|
|
132
|
-
},
|
|
156
|
+
}), await S();
|
|
157
|
+
}), k(null), w(!1);
|
|
158
|
+
}, ae = async (e) => {
|
|
133
159
|
try {
|
|
134
|
-
await
|
|
160
|
+
await te(e);
|
|
135
161
|
} catch {
|
|
136
162
|
}
|
|
137
|
-
}, { data:
|
|
138
|
-
companyUuid:
|
|
139
|
-
}),
|
|
163
|
+
}, { data: se } = _e({
|
|
164
|
+
companyUuid: u
|
|
165
|
+
}), G = (se.payrollBlockers ?? []).map((e) => ({
|
|
140
166
|
key: e.key,
|
|
141
167
|
message: e.message
|
|
142
|
-
})), [
|
|
143
|
-
|
|
144
|
-
const e = await
|
|
145
|
-
|
|
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
|
|
148
|
-
companyId:
|
|
149
|
-
payrollId:
|
|
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
|
-
|
|
179
|
+
K.invalidateQueries({ queryKey: [Ye] }), m(!0);
|
|
154
180
|
} finally {
|
|
155
|
-
|
|
181
|
+
T(!1);
|
|
156
182
|
}
|
|
157
183
|
});
|
|
158
|
-
!e.success && e.blockers.length > 0 &&
|
|
184
|
+
!e.success && e.blockers.length > 0 && R(e.blockers);
|
|
159
185
|
});
|
|
160
|
-
},
|
|
161
|
-
t(
|
|
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
|
-
},
|
|
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
|
-
},
|
|
180
|
-
t(
|
|
205
|
+
}, ne = async (e) => {
|
|
206
|
+
t(l.RUN_PAYROLL_EMPLOYEE_SKIP, {
|
|
181
207
|
employeeId: e.employeeUuid
|
|
182
208
|
}), await C({}, async () => {
|
|
183
|
-
const o =
|
|
209
|
+
const o = Y(e), r = await b({
|
|
184
210
|
request: {
|
|
185
|
-
companyId:
|
|
186
|
-
payrollId:
|
|
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(
|
|
195
|
-
payrollPrepared:
|
|
196
|
-
}), await
|
|
220
|
+
t(l.RUN_PAYROLL_EMPLOYEE_SAVED, {
|
|
221
|
+
payrollPrepared: r.payrollPrepared
|
|
222
|
+
}), await S();
|
|
197
223
|
});
|
|
198
|
-
},
|
|
199
|
-
t(
|
|
224
|
+
}, ue = () => {
|
|
225
|
+
t(l.RUN_PAYROLL_BLOCKERS_VIEW_ALL);
|
|
200
226
|
};
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
const e = s.payrollShow?.calculatedAt, o = e?.getTime() !==
|
|
204
|
-
|
|
205
|
-
payrollId:
|
|
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:
|
|
234
|
+
title: c("alerts.progressSaved"),
|
|
209
235
|
alertKey: "progressSaved"
|
|
210
236
|
},
|
|
211
237
|
payPeriod: s.payrollShow?.payPeriod
|
|
212
|
-
}),
|
|
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
|
-
|
|
242
|
+
n,
|
|
217
243
|
t,
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
]),
|
|
221
|
-
if (!
|
|
244
|
+
c,
|
|
245
|
+
i
|
|
246
|
+
]), D(() => {
|
|
247
|
+
if (!n) return;
|
|
222
248
|
const e = 180 * 1e3, o = setTimeout(() => {
|
|
223
|
-
t(
|
|
249
|
+
t(l.RUN_PAYROLL_PROCESSING_FAILED), m(!1);
|
|
224
250
|
}, e);
|
|
225
251
|
return () => {
|
|
226
252
|
clearTimeout(o);
|
|
227
253
|
};
|
|
228
|
-
}, [
|
|
229
|
-
const
|
|
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:
|
|
234
|
-
initialCheckDate:
|
|
259
|
+
label: c("alerts.payrollLate", {
|
|
260
|
+
initialCheckDate: p.formatShortWithWeekday(e.initialCheckDate)
|
|
235
261
|
}),
|
|
236
|
-
content:
|
|
237
|
-
...
|
|
238
|
-
newCheckDate:
|
|
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:
|
|
243
|
-
if (
|
|
268
|
+
const { payrollShow: r } = s;
|
|
269
|
+
if (r?.checkDate && r.payrollDeadline)
|
|
244
270
|
return {
|
|
245
|
-
label:
|
|
246
|
-
payDate:
|
|
247
|
-
...
|
|
271
|
+
label: c("alerts.directDepositDeadline", {
|
|
272
|
+
payDate: p.formatShortWithWeekday(r.checkDate),
|
|
273
|
+
...p.formatWithTime(r.payrollDeadline)
|
|
248
274
|
}),
|
|
249
|
-
content:
|
|
275
|
+
content: c("alerts.directDepositDeadlineText"),
|
|
250
276
|
variant: "info"
|
|
251
277
|
};
|
|
252
278
|
})();
|
|
253
|
-
return /* @__PURE__ */
|
|
254
|
-
|
|
255
|
-
|
|
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:
|
|
258
|
-
isCalculateDisabled:
|
|
259
|
-
onEdit:
|
|
260
|
-
onToggleExclude:
|
|
261
|
-
onViewBlockers:
|
|
262
|
-
employeeCompensations:
|
|
263
|
-
employeeDetails:
|
|
264
|
-
payPeriod:
|
|
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:
|
|
267
|
-
alerts:
|
|
268
|
-
payrollAlert:
|
|
269
|
-
isPending:
|
|
270
|
-
isCalculating:
|
|
271
|
-
payrollBlockers:
|
|
272
|
-
pagination:
|
|
273
|
-
withReimbursements:
|
|
274
|
-
grossUpEnabled:
|
|
275
|
-
onGrossUpSelect:
|
|
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
|
-
|
|
279
|
-
|
|
315
|
+
N && /* @__PURE__ */ f(
|
|
316
|
+
Me,
|
|
280
317
|
{
|
|
281
|
-
isOpen:
|
|
282
|
-
onCalculateGrossUp:
|
|
283
|
-
onApply:
|
|
318
|
+
isOpen: $,
|
|
319
|
+
onCalculateGrossUp: oe,
|
|
320
|
+
onApply: ae,
|
|
284
321
|
onCancel: () => {
|
|
285
|
-
|
|
322
|
+
w(!1);
|
|
286
323
|
}
|
|
287
324
|
}
|
|
288
325
|
)
|
|
289
326
|
] });
|
|
290
327
|
};
|
|
291
328
|
export {
|
|
292
|
-
|
|
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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"}
|