@gusto/embedded-react-sdk 0.55.8 → 0.56.1
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 +56 -0
- package/dist/components/Common/UI/Menu/MenuTypes.js.map +1 -1
- package/dist/components/Common/UI/MultiSelectComboBox/MultiSelectComboBox.js +43 -42
- package/dist/components/Common/UI/MultiSelectComboBox/MultiSelectComboBox.js.map +1 -1
- package/dist/components/Company/AssignSignatory/CreateSignatory/useCreateSignatory.js +4 -3
- package/dist/components/Company/AssignSignatory/CreateSignatory/useCreateSignatory.js.map +1 -1
- package/dist/components/Company/AssignSignatory/InviteSignatory/useInviteSignatory.js +4 -3
- package/dist/components/Company/AssignSignatory/InviteSignatory/useInviteSignatory.js.map +1 -1
- package/dist/components/Company/AssignSignatory/useAssignSignatory.js +6 -5
- package/dist/components/Company/AssignSignatory/useAssignSignatory.js.map +1 -1
- package/dist/components/Company/BankAccount/BankAccountForm/context.js +4 -3
- package/dist/components/Company/BankAccount/BankAccountForm/context.js.map +1 -1
- package/dist/components/Company/DocumentSigner/DocumentList/useDocumentList.js +4 -3
- package/dist/components/Company/DocumentSigner/DocumentList/useDocumentList.js.map +1 -1
- package/dist/components/Company/FederalTaxes/useFederalTaxes.js +6 -5
- package/dist/components/Company/FederalTaxes/useFederalTaxes.js.map +1 -1
- package/dist/components/Company/Industry/Context.js +7 -6
- package/dist/components/Company/Industry/Context.js.map +1 -1
- package/dist/components/Company/Locations/LocationForm/useLocationForm.js +4 -3
- package/dist/components/Company/Locations/LocationForm/useLocationForm.js.map +1 -1
- package/dist/components/Company/Locations/LocationsList/useLocationsList.js +4 -3
- package/dist/components/Company/Locations/LocationsList/useLocationsList.js.map +1 -1
- package/dist/components/Company/OnboardingOverview/context.js +4 -3
- package/dist/components/Company/OnboardingOverview/context.js.map +1 -1
- package/dist/components/Company/StateTaxes/StateTaxesForm/context.js +4 -3
- package/dist/components/Company/StateTaxes/StateTaxesForm/context.js.map +1 -1
- package/dist/components/Company/StateTaxes/StateTaxesList/context.js +4 -3
- package/dist/components/Company/StateTaxes/StateTaxesList/context.js.map +1 -1
- package/dist/components/Company/StateTaxes/TaxRateManagement/context.js +4 -3
- package/dist/components/Company/StateTaxes/TaxRateManagement/context.js.map +1 -1
- package/dist/components/Employee/Documents/onboarding/DocumentSigner/DocumentList/useDocumentList.js +4 -3
- package/dist/components/Employee/Documents/onboarding/DocumentSigner/DocumentList/useDocumentList.js.map +1 -1
- package/dist/components/Employee/EmployeeList/management/ManagementEmployeeListView.js +70 -69
- package/dist/components/Employee/EmployeeList/management/ManagementEmployeeListView.js.map +1 -1
- package/dist/components/Employee/EmployeeList/onboarding/EmployeeListView.js +2 -2
- package/dist/components/Employee/EmployeeList/onboarding/EmployeeListView.js.map +1 -1
- package/dist/components/Employee/EmployeeList/shared/useEmployeeList.js +51 -42
- package/dist/components/Employee/EmployeeList/shared/useEmployeeList.js.map +1 -1
- package/dist/components/Employee/EmployeeListFlow/employeeListStateMachine.js +29 -26
- package/dist/components/Employee/EmployeeListFlow/employeeListStateMachine.js.map +1 -1
- package/dist/components/Employee/HomeAddress/management/HomeAddressView.js +2 -2
- package/dist/components/Employee/HomeAddress/management/HomeAddressView.js.map +1 -1
- package/dist/components/Employee/Terminations/TerminateEmployee/TerminateEmployeePresentation.js +11 -11
- package/dist/components/Employee/Terminations/TerminateEmployee/TerminateEmployeePresentation.js.map +1 -1
- package/dist/components/Employee/Terminations/TerminationSummary/TerminationSummaryPresentation.js +3 -3
- package/dist/components/Employee/Terminations/TerminationSummary/TerminationSummaryPresentation.js.map +1 -1
- package/dist/components/Employee/WorkAddress/management/WorkAddressView.js +76 -79
- package/dist/components/Employee/WorkAddress/management/WorkAddressView.js.map +1 -1
- package/dist/components/InformationRequests/InformationRequestList/InformationRequestList.js +2 -2
- package/dist/components/InformationRequests/InformationRequestList/InformationRequestList.js.map +1 -1
- package/dist/components/Payroll/ConfirmWireDetails/ConfirmWireDetailsBanner/ConfirmWireDetailsBanner.js +2 -2
- package/dist/components/Payroll/ConfirmWireDetails/ConfirmWireDetailsBanner/ConfirmWireDetailsBanner.js.map +1 -1
- package/dist/components/Payroll/Dismissal/DismissalPayPeriodSelection/DismissalPayPeriodSelectionPresentation.js +10 -10
- package/dist/components/Payroll/Dismissal/DismissalPayPeriodSelection/DismissalPayPeriodSelectionPresentation.js.map +1 -1
- package/dist/components/Payroll/GrossUpModal/GrossUpModal.js +49 -45
- package/dist/components/Payroll/GrossUpModal/GrossUpModal.js.map +1 -1
- package/dist/components/Payroll/OffCycle/OffCycleFlow.js.map +1 -1
- package/dist/components/Payroll/OffCycle/OffCycleFlowComponents.js +24 -18
- package/dist/components/Payroll/OffCycle/OffCycleFlowComponents.js.map +1 -1
- package/dist/components/Payroll/OffCycle/offCycleStateMachine.js +39 -21
- package/dist/components/Payroll/OffCycle/offCycleStateMachine.js.map +1 -1
- package/dist/components/Payroll/OffCycleCreation/OffCycleCreation.js +98 -88
- package/dist/components/Payroll/OffCycleCreation/OffCycleCreation.js.map +1 -1
- package/dist/components/Payroll/OffCycleCreation/OffCycleCreationPresentation.js +64 -60
- package/dist/components/Payroll/OffCycleCreation/OffCycleCreationPresentation.js.map +1 -1
- package/dist/components/Payroll/PayrollBlocker/components/PayrollBlockerAlerts.js +12 -12
- package/dist/components/Payroll/PayrollBlocker/components/PayrollBlockerAlerts.js.map +1 -1
- package/dist/components/Payroll/PayrollBlocker/components/PayrollBlockerList.js +40 -40
- package/dist/components/Payroll/PayrollBlocker/components/PayrollBlockerList.js.map +1 -1
- package/dist/components/Payroll/PayrollConfiguration/PayrollConfiguration.js +205 -185
- package/dist/components/Payroll/PayrollConfiguration/PayrollConfiguration.js.map +1 -1
- package/dist/components/Payroll/PayrollConfiguration/useCalculationPoll.js +48 -34
- package/dist/components/Payroll/PayrollConfiguration/useCalculationPoll.js.map +1 -1
- package/dist/components/Payroll/PayrollEditEmployee/PayrollEditEmployeePresentation.js +13 -16
- package/dist/components/Payroll/PayrollEditEmployee/PayrollEditEmployeePresentation.js.map +1 -1
- package/dist/components/Payroll/PayrollEditEmployee/TimeOffField.js +0 -1
- package/dist/components/Payroll/PayrollEditEmployee/TimeOffField.js.map +1 -1
- package/dist/components/Payroll/PayrollEditEmployee/shared/usePayrollEditEmployeeForm/payrollEditEmployeeHelpers.js +138 -110
- package/dist/components/Payroll/PayrollEditEmployee/shared/usePayrollEditEmployeeForm/payrollEditEmployeeHelpers.js.map +1 -1
- package/dist/components/Payroll/PayrollEditEmployee/shared/usePayrollEditEmployeeForm/usePayrollEditEmployeeForm.js +149 -146
- package/dist/components/Payroll/PayrollEditEmployee/shared/usePayrollEditEmployeeForm/usePayrollEditEmployeeForm.js.map +1 -1
- package/dist/components/Payroll/PayrollExecutionFlow/PayrollExecutionFlow.js.map +1 -1
- package/dist/components/Payroll/PayrollExecutionFlow/payrollExecutionMachine.js +4 -0
- package/dist/components/Payroll/PayrollExecutionFlow/payrollExecutionMachine.js.map +1 -1
- package/dist/components/Payroll/PayrollFlow/PayrollFlow.js.map +1 -1
- package/dist/components/Payroll/PayrollFlow/TransitionFlowContextual.js +22 -35
- package/dist/components/Payroll/PayrollFlow/TransitionFlowContextual.js.map +1 -1
- package/dist/components/Payroll/PayrollOverview/PayrollOverview.js +185 -171
- package/dist/components/Payroll/PayrollOverview/PayrollOverview.js.map +1 -1
- package/dist/components/Payroll/PayrollOverview/useSubmissionPoll.js +45 -34
- package/dist/components/Payroll/PayrollOverview/useSubmissionPoll.js.map +1 -1
- package/dist/components/Payroll/PayrollReceipts/PayrollReceiptsPresentation.js +44 -44
- package/dist/components/Payroll/PayrollReceipts/PayrollReceiptsPresentation.js.map +1 -1
- package/dist/components/Payroll/PayrollReceipts/PayrollReceiptsPresentation.module.scss.js +14 -14
- package/dist/components/Payroll/PrintChecks/PrintChecksFailure/PrintChecksFailure.js +16 -16
- package/dist/components/Payroll/PrintChecks/PrintChecksFailure/PrintChecksFailure.js.map +1 -1
- package/dist/components/Payroll/PrintChecks/PrintChecksForm/useGenerationPoll.js +52 -37
- package/dist/components/Payroll/PrintChecks/PrintChecksForm/useGenerationPoll.js.map +1 -1
- package/dist/components/Payroll/Transition/TransitionFlow.js +49 -36
- package/dist/components/Payroll/Transition/TransitionFlow.js.map +1 -1
- package/dist/components/Payroll/Transition/TransitionFlowComponents.js +24 -47
- package/dist/components/Payroll/Transition/TransitionFlowComponents.js.map +1 -1
- package/dist/components/Payroll/Transition/transitionStateMachine.js +35 -40
- package/dist/components/Payroll/Transition/transitionStateMachine.js.map +1 -1
- package/dist/components/Payroll/TransitionPayroll/TransitionPayroll.js +48 -0
- package/dist/components/Payroll/TransitionPayroll/TransitionPayroll.js.map +1 -0
- package/dist/components/Payroll/TransitionPayroll/TransitionPayrollComponents.js +35 -0
- package/dist/components/Payroll/TransitionPayroll/TransitionPayrollComponents.js.map +1 -0
- package/dist/components/Payroll/TransitionPayroll/transitionPayrollStateMachine.js +23 -0
- package/dist/components/Payroll/TransitionPayroll/transitionPayrollStateMachine.js.map +1 -0
- package/dist/components/Payroll/TransitionPayroll/useResolveTransitionPayroll.js +32 -0
- package/dist/components/Payroll/TransitionPayroll/useResolveTransitionPayroll.js.map +1 -0
- package/dist/components/Payroll/index.js +7 -5
- package/dist/components/Payroll/index.js.map +1 -1
- package/dist/components/Payroll/usePreparedPayrollData.js +9 -8
- package/dist/components/Payroll/usePreparedPayrollData.js.map +1 -1
- package/dist/contexts/ApiProvider/ApiProvider.js +29 -28
- package/dist/contexts/ApiProvider/ApiProvider.js.map +1 -1
- package/dist/contexts/ApiProvider/apiVersionMismatchHook.js +15 -0
- package/dist/contexts/ApiProvider/apiVersionMismatchHook.js.map +1 -0
- package/dist/contexts/GustoProvider/GustoProviderCustomUIAdapter.js.map +1 -1
- package/dist/contexts/ThemeProvider/ThemeProvider.js +32 -26
- package/dist/contexts/ThemeProvider/ThemeProvider.js.map +1 -1
- package/dist/hooks/usePollingTask/usePollingTask.js +53 -41
- package/dist/hooks/usePollingTask/usePollingTask.js.map +1 -1
- package/dist/i18n/I18n.js +9 -4
- package/dist/i18n/I18n.js.map +1 -1
- package/dist/i18n/en/Employee.ManagementEmployeeList.json.js +28 -24
- package/dist/i18n/en/Employee.ManagementEmployeeList.json.js.map +1 -1
- package/dist/i18n/en/Payroll.GrossUpModal.json.js +12 -10
- package/dist/i18n/en/Payroll.GrossUpModal.json.js.map +1 -1
- package/dist/i18n/en/Payroll.PayrollBlocker.json.js +10 -8
- package/dist/i18n/en/Payroll.PayrollBlocker.json.js.map +1 -1
- package/dist/i18n/en/Payroll.PayrollConfiguration.json.js +8 -8
- package/dist/i18n/en/Payroll.PayrollOverview.json.js +15 -15
- package/dist/i18n/es_US/Company.StateTaxes.json.js +1 -1
- package/dist/i18n/es_US/Contractor.ContractorList.json.js +14 -12
- package/dist/i18n/es_US/Contractor.ContractorList.json.js.map +1 -1
- package/dist/i18n/es_US/Contractor.Management.Compensation.json.js +4 -4
- package/dist/i18n/es_US/Contractor.Management.Profile.json.js +4 -4
- package/dist/i18n/es_US/Contractor.ManagementContractorList.json.js +40 -38
- package/dist/i18n/es_US/Contractor.ManagementContractorList.json.js.map +1 -1
- package/dist/i18n/es_US/Contractor.Payments.PaymentsList.json.js +18 -16
- package/dist/i18n/es_US/Contractor.Payments.PaymentsList.json.js.map +1 -1
- package/dist/i18n/es_US/Contractor.Profile.json.js +5 -5
- package/dist/i18n/es_US/Payroll.OffCycleCreation.json.js +11 -9
- package/dist/i18n/es_US/Payroll.OffCycleCreation.json.js.map +1 -1
- package/dist/i18n/es_US/Payroll.OffCyclePayPeriodDateForm.json.js +2 -2
- package/dist/i18n/es_US/Payroll.OffCycleTaxWithholding.json.js +6 -6
- package/dist/i18n/es_US/Payroll.PayrollConfiguration.json.js +15 -15
- package/dist/i18n/es_US/Payroll.PayrollEditEmployee.json.js +28 -26
- package/dist/i18n/es_US/Payroll.PayrollEditEmployee.json.js.map +1 -1
- package/dist/i18n/es_US/Payroll.PayrollOverview.json.js +40 -38
- package/dist/i18n/es_US/Payroll.PayrollOverview.json.js.map +1 -1
- package/dist/i18n/es_US/Payroll.PrintChecksBanner.json.js +14 -0
- package/dist/i18n/es_US/Payroll.PrintChecksBanner.json.js.map +1 -0
- package/dist/i18n/es_US/Payroll.PrintChecksFailure.json.js +12 -0
- package/dist/i18n/es_US/Payroll.PrintChecksFailure.json.js.map +1 -0
- package/dist/i18n/es_US/Payroll.PrintChecksForm.json.js +26 -0
- package/dist/i18n/es_US/Payroll.PrintChecksForm.json.js.map +1 -0
- package/dist/i18n/es_US/Payroll.PrintChecksSummary.json.js +14 -0
- package/dist/i18n/es_US/Payroll.PrintChecksSummary.json.js.map +1 -0
- package/dist/i18n/es_US/Payroll.UNSTABLE_PayrollEditEmployee.json.js +78 -0
- package/dist/i18n/es_US/Payroll.UNSTABLE_PayrollEditEmployee.json.js.map +1 -0
- package/dist/i18n/es_US/common.json.js +1 -1
- package/dist/package.json.js +1 -1
- package/dist/shared/constants.js +21 -20
- package/dist/shared/constants.js.map +1 -1
- package/dist/src/components/Common/UI/ComboBox/ComboBoxTypes.d.ts +1 -1
- package/dist/src/components/Common/UI/DatePicker/DatePickerTypes.d.ts +2 -1
- package/dist/src/components/Common/UI/Menu/MenuTypes.d.ts +1 -1
- package/dist/src/components/Common/UI/MultiSelectComboBox/MultiSelectComboBox.d.ts +1 -1
- package/dist/src/components/Common/UI/MultiSelectComboBox/MultiSelectComboBoxTypes.d.ts +5 -0
- package/dist/src/components/Common/UI/Select/SelectTypes.d.ts +2 -1
- package/dist/src/components/Employee/EmployeeList/shared/useEmployeeList.d.ts +7 -2
- package/dist/src/components/Employee/EmployeeListFlow/employeeListStateMachine.test.d.ts +1 -0
- package/dist/src/components/Payroll/OffCycle/OffCycleFlow.d.ts +2 -0
- package/dist/src/components/Payroll/OffCycle/OffCycleFlowComponents.d.ts +2 -0
- package/dist/src/components/Payroll/OffCycle/offCycleStateMachine.d.ts +1 -0
- package/dist/src/components/Payroll/OffCycleCreation/OffCycleCreation.d.ts +1 -0
- package/dist/src/components/Payroll/OffCycleCreation/OffCycleCreationPresentation.d.ts +1 -1
- package/dist/src/components/Payroll/OffCycleCreation/OffCycleCreationTypes.d.ts +11 -0
- package/dist/src/components/Payroll/PayrollConfiguration/PayrollConfiguration.d.ts +1 -1
- package/dist/src/components/Payroll/PayrollConfiguration/useCalculationPoll.d.ts +6 -1
- package/dist/src/components/Payroll/PayrollEditEmployee/shared/usePayrollEditEmployeeForm/payrollEditEmployeeHelpers.d.ts +18 -0
- package/dist/src/components/Payroll/PayrollExecutionFlow/PayrollExecutionFlow.d.ts +1 -1
- package/dist/src/components/Payroll/PayrollExecutionFlow/payrollExecutionMachine.d.ts +8 -0
- package/dist/src/components/Payroll/PayrollFlow/PayrollFlow.d.ts +1 -1
- package/dist/src/components/Payroll/PayrollFlow/TransitionFlowContextual.d.ts +6 -1
- package/dist/src/components/Payroll/PayrollOverview/useSubmissionPoll.d.ts +10 -1
- package/dist/src/components/Payroll/Transition/TransitionFlow.d.ts +17 -15
- package/dist/src/components/Payroll/Transition/TransitionFlowComponents.d.ts +21 -12
- package/dist/src/components/Payroll/Transition/transitionStateMachine.d.ts +25 -4
- package/dist/src/components/Payroll/TransitionPayroll/TransitionPayroll.d.ts +55 -0
- package/dist/src/components/Payroll/TransitionPayroll/TransitionPayrollComponents.d.ts +24 -0
- package/dist/src/components/Payroll/TransitionPayroll/TransitionPayrollTypes.d.ts +23 -0
- package/dist/src/components/Payroll/TransitionPayroll/index.d.ts +2 -0
- package/dist/src/components/Payroll/TransitionPayroll/transitionPayrollStateMachine.d.ts +15 -0
- package/dist/src/components/Payroll/TransitionPayroll/useResolveTransitionPayroll.d.ts +28 -0
- package/dist/src/components/Payroll/index.d.ts +2 -0
- package/dist/src/contexts/ApiProvider/ApiProvider.d.ts +5 -3
- package/dist/src/contexts/ApiProvider/apiVersionMismatchHook.d.ts +3 -0
- package/dist/src/contexts/ApiProvider/apiVersionMismatchHook.test.d.ts +1 -0
- package/dist/src/contexts/GustoProvider/GustoProviderCustomUIAdapter.d.ts +9 -1
- package/dist/src/contexts/ThemeProvider/ThemeProvider.d.ts +8 -3
- package/dist/src/hooks/usePollingTask/usePollingTask.d.ts +55 -14
- package/dist/src/i18n/types.d.ts +20 -0
- package/dist/src/shared/constants.d.ts +2 -0
- package/dist/style.css +1 -1
- package/docs/guides/endpoint-inventory.json +19 -19
- package/package.json +8 -8
|
@@ -1,46 +1,57 @@
|
|
|
1
|
-
import { useRef as
|
|
2
|
-
import { PAYROLL_PROCESSING_STATUS as
|
|
3
|
-
import { usePollingTask as
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
1
|
+
import { useRef as m, useCallback as y } from "react";
|
|
2
|
+
import { PAYROLL_PROCESSING_STATUS as n } from "../../../shared/constants.js";
|
|
3
|
+
import { usePollingTask as S, isNonRetryablePollError as g } from "../../../hooks/usePollingTask/usePollingTask.js";
|
|
4
|
+
import { useObservability as P } from "../../../contexts/ObservabilityProvider/useObservability.js";
|
|
5
|
+
import { normalizeToSDKError as w } from "../../../types/sdkError.js";
|
|
6
|
+
const v = "Payroll.PayrollOverview", E = (e) => e === n.submitting, h = (e) => e?.baseline != null || e?.sawSubmitting === !0, c = (e, s) => e === !0 || s === n.submit_success, N = (e) => {
|
|
7
|
+
const s = e?.payrollShow;
|
|
8
|
+
return c(s?.processed, s?.processingRequest?.status) ? { type: "processed", payroll: s } : { type: "failed", payroll: s };
|
|
9
|
+
}, O = (e, s) => {
|
|
10
|
+
if (!e.success)
|
|
11
|
+
return g(e.error) ? { status: "error", error: e.error } : { status: "polling" };
|
|
12
|
+
const r = e.data.payrollShow, o = r?.processingRequest?.status, i = E(o);
|
|
13
|
+
return i && s && (s.sawSubmitting = !0), o === n.processing_failed ? { status: "done", value: { type: "failed", payroll: r } } : (s?.sawSubmitting === !0 || s?.baseline != null && (r?.processed !== s.baseline.processed || o !== s.baseline.status)) && c(r?.processed, o) ? { status: "done", value: { type: "processed", payroll: r } } : i ? { status: "polling" } : s?.baseline != null ? { status: "polling" } : { status: "done", value: { type: "loaded" } };
|
|
7
14
|
};
|
|
8
|
-
function
|
|
9
|
-
refetch:
|
|
10
|
-
onProcessed:
|
|
11
|
-
onProcessingFailed:
|
|
15
|
+
function C({
|
|
16
|
+
refetch: e,
|
|
17
|
+
onProcessed: s,
|
|
18
|
+
onProcessingFailed: r,
|
|
19
|
+
onError: o
|
|
12
20
|
}) {
|
|
13
|
-
const
|
|
14
|
-
const
|
|
15
|
-
if (
|
|
16
|
-
return
|
|
17
|
-
}, l = (
|
|
18
|
-
if (
|
|
19
|
-
|
|
21
|
+
const i = m(null), { observability: a } = P(), p = async () => {
|
|
22
|
+
const t = await e();
|
|
23
|
+
if (t.status !== "success") throw t.error ?? new Error("Payroll refetch failed");
|
|
24
|
+
return t.data;
|
|
25
|
+
}, l = (t) => {
|
|
26
|
+
if (t.type === "failed") {
|
|
27
|
+
r(t.payroll);
|
|
20
28
|
return;
|
|
21
29
|
}
|
|
22
|
-
|
|
23
|
-
},
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
}
|
|
29
|
-
s(i);
|
|
30
|
-
}, { start: u, isPolling: f } = y({
|
|
31
|
-
fetch: o,
|
|
32
|
-
evaluate: (e) => m(e, n.current),
|
|
30
|
+
t.type === "processed" && s(t.payroll);
|
|
31
|
+
}, f = (t) => {
|
|
32
|
+
l(N(t));
|
|
33
|
+
}, { start: u, isPolling: d } = S({
|
|
34
|
+
fetch: p,
|
|
35
|
+
evaluate: (t) => O(t, i.current),
|
|
33
36
|
onDone: l,
|
|
34
|
-
|
|
37
|
+
onError: (t) => {
|
|
38
|
+
const b = w(t);
|
|
39
|
+
a?.onError?.({
|
|
40
|
+
...b,
|
|
41
|
+
timestamp: Date.now(),
|
|
42
|
+
componentName: v
|
|
43
|
+
}), h(i.current) && o();
|
|
44
|
+
},
|
|
45
|
+
onDeadline: f
|
|
35
46
|
});
|
|
36
|
-
return { start:
|
|
37
|
-
(
|
|
38
|
-
|
|
47
|
+
return { start: y(
|
|
48
|
+
(t) => {
|
|
49
|
+
i.current = t, u();
|
|
39
50
|
},
|
|
40
51
|
[u]
|
|
41
|
-
), isPolling:
|
|
52
|
+
), isPolling: d };
|
|
42
53
|
}
|
|
43
54
|
export {
|
|
44
|
-
|
|
55
|
+
C as useSubmissionPoll
|
|
45
56
|
};
|
|
46
57
|
//# sourceMappingURL=useSubmissionPoll.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useSubmissionPoll.js","sources":["../../../../src/components/Payroll/PayrollOverview/useSubmissionPoll.ts"],"sourcesContent":["import { useCallback, useRef } from 'react'\nimport type {\n PayrollsGetQueryData,\n PayrollsGetQueryError,\n} from '@gusto/embedded-api/react-query/payrollsGet'\nimport type { QueryObserverResult } from '@tanstack/react-query'\nimport { PAYROLL_PROCESSING_STATUS } from '@/shared/constants'\nimport { usePollingTask, type PollTickResult } from '@/hooks/usePollingTask/usePollingTask'\n\n/** @internal */\nexport type PayrollShow = NonNullable<PayrollsGetQueryData['payrollShow']>\n\ntype SubmissionOutcome =\n | { type: 'processed'; payroll: PayrollShow | undefined }\n | { type: 'failed'; payroll: PayrollShow | undefined }\n | { type: 'loaded' }\n\n/**\n * Per-run state for the submission poll. `baseline` is only known when the run starts from a\n * click on Submit, where the pre-submit render already has data to snapshot. A run started\n * without one (e.g. to guard the initial read on mount) relies on `sawSubmitting` alone.\n *\n * @internal\n */\nexport interface SubmissionPollRun {\n baseline: { processed: boolean; status: string | undefined } | null\n sawSubmitting: boolean\n}\n\nconst isSubmittingStatus = (status: string | undefined) =>\n status === PAYROLL_PROCESSING_STATUS.submitting\n\nconst isProcessedStatus = (processed: boolean | undefined, status: string | undefined) =>\n processed === true || status === PAYROLL_PROCESSING_STATUS.submit_success\n\nconst evaluateSubmissionOutcome = (\n queryData: PayrollsGetQueryData,\n run: SubmissionPollRun | null,\n): PollTickResult<SubmissionOutcome> => {\n const payroll = queryData.payrollShow\n const submissionStatus = payroll?.processingRequest?.status\n const isSubmitting = isSubmittingStatus(submissionStatus)\n\n if (isSubmitting && run) run.sawSubmitting = true\n\n if (submissionStatus === PAYROLL_PROCESSING_STATUS.processing_failed) {\n return { done: true, value: { type: 'failed', payroll } }\n }\n\n // Checked ahead of the `isSubmitting` re-poll below: `processed` can flip true while\n // `processingRequest.status` still reads `submitting` (a real API race), so a transition must\n // be detected on `processed` alone, not gated on status having already moved on.\n const isNewTransition =\n run?.sawSubmitting === true ||\n (run?.baseline != null &&\n (payroll?.processed !== run.baseline.processed || submissionStatus !== run.baseline.status))\n\n if (isNewTransition && isProcessedStatus(payroll?.processed, submissionStatus)) {\n return { done: true, value: { type: 'processed', payroll } }\n }\n\n if (isSubmitting) return { done: false }\n\n return { done: true, value: { type: 'loaded' } }\n}\n\n/** @internal */\nexport interface UseSubmissionPollOptions {\n /**\n * The render-driving payroll query's own `refetch`, reused so the poll's reads land on the\n * same query the component observes rather than racing a second, independently-built one.\n */\n refetch: () => Promise<QueryObserverResult<PayrollsGetQueryData, PayrollsGetQueryError>>\n onProcessed: (payroll: PayrollShow | undefined) => void\n onProcessingFailed: (payroll: PayrollShow | undefined) => void\n}\n\n/** @internal */\nexport interface SubmissionPoll {\n start: (run: SubmissionPollRun) => void\n isPolling: boolean\n}\n\n/**\n * Polls a payroll until its submission reaches a terminal state, via {@link usePollingTask}.\n *\n * @internal\n */\nexport function useSubmissionPoll({\n refetch,\n onProcessed,\n onProcessingFailed,\n}: UseSubmissionPollOptions): SubmissionPoll {\n const pollRunRef = useRef<SubmissionPollRun | null>(null)\n\n const fetchPayroll = async (): Promise<PayrollsGetQueryData> => {\n const result = await refetch()\n if (result.status !== 'success') throw result.error ?? new Error('Payroll refetch failed')\n return result.data\n }\n\n const handleDone = (outcome: SubmissionOutcome) => {\n if (outcome.type === 'failed') {\n onProcessingFailed(outcome.payroll)\n return\n }\n if (outcome.type === 'processed') {\n onProcessed(outcome.payroll)\n }\n }\n\n // Verify against the server before reporting failure, same rationale as\n // PayrollConfiguration's calculation poll: a success that arrived while we were waiting must\n // never be reported as a failure.\n const handleDeadline = (lastData: PayrollsGetQueryData | null) => {\n const payroll = lastData?.payrollShow\n if (isProcessedStatus(payroll?.processed, payroll?.processingRequest?.status)) {\n onProcessed(payroll)\n return\n }\n onProcessingFailed(payroll)\n }\n\n const { start: startPoll, isPolling } = usePollingTask<PayrollsGetQueryData, SubmissionOutcome>({\n fetch: fetchPayroll,\n evaluate: queryData => evaluateSubmissionOutcome(queryData, pollRunRef.current),\n onDone: handleDone,\n onDeadline: handleDeadline,\n })\n\n const start = useCallback(\n (run: SubmissionPollRun) => {\n pollRunRef.current = run\n startPoll()\n },\n [startPoll],\n )\n\n return { start, isPolling }\n}\n"],"names":["isSubmittingStatus","status","PAYROLL_PROCESSING_STATUS","isProcessedStatus","processed","evaluateSubmissionOutcome","queryData","run","payroll","submissionStatus","isSubmitting","useSubmissionPoll","refetch","onProcessed","onProcessingFailed","pollRunRef","useRef","fetchPayroll","result","handleDone","outcome","handleDeadline","lastData","startPoll","isPolling","usePollingTask","useCallback"],"mappings":";;;AA6BA,MAAMA,IAAqB,CAACC,MAC1BA,MAAWC,EAA0B,YAEjCC,IAAoB,CAACC,GAAgCH,MACzDG,MAAc,MAAQH,MAAWC,EAA0B,gBAEvDG,IAA4B,CAChCC,GACAC,MACsC;AACtC,QAAMC,IAAUF,EAAU,aACpBG,IAAmBD,GAAS,mBAAmB,QAC/CE,IAAeV,EAAmBS,CAAgB;AAIxD,SAFIC,KAAgBH,MAAKA,EAAI,gBAAgB,KAEzCE,MAAqBP,EAA0B,oBAC1C,EAAE,MAAM,IAAM,OAAO,EAAE,MAAM,UAAU,SAAAM,IAAQ,KAOtDD,GAAK,kBAAkB,MACtBA,GAAK,YAAY,SACfC,GAAS,cAAcD,EAAI,SAAS,aAAaE,MAAqBF,EAAI,SAAS,YAEjEJ,EAAkBK,GAAS,WAAWC,CAAgB,IACpE,EAAE,MAAM,IAAM,OAAO,EAAE,MAAM,aAAa,SAAAD,IAAQ,IAGvDE,IAAqB,EAAE,MAAM,GAAA,IAE1B,EAAE,MAAM,IAAM,OAAO,EAAE,MAAM,WAAS;AAC/C;AAwBO,SAASC,EAAkB;AAAA,EAChC,SAAAC;AAAA,EACA,aAAAC;AAAA,EACA,oBAAAC;AACF,GAA6C;AAC3C,QAAMC,IAAaC,EAAiC,IAAI,GAElDC,IAAe,YAA2C;AAC9D,UAAMC,IAAS,MAAMN,EAAA;AACrB,QAAIM,EAAO,WAAW,UAAW,OAAMA,EAAO,SAAS,IAAI,MAAM,wBAAwB;AACzF,WAAOA,EAAO;AAAA,EAChB,GAEMC,IAAa,CAACC,MAA+B;AACjD,QAAIA,EAAQ,SAAS,UAAU;AAC7B,MAAAN,EAAmBM,EAAQ,OAAO;AAClC;AAAA,IACF;AACA,IAAIA,EAAQ,SAAS,eACnBP,EAAYO,EAAQ,OAAO;AAAA,EAE/B,GAKMC,IAAiB,CAACC,MAA0C;AAChE,UAAMd,IAAUc,GAAU;AAC1B,QAAInB,EAAkBK,GAAS,WAAWA,GAAS,mBAAmB,MAAM,GAAG;AAC7E,MAAAK,EAAYL,CAAO;AACnB;AAAA,IACF;AACA,IAAAM,EAAmBN,CAAO;AAAA,EAC5B,GAEM,EAAE,OAAOe,GAAW,WAAAC,EAAA,IAAcC,EAAwD;AAAA,IAC9F,OAAOR;AAAA,IACP,UAAU,CAAAX,MAAaD,EAA0BC,GAAWS,EAAW,OAAO;AAAA,IAC9E,QAAQI;AAAA,IACR,YAAYE;AAAA,EAAA,CACb;AAUD,SAAO,EAAE,OARKK;AAAA,IACZ,CAACnB,MAA2B;AAC1B,MAAAQ,EAAW,UAAUR,GACrBgB,EAAA;AAAA,IACF;AAAA,IACA,CAACA,CAAS;AAAA,EAAA,GAGI,WAAAC,EAAA;AAClB;"}
|
|
1
|
+
{"version":3,"file":"useSubmissionPoll.js","sources":["../../../../src/components/Payroll/PayrollOverview/useSubmissionPoll.ts"],"sourcesContent":["import { useCallback, useRef } from 'react'\nimport type {\n PayrollsGetQueryData,\n PayrollsGetQueryError,\n} from '@gusto/embedded-api/react-query/payrollsGet'\nimport type { QueryObserverResult } from '@tanstack/react-query'\nimport { PAYROLL_PROCESSING_STATUS } from '@/shared/constants'\nimport {\n usePollingTask,\n isNonRetryablePollError,\n type PollReadOutcome,\n type PollTickResult,\n} from '@/hooks/usePollingTask/usePollingTask'\nimport { useObservability } from '@/contexts/ObservabilityProvider/useObservability'\nimport { normalizeToSDKError } from '@/types/sdkError'\n\nconst COMPONENT_NAME = 'Payroll.PayrollOverview'\n\n/** @internal */\nexport type PayrollShow = NonNullable<PayrollsGetQueryData['payrollShow']>\n\ntype SubmissionOutcome =\n | { type: 'processed'; payroll: PayrollShow | undefined }\n | { type: 'failed'; payroll: PayrollShow | undefined }\n | { type: 'loaded' }\n\n/**\n * Per-run state for the submission poll. `baseline` is only known when the run starts from a\n * click on Submit, where the pre-submit render already has data to snapshot. A run started\n * without one (e.g. to guard the initial read on mount) relies on `sawSubmitting` alone.\n *\n * @internal\n */\nexport interface SubmissionPollRun {\n baseline: { processed: boolean; status: string | undefined } | null\n sawSubmitting: boolean\n}\n\nconst isSubmittingStatus = (status: string | undefined) =>\n status === PAYROLL_PROCESSING_STATUS.submitting\n\n// A run only counts as tracking a real submission if it started from a Submit click (baseline\n// set) or has observed a `submitting` status mid-run -- the baseline-less mount poll that never\n// saw either is just guarding the initial render, not watching a submission.\nconst isTrackedSubmission = (run: SubmissionPollRun | null) =>\n run?.baseline != null || run?.sawSubmitting === true\n\nconst isProcessedStatus = (processed: boolean | undefined, status: string | undefined) =>\n processed === true || status === PAYROLL_PROCESSING_STATUS.submit_success\n\n// Verify against the last-known data before reporting failure: a success that already landed\n// on the server must never be reported as a failure just because the deadline hit first.\nconst verifiedSubmissionOutcome = (lastData: PayrollsGetQueryData | null): SubmissionOutcome => {\n const payroll = lastData?.payrollShow\n if (isProcessedStatus(payroll?.processed, payroll?.processingRequest?.status)) {\n return { type: 'processed', payroll }\n }\n return { type: 'failed', payroll }\n}\n\nconst evaluateSubmissionOutcome = (\n outcome: PollReadOutcome<PayrollsGetQueryData>,\n run: SubmissionPollRun | null,\n): PollTickResult<SubmissionOutcome> => {\n if (!outcome.success) {\n return isNonRetryablePollError(outcome.error)\n ? { status: 'error', error: outcome.error }\n : { status: 'polling' }\n }\n\n const payroll = outcome.data.payrollShow\n const submissionStatus = payroll?.processingRequest?.status\n const isSubmitting = isSubmittingStatus(submissionStatus)\n\n if (isSubmitting && run) run.sawSubmitting = true\n\n if (submissionStatus === PAYROLL_PROCESSING_STATUS.processing_failed) {\n return { status: 'done', value: { type: 'failed', payroll } }\n }\n\n // Checked ahead of the `isSubmitting` re-poll below: `processed` can flip true while\n // `processingRequest.status` still reads `submitting` (a real API race), so a transition must\n // be detected on `processed` alone, not gated on status having already moved on.\n const isNewTransition =\n run?.sawSubmitting === true ||\n (run?.baseline != null &&\n (payroll?.processed !== run.baseline.processed || submissionStatus !== run.baseline.status))\n\n if (isNewTransition && isProcessedStatus(payroll?.processed, submissionStatus)) {\n return { status: 'done', value: { type: 'processed', payroll } }\n }\n\n if (isSubmitting) return { status: 'polling' }\n\n // A baseline means Submit was just clicked, so an inconclusive read likely means the async\n // job hasn't started yet -- keep polling. The baseline-less mount poll is exempt on purpose:\n // it must not treat an already-settled payroll as a fresh transition.\n if (run?.baseline != null) return { status: 'polling' }\n\n return { status: 'done', value: { type: 'loaded' } }\n}\n\n/** @internal */\nexport interface UseSubmissionPollOptions {\n /**\n * The render-driving payroll query's own `refetch`, reused so the poll's reads land on the\n * same query the component observes rather than racing a second, independently-built one.\n */\n refetch: () => Promise<QueryObserverResult<PayrollsGetQueryData, PayrollsGetQueryError>>\n onProcessed: (payroll: PayrollShow | undefined) => void\n onProcessingFailed: (payroll: PayrollShow | undefined) => void\n /**\n * Called when the poll gives up on a non-retryable read error, but only for a run that was\n * actually tracking a submission (`baseline` set, or a `submitting` status observed mid-run).\n * A baseline-less mount poll that never saw `submitting` swallows the error here -- it was only\n * guarding the initial render, not watching a real submission, so surfacing it as a processing\n * failure would be a false failure. The raw error is reported to observability by this hook\n * either way.\n */\n onError: () => void\n}\n\n/** @internal */\nexport interface SubmissionPoll {\n start: (run: SubmissionPollRun) => void\n isPolling: boolean\n}\n\n/**\n * Polls a payroll until its submission reaches a terminal state, via {@link usePollingTask}.\n *\n * @internal\n */\nexport function useSubmissionPoll({\n refetch,\n onProcessed,\n onProcessingFailed,\n onError,\n}: UseSubmissionPollOptions): SubmissionPoll {\n const pollRunRef = useRef<SubmissionPollRun | null>(null)\n const { observability } = useObservability()\n\n const fetchPayroll = async (): Promise<PayrollsGetQueryData> => {\n const result = await refetch()\n if (result.status !== 'success') throw result.error ?? new Error('Payroll refetch failed')\n return result.data\n }\n\n const handleDone = (outcome: SubmissionOutcome) => {\n if (outcome.type === 'failed') {\n onProcessingFailed(outcome.payroll)\n return\n }\n if (outcome.type === 'processed') {\n onProcessed(outcome.payroll)\n }\n }\n\n const handleDeadline = (lastData: PayrollsGetQueryData | null) => {\n handleDone(verifiedSubmissionOutcome(lastData))\n }\n\n const { start: startPoll, isPolling } = usePollingTask<PayrollsGetQueryData, SubmissionOutcome>({\n fetch: fetchPayroll,\n evaluate: outcome => evaluateSubmissionOutcome(outcome, pollRunRef.current),\n onDone: handleDone,\n onError: error => {\n const sdkError = normalizeToSDKError(error)\n observability?.onError?.({\n ...sdkError,\n timestamp: Date.now(),\n componentName: COMPONENT_NAME,\n })\n // Don't emit a processing failed error if we never observed this payroll\n // be submitted; this could just be a load issue\n if (isTrackedSubmission(pollRunRef.current)) {\n onError()\n }\n },\n onDeadline: handleDeadline,\n })\n\n const start = useCallback(\n (run: SubmissionPollRun) => {\n pollRunRef.current = run\n startPoll()\n },\n [startPoll],\n )\n\n return { start, isPolling }\n}\n"],"names":["COMPONENT_NAME","isSubmittingStatus","status","PAYROLL_PROCESSING_STATUS","isTrackedSubmission","run","isProcessedStatus","processed","verifiedSubmissionOutcome","lastData","payroll","evaluateSubmissionOutcome","outcome","isNonRetryablePollError","submissionStatus","isSubmitting","useSubmissionPoll","refetch","onProcessed","onProcessingFailed","onError","pollRunRef","useRef","observability","useObservability","fetchPayroll","result","handleDone","handleDeadline","startPoll","isPolling","usePollingTask","error","sdkError","normalizeToSDKError","useCallback"],"mappings":";;;;;AAgBA,MAAMA,IAAiB,2BAsBjBC,IAAqB,CAACC,MAC1BA,MAAWC,EAA0B,YAKjCC,IAAsB,CAACC,MAC3BA,GAAK,YAAY,QAAQA,GAAK,kBAAkB,IAE5CC,IAAoB,CAACC,GAAgCL,MACzDK,MAAc,MAAQL,MAAWC,EAA0B,gBAIvDK,IAA4B,CAACC,MAA6D;AAC9F,QAAMC,IAAUD,GAAU;AAC1B,SAAIH,EAAkBI,GAAS,WAAWA,GAAS,mBAAmB,MAAM,IACnE,EAAE,MAAM,aAAa,SAAAA,EAAA,IAEvB,EAAE,MAAM,UAAU,SAAAA,EAAA;AAC3B,GAEMC,IAA4B,CAChCC,GACAP,MACsC;AACtC,MAAI,CAACO,EAAQ;AACX,WAAOC,EAAwBD,EAAQ,KAAK,IACxC,EAAE,QAAQ,SAAS,OAAOA,EAAQ,MAAA,IAClC,EAAE,QAAQ,UAAA;AAGhB,QAAMF,IAAUE,EAAQ,KAAK,aACvBE,IAAmBJ,GAAS,mBAAmB,QAC/CK,IAAed,EAAmBa,CAAgB;AAIxD,SAFIC,KAAgBV,MAAKA,EAAI,gBAAgB,KAEzCS,MAAqBX,EAA0B,oBAC1C,EAAE,QAAQ,QAAQ,OAAO,EAAE,MAAM,UAAU,SAAAO,IAAQ,KAO1DL,GAAK,kBAAkB,MACtBA,GAAK,YAAY,SACfK,GAAS,cAAcL,EAAI,SAAS,aAAaS,MAAqBT,EAAI,SAAS,YAEjEC,EAAkBI,GAAS,WAAWI,CAAgB,IACpE,EAAE,QAAQ,QAAQ,OAAO,EAAE,MAAM,aAAa,SAAAJ,IAAQ,IAG3DK,IAAqB,EAAE,QAAQ,UAAA,IAK/BV,GAAK,YAAY,OAAa,EAAE,QAAQ,UAAA,IAErC,EAAE,QAAQ,QAAQ,OAAO,EAAE,MAAM,WAAS;AACnD;AAiCO,SAASW,EAAkB;AAAA,EAChC,SAAAC;AAAA,EACA,aAAAC;AAAA,EACA,oBAAAC;AAAA,EACA,SAAAC;AACF,GAA6C;AAC3C,QAAMC,IAAaC,EAAiC,IAAI,GAClD,EAAE,eAAAC,EAAA,IAAkBC,EAAA,GAEpBC,IAAe,YAA2C;AAC9D,UAAMC,IAAS,MAAMT,EAAA;AACrB,QAAIS,EAAO,WAAW,UAAW,OAAMA,EAAO,SAAS,IAAI,MAAM,wBAAwB;AACzF,WAAOA,EAAO;AAAA,EAChB,GAEMC,IAAa,CAACf,MAA+B;AACjD,QAAIA,EAAQ,SAAS,UAAU;AAC7B,MAAAO,EAAmBP,EAAQ,OAAO;AAClC;AAAA,IACF;AACA,IAAIA,EAAQ,SAAS,eACnBM,EAAYN,EAAQ,OAAO;AAAA,EAE/B,GAEMgB,IAAiB,CAACnB,MAA0C;AAChE,IAAAkB,EAAWnB,EAA0BC,CAAQ,CAAC;AAAA,EAChD,GAEM,EAAE,OAAOoB,GAAW,WAAAC,EAAA,IAAcC,EAAwD;AAAA,IAC9F,OAAON;AAAA,IACP,UAAU,CAAAb,MAAWD,EAA0BC,GAASS,EAAW,OAAO;AAAA,IAC1E,QAAQM;AAAA,IACR,SAAS,CAAAK,MAAS;AAChB,YAAMC,IAAWC,EAAoBF,CAAK;AAC1C,MAAAT,GAAe,UAAU;AAAA,QACvB,GAAGU;AAAA,QACH,WAAW,KAAK,IAAA;AAAA,QAChB,eAAejC;AAAA,MAAA,CAChB,GAGGI,EAAoBiB,EAAW,OAAO,KACxCD,EAAA;AAAA,IAEJ;AAAA,IACA,YAAYQ;AAAA,EAAA,CACb;AAUD,SAAO,EAAE,OARKO;AAAA,IACZ,CAAC9B,MAA2B;AAC1B,MAAAgB,EAAW,UAAUhB,GACrBwB,EAAA;AAAA,IACF;AAAA,IACA,CAACA,CAAS;AAAA,EAAA,GAGI,WAAAC,EAAA;AAClB;"}
|
|
@@ -11,64 +11,64 @@ import E from "../../../hooks/useContainerBreakpoints/useContainerBreakpoints.js
|
|
|
11
11
|
import V from "../../../assets/icons/receipt-check.svg.js";
|
|
12
12
|
import { DataTable as h } from "../../Common/DataView/DataTable/DataTable.js";
|
|
13
13
|
import { DataView as G } from "../../Common/DataView/DataView.js";
|
|
14
|
-
const
|
|
15
|
-
className:
|
|
16
|
-
receiptData:
|
|
14
|
+
const oe = ({
|
|
15
|
+
className: g,
|
|
16
|
+
receiptData: t,
|
|
17
17
|
withReimbursements: u = !0
|
|
18
18
|
}) => {
|
|
19
|
-
const b = A(), { Heading: y, Text: c, Link:
|
|
19
|
+
const b = A(), { Heading: y, Text: c, Link: x } = b;
|
|
20
20
|
H("Payroll.PayrollReceipts");
|
|
21
|
-
const { t: e } = M("Payroll.PayrollReceipts"), f = z(null), p = !E({ ref: f }).includes("small"), k = (
|
|
22
|
-
(
|
|
21
|
+
const { t: e } = M("Payroll.PayrollReceipts"), f = z(null), p = !E({ ref: f }).includes("small"), k = (o) => `${o.employeeFirstName || ""} ${o.employeeLastName || ""}`.trim(), F = () => (t.employeeCompensations || []).reduce(
|
|
22
|
+
(o, a) => o + parseFloat(a.childSupportGarnishment || "0"),
|
|
23
23
|
0
|
|
24
|
-
), N = () => (
|
|
25
|
-
(
|
|
24
|
+
), N = () => (t.employeeCompensations || []).reduce(
|
|
25
|
+
(o, a) => o + parseFloat(a.totalReimbursement || "0"),
|
|
26
26
|
0
|
|
27
|
-
), C = () => (
|
|
28
|
-
(
|
|
27
|
+
), C = () => (t.employeeCompensations || []).reduce(
|
|
28
|
+
(o, a) => o + parseFloat(a.netPay || "0"),
|
|
29
29
|
0
|
|
30
|
-
), v = () => (
|
|
31
|
-
(
|
|
30
|
+
), v = () => (t.employeeCompensations || []).reduce(
|
|
31
|
+
(o, a) => o + parseFloat(a.totalTax || "0"),
|
|
32
32
|
0
|
|
33
33
|
), P = [
|
|
34
34
|
{
|
|
35
35
|
label: e("breakdown.directDeposits"),
|
|
36
|
-
amount: parseFloat(
|
|
36
|
+
amount: parseFloat(t.totals?.netPayDebit || "0")
|
|
37
37
|
},
|
|
38
38
|
...u ? [
|
|
39
39
|
{
|
|
40
40
|
label: e("breakdown.reimbursements"),
|
|
41
|
-
amount: parseFloat(
|
|
41
|
+
amount: parseFloat(t.totals?.reimbursementDebit || "0")
|
|
42
42
|
}
|
|
43
43
|
] : [],
|
|
44
44
|
{
|
|
45
45
|
label: e("breakdown.garnishments"),
|
|
46
|
-
amount: parseFloat(
|
|
46
|
+
amount: parseFloat(t.totals?.childSupportDebit || "0")
|
|
47
47
|
},
|
|
48
|
-
{ label: e("breakdown.taxes"), amount: parseFloat(
|
|
48
|
+
{ label: e("breakdown.taxes"), amount: parseFloat(t.totals?.taxDebit || "0") }
|
|
49
49
|
], T = [
|
|
50
50
|
{
|
|
51
51
|
label: e("receipt.receiptId"),
|
|
52
|
-
value:
|
|
52
|
+
value: t.payrollUuid || ""
|
|
53
53
|
},
|
|
54
54
|
{
|
|
55
55
|
label: e("receipt.from"),
|
|
56
|
-
value:
|
|
56
|
+
value: t.nameOfSender || ""
|
|
57
57
|
},
|
|
58
58
|
{
|
|
59
59
|
label: e("receipt.to"),
|
|
60
|
-
value:
|
|
60
|
+
value: t.nameOfRecipient || "Payroll Recipients"
|
|
61
61
|
},
|
|
62
62
|
{
|
|
63
63
|
label: e("receipt.debitDate"),
|
|
64
|
-
value:
|
|
64
|
+
value: t.debitDate || ""
|
|
65
65
|
}
|
|
66
66
|
], w = () => /* @__PURE__ */ n("div", { className: d(r.receiptHeader, p && r.receiptHeaderMobile), children: /* @__PURE__ */ m(i, { flexDirection: "column", gap: 24, children: [
|
|
67
67
|
/* @__PURE__ */ m(i, { flexDirection: "column", alignItems: "center", gap: 16, children: [
|
|
68
68
|
/* @__PURE__ */ n("div", { className: r.receiptIcon, children: /* @__PURE__ */ n(V, { className: r.checkmarkIcon }) }),
|
|
69
69
|
/* @__PURE__ */ m(i, { flexDirection: "column", alignItems: "center", gap: 8, children: [
|
|
70
70
|
/* @__PURE__ */ n(c, { size: "sm", variant: "supporting", children: e("receipt.totalLabel") }),
|
|
71
|
-
/* @__PURE__ */ n(y, { as: "h1", styledAs: "h2", className: r.totalAmount, children: s(parseFloat(
|
|
71
|
+
/* @__PURE__ */ n(y, { as: "h1", styledAs: "h2", className: r.totalAmount, children: s(parseFloat(t.totals?.companyDebit || "0")) })
|
|
72
72
|
] })
|
|
73
73
|
] }),
|
|
74
74
|
/* @__PURE__ */ n(
|
|
@@ -76,8 +76,8 @@ const te = ({
|
|
|
76
76
|
{
|
|
77
77
|
layout: "horizontal",
|
|
78
78
|
showSeparators: !1,
|
|
79
|
-
items: T.map(({ label:
|
|
80
|
-
term: /* @__PURE__ */ n(c, { size: "sm", variant: "supporting", children:
|
|
79
|
+
items: T.map(({ label: o, value: a }) => ({
|
|
80
|
+
term: /* @__PURE__ */ n(c, { size: "sm", variant: "supporting", children: o }),
|
|
81
81
|
description: /* @__PURE__ */ n(c, { size: "sm", children: a })
|
|
82
82
|
}))
|
|
83
83
|
}
|
|
@@ -89,7 +89,7 @@ const te = ({
|
|
|
89
89
|
size: "sm",
|
|
90
90
|
variant: "supporting",
|
|
91
91
|
className: d(r.disclaimer, p && r.textMobile),
|
|
92
|
-
children:
|
|
92
|
+
children: t.recipientNotice
|
|
93
93
|
}
|
|
94
94
|
),
|
|
95
95
|
/* @__PURE__ */ n(
|
|
@@ -104,7 +104,7 @@ const te = ({
|
|
|
104
104
|
i18nKey: "receipt.companyInfo",
|
|
105
105
|
t: e,
|
|
106
106
|
components: {
|
|
107
|
-
licensesLink: /* @__PURE__ */ n(
|
|
107
|
+
licensesLink: /* @__PURE__ */ n(x, { href: t.licenseUri || "", target: "_blank" })
|
|
108
108
|
}
|
|
109
109
|
}
|
|
110
110
|
)
|
|
@@ -117,62 +117,62 @@ const te = ({
|
|
|
117
117
|
variant: "supporting",
|
|
118
118
|
className: d(r.address, p && r.textMobile),
|
|
119
119
|
children: [
|
|
120
|
-
|
|
120
|
+
t.licensee && `${t.licensee.address || ""}, ${t.licensee.city || ""}, ${t.licensee.state || ""} ${t.licensee.postalCode || ""}`,
|
|
121
121
|
" ",
|
|
122
122
|
"| ",
|
|
123
|
-
B(
|
|
123
|
+
B(t.licensee?.phoneNumber)
|
|
124
124
|
]
|
|
125
125
|
}
|
|
126
126
|
)
|
|
127
127
|
] })
|
|
128
|
-
] }) }),
|
|
128
|
+
] }) }), I = () => /* @__PURE__ */ n(i, { flexDirection: "column", gap: 16, alignItems: "stretch", children: /* @__PURE__ */ n(
|
|
129
129
|
h,
|
|
130
130
|
{
|
|
131
131
|
label: e("sections.debitedLabel"),
|
|
132
132
|
columns: [
|
|
133
133
|
{
|
|
134
134
|
title: e("sections.debitedLabel"),
|
|
135
|
-
render: (
|
|
135
|
+
render: (o) => o.label
|
|
136
136
|
},
|
|
137
137
|
{
|
|
138
138
|
title: e("breakdown.amount"),
|
|
139
139
|
justify: "end",
|
|
140
|
-
render: (
|
|
140
|
+
render: (o) => s(o.amount)
|
|
141
141
|
}
|
|
142
142
|
],
|
|
143
143
|
data: P,
|
|
144
144
|
footer: () => ({
|
|
145
145
|
"column-0": e("breakdown.totals"),
|
|
146
|
-
"column-1": s(parseFloat(
|
|
146
|
+
"column-1": s(parseFloat(t.totals?.companyDebit || "0"))
|
|
147
147
|
})
|
|
148
148
|
}
|
|
149
|
-
) }),
|
|
149
|
+
) }), L = () => /* @__PURE__ */ n(i, { flexDirection: "column", gap: 16, alignItems: "stretch", children: /* @__PURE__ */ n(
|
|
150
150
|
h,
|
|
151
151
|
{
|
|
152
152
|
label: e("sections.taxLabel"),
|
|
153
153
|
columns: [
|
|
154
154
|
{
|
|
155
155
|
title: e("sections.taxLabel"),
|
|
156
|
-
render: (
|
|
156
|
+
render: (o) => o.name
|
|
157
157
|
},
|
|
158
158
|
{
|
|
159
159
|
title: e("tax.amount"),
|
|
160
160
|
justify: "end",
|
|
161
|
-
render: (
|
|
161
|
+
render: (o) => s(parseFloat(o.amount || "0"))
|
|
162
162
|
}
|
|
163
163
|
],
|
|
164
|
-
data:
|
|
164
|
+
data: t.taxes || [],
|
|
165
165
|
footer: () => ({
|
|
166
166
|
"column-0": e("breakdown.totals"),
|
|
167
|
-
"column-1": s(parseFloat(
|
|
167
|
+
"column-1": s(parseFloat(t.totals?.taxDebit || "0"))
|
|
168
168
|
})
|
|
169
169
|
}
|
|
170
|
-
) }),
|
|
170
|
+
) }), R = () => {
|
|
171
171
|
const a = [
|
|
172
172
|
/* @__PURE__ */ m(i, { flexDirection: "column", gap: 4, children: [
|
|
173
173
|
e("breakdown.totals"),
|
|
174
174
|
/* @__PURE__ */ n(c, { size: "sm", variant: "supporting", children: e("employee.totalEmployees", {
|
|
175
|
-
count:
|
|
175
|
+
count: t.employeeCompensations?.length || 0
|
|
176
176
|
}) })
|
|
177
177
|
] }, "totals"),
|
|
178
178
|
" ",
|
|
@@ -184,7 +184,7 @@ const te = ({
|
|
|
184
184
|
(l, S, j) => (l[`column-${j}`] = S, l),
|
|
185
185
|
{}
|
|
186
186
|
);
|
|
187
|
-
return /* @__PURE__ */ m(i, { flexDirection: "column", gap: 16, children: [
|
|
187
|
+
return /* @__PURE__ */ m(i, { flexDirection: "column", gap: 16, alignItems: "stretch", children: [
|
|
188
188
|
p && /* @__PURE__ */ n(y, { as: "h2", children: e("sections.employeesLabel") }),
|
|
189
189
|
/* @__PURE__ */ n(
|
|
190
190
|
G,
|
|
@@ -222,20 +222,20 @@ const te = ({
|
|
|
222
222
|
render: (l) => s(parseFloat(l.netPay || "0"))
|
|
223
223
|
}
|
|
224
224
|
],
|
|
225
|
-
data:
|
|
225
|
+
data: t.employeeCompensations || [],
|
|
226
226
|
footer: () => a
|
|
227
227
|
}
|
|
228
228
|
)
|
|
229
229
|
] });
|
|
230
230
|
};
|
|
231
|
-
return /* @__PURE__ */ n("div", { className: d(r.container,
|
|
231
|
+
return /* @__PURE__ */ n("div", { className: d(r.container, g), ref: f, children: /* @__PURE__ */ m(i, { flexDirection: "column", gap: 24, children: [
|
|
232
232
|
w(),
|
|
233
|
+
I(),
|
|
233
234
|
L(),
|
|
234
|
-
R()
|
|
235
|
-
I()
|
|
235
|
+
R()
|
|
236
236
|
] }) });
|
|
237
237
|
};
|
|
238
238
|
export {
|
|
239
|
-
|
|
239
|
+
oe as PayrollReceiptsPresentation
|
|
240
240
|
};
|
|
241
241
|
//# sourceMappingURL=PayrollReceiptsPresentation.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PayrollReceiptsPresentation.js","sources":["../../../../src/components/Payroll/PayrollReceipts/PayrollReceiptsPresentation.tsx"],"sourcesContent":["import { useRef } from 'react'\nimport { Trans, useTranslation } from 'react-i18next'\nimport classNames from 'classnames'\nimport type {\n PayrollReceipt,\n Taxes as TaxBreakdownItem,\n PayrollReceiptEmployeeCompensations as EmployeeBreakdownItem,\n} from '@gusto/embedded-api/models/components/payrollreceipt'\nimport styles from './PayrollReceiptsPresentation.module.scss'\nimport { DataView, DataTable, Flex } from '@/components/Common'\nimport type { DescriptionListItem } from '@/components/Common/UI/DescriptionList/DescriptionListTypes'\nimport { useComponentContext } from '@/contexts/ComponentAdapter/useComponentContext'\nimport { formatNumberAsCurrency, formatPhoneNumber } from '@/helpers/formattedStrings'\nimport { useI18n } from '@/i18n'\nimport { useContainerBreakpoints } from '@/hooks/useContainerBreakpoints/useContainerBreakpoints'\nimport ReceiptCheck from '@/assets/icons/receipt-check.svg?react'\n\ninterface PayrollReceiptsPresentationProps {\n className?: string\n receiptData: PayrollReceipt\n withReimbursements?: boolean\n}\n\n/** @internal */\nexport const PayrollReceiptsPresentation = ({\n className,\n receiptData,\n withReimbursements = true,\n}: PayrollReceiptsPresentationProps) => {\n const Components = useComponentContext()\n const { Heading, Text, Link } = Components\n useI18n('Payroll.PayrollReceipts')\n const { t } = useTranslation('Payroll.PayrollReceipts')\n\n const containerRef = useRef<HTMLDivElement>(null)\n const breakpoints = useContainerBreakpoints({ ref: containerRef })\n const isMobile = !breakpoints.includes('small')\n\n // Helper to get employee full name\n const getEmployeeFullName = (emp: EmployeeBreakdownItem) =>\n `${emp.employeeFirstName || ''} ${emp.employeeLastName || ''}`.trim()\n\n const getTotalChildSupport = () =>\n (receiptData.employeeCompensations || []).reduce(\n (sum, emp) => sum + parseFloat(emp.childSupportGarnishment || '0'),\n 0,\n )\n\n const getTotalReimbursements = () =>\n (receiptData.employeeCompensations || []).reduce(\n (sum, emp) => sum + parseFloat(emp.totalReimbursement || '0'),\n 0,\n )\n\n const getTotalNetPay = () =>\n (receiptData.employeeCompensations || []).reduce(\n (sum, emp) => sum + parseFloat(emp.netPay || '0'),\n 0,\n )\n\n const getTotalTaxes = () =>\n (receiptData.employeeCompensations || []).reduce(\n (sum, emp) => sum + parseFloat(emp.totalTax || '0'),\n 0,\n )\n\n const breakdownData = [\n {\n label: t('breakdown.directDeposits'),\n amount: parseFloat(receiptData.totals?.netPayDebit || '0'),\n },\n ...(withReimbursements\n ? [\n {\n label: t('breakdown.reimbursements'),\n amount: parseFloat(receiptData.totals?.reimbursementDebit || '0'),\n },\n ]\n : []),\n {\n label: t('breakdown.garnishments'),\n amount: parseFloat(receiptData.totals?.childSupportDebit || '0'),\n },\n { label: t('breakdown.taxes'), amount: parseFloat(receiptData.totals?.taxDebit || '0') },\n ]\n\n const receiptDetailsConfig = [\n {\n label: t('receipt.receiptId'),\n value: receiptData.payrollUuid || '',\n },\n {\n label: t('receipt.from'),\n value: receiptData.nameOfSender || '',\n },\n {\n label: t('receipt.to'),\n value: receiptData.nameOfRecipient || 'Payroll Recipients',\n },\n {\n label: t('receipt.debitDate'),\n value: receiptData.debitDate || '',\n },\n ]\n\n const renderReceiptHeader = () => (\n <div className={classNames(styles.receiptHeader, isMobile && styles.receiptHeaderMobile)}>\n <Flex flexDirection=\"column\" gap={24}>\n <Flex flexDirection=\"column\" alignItems=\"center\" gap={16}>\n <div className={styles.receiptIcon}>\n <ReceiptCheck className={styles.checkmarkIcon} />\n </div>\n\n <Flex flexDirection=\"column\" alignItems=\"center\" gap={8}>\n <Text size=\"sm\" variant=\"supporting\">\n {t('receipt.totalLabel')}\n </Text>\n <Heading as=\"h1\" styledAs=\"h2\" className={styles.totalAmount}>\n {formatNumberAsCurrency(parseFloat(receiptData.totals?.companyDebit || '0'))}\n </Heading>\n </Flex>\n </Flex>\n\n <Components.DescriptionList\n layout=\"horizontal\"\n showSeparators={false}\n items={receiptDetailsConfig.map(({ label, value }): DescriptionListItem => ({\n term: (\n <Text size=\"sm\" variant=\"supporting\">\n {label}\n </Text>\n ),\n description: <Text size=\"sm\">{value}</Text>,\n }))}\n />\n\n <Flex flexDirection=\"column\" alignItems=\"center\" gap={12}>\n <Text\n size=\"sm\"\n variant=\"supporting\"\n className={classNames(styles.disclaimer, isMobile && styles.textMobile)}\n >\n {receiptData.recipientNotice}\n </Text>\n\n <Text\n size=\"sm\"\n variant=\"supporting\"\n className={classNames(styles.companyInfo, isMobile && styles.textMobile)}\n >\n <Trans\n i18nKey=\"receipt.companyInfo\"\n t={t}\n components={{\n licensesLink: <Link href={receiptData.licenseUri || ''} target=\"_blank\" />,\n }}\n />\n </Text>\n\n <Text\n size=\"sm\"\n variant=\"supporting\"\n className={classNames(styles.address, isMobile && styles.textMobile)}\n >\n {receiptData.licensee &&\n `${receiptData.licensee.address || ''}, ${receiptData.licensee.city || ''}, ${receiptData.licensee.state || ''} ${receiptData.licensee.postalCode || ''}`}{' '}\n | {formatPhoneNumber(receiptData.licensee?.phoneNumber)}\n </Text>\n </Flex>\n </Flex>\n </div>\n )\n\n const renderBreakdownSection = () => (\n <Flex flexDirection=\"column\" gap={16}>\n <DataTable\n label={t('sections.debitedLabel')}\n columns={[\n {\n title: t('sections.debitedLabel'),\n render: (item: { label: string; amount: number }) => item.label,\n },\n {\n title: t('breakdown.amount'),\n justify: 'end',\n render: (item: { label: string; amount: number }) =>\n formatNumberAsCurrency(item.amount),\n },\n ]}\n data={breakdownData}\n footer={() => ({\n 'column-0': t('breakdown.totals'),\n 'column-1': formatNumberAsCurrency(parseFloat(receiptData.totals?.companyDebit || '0')),\n })}\n />\n </Flex>\n )\n\n const renderTaxBreakdown = () => (\n <Flex flexDirection=\"column\" gap={16}>\n <DataTable\n label={t('sections.taxLabel')}\n columns={[\n {\n title: t('sections.taxLabel'),\n render: (tax: TaxBreakdownItem) => tax.name,\n },\n {\n title: t('tax.amount'),\n justify: 'end',\n render: (tax: TaxBreakdownItem) =>\n formatNumberAsCurrency(parseFloat(tax.amount || '0')),\n },\n ]}\n data={receiptData.taxes || []}\n footer={() => ({\n 'column-0': t('breakdown.totals'),\n 'column-1': formatNumberAsCurrency(parseFloat(receiptData.totals?.taxDebit || '0')),\n })}\n />\n </Flex>\n )\n\n const renderEmployeeBreakdown = () => {\n const footerValues = [\n <Flex flexDirection=\"column\" gap={4} key=\"totals\">\n {t('breakdown.totals')}\n <Text size=\"sm\" variant=\"supporting\">\n {t('employee.totalEmployees', {\n count: receiptData.employeeCompensations?.length || 0,\n })}\n </Text>\n </Flex>,\n '\\u00A0',\n\n formatNumberAsCurrency(getTotalChildSupport()),\n ...(withReimbursements ? [formatNumberAsCurrency(getTotalReimbursements())] : []),\n formatNumberAsCurrency(getTotalTaxes()),\n formatNumberAsCurrency(getTotalNetPay()),\n ]\n\n const footerContent = footerValues.reduce<Record<string, React.ReactNode>>(\n (acc, value, index) => {\n acc[`column-${index}`] = value\n return acc\n },\n {},\n )\n\n return (\n <Flex flexDirection=\"column\" gap={16}>\n {isMobile && <Heading as=\"h2\">{t('sections.employeesLabel')}</Heading>}\n <DataView\n label={t('sections.employeesLabel')}\n columns={[\n {\n title: t('employee.name'),\n render: (employee: EmployeeBreakdownItem) => getEmployeeFullName(employee),\n },\n {\n title: t('employee.paymentMethod'),\n render: (employee: EmployeeBreakdownItem) => employee.paymentMethod || 'N/A',\n },\n {\n title: t('employee.childSupport'),\n justify: 'end',\n render: (employee: EmployeeBreakdownItem) =>\n formatNumberAsCurrency(parseFloat(employee.childSupportGarnishment || '0')),\n },\n ...(withReimbursements\n ? [\n {\n title: t('employee.reimbursement'),\n justify: 'end' as const,\n render: (employee: EmployeeBreakdownItem) =>\n formatNumberAsCurrency(parseFloat(employee.totalReimbursement || '0')),\n },\n ]\n : []),\n {\n title: t('employee.totalTaxes'),\n justify: 'end',\n render: (employee: EmployeeBreakdownItem) =>\n formatNumberAsCurrency(parseFloat(employee.totalTax || '0')),\n },\n {\n title: t('employee.netPay'),\n justify: 'end',\n render: (employee: EmployeeBreakdownItem) =>\n formatNumberAsCurrency(parseFloat(employee.netPay || '0')),\n },\n ]}\n data={receiptData.employeeCompensations || []}\n footer={() => footerContent}\n />\n </Flex>\n )\n }\n\n return (\n <div className={classNames(styles.container, className)} ref={containerRef}>\n <Flex flexDirection=\"column\" gap={24}>\n {renderReceiptHeader()}\n {renderBreakdownSection()}\n {renderTaxBreakdown()}\n {renderEmployeeBreakdown()}\n </Flex>\n </div>\n )\n}\n"],"names":["PayrollReceiptsPresentation","className","receiptData","withReimbursements","Components","useComponentContext","Heading","Text","Link","useI18n","t","useTranslation","containerRef","useRef","isMobile","useContainerBreakpoints","getEmployeeFullName","emp","getTotalChildSupport","sum","getTotalReimbursements","getTotalNetPay","getTotalTaxes","breakdownData","receiptDetailsConfig","renderReceiptHeader","jsx","classNames","styles","jsxs","Flex","ReceiptCheck","formatNumberAsCurrency","label","value","Trans","formatPhoneNumber","renderBreakdownSection","DataTable","item","renderTaxBreakdown","tax","renderEmployeeBreakdown","footerContent","acc","index","DataView","employee"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"PayrollReceiptsPresentation.js","sources":["../../../../src/components/Payroll/PayrollReceipts/PayrollReceiptsPresentation.tsx"],"sourcesContent":["import { useRef } from 'react'\nimport { Trans, useTranslation } from 'react-i18next'\nimport classNames from 'classnames'\nimport type {\n PayrollReceipt,\n Taxes as TaxBreakdownItem,\n PayrollReceiptEmployeeCompensations as EmployeeBreakdownItem,\n} from '@gusto/embedded-api/models/components/payrollreceipt'\nimport styles from './PayrollReceiptsPresentation.module.scss'\nimport { DataView, DataTable, Flex } from '@/components/Common'\nimport type { DescriptionListItem } from '@/components/Common/UI/DescriptionList/DescriptionListTypes'\nimport { useComponentContext } from '@/contexts/ComponentAdapter/useComponentContext'\nimport { formatNumberAsCurrency, formatPhoneNumber } from '@/helpers/formattedStrings'\nimport { useI18n } from '@/i18n'\nimport { useContainerBreakpoints } from '@/hooks/useContainerBreakpoints/useContainerBreakpoints'\nimport ReceiptCheck from '@/assets/icons/receipt-check.svg?react'\n\ninterface PayrollReceiptsPresentationProps {\n className?: string\n receiptData: PayrollReceipt\n withReimbursements?: boolean\n}\n\n/** @internal */\nexport const PayrollReceiptsPresentation = ({\n className,\n receiptData,\n withReimbursements = true,\n}: PayrollReceiptsPresentationProps) => {\n const Components = useComponentContext()\n const { Heading, Text, Link } = Components\n useI18n('Payroll.PayrollReceipts')\n const { t } = useTranslation('Payroll.PayrollReceipts')\n\n const containerRef = useRef<HTMLDivElement>(null)\n const breakpoints = useContainerBreakpoints({ ref: containerRef })\n const isMobile = !breakpoints.includes('small')\n\n // Helper to get employee full name\n const getEmployeeFullName = (emp: EmployeeBreakdownItem) =>\n `${emp.employeeFirstName || ''} ${emp.employeeLastName || ''}`.trim()\n\n const getTotalChildSupport = () =>\n (receiptData.employeeCompensations || []).reduce(\n (sum, emp) => sum + parseFloat(emp.childSupportGarnishment || '0'),\n 0,\n )\n\n const getTotalReimbursements = () =>\n (receiptData.employeeCompensations || []).reduce(\n (sum, emp) => sum + parseFloat(emp.totalReimbursement || '0'),\n 0,\n )\n\n const getTotalNetPay = () =>\n (receiptData.employeeCompensations || []).reduce(\n (sum, emp) => sum + parseFloat(emp.netPay || '0'),\n 0,\n )\n\n const getTotalTaxes = () =>\n (receiptData.employeeCompensations || []).reduce(\n (sum, emp) => sum + parseFloat(emp.totalTax || '0'),\n 0,\n )\n\n const breakdownData = [\n {\n label: t('breakdown.directDeposits'),\n amount: parseFloat(receiptData.totals?.netPayDebit || '0'),\n },\n ...(withReimbursements\n ? [\n {\n label: t('breakdown.reimbursements'),\n amount: parseFloat(receiptData.totals?.reimbursementDebit || '0'),\n },\n ]\n : []),\n {\n label: t('breakdown.garnishments'),\n amount: parseFloat(receiptData.totals?.childSupportDebit || '0'),\n },\n { label: t('breakdown.taxes'), amount: parseFloat(receiptData.totals?.taxDebit || '0') },\n ]\n\n const receiptDetailsConfig = [\n {\n label: t('receipt.receiptId'),\n value: receiptData.payrollUuid || '',\n },\n {\n label: t('receipt.from'),\n value: receiptData.nameOfSender || '',\n },\n {\n label: t('receipt.to'),\n value: receiptData.nameOfRecipient || 'Payroll Recipients',\n },\n {\n label: t('receipt.debitDate'),\n value: receiptData.debitDate || '',\n },\n ]\n\n const renderReceiptHeader = () => (\n <div className={classNames(styles.receiptHeader, isMobile && styles.receiptHeaderMobile)}>\n <Flex flexDirection=\"column\" gap={24}>\n <Flex flexDirection=\"column\" alignItems=\"center\" gap={16}>\n <div className={styles.receiptIcon}>\n <ReceiptCheck className={styles.checkmarkIcon} />\n </div>\n\n <Flex flexDirection=\"column\" alignItems=\"center\" gap={8}>\n <Text size=\"sm\" variant=\"supporting\">\n {t('receipt.totalLabel')}\n </Text>\n <Heading as=\"h1\" styledAs=\"h2\" className={styles.totalAmount}>\n {formatNumberAsCurrency(parseFloat(receiptData.totals?.companyDebit || '0'))}\n </Heading>\n </Flex>\n </Flex>\n\n <Components.DescriptionList\n layout=\"horizontal\"\n showSeparators={false}\n items={receiptDetailsConfig.map(({ label, value }): DescriptionListItem => ({\n term: (\n <Text size=\"sm\" variant=\"supporting\">\n {label}\n </Text>\n ),\n description: <Text size=\"sm\">{value}</Text>,\n }))}\n />\n\n <Flex flexDirection=\"column\" alignItems=\"center\" gap={12}>\n <Text\n size=\"sm\"\n variant=\"supporting\"\n className={classNames(styles.disclaimer, isMobile && styles.textMobile)}\n >\n {receiptData.recipientNotice}\n </Text>\n\n <Text\n size=\"sm\"\n variant=\"supporting\"\n className={classNames(styles.companyInfo, isMobile && styles.textMobile)}\n >\n <Trans\n i18nKey=\"receipt.companyInfo\"\n t={t}\n components={{\n licensesLink: <Link href={receiptData.licenseUri || ''} target=\"_blank\" />,\n }}\n />\n </Text>\n\n <Text\n size=\"sm\"\n variant=\"supporting\"\n className={classNames(styles.address, isMobile && styles.textMobile)}\n >\n {receiptData.licensee &&\n `${receiptData.licensee.address || ''}, ${receiptData.licensee.city || ''}, ${receiptData.licensee.state || ''} ${receiptData.licensee.postalCode || ''}`}{' '}\n | {formatPhoneNumber(receiptData.licensee?.phoneNumber)}\n </Text>\n </Flex>\n </Flex>\n </div>\n )\n\n const renderBreakdownSection = () => (\n <Flex flexDirection=\"column\" gap={16} alignItems=\"stretch\">\n <DataTable\n label={t('sections.debitedLabel')}\n columns={[\n {\n title: t('sections.debitedLabel'),\n render: (item: { label: string; amount: number }) => item.label,\n },\n {\n title: t('breakdown.amount'),\n justify: 'end',\n render: (item: { label: string; amount: number }) =>\n formatNumberAsCurrency(item.amount),\n },\n ]}\n data={breakdownData}\n footer={() => ({\n 'column-0': t('breakdown.totals'),\n 'column-1': formatNumberAsCurrency(parseFloat(receiptData.totals?.companyDebit || '0')),\n })}\n />\n </Flex>\n )\n\n const renderTaxBreakdown = () => (\n <Flex flexDirection=\"column\" gap={16} alignItems=\"stretch\">\n <DataTable\n label={t('sections.taxLabel')}\n columns={[\n {\n title: t('sections.taxLabel'),\n render: (tax: TaxBreakdownItem) => tax.name,\n },\n {\n title: t('tax.amount'),\n justify: 'end',\n render: (tax: TaxBreakdownItem) =>\n formatNumberAsCurrency(parseFloat(tax.amount || '0')),\n },\n ]}\n data={receiptData.taxes || []}\n footer={() => ({\n 'column-0': t('breakdown.totals'),\n 'column-1': formatNumberAsCurrency(parseFloat(receiptData.totals?.taxDebit || '0')),\n })}\n />\n </Flex>\n )\n\n const renderEmployeeBreakdown = () => {\n const footerValues = [\n <Flex flexDirection=\"column\" gap={4} key=\"totals\">\n {t('breakdown.totals')}\n <Text size=\"sm\" variant=\"supporting\">\n {t('employee.totalEmployees', {\n count: receiptData.employeeCompensations?.length || 0,\n })}\n </Text>\n </Flex>,\n '\\u00A0',\n\n formatNumberAsCurrency(getTotalChildSupport()),\n ...(withReimbursements ? [formatNumberAsCurrency(getTotalReimbursements())] : []),\n formatNumberAsCurrency(getTotalTaxes()),\n formatNumberAsCurrency(getTotalNetPay()),\n ]\n\n const footerContent = footerValues.reduce<Record<string, React.ReactNode>>(\n (acc, value, index) => {\n acc[`column-${index}`] = value\n return acc\n },\n {},\n )\n\n return (\n <Flex flexDirection=\"column\" gap={16} alignItems=\"stretch\">\n {isMobile && <Heading as=\"h2\">{t('sections.employeesLabel')}</Heading>}\n <DataView\n label={t('sections.employeesLabel')}\n columns={[\n {\n title: t('employee.name'),\n render: (employee: EmployeeBreakdownItem) => getEmployeeFullName(employee),\n },\n {\n title: t('employee.paymentMethod'),\n render: (employee: EmployeeBreakdownItem) => employee.paymentMethod || 'N/A',\n },\n {\n title: t('employee.childSupport'),\n justify: 'end',\n render: (employee: EmployeeBreakdownItem) =>\n formatNumberAsCurrency(parseFloat(employee.childSupportGarnishment || '0')),\n },\n ...(withReimbursements\n ? [\n {\n title: t('employee.reimbursement'),\n justify: 'end' as const,\n render: (employee: EmployeeBreakdownItem) =>\n formatNumberAsCurrency(parseFloat(employee.totalReimbursement || '0')),\n },\n ]\n : []),\n {\n title: t('employee.totalTaxes'),\n justify: 'end',\n render: (employee: EmployeeBreakdownItem) =>\n formatNumberAsCurrency(parseFloat(employee.totalTax || '0')),\n },\n {\n title: t('employee.netPay'),\n justify: 'end',\n render: (employee: EmployeeBreakdownItem) =>\n formatNumberAsCurrency(parseFloat(employee.netPay || '0')),\n },\n ]}\n data={receiptData.employeeCompensations || []}\n footer={() => footerContent}\n />\n </Flex>\n )\n }\n\n return (\n <div className={classNames(styles.container, className)} ref={containerRef}>\n <Flex flexDirection=\"column\" gap={24}>\n {renderReceiptHeader()}\n {renderBreakdownSection()}\n {renderTaxBreakdown()}\n {renderEmployeeBreakdown()}\n </Flex>\n </div>\n )\n}\n"],"names":["PayrollReceiptsPresentation","className","receiptData","withReimbursements","Components","useComponentContext","Heading","Text","Link","useI18n","t","useTranslation","containerRef","useRef","isMobile","useContainerBreakpoints","getEmployeeFullName","emp","getTotalChildSupport","sum","getTotalReimbursements","getTotalNetPay","getTotalTaxes","breakdownData","receiptDetailsConfig","renderReceiptHeader","jsx","classNames","styles","jsxs","Flex","ReceiptCheck","formatNumberAsCurrency","label","value","Trans","formatPhoneNumber","renderBreakdownSection","DataTable","item","renderTaxBreakdown","tax","renderEmployeeBreakdown","footerContent","acc","index","DataView","employee"],"mappings":"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"}
|
|
@@ -1,26 +1,26 @@
|
|
|
1
|
-
const e = "
|
|
1
|
+
const e = "_container_3t7i9_1", t = "_receiptHeader_3t7i9_12", c = "_receiptIcon_3t7i9_21", o = "_checkmarkIcon_3t7i9_32", i = "_totalAmount_3t7i9_38", n = "_disclaimer_3t7i9_43", _ = "_companyInfo_3t7i9_48", r = "_address_3t7i9_52", a = "_receiptHeaderMobile_3t7i9_65", s = "_textMobile_3t7i9_69", d = {
|
|
2
2
|
container: e,
|
|
3
|
-
receiptHeader:
|
|
4
|
-
receiptIcon:
|
|
3
|
+
receiptHeader: t,
|
|
4
|
+
receiptIcon: c,
|
|
5
5
|
checkmarkIcon: o,
|
|
6
|
-
totalAmount:
|
|
6
|
+
totalAmount: i,
|
|
7
7
|
disclaimer: n,
|
|
8
8
|
companyInfo: _,
|
|
9
|
-
address:
|
|
10
|
-
receiptHeaderMobile:
|
|
11
|
-
textMobile:
|
|
9
|
+
address: r,
|
|
10
|
+
receiptHeaderMobile: a,
|
|
11
|
+
textMobile: s
|
|
12
12
|
};
|
|
13
13
|
export {
|
|
14
|
-
|
|
14
|
+
r as address,
|
|
15
15
|
o as checkmarkIcon,
|
|
16
16
|
_ as companyInfo,
|
|
17
17
|
e as container,
|
|
18
|
-
|
|
18
|
+
d as default,
|
|
19
19
|
n as disclaimer,
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
20
|
+
t as receiptHeader,
|
|
21
|
+
a as receiptHeaderMobile,
|
|
22
|
+
c as receiptIcon,
|
|
23
|
+
s as textMobile,
|
|
24
|
+
i as totalAmount
|
|
25
25
|
};
|
|
26
26
|
//# sourceMappingURL=PayrollReceiptsPresentation.module.scss.js.map
|
|
@@ -1,40 +1,40 @@
|
|
|
1
|
-
import { jsx as t, jsxs as
|
|
1
|
+
import { jsx as t, jsxs as h } from "react/jsx-runtime";
|
|
2
2
|
import { useTranslation as i } from "react-i18next";
|
|
3
|
-
import { BaseComponent as
|
|
3
|
+
import { BaseComponent as d } from "../../../Base/Base.js";
|
|
4
4
|
import "../../../Base/useBase.js";
|
|
5
5
|
import { useComponentContext as l } from "../../../../contexts/ComponentAdapter/useComponentContext.js";
|
|
6
6
|
import { useComponentDictionary as P, useI18n as c } from "../../../../i18n/I18n.js";
|
|
7
|
-
import { Flex as
|
|
8
|
-
import { ActionsLayout as
|
|
9
|
-
import { printChecksEvents as
|
|
7
|
+
import { Flex as f } from "../../../Common/Flex/Flex.js";
|
|
8
|
+
import { ActionsLayout as a } from "../../../Common/ActionsLayout/ActionsLayout.js";
|
|
9
|
+
import { printChecksEvents as s } from "../../../../shared/constants.js";
|
|
10
10
|
function p(r) {
|
|
11
|
-
return /* @__PURE__ */ t(
|
|
11
|
+
return /* @__PURE__ */ t(d, { ...r, children: /* @__PURE__ */ t(y, { ...r, children: r.children }) });
|
|
12
12
|
}
|
|
13
|
-
const y = ({ dictionary: r, errorMessage: o, onEvent: e, className:
|
|
13
|
+
const y = ({ dictionary: r, errorMessage: o, onEvent: e, className: m }) => {
|
|
14
14
|
P("Payroll.PrintChecksFailure", r), c("Payroll.PrintChecksFailure");
|
|
15
|
-
const { t: n } = i("Payroll.PrintChecksFailure"), { Alert:
|
|
16
|
-
return /* @__PURE__ */
|
|
17
|
-
/* @__PURE__ */ t(
|
|
18
|
-
/* @__PURE__ */ t(
|
|
19
|
-
|
|
15
|
+
const { t: n } = i("Payroll.PrintChecksFailure"), { Alert: u, Button: C } = l();
|
|
16
|
+
return /* @__PURE__ */ h(f, { className: m, flexDirection: "column", gap: 16, children: [
|
|
17
|
+
/* @__PURE__ */ t(u, { status: "error", disableScrollIntoView: !0, label: n("failedTitle"), children: o }),
|
|
18
|
+
/* @__PURE__ */ t(a, { children: /* @__PURE__ */ t(
|
|
19
|
+
C,
|
|
20
20
|
{
|
|
21
21
|
variant: "secondary",
|
|
22
22
|
onClick: () => {
|
|
23
|
-
e(
|
|
23
|
+
e(s.PRINT_CHECKS_RETRY);
|
|
24
24
|
},
|
|
25
25
|
children: n("retryCta")
|
|
26
26
|
}
|
|
27
|
-
)
|
|
27
|
+
) })
|
|
28
28
|
] });
|
|
29
29
|
}, k = ({ onEvent: r }) => {
|
|
30
30
|
c("Payroll.PrintChecksFailure");
|
|
31
31
|
const { t: o } = i("Payroll.PrintChecksFailure"), { Button: e } = l();
|
|
32
|
-
return /* @__PURE__ */ t(
|
|
32
|
+
return /* @__PURE__ */ t(a, { children: /* @__PURE__ */ t(
|
|
33
33
|
e,
|
|
34
34
|
{
|
|
35
35
|
variant: "secondary",
|
|
36
36
|
onClick: () => {
|
|
37
|
-
r(
|
|
37
|
+
r(s.PRINT_CHECKS_CLOSE);
|
|
38
38
|
},
|
|
39
39
|
children: o("closeCta")
|
|
40
40
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PrintChecksFailure.js","sources":["../../../../../src/components/Payroll/PrintChecks/PrintChecksFailure/PrintChecksFailure.tsx"],"sourcesContent":["import { useTranslation } from 'react-i18next'\nimport { BaseComponent, type BaseComponentInterface } from '@/components/Base'\nimport type { OnEventType } from '@/components/Base/useBase'\nimport { useComponentContext } from '@/contexts/ComponentAdapter/useComponentContext'\nimport { useComponentDictionary, useI18n } from '@/i18n'\nimport { ActionsLayout, Flex } from '@/components/Common'\nimport { printChecksEvents, type EventType } from '@/shared/constants'\n\ninterface PrintChecksFailureProps extends BaseComponentInterface<'Payroll.PrintChecksFailure'> {\n errorMessage?: string\n}\n\n/** @internal */\nexport function PrintChecksFailure(props: PrintChecksFailureProps) {\n return (\n <BaseComponent {...props}>\n <Root {...props}>{props.children}</Root>\n </BaseComponent>\n )\n}\n\nconst Root = ({ dictionary, errorMessage, onEvent, className }: PrintChecksFailureProps) => {\n useComponentDictionary('Payroll.PrintChecksFailure', dictionary)\n useI18n('Payroll.PrintChecksFailure')\n const { t } = useTranslation('Payroll.PrintChecksFailure')\n const { Alert, Button } = useComponentContext()\n\n return (\n <Flex className={className} flexDirection=\"column\" gap={16}>\n <Alert status=\"error\" disableScrollIntoView label={t('failedTitle')}>\n {errorMessage}\n </Alert>\n <Button\n
|
|
1
|
+
{"version":3,"file":"PrintChecksFailure.js","sources":["../../../../../src/components/Payroll/PrintChecks/PrintChecksFailure/PrintChecksFailure.tsx"],"sourcesContent":["import { useTranslation } from 'react-i18next'\nimport { BaseComponent, type BaseComponentInterface } from '@/components/Base'\nimport type { OnEventType } from '@/components/Base/useBase'\nimport { useComponentContext } from '@/contexts/ComponentAdapter/useComponentContext'\nimport { useComponentDictionary, useI18n } from '@/i18n'\nimport { ActionsLayout, Flex } from '@/components/Common'\nimport { printChecksEvents, type EventType } from '@/shared/constants'\n\ninterface PrintChecksFailureProps extends BaseComponentInterface<'Payroll.PrintChecksFailure'> {\n errorMessage?: string\n}\n\n/** @internal */\nexport function PrintChecksFailure(props: PrintChecksFailureProps) {\n return (\n <BaseComponent {...props}>\n <Root {...props}>{props.children}</Root>\n </BaseComponent>\n )\n}\n\nconst Root = ({ dictionary, errorMessage, onEvent, className }: PrintChecksFailureProps) => {\n useComponentDictionary('Payroll.PrintChecksFailure', dictionary)\n useI18n('Payroll.PrintChecksFailure')\n const { t } = useTranslation('Payroll.PrintChecksFailure')\n const { Alert, Button } = useComponentContext()\n\n return (\n <Flex className={className} flexDirection=\"column\" gap={16}>\n <Alert status=\"error\" disableScrollIntoView label={t('failedTitle')}>\n {errorMessage}\n </Alert>\n <ActionsLayout>\n <Button\n variant=\"secondary\"\n onClick={() => {\n onEvent(printChecksEvents.PRINT_CHECKS_RETRY)\n }}\n >\n {t('retryCta')}\n </Button>\n </ActionsLayout>\n </Flex>\n )\n}\n\nconst Footer = ({ onEvent }: { onEvent: OnEventType<EventType, unknown> }) => {\n useI18n('Payroll.PrintChecksFailure')\n const { t } = useTranslation('Payroll.PrintChecksFailure')\n const { Button } = useComponentContext()\n\n return (\n <ActionsLayout>\n <Button\n variant=\"secondary\"\n onClick={() => {\n onEvent(printChecksEvents.PRINT_CHECKS_CLOSE)\n }}\n >\n {t('closeCta')}\n </Button>\n </ActionsLayout>\n )\n}\nPrintChecksFailure.Footer = Footer\n"],"names":["PrintChecksFailure","props","jsx","BaseComponent","Root","dictionary","errorMessage","onEvent","className","useComponentDictionary","useI18n","t","useTranslation","Alert","Button","useComponentContext","Flex","ActionsLayout","printChecksEvents","Footer"],"mappings":";;;;;;;;;AAaO,SAASA,EAAmBC,GAAgC;AACjE,SACE,gBAAAC,EAACC,GAAA,EAAe,GAAGF,GACjB,UAAA,gBAAAC,EAACE,KAAM,GAAGH,GAAQ,UAAAA,EAAM,SAAA,CAAS,EAAA,CACnC;AAEJ;AAEA,MAAMG,IAAO,CAAC,EAAE,YAAAC,GAAY,cAAAC,GAAc,SAAAC,GAAS,WAAAC,QAAyC;AAC1F,EAAAC,EAAuB,8BAA8BJ,CAAU,GAC/DK,EAAQ,4BAA4B;AACpC,QAAM,EAAE,GAAAC,EAAA,IAAMC,EAAe,4BAA4B,GACnD,EAAE,OAAAC,GAAO,QAAAC,EAAA,IAAWC,EAAA;AAE1B,2BACGC,GAAA,EAAK,WAAAR,GAAsB,eAAc,UAAS,KAAK,IACtD,UAAA;AAAA,IAAA,gBAAAN,EAACW,GAAA,EAAM,QAAO,SAAQ,uBAAqB,IAAC,OAAOF,EAAE,aAAa,GAC/D,UAAAL,EAAA,CACH;AAAA,sBACCW,GAAA,EACC,UAAA,gBAAAf;AAAA,MAACY;AAAA,MAAA;AAAA,QACC,SAAQ;AAAA,QACR,SAAS,MAAM;AACb,UAAAP,EAAQW,EAAkB,kBAAkB;AAAA,QAC9C;AAAA,QAEC,YAAE,UAAU;AAAA,MAAA;AAAA,IAAA,EACf,CACF;AAAA,EAAA,GACF;AAEJ,GAEMC,IAAS,CAAC,EAAE,SAAAZ,QAA4D;AAC5E,EAAAG,EAAQ,4BAA4B;AACpC,QAAM,EAAE,GAAAC,EAAA,IAAMC,EAAe,4BAA4B,GACnD,EAAE,QAAAE,EAAA,IAAWC,EAAA;AAEnB,2BACGE,GAAA,EACC,UAAA,gBAAAf;AAAA,IAACY;AAAA,IAAA;AAAA,MACC,SAAQ;AAAA,MACR,SAAS,MAAM;AACb,QAAAP,EAAQW,EAAkB,kBAAkB;AAAA,MAC9C;AAAA,MAEC,YAAE,UAAU;AAAA,IAAA;AAAA,EAAA,GAEjB;AAEJ;AACAlB,EAAmB,SAASmB;"}
|