@gusto/embedded-react-sdk 0.44.0 → 0.44.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (170) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/dist/components/Base/useBaseSubmit.js +6 -6
  3. package/dist/components/Base/useBaseSubmit.js.map +1 -1
  4. package/dist/components/Company/AssignSignatory/AssignSignatorySelection.js +1 -1
  5. package/dist/components/Company/AssignSignatory/CreateSignatory/Actions.js +1 -1
  6. package/dist/components/Company/AssignSignatory/CreateSignatory/useCreateSignatory.js +1 -1
  7. package/dist/components/Company/AssignSignatory/InviteSignatory/Actions.js +1 -1
  8. package/dist/components/Company/AssignSignatory/InviteSignatory/useInviteSignatory.js +1 -1
  9. package/dist/components/Company/AssignSignatory/TitleSelect.js +1 -1
  10. package/dist/components/Company/AssignSignatory/useAssignSignatory.js +1 -1
  11. package/dist/components/Company/BankAccount/BankAccountForm/Actions.js +1 -1
  12. package/dist/components/Company/BankAccount/BankAccountForm/context.js +1 -1
  13. package/dist/components/Company/BankAccount/BankAccountList/Actions.js +1 -1
  14. package/dist/components/Company/BankAccount/BankAccountVerify/Actions.js +1 -1
  15. package/dist/components/Company/DocumentSigner/DocumentList/Actions.js +1 -1
  16. package/dist/components/Company/DocumentSigner/DocumentList/DocumentList.js +9 -9
  17. package/dist/components/Company/DocumentSigner/DocumentList/DocumentList.js.map +1 -1
  18. package/dist/components/Company/DocumentSigner/DocumentList/useDocumentList.js +1 -1
  19. package/dist/components/Company/FederalTaxes/Actions.js +1 -1
  20. package/dist/components/Company/FederalTaxes/useFederalTaxes.js +1 -1
  21. package/dist/components/Company/Industry/Actions.js +1 -1
  22. package/dist/components/Company/Industry/Context.js +1 -1
  23. package/dist/components/Company/Industry/Edit.js +1 -1
  24. package/dist/components/Company/Locations/LocationForm/Actions.js +1 -1
  25. package/dist/components/Company/Locations/LocationForm/useLocationForm.js +1 -1
  26. package/dist/components/Company/Locations/LocationsList/Actions.js +1 -1
  27. package/dist/components/Company/Locations/LocationsList/List.js +1 -1
  28. package/dist/components/Company/Locations/LocationsList/useLocationsList.js +1 -1
  29. package/dist/components/Company/OnboardingOverview/context.js +1 -1
  30. package/dist/components/Company/PaySchedule/PaySchedule.d.ts +2 -2
  31. package/dist/components/Company/PaySchedule/PaySchedule.js +6 -6
  32. package/dist/components/Company/PaySchedule/PaySchedule.js.map +1 -1
  33. package/dist/components/Company/PaySchedule/PayScheduleList.js +8 -8
  34. package/dist/components/Company/PaySchedule/PayScheduleList.js.map +1 -1
  35. package/dist/components/Company/PaySchedule/shared/usePayScheduleForm/usePayScheduleForm.d.ts +3 -3
  36. package/dist/components/Company/PaySchedule/shared/usePayScheduleForm/usePayScheduleForm.js +12 -12
  37. package/dist/components/Company/PaySchedule/shared/usePayScheduleForm/usePayScheduleForm.js.map +1 -1
  38. package/dist/components/Company/StateTaxes/StateTaxesForm/Actions.js +1 -1
  39. package/dist/components/Company/StateTaxes/StateTaxesForm/context.js +1 -1
  40. package/dist/components/Company/StateTaxes/StateTaxesList/Actions.js +1 -1
  41. package/dist/components/Company/StateTaxes/StateTaxesList/context.js +1 -1
  42. package/dist/components/Contractor/Address/Address.js +16 -16
  43. package/dist/components/Contractor/Address/Address.js.map +1 -1
  44. package/dist/components/Contractor/Address/Form.js +4 -4
  45. package/dist/components/Contractor/Address/useAddress.js +1 -1
  46. package/dist/components/Contractor/PaymentMethod/PaymentMethod.js +8 -8
  47. package/dist/components/Contractor/PaymentMethod/PaymentMethod.js.map +1 -1
  48. package/dist/components/Contractor/PaymentMethod/PaymentTypeForm.js +1 -1
  49. package/dist/components/Contractor/Payments/PaymentsList/PaymentsList.js +5 -5
  50. package/dist/components/Contractor/Payments/PaymentsList/PaymentsList.js.map +1 -1
  51. package/dist/components/Contractor/Profile/useContractorProfile.js +1 -1
  52. package/dist/components/Contractor/Submit/Submit.js +22 -20
  53. package/dist/components/Contractor/Submit/Submit.js.map +1 -1
  54. package/dist/components/Employee/Dashboard/hooks/useEmployeeCompensation.d.ts +1 -1
  55. package/dist/components/Employee/Dashboard/hooks/useEmployeeCompensation.js +6 -6
  56. package/dist/components/Employee/Dashboard/hooks/useEmployeeCompensation.js.map +1 -1
  57. package/dist/components/Employee/Dashboard/hooks/useEmployeeForms.js +3 -3
  58. package/dist/components/Employee/Dashboard/hooks/useEmployeeForms.js.map +1 -1
  59. package/dist/components/Employee/Deductions/Deductions.js +7 -7
  60. package/dist/components/Employee/Deductions/Deductions.js.map +1 -1
  61. package/dist/components/Employee/Deductions/DeductionsForm/ChildSupportForm.js +24 -24
  62. package/dist/components/Employee/Deductions/DeductionsForm/ChildSupportForm.js.map +1 -1
  63. package/dist/components/Employee/Deductions/DeductionsForm/CustomDeductionForm.js +13 -9
  64. package/dist/components/Employee/Deductions/DeductionsForm/CustomDeductionForm.js.map +1 -1
  65. package/dist/components/Employee/Deductions/DeductionsForm/DeductionsForm.js +2 -2
  66. package/dist/components/Employee/Deductions/DeductionsForm/DeductionsForm.js.map +1 -1
  67. package/dist/components/Employee/Deductions/DeductionsForm/GarnishmentForm.d.ts +1 -2
  68. package/dist/components/Employee/Deductions/DeductionsForm/GarnishmentForm.js +17 -17
  69. package/dist/components/Employee/Deductions/DeductionsForm/GarnishmentForm.js.map +1 -1
  70. package/dist/components/Employee/Deductions/DeductionsList/DeductionsList.js +30 -30
  71. package/dist/components/Employee/Deductions/DeductionsList/DeductionsList.js.map +1 -1
  72. package/dist/components/Employee/DocumentSigner/DocumentList/Actions.js +1 -1
  73. package/dist/components/Employee/DocumentSigner/DocumentList/DocumentList.js +8 -8
  74. package/dist/components/Employee/DocumentSigner/DocumentList/DocumentList.js.map +1 -1
  75. package/dist/components/Employee/DocumentSigner/DocumentList/useDocumentList.js +1 -1
  76. package/dist/components/Employee/DocumentSigner/DocumentSigner.js +1 -1
  77. package/dist/components/Employee/DocumentSigner/DocumentSigner.js.map +1 -1
  78. package/dist/components/Employee/DocumentSigner/EmploymentEligibility/EmploymentEligibilityPresentation.js +12 -12
  79. package/dist/components/Employee/DocumentSigner/EmploymentEligibility/EmploymentEligibilityPresentation.js.map +1 -1
  80. package/dist/components/Employee/DocumentSigner/EmploymentEligibility/EmploymentEligibilitySchema.js +1 -1
  81. package/dist/components/Employee/DocumentSigner/EmploymentEligibility/EmploymentEligibilitySchema.js.map +1 -1
  82. package/dist/components/Employee/FederalTaxes/management/FederalTaxes.js +1 -1
  83. package/dist/components/Employee/FederalTaxes/onboarding/FederalTaxes.js +1 -1
  84. package/dist/components/Employee/PaymentMethod/Actions.js +1 -1
  85. package/dist/components/Employee/PaymentMethod/BankAccountEdit.js +1 -1
  86. package/dist/components/Employee/PaymentMethod/BankAccountsList.js +1 -1
  87. package/dist/components/Employee/PaymentMethod/PaymentMethod.js +14 -14
  88. package/dist/components/Employee/PaymentMethod/PaymentMethod.js.map +1 -1
  89. package/dist/components/Employee/PaymentMethod/PaymentTypeForm.js +1 -1
  90. package/dist/components/Employee/PaymentMethod/Split.js +1 -1
  91. package/dist/components/Employee/PaymentMethod/usePaymentMethod.js +1 -1
  92. package/dist/components/Employee/Profile/management/Profile.js +1 -1
  93. package/dist/components/Employee/Profile/onboarding/AdminProfile.js +1 -1
  94. package/dist/components/Employee/Profile/onboarding/EmployeeProfile.js +1 -1
  95. package/dist/components/Employee/StateTaxes/management/StateTaxes.js +1 -1
  96. package/dist/components/Employee/StateTaxes/onboarding/StateTaxes.js +1 -1
  97. package/dist/components/Employee/StateTaxes/shared/EmployeeStateTaxesView.js +19 -17
  98. package/dist/components/Employee/StateTaxes/shared/EmployeeStateTaxesView.js.map +1 -1
  99. package/dist/components/Employee/StateTaxes/shared/EmployeeStateTaxesView.module.scss.js +8 -0
  100. package/dist/components/Employee/StateTaxes/shared/EmployeeStateTaxesView.module.scss.js.map +1 -0
  101. package/dist/components/Employee/Taxes/Actions.js +1 -1
  102. package/dist/components/Employee/Taxes/FederalForm.js +1 -1
  103. package/dist/components/Employee/Taxes/useTaxes.js +1 -1
  104. package/dist/components/Employee/Terminations/TerminateEmployee/TerminateEmployee.js +11 -11
  105. package/dist/components/Employee/Terminations/TerminateEmployee/TerminateEmployee.js.map +1 -1
  106. package/dist/components/Employee/Terminations/TerminationSummary/TerminationSummary.js +3 -3
  107. package/dist/components/Employee/Terminations/TerminationSummary/TerminationSummary.js.map +1 -1
  108. package/dist/components/InformationRequests/InformationRequestForm/InformationRequestForm.js +40 -45
  109. package/dist/components/InformationRequests/InformationRequestForm/InformationRequestForm.js.map +1 -1
  110. package/dist/components/InformationRequests/InformationRequestList/InformationRequestList.js +1 -1
  111. package/dist/components/InformationRequests/InformationRequestList/InformationRequestList.js.map +1 -1
  112. package/dist/components/Payroll/ConfirmWireDetails/ConfirmWireDetailsForm/ConfirmWireDetailsForm.js +17 -17
  113. package/dist/components/Payroll/ConfirmWireDetails/ConfirmWireDetailsForm/ConfirmWireDetailsForm.js.map +1 -1
  114. package/dist/components/Payroll/Dismissal/DismissalPayPeriodSelection/DismissalPayPeriodSelection.js +7 -7
  115. package/dist/components/Payroll/Dismissal/DismissalPayPeriodSelection/DismissalPayPeriodSelection.js.map +1 -1
  116. package/dist/components/Payroll/GrossUpModal/GrossUpModal.js +1 -1
  117. package/dist/components/Payroll/OffCyclePayPeriodDateForm/OffCyclePayPeriodDateFormPresentation.js +1 -1
  118. package/dist/components/Payroll/OffCycleReasonSelection/OffCycleReasonSelectionPresentation.js +1 -1
  119. package/dist/components/Payroll/OffCycleTaxWithholdingModal/OffCycleTaxWithholdingModal.js +1 -1
  120. package/dist/components/Payroll/PayrollBlocker/components/PayrollBlockerList.js +10 -10
  121. package/dist/components/Payroll/PayrollBlocker/components/PayrollBlockerList.js.map +1 -1
  122. package/dist/components/Payroll/PayrollBlocker/payrollHelpers.d.ts +2 -2
  123. package/dist/components/Payroll/PayrollBlocker/payrollHelpers.js +21 -25
  124. package/dist/components/Payroll/PayrollBlocker/payrollHelpers.js.map +1 -1
  125. package/dist/components/Payroll/PayrollConfiguration/PayrollConfigurationPresentation.d.ts +1 -1
  126. package/dist/components/Payroll/PayrollConfiguration/PayrollConfigurationPresentation.js.map +1 -1
  127. package/dist/components/Payroll/PayrollConfiguration/usePayrollConfigurationData.d.ts +2 -2
  128. package/dist/components/Payroll/PayrollConfiguration/usePayrollConfigurationData.js +1 -1
  129. package/dist/components/Payroll/PayrollConfiguration/usePayrollConfigurationData.js.map +1 -1
  130. package/dist/components/Payroll/PayrollEditEmployee/PayrollEditEmployee.js +4 -4
  131. package/dist/components/Payroll/PayrollEditEmployee/PayrollEditEmployee.js.map +1 -1
  132. package/dist/components/Payroll/PayrollEditEmployee/PayrollEditEmployeePresentation.d.ts +1 -1
  133. package/dist/components/Payroll/PayrollEditEmployee/PayrollEditEmployeePresentation.js.map +1 -1
  134. package/dist/components/Payroll/PayrollList/PayrollList.js +4 -4
  135. package/dist/components/Payroll/PayrollList/PayrollList.js.map +1 -1
  136. package/dist/components/Payroll/PayrollList/PayrollListPresentation.d.ts +2 -2
  137. package/dist/components/Payroll/PayrollList/PayrollListPresentation.js.map +1 -1
  138. package/dist/components/Payroll/RecoveryCases/RecoveryCasesList/RecoveryCasesList.js +5 -5
  139. package/dist/components/Payroll/RecoveryCases/RecoveryCasesList/RecoveryCasesList.js.map +1 -1
  140. package/dist/components/Payroll/RecoveryCases/RecoveryCasesResubmit/RecoveryCasesResubmit.js +1 -1
  141. package/dist/components/Payroll/RecoveryCases/RecoveryCasesResubmit/RecoveryCasesResubmit.js.map +1 -1
  142. package/dist/components/Payroll/TransitionCreation/TransitionCreation.js +7 -7
  143. package/dist/components/Payroll/TransitionCreation/TransitionCreation.js.map +1 -1
  144. package/dist/components/Payroll/TransitionPayrollAlert/TransitionPayrollAlert.d.ts +1 -1
  145. package/dist/components/Payroll/TransitionPayrollAlert/TransitionPayrollAlert.js +70 -53
  146. package/dist/components/Payroll/TransitionPayrollAlert/TransitionPayrollAlert.js.map +1 -1
  147. package/dist/components/Payroll/TransitionPayrollAlert/TransitionPayrollAlertPresentation.d.ts +1 -1
  148. package/dist/components/Payroll/TransitionPayrollAlert/TransitionPayrollAlertPresentation.js.map +1 -1
  149. package/dist/components/Payroll/helpers.d.ts +1 -1
  150. package/dist/components/Payroll/helpers.js.map +1 -1
  151. package/dist/components/Payroll/usePreparedPayrollData.d.ts +2 -2
  152. package/dist/components/Payroll/usePreparedPayrollData.js +10 -10
  153. package/dist/components/Payroll/usePreparedPayrollData.js.map +1 -1
  154. package/dist/components/TimeOff/HolidayPolicyDetail/HolidayPolicyDetailPresentation.js +1 -1
  155. package/dist/components/TimeOff/TimeOffManagement/SelectEmployees/SelectEmployeesTimeOff.js +41 -41
  156. package/dist/components/TimeOff/TimeOffManagement/SelectEmployees/SelectEmployeesTimeOff.js.map +1 -1
  157. package/dist/components/TimeOff/shared/EmployeeTable/EmployeeTable.js +1 -1
  158. package/dist/components/TimeOff/shared/PolicyDetailLayout/PolicyDetailLayout.js +1 -1
  159. package/dist/contexts/GustoProvider/GustoProviderCustomUIAdapter.js +1 -1
  160. package/dist/helpers/dateFormatting.js +52 -56
  161. package/dist/helpers/dateFormatting.js.map +1 -1
  162. package/dist/partner-hook-utils/form/fields/CheckboxHookField.js +1 -1
  163. package/dist/partner-hook-utils/form/fields/NumberInputHookField.js +1 -1
  164. package/dist/partner-hook-utils/form/fields/RadioGroupHookField.js +1 -1
  165. package/dist/partner-hook-utils/form/fields/SelectHookField.js +1 -1
  166. package/dist/partner-hook-utils/form/fields/SwitchHookField.js +1 -1
  167. package/dist/partner-hook-utils/form/fields/TextInputHookField.js +1 -1
  168. package/dist/style.css +1 -1
  169. package/dist/test-utils/assertions.d.ts +4 -0
  170. package/package.json +13 -10
@@ -1,83 +1,100 @@
1
- import { jsx as i } from "react/jsx-runtime";
2
- import { useState as h, useMemo as r, useCallback as l } from "react";
3
- import { usePaySchedulesGetPayPeriodsSuspense as N } from "@gusto/embedded-api/react-query/paySchedulesGetPayPeriods";
4
- import { usePaySchedulesGetAllSuspense as O } from "@gusto/embedded-api/react-query/paySchedulesGetAll";
5
- import { usePayrollsSkipMutation as _ } from "@gusto/embedded-api/react-query/payrollsSkip";
6
- import { PayrollType as v } from "@gusto/embedded-api/models/operations/postcompaniespayrollskipcompanyuuid";
7
- import { PayrollTypes as L } from "@gusto/embedded-api/models/operations/getv1companiescompanyidpayperiods";
8
- import { RFCDate as b } from "@gusto/embedded-api/types/rfcdate";
9
- import { TransitionPayrollAlertPresentation as x } from "./TransitionPayrollAlertPresentation.js";
10
- import { BaseComponent as B } from "../../Base/Base.js";
11
- import { useBase as C } from "../../Base/useBase.js";
12
- import { componentEvents as f } from "../../../shared/constants.js";
13
- const M = 90;
14
- function X(t) {
15
- return /* @__PURE__ */ i(B, { onEvent: t.onEvent, children: /* @__PURE__ */ i(Y, { ...t }) });
16
- }
17
- function Y({ companyId: t }) {
18
- const { onEvent: n, baseSubmitHandler: u } = C(), [P, c] = h(!1), [A, d] = h(null), T = r(() => {
19
- const e = /* @__PURE__ */ new Date();
20
- return e.setDate(e.getDate() + M), new b(e);
21
- }, []), { data: p } = N({
22
- companyId: t,
23
- payrollTypes: L.Transition,
24
- endDate: T
25
- }), { data: k } = O({ companyId: t }), m = k.paySchedules ?? [], { mutateAsync: S } = _(), y = r(() => (p.payPeriods ?? []).filter((s) => !s.payroll?.processed), [p]), D = r(() => {
26
- const e = /* @__PURE__ */ new Map();
27
- for (const s of y) {
28
- const a = s.payScheduleUuid ?? "unknown", o = e.get(a) ?? [];
29
- o.push(s), e.set(a, o);
1
+ import { jsx as D } from "react/jsx-runtime";
2
+ import { useMemo as P, useEffect as E, useState as A, useCallback as f } from "react";
3
+ import { usePaySchedulesGetPayPeriods as R } from "@gusto/embedded-api/react-query/paySchedulesGetPayPeriods";
4
+ import { usePaySchedulesGetAll as N } from "@gusto/embedded-api/react-query/paySchedulesGetAll";
5
+ import { usePayrollsSkipMutation as O } from "@gusto/embedded-api/react-query/payrollsSkip";
6
+ import { PayrollType as w } from "@gusto/embedded-api/models/operations/postcompaniespayrollskipcompanyuuid";
7
+ import { PayrollTypes as g } from "@gusto/embedded-api/models/operations/getv1companiescompanyidpayperiods";
8
+ import { RFCDate as U } from "@gusto/embedded-api/types/rfcdate";
9
+ import { TransitionPayrollAlertPresentation as b } from "./TransitionPayrollAlertPresentation.js";
10
+ import { BaseComponent as _ } from "../../Base/Base.js";
11
+ import { useBase as L } from "../../Base/useBase.js";
12
+ import { componentEvents as h } from "../../../shared/constants.js";
13
+ import { useObservability as M } from "../../../contexts/ObservabilityProvider/useObservability.js";
14
+ import { normalizeToSDKError as C } from "../../../types/sdkError.js";
15
+ const v = 90, x = "Payroll.TransitionPayrollAlert";
16
+ function Z({ companyId: a, onEvent: i }) {
17
+ const { observability: r } = M(), c = P(() => {
18
+ const t = /* @__PURE__ */ new Date();
19
+ return t.setDate(t.getDate() + v), new U(t);
20
+ }, []), { data: n, error: p } = R({
21
+ companyId: a,
22
+ payrollTypes: g.Transition,
23
+ endDate: c
24
+ }), { data: l, error: d } = N({ companyId: a }), o = p ?? d;
25
+ E(() => {
26
+ if (!o) return;
27
+ i(h.ERROR, o);
28
+ const t = C(o);
29
+ r?.onError?.({
30
+ ...t,
31
+ timestamp: Date.now(),
32
+ componentName: x
33
+ });
34
+ }, [o, i, r]);
35
+ const m = P(() => {
36
+ if (!n || !l) return [];
37
+ const t = l.payScheduleShowResponse ?? [], S = (n.payPeriods ?? []).filter(
38
+ (s) => !s.payroll?.processed
39
+ ), e = /* @__PURE__ */ new Map();
40
+ for (const s of S) {
41
+ const y = s.payScheduleUuid ?? "unknown", u = e.get(y) ?? [];
42
+ u.push(s), e.set(y, u);
30
43
  }
31
- return Array.from(e.entries()).map(([s, a]) => {
32
- const o = m.find((E) => E.uuid === s), U = o?.customName || o?.name || "Transition";
33
- return { payScheduleUuid: s, payScheduleName: U, payPeriods: a };
44
+ return Array.from(e.entries()).map(([s, y]) => {
45
+ const u = t.find((k) => k.uuid === s), T = u?.customName || u?.name || "Transition";
46
+ return { payScheduleUuid: s, payScheduleName: T, payPeriods: y };
34
47
  });
35
- }, [y, m]), R = l(
48
+ }, [n, l]);
49
+ return !n || !l || m.length === 0 ? null : /* @__PURE__ */ D(_, { onEvent: i, children: /* @__PURE__ */ D(B, { companyId: a, groupedPayPeriods: m }) });
50
+ }
51
+ function B({ companyId: a, groupedPayPeriods: i }) {
52
+ const { onEvent: r, baseSubmitHandler: c } = L(), [n, p] = A(!1), [l, d] = A(null), { mutateAsync: o } = O(), m = f(
36
53
  (e) => {
37
- n(f.RUN_TRANSITION_PAYROLL, {
54
+ r(h.RUN_TRANSITION_PAYROLL, {
38
55
  startDate: e.startDate,
39
56
  endDate: e.endDate,
40
57
  payScheduleUuid: e.payScheduleUuid
41
58
  });
42
59
  },
43
- [n]
44
- ), g = l(
60
+ [r]
61
+ ), t = f(
45
62
  async (e) => {
46
- d(e), await u({}, async () => {
47
- await S({
63
+ d(e), await c({}, async () => {
64
+ await o({
48
65
  request: {
49
- companyUuid: t,
66
+ companyUuid: a,
50
67
  requestBody: {
51
- payrollType: v.TransitionFromOldPaySchedule,
68
+ payrollType: w.TransitionFromOldPaySchedule,
52
69
  startDate: e.startDate,
53
70
  endDate: e.endDate,
54
71
  payScheduleUuid: e.payScheduleUuid ?? void 0
55
72
  }
56
73
  }
57
- }), c(!0), n(f.TRANSITION_PAYROLL_SKIPPED, {
74
+ }), p(!0), r(h.TRANSITION_PAYROLL_SKIPPED, {
58
75
  startDate: e.startDate,
59
76
  endDate: e.endDate,
60
77
  payScheduleUuid: e.payScheduleUuid
61
78
  });
62
79
  }), d(null);
63
80
  },
64
- [t, S, n, u]
65
- ), w = l(() => {
66
- c(!1);
81
+ [a, o, r, c]
82
+ ), S = f(() => {
83
+ p(!1);
67
84
  }, []);
68
- return D.length === 0 ? null : /* @__PURE__ */ i(
69
- x,
85
+ return /* @__PURE__ */ D(
86
+ b,
70
87
  {
71
- groupedPayPeriods: D,
72
- onRunPayroll: R,
73
- onSkipPayroll: g,
74
- showSkipSuccessAlert: P,
75
- onDismissSkipSuccessAlert: w,
76
- skippingPayPeriod: A
88
+ groupedPayPeriods: i,
89
+ onRunPayroll: m,
90
+ onSkipPayroll: t,
91
+ showSkipSuccessAlert: n,
92
+ onDismissSkipSuccessAlert: S,
93
+ skippingPayPeriod: l
77
94
  }
78
95
  );
79
96
  }
80
97
  export {
81
- X as TransitionPayrollAlert
98
+ Z as TransitionPayrollAlert
82
99
  };
83
100
  //# sourceMappingURL=TransitionPayrollAlert.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"TransitionPayrollAlert.js","sources":["../../../../src/components/Payroll/TransitionPayrollAlert/TransitionPayrollAlert.tsx"],"sourcesContent":["import { useMemo, useState, useCallback } from 'react'\nimport { usePaySchedulesGetPayPeriodsSuspense } from '@gusto/embedded-api/react-query/paySchedulesGetPayPeriods'\nimport { usePaySchedulesGetAllSuspense } from '@gusto/embedded-api/react-query/paySchedulesGetAll'\nimport { usePayrollsSkipMutation } from '@gusto/embedded-api/react-query/payrollsSkip'\nimport { PayrollType } from '@gusto/embedded-api/models/operations/postcompaniespayrollskipcompanyuuid'\nimport { PayrollTypes } from '@gusto/embedded-api/models/operations/getv1companiescompanyidpayperiods'\nimport type { PayPeriod } from '@gusto/embedded-api/models/components/payperiod'\nimport { RFCDate } from '@gusto/embedded-api/types/rfcdate'\nimport { TransitionPayrollAlertPresentation } from './TransitionPayrollAlertPresentation'\nimport { BaseComponent } from '@/components/Base/Base'\nimport { useBase } from '@/components/Base/useBase'\nimport type { OnEventType } from '@/components/Base/useBase'\nimport type { EventType } from '@/shared/constants'\nimport { componentEvents } from '@/shared/constants'\n\ninterface TransitionPayrollAlertProps {\n companyId: string\n onEvent: OnEventType<EventType, unknown>\n}\n\nconst LOOK_AHEAD_DAYS = 90\n\nexport function TransitionPayrollAlert(props: TransitionPayrollAlertProps) {\n return (\n <BaseComponent onEvent={props.onEvent}>\n <Root {...props} />\n </BaseComponent>\n )\n}\n\nfunction Root({ companyId }: TransitionPayrollAlertProps) {\n const { onEvent, baseSubmitHandler } = useBase()\n\n const [showSkipSuccessAlert, setShowSkipSuccessAlert] = useState(false)\n const [skippingPayPeriod, setSkippingPayPeriod] = useState<PayPeriod | null>(null)\n\n const lookAheadEndDate = useMemo(() => {\n const date = new Date()\n date.setDate(date.getDate() + LOOK_AHEAD_DAYS)\n return new RFCDate(date)\n }, [])\n\n const { data: payPeriodsData } = usePaySchedulesGetPayPeriodsSuspense({\n companyId,\n payrollTypes: PayrollTypes.Transition,\n endDate: lookAheadEndDate,\n })\n\n const { data: paySchedulesData } = usePaySchedulesGetAllSuspense({ companyId })\n const paySchedules = paySchedulesData.paySchedules ?? []\n\n const { mutateAsync: skipPayroll } = usePayrollsSkipMutation()\n\n const unprocessedTransitionPeriods = useMemo(() => {\n const periods = payPeriodsData.payPeriods ?? []\n return periods.filter((pp: PayPeriod) => !pp.payroll?.processed)\n }, [payPeriodsData])\n\n const groupedPayPeriods = useMemo(() => {\n const groups = new Map<string, PayPeriod[]>()\n\n for (const period of unprocessedTransitionPeriods) {\n const uuid = period.payScheduleUuid ?? 'unknown'\n const existing = groups.get(uuid) ?? []\n existing.push(period)\n groups.set(uuid, existing)\n }\n\n return Array.from(groups.entries()).map(([payScheduleUuid, payPeriods]) => {\n const schedule = paySchedules.find(s => s.uuid === payScheduleUuid)\n const payScheduleName = schedule?.customName || schedule?.name || 'Transition'\n\n return { payScheduleUuid, payScheduleName, payPeriods }\n })\n }, [unprocessedTransitionPeriods, paySchedules])\n\n const handleRunPayroll = useCallback(\n (payPeriod: PayPeriod) => {\n onEvent(componentEvents.RUN_TRANSITION_PAYROLL, {\n startDate: payPeriod.startDate,\n endDate: payPeriod.endDate,\n payScheduleUuid: payPeriod.payScheduleUuid,\n })\n },\n [onEvent],\n )\n\n const handleSkipPayroll = useCallback(\n async (payPeriod: PayPeriod) => {\n setSkippingPayPeriod(payPeriod)\n await baseSubmitHandler({}, async () => {\n await skipPayroll({\n request: {\n companyUuid: companyId,\n requestBody: {\n payrollType: PayrollType.TransitionFromOldPaySchedule,\n startDate: payPeriod.startDate,\n endDate: payPeriod.endDate,\n payScheduleUuid: payPeriod.payScheduleUuid ?? undefined,\n },\n },\n })\n setShowSkipSuccessAlert(true)\n onEvent(componentEvents.TRANSITION_PAYROLL_SKIPPED, {\n startDate: payPeriod.startDate,\n endDate: payPeriod.endDate,\n payScheduleUuid: payPeriod.payScheduleUuid,\n })\n })\n setSkippingPayPeriod(null)\n },\n [companyId, skipPayroll, onEvent, baseSubmitHandler],\n )\n\n const handleDismissSkipSuccessAlert = useCallback(() => {\n setShowSkipSuccessAlert(false)\n }, [])\n\n if (groupedPayPeriods.length === 0) {\n return null\n }\n\n return (\n <TransitionPayrollAlertPresentation\n groupedPayPeriods={groupedPayPeriods}\n onRunPayroll={handleRunPayroll}\n onSkipPayroll={handleSkipPayroll}\n showSkipSuccessAlert={showSkipSuccessAlert}\n onDismissSkipSuccessAlert={handleDismissSkipSuccessAlert}\n skippingPayPeriod={skippingPayPeriod}\n />\n )\n}\n"],"names":["LOOK_AHEAD_DAYS","TransitionPayrollAlert","props","jsx","BaseComponent","Root","companyId","onEvent","baseSubmitHandler","useBase","showSkipSuccessAlert","setShowSkipSuccessAlert","useState","skippingPayPeriod","setSkippingPayPeriod","lookAheadEndDate","useMemo","date","RFCDate","payPeriodsData","usePaySchedulesGetPayPeriodsSuspense","PayrollTypes","paySchedulesData","usePaySchedulesGetAllSuspense","paySchedules","skipPayroll","usePayrollsSkipMutation","unprocessedTransitionPeriods","pp","groupedPayPeriods","groups","period","uuid","existing","payScheduleUuid","payPeriods","schedule","s","payScheduleName","handleRunPayroll","useCallback","payPeriod","componentEvents","handleSkipPayroll","PayrollType","handleDismissSkipSuccessAlert","TransitionPayrollAlertPresentation"],"mappings":"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"}
1
+ {"version":3,"file":"TransitionPayrollAlert.js","sources":["../../../../src/components/Payroll/TransitionPayrollAlert/TransitionPayrollAlert.tsx"],"sourcesContent":["import { useMemo, useState, useCallback, useEffect } from 'react'\nimport { usePaySchedulesGetPayPeriods } from '@gusto/embedded-api/react-query/paySchedulesGetPayPeriods'\nimport { usePaySchedulesGetAll } from '@gusto/embedded-api/react-query/paySchedulesGetAll'\nimport { usePayrollsSkipMutation } from '@gusto/embedded-api/react-query/payrollsSkip'\nimport { PayrollType } from '@gusto/embedded-api/models/operations/postcompaniespayrollskipcompanyuuid'\nimport { PayrollTypes } from '@gusto/embedded-api/models/operations/getv1companiescompanyidpayperiods'\nimport type { PayPeriod } from '@gusto/embedded-api/models/components/payperiod'\nimport { RFCDate } from '@gusto/embedded-api/types/rfcdate'\nimport {\n TransitionPayrollAlertPresentation,\n type TransitionPayPeriodGroup,\n} from './TransitionPayrollAlertPresentation'\nimport { BaseComponent } from '@/components/Base/Base'\nimport { useBase } from '@/components/Base/useBase'\nimport type { OnEventType } from '@/components/Base/useBase'\nimport type { EventType } from '@/shared/constants'\nimport { componentEvents } from '@/shared/constants'\nimport { useObservability } from '@/contexts/ObservabilityProvider/useObservability'\nimport { normalizeToSDKError } from '@/types/sdkError'\n\ninterface TransitionPayrollAlertProps {\n companyId: string\n onEvent: OnEventType<EventType, unknown>\n}\n\ninterface RootProps {\n companyId: string\n groupedPayPeriods: TransitionPayPeriodGroup[]\n}\n\nconst LOOK_AHEAD_DAYS = 90\nconst COMPONENT_NAME = 'Payroll.TransitionPayrollAlert'\n\nexport function TransitionPayrollAlert({ companyId, onEvent }: TransitionPayrollAlertProps) {\n const { observability } = useObservability()\n\n const lookAheadEndDate = useMemo(() => {\n const date = new Date()\n date.setDate(date.getDate() + LOOK_AHEAD_DAYS)\n return new RFCDate(date)\n }, [])\n\n const { data: payPeriodsData, error: payPeriodsError } = usePaySchedulesGetPayPeriods({\n companyId,\n payrollTypes: PayrollTypes.Transition,\n endDate: lookAheadEndDate,\n })\n\n const { data: paySchedulesData, error: paySchedulesError } = usePaySchedulesGetAll({ companyId })\n\n const gateError = payPeriodsError ?? paySchedulesError\n\n useEffect(() => {\n if (!gateError) return\n onEvent(componentEvents.ERROR, gateError)\n const sdkError = normalizeToSDKError(gateError)\n observability?.onError?.({\n ...sdkError,\n timestamp: Date.now(),\n componentName: COMPONENT_NAME,\n })\n }, [gateError, onEvent, observability])\n\n const groupedPayPeriods = useMemo<TransitionPayPeriodGroup[]>(() => {\n if (!payPeriodsData || !paySchedulesData) return []\n const paySchedules = paySchedulesData.payScheduleShowResponse ?? []\n const unprocessed = (payPeriodsData.payPeriods ?? []).filter(\n (pp: PayPeriod) => !pp.payroll?.processed,\n )\n\n const groups = new Map<string, PayPeriod[]>()\n for (const period of unprocessed) {\n const uuid = period.payScheduleUuid ?? 'unknown'\n const existing = groups.get(uuid) ?? []\n existing.push(period)\n groups.set(uuid, existing)\n }\n\n return Array.from(groups.entries()).map(([payScheduleUuid, payPeriods]) => {\n const schedule = paySchedules.find(s => s.uuid === payScheduleUuid)\n const payScheduleName = schedule?.customName || schedule?.name || 'Transition'\n return { payScheduleUuid, payScheduleName, payPeriods }\n })\n }, [payPeriodsData, paySchedulesData])\n\n if (!payPeriodsData || !paySchedulesData || groupedPayPeriods.length === 0) {\n return null\n }\n\n return (\n <BaseComponent onEvent={onEvent}>\n <Root companyId={companyId} groupedPayPeriods={groupedPayPeriods} />\n </BaseComponent>\n )\n}\n\nfunction Root({ companyId, groupedPayPeriods }: RootProps) {\n const { onEvent, baseSubmitHandler } = useBase()\n\n const [showSkipSuccessAlert, setShowSkipSuccessAlert] = useState(false)\n const [skippingPayPeriod, setSkippingPayPeriod] = useState<PayPeriod | null>(null)\n\n const { mutateAsync: skipPayroll } = usePayrollsSkipMutation()\n\n const handleRunPayroll = useCallback(\n (payPeriod: PayPeriod) => {\n onEvent(componentEvents.RUN_TRANSITION_PAYROLL, {\n startDate: payPeriod.startDate,\n endDate: payPeriod.endDate,\n payScheduleUuid: payPeriod.payScheduleUuid,\n })\n },\n [onEvent],\n )\n\n const handleSkipPayroll = useCallback(\n async (payPeriod: PayPeriod) => {\n setSkippingPayPeriod(payPeriod)\n await baseSubmitHandler({}, async () => {\n await skipPayroll({\n request: {\n companyUuid: companyId,\n requestBody: {\n payrollType: PayrollType.TransitionFromOldPaySchedule,\n startDate: payPeriod.startDate,\n endDate: payPeriod.endDate,\n payScheduleUuid: payPeriod.payScheduleUuid ?? undefined,\n },\n },\n })\n setShowSkipSuccessAlert(true)\n onEvent(componentEvents.TRANSITION_PAYROLL_SKIPPED, {\n startDate: payPeriod.startDate,\n endDate: payPeriod.endDate,\n payScheduleUuid: payPeriod.payScheduleUuid,\n })\n })\n setSkippingPayPeriod(null)\n },\n [companyId, skipPayroll, onEvent, baseSubmitHandler],\n )\n\n const handleDismissSkipSuccessAlert = useCallback(() => {\n setShowSkipSuccessAlert(false)\n }, [])\n\n return (\n <TransitionPayrollAlertPresentation\n groupedPayPeriods={groupedPayPeriods}\n onRunPayroll={handleRunPayroll}\n onSkipPayroll={handleSkipPayroll}\n showSkipSuccessAlert={showSkipSuccessAlert}\n onDismissSkipSuccessAlert={handleDismissSkipSuccessAlert}\n skippingPayPeriod={skippingPayPeriod}\n />\n )\n}\n"],"names":["LOOK_AHEAD_DAYS","COMPONENT_NAME","TransitionPayrollAlert","companyId","onEvent","observability","useObservability","lookAheadEndDate","useMemo","date","RFCDate","payPeriodsData","payPeriodsError","usePaySchedulesGetPayPeriods","PayrollTypes","paySchedulesData","paySchedulesError","usePaySchedulesGetAll","gateError","useEffect","componentEvents","sdkError","normalizeToSDKError","groupedPayPeriods","paySchedules","unprocessed","pp","groups","period","uuid","existing","payScheduleUuid","payPeriods","schedule","s","payScheduleName","BaseComponent","Root","baseSubmitHandler","useBase","showSkipSuccessAlert","setShowSkipSuccessAlert","useState","skippingPayPeriod","setSkippingPayPeriod","skipPayroll","usePayrollsSkipMutation","handleRunPayroll","useCallback","payPeriod","handleSkipPayroll","PayrollType","handleDismissSkipSuccessAlert","jsx","TransitionPayrollAlertPresentation"],"mappings":";;;;;;;;;;;;;;AA8BA,MAAMA,IAAkB,IAClBC,IAAiB;AAEhB,SAASC,EAAuB,EAAE,WAAAC,GAAW,SAAAC,KAAwC;AAC1F,QAAM,EAAE,eAAAC,EAAA,IAAkBC,EAAA,GAEpBC,IAAmBC,EAAQ,MAAM;AACrC,UAAMC,wBAAW,KAAA;AACjB,WAAAA,EAAK,QAAQA,EAAK,QAAA,IAAYT,CAAe,GACtC,IAAIU,EAAQD,CAAI;AAAA,EACzB,GAAG,CAAA,CAAE,GAEC,EAAE,MAAME,GAAgB,OAAOC,EAAA,IAAoBC,EAA6B;AAAA,IACpF,WAAAV;AAAA,IACA,cAAcW,EAAa;AAAA,IAC3B,SAASP;AAAA,EAAA,CACV,GAEK,EAAE,MAAMQ,GAAkB,OAAOC,MAAsBC,EAAsB,EAAE,WAAAd,GAAW,GAE1Fe,IAAYN,KAAmBI;AAErC,EAAAG,EAAU,MAAM;AACd,QAAI,CAACD,EAAW;AAChB,IAAAd,EAAQgB,EAAgB,OAAOF,CAAS;AACxC,UAAMG,IAAWC,EAAoBJ,CAAS;AAC9C,IAAAb,GAAe,UAAU;AAAA,MACvB,GAAGgB;AAAA,MACH,WAAW,KAAK,IAAA;AAAA,MAChB,eAAepB;AAAA,IAAA,CAChB;AAAA,EACH,GAAG,CAACiB,GAAWd,GAASC,CAAa,CAAC;AAEtC,QAAMkB,IAAoBf,EAAoC,MAAM;AAClE,QAAI,CAACG,KAAkB,CAACI,UAAyB,CAAA;AACjD,UAAMS,IAAeT,EAAiB,2BAA2B,CAAA,GAC3DU,KAAed,EAAe,cAAc,CAAA,GAAI;AAAA,MACpD,CAACe,MAAkB,CAACA,EAAG,SAAS;AAAA,IAAA,GAG5BC,wBAAa,IAAA;AACnB,eAAWC,KAAUH,GAAa;AAChC,YAAMI,IAAOD,EAAO,mBAAmB,WACjCE,IAAWH,EAAO,IAAIE,CAAI,KAAK,CAAA;AACrC,MAAAC,EAAS,KAAKF,CAAM,GACpBD,EAAO,IAAIE,GAAMC,CAAQ;AAAA,IAC3B;AAEA,WAAO,MAAM,KAAKH,EAAO,QAAA,CAAS,EAAE,IAAI,CAAC,CAACI,GAAiBC,CAAU,MAAM;AACzE,YAAMC,IAAWT,EAAa,KAAK,CAAAU,MAAKA,EAAE,SAASH,CAAe,GAC5DI,IAAkBF,GAAU,cAAcA,GAAU,QAAQ;AAClE,aAAO,EAAE,iBAAAF,GAAiB,iBAAAI,GAAiB,YAAAH,EAAA;AAAA,IAC7C,CAAC;AAAA,EACH,GAAG,CAACrB,GAAgBI,CAAgB,CAAC;AAErC,SAAI,CAACJ,KAAkB,CAACI,KAAoBQ,EAAkB,WAAW,IAChE,yBAINa,GAAA,EAAc,SAAAhC,GACb,4BAACiC,GAAA,EAAK,WAAAlC,GAAsB,mBAAAoB,GAAsC,EAAA,CACpE;AAEJ;AAEA,SAASc,EAAK,EAAE,WAAAlC,GAAW,mBAAAoB,KAAgC;AACzD,QAAM,EAAE,SAAAnB,GAAS,mBAAAkC,EAAA,IAAsBC,EAAA,GAEjC,CAACC,GAAsBC,CAAuB,IAAIC,EAAS,EAAK,GAChE,CAACC,GAAmBC,CAAoB,IAAIF,EAA2B,IAAI,GAE3E,EAAE,aAAaG,EAAA,IAAgBC,EAAA,GAE/BC,IAAmBC;AAAA,IACvB,CAACC,MAAyB;AACxB,MAAA7C,EAAQgB,EAAgB,wBAAwB;AAAA,QAC9C,WAAW6B,EAAU;AAAA,QACrB,SAASA,EAAU;AAAA,QACnB,iBAAiBA,EAAU;AAAA,MAAA,CAC5B;AAAA,IACH;AAAA,IACA,CAAC7C,CAAO;AAAA,EAAA,GAGJ8C,IAAoBF;AAAA,IACxB,OAAOC,MAAyB;AAC9B,MAAAL,EAAqBK,CAAS,GAC9B,MAAMX,EAAkB,CAAA,GAAI,YAAY;AACtC,cAAMO,EAAY;AAAA,UAChB,SAAS;AAAA,YACP,aAAa1C;AAAA,YACb,aAAa;AAAA,cACX,aAAagD,EAAY;AAAA,cACzB,WAAWF,EAAU;AAAA,cACrB,SAASA,EAAU;AAAA,cACnB,iBAAiBA,EAAU,mBAAmB;AAAA,YAAA;AAAA,UAChD;AAAA,QACF,CACD,GACDR,EAAwB,EAAI,GAC5BrC,EAAQgB,EAAgB,4BAA4B;AAAA,UAClD,WAAW6B,EAAU;AAAA,UACrB,SAASA,EAAU;AAAA,UACnB,iBAAiBA,EAAU;AAAA,QAAA,CAC5B;AAAA,MACH,CAAC,GACDL,EAAqB,IAAI;AAAA,IAC3B;AAAA,IACA,CAACzC,GAAW0C,GAAazC,GAASkC,CAAiB;AAAA,EAAA,GAG/Cc,IAAgCJ,EAAY,MAAM;AACtD,IAAAP,EAAwB,EAAK;AAAA,EAC/B,GAAG,CAAA,CAAE;AAEL,SACE,gBAAAY;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,mBAAA/B;AAAA,MACA,cAAcwB;AAAA,MACd,eAAeG;AAAA,MACf,sBAAAV;AAAA,MACA,2BAA2BY;AAAA,MAC3B,mBAAAT;AAAA,IAAA;AAAA,EAAA;AAGN;"}
@@ -1,5 +1,5 @@
1
1
  import { PayPeriod } from '@gusto/embedded-api/models/components/payperiod';
2
- interface TransitionPayPeriodGroup {
2
+ export interface TransitionPayPeriodGroup {
3
3
  payScheduleUuid: string;
4
4
  payScheduleName: string;
5
5
  payPeriods: PayPeriod[];
@@ -1 +1 @@
1
- {"version":3,"file":"TransitionPayrollAlertPresentation.js","sources":["../../../../src/components/Payroll/TransitionPayrollAlert/TransitionPayrollAlertPresentation.tsx"],"sourcesContent":["import { useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport type { PayPeriod } from '@gusto/embedded-api/models/components/payperiod'\nimport { useComponentContext } from '@/contexts/ComponentAdapter/useComponentContext'\nimport { Flex } from '@/components/Common/Flex/Flex'\nimport { useI18n } from '@/i18n'\nimport { useDateFormatter } from '@/hooks/useDateFormatter'\n\ninterface TransitionPayPeriodGroup {\n payScheduleUuid: string\n payScheduleName: string\n payPeriods: PayPeriod[]\n}\n\ninterface TransitionPayrollAlertPresentationProps {\n groupedPayPeriods: TransitionPayPeriodGroup[]\n onRunPayroll: (payPeriod: PayPeriod) => void\n onSkipPayroll: (payPeriod: PayPeriod) => void\n showSkipSuccessAlert: boolean\n onDismissSkipSuccessAlert: () => void\n skippingPayPeriod: PayPeriod | null\n}\n\nexport function TransitionPayrollAlertPresentation({\n groupedPayPeriods,\n onRunPayroll,\n onSkipPayroll,\n showSkipSuccessAlert,\n onDismissSkipSuccessAlert,\n skippingPayPeriod,\n}: TransitionPayrollAlertPresentationProps) {\n useI18n('Payroll.TransitionPayrollAlert')\n const { t } = useTranslation('Payroll.TransitionPayrollAlert')\n const { Alert, Button, Text, Dialog } = useComponentContext()\n const dateFormatter = useDateFormatter()\n const [skipDialogPayPeriod, setSkipDialogPayPeriod] = useState<PayPeriod | null>(null)\n\n if (groupedPayPeriods.length === 0) {\n return null\n }\n\n const formatDateRange = (payPeriod: PayPeriod) =>\n dateFormatter.formatPayPeriodRange(payPeriod.startDate, payPeriod.endDate, {\n useShortMonth: true,\n })\n\n const handleConfirmSkip = () => {\n if (skipDialogPayPeriod) {\n onSkipPayroll(skipDialogPayPeriod)\n setSkipDialogPayPeriod(null)\n }\n }\n\n const hasMultipleGroups = groupedPayPeriods.length > 1\n\n return (\n <Flex flexDirection=\"column\" gap={16}>\n {showSkipSuccessAlert && (\n <Alert status=\"info\" label={t('skipSuccessAlert')} onDismiss={onDismissSkipSuccessAlert} />\n )}\n {groupedPayPeriods.map((group, groupIndex) => (\n <Flex key={group.payScheduleUuid || `group-${groupIndex}`} flexDirection=\"column\" gap={16}>\n {hasMultipleGroups && <Text weight=\"semibold\">{group.payScheduleName}</Text>}\n {group.payPeriods.map(payPeriod => {\n const dateRange = formatDateRange(payPeriod)\n const isSkipping = skippingPayPeriod === payPeriod\n\n return (\n <Alert\n key={`${payPeriod.payScheduleUuid}-${payPeriod.startDate}`}\n status=\"warning\"\n label={t('alertTitle', { dateRange })}\n >\n <Flex flexDirection=\"column\" gap={16}>\n <Text>{t('alertDescription')}</Text>\n <Flex gap={12} alignItems=\"center\">\n <div>\n <Button\n variant=\"secondary\"\n onClick={() => {\n onRunPayroll(payPeriod)\n }}\n >\n {t('runPayroll')}\n </Button>\n </div>\n <Button\n variant=\"tertiary\"\n onClick={() => {\n setSkipDialogPayPeriod(payPeriod)\n }}\n isLoading={isSkipping}\n >\n {t('skipPayroll')}\n </Button>\n </Flex>\n </Flex>\n </Alert>\n )\n })}\n </Flex>\n ))}\n <Dialog\n isOpen={skipDialogPayPeriod !== null}\n onClose={() => {\n setSkipDialogPayPeriod(null)\n }}\n onPrimaryActionClick={handleConfirmSkip}\n isDestructive\n title={t('skipDialog.title', {\n dateRange: skipDialogPayPeriod ? formatDateRange(skipDialogPayPeriod) : '',\n })}\n primaryActionLabel={t('skipDialog.confirmCta')}\n closeActionLabel={t('skipDialog.cancelCta')}\n >\n {t('skipDialog.body')}\n </Dialog>\n </Flex>\n )\n}\n"],"names":["TransitionPayrollAlertPresentation","groupedPayPeriods","onRunPayroll","onSkipPayroll","showSkipSuccessAlert","onDismissSkipSuccessAlert","skippingPayPeriod","useI18n","useTranslation","Alert","Button","Text","Dialog","useComponentContext","dateFormatter","useDateFormatter","skipDialogPayPeriod","setSkipDialogPayPeriod","useState","formatDateRange","payPeriod","handleConfirmSkip","hasMultipleGroups","jsxs","Flex","jsx","group","groupIndex","dateRange","isSkipping"],"mappings":"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"}
1
+ {"version":3,"file":"TransitionPayrollAlertPresentation.js","sources":["../../../../src/components/Payroll/TransitionPayrollAlert/TransitionPayrollAlertPresentation.tsx"],"sourcesContent":["import { useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport type { PayPeriod } from '@gusto/embedded-api/models/components/payperiod'\nimport { useComponentContext } from '@/contexts/ComponentAdapter/useComponentContext'\nimport { Flex } from '@/components/Common/Flex/Flex'\nimport { useI18n } from '@/i18n'\nimport { useDateFormatter } from '@/hooks/useDateFormatter'\n\nexport interface TransitionPayPeriodGroup {\n payScheduleUuid: string\n payScheduleName: string\n payPeriods: PayPeriod[]\n}\n\ninterface TransitionPayrollAlertPresentationProps {\n groupedPayPeriods: TransitionPayPeriodGroup[]\n onRunPayroll: (payPeriod: PayPeriod) => void\n onSkipPayroll: (payPeriod: PayPeriod) => void\n showSkipSuccessAlert: boolean\n onDismissSkipSuccessAlert: () => void\n skippingPayPeriod: PayPeriod | null\n}\n\nexport function TransitionPayrollAlertPresentation({\n groupedPayPeriods,\n onRunPayroll,\n onSkipPayroll,\n showSkipSuccessAlert,\n onDismissSkipSuccessAlert,\n skippingPayPeriod,\n}: TransitionPayrollAlertPresentationProps) {\n useI18n('Payroll.TransitionPayrollAlert')\n const { t } = useTranslation('Payroll.TransitionPayrollAlert')\n const { Alert, Button, Text, Dialog } = useComponentContext()\n const dateFormatter = useDateFormatter()\n const [skipDialogPayPeriod, setSkipDialogPayPeriod] = useState<PayPeriod | null>(null)\n\n if (groupedPayPeriods.length === 0) {\n return null\n }\n\n const formatDateRange = (payPeriod: PayPeriod) =>\n dateFormatter.formatPayPeriodRange(payPeriod.startDate, payPeriod.endDate, {\n useShortMonth: true,\n })\n\n const handleConfirmSkip = () => {\n if (skipDialogPayPeriod) {\n onSkipPayroll(skipDialogPayPeriod)\n setSkipDialogPayPeriod(null)\n }\n }\n\n const hasMultipleGroups = groupedPayPeriods.length > 1\n\n return (\n <Flex flexDirection=\"column\" gap={16}>\n {showSkipSuccessAlert && (\n <Alert status=\"info\" label={t('skipSuccessAlert')} onDismiss={onDismissSkipSuccessAlert} />\n )}\n {groupedPayPeriods.map((group, groupIndex) => (\n <Flex key={group.payScheduleUuid || `group-${groupIndex}`} flexDirection=\"column\" gap={16}>\n {hasMultipleGroups && <Text weight=\"semibold\">{group.payScheduleName}</Text>}\n {group.payPeriods.map(payPeriod => {\n const dateRange = formatDateRange(payPeriod)\n const isSkipping = skippingPayPeriod === payPeriod\n\n return (\n <Alert\n key={`${payPeriod.payScheduleUuid}-${payPeriod.startDate}`}\n status=\"warning\"\n label={t('alertTitle', { dateRange })}\n >\n <Flex flexDirection=\"column\" gap={16}>\n <Text>{t('alertDescription')}</Text>\n <Flex gap={12} alignItems=\"center\">\n <div>\n <Button\n variant=\"secondary\"\n onClick={() => {\n onRunPayroll(payPeriod)\n }}\n >\n {t('runPayroll')}\n </Button>\n </div>\n <Button\n variant=\"tertiary\"\n onClick={() => {\n setSkipDialogPayPeriod(payPeriod)\n }}\n isLoading={isSkipping}\n >\n {t('skipPayroll')}\n </Button>\n </Flex>\n </Flex>\n </Alert>\n )\n })}\n </Flex>\n ))}\n <Dialog\n isOpen={skipDialogPayPeriod !== null}\n onClose={() => {\n setSkipDialogPayPeriod(null)\n }}\n onPrimaryActionClick={handleConfirmSkip}\n isDestructive\n title={t('skipDialog.title', {\n dateRange: skipDialogPayPeriod ? formatDateRange(skipDialogPayPeriod) : '',\n })}\n primaryActionLabel={t('skipDialog.confirmCta')}\n closeActionLabel={t('skipDialog.cancelCta')}\n >\n {t('skipDialog.body')}\n </Dialog>\n </Flex>\n )\n}\n"],"names":["TransitionPayrollAlertPresentation","groupedPayPeriods","onRunPayroll","onSkipPayroll","showSkipSuccessAlert","onDismissSkipSuccessAlert","skippingPayPeriod","useI18n","useTranslation","Alert","Button","Text","Dialog","useComponentContext","dateFormatter","useDateFormatter","skipDialogPayPeriod","setSkipDialogPayPeriod","useState","formatDateRange","payPeriod","handleConfirmSkip","hasMultipleGroups","jsxs","Flex","jsx","group","groupIndex","dateRange","isSkipping"],"mappings":"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"}
@@ -2,7 +2,7 @@ import { Employee } from '@gusto/embedded-api/models/components/employee';
2
2
  import { PayrollEmployeeCompensationsTypeFixedCompensations as FixedCompensations, PayrollEmployeeCompensationsType } from '@gusto/embedded-api/models/components/payrollemployeecompensationstype';
3
3
  import { PayrollFixedCompensationTypesType } from '@gusto/embedded-api/models/components/payrollfixedcompensationtypestype';
4
4
  import { TFunction } from 'i18next';
5
- import { PaySchedule as PayScheduleObject } from '@gusto/embedded-api/models/components/payschedule';
5
+ import { PayScheduleShow as PayScheduleObject } from '@gusto/embedded-api/models/components/payscheduleshow';
6
6
  import { Payroll } from '@gusto/embedded-api/models/components/payroll';
7
7
  import { PayrollType } from './PayrollList/types';
8
8
  import { PayrollCategory } from './payrollTypes';
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.js","sources":["../../../src/components/Payroll/helpers.ts"],"sourcesContent":["import type { Employee } from '@gusto/embedded-api/models/components/employee'\nimport {\n type PayrollShowFixedCompensations,\n OffCycleReasonType,\n} from '@gusto/embedded-api/models/components/payroll'\nimport type { PayrollEmployeeCompensationsTypeFixedCompensations as FixedCompensations } from '@gusto/embedded-api/models/components/payrollemployeecompensationstype'\nimport type { PayrollFixedCompensationTypesType } from '@gusto/embedded-api/models/components/payrollfixedcompensationtypestype'\nimport { useCallback } from 'react'\nimport type { TFunction } from 'i18next'\nimport { useTranslation } from 'react-i18next'\nimport type { PaySchedule as PayScheduleObject } from '@gusto/embedded-api/models/components/payschedule'\nimport type { Compensation, MinimumWages } from '@gusto/embedded-api/models/components/compensation'\nimport type { PayrollEmployeeCompensationsType } from '@gusto/embedded-api/models/components/payrollemployeecompensationstype'\nimport type { Payroll } from '@gusto/embedded-api/models/components/payroll'\nimport type { PayrollType } from './PayrollList/types'\nimport { PayrollCategory, isOffCyclePayroll } from './payrollTypes'\nimport { formatPayRate } from '@/helpers/formattedStrings'\nimport { useLocale } from '@/contexts/LocaleProvider/useLocale'\nimport { COMPENSATION_NAME_REIMBURSEMENT, FlsaStatus } from '@/shared/constants'\nimport { MS_PER_HOUR } from '@/helpers/dateFormatting'\nconst REGULAR_HOURS_NAME = 'regular hours'\n\n// Utility to get the primary job from an employee\nexport const getPrimaryJob = (employee: Employee) => {\n return employee.jobs?.find(job => job.primary) || employee.jobs?.[0] || null\n}\n\nconst roundToSixDecimals = (value: number): number => {\n return Math.round(value * 1_000_000) / 1_000_000\n}\n\nconst roundToTwoDecimals = (value: number): number => {\n return Math.round(value * 100) / 100\n}\n\nconst isRegularHours = (compensationName: string): boolean => {\n return compensationName.toLowerCase() === REGULAR_HOURS_NAME\n}\n\nconst PAY_PERIOD_HOURS_MAPPINGS: Record<string, number> = {\n Daily: 8.0,\n 'Every week': 40.0,\n 'Every other week': 80.0,\n 'Twice per month': 86.666667,\n Monthly: 173.333333,\n Quarterly: 520.0,\n Semiannually: 1040.0,\n Annually: 2080.0,\n}\n\nexport const formatEmployeePayRate = ({\n employee,\n t,\n locale = 'en-US',\n}: {\n employee?: Employee\n t: TFunction\n locale?: string\n}) => {\n if (!employee?.jobs) {\n return null\n }\n\n const primaryJob = getPrimaryJob(employee)\n if (!primaryJob?.compensations) {\n return null\n }\n\n const jobCompensation = primaryJob.compensations[0]\n if (!jobCompensation) {\n return null\n }\n if (!jobCompensation.rate || parseFloat(jobCompensation.rate) === 0) {\n return null\n }\n\n const rate = parseFloat(jobCompensation.rate)\n const paymentUnit = jobCompensation.paymentUnit || 'Hour'\n\n return formatPayRate({ rate, paymentUnit, t, locale })\n}\n\nexport const useFormatEmployeePayRate = () => {\n const { t } = useTranslation('common')\n const { locale } = useLocale()\n\n return useCallback(\n (employee?: Employee) => {\n return formatEmployeePayRate({ employee, t, locale })\n },\n [t, locale],\n )\n}\n\nexport const getEmployeePayRateInfo = (employee: Employee | undefined) => {\n if (!employee?.jobs) {\n return null\n }\n\n const primaryJob = getPrimaryJob(employee)\n if (!primaryJob?.compensations) {\n return null\n }\n\n const jobCompensation = primaryJob.compensations[0]\n if (!jobCompensation) {\n return null\n }\n if (!jobCompensation.rate || parseFloat(jobCompensation.rate) === 0) {\n return null\n }\n\n const rate = parseFloat(jobCompensation.rate)\n const paymentUnit = jobCompensation.paymentUnit || 'Hour'\n\n return { rate, paymentUnit }\n}\n\nexport const getRegularHours = (compensation: PayrollEmployeeCompensationsType) => {\n if (!compensation.hourlyCompensations) return 0\n\n return compensation.hourlyCompensations\n .filter(hourlyCompensation => hourlyCompensation.name?.toLowerCase() === 'regular hours')\n .reduce((sum, hourlyCompensation) => sum + parseFloat(hourlyCompensation.hours || '0'), 0)\n}\n\nexport function getOvertimeHours(compensation: PayrollEmployeeCompensationsType) {\n if (!compensation.hourlyCompensations || compensation.excluded) {\n return 0\n }\n\n return compensation.hourlyCompensations\n .filter(hourlyCompensation => Number(hourlyCompensation.compensationMultiplier) > 1)\n .reduce((sum, hourlyCompensation) => sum + parseFloat(hourlyCompensation.hours || '0'), 0)\n}\n\nexport const getTotalPtoHours = (compensation: PayrollEmployeeCompensationsType) => {\n if (!compensation.paidTimeOff) {\n return 0\n }\n return compensation.paidTimeOff.reduce((sum, pto) => sum + parseFloat(pto.hours || '0'), 0)\n}\n\nexport const getAdditionalEarnings = (compensation: PayrollEmployeeCompensationsType) => {\n if (!compensation.fixedCompensations) {\n return 0\n }\n\n return compensation.fixedCompensations\n .filter(fixedCompensation => {\n const name = fixedCompensation.name?.toLowerCase() || ''\n const amount = parseFloat(fixedCompensation.amount || '0')\n return name !== 'reimbursement' && name !== 'minimum wage adjustment' && amount > 0\n })\n .reduce((sum, fixedCompensation) => sum + parseFloat(fixedCompensation.amount || '0'), 0)\n}\n\nexport const getReimbursements = (compensation: PayrollEmployeeCompensationsType) => {\n if (!compensation.fixedCompensations) {\n return 0\n }\n\n const reimbursementComp = compensation.fixedCompensations.find(\n fixedCompensation => fixedCompensation.name?.toLowerCase() === 'reimbursement',\n )\n return reimbursementComp ? parseFloat(reimbursementComp.amount || '0') : 0\n}\n\nexport const formatHoursDisplay = (hours: number): string => {\n const rounded = roundToTwoDecimals(hours)\n\n if (rounded % 1 === 0) {\n return `${rounded}.0`\n }\n\n return rounded.toString()\n}\n\nconst getHoursInPayPeriod = (paySchedule: PayScheduleObject): number => {\n if (!paySchedule.frequency) {\n return 0\n }\n\n return PAY_PERIOD_HOURS_MAPPINGS[paySchedule.frequency] || 0\n}\n\nconst getEffectiveCompensation = (\n compensations: Compensation[],\n effectiveDate: Date,\n): Compensation | null => {\n if (!compensations.length) return null\n\n const sorted = [...compensations].sort(\n (a, b) =>\n (a.effectiveDate ? new Date(a.effectiveDate).getTime() : 0) -\n (b.effectiveDate ? new Date(b.effectiveDate).getTime() : 0),\n )\n\n for (let i = sorted.length - 1; i >= 0; i--) {\n const currentDateString = sorted[i]?.effectiveDate\n const currentDate = currentDateString ? new Date(currentDateString) : null\n if (currentDate && currentDate <= effectiveDate) {\n return sorted[i] || null\n }\n }\n\n return sorted[0] || null\n}\n\nconst getEffectiveMinimumWage = (\n minimumWages: MinimumWages[],\n effectiveDate: Date,\n): MinimumWages | null => {\n if (!minimumWages.length) return null\n\n const sorted = [...minimumWages].sort(\n (a, b) =>\n (a.effectiveDate ? new Date(a.effectiveDate).getTime() : 0) -\n (b.effectiveDate ? new Date(b.effectiveDate).getTime() : 0),\n )\n\n for (let i = sorted.length - 1; i >= 0; i--) {\n const currentDateString = sorted[i]?.effectiveDate\n const currentDate = currentDateString ? new Date(currentDateString) : null\n if (currentDate && currentDate <= effectiveDate) {\n return sorted[i] || null\n }\n }\n\n return sorted[0] || null\n}\n\nconst isSalaried = (compensation: Compensation): boolean => {\n return compensation.flsaStatus === 'Exempt' || compensation.flsaStatus === 'Salaried Nonexempt'\n}\n\nconst getTotalTipCompensations = (fixedCompensations: PayrollShowFixedCompensations[]): number => {\n if (!fixedCompensations.length) return 0\n\n return fixedCompensations\n .filter(fixedCompensation => {\n const name = fixedCompensation.name?.toLowerCase()\n const amount = parseFloat(fixedCompensation.amount || '0')\n return (name === 'paycheck tips' || name === 'cash tips') && amount > 0\n })\n .reduce((sum, fixedCompensation) => sum + parseFloat(fixedCompensation.amount || '0'), 0)\n}\n\nconst calculateHourlyRate = (compensation: Compensation): number => {\n const rate = parseFloat(compensation.rate || '0')\n const paymentUnit = compensation.paymentUnit || 'Hour'\n\n switch (paymentUnit) {\n case 'Hour':\n return rate\n case 'Year':\n return rate / 2080 // 52 weeks * 40 hours\n case 'Month':\n return rate / 173.333333\n case 'Week':\n return rate / 40\n case 'Paycheck':\n return 0 // Paycheck rate is 0 for hourly calculation\n default:\n return rate\n }\n}\n\nconst getHourlyRateForJob = (employee: Employee, jobUuid: string, effectiveDate: Date): number => {\n const job = employee.jobs?.find(j => j.uuid === jobUuid)\n if (!job?.compensations) {\n return 0\n }\n\n const compensation = getEffectiveCompensation(job.compensations, effectiveDate)\n return compensation ? calculateHourlyRate(compensation) : 0\n}\n\nconst getPrimaryHourlyRate = (employee: Employee, effectiveDate: Date): number => {\n const primaryJob = getPrimaryJob(employee)\n if (!primaryJob?.compensations) {\n return 0\n }\n\n const compensation = getEffectiveCompensation(primaryJob.compensations, effectiveDate)\n return compensation ? calculateHourlyRate(compensation) : 0\n}\n\nconst getTotalOutstandingPtoHours = (compensation: PayrollEmployeeCompensationsType): number => {\n if (!compensation.paidTimeOff) {\n return 0\n }\n\n return compensation.paidTimeOff.reduce(\n (sum, paidTimeOff) => sum + parseFloat(paidTimeOff.finalPayoutUnusedHoursInput || '0'),\n 0,\n )\n}\n\nconst getPtoHours = (\n compensation: PayrollEmployeeCompensationsType,\n isSalariedWithExpectedHours: boolean,\n hoursInPayPeriod: number,\n offCycle: boolean,\n): number => {\n const regularPtoHours = getTotalPtoHours(compensation)\n\n if (offCycle) {\n const outstandingPtoHours = getTotalOutstandingPtoHours(compensation)\n return regularPtoHours + outstandingPtoHours\n }\n\n if (isSalariedWithExpectedHours) {\n return Math.min(hoursInPayPeriod, regularPtoHours)\n }\n\n return regularPtoHours\n}\n\nconst calculateMinimumWageAdjustment = (\n primaryCompensation: Compensation,\n compensation: PayrollEmployeeCompensationsType,\n effectiveDate: Date,\n): number => {\n if (!primaryCompensation.adjustForMinimumWage) return 0\n\n const effectiveMinWage = getEffectiveMinimumWage(\n primaryCompensation.minimumWages || [],\n effectiveDate,\n )\n if (!effectiveMinWage) {\n return 0\n }\n\n const totalHours =\n compensation.hourlyCompensations?.reduce(\n (sum, hourlyCompensation) => sum + parseFloat(hourlyCompensation.hours || '0'),\n 0,\n ) || 0\n\n const hourlyRate = calculateHourlyRate(primaryCompensation)\n\n const totalTipCredit = (parseFloat(effectiveMinWage.wage || '0') - hourlyRate) * totalHours\n const totalTips = getTotalTipCompensations(compensation.fixedCompensations || [])\n\n return Math.max(0, totalTipCredit - totalTips)\n}\n\nconst calculateRegularPlusOvertimePay = (\n compensation: PayrollEmployeeCompensationsType,\n employee: Employee,\n effectiveDate: Date,\n isSalariedWithExpectedHours: boolean,\n hoursInPayPeriod: number,\n ptoHours: number,\n isOffCycle: boolean,\n): number => {\n if (!isOffCycle && isSalariedWithExpectedHours) {\n const primaryHourlyRate = getPrimaryHourlyRate(employee, effectiveDate)\n return primaryHourlyRate * (hoursInPayPeriod - ptoHours)\n }\n\n if (!compensation.hourlyCompensations || !employee.jobs) {\n return 0\n }\n\n const regularRatePay = compensation.hourlyCompensations.reduce((sum, hc) => {\n const hours = parseFloat(hc.hours || '0')\n const hourlyRate = getHourlyRateForJob(employee, hc.jobUuid || '', effectiveDate)\n return sum + hours * hourlyRate\n }, 0)\n\n const totalHours = compensation.hourlyCompensations.reduce((sum, hc) => {\n return sum + parseFloat(hc.hours || '0')\n }, 0)\n\n if (totalHours === 0) return regularRatePay\n\n const overtimeWeightedRate = roundToSixDecimals(regularRatePay / totalHours)\n\n // Calculate overtime pay for non-regular hours\n const overtimePay = compensation.hourlyCompensations\n .filter(hc => !isRegularHours(hc.name || ''))\n .reduce((sum, hc) => {\n const hours = parseFloat(hc.hours || '0')\n const multiplier = hc.compensationMultiplier || 1\n return sum + hours * overtimeWeightedRate * (multiplier - 1)\n }, 0)\n\n return regularRatePay + overtimePay\n}\n\nconst calculatePtoPay = (\n compensation: PayrollEmployeeCompensationsType,\n employee: Employee,\n effectiveDate: Date,\n isSalariedWithExpectedHours: boolean,\n hoursInPayPeriod: number,\n offCycle: boolean,\n): number => {\n const ptoHours = getPtoHours(\n compensation,\n isSalariedWithExpectedHours,\n hoursInPayPeriod,\n offCycle,\n )\n const primaryHourlyRate = getPrimaryHourlyRate(employee, effectiveDate)\n return ptoHours * primaryHourlyRate\n}\n\nconst isSalariedWithPayPeriodExpectedHours = (\n compensation: PayrollEmployeeCompensationsType,\n isSalaried: boolean,\n hoursInPayPeriod: number,\n): boolean => {\n if (!isSalaried) return false\n\n const regularHourlyCompensation = compensation.hourlyCompensations?.find(hourlyCompensation =>\n isRegularHours(hourlyCompensation.name || ''),\n )\n\n if (!regularHourlyCompensation) return false\n\n const regularHours = parseFloat(regularHourlyCompensation.hours || '0')\n return regularHours === hoursInPayPeriod\n}\n\nexport const calculateGrossPay = (\n compensation: PayrollEmployeeCompensationsType,\n employee: Employee,\n compensationEffectiveDateString?: string,\n paySchedule?: PayScheduleObject,\n payrollCategory: PayrollCategory = PayrollCategory.Regular,\n): number => {\n if (compensation.excluded) {\n return 0\n }\n\n const compensationEffectiveDate = compensationEffectiveDateString\n ? new Date(compensationEffectiveDateString)\n : new Date()\n\n const primaryJob = getPrimaryJob(employee)\n if (!primaryJob?.compensations) {\n return 0\n }\n\n const primaryCompensation = getEffectiveCompensation(\n primaryJob.compensations,\n compensationEffectiveDate,\n )\n\n if (!primaryCompensation) {\n return 0\n }\n\n const salaried = isSalaried(primaryCompensation)\n const hoursInPayPeriod = paySchedule ? getHoursInPayPeriod(paySchedule) : 0\n\n const isSalariedWithExpectedHours = isSalariedWithPayPeriodExpectedHours(\n compensation,\n salaried,\n hoursInPayPeriod,\n )\n\n const offCycle = isOffCyclePayroll(payrollCategory)\n\n const ptoHours = getPtoHours(\n compensation,\n isSalariedWithExpectedHours,\n hoursInPayPeriod,\n offCycle,\n )\n\n const regularPlusOvertimePay = calculateRegularPlusOvertimePay(\n compensation,\n employee,\n compensationEffectiveDate,\n isSalariedWithExpectedHours,\n hoursInPayPeriod,\n ptoHours,\n offCycle,\n )\n\n const fixedPay = getAdditionalEarnings(compensation)\n const ptoPay = calculatePtoPay(\n compensation,\n employee,\n compensationEffectiveDate,\n isSalariedWithExpectedHours,\n hoursInPayPeriod,\n offCycle,\n )\n const minimumWageAdjustment = calculateMinimumWageAdjustment(\n primaryCompensation,\n compensation,\n compensationEffectiveDate,\n )\n\n const total = regularPlusOvertimePay + fixedPay + ptoPay + minimumWageAdjustment\n return roundToTwoDecimals(total)\n}\n\n// Payroll type and status utilities\nexport const getPayrollType = (payroll: {\n external?: boolean\n offCycle?: boolean\n}): PayrollType => {\n if (payroll.external) return 'External'\n if (payroll.offCycle) return 'Off-Cycle'\n return 'Regular'\n}\n\nexport const isDismissalPayroll = (offCycleReason?: string | null): boolean =>\n offCycleReason === OffCycleReasonType.DismissedEmployee\n\nconst OFF_CYCLE_REASON_LABELS: Record<string, string> = {\n Bonus: 'Bonus',\n Correction: 'Correction',\n 'Transition from old pay schedule': 'Transition',\n 'Dismissed employee': 'Dismissal',\n 'Hired employee': 'New Hire',\n 'Benefit reversal': 'Benefit Reversal',\n 'Wage correction': 'Wage Correction',\n 'Tax reconciliation': 'Tax Reconciliation',\n Reversal: 'Reversal',\n 'Disability insurance distribution': 'Disability Insurance',\n}\n\nexport const getPayrollTypeLabel = (payroll: {\n external?: boolean\n offCycle?: boolean\n offCycleReason?: string | null\n}): string => {\n if (payroll.external) return 'External'\n if (payroll.offCycle && payroll.offCycleReason) {\n return OFF_CYCLE_REASON_LABELS[payroll.offCycleReason] ?? payroll.offCycleReason\n }\n if (payroll.offCycle) return 'Off-Cycle'\n return 'Regular'\n}\n\nexport const getAdditionalEarningsCompensations = ({\n flsaStatus,\n existingFixedCompensations = [],\n primaryJobUuid,\n fixedCompensationTypes = [],\n excludedTypes = [],\n}: {\n flsaStatus: string | undefined\n existingFixedCompensations?: FixedCompensations[]\n primaryJobUuid?: string\n fixedCompensationTypes?: PayrollFixedCompensationTypesType[]\n excludedTypes?: string[]\n}): FixedCompensations[] => {\n const allFixedCompensations = [...existingFixedCompensations]\n\n if (flsaStatus !== FlsaStatus.OWNER && primaryJobUuid && fixedCompensationTypes.length > 0) {\n const compensationTypeNames = fixedCompensationTypes\n .map(type => type.name)\n .filter(Boolean) as string[]\n\n compensationTypeNames.forEach(compensationName => {\n const exists = allFixedCompensations.some(\n comp => comp.name?.toLowerCase() === compensationName.toLowerCase(),\n )\n\n if (!exists) {\n allFixedCompensations.push({\n name: compensationName,\n amount: '0.00',\n jobUuid: primaryJobUuid,\n })\n }\n })\n }\n\n // Filter and sort additional earnings (exclude specified types)\n return allFixedCompensations\n .filter(comp => comp.name && !excludedTypes.includes(comp.name))\n .sort((a, b) => (a.name || '').localeCompare(b.name || ''))\n}\n\nexport const getReimbursementCompensation = (\n fixedCompensations: FixedCompensations[],\n fixedCompensationTypes: PayrollFixedCompensationTypesType[],\n primaryJobUuid?: string,\n) => {\n const reimbursementCompensation = fixedCompensations.find(\n comp => comp.name?.toLowerCase() === COMPENSATION_NAME_REIMBURSEMENT.toLowerCase(),\n )\n\n if (reimbursementCompensation) {\n return reimbursementCompensation\n }\n\n if (\n primaryJobUuid &&\n fixedCompensationTypes.some(\n type => type.name?.toLowerCase() === COMPENSATION_NAME_REIMBURSEMENT.toLowerCase(),\n )\n ) {\n return {\n name: COMPENSATION_NAME_REIMBURSEMENT,\n amount: '0.00',\n jobUuid: primaryJobUuid,\n }\n }\n\n return null\n}\n\nexport const hasDirectDepositEmployees = (\n employeeCompensations?: Array<{ paymentMethod?: string | null; excluded?: boolean }>,\n): boolean => {\n if (!employeeCompensations || employeeCompensations.length === 0) return true\n const activeCompensations = employeeCompensations.filter(comp => !comp.excluded)\n if (activeCompensations.length === 0) return true\n return activeCompensations.some(comp => comp.paymentMethod === 'Direct Deposit')\n}\n\n// Total Payroll = Gross Pay + Employer Taxes + Reimbursements + Benefits\nexport const calculateTotalPayroll = (payrollData: Payroll) => {\n const totalPayroll = payrollData.totals\n ? Number(payrollData.totals.grossPay ?? 0) +\n Number(payrollData.totals.employerTaxes ?? 0) +\n Number(payrollData.totals.reimbursements ?? 0) +\n Number(payrollData.totals.benefits ?? 0)\n : 0\n\n return totalPayroll\n}\n\n/**\n * Converts a Date to Pacific Time considering Daylight Saving Time.\n * Returns the UTC offset in hours (e.g., -7 for PDT, -8 for PST).\n *\n * DST rules for Pacific Time:\n * - Starts: Second Sunday in March at 2:00 AM\n * - Ends: First Sunday in November at 2:00 AM\n */\nconst getPacificTimeOffset = (date: Date): number => {\n const year = date.getFullYear()\n\n const secondSundayMarch = new Date(year, 2, 1)\n secondSundayMarch.setDate(1 + (7 - secondSundayMarch.getDay()) + 7)\n\n const firstSundayNovember = new Date(year, 10, 1)\n firstSundayNovember.setDate(1 + ((7 - firstSundayNovember.getDay()) % 7))\n\n const isDST = date >= secondSundayMarch && date < firstSundayNovember\n return isDST ? -7 : -8\n}\n\n/**\n * Determines if a payroll can be cancelled based on business rules.\n *\n * A payroll can be cancelled if all of the following conditions are met:\n * - The payroll has been processed (processed === true)\n * - Current time is before 4:00 PM PT on the payroll deadline\n * - The payrollStatusMeta.cancellable flag is not explicitly false\n *\n * This check enforces the business rule that payrolls can only be cancelled\n * before the 4:00 PM PT cutoff time on their deadline date.\n */\nexport const canCancelPayroll = (payroll: Payroll): boolean => {\n if (payroll.payrollStatusMeta?.cancellable === false) {\n return false\n }\n\n if (!payroll.processed) {\n return false\n }\n\n if (!payroll.payrollDeadline) {\n return false\n }\n\n const now = new Date()\n const deadline = new Date(payroll.payrollDeadline)\n\n const nowInPT = new Date(now.getTime() + getPacificTimeOffset(now) * MS_PER_HOUR)\n const deadlineInPT = new Date(deadline.getTime() + getPacificTimeOffset(deadline) * MS_PER_HOUR)\n\n const cutoffTime = new Date(deadlineInPT)\n cutoffTime.setUTCHours(16, 0, 0, 0)\n\n if (nowInPT >= cutoffTime) {\n return false\n }\n\n return true\n}\n"],"names":["REGULAR_HOURS_NAME","getPrimaryJob","employee","job","roundToSixDecimals","value","roundToTwoDecimals","isRegularHours","compensationName","PAY_PERIOD_HOURS_MAPPINGS","formatEmployeePayRate","locale","primaryJob","jobCompensation","rate","paymentUnit","formatPayRate","useFormatEmployeePayRate","t","useTranslation","useLocale","useCallback","getRegularHours","compensation","hourlyCompensation","sum","getOvertimeHours","getTotalPtoHours","pto","getAdditionalEarnings","fixedCompensation","name","amount","getReimbursements","reimbursementComp","formatHoursDisplay","hours","rounded","getHoursInPayPeriod","paySchedule","getEffectiveCompensation","compensations","effectiveDate","sorted","a","b","i","currentDateString","currentDate","getEffectiveMinimumWage","minimumWages","isSalaried","getTotalTipCompensations","fixedCompensations","calculateHourlyRate","getHourlyRateForJob","jobUuid","j","getPrimaryHourlyRate","getTotalOutstandingPtoHours","paidTimeOff","getPtoHours","isSalariedWithExpectedHours","hoursInPayPeriod","offCycle","regularPtoHours","outstandingPtoHours","calculateMinimumWageAdjustment","primaryCompensation","effectiveMinWage","totalHours","hourlyRate","totalTipCredit","totalTips","calculateRegularPlusOvertimePay","ptoHours","isOffCycle","regularRatePay","hc","overtimeWeightedRate","overtimePay","multiplier","calculatePtoPay","primaryHourlyRate","isSalariedWithPayPeriodExpectedHours","regularHourlyCompensation","calculateGrossPay","compensationEffectiveDateString","payrollCategory","PayrollCategory","compensationEffectiveDate","salaried","isOffCyclePayroll","regularPlusOvertimePay","fixedPay","ptoPay","minimumWageAdjustment","total","isDismissalPayroll","offCycleReason","OffCycleReasonType","OFF_CYCLE_REASON_LABELS","getPayrollTypeLabel","payroll","getAdditionalEarningsCompensations","flsaStatus","existingFixedCompensations","primaryJobUuid","fixedCompensationTypes","excludedTypes","allFixedCompensations","FlsaStatus","type","comp","getReimbursementCompensation","reimbursementCompensation","COMPENSATION_NAME_REIMBURSEMENT","hasDirectDepositEmployees","employeeCompensations","activeCompensations","calculateTotalPayroll","payrollData","getPacificTimeOffset","date","year","secondSundayMarch","firstSundayNovember","canCancelPayroll","now","deadline","nowInPT","MS_PER_HOUR","deadlineInPT","cutoffTime"],"mappings":"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"}
1
+ {"version":3,"file":"helpers.js","sources":["../../../src/components/Payroll/helpers.ts"],"sourcesContent":["import type { Employee } from '@gusto/embedded-api/models/components/employee'\nimport {\n type PayrollShowFixedCompensations,\n OffCycleReasonType,\n} from '@gusto/embedded-api/models/components/payroll'\nimport type { PayrollEmployeeCompensationsTypeFixedCompensations as FixedCompensations } from '@gusto/embedded-api/models/components/payrollemployeecompensationstype'\nimport type { PayrollFixedCompensationTypesType } from '@gusto/embedded-api/models/components/payrollfixedcompensationtypestype'\nimport { useCallback } from 'react'\nimport type { TFunction } from 'i18next'\nimport { useTranslation } from 'react-i18next'\nimport type { PayScheduleShow as PayScheduleObject } from '@gusto/embedded-api/models/components/payscheduleshow'\nimport type { Compensation, MinimumWages } from '@gusto/embedded-api/models/components/compensation'\nimport type { PayrollEmployeeCompensationsType } from '@gusto/embedded-api/models/components/payrollemployeecompensationstype'\nimport type { Payroll } from '@gusto/embedded-api/models/components/payroll'\nimport type { PayrollType } from './PayrollList/types'\nimport { PayrollCategory, isOffCyclePayroll } from './payrollTypes'\nimport { formatPayRate } from '@/helpers/formattedStrings'\nimport { useLocale } from '@/contexts/LocaleProvider/useLocale'\nimport { COMPENSATION_NAME_REIMBURSEMENT, FlsaStatus } from '@/shared/constants'\nimport { MS_PER_HOUR } from '@/helpers/dateFormatting'\nconst REGULAR_HOURS_NAME = 'regular hours'\n\n// Utility to get the primary job from an employee\nexport const getPrimaryJob = (employee: Employee) => {\n return employee.jobs?.find(job => job.primary) || employee.jobs?.[0] || null\n}\n\nconst roundToSixDecimals = (value: number): number => {\n return Math.round(value * 1_000_000) / 1_000_000\n}\n\nconst roundToTwoDecimals = (value: number): number => {\n return Math.round(value * 100) / 100\n}\n\nconst isRegularHours = (compensationName: string): boolean => {\n return compensationName.toLowerCase() === REGULAR_HOURS_NAME\n}\n\nconst PAY_PERIOD_HOURS_MAPPINGS: Record<string, number> = {\n Daily: 8.0,\n 'Every week': 40.0,\n 'Every other week': 80.0,\n 'Twice per month': 86.666667,\n Monthly: 173.333333,\n Quarterly: 520.0,\n Semiannually: 1040.0,\n Annually: 2080.0,\n}\n\nexport const formatEmployeePayRate = ({\n employee,\n t,\n locale = 'en-US',\n}: {\n employee?: Employee\n t: TFunction\n locale?: string\n}) => {\n if (!employee?.jobs) {\n return null\n }\n\n const primaryJob = getPrimaryJob(employee)\n if (!primaryJob?.compensations) {\n return null\n }\n\n const jobCompensation = primaryJob.compensations[0]\n if (!jobCompensation) {\n return null\n }\n if (!jobCompensation.rate || parseFloat(jobCompensation.rate) === 0) {\n return null\n }\n\n const rate = parseFloat(jobCompensation.rate)\n const paymentUnit = jobCompensation.paymentUnit || 'Hour'\n\n return formatPayRate({ rate, paymentUnit, t, locale })\n}\n\nexport const useFormatEmployeePayRate = () => {\n const { t } = useTranslation('common')\n const { locale } = useLocale()\n\n return useCallback(\n (employee?: Employee) => {\n return formatEmployeePayRate({ employee, t, locale })\n },\n [t, locale],\n )\n}\n\nexport const getEmployeePayRateInfo = (employee: Employee | undefined) => {\n if (!employee?.jobs) {\n return null\n }\n\n const primaryJob = getPrimaryJob(employee)\n if (!primaryJob?.compensations) {\n return null\n }\n\n const jobCompensation = primaryJob.compensations[0]\n if (!jobCompensation) {\n return null\n }\n if (!jobCompensation.rate || parseFloat(jobCompensation.rate) === 0) {\n return null\n }\n\n const rate = parseFloat(jobCompensation.rate)\n const paymentUnit = jobCompensation.paymentUnit || 'Hour'\n\n return { rate, paymentUnit }\n}\n\nexport const getRegularHours = (compensation: PayrollEmployeeCompensationsType) => {\n if (!compensation.hourlyCompensations) return 0\n\n return compensation.hourlyCompensations\n .filter(hourlyCompensation => hourlyCompensation.name?.toLowerCase() === 'regular hours')\n .reduce((sum, hourlyCompensation) => sum + parseFloat(hourlyCompensation.hours || '0'), 0)\n}\n\nexport function getOvertimeHours(compensation: PayrollEmployeeCompensationsType) {\n if (!compensation.hourlyCompensations || compensation.excluded) {\n return 0\n }\n\n return compensation.hourlyCompensations\n .filter(hourlyCompensation => Number(hourlyCompensation.compensationMultiplier) > 1)\n .reduce((sum, hourlyCompensation) => sum + parseFloat(hourlyCompensation.hours || '0'), 0)\n}\n\nexport const getTotalPtoHours = (compensation: PayrollEmployeeCompensationsType) => {\n if (!compensation.paidTimeOff) {\n return 0\n }\n return compensation.paidTimeOff.reduce((sum, pto) => sum + parseFloat(pto.hours || '0'), 0)\n}\n\nexport const getAdditionalEarnings = (compensation: PayrollEmployeeCompensationsType) => {\n if (!compensation.fixedCompensations) {\n return 0\n }\n\n return compensation.fixedCompensations\n .filter(fixedCompensation => {\n const name = fixedCompensation.name?.toLowerCase() || ''\n const amount = parseFloat(fixedCompensation.amount || '0')\n return name !== 'reimbursement' && name !== 'minimum wage adjustment' && amount > 0\n })\n .reduce((sum, fixedCompensation) => sum + parseFloat(fixedCompensation.amount || '0'), 0)\n}\n\nexport const getReimbursements = (compensation: PayrollEmployeeCompensationsType) => {\n if (!compensation.fixedCompensations) {\n return 0\n }\n\n const reimbursementComp = compensation.fixedCompensations.find(\n fixedCompensation => fixedCompensation.name?.toLowerCase() === 'reimbursement',\n )\n return reimbursementComp ? parseFloat(reimbursementComp.amount || '0') : 0\n}\n\nexport const formatHoursDisplay = (hours: number): string => {\n const rounded = roundToTwoDecimals(hours)\n\n if (rounded % 1 === 0) {\n return `${rounded}.0`\n }\n\n return rounded.toString()\n}\n\nconst getHoursInPayPeriod = (paySchedule: PayScheduleObject): number => {\n if (!paySchedule.frequency) {\n return 0\n }\n\n return PAY_PERIOD_HOURS_MAPPINGS[paySchedule.frequency] || 0\n}\n\nconst getEffectiveCompensation = (\n compensations: Compensation[],\n effectiveDate: Date,\n): Compensation | null => {\n if (!compensations.length) return null\n\n const sorted = [...compensations].sort(\n (a, b) =>\n (a.effectiveDate ? new Date(a.effectiveDate).getTime() : 0) -\n (b.effectiveDate ? new Date(b.effectiveDate).getTime() : 0),\n )\n\n for (let i = sorted.length - 1; i >= 0; i--) {\n const currentDateString = sorted[i]?.effectiveDate\n const currentDate = currentDateString ? new Date(currentDateString) : null\n if (currentDate && currentDate <= effectiveDate) {\n return sorted[i] || null\n }\n }\n\n return sorted[0] || null\n}\n\nconst getEffectiveMinimumWage = (\n minimumWages: MinimumWages[],\n effectiveDate: Date,\n): MinimumWages | null => {\n if (!minimumWages.length) return null\n\n const sorted = [...minimumWages].sort(\n (a, b) =>\n (a.effectiveDate ? new Date(a.effectiveDate).getTime() : 0) -\n (b.effectiveDate ? new Date(b.effectiveDate).getTime() : 0),\n )\n\n for (let i = sorted.length - 1; i >= 0; i--) {\n const currentDateString = sorted[i]?.effectiveDate\n const currentDate = currentDateString ? new Date(currentDateString) : null\n if (currentDate && currentDate <= effectiveDate) {\n return sorted[i] || null\n }\n }\n\n return sorted[0] || null\n}\n\nconst isSalaried = (compensation: Compensation): boolean => {\n return compensation.flsaStatus === 'Exempt' || compensation.flsaStatus === 'Salaried Nonexempt'\n}\n\nconst getTotalTipCompensations = (fixedCompensations: PayrollShowFixedCompensations[]): number => {\n if (!fixedCompensations.length) return 0\n\n return fixedCompensations\n .filter(fixedCompensation => {\n const name = fixedCompensation.name?.toLowerCase()\n const amount = parseFloat(fixedCompensation.amount || '0')\n return (name === 'paycheck tips' || name === 'cash tips') && amount > 0\n })\n .reduce((sum, fixedCompensation) => sum + parseFloat(fixedCompensation.amount || '0'), 0)\n}\n\nconst calculateHourlyRate = (compensation: Compensation): number => {\n const rate = parseFloat(compensation.rate || '0')\n const paymentUnit = compensation.paymentUnit || 'Hour'\n\n switch (paymentUnit) {\n case 'Hour':\n return rate\n case 'Year':\n return rate / 2080 // 52 weeks * 40 hours\n case 'Month':\n return rate / 173.333333\n case 'Week':\n return rate / 40\n case 'Paycheck':\n return 0 // Paycheck rate is 0 for hourly calculation\n default:\n return rate\n }\n}\n\nconst getHourlyRateForJob = (employee: Employee, jobUuid: string, effectiveDate: Date): number => {\n const job = employee.jobs?.find(j => j.uuid === jobUuid)\n if (!job?.compensations) {\n return 0\n }\n\n const compensation = getEffectiveCompensation(job.compensations, effectiveDate)\n return compensation ? calculateHourlyRate(compensation) : 0\n}\n\nconst getPrimaryHourlyRate = (employee: Employee, effectiveDate: Date): number => {\n const primaryJob = getPrimaryJob(employee)\n if (!primaryJob?.compensations) {\n return 0\n }\n\n const compensation = getEffectiveCompensation(primaryJob.compensations, effectiveDate)\n return compensation ? calculateHourlyRate(compensation) : 0\n}\n\nconst getTotalOutstandingPtoHours = (compensation: PayrollEmployeeCompensationsType): number => {\n if (!compensation.paidTimeOff) {\n return 0\n }\n\n return compensation.paidTimeOff.reduce(\n (sum, paidTimeOff) => sum + parseFloat(paidTimeOff.finalPayoutUnusedHoursInput || '0'),\n 0,\n )\n}\n\nconst getPtoHours = (\n compensation: PayrollEmployeeCompensationsType,\n isSalariedWithExpectedHours: boolean,\n hoursInPayPeriod: number,\n offCycle: boolean,\n): number => {\n const regularPtoHours = getTotalPtoHours(compensation)\n\n if (offCycle) {\n const outstandingPtoHours = getTotalOutstandingPtoHours(compensation)\n return regularPtoHours + outstandingPtoHours\n }\n\n if (isSalariedWithExpectedHours) {\n return Math.min(hoursInPayPeriod, regularPtoHours)\n }\n\n return regularPtoHours\n}\n\nconst calculateMinimumWageAdjustment = (\n primaryCompensation: Compensation,\n compensation: PayrollEmployeeCompensationsType,\n effectiveDate: Date,\n): number => {\n if (!primaryCompensation.adjustForMinimumWage) return 0\n\n const effectiveMinWage = getEffectiveMinimumWage(\n primaryCompensation.minimumWages || [],\n effectiveDate,\n )\n if (!effectiveMinWage) {\n return 0\n }\n\n const totalHours =\n compensation.hourlyCompensations?.reduce(\n (sum, hourlyCompensation) => sum + parseFloat(hourlyCompensation.hours || '0'),\n 0,\n ) || 0\n\n const hourlyRate = calculateHourlyRate(primaryCompensation)\n\n const totalTipCredit = (parseFloat(effectiveMinWage.wage || '0') - hourlyRate) * totalHours\n const totalTips = getTotalTipCompensations(compensation.fixedCompensations || [])\n\n return Math.max(0, totalTipCredit - totalTips)\n}\n\nconst calculateRegularPlusOvertimePay = (\n compensation: PayrollEmployeeCompensationsType,\n employee: Employee,\n effectiveDate: Date,\n isSalariedWithExpectedHours: boolean,\n hoursInPayPeriod: number,\n ptoHours: number,\n isOffCycle: boolean,\n): number => {\n if (!isOffCycle && isSalariedWithExpectedHours) {\n const primaryHourlyRate = getPrimaryHourlyRate(employee, effectiveDate)\n return primaryHourlyRate * (hoursInPayPeriod - ptoHours)\n }\n\n if (!compensation.hourlyCompensations || !employee.jobs) {\n return 0\n }\n\n const regularRatePay = compensation.hourlyCompensations.reduce((sum, hc) => {\n const hours = parseFloat(hc.hours || '0')\n const hourlyRate = getHourlyRateForJob(employee, hc.jobUuid || '', effectiveDate)\n return sum + hours * hourlyRate\n }, 0)\n\n const totalHours = compensation.hourlyCompensations.reduce((sum, hc) => {\n return sum + parseFloat(hc.hours || '0')\n }, 0)\n\n if (totalHours === 0) return regularRatePay\n\n const overtimeWeightedRate = roundToSixDecimals(regularRatePay / totalHours)\n\n // Calculate overtime pay for non-regular hours\n const overtimePay = compensation.hourlyCompensations\n .filter(hc => !isRegularHours(hc.name || ''))\n .reduce((sum, hc) => {\n const hours = parseFloat(hc.hours || '0')\n const multiplier = hc.compensationMultiplier || 1\n return sum + hours * overtimeWeightedRate * (multiplier - 1)\n }, 0)\n\n return regularRatePay + overtimePay\n}\n\nconst calculatePtoPay = (\n compensation: PayrollEmployeeCompensationsType,\n employee: Employee,\n effectiveDate: Date,\n isSalariedWithExpectedHours: boolean,\n hoursInPayPeriod: number,\n offCycle: boolean,\n): number => {\n const ptoHours = getPtoHours(\n compensation,\n isSalariedWithExpectedHours,\n hoursInPayPeriod,\n offCycle,\n )\n const primaryHourlyRate = getPrimaryHourlyRate(employee, effectiveDate)\n return ptoHours * primaryHourlyRate\n}\n\nconst isSalariedWithPayPeriodExpectedHours = (\n compensation: PayrollEmployeeCompensationsType,\n isSalaried: boolean,\n hoursInPayPeriod: number,\n): boolean => {\n if (!isSalaried) return false\n\n const regularHourlyCompensation = compensation.hourlyCompensations?.find(hourlyCompensation =>\n isRegularHours(hourlyCompensation.name || ''),\n )\n\n if (!regularHourlyCompensation) return false\n\n const regularHours = parseFloat(regularHourlyCompensation.hours || '0')\n return regularHours === hoursInPayPeriod\n}\n\nexport const calculateGrossPay = (\n compensation: PayrollEmployeeCompensationsType,\n employee: Employee,\n compensationEffectiveDateString?: string,\n paySchedule?: PayScheduleObject,\n payrollCategory: PayrollCategory = PayrollCategory.Regular,\n): number => {\n if (compensation.excluded) {\n return 0\n }\n\n const compensationEffectiveDate = compensationEffectiveDateString\n ? new Date(compensationEffectiveDateString)\n : new Date()\n\n const primaryJob = getPrimaryJob(employee)\n if (!primaryJob?.compensations) {\n return 0\n }\n\n const primaryCompensation = getEffectiveCompensation(\n primaryJob.compensations,\n compensationEffectiveDate,\n )\n\n if (!primaryCompensation) {\n return 0\n }\n\n const salaried = isSalaried(primaryCompensation)\n const hoursInPayPeriod = paySchedule ? getHoursInPayPeriod(paySchedule) : 0\n\n const isSalariedWithExpectedHours = isSalariedWithPayPeriodExpectedHours(\n compensation,\n salaried,\n hoursInPayPeriod,\n )\n\n const offCycle = isOffCyclePayroll(payrollCategory)\n\n const ptoHours = getPtoHours(\n compensation,\n isSalariedWithExpectedHours,\n hoursInPayPeriod,\n offCycle,\n )\n\n const regularPlusOvertimePay = calculateRegularPlusOvertimePay(\n compensation,\n employee,\n compensationEffectiveDate,\n isSalariedWithExpectedHours,\n hoursInPayPeriod,\n ptoHours,\n offCycle,\n )\n\n const fixedPay = getAdditionalEarnings(compensation)\n const ptoPay = calculatePtoPay(\n compensation,\n employee,\n compensationEffectiveDate,\n isSalariedWithExpectedHours,\n hoursInPayPeriod,\n offCycle,\n )\n const minimumWageAdjustment = calculateMinimumWageAdjustment(\n primaryCompensation,\n compensation,\n compensationEffectiveDate,\n )\n\n const total = regularPlusOvertimePay + fixedPay + ptoPay + minimumWageAdjustment\n return roundToTwoDecimals(total)\n}\n\n// Payroll type and status utilities\nexport const getPayrollType = (payroll: {\n external?: boolean\n offCycle?: boolean\n}): PayrollType => {\n if (payroll.external) return 'External'\n if (payroll.offCycle) return 'Off-Cycle'\n return 'Regular'\n}\n\nexport const isDismissalPayroll = (offCycleReason?: string | null): boolean =>\n offCycleReason === OffCycleReasonType.DismissedEmployee\n\nconst OFF_CYCLE_REASON_LABELS: Record<string, string> = {\n Bonus: 'Bonus',\n Correction: 'Correction',\n 'Transition from old pay schedule': 'Transition',\n 'Dismissed employee': 'Dismissal',\n 'Hired employee': 'New Hire',\n 'Benefit reversal': 'Benefit Reversal',\n 'Wage correction': 'Wage Correction',\n 'Tax reconciliation': 'Tax Reconciliation',\n Reversal: 'Reversal',\n 'Disability insurance distribution': 'Disability Insurance',\n}\n\nexport const getPayrollTypeLabel = (payroll: {\n external?: boolean\n offCycle?: boolean\n offCycleReason?: string | null\n}): string => {\n if (payroll.external) return 'External'\n if (payroll.offCycle && payroll.offCycleReason) {\n return OFF_CYCLE_REASON_LABELS[payroll.offCycleReason] ?? payroll.offCycleReason\n }\n if (payroll.offCycle) return 'Off-Cycle'\n return 'Regular'\n}\n\nexport const getAdditionalEarningsCompensations = ({\n flsaStatus,\n existingFixedCompensations = [],\n primaryJobUuid,\n fixedCompensationTypes = [],\n excludedTypes = [],\n}: {\n flsaStatus: string | undefined\n existingFixedCompensations?: FixedCompensations[]\n primaryJobUuid?: string\n fixedCompensationTypes?: PayrollFixedCompensationTypesType[]\n excludedTypes?: string[]\n}): FixedCompensations[] => {\n const allFixedCompensations = [...existingFixedCompensations]\n\n if (flsaStatus !== FlsaStatus.OWNER && primaryJobUuid && fixedCompensationTypes.length > 0) {\n const compensationTypeNames = fixedCompensationTypes\n .map(type => type.name)\n .filter(Boolean) as string[]\n\n compensationTypeNames.forEach(compensationName => {\n const exists = allFixedCompensations.some(\n comp => comp.name?.toLowerCase() === compensationName.toLowerCase(),\n )\n\n if (!exists) {\n allFixedCompensations.push({\n name: compensationName,\n amount: '0.00',\n jobUuid: primaryJobUuid,\n })\n }\n })\n }\n\n // Filter and sort additional earnings (exclude specified types)\n return allFixedCompensations\n .filter(comp => comp.name && !excludedTypes.includes(comp.name))\n .sort((a, b) => (a.name || '').localeCompare(b.name || ''))\n}\n\nexport const getReimbursementCompensation = (\n fixedCompensations: FixedCompensations[],\n fixedCompensationTypes: PayrollFixedCompensationTypesType[],\n primaryJobUuid?: string,\n) => {\n const reimbursementCompensation = fixedCompensations.find(\n comp => comp.name?.toLowerCase() === COMPENSATION_NAME_REIMBURSEMENT.toLowerCase(),\n )\n\n if (reimbursementCompensation) {\n return reimbursementCompensation\n }\n\n if (\n primaryJobUuid &&\n fixedCompensationTypes.some(\n type => type.name?.toLowerCase() === COMPENSATION_NAME_REIMBURSEMENT.toLowerCase(),\n )\n ) {\n return {\n name: COMPENSATION_NAME_REIMBURSEMENT,\n amount: '0.00',\n jobUuid: primaryJobUuid,\n }\n }\n\n return null\n}\n\nexport const hasDirectDepositEmployees = (\n employeeCompensations?: Array<{ paymentMethod?: string | null; excluded?: boolean }>,\n): boolean => {\n if (!employeeCompensations || employeeCompensations.length === 0) return true\n const activeCompensations = employeeCompensations.filter(comp => !comp.excluded)\n if (activeCompensations.length === 0) return true\n return activeCompensations.some(comp => comp.paymentMethod === 'Direct Deposit')\n}\n\n// Total Payroll = Gross Pay + Employer Taxes + Reimbursements + Benefits\nexport const calculateTotalPayroll = (payrollData: Payroll) => {\n const totalPayroll = payrollData.totals\n ? Number(payrollData.totals.grossPay ?? 0) +\n Number(payrollData.totals.employerTaxes ?? 0) +\n Number(payrollData.totals.reimbursements ?? 0) +\n Number(payrollData.totals.benefits ?? 0)\n : 0\n\n return totalPayroll\n}\n\n/**\n * Converts a Date to Pacific Time considering Daylight Saving Time.\n * Returns the UTC offset in hours (e.g., -7 for PDT, -8 for PST).\n *\n * DST rules for Pacific Time:\n * - Starts: Second Sunday in March at 2:00 AM\n * - Ends: First Sunday in November at 2:00 AM\n */\nconst getPacificTimeOffset = (date: Date): number => {\n const year = date.getFullYear()\n\n const secondSundayMarch = new Date(year, 2, 1)\n secondSundayMarch.setDate(1 + (7 - secondSundayMarch.getDay()) + 7)\n\n const firstSundayNovember = new Date(year, 10, 1)\n firstSundayNovember.setDate(1 + ((7 - firstSundayNovember.getDay()) % 7))\n\n const isDST = date >= secondSundayMarch && date < firstSundayNovember\n return isDST ? -7 : -8\n}\n\n/**\n * Determines if a payroll can be cancelled based on business rules.\n *\n * A payroll can be cancelled if all of the following conditions are met:\n * - The payroll has been processed (processed === true)\n * - Current time is before 4:00 PM PT on the payroll deadline\n * - The payrollStatusMeta.cancellable flag is not explicitly false\n *\n * This check enforces the business rule that payrolls can only be cancelled\n * before the 4:00 PM PT cutoff time on their deadline date.\n */\nexport const canCancelPayroll = (payroll: Payroll): boolean => {\n if (payroll.payrollStatusMeta?.cancellable === false) {\n return false\n }\n\n if (!payroll.processed) {\n return false\n }\n\n if (!payroll.payrollDeadline) {\n return false\n }\n\n const now = new Date()\n const deadline = new Date(payroll.payrollDeadline)\n\n const nowInPT = new Date(now.getTime() + getPacificTimeOffset(now) * MS_PER_HOUR)\n const deadlineInPT = new Date(deadline.getTime() + getPacificTimeOffset(deadline) * MS_PER_HOUR)\n\n const cutoffTime = new Date(deadlineInPT)\n cutoffTime.setUTCHours(16, 0, 0, 0)\n\n if (nowInPT >= cutoffTime) {\n return false\n }\n\n return true\n}\n"],"names":["REGULAR_HOURS_NAME","getPrimaryJob","employee","job","roundToSixDecimals","value","roundToTwoDecimals","isRegularHours","compensationName","PAY_PERIOD_HOURS_MAPPINGS","formatEmployeePayRate","locale","primaryJob","jobCompensation","rate","paymentUnit","formatPayRate","useFormatEmployeePayRate","t","useTranslation","useLocale","useCallback","getRegularHours","compensation","hourlyCompensation","sum","getOvertimeHours","getTotalPtoHours","pto","getAdditionalEarnings","fixedCompensation","name","amount","getReimbursements","reimbursementComp","formatHoursDisplay","hours","rounded","getHoursInPayPeriod","paySchedule","getEffectiveCompensation","compensations","effectiveDate","sorted","a","b","i","currentDateString","currentDate","getEffectiveMinimumWage","minimumWages","isSalaried","getTotalTipCompensations","fixedCompensations","calculateHourlyRate","getHourlyRateForJob","jobUuid","j","getPrimaryHourlyRate","getTotalOutstandingPtoHours","paidTimeOff","getPtoHours","isSalariedWithExpectedHours","hoursInPayPeriod","offCycle","regularPtoHours","outstandingPtoHours","calculateMinimumWageAdjustment","primaryCompensation","effectiveMinWage","totalHours","hourlyRate","totalTipCredit","totalTips","calculateRegularPlusOvertimePay","ptoHours","isOffCycle","regularRatePay","hc","overtimeWeightedRate","overtimePay","multiplier","calculatePtoPay","primaryHourlyRate","isSalariedWithPayPeriodExpectedHours","regularHourlyCompensation","calculateGrossPay","compensationEffectiveDateString","payrollCategory","PayrollCategory","compensationEffectiveDate","salaried","isOffCyclePayroll","regularPlusOvertimePay","fixedPay","ptoPay","minimumWageAdjustment","total","isDismissalPayroll","offCycleReason","OffCycleReasonType","OFF_CYCLE_REASON_LABELS","getPayrollTypeLabel","payroll","getAdditionalEarningsCompensations","flsaStatus","existingFixedCompensations","primaryJobUuid","fixedCompensationTypes","excludedTypes","allFixedCompensations","FlsaStatus","type","comp","getReimbursementCompensation","reimbursementCompensation","COMPENSATION_NAME_REIMBURSEMENT","hasDirectDepositEmployees","employeeCompensations","activeCompensations","calculateTotalPayroll","payrollData","getPacificTimeOffset","date","year","secondSundayMarch","firstSundayNovember","canCancelPayroll","now","deadline","nowInPT","MS_PER_HOUR","deadlineInPT","cutoffTime"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { PayrollPrepared } from '@gusto/embedded-api/models/components/payroll';
2
- import { PaySchedule } from '@gusto/embedded-api/models/components/payschedule';
2
+ import { PayScheduleShow } from '@gusto/embedded-api/models/components/payscheduleshow';
3
3
  import { QueryParamSortBy } from '@gusto/embedded-api/models/operations/putv1companiescompanyidpayrollspayrollidprepare';
4
4
  interface UsePreparedPayrollDataParams {
5
5
  companyId: string;
@@ -11,7 +11,7 @@ interface UsePreparedPayrollDataParams {
11
11
  interface UsePreparedPayrollDataReturn {
12
12
  handlePreparePayroll: () => Promise<void>;
13
13
  preparedPayroll: PayrollPrepared | undefined;
14
- paySchedule: PaySchedule | undefined;
14
+ paySchedule: PayScheduleShow | undefined;
15
15
  isLoading: boolean;
16
16
  isPaginating: boolean;
17
17
  hasInitialData: boolean;
@@ -1,12 +1,12 @@
1
- import { useState as b, useRef as m, useMemo as M, useCallback as y, useEffect as _ } from "react";
1
+ import { useState as M, useRef as m, useMemo as _, useCallback as y, useEffect as b } from "react";
2
2
  import { usePayrollsPrepareMutation as L } from "@gusto/embedded-api/react-query/payrollsPrepare";
3
3
  import { usePaySchedulesGet as D } from "@gusto/embedded-api/react-query/paySchedulesGet";
4
- import { UnprocessableEntityErrorObject as T } from "@gusto/embedded-api/models/errors/unprocessableentityerrorobject";
4
+ import { UnprocessableEntityError as T } from "@gusto/embedded-api/models/errors/unprocessableentityerror";
5
5
  import "react/jsx-runtime";
6
6
  import "react-error-boundary";
7
7
  import "react-i18next";
8
8
  import "@tanstack/react-query";
9
- import { useBase as x } from "../Base/useBase.js";
9
+ import { useBase as w } from "../Base/useBase.js";
10
10
  import "@gusto/embedded-api/models/errors/apierror";
11
11
  import "@gusto/embedded-api/models/errors/gustoembeddederror";
12
12
  import "@gusto/embedded-api/models/errors/sdkvalidationerror";
@@ -17,15 +17,15 @@ import "../../shared/constants.js";
17
17
  import "classnames";
18
18
  import "../../contexts/ComponentAdapter/useComponentContext.js";
19
19
  import "../../contexts/LoadingIndicatorProvider/useLoadingIndicator.js";
20
- import { retryAsync as j } from "../../helpers/retryAsync.js";
21
- const q = 4, v = 1500, w = (e) => e instanceof T ? e.errors.some((r) => r.category === "invalid_operation") : !1, ee = ({
20
+ import { retryAsync as x } from "../../helpers/retryAsync.js";
21
+ const q = 4, v = 1500, B = (e) => e instanceof T ? e.errors.some((r) => r.category === "invalid_operation") : !1, ee = ({
22
22
  companyId: e,
23
23
  payrollId: r,
24
24
  employeeUuids: a,
25
25
  sortBy: n,
26
26
  onDataReady: l
27
27
  }) => {
28
- const { mutateAsync: p, isPending: c } = L(), [o, f] = b(), t = m(!1), u = m(!1), { baseSubmitHandler: d } = x(), h = M(() => a?.join(",") ?? "", [a]), { data: S, isLoading: E } = D(
28
+ const { mutateAsync: p, isPending: c } = L(), [o, f] = M(), t = m(!1), u = m(!1), { baseSubmitHandler: d } = w(), h = _(() => a?.join(",") ?? "", [a]), { data: S, isLoading: E } = D(
29
29
  {
30
30
  companyId: e,
31
31
  payScheduleId: o?.payPeriod?.payScheduleUuid || ""
@@ -48,21 +48,21 @@ const q = 4, v = 1500, w = (e) => e instanceof T ? e.errors.some((r) => r.catego
48
48
  }, [e, r, p, h, n, l]), i = y(async () => {
49
49
  await d(
50
50
  null,
51
- () => j(P, {
51
+ () => x(P, {
52
52
  maxAttempts: q,
53
53
  delayMs: v,
54
- shouldRetry: w
54
+ shouldRetry: B
55
55
  })
56
56
  );
57
57
  }, [d, P]);
58
- _(() => {
58
+ b(() => {
59
59
  u.current || (u.current = !0, i());
60
60
  }, [i]);
61
61
  const g = c && !t.current, R = c && t.current, A = g || E;
62
62
  return {
63
63
  handlePreparePayroll: i,
64
64
  preparedPayroll: o,
65
- paySchedule: S?.paySchedule,
65
+ paySchedule: S?.payScheduleShow,
66
66
  isLoading: A,
67
67
  isPaginating: R,
68
68
  hasInitialData: t.current
@@ -1 +1 @@
1
- {"version":3,"file":"usePreparedPayrollData.js","sources":["../../../src/components/Payroll/usePreparedPayrollData.ts"],"sourcesContent":["import { useState, useEffect, useCallback, useRef, useMemo } from 'react'\nimport { usePayrollsPrepareMutation } from '@gusto/embedded-api/react-query/payrollsPrepare'\nimport { usePaySchedulesGet } from '@gusto/embedded-api/react-query/paySchedulesGet'\nimport type { PayrollPrepared } from '@gusto/embedded-api/models/components/payroll'\nimport type { PaySchedule } from '@gusto/embedded-api/models/components/payschedule'\nimport type { QueryParamSortBy } from '@gusto/embedded-api/models/operations/putv1companiescompanyidpayrollspayrollidprepare'\nimport { UnprocessableEntityErrorObject } from '@gusto/embedded-api/models/errors/unprocessableentityerrorobject'\nimport { useBase } from '../Base'\nimport { retryAsync } from '@/helpers/retryAsync'\n\ninterface UsePreparedPayrollDataParams {\n companyId: string\n payrollId: string\n employeeUuids?: string[]\n sortBy?: QueryParamSortBy\n onDataReady?: (preparedPayroll: PayrollPrepared) => void\n}\n\ninterface UsePreparedPayrollDataReturn {\n handlePreparePayroll: () => Promise<void>\n preparedPayroll: PayrollPrepared | undefined\n paySchedule: PaySchedule | undefined\n isLoading: boolean\n isPaginating: boolean\n hasInitialData: boolean\n}\n\nconst PREPARE_MAX_ATTEMPTS = 4\nconst PREPARE_RETRY_DELAY_MS = 1500\n\nconst isPayrollBeingProcessedError = (error: unknown): boolean => {\n if (!(error instanceof UnprocessableEntityErrorObject)) return false\n return error.errors.some(e => e.category === 'invalid_operation')\n}\n\nexport const usePreparedPayrollData = ({\n companyId,\n payrollId,\n employeeUuids,\n sortBy,\n onDataReady,\n}: UsePreparedPayrollDataParams): UsePreparedPayrollDataReturn => {\n const { mutateAsync: preparePayroll, isPending: isPreparePayrollPending } =\n usePayrollsPrepareMutation()\n const [preparedPayroll, setPreparedPayroll] = useState<PayrollPrepared | undefined>()\n const hasInitialDataRef = useRef(false)\n const hasFiredRef = useRef(false)\n const { baseSubmitHandler } = useBase()\n\n const employeeUuidsKey = useMemo(() => employeeUuids?.join(',') ?? '', [employeeUuids])\n\n const { data: payScheduleData, isLoading: isPayScheduleLoading } = usePaySchedulesGet(\n {\n companyId,\n payScheduleId: preparedPayroll?.payPeriod?.payScheduleUuid || '',\n },\n {\n enabled: !!preparedPayroll?.payPeriod?.payScheduleUuid,\n },\n )\n\n const executePrepare = useCallback(async () => {\n const result = await preparePayroll({\n request: {\n companyId,\n payrollId,\n sortBy,\n requestBody: {\n employeeUuids,\n },\n },\n })\n setPreparedPayroll(result.payrollPrepared)\n if (result.payrollPrepared) {\n hasInitialDataRef.current = true\n onDataReady?.(result.payrollPrepared)\n }\n }, [companyId, payrollId, preparePayroll, employeeUuidsKey, sortBy, onDataReady])\n\n const handlePreparePayroll = useCallback(async () => {\n await baseSubmitHandler(null, () =>\n retryAsync(executePrepare, {\n maxAttempts: PREPARE_MAX_ATTEMPTS,\n delayMs: PREPARE_RETRY_DELAY_MS,\n shouldRetry: isPayrollBeingProcessedError,\n }),\n )\n }, [baseSubmitHandler, executePrepare])\n\n useEffect(() => {\n if (hasFiredRef.current) return\n hasFiredRef.current = true\n void handlePreparePayroll()\n }, [handlePreparePayroll])\n\n const isInitialLoading = isPreparePayrollPending && !hasInitialDataRef.current\n const isPaginating = isPreparePayrollPending && hasInitialDataRef.current\n const isLoading = isInitialLoading || isPayScheduleLoading\n\n return {\n handlePreparePayroll,\n preparedPayroll,\n paySchedule: payScheduleData?.paySchedule,\n isLoading,\n isPaginating,\n hasInitialData: hasInitialDataRef.current,\n }\n}\n"],"names":["PREPARE_MAX_ATTEMPTS","PREPARE_RETRY_DELAY_MS","isPayrollBeingProcessedError","error","UnprocessableEntityErrorObject","e","usePreparedPayrollData","companyId","payrollId","employeeUuids","sortBy","onDataReady","preparePayroll","isPreparePayrollPending","usePayrollsPrepareMutation","preparedPayroll","setPreparedPayroll","useState","hasInitialDataRef","useRef","hasFiredRef","baseSubmitHandler","useBase","employeeUuidsKey","useMemo","payScheduleData","isPayScheduleLoading","usePaySchedulesGet","executePrepare","useCallback","result","handlePreparePayroll","retryAsync","useEffect","isInitialLoading","isPaginating","isLoading"],"mappings":";;;;;;;;;;;;;;;;;;;;AA2BA,MAAMA,IAAuB,GACvBC,IAAyB,MAEzBC,IAA+B,CAACC,MAC9BA,aAAiBC,IAChBD,EAAM,OAAO,KAAK,CAAAE,MAAKA,EAAE,aAAa,mBAAmB,IADD,IAIpDC,KAAyB,CAAC;AAAA,EACrC,WAAAC;AAAA,EACA,WAAAC;AAAA,EACA,eAAAC;AAAA,EACA,QAAAC;AAAA,EACA,aAAAC;AACF,MAAkE;AAChE,QAAM,EAAE,aAAaC,GAAgB,WAAWC,EAAA,IAC9CC,EAAA,GACI,CAACC,GAAiBC,CAAkB,IAAIC,EAAA,GACxCC,IAAoBC,EAAO,EAAK,GAChCC,IAAcD,EAAO,EAAK,GAC1B,EAAE,mBAAAE,EAAA,IAAsBC,EAAA,GAExBC,IAAmBC,EAAQ,MAAMf,GAAe,KAAK,GAAG,KAAK,IAAI,CAACA,CAAa,CAAC,GAEhF,EAAE,MAAMgB,GAAiB,WAAWC,MAAyBC;AAAA,IACjE;AAAA,MACE,WAAApB;AAAA,MACA,eAAeQ,GAAiB,WAAW,mBAAmB;AAAA,IAAA;AAAA,IAEhE;AAAA,MACE,SAAS,CAAC,CAACA,GAAiB,WAAW;AAAA,IAAA;AAAA,EACzC,GAGIa,IAAiBC,EAAY,YAAY;AAC7C,UAAMC,IAAS,MAAMlB,EAAe;AAAA,MAClC,SAAS;AAAA,QACP,WAAAL;AAAA,QACA,WAAAC;AAAA,QACA,QAAAE;AAAA,QACA,aAAa;AAAA,UACX,eAAAD;AAAA,QAAA;AAAA,MACF;AAAA,IACF,CACD;AACD,IAAAO,EAAmBc,EAAO,eAAe,GACrCA,EAAO,oBACTZ,EAAkB,UAAU,IAC5BP,IAAcmB,EAAO,eAAe;AAAA,EAExC,GAAG,CAACvB,GAAWC,GAAWI,GAAgBW,GAAkBb,GAAQC,CAAW,CAAC,GAE1EoB,IAAuBF,EAAY,YAAY;AACnD,UAAMR;AAAA,MAAkB;AAAA,MAAM,MAC5BW,EAAWJ,GAAgB;AAAA,QACzB,aAAa5B;AAAA,QACb,SAASC;AAAA,QACT,aAAaC;AAAA,MAAA,CACd;AAAA,IAAA;AAAA,EAEL,GAAG,CAACmB,GAAmBO,CAAc,CAAC;AAEtC,EAAAK,EAAU,MAAM;AACd,IAAIb,EAAY,YAChBA,EAAY,UAAU,IACjBW,EAAA;AAAA,EACP,GAAG,CAACA,CAAoB,CAAC;AAEzB,QAAMG,IAAmBrB,KAA2B,CAACK,EAAkB,SACjEiB,IAAetB,KAA2BK,EAAkB,SAC5DkB,IAAYF,KAAoBR;AAEtC,SAAO;AAAA,IACL,sBAAAK;AAAA,IACA,iBAAAhB;AAAA,IACA,aAAaU,GAAiB;AAAA,IAC9B,WAAAW;AAAA,IACA,cAAAD;AAAA,IACA,gBAAgBjB,EAAkB;AAAA,EAAA;AAEtC;"}
1
+ {"version":3,"file":"usePreparedPayrollData.js","sources":["../../../src/components/Payroll/usePreparedPayrollData.ts"],"sourcesContent":["import { useState, useEffect, useCallback, useRef, useMemo } from 'react'\nimport { usePayrollsPrepareMutation } from '@gusto/embedded-api/react-query/payrollsPrepare'\nimport { usePaySchedulesGet } from '@gusto/embedded-api/react-query/paySchedulesGet'\nimport type { PayrollPrepared } from '@gusto/embedded-api/models/components/payroll'\nimport type { PayScheduleShow } from '@gusto/embedded-api/models/components/payscheduleshow'\nimport type { QueryParamSortBy } from '@gusto/embedded-api/models/operations/putv1companiescompanyidpayrollspayrollidprepare'\nimport { UnprocessableEntityError } from '@gusto/embedded-api/models/errors/unprocessableentityerror'\nimport { useBase } from '../Base'\nimport { retryAsync } from '@/helpers/retryAsync'\n\ninterface UsePreparedPayrollDataParams {\n companyId: string\n payrollId: string\n employeeUuids?: string[]\n sortBy?: QueryParamSortBy\n onDataReady?: (preparedPayroll: PayrollPrepared) => void\n}\n\ninterface UsePreparedPayrollDataReturn {\n handlePreparePayroll: () => Promise<void>\n preparedPayroll: PayrollPrepared | undefined\n paySchedule: PayScheduleShow | undefined\n isLoading: boolean\n isPaginating: boolean\n hasInitialData: boolean\n}\n\nconst PREPARE_MAX_ATTEMPTS = 4\nconst PREPARE_RETRY_DELAY_MS = 1500\n\nconst isPayrollBeingProcessedError = (error: unknown): boolean => {\n if (!(error instanceof UnprocessableEntityError)) return false\n return error.errors.some(e => e.category === 'invalid_operation')\n}\n\nexport const usePreparedPayrollData = ({\n companyId,\n payrollId,\n employeeUuids,\n sortBy,\n onDataReady,\n}: UsePreparedPayrollDataParams): UsePreparedPayrollDataReturn => {\n const { mutateAsync: preparePayroll, isPending: isPreparePayrollPending } =\n usePayrollsPrepareMutation()\n const [preparedPayroll, setPreparedPayroll] = useState<PayrollPrepared | undefined>()\n const hasInitialDataRef = useRef(false)\n const hasFiredRef = useRef(false)\n const { baseSubmitHandler } = useBase()\n\n const employeeUuidsKey = useMemo(() => employeeUuids?.join(',') ?? '', [employeeUuids])\n\n const { data: payScheduleData, isLoading: isPayScheduleLoading } = usePaySchedulesGet(\n {\n companyId,\n payScheduleId: preparedPayroll?.payPeriod?.payScheduleUuid || '',\n },\n {\n enabled: !!preparedPayroll?.payPeriod?.payScheduleUuid,\n },\n )\n\n const executePrepare = useCallback(async () => {\n const result = await preparePayroll({\n request: {\n companyId,\n payrollId,\n sortBy,\n requestBody: {\n employeeUuids,\n },\n },\n })\n setPreparedPayroll(result.payrollPrepared)\n if (result.payrollPrepared) {\n hasInitialDataRef.current = true\n onDataReady?.(result.payrollPrepared)\n }\n }, [companyId, payrollId, preparePayroll, employeeUuidsKey, sortBy, onDataReady])\n\n const handlePreparePayroll = useCallback(async () => {\n await baseSubmitHandler(null, () =>\n retryAsync(executePrepare, {\n maxAttempts: PREPARE_MAX_ATTEMPTS,\n delayMs: PREPARE_RETRY_DELAY_MS,\n shouldRetry: isPayrollBeingProcessedError,\n }),\n )\n }, [baseSubmitHandler, executePrepare])\n\n useEffect(() => {\n if (hasFiredRef.current) return\n hasFiredRef.current = true\n void handlePreparePayroll()\n }, [handlePreparePayroll])\n\n const isInitialLoading = isPreparePayrollPending && !hasInitialDataRef.current\n const isPaginating = isPreparePayrollPending && hasInitialDataRef.current\n const isLoading = isInitialLoading || isPayScheduleLoading\n\n return {\n handlePreparePayroll,\n preparedPayroll,\n paySchedule: payScheduleData?.payScheduleShow,\n isLoading,\n isPaginating,\n hasInitialData: hasInitialDataRef.current,\n }\n}\n"],"names":["PREPARE_MAX_ATTEMPTS","PREPARE_RETRY_DELAY_MS","isPayrollBeingProcessedError","error","UnprocessableEntityError","e","usePreparedPayrollData","companyId","payrollId","employeeUuids","sortBy","onDataReady","preparePayroll","isPreparePayrollPending","usePayrollsPrepareMutation","preparedPayroll","setPreparedPayroll","useState","hasInitialDataRef","useRef","hasFiredRef","baseSubmitHandler","useBase","employeeUuidsKey","useMemo","payScheduleData","isPayScheduleLoading","usePaySchedulesGet","executePrepare","useCallback","result","handlePreparePayroll","retryAsync","useEffect","isInitialLoading","isPaginating","isLoading"],"mappings":";;;;;;;;;;;;;;;;;;;;AA2BA,MAAMA,IAAuB,GACvBC,IAAyB,MAEzBC,IAA+B,CAACC,MAC9BA,aAAiBC,IAChBD,EAAM,OAAO,KAAK,CAAAE,MAAKA,EAAE,aAAa,mBAAmB,IADP,IAI9CC,KAAyB,CAAC;AAAA,EACrC,WAAAC;AAAA,EACA,WAAAC;AAAA,EACA,eAAAC;AAAA,EACA,QAAAC;AAAA,EACA,aAAAC;AACF,MAAkE;AAChE,QAAM,EAAE,aAAaC,GAAgB,WAAWC,EAAA,IAC9CC,EAAA,GACI,CAACC,GAAiBC,CAAkB,IAAIC,EAAA,GACxCC,IAAoBC,EAAO,EAAK,GAChCC,IAAcD,EAAO,EAAK,GAC1B,EAAE,mBAAAE,EAAA,IAAsBC,EAAA,GAExBC,IAAmBC,EAAQ,MAAMf,GAAe,KAAK,GAAG,KAAK,IAAI,CAACA,CAAa,CAAC,GAEhF,EAAE,MAAMgB,GAAiB,WAAWC,MAAyBC;AAAA,IACjE;AAAA,MACE,WAAApB;AAAA,MACA,eAAeQ,GAAiB,WAAW,mBAAmB;AAAA,IAAA;AAAA,IAEhE;AAAA,MACE,SAAS,CAAC,CAACA,GAAiB,WAAW;AAAA,IAAA;AAAA,EACzC,GAGIa,IAAiBC,EAAY,YAAY;AAC7C,UAAMC,IAAS,MAAMlB,EAAe;AAAA,MAClC,SAAS;AAAA,QACP,WAAAL;AAAA,QACA,WAAAC;AAAA,QACA,QAAAE;AAAA,QACA,aAAa;AAAA,UACX,eAAAD;AAAA,QAAA;AAAA,MACF;AAAA,IACF,CACD;AACD,IAAAO,EAAmBc,EAAO,eAAe,GACrCA,EAAO,oBACTZ,EAAkB,UAAU,IAC5BP,IAAcmB,EAAO,eAAe;AAAA,EAExC,GAAG,CAACvB,GAAWC,GAAWI,GAAgBW,GAAkBb,GAAQC,CAAW,CAAC,GAE1EoB,IAAuBF,EAAY,YAAY;AACnD,UAAMR;AAAA,MAAkB;AAAA,MAAM,MAC5BW,EAAWJ,GAAgB;AAAA,QACzB,aAAa5B;AAAA,QACb,SAASC;AAAA,QACT,aAAaC;AAAA,MAAA,CACd;AAAA,IAAA;AAAA,EAEL,GAAG,CAACmB,GAAmBO,CAAc,CAAC;AAEtC,EAAAK,EAAU,MAAM;AACd,IAAIb,EAAY,YAChBA,EAAY,UAAU,IACjBW,EAAA;AAAA,EACP,GAAG,CAACA,CAAoB,CAAC;AAEzB,QAAMG,IAAmBrB,KAA2B,CAACK,EAAkB,SACjEiB,IAAetB,KAA2BK,EAAkB,SAC5DkB,IAAYF,KAAoBR;AAEtC,SAAO;AAAA,IACL,sBAAAK;AAAA,IACA,iBAAAhB;AAAA,IACA,aAAaU,GAAiB;AAAA,IAC9B,WAAAW;AAAA,IACA,cAAAD;AAAA,IACA,gBAAgBjB,EAAkB;AAAA,EAAA;AAEtC;"}
@@ -1,8 +1,8 @@
1
1
  import { jsx as o } from "react/jsx-runtime";
2
2
  import { useMemo as h } from "react";
3
3
  import { useTranslation as m } from "react-i18next";
4
- import "../../../shared/constants.js";
5
4
  import "classnames";
5
+ import "../../../shared/constants.js";
6
6
  import { useComponentContext as H } from "../../../contexts/ComponentAdapter/useComponentContext.js";
7
7
  import { useI18n as d } from "../../../i18n/I18n.js";
8
8
  import { PolicyDetailLayout as T } from "../shared/PolicyDetailLayout/PolicyDetailLayout.js";