@gusto/embedded-react-sdk 0.32.0 → 0.34.0

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 (155) hide show
  1. package/CHANGELOG.md +52 -0
  2. package/dist/components/Common/Fields/MultiSelectComboBoxField/MultiSelectComboBoxField.d.ts +5 -0
  3. package/dist/components/Common/Fields/MultiSelectComboBoxField/MultiSelectComboBoxField.js +34 -0
  4. package/dist/components/Common/Fields/MultiSelectComboBoxField/MultiSelectComboBoxField.js.map +1 -0
  5. package/dist/components/Common/Fields/MultiSelectComboBoxField/index.d.ts +2 -0
  6. package/dist/components/Common/SignatureForm/SignatureForm.d.ts +1 -7
  7. package/dist/components/Common/UI/Badge/Badge.js +39 -8
  8. package/dist/components/Common/UI/Badge/Badge.js.map +1 -1
  9. package/dist/components/Common/UI/Badge/Badge.module.scss.js +8 -4
  10. package/dist/components/Common/UI/Badge/Badge.module.scss.js.map +1 -1
  11. package/dist/components/Common/UI/Badge/BadgeTypes.d.ts +12 -0
  12. package/dist/components/Common/UI/Badge/BadgeTypes.js.map +1 -1
  13. package/dist/components/Common/UI/Menu/Menu.js +2 -3
  14. package/dist/components/Common/UI/Menu/Menu.js.map +1 -1
  15. package/dist/components/Common/UI/MultiSelectComboBox/MultiSelectComboBox.d.ts +2 -0
  16. package/dist/components/Common/UI/MultiSelectComboBox/MultiSelectComboBox.js +127 -0
  17. package/dist/components/Common/UI/MultiSelectComboBox/MultiSelectComboBox.js.map +1 -0
  18. package/dist/components/Common/UI/MultiSelectComboBox/MultiSelectComboBox.module.scss.js +16 -0
  19. package/dist/components/Common/UI/MultiSelectComboBox/MultiSelectComboBox.module.scss.js.map +1 -0
  20. package/dist/components/Common/UI/MultiSelectComboBox/MultiSelectComboBoxTypes.d.ts +17 -0
  21. package/dist/components/Common/UI/MultiSelectComboBox/index.d.ts +3 -0
  22. package/dist/components/Common/index.d.ts +1 -0
  23. package/dist/components/Company/AssignSignatory/CreateSignatory/Schema.d.ts +4 -30
  24. package/dist/components/Company/AssignSignatory/InviteSignatory/InviteSignatoryForm.d.ts +2 -26
  25. package/dist/components/Company/BankAccount/BankAccountForm/Form.d.ts +1 -7
  26. package/dist/components/Company/BankAccount/BankAccountVerify/Form.d.ts +1 -7
  27. package/dist/components/Company/FederalTaxes/useFederalTaxes.d.ts +7 -13
  28. package/dist/components/Company/Locations/LocationForm/Form.d.ts +7 -20
  29. package/dist/components/Company/PaySchedule/usePaySchedule.d.ts +7 -18
  30. package/dist/components/Company/StateTaxes/StateTaxesForm/StateTaxesForm.js +40 -46
  31. package/dist/components/Company/StateTaxes/StateTaxesForm/StateTaxesForm.js.map +1 -1
  32. package/dist/components/Contractor/Address/useAddress.d.ts +1 -13
  33. package/dist/components/Contractor/ContractorList/useContractorList.js +4 -4
  34. package/dist/components/Contractor/ContractorList/useContractorList.js.map +1 -1
  35. package/dist/components/Contractor/NewHireReport/NewHireReport.d.ts +5 -15
  36. package/dist/components/Contractor/NewHireReport/NewHireReport.js +28 -28
  37. package/dist/components/Contractor/NewHireReport/NewHireReport.js.map +1 -1
  38. package/dist/components/Contractor/PaymentMethod/PaymentMethod.d.ts +7 -20
  39. package/dist/components/Contractor/PaymentMethod/PaymentTypeForm.d.ts +5 -6
  40. package/dist/components/Contractor/Payments/CreatePayment/CreatePayment.js +108 -100
  41. package/dist/components/Contractor/Payments/CreatePayment/CreatePayment.js.map +1 -1
  42. package/dist/components/Contractor/Payments/CreatePayment/CreatePaymentPresentation.d.ts +4 -1
  43. package/dist/components/Contractor/Payments/CreatePayment/CreatePaymentPresentation.js +54 -50
  44. package/dist/components/Contractor/Payments/CreatePayment/CreatePaymentPresentation.js.map +1 -1
  45. package/dist/components/Contractor/Payments/CreatePayment/EditContractorPaymentFormSchema.d.ts +19 -67
  46. package/dist/components/Contractor/Payments/PaymentFlow/PaymentFlowComponents.js +27 -26
  47. package/dist/components/Contractor/Payments/PaymentFlow/PaymentFlowComponents.js.map +1 -1
  48. package/dist/components/Contractor/Payments/PaymentFlow/paymentStateMachine.js +76 -44
  49. package/dist/components/Contractor/Payments/PaymentFlow/paymentStateMachine.js.map +1 -1
  50. package/dist/components/Contractor/Payments/PaymentHistory/PaymentHistory.js +1 -1
  51. package/dist/components/Contractor/Payments/PaymentHistory/PaymentHistory.js.map +1 -1
  52. package/dist/components/Contractor/Payments/PaymentStatement/PaymentStatement.js +1 -1
  53. package/dist/components/Contractor/Payments/PaymentStatement/PaymentStatement.js.map +1 -1
  54. package/dist/components/Contractor/Payments/PaymentSummary/PaymentSummary.d.ts +3 -1
  55. package/dist/components/Contractor/Payments/PaymentSummary/PaymentSummary.js +28 -22
  56. package/dist/components/Contractor/Payments/PaymentSummary/PaymentSummary.js.map +1 -1
  57. package/dist/components/Contractor/Payments/PaymentSummary/PaymentSummaryPresentation.d.ts +3 -1
  58. package/dist/components/Contractor/Payments/PaymentSummary/PaymentSummaryPresentation.js +63 -52
  59. package/dist/components/Contractor/Payments/PaymentSummary/PaymentSummaryPresentation.js.map +1 -1
  60. package/dist/components/Contractor/Profile/useContractorProfile.d.ts +54 -120
  61. package/dist/components/Contractor/Profile/useContractorProfile.js +47 -47
  62. package/dist/components/Contractor/Profile/useContractorProfile.js.map +1 -1
  63. package/dist/components/Employee/Compensation/useCompensation.d.ts +17 -44
  64. package/dist/components/Employee/Deductions/DeductionsForm/ChildSupportForm.d.ts +4 -22
  65. package/dist/components/Employee/Deductions/DeductionsForm/ChildSupportForm.js +59 -59
  66. package/dist/components/Employee/Deductions/DeductionsForm/ChildSupportForm.js.map +1 -1
  67. package/dist/components/Employee/Deductions/DeductionsForm/CustomDeductionForm.d.ts +4 -22
  68. package/dist/components/Employee/Deductions/DeductionsForm/CustomDeductionForm.js +33 -33
  69. package/dist/components/Employee/Deductions/DeductionsForm/CustomDeductionForm.js.map +1 -1
  70. package/dist/components/Employee/Deductions/DeductionsForm/GarnishmentForm.d.ts +5 -27
  71. package/dist/components/Employee/Deductions/DeductionsForm/GarnishmentForm.js +46 -46
  72. package/dist/components/Employee/Deductions/DeductionsForm/GarnishmentForm.js.map +1 -1
  73. package/dist/components/Employee/Deductions/useDeductions.d.ts +7 -26
  74. package/dist/components/Employee/DocumentSigner/EmploymentEligibility/EmploymentEligibilitySchema.d.ts +5 -29
  75. package/dist/components/Employee/DocumentSigner/EmploymentEligibility/EmploymentEligibilitySchema.js +8 -8
  76. package/dist/components/Employee/DocumentSigner/EmploymentEligibility/EmploymentEligibilitySchema.js.map +1 -1
  77. package/dist/components/Employee/DocumentSigner/I9SignatureForm/I9SignatureForm.d.ts +9 -76
  78. package/dist/components/Employee/EmployeeDocuments/EmployeeDocumentsPresentation.d.ts +1 -5
  79. package/dist/components/Employee/FederalTaxes/FederalForm.d.ts +7 -33
  80. package/dist/components/Employee/PaymentMethod/BankAccount.d.ts +5 -14
  81. package/dist/components/Employee/PaymentMethod/PaymentTypeForm.d.ts +5 -6
  82. package/dist/components/Employee/PaymentMethod/usePaymentMethod.d.ts +12 -68
  83. package/dist/components/Employee/PaymentMethod/usePaymentMethod.js +15 -14
  84. package/dist/components/Employee/PaymentMethod/usePaymentMethod.js.map +1 -1
  85. package/dist/components/Employee/Profile/AdminPersonalDetails.d.ts +17 -82
  86. package/dist/components/Employee/Profile/AdminPersonalDetails.js +38 -33
  87. package/dist/components/Employee/Profile/AdminPersonalDetails.js.map +1 -1
  88. package/dist/components/Employee/Profile/HomeAddress.d.ts +11 -66
  89. package/dist/components/Employee/Profile/PersonalDetailsInputs.d.ts +15 -64
  90. package/dist/components/Employee/Profile/PersonalDetailsInputs.js +23 -19
  91. package/dist/components/Employee/Profile/PersonalDetailsInputs.js.map +1 -1
  92. package/dist/components/Employee/Profile/Profile.js +2 -5
  93. package/dist/components/Employee/Profile/Profile.js.map +1 -1
  94. package/dist/components/Employee/Profile/SelfPersonalDetails.d.ts +8 -37
  95. package/dist/components/Employee/Profile/SelfPersonalDetails.js +22 -19
  96. package/dist/components/Employee/Profile/SelfPersonalDetails.js.map +1 -1
  97. package/dist/components/Employee/StateTaxes/StateForm.d.ts +1 -5
  98. package/dist/components/Employee/Taxes/FederalForm.d.ts +7 -33
  99. package/dist/components/Employee/Taxes/StateForm.d.ts +1 -5
  100. package/dist/components/Payroll/ConfirmWireDetails/ConfirmWireDetailsForm/ConfirmWireDetailsForm.d.ts +1 -11
  101. package/dist/components/Payroll/ConfirmWireDetails/ConfirmWireDetailsForm/ConfirmWireDetailsForm.js +1 -1
  102. package/dist/components/Payroll/ConfirmWireDetails/ConfirmWireDetailsForm/ConfirmWireDetailsForm.js.map +1 -1
  103. package/dist/components/Payroll/OffCycle/OffCycleFlowComponents.js +6 -9
  104. package/dist/components/Payroll/OffCycle/OffCycleFlowComponents.js.map +1 -1
  105. package/dist/components/Payroll/OffCycleCreation/OffCycleCreation.js +84 -56
  106. package/dist/components/Payroll/OffCycleCreation/OffCycleCreation.js.map +1 -1
  107. package/dist/components/Payroll/OffCycleCreation/OffCycleCreationPresentation.d.ts +1 -1
  108. package/dist/components/Payroll/OffCycleCreation/OffCycleCreationPresentation.js +56 -22
  109. package/dist/components/Payroll/OffCycleCreation/OffCycleCreationPresentation.js.map +1 -1
  110. package/dist/components/Payroll/OffCycleCreation/OffCycleCreationTypes.d.ts +5 -0
  111. package/dist/components/Payroll/OffCyclePayPeriodDateForm/OffCyclePayPeriodDateFormTypes.d.ts +2 -22
  112. package/dist/components/Payroll/PayrollBlocker/payrollHelpers.js +22 -18
  113. package/dist/components/Payroll/PayrollBlocker/payrollHelpers.js.map +1 -1
  114. package/dist/components/Payroll/PayrollBlocker/payrollHelpers.test.d.ts +1 -0
  115. package/dist/components/Payroll/PayrollConfiguration/PayrollConfiguration.js +12 -8
  116. package/dist/components/Payroll/PayrollConfiguration/PayrollConfiguration.js.map +1 -1
  117. package/dist/components/Payroll/PayrollEditEmployee/PayrollEditEmployee.js +5 -5
  118. package/dist/components/Payroll/PayrollEditEmployee/PayrollEditEmployee.js.map +1 -1
  119. package/dist/components/Payroll/PayrollEditEmployee/PayrollEditEmployeePresentation.d.ts +2 -12
  120. package/dist/components/Payroll/PayrollEditEmployee/PayrollEditEmployeePresentation.js +34 -34
  121. package/dist/components/Payroll/PayrollEditEmployee/PayrollEditEmployeePresentation.js.map +1 -1
  122. package/dist/components/Payroll/PayrollExecutionFlow/payrollExecutionMachine.js +38 -35
  123. package/dist/components/Payroll/PayrollExecutionFlow/payrollExecutionMachine.js.map +1 -1
  124. package/dist/components/Payroll/PayrollFlow/PayrollFlowComponents.d.ts +1 -0
  125. package/dist/components/Payroll/PayrollFlow/PayrollFlowComponents.js.map +1 -1
  126. package/dist/components/Payroll/usePreparedPayrollData.js +26 -26
  127. package/dist/components/Payroll/usePreparedPayrollData.js.map +1 -1
  128. package/dist/contexts/ApiProvider/ApiProvider.js +26 -25
  129. package/dist/contexts/ApiProvider/ApiProvider.js.map +1 -1
  130. package/dist/contexts/ApiProvider/apiVersionHook.d.ts +2 -0
  131. package/dist/contexts/ApiProvider/apiVersionHook.js +7 -0
  132. package/dist/contexts/ApiProvider/apiVersionHook.js.map +1 -0
  133. package/dist/contexts/ApiProvider/apiVersionHook.test.d.ts +1 -0
  134. package/dist/contexts/ComponentAdapter/adapters/defaultComponentAdapter.js +60 -58
  135. package/dist/contexts/ComponentAdapter/adapters/defaultComponentAdapter.js.map +1 -1
  136. package/dist/contexts/ComponentAdapter/useComponentContext.d.ts +2 -0
  137. package/dist/contexts/ComponentAdapter/useComponentContext.js.map +1 -1
  138. package/dist/contexts/ThemeProvider/ThemeProvider.js +23 -23
  139. package/dist/contexts/ThemeProvider/ThemeProvider.js.map +1 -1
  140. package/dist/helpers/validations.d.ts +2 -2
  141. package/dist/i18n/I18n.js +15 -15
  142. package/dist/i18n/I18n.js.map +1 -1
  143. package/dist/i18n/en/Contractor.Payments.PaymentSummary.json.js +42 -40
  144. package/dist/i18n/en/Contractor.Payments.PaymentSummary.json.js.map +1 -1
  145. package/dist/i18n/en/Contractor.Payments.PaymentsList.json.js +9 -9
  146. package/dist/i18n/en/Payroll.EmployeeSelection.json.js +10 -0
  147. package/dist/i18n/en/Payroll.EmployeeSelection.json.js.map +1 -0
  148. package/dist/i18n/en/Payroll.OffCycleCreation.json.js +10 -8
  149. package/dist/i18n/en/Payroll.OffCycleCreation.json.js.map +1 -1
  150. package/dist/i18n/en/common.json.d.ts +4 -1
  151. package/dist/i18n/en/common.json.js +5 -5
  152. package/dist/style.css +1 -1
  153. package/dist/types/i18next.d.ts +14 -1
  154. package/docs/reference/endpoint-inventory.json +4 -0
  155. package/package.json +13 -12
@@ -1,37 +1,38 @@
1
- import { jsx as h, jsxs as I, Fragment as W } from "react/jsx-runtime";
2
- import { useContractorsListSuspense as K } from "@gusto/embedded-api/react-query/contractorsList";
3
- import { useContractorPaymentGroupsCreateMutation as J } from "@gusto/embedded-api/react-query/contractorPaymentGroupsCreate";
4
- import { useContractorPaymentGroupsPreviewMutation as Q } from "@gusto/embedded-api/react-query/contractorPaymentGroupsPreview";
5
- import { useState as p, useMemo as R } from "react";
6
- import X from "dompurify";
7
- import { RFCDate as S } from "@gusto/embedded-api/types/rfcdate";
8
- import { useForm as Z } from "react-hook-form";
9
- import { zodResolver as $ } from "@hookform/resolvers/zod";
10
- import { useTranslation as tt } from "react-i18next";
11
- import { useBankAccountsGet as et } from "@gusto/embedded-api/react-query/bankAccountsGet";
12
- import { usePaymentConfigsGet as ot } from "@gusto/embedded-api/react-query/paymentConfigsGet";
13
- import { CreatePaymentPresentation as rt } from "./CreatePaymentPresentation.js";
14
- import { EditContractorPaymentPresentation as nt } from "./EditContractorPaymentPresentation.js";
15
- import { createEditContractorPaymentFormSchema as st } from "./EditContractorPaymentFormSchema.js";
16
- import { PreviewPresentation as at } from "./PreviewPresentation.js";
17
- import { useComponentDictionary as it } from "../../../../i18n/I18n.js";
18
- import { BaseComponent as ct } from "../../../Base/Base.js";
19
- import { useBase as mt } from "../../../Base/useBase.js";
20
- import { ContractorOnboardingStatus as ut, componentEvents as C } from "../../../../shared/constants.js";
21
- import { firstLastName as pt } from "../../../../helpers/formattedStrings.js";
22
- function Yt(c) {
23
- return /* @__PURE__ */ h(ct, { ...c, children: /* @__PURE__ */ h(yt, { ...c, children: c.children }) });
1
+ import { jsx as h, jsxs as K, Fragment as J } from "react/jsx-runtime";
2
+ import { useContractorsListSuspense as Q } from "@gusto/embedded-api/react-query/contractorsList";
3
+ import { useContractorPaymentGroupsCreateMutation as X } from "@gusto/embedded-api/react-query/contractorPaymentGroupsCreate";
4
+ import { useContractorPaymentGroupsPreviewMutation as Z } from "@gusto/embedded-api/react-query/contractorPaymentGroupsPreview";
5
+ import { useState as u, useMemo as S } from "react";
6
+ import $ from "dompurify";
7
+ import { RFCDate as U } from "@gusto/embedded-api/types/rfcdate";
8
+ import { useForm as tt } from "react-hook-form";
9
+ import { zodResolver as et } from "@hookform/resolvers/zod";
10
+ import { useTranslation as ot } from "react-i18next";
11
+ import { useBankAccountsGet as rt } from "@gusto/embedded-api/react-query/bankAccountsGet";
12
+ import { usePaymentConfigsGet as nt } from "@gusto/embedded-api/react-query/paymentConfigsGet";
13
+ import { CreatePaymentPresentation as st } from "./CreatePaymentPresentation.js";
14
+ import { EditContractorPaymentPresentation as at } from "./EditContractorPaymentPresentation.js";
15
+ import { createEditContractorPaymentFormSchema as it } from "./EditContractorPaymentFormSchema.js";
16
+ import { PreviewPresentation as ct } from "./PreviewPresentation.js";
17
+ import { payrollSubmitHandler as mt } from "../../../Payroll/PayrollBlocker/payrollHelpers.js";
18
+ import { useComponentDictionary as ut } from "../../../../i18n/I18n.js";
19
+ import { BaseComponent as lt } from "../../../Base/Base.js";
20
+ import { useBase as pt } from "../../../Base/useBase.js";
21
+ import { ContractorOnboardingStatus as yt, componentEvents as y } from "../../../../shared/constants.js";
22
+ import { firstLastName as dt } from "../../../../helpers/formattedStrings.js";
23
+ function jt(c) {
24
+ return /* @__PURE__ */ h(lt, { ...c, children: /* @__PURE__ */ h(Pt, { ...c, children: c.children }) });
24
25
  }
25
- const yt = ({ companyId: c, dictionary: U, onEvent: y }) => {
26
- it("Contractor.Payments.CreatePayment", U);
27
- const { t: b } = tt("Contractor.Payments.CreatePayment"), [v, g] = p(!1), [T, _] = p(
26
+ const Pt = ({ companyId: c, dictionary: _, onEvent: l }) => {
27
+ ut("Contractor.Payments.CreatePayment", _);
28
+ const { t: b } = ot("Contractor.Payments.CreatePayment"), [v, g] = u(!1), [T, B] = u(
28
29
  (/* @__PURE__ */ new Date()).toISOString().split("T")[0] || ""
29
- ), { baseSubmitHandler: M } = mt(), [w, d] = p({}), [l, D] = p(null), [N, A] = p({}), { mutateAsync: G, isPending: O } = J(), {
30
- mutateAsync: B,
31
- isPending: k
32
- } = Q(), { data: L } = K({ companyUuid: c }), a = (L.contractorList || []).filter(
33
- (t) => t.isActive && t.onboardingStatus === ut.ONBOARDING_COMPLETED
34
- ), { data: V } = et({ companyId: c }), { data: H } = ot({ companyUuid: c }), Y = V?.companyBankAccounts?.[0], q = H?.paymentConfigs?.paymentSpeed, x = R(
30
+ ), { baseSubmitHandler: M } = pt(), [D, d] = u({}), [P, N] = u(null), [G, w] = u([]), [k, A] = u({}), { mutateAsync: V, isPending: O } = X(), {
31
+ mutateAsync: H,
32
+ isPending: R
33
+ } = Z(), { data: L } = Q({ companyUuid: c }), a = (L.contractors || []).filter(
34
+ (t) => t.isActive && t.onboardingStatus === yt.ONBOARDING_COMPLETED
35
+ ), { data: Y } = rt({ companyId: c }), { data: F } = nt({ companyUuid: c }), q = Y?.companyBankAccounts?.[0], x = F?.paymentConfigs?.paymentSpeed, I = S(
35
36
  () => a.map((t) => {
36
37
  const e = t.paymentMethod ? t.paymentMethod : "Direct Deposit";
37
38
  return {
@@ -45,10 +46,10 @@ const yt = ({ companyId: c, dictionary: U, onEvent: y }) => {
45
46
  };
46
47
  }),
47
48
  [a]
48
- ), [u, F] = p(x), j = R(
49
- () => u.reduce(
49
+ ), [p, j] = u(I), z = S(
50
+ () => p.reduce(
50
51
  (t, e) => {
51
- const o = a.find((z) => z.uuid === e.contractorUuid), s = o?.wageType === "Hourly", i = Number(e.hours || "0"), n = Number(e.wage || "0"), r = Number(e.bonus || "0"), m = Number(e.reimbursement || "0"), E = s ? i * Number(o.hourlyRate || "0") : 0, f = s ? 0 : n;
52
+ const o = a.find((W) => W.uuid === e.contractorUuid), i = o?.wageType === "Hourly", n = Number(e.hours || "0"), s = Number(e.wage || "0"), r = Number(e.bonus || "0"), m = Number(e.reimbursement || "0"), E = i ? n * Number(o.hourlyRate || "0") : 0, f = i ? 0 : s;
52
53
  return {
53
54
  wage: t.wage + f,
54
55
  bonus: t.bonus + r,
@@ -58,9 +59,9 @@ const yt = ({ companyId: c, dictionary: U, onEvent: y }) => {
58
59
  },
59
60
  { wage: 0, bonus: 0, reimbursement: 0, total: 0 }
60
61
  ),
61
- [u, a]
62
- ), P = Z({
63
- resolver: $(st()),
62
+ [p, a]
63
+ ), C = tt({
64
+ resolver: et(it()),
64
65
  defaultValues: {
65
66
  wageType: "Hourly",
66
67
  hours: 0,
@@ -73,64 +74,64 @@ const yt = ({ companyId: c, dictionary: U, onEvent: y }) => {
73
74
  contractorPaymentMethod: void 0
74
75
  }
75
76
  });
76
- return /* @__PURE__ */ I(W, { children: [
77
- l && /* @__PURE__ */ h(
78
- at,
77
+ return /* @__PURE__ */ K(J, { children: [
78
+ P && /* @__PURE__ */ h(
79
+ ct,
79
80
  {
80
- contractorPaymentGroup: l,
81
+ contractorPaymentGroup: P,
81
82
  contractors: a,
82
83
  onBackToEdit: () => {
83
- D(null), A({}), y(C.CONTRACTOR_PAYMENT_BACK_TO_EDIT);
84
+ N(null), w([]), A({}), l(y.CONTRACTOR_PAYMENT_BACK_TO_EDIT);
84
85
  },
85
86
  onSubmit: async () => {
86
87
  await M(null, async () => {
87
- const t = u.filter((n) => n.isTouched);
88
- if (t.length === 0 || !l?.creationToken)
88
+ const t = p.filter((s) => s.isTouched);
89
+ if (t.length === 0 || !P?.creationToken)
89
90
  return;
90
- const e = l.creationToken, o = Object.entries(N).map(
91
- ([n, r]) => ({
92
- blockerType: n,
91
+ const e = P.creationToken, o = Object.entries(k).map(
92
+ ([s, r]) => ({
93
+ blockerType: s,
93
94
  selectedOption: r
94
95
  })
95
- ), s = {
96
- checkDate: new S(T),
97
- contractorPayments: t.map(({ isTouched: n, ...r }) => r),
96
+ ), i = {
97
+ checkDate: new U(T),
98
+ contractorPayments: t.map(({ isTouched: s, ...r }) => r),
98
99
  creationToken: e,
99
100
  ...o.length > 0 && { submissionBlockers: o }
100
- }, i = await G({
101
+ }, n = await V({
101
102
  request: {
102
103
  companyId: c,
103
- requestBody: s
104
+ requestBody: i
104
105
  }
105
106
  });
106
- y(C.CONTRACTOR_PAYMENT_CREATED, i.contractorPaymentGroup || {});
107
+ l(y.CONTRACTOR_PAYMENT_CREATED, n.contractorPaymentGroup || {});
107
108
  });
108
109
  },
109
- isLoading: O || k,
110
- bankAccount: Y,
111
- selectedUnblockOptions: N,
110
+ isLoading: O || R,
111
+ bankAccount: q,
112
+ selectedUnblockOptions: k,
112
113
  onUnblockOptionChange: (t, e) => {
113
114
  A((o) => ({
114
115
  ...o,
115
116
  [t]: e
116
117
  }));
117
118
  },
118
- paymentSpeed: q
119
+ paymentSpeed: x
119
120
  }
120
121
  ),
121
- !l && /* @__PURE__ */ h(
122
- rt,
122
+ !P && /* @__PURE__ */ h(
123
+ st,
123
124
  {
124
125
  contractors: a,
125
- contractorPayments: u,
126
+ contractorPayments: p,
126
127
  paymentDate: T,
127
- onPaymentDateChange: _,
128
+ onPaymentDateChange: B,
128
129
  onSaveAndContinue: async () => {
129
130
  await M(null, async () => {
130
- const t = u.filter((o) => o.isTouched);
131
+ const t = p.filter((o) => o.isTouched);
131
132
  if (t.length === 0) {
132
133
  d({
133
- ...w,
134
+ ...D,
134
135
  error: {
135
136
  type: "error",
136
137
  title: b("alerts.noContractorPayments")
@@ -138,69 +139,76 @@ const yt = ({ companyId: c, dictionary: U, onEvent: y }) => {
138
139
  });
139
140
  return;
140
141
  }
141
- d({});
142
- const e = await B({
143
- request: {
144
- companyId: c,
145
- requestBody: {
146
- contractorPayments: t.map(({ isTouched: o, ...s }) => s),
147
- checkDate: new S(T)
142
+ d({}), w([]);
143
+ const e = await mt(async () => {
144
+ const o = await H({
145
+ request: {
146
+ companyId: c,
147
+ requestBody: {
148
+ contractorPayments: t.map(({ isTouched: i, ...n }) => n),
149
+ checkDate: new U(T)
150
+ }
148
151
  }
149
- }
152
+ });
153
+ N(o.contractorPaymentGroupPreview || null), l(y.CONTRACTOR_PAYMENT_PREVIEW, o.contractorPaymentGroupPreview);
150
154
  });
151
- D(e.contractorPaymentGroupPreview || null), y(C.CONTRACTOR_PAYMENT_PREVIEW, e.contractorPaymentGroupPreview);
155
+ !e.success && e.blockers.length > 0 && w(e.blockers);
152
156
  });
153
157
  },
154
158
  onEditContractor: (t) => {
155
- const e = a.find((n) => n.uuid === t), o = u.find(
156
- (n) => n.contractorUuid === t
157
- ), s = o?.paymentMethod || "Direct Deposit", i = ["Check", "Direct Deposit"].includes(s) ? s : "Check";
158
- P.reset(
159
+ const e = a.find((s) => s.uuid === t), o = p.find(
160
+ (s) => s.contractorUuid === t
161
+ ), i = o?.paymentMethod || "Direct Deposit", n = ["Check", "Direct Deposit"].includes(i) ? i : "Check";
162
+ C.reset(
159
163
  {
160
164
  wageType: e?.wageType || "Hourly",
161
165
  hours: Number(o?.hours || "0"),
162
166
  wage: Number(o?.wage || "0"),
163
167
  bonus: Number(o?.bonus || "0"),
164
168
  reimbursement: Number(o?.reimbursement || "0"),
165
- paymentMethod: i,
169
+ paymentMethod: n,
166
170
  hourlyRate: Number(e?.hourlyRate || "0"),
167
171
  contractorUuid: t,
168
172
  contractorPaymentMethod: e?.paymentMethod || void 0
169
173
  },
170
174
  { keepDirty: !1, keepValues: !1 }
171
- ), d({}), g(!0), y(C.CONTRACTOR_PAYMENT_EDIT);
175
+ ), d({}), g(!0), l(y.CONTRACTOR_PAYMENT_EDIT);
176
+ },
177
+ totals: z,
178
+ alerts: D,
179
+ payrollBlockers: G,
180
+ onViewBlockers: () => {
181
+ l(y.CONTRACTOR_PAYMENT_RFI_RESPOND);
172
182
  },
173
- totals: j,
174
- alerts: w,
175
- isLoading: O || k
183
+ isLoading: O || R
176
184
  }
177
185
  ),
178
186
  /* @__PURE__ */ h(
179
- nt,
187
+ at,
180
188
  {
181
189
  isOpen: v,
182
190
  onClose: () => {
183
191
  g(!1);
184
192
  },
185
- formMethods: P,
193
+ formMethods: C,
186
194
  onSubmit: (t) => {
187
195
  const o = a.find((r) => r.uuid === t.contractorUuid)?.paymentMethod;
188
196
  if (!["Check", "Direct Deposit"].includes(t.paymentMethod)) {
189
- P.setError("paymentMethod", {
197
+ C.setError("paymentMethod", {
190
198
  type: "manual",
191
199
  message: b("editContractorPayment.errors.unsupportedPaymentMethod")
192
200
  });
193
201
  return;
194
202
  }
195
203
  if (o === "Check" && t.paymentMethod === "Direct Deposit") {
196
- P.setError("paymentMethod", {
204
+ C.setError("paymentMethod", {
197
205
  type: "manual",
198
206
  message: b("editContractorPayment.errors.directDepositNotAvailable")
199
207
  });
200
208
  return;
201
209
  }
202
- const s = (t.wage ?? 0) > 0 || (t.hours ?? 0) > 0 || (t.bonus ?? 0) > 0 || (t.reimbursement ?? 0) > 0;
203
- F(
210
+ const i = (t.wage ?? 0) > 0 || (t.hours ?? 0) > 0 || (t.bonus ?? 0) > 0 || (t.reimbursement ?? 0) > 0;
211
+ j(
204
212
  (r) => r.map(
205
213
  (m) => m.contractorUuid === t.contractorUuid ? {
206
214
  contractorUuid: m.contractorUuid,
@@ -209,24 +217,24 @@ const yt = ({ companyId: c, dictionary: U, onEvent: y }) => {
209
217
  bonus: String(t.bonus ?? 0),
210
218
  reimbursement: String(t.reimbursement ?? 0),
211
219
  paymentMethod: t.paymentMethod,
212
- isTouched: s
220
+ isTouched: i
213
221
  } : m
214
222
  )
215
223
  );
216
- const i = a.find(
224
+ const n = a.find(
217
225
  (r) => r.uuid === t.contractorUuid
218
- ), n = X.sanitize(
219
- i?.type === "Individual" ? pt({
220
- first_name: i.firstName,
221
- last_name: i.lastName
222
- }) : i?.businessName || ""
226
+ ), s = $.sanitize(
227
+ n?.type === "Individual" ? dt({
228
+ first_name: n.firstName,
229
+ last_name: n.lastName
230
+ }) : n?.businessName || ""
223
231
  );
224
232
  d((r) => ({
225
233
  ...r,
226
234
  [t.contractorUuid]: {
227
235
  type: "success",
228
236
  title: b("alerts.contractorPaymentUpdated", {
229
- contractorName: n,
237
+ contractorName: s,
230
238
  interpolation: { escapeValue: !1 }
231
239
  }),
232
240
  onDismiss: () => {
@@ -236,15 +244,15 @@ const yt = ({ companyId: c, dictionary: U, onEvent: y }) => {
236
244
  });
237
245
  }
238
246
  }
239
- })), g(!1), y(C.CONTRACTOR_PAYMENT_UPDATE, t);
247
+ })), g(!1), l(y.CONTRACTOR_PAYMENT_UPDATE, t);
240
248
  },
241
- contractorPaymentMethod: a.find((t) => t.uuid === P.getValues("contractorUuid"))?.paymentMethod ?? void 0
249
+ contractorPaymentMethod: a.find((t) => t.uuid === C.getValues("contractorUuid"))?.paymentMethod ?? void 0
242
250
  }
243
251
  )
244
252
  ] });
245
253
  };
246
254
  export {
247
- Yt as CreatePayment,
248
- yt as Root
255
+ jt as CreatePayment,
256
+ Pt as Root
249
257
  };
250
258
  //# sourceMappingURL=CreatePayment.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CreatePayment.js","sources":["../../../../../src/components/Contractor/Payments/CreatePayment/CreatePayment.tsx"],"sourcesContent":["import { useContractorsListSuspense } from '@gusto/embedded-api/react-query/contractorsList'\nimport { useContractorPaymentGroupsCreateMutation } from '@gusto/embedded-api/react-query/contractorPaymentGroupsCreate'\nimport type {\n ContractorPayments,\n PostV1CompaniesCompanyIdContractorPaymentGroupsRequestBody,\n SubmissionBlockers,\n} from '@gusto/embedded-api/models/operations/postv1companiescompanyidcontractorpaymentgroups'\nimport { useContractorPaymentGroupsPreviewMutation } from '@gusto/embedded-api/react-query/contractorPaymentGroupsPreview'\nimport { useMemo, useState } from 'react'\nimport DOMPurify from 'dompurify'\nimport { RFCDate } from '@gusto/embedded-api/types/rfcdate'\nimport { useForm } from 'react-hook-form'\nimport { zodResolver } from '@hookform/resolvers/zod'\nimport { useTranslation } from 'react-i18next'\nimport type { ContractorPaymentGroupPreview } from '@gusto/embedded-api/models/components/contractorpaymentgrouppreview'\nimport { useBankAccountsGet } from '@gusto/embedded-api/react-query/bankAccountsGet'\nimport { usePaymentConfigsGet } from '@gusto/embedded-api/react-query/paymentConfigsGet'\nimport type { InternalAlert } from '../types'\nimport { CreatePaymentPresentation } from './CreatePaymentPresentation'\nimport { EditContractorPaymentPresentation } from './EditContractorPaymentPresentation'\nimport {\n createEditContractorPaymentFormSchema,\n type EditContractorPaymentFormValues,\n} from './EditContractorPaymentFormSchema'\nimport { PreviewPresentation } from './PreviewPresentation'\nimport { useComponentDictionary } from '@/i18n'\nimport { BaseComponent, useBase, type BaseComponentInterface } from '@/components/Base'\nimport { componentEvents, ContractorOnboardingStatus } from '@/shared/constants'\nimport { firstLastName } from '@/helpers/formattedStrings'\n\ninterface CreatePaymentProps extends BaseComponentInterface<'Contractor.Payments.CreatePayment'> {\n companyId: string\n}\n\nexport function CreatePayment(props: CreatePaymentProps) {\n return (\n <BaseComponent {...props}>\n <Root {...props}>{props.children}</Root>\n </BaseComponent>\n )\n}\n\nexport const Root = ({ companyId, dictionary, onEvent }: CreatePaymentProps) => {\n useComponentDictionary('Contractor.Payments.CreatePayment', dictionary)\n const { t } = useTranslation('Contractor.Payments.CreatePayment')\n const [isModalOpen, setIsModalOpen] = useState(false)\n const [paymentDate, setPaymentDate] = useState<string>(\n new Date().toISOString().split('T')[0] || '',\n )\n const { baseSubmitHandler } = useBase()\n const [alerts, setAlerts] = useState<Record<string, InternalAlert>>({})\n const [previewData, setPreviewData] = useState<ContractorPaymentGroupPreview | null>(null)\n const [selectedUnblockOptions, setSelectedUnblockOptions] = useState<Record<string, string>>({})\n\n const { mutateAsync: createContractorPaymentGroup, isPending: isCreatingContractorPaymentGroup } =\n useContractorPaymentGroupsCreateMutation()\n const {\n mutateAsync: previewContractorPaymentGroup,\n isPending: isPreviewingContractorPaymentGroup,\n } = useContractorPaymentGroupsPreviewMutation()\n\n const { data: contractorList } = useContractorsListSuspense({ companyUuid: companyId })\n const contractors = (contractorList.contractorList || []).filter(\n contractor =>\n contractor.isActive &&\n contractor.onboardingStatus === ContractorOnboardingStatus.ONBOARDING_COMPLETED,\n )\n const { data: bankAccounts } = useBankAccountsGet({ companyId })\n const { data: paymentConfigs } = usePaymentConfigsGet({ companyUuid: companyId })\n // Currently, we only support a single default bank account per company.\n const bankAccount = bankAccounts?.companyBankAccounts?.[0]\n const paymentSpeed = paymentConfigs?.paymentConfigs?.paymentSpeed\n\n const initialContractorPayments: (ContractorPayments & { isTouched: boolean })[] = useMemo(\n () =>\n contractors.map(contractor => {\n const paymentMethod = contractor.paymentMethod ? contractor.paymentMethod : 'Direct Deposit'\n\n return {\n contractorUuid: contractor.uuid,\n paymentMethod,\n wage: '0',\n hours: '0',\n bonus: '0',\n reimbursement: '0',\n isTouched: false,\n }\n }),\n [contractors],\n )\n const [virtualContractorPayments, setVirtualContractorPayments] =\n useState<(ContractorPayments & { isTouched: boolean })[]>(initialContractorPayments)\n const totals = useMemo(\n () =>\n virtualContractorPayments.reduce<{\n wage: number\n bonus: number\n reimbursement: number\n total: number\n }>(\n (acc, payment) => {\n const contractor = contractors.find(c => c.uuid === payment.contractorUuid)\n const isHourly = contractor?.wageType === 'Hourly'\n const hours = Number(payment.hours || '0')\n const wage = Number(payment.wage || '0')\n const bonus = Number(payment.bonus || '0')\n const reimbursement = Number(payment.reimbursement || '0')\n const hourlyAmount = isHourly ? hours * Number(contractor.hourlyRate || '0') : 0\n const fixedWage = isHourly ? 0 : wage\n\n return {\n wage: acc.wage + fixedWage,\n bonus: acc.bonus + bonus,\n reimbursement: acc.reimbursement + reimbursement,\n total: acc.total + hourlyAmount + fixedWage + bonus + reimbursement,\n }\n },\n { wage: 0, bonus: 0, reimbursement: 0, total: 0 },\n ),\n [virtualContractorPayments, contractors],\n )\n\n const formMethods = useForm<EditContractorPaymentFormValues>({\n resolver: zodResolver(createEditContractorPaymentFormSchema()),\n defaultValues: {\n wageType: 'Hourly',\n hours: 0,\n wage: 0,\n bonus: 0,\n reimbursement: 0,\n paymentMethod: 'Direct Deposit',\n hourlyRate: 0,\n contractorUuid: '',\n contractorPaymentMethod: undefined,\n },\n })\n\n const onCreatePaymentGroup = async () => {\n await baseSubmitHandler(null, async () => {\n const contractorPayments = virtualContractorPayments.filter(payment => payment.isTouched)\n if (contractorPayments.length === 0 || !previewData?.creationToken) {\n return\n }\n const creationToken = previewData.creationToken\n\n const submissionBlockers: SubmissionBlockers[] = Object.entries(selectedUnblockOptions).map(\n ([blockerType, selectedOption]) => ({\n blockerType,\n selectedOption,\n }),\n )\n\n const requestBody: PostV1CompaniesCompanyIdContractorPaymentGroupsRequestBody = {\n checkDate: new RFCDate(paymentDate),\n contractorPayments: contractorPayments.map(({ isTouched, ...rest }) => rest),\n creationToken,\n ...(submissionBlockers.length > 0 && { submissionBlockers }),\n }\n\n const response = await createContractorPaymentGroup({\n request: {\n companyId,\n requestBody,\n },\n })\n\n onEvent(componentEvents.CONTRACTOR_PAYMENT_CREATED, response.contractorPaymentGroup || {})\n })\n }\n\n const onUnblockOptionChange = (blockerType: string, value: string) => {\n setSelectedUnblockOptions(prev => ({\n ...prev,\n [blockerType]: value,\n }))\n }\n const onEditContractor = (contractorUuid: string) => {\n const contractor = contractors.find(contractor => contractor.uuid === contractorUuid)\n const contractorPayment = virtualContractorPayments.find(\n payment => payment.contractorUuid === contractorUuid,\n )\n\n const rawPaymentMethod = contractorPayment?.paymentMethod || 'Direct Deposit'\n const sanitizedPaymentMethod = ['Check', 'Direct Deposit'].includes(rawPaymentMethod)\n ? (rawPaymentMethod as 'Check' | 'Direct Deposit')\n : 'Check'\n\n formMethods.reset(\n {\n wageType: contractor?.wageType || 'Hourly',\n hours: Number(contractorPayment?.hours || '0'),\n wage: Number(contractorPayment?.wage || '0'),\n bonus: Number(contractorPayment?.bonus || '0'),\n reimbursement: Number(contractorPayment?.reimbursement || '0'),\n paymentMethod: sanitizedPaymentMethod,\n hourlyRate: Number(contractor?.hourlyRate || '0'),\n contractorUuid: contractorUuid,\n contractorPaymentMethod: contractor?.paymentMethod || undefined,\n },\n { keepDirty: false, keepValues: false },\n )\n setAlerts({})\n setIsModalOpen(true)\n onEvent(componentEvents.CONTRACTOR_PAYMENT_EDIT)\n }\n\n const onEditContractorSubmit = (data: EditContractorPaymentFormValues) => {\n const currentContractor = contractors.find(c => c.uuid === data.contractorUuid)\n const currentContractorPaymentMethod = currentContractor?.paymentMethod\n\n if (!['Check', 'Direct Deposit'].includes(data.paymentMethod)) {\n formMethods.setError('paymentMethod', {\n type: 'manual',\n message: t('editContractorPayment.errors.unsupportedPaymentMethod'),\n })\n return\n }\n\n if (currentContractorPaymentMethod === 'Check' && data.paymentMethod === 'Direct Deposit') {\n formMethods.setError('paymentMethod', {\n type: 'manual',\n message: t('editContractorPayment.errors.directDepositNotAvailable'),\n })\n return\n }\n\n const hasAnyPayment =\n (data.wage ?? 0) > 0 ||\n (data.hours ?? 0) > 0 ||\n (data.bonus ?? 0) > 0 ||\n (data.reimbursement ?? 0) > 0\n\n setVirtualContractorPayments(prevPayments =>\n prevPayments.map(payment =>\n payment.contractorUuid === data.contractorUuid\n ? {\n contractorUuid: payment.contractorUuid,\n wage: String(data.wage ?? 0),\n hours: String(data.hours ?? 0),\n bonus: String(data.bonus ?? 0),\n reimbursement: String(data.reimbursement ?? 0),\n paymentMethod: data.paymentMethod,\n isTouched: hasAnyPayment,\n }\n : payment,\n ),\n )\n const displayContractor = contractors.find(\n contractor => contractor.uuid === data.contractorUuid,\n )\n const displayName = DOMPurify.sanitize(\n displayContractor?.type === 'Individual'\n ? firstLastName({\n first_name: displayContractor.firstName,\n last_name: displayContractor.lastName,\n })\n : displayContractor?.businessName || '',\n )\n setAlerts(prevAlerts => ({\n ...prevAlerts,\n [data.contractorUuid]: {\n type: 'success',\n title: t('alerts.contractorPaymentUpdated', {\n contractorName: displayName,\n interpolation: { escapeValue: false },\n }),\n onDismiss: () => {\n setAlerts(prevAlerts => {\n const { [data.contractorUuid]: _, ...rest } = prevAlerts\n return rest\n })\n },\n },\n }))\n setIsModalOpen(false)\n onEvent(componentEvents.CONTRACTOR_PAYMENT_UPDATE, data)\n }\n\n const onContinueToPreview = async () => {\n await baseSubmitHandler(null, async () => {\n const contractorPayments = virtualContractorPayments.filter(payment => payment.isTouched)\n if (contractorPayments.length === 0) {\n setAlerts({\n ...alerts,\n error: {\n type: 'error',\n title: t('alerts.noContractorPayments'),\n },\n })\n return\n }\n setAlerts({})\n const response = await previewContractorPaymentGroup({\n request: {\n companyId,\n requestBody: {\n contractorPayments: contractorPayments.map(({ isTouched, ...rest }) => rest),\n checkDate: new RFCDate(paymentDate),\n },\n },\n })\n\n setPreviewData(response.contractorPaymentGroupPreview || null)\n onEvent(componentEvents.CONTRACTOR_PAYMENT_PREVIEW, response.contractorPaymentGroupPreview)\n })\n }\n const onBackToEdit = () => {\n setPreviewData(null)\n setSelectedUnblockOptions({})\n onEvent(componentEvents.CONTRACTOR_PAYMENT_BACK_TO_EDIT)\n }\n\n return (\n <>\n {previewData && (\n <PreviewPresentation\n contractorPaymentGroup={previewData}\n contractors={contractors}\n onBackToEdit={onBackToEdit}\n onSubmit={onCreatePaymentGroup}\n isLoading={isCreatingContractorPaymentGroup || isPreviewingContractorPaymentGroup}\n bankAccount={bankAccount}\n selectedUnblockOptions={selectedUnblockOptions}\n onUnblockOptionChange={onUnblockOptionChange}\n paymentSpeed={paymentSpeed}\n />\n )}\n {!previewData && (\n <CreatePaymentPresentation\n contractors={contractors}\n contractorPayments={virtualContractorPayments}\n paymentDate={paymentDate}\n onPaymentDateChange={setPaymentDate}\n onSaveAndContinue={onContinueToPreview}\n onEditContractor={onEditContractor}\n totals={totals}\n alerts={alerts}\n isLoading={isCreatingContractorPaymentGroup || isPreviewingContractorPaymentGroup}\n />\n )}\n <EditContractorPaymentPresentation\n isOpen={isModalOpen}\n onClose={() => {\n setIsModalOpen(false)\n }}\n formMethods={formMethods}\n onSubmit={onEditContractorSubmit}\n contractorPaymentMethod={\n contractors.find(c => c.uuid === formMethods.getValues('contractorUuid'))\n ?.paymentMethod ?? undefined\n }\n />\n </>\n )\n}\n"],"names":["CreatePayment","props","jsx","BaseComponent","Root","companyId","dictionary","onEvent","useComponentDictionary","t","useTranslation","isModalOpen","setIsModalOpen","useState","paymentDate","setPaymentDate","baseSubmitHandler","useBase","alerts","setAlerts","previewData","setPreviewData","selectedUnblockOptions","setSelectedUnblockOptions","createContractorPaymentGroup","isCreatingContractorPaymentGroup","useContractorPaymentGroupsCreateMutation","previewContractorPaymentGroup","isPreviewingContractorPaymentGroup","useContractorPaymentGroupsPreviewMutation","contractorList","useContractorsListSuspense","contractors","contractor","ContractorOnboardingStatus","bankAccounts","useBankAccountsGet","paymentConfigs","usePaymentConfigsGet","bankAccount","paymentSpeed","initialContractorPayments","useMemo","paymentMethod","virtualContractorPayments","setVirtualContractorPayments","totals","acc","payment","c","isHourly","hours","wage","bonus","reimbursement","hourlyAmount","fixedWage","formMethods","useForm","zodResolver","createEditContractorPaymentFormSchema","jsxs","Fragment","PreviewPresentation","componentEvents","contractorPayments","creationToken","submissionBlockers","blockerType","selectedOption","requestBody","RFCDate","isTouched","rest","response","value","prev","CreatePaymentPresentation","contractorUuid","contractorPayment","rawPaymentMethod","sanitizedPaymentMethod","EditContractorPaymentPresentation","data","currentContractorPaymentMethod","hasAnyPayment","prevPayments","displayContractor","displayName","DOMPurify","firstLastName","prevAlerts","_"],"mappings":"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"}
1
+ {"version":3,"file":"CreatePayment.js","sources":["../../../../../src/components/Contractor/Payments/CreatePayment/CreatePayment.tsx"],"sourcesContent":["import { useContractorsListSuspense } from '@gusto/embedded-api/react-query/contractorsList'\nimport { useContractorPaymentGroupsCreateMutation } from '@gusto/embedded-api/react-query/contractorPaymentGroupsCreate'\nimport type {\n ContractorPayments,\n PostV1CompaniesCompanyIdContractorPaymentGroupsRequestBody,\n SubmissionBlockers,\n} from '@gusto/embedded-api/models/operations/postv1companiescompanyidcontractorpaymentgroups'\nimport { useContractorPaymentGroupsPreviewMutation } from '@gusto/embedded-api/react-query/contractorPaymentGroupsPreview'\nimport { useMemo, useState } from 'react'\nimport DOMPurify from 'dompurify'\nimport { RFCDate } from '@gusto/embedded-api/types/rfcdate'\nimport { useForm } from 'react-hook-form'\nimport { zodResolver } from '@hookform/resolvers/zod'\nimport { useTranslation } from 'react-i18next'\nimport type { ContractorPaymentGroupPreview } from '@gusto/embedded-api/models/components/contractorpaymentgrouppreview'\nimport { useBankAccountsGet } from '@gusto/embedded-api/react-query/bankAccountsGet'\nimport { usePaymentConfigsGet } from '@gusto/embedded-api/react-query/paymentConfigsGet'\nimport type { InternalAlert } from '../types'\nimport { CreatePaymentPresentation } from './CreatePaymentPresentation'\nimport { EditContractorPaymentPresentation } from './EditContractorPaymentPresentation'\nimport {\n createEditContractorPaymentFormSchema,\n type EditContractorPaymentFormValues,\n} from './EditContractorPaymentFormSchema'\nimport { PreviewPresentation } from './PreviewPresentation'\nimport {\n payrollSubmitHandler,\n type ApiPayrollBlocker,\n} from '@/components/Payroll/PayrollBlocker/payrollHelpers'\nimport { useComponentDictionary } from '@/i18n'\nimport { BaseComponent, useBase, type BaseComponentInterface } from '@/components/Base'\nimport { componentEvents, ContractorOnboardingStatus } from '@/shared/constants'\nimport { firstLastName } from '@/helpers/formattedStrings'\n\ninterface CreatePaymentProps extends BaseComponentInterface<'Contractor.Payments.CreatePayment'> {\n companyId: string\n}\n\nexport function CreatePayment(props: CreatePaymentProps) {\n return (\n <BaseComponent {...props}>\n <Root {...props}>{props.children}</Root>\n </BaseComponent>\n )\n}\n\nexport const Root = ({ companyId, dictionary, onEvent }: CreatePaymentProps) => {\n useComponentDictionary('Contractor.Payments.CreatePayment', dictionary)\n const { t } = useTranslation('Contractor.Payments.CreatePayment')\n const [isModalOpen, setIsModalOpen] = useState(false)\n const [paymentDate, setPaymentDate] = useState<string>(\n new Date().toISOString().split('T')[0] || '',\n )\n const { baseSubmitHandler } = useBase()\n const [alerts, setAlerts] = useState<Record<string, InternalAlert>>({})\n const [previewData, setPreviewData] = useState<ContractorPaymentGroupPreview | null>(null)\n const [payrollBlockers, setPayrollBlockers] = useState<ApiPayrollBlocker[]>([])\n const [selectedUnblockOptions, setSelectedUnblockOptions] = useState<Record<string, string>>({})\n\n const { mutateAsync: createContractorPaymentGroup, isPending: isCreatingContractorPaymentGroup } =\n useContractorPaymentGroupsCreateMutation()\n const {\n mutateAsync: previewContractorPaymentGroup,\n isPending: isPreviewingContractorPaymentGroup,\n } = useContractorPaymentGroupsPreviewMutation()\n\n const { data: contractorList } = useContractorsListSuspense({ companyUuid: companyId })\n const contractors = (contractorList.contractors || []).filter(\n contractor =>\n contractor.isActive &&\n contractor.onboardingStatus === ContractorOnboardingStatus.ONBOARDING_COMPLETED,\n )\n const { data: bankAccounts } = useBankAccountsGet({ companyId })\n const { data: paymentConfigs } = usePaymentConfigsGet({ companyUuid: companyId })\n // Currently, we only support a single default bank account per company.\n const bankAccount = bankAccounts?.companyBankAccounts?.[0]\n const paymentSpeed = paymentConfigs?.paymentConfigs?.paymentSpeed\n\n const initialContractorPayments: (ContractorPayments & { isTouched: boolean })[] = useMemo(\n () =>\n contractors.map(contractor => {\n const paymentMethod = contractor.paymentMethod ? contractor.paymentMethod : 'Direct Deposit'\n\n return {\n contractorUuid: contractor.uuid,\n paymentMethod,\n wage: '0',\n hours: '0',\n bonus: '0',\n reimbursement: '0',\n isTouched: false,\n }\n }),\n [contractors],\n )\n const [virtualContractorPayments, setVirtualContractorPayments] =\n useState<(ContractorPayments & { isTouched: boolean })[]>(initialContractorPayments)\n const totals = useMemo(\n () =>\n virtualContractorPayments.reduce<{\n wage: number\n bonus: number\n reimbursement: number\n total: number\n }>(\n (acc, payment) => {\n const contractor = contractors.find(c => c.uuid === payment.contractorUuid)\n const isHourly = contractor?.wageType === 'Hourly'\n const hours = Number(payment.hours || '0')\n const wage = Number(payment.wage || '0')\n const bonus = Number(payment.bonus || '0')\n const reimbursement = Number(payment.reimbursement || '0')\n const hourlyAmount = isHourly ? hours * Number(contractor.hourlyRate || '0') : 0\n const fixedWage = isHourly ? 0 : wage\n\n return {\n wage: acc.wage + fixedWage,\n bonus: acc.bonus + bonus,\n reimbursement: acc.reimbursement + reimbursement,\n total: acc.total + hourlyAmount + fixedWage + bonus + reimbursement,\n }\n },\n { wage: 0, bonus: 0, reimbursement: 0, total: 0 },\n ),\n [virtualContractorPayments, contractors],\n )\n\n const formMethods = useForm<EditContractorPaymentFormValues>({\n resolver: zodResolver(createEditContractorPaymentFormSchema()),\n defaultValues: {\n wageType: 'Hourly',\n hours: 0,\n wage: 0,\n bonus: 0,\n reimbursement: 0,\n paymentMethod: 'Direct Deposit',\n hourlyRate: 0,\n contractorUuid: '',\n contractorPaymentMethod: undefined,\n },\n })\n\n const onCreatePaymentGroup = async () => {\n await baseSubmitHandler(null, async () => {\n const contractorPayments = virtualContractorPayments.filter(payment => payment.isTouched)\n if (contractorPayments.length === 0 || !previewData?.creationToken) {\n return\n }\n const creationToken = previewData.creationToken\n\n const submissionBlockers: SubmissionBlockers[] = Object.entries(selectedUnblockOptions).map(\n ([blockerType, selectedOption]) => ({\n blockerType,\n selectedOption,\n }),\n )\n\n const requestBody: PostV1CompaniesCompanyIdContractorPaymentGroupsRequestBody = {\n checkDate: new RFCDate(paymentDate),\n contractorPayments: contractorPayments.map(({ isTouched, ...rest }) => rest),\n creationToken,\n ...(submissionBlockers.length > 0 && { submissionBlockers }),\n }\n\n const response = await createContractorPaymentGroup({\n request: {\n companyId,\n requestBody,\n },\n })\n\n onEvent(componentEvents.CONTRACTOR_PAYMENT_CREATED, response.contractorPaymentGroup || {})\n })\n }\n\n const onUnblockOptionChange = (blockerType: string, value: string) => {\n setSelectedUnblockOptions(prev => ({\n ...prev,\n [blockerType]: value,\n }))\n }\n const onEditContractor = (contractorUuid: string) => {\n const contractor = contractors.find(contractor => contractor.uuid === contractorUuid)\n const contractorPayment = virtualContractorPayments.find(\n payment => payment.contractorUuid === contractorUuid,\n )\n\n const rawPaymentMethod = contractorPayment?.paymentMethod || 'Direct Deposit'\n const sanitizedPaymentMethod = ['Check', 'Direct Deposit'].includes(rawPaymentMethod)\n ? (rawPaymentMethod as 'Check' | 'Direct Deposit')\n : 'Check'\n\n formMethods.reset(\n {\n wageType: contractor?.wageType || 'Hourly',\n hours: Number(contractorPayment?.hours || '0'),\n wage: Number(contractorPayment?.wage || '0'),\n bonus: Number(contractorPayment?.bonus || '0'),\n reimbursement: Number(contractorPayment?.reimbursement || '0'),\n paymentMethod: sanitizedPaymentMethod,\n hourlyRate: Number(contractor?.hourlyRate || '0'),\n contractorUuid: contractorUuid,\n contractorPaymentMethod: contractor?.paymentMethod || undefined,\n },\n { keepDirty: false, keepValues: false },\n )\n setAlerts({})\n setIsModalOpen(true)\n onEvent(componentEvents.CONTRACTOR_PAYMENT_EDIT)\n }\n\n const onEditContractorSubmit = (data: EditContractorPaymentFormValues) => {\n const currentContractor = contractors.find(c => c.uuid === data.contractorUuid)\n const currentContractorPaymentMethod = currentContractor?.paymentMethod\n\n if (!['Check', 'Direct Deposit'].includes(data.paymentMethod)) {\n formMethods.setError('paymentMethod', {\n type: 'manual',\n message: t('editContractorPayment.errors.unsupportedPaymentMethod'),\n })\n return\n }\n\n if (currentContractorPaymentMethod === 'Check' && data.paymentMethod === 'Direct Deposit') {\n formMethods.setError('paymentMethod', {\n type: 'manual',\n message: t('editContractorPayment.errors.directDepositNotAvailable'),\n })\n return\n }\n\n const hasAnyPayment =\n (data.wage ?? 0) > 0 ||\n (data.hours ?? 0) > 0 ||\n (data.bonus ?? 0) > 0 ||\n (data.reimbursement ?? 0) > 0\n\n setVirtualContractorPayments(prevPayments =>\n prevPayments.map(payment =>\n payment.contractorUuid === data.contractorUuid\n ? {\n contractorUuid: payment.contractorUuid,\n wage: String(data.wage ?? 0),\n hours: String(data.hours ?? 0),\n bonus: String(data.bonus ?? 0),\n reimbursement: String(data.reimbursement ?? 0),\n paymentMethod: data.paymentMethod,\n isTouched: hasAnyPayment,\n }\n : payment,\n ),\n )\n const displayContractor = contractors.find(\n contractor => contractor.uuid === data.contractorUuid,\n )\n const displayName = DOMPurify.sanitize(\n displayContractor?.type === 'Individual'\n ? firstLastName({\n first_name: displayContractor.firstName,\n last_name: displayContractor.lastName,\n })\n : displayContractor?.businessName || '',\n )\n setAlerts(prevAlerts => ({\n ...prevAlerts,\n [data.contractorUuid]: {\n type: 'success',\n title: t('alerts.contractorPaymentUpdated', {\n contractorName: displayName,\n interpolation: { escapeValue: false },\n }),\n onDismiss: () => {\n setAlerts(prevAlerts => {\n const { [data.contractorUuid]: _, ...rest } = prevAlerts\n return rest\n })\n },\n },\n }))\n setIsModalOpen(false)\n onEvent(componentEvents.CONTRACTOR_PAYMENT_UPDATE, data)\n }\n\n const onContinueToPreview = async () => {\n await baseSubmitHandler(null, async () => {\n const contractorPayments = virtualContractorPayments.filter(payment => payment.isTouched)\n if (contractorPayments.length === 0) {\n setAlerts({\n ...alerts,\n error: {\n type: 'error',\n title: t('alerts.noContractorPayments'),\n },\n })\n return\n }\n setAlerts({})\n setPayrollBlockers([])\n\n const result = await payrollSubmitHandler(async () => {\n const response = await previewContractorPaymentGroup({\n request: {\n companyId,\n requestBody: {\n contractorPayments: contractorPayments.map(({ isTouched, ...rest }) => rest),\n checkDate: new RFCDate(paymentDate),\n },\n },\n })\n setPreviewData(response.contractorPaymentGroupPreview || null)\n onEvent(componentEvents.CONTRACTOR_PAYMENT_PREVIEW, response.contractorPaymentGroupPreview)\n })\n\n if (!result.success && result.blockers.length > 0) {\n setPayrollBlockers(result.blockers)\n }\n })\n }\n const onBackToEdit = () => {\n setPreviewData(null)\n setPayrollBlockers([])\n setSelectedUnblockOptions({})\n onEvent(componentEvents.CONTRACTOR_PAYMENT_BACK_TO_EDIT)\n }\n const onViewBlockers = () => {\n onEvent(componentEvents.CONTRACTOR_PAYMENT_RFI_RESPOND)\n }\n\n return (\n <>\n {previewData && (\n <PreviewPresentation\n contractorPaymentGroup={previewData}\n contractors={contractors}\n onBackToEdit={onBackToEdit}\n onSubmit={onCreatePaymentGroup}\n isLoading={isCreatingContractorPaymentGroup || isPreviewingContractorPaymentGroup}\n bankAccount={bankAccount}\n selectedUnblockOptions={selectedUnblockOptions}\n onUnblockOptionChange={onUnblockOptionChange}\n paymentSpeed={paymentSpeed}\n />\n )}\n {!previewData && (\n <CreatePaymentPresentation\n contractors={contractors}\n contractorPayments={virtualContractorPayments}\n paymentDate={paymentDate}\n onPaymentDateChange={setPaymentDate}\n onSaveAndContinue={onContinueToPreview}\n onEditContractor={onEditContractor}\n totals={totals}\n alerts={alerts}\n payrollBlockers={payrollBlockers}\n onViewBlockers={onViewBlockers}\n isLoading={isCreatingContractorPaymentGroup || isPreviewingContractorPaymentGroup}\n />\n )}\n <EditContractorPaymentPresentation\n isOpen={isModalOpen}\n onClose={() => {\n setIsModalOpen(false)\n }}\n formMethods={formMethods}\n onSubmit={onEditContractorSubmit}\n contractorPaymentMethod={\n contractors.find(c => c.uuid === formMethods.getValues('contractorUuid'))\n ?.paymentMethod ?? undefined\n }\n />\n </>\n )\n}\n"],"names":["CreatePayment","props","jsx","BaseComponent","Root","companyId","dictionary","onEvent","useComponentDictionary","t","useTranslation","isModalOpen","setIsModalOpen","useState","paymentDate","setPaymentDate","baseSubmitHandler","useBase","alerts","setAlerts","previewData","setPreviewData","payrollBlockers","setPayrollBlockers","selectedUnblockOptions","setSelectedUnblockOptions","createContractorPaymentGroup","isCreatingContractorPaymentGroup","useContractorPaymentGroupsCreateMutation","previewContractorPaymentGroup","isPreviewingContractorPaymentGroup","useContractorPaymentGroupsPreviewMutation","contractorList","useContractorsListSuspense","contractors","contractor","ContractorOnboardingStatus","bankAccounts","useBankAccountsGet","paymentConfigs","usePaymentConfigsGet","bankAccount","paymentSpeed","initialContractorPayments","useMemo","paymentMethod","virtualContractorPayments","setVirtualContractorPayments","totals","acc","payment","c","isHourly","hours","wage","bonus","reimbursement","hourlyAmount","fixedWage","formMethods","useForm","zodResolver","createEditContractorPaymentFormSchema","jsxs","Fragment","PreviewPresentation","componentEvents","contractorPayments","creationToken","submissionBlockers","blockerType","selectedOption","requestBody","RFCDate","isTouched","rest","response","value","prev","CreatePaymentPresentation","result","payrollSubmitHandler","contractorUuid","contractorPayment","rawPaymentMethod","sanitizedPaymentMethod","EditContractorPaymentPresentation","data","currentContractorPaymentMethod","hasAnyPayment","prevPayments","displayContractor","displayName","DOMPurify","firstLastName","prevAlerts","_"],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  import { Contractor } from '@gusto/embedded-api/models/components/contractor';
2
2
  import { ContractorPayments } from '@gusto/embedded-api/models/operations/postv1companiescompanyidcontractorpaymentgroups';
3
3
  import { InternalAlert } from '../types';
4
+ import { ApiPayrollBlocker } from '../../../Payroll/PayrollBlocker/payrollHelpers';
4
5
  interface ContractorPaymentCreatePaymentPresentationProps {
5
6
  contractors: Contractor[];
6
7
  contractorPayments: (ContractorPayments & {
@@ -17,7 +18,9 @@ interface ContractorPaymentCreatePaymentPresentationProps {
17
18
  total: number;
18
19
  };
19
20
  alerts: Record<string, InternalAlert>;
21
+ payrollBlockers?: ApiPayrollBlocker[];
22
+ onViewBlockers?: () => void;
20
23
  isLoading: boolean;
21
24
  }
22
- export declare const CreatePaymentPresentation: ({ contractors, paymentDate, contractorPayments, onPaymentDateChange, onSaveAndContinue, onEditContractor, totals, alerts, isLoading, }: ContractorPaymentCreatePaymentPresentationProps) => import("react/jsx-runtime").JSX.Element;
25
+ export declare const CreatePaymentPresentation: ({ contractors, paymentDate, contractorPayments, onPaymentDateChange, onSaveAndContinue, onEditContractor, totals, alerts, payrollBlockers, onViewBlockers, isLoading, }: ContractorPaymentCreatePaymentPresentationProps) => import("react/jsx-runtime").JSX.Element;
23
26
  export {};