@gusto/embedded-react-sdk 0.18.0 → 0.19.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 (156) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/dist/assets/icons/icon-error-outline.svg.js +10 -0
  3. package/dist/assets/icons/icon-error-outline.svg.js.map +1 -0
  4. package/dist/assets/icons/icon-info-outline.svg.js +10 -0
  5. package/dist/assets/icons/icon-info-outline.svg.js.map +1 -0
  6. package/dist/assets/icons/icon-zap-fast.svg.js +10 -0
  7. package/dist/assets/icons/icon-zap-fast.svg.js.map +1 -0
  8. package/dist/components/Common/Fieldset/Fieldset.module.scss.js +1 -1
  9. package/dist/components/Common/PaginationControl/PaginationControl.js +6 -6
  10. package/dist/components/Common/PaginationControl/PaginationControl.js.map +1 -1
  11. package/dist/components/Common/RequirementsList/RequirementsList.js +19 -13
  12. package/dist/components/Common/RequirementsList/RequirementsList.js.map +1 -1
  13. package/dist/components/Common/RequirementsList/RequirementsList.module.scss.js +1 -1
  14. package/dist/components/Common/UI/Badge/index.d.ts +2 -0
  15. package/dist/components/Common/UI/Banner/Banner.d.ts +3 -0
  16. package/dist/components/Common/UI/Banner/Banner.js +31 -0
  17. package/dist/components/Common/UI/Banner/Banner.js.map +1 -0
  18. package/dist/components/Common/UI/Banner/Banner.module.scss.js +14 -0
  19. package/dist/components/Common/UI/Banner/Banner.module.scss.js.map +1 -0
  20. package/dist/components/Common/UI/Banner/BannerTypes.d.ts +21 -0
  21. package/dist/components/Common/UI/Banner/BannerTypes.js +7 -0
  22. package/dist/components/Common/UI/Banner/BannerTypes.js.map +1 -0
  23. package/dist/components/Common/UI/Banner/index.d.ts +4 -0
  24. package/dist/components/Common/UI/Breadcrumbs/Breadcrumbs.js +1 -1
  25. package/dist/components/Common/UI/List/List.module.scss.js +2 -2
  26. package/dist/components/Common/UI/ProgressBar/ProgressBar.js +4 -4
  27. package/dist/components/Company/DocumentSigner/DocumentList/ManageSignatories.js +13 -13
  28. package/dist/components/Company/DocumentSigner/DocumentList/ManageSignatories.js.map +1 -1
  29. package/dist/components/Company/FederalTaxes/Form.js +29 -29
  30. package/dist/components/Company/FederalTaxes/Form.js.map +1 -1
  31. package/dist/components/Company/FederalTaxes/Head.js +5 -5
  32. package/dist/components/Company/FederalTaxes/Head.js.map +1 -1
  33. package/dist/components/Contractor/ContractorList/index.js +32 -32
  34. package/dist/components/Contractor/ContractorList/index.js.map +1 -1
  35. package/dist/components/Contractor/Profile/ContractorProfileForm.js +11 -11
  36. package/dist/components/Contractor/Submit/Submit.js +6 -6
  37. package/dist/components/Contractor/Submit/Submit.js.map +1 -1
  38. package/dist/components/Contractor/Submit/SubmitDone.js +8 -8
  39. package/dist/components/Contractor/Submit/SubmitDone.js.map +1 -1
  40. package/dist/components/Employee/Compensation/Edit.js +16 -16
  41. package/dist/components/Employee/Compensation/Edit.js.map +1 -1
  42. package/dist/components/Employee/Deductions/DeductionsForm/CustomDeductionForm.d.ts +3 -3
  43. package/dist/components/Employee/EmployeeList/List.js +23 -23
  44. package/dist/components/Employee/EmployeeList/List.js.map +1 -1
  45. package/dist/components/Employee/FederalTaxes/Head.js +1 -1
  46. package/dist/components/Employee/FederalTaxes/Head.js.map +1 -1
  47. package/dist/components/Employee/Landing/Landing.js +17 -16
  48. package/dist/components/Employee/Landing/Landing.js.map +1 -1
  49. package/dist/components/Employee/PaymentMethod/BankAccountsList.js +1 -1
  50. package/dist/components/Employee/PaymentMethod/BankAccountsList.js.map +1 -1
  51. package/dist/components/Employee/Profile/HomeAddress.js +1 -1
  52. package/dist/components/Employee/Profile/HomeAddress.js.map +1 -1
  53. package/dist/components/Employee/Taxes/FederalHead.js +1 -1
  54. package/dist/components/Employee/Taxes/FederalHead.js.map +1 -1
  55. package/dist/components/Payroll/ConfirmWireDetails/ConfirmWireDetails.d.ts +6 -0
  56. package/dist/components/Payroll/ConfirmWireDetails/ConfirmWireDetails.js +57 -0
  57. package/dist/components/Payroll/ConfirmWireDetails/ConfirmWireDetails.js.map +1 -0
  58. package/dist/components/Payroll/ConfirmWireDetails/ConfirmWireDetailsBanner/ConfirmWireDetailsBanner.d.ts +8 -0
  59. package/dist/components/Payroll/ConfirmWireDetails/ConfirmWireDetailsBanner/ConfirmWireDetailsBanner.js +79 -0
  60. package/dist/components/Payroll/ConfirmWireDetails/ConfirmWireDetailsBanner/ConfirmWireDetailsBanner.js.map +1 -0
  61. package/dist/components/Payroll/ConfirmWireDetails/ConfirmWireDetailsBanner/index.d.ts +2 -0
  62. package/dist/components/Payroll/ConfirmWireDetails/ConfirmWireDetailsComponents.d.ts +7 -0
  63. package/dist/components/Payroll/ConfirmWireDetails/ConfirmWireDetailsComponents.js +25 -0
  64. package/dist/components/Payroll/ConfirmWireDetails/ConfirmWireDetailsComponents.js.map +1 -0
  65. package/dist/components/Payroll/ConfirmWireDetails/ConfirmWireDetailsForm/ConfirmWireDetailsForm.d.ts +10 -0
  66. package/dist/components/Payroll/ConfirmWireDetails/ConfirmWireDetailsForm/ConfirmWireDetailsForm.js +30 -0
  67. package/dist/components/Payroll/ConfirmWireDetails/ConfirmWireDetailsForm/ConfirmWireDetailsForm.js.map +1 -0
  68. package/dist/components/Payroll/ConfirmWireDetails/ConfirmWireDetailsForm/index.d.ts +2 -0
  69. package/dist/components/Payroll/ConfirmWireDetails/WireInstructions/WireInstructions.d.ts +10 -0
  70. package/dist/components/Payroll/ConfirmWireDetails/WireInstructions/WireInstructions.js +30 -0
  71. package/dist/components/Payroll/ConfirmWireDetails/WireInstructions/WireInstructions.js.map +1 -0
  72. package/dist/components/Payroll/ConfirmWireDetails/WireInstructions/index.d.ts +2 -0
  73. package/dist/components/Payroll/ConfirmWireDetails/confirmWireDetailsStateMachine.d.ts +13 -0
  74. package/dist/components/Payroll/ConfirmWireDetails/confirmWireDetailsStateMachine.js +63 -0
  75. package/dist/components/Payroll/ConfirmWireDetails/confirmWireDetailsStateMachine.js.map +1 -0
  76. package/dist/components/Payroll/ConfirmWireDetails/index.d.ts +3 -0
  77. package/dist/components/Payroll/PayrollBlocker/components/PayrollBlockerAlerts.js +1 -1
  78. package/dist/components/Payroll/PayrollBlocker/components/PayrollBlockerAlerts.js.map +1 -1
  79. package/dist/components/Payroll/PayrollBlocker/payrollHelpers.js +1 -1
  80. package/dist/components/Payroll/PayrollBlocker/payrollHelpers.js.map +1 -1
  81. package/dist/components/Payroll/PayrollConfiguration/PayrollConfiguration.js +60 -59
  82. package/dist/components/Payroll/PayrollConfiguration/PayrollConfiguration.js.map +1 -1
  83. package/dist/components/Payroll/PayrollEditEmployee/PayrollEditEmployee.js +30 -29
  84. package/dist/components/Payroll/PayrollEditEmployee/PayrollEditEmployee.js.map +1 -1
  85. package/dist/components/Payroll/PayrollEditEmployee/PayrollEditEmployeePresentation.js +75 -75
  86. package/dist/components/Payroll/PayrollEditEmployee/PayrollEditEmployeePresentation.js.map +1 -1
  87. package/dist/components/Payroll/PayrollLanding/PayrollLandingFlowComponents.js +41 -36
  88. package/dist/components/Payroll/PayrollLanding/PayrollLandingFlowComponents.js.map +1 -1
  89. package/dist/components/Payroll/PayrollList/PayrollListPresentation.js +25 -25
  90. package/dist/components/Payroll/PayrollList/PayrollListPresentation.js.map +1 -1
  91. package/dist/components/Payroll/PayrollOverview/PayrollOverview.js +109 -89
  92. package/dist/components/Payroll/PayrollOverview/PayrollOverview.js.map +1 -1
  93. package/dist/components/Payroll/PayrollOverview/PayrollOverviewPresentation.d.ts +6 -1
  94. package/dist/components/Payroll/PayrollOverview/PayrollOverviewPresentation.js +179 -147
  95. package/dist/components/Payroll/PayrollOverview/PayrollOverviewPresentation.js.map +1 -1
  96. package/dist/components/Payroll/PayrollOverview/SubmissionBlockers/FastAchThresholdExceeded.d.ts +8 -0
  97. package/dist/components/Payroll/PayrollOverview/SubmissionBlockers/FastAchThresholdExceeded.js +49 -0
  98. package/dist/components/Payroll/PayrollOverview/SubmissionBlockers/FastAchThresholdExceeded.js.map +1 -0
  99. package/dist/components/Payroll/PayrollOverview/SubmissionBlockers/GenericBlocker.d.ts +6 -0
  100. package/dist/components/Payroll/PayrollOverview/SubmissionBlockers/GenericBlocker.js +18 -0
  101. package/dist/components/Payroll/PayrollOverview/SubmissionBlockers/GenericBlocker.js.map +1 -0
  102. package/dist/components/Payroll/PayrollOverview/SubmissionBlockers/index.d.ts +3 -0
  103. package/dist/components/Payroll/index.d.ts +1 -0
  104. package/dist/components/Payroll/index.js +8 -6
  105. package/dist/components/Payroll/index.js.map +1 -1
  106. package/dist/contexts/ComponentAdapter/adapters/defaultComponentAdapter.js +54 -52
  107. package/dist/contexts/ComponentAdapter/adapters/defaultComponentAdapter.js.map +1 -1
  108. package/dist/contexts/ComponentAdapter/componentAdapterTypes.d.ts +1 -0
  109. package/dist/contexts/ComponentAdapter/createComponentsWithDefaults.d.ts +5 -0
  110. package/dist/contexts/ComponentAdapter/createComponentsWithDefaults.js +27 -25
  111. package/dist/contexts/ComponentAdapter/createComponentsWithDefaults.js.map +1 -1
  112. package/dist/contexts/ComponentAdapter/useComponentContext.d.ts +2 -0
  113. package/dist/contexts/ComponentAdapter/useComponentContext.js +3 -3
  114. package/dist/contexts/ComponentAdapter/useComponentContext.js.map +1 -1
  115. package/dist/contexts/ThemeProvider/theme.d.ts +1 -0
  116. package/dist/contexts/ThemeProvider/theme.js +5 -4
  117. package/dist/contexts/ThemeProvider/theme.js.map +1 -1
  118. package/dist/i18n/I18n.js +1 -1
  119. package/dist/i18n/I18n.js.map +1 -1
  120. package/dist/i18n/en/Company.BankAccount.json.js +1 -1
  121. package/dist/i18n/en/Company.DocumentList.json.js +16 -16
  122. package/dist/i18n/en/Company.FederalTaxes.json.js +22 -22
  123. package/dist/i18n/en/Contractor.ContractorList.json.js +8 -8
  124. package/dist/i18n/en/Contractor.Submit.json.js +6 -6
  125. package/dist/i18n/en/Employee.Compensation.json.js +8 -8
  126. package/dist/i18n/en/Employee.Deductions.json.js +51 -51
  127. package/dist/i18n/en/Employee.EmployeeList.json.js +6 -6
  128. package/dist/i18n/en/Employee.FederalTaxes.json.js +3 -3
  129. package/dist/i18n/en/Employee.HomeAddress.json.js +2 -2
  130. package/dist/i18n/en/Employee.OnboardingSummary.json.js +1 -1
  131. package/dist/i18n/en/Employee.PaymentMethod.json.js +11 -11
  132. package/dist/i18n/en/Employee.Taxes.json.js +2 -2
  133. package/dist/i18n/en/Payroll.ConfirmWireDetailsBanner.json.js +14 -0
  134. package/dist/i18n/en/Payroll.ConfirmWireDetailsBanner.json.js.map +1 -0
  135. package/dist/i18n/en/Payroll.ConfirmWireDetailsForm.json.js +10 -0
  136. package/dist/i18n/en/Payroll.ConfirmWireDetailsForm.json.js.map +1 -0
  137. package/dist/i18n/en/Payroll.PayrollBlocker.json.js +3 -3
  138. package/dist/i18n/en/Payroll.PayrollEditEmployee.json.js +4 -4
  139. package/dist/i18n/en/Payroll.PayrollList.json.js +7 -7
  140. package/dist/i18n/en/Payroll.PayrollOverview.json.js +35 -33
  141. package/dist/i18n/en/Payroll.PayrollOverview.json.js.map +1 -1
  142. package/dist/i18n/en/Payroll.PayrollReceipts.json.js +7 -7
  143. package/dist/i18n/en/Payroll.WireInstructions.json.js +10 -0
  144. package/dist/i18n/en/Payroll.WireInstructions.json.js.map +1 -0
  145. package/dist/i18n/en/common.json.d.ts +1 -1
  146. package/dist/i18n/en/common.json.js +1 -1
  147. package/dist/shared/constants.d.ts +13 -0
  148. package/dist/shared/constants.js +56 -47
  149. package/dist/shared/constants.js.map +1 -1
  150. package/dist/style.css +1 -1
  151. package/dist/types/i18next.d.ts +113 -98
  152. package/package.json +9 -10
  153. package/dist/i18n/en/Company.AddBank.json.js +0 -28
  154. package/dist/i18n/en/Company.AddBank.json.js.map +0 -1
  155. package/dist/i18n/en/Payroll.PayrollSchedule.json.js +0 -27
  156. package/dist/i18n/en/Payroll.PayrollSchedule.json.js.map +0 -1
@@ -0,0 +1,25 @@
1
+ import { jsx as t } from "react/jsx-runtime";
2
+ import { useFlow as e } from "../../Flow/useFlow.js";
3
+ import { ensureRequired as i } from "../../../helpers/ensureRequired.js";
4
+ import { ConfirmWireDetailsForm as m } from "./ConfirmWireDetailsForm/ConfirmWireDetailsForm.js";
5
+ import { WireInstructions as s } from "./WireInstructions/WireInstructions.js";
6
+ function a() {
7
+ const { companyId: o, wireInId: r, onEvent: n } = e();
8
+ return /* @__PURE__ */ t(s, { companyId: i(o), wireInId: r, onEvent: n });
9
+ }
10
+ function d() {
11
+ const { companyId: o, wireInId: r, onEvent: n } = e();
12
+ return /* @__PURE__ */ t(
13
+ m,
14
+ {
15
+ companyId: i(o),
16
+ wireInId: r,
17
+ onEvent: n
18
+ }
19
+ );
20
+ }
21
+ export {
22
+ d as ConfirmWireDetailsFormContextual,
23
+ a as WireInstructionsContextual
24
+ };
25
+ //# sourceMappingURL=ConfirmWireDetailsComponents.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConfirmWireDetailsComponents.js","sources":["../../../../src/components/Payroll/ConfirmWireDetails/ConfirmWireDetailsComponents.tsx"],"sourcesContent":["import { WireInstructions } from './WireInstructions'\nimport { ConfirmWireDetailsForm } from './ConfirmWireDetailsForm'\nimport { useFlow } from '@/components/Flow/useFlow'\nimport { ensureRequired } from '@/helpers/ensureRequired'\nimport type { FlowContextInterface } from '@/components/Flow/useFlow'\n\nexport interface ConfirmWireDetailsContextInterface extends FlowContextInterface {\n companyId: string\n wireInId?: string\n}\n\nexport function WireInstructionsContextual() {\n const { companyId, wireInId, onEvent } = useFlow<ConfirmWireDetailsContextInterface>()\n\n return (\n <WireInstructions companyId={ensureRequired(companyId)} wireInId={wireInId} onEvent={onEvent} />\n )\n}\n\nexport function ConfirmWireDetailsFormContextual() {\n const { companyId, wireInId, onEvent } = useFlow<ConfirmWireDetailsContextInterface>()\n\n return (\n <ConfirmWireDetailsForm\n companyId={ensureRequired(companyId)}\n wireInId={wireInId}\n onEvent={onEvent}\n />\n )\n}\n"],"names":["WireInstructionsContextual","companyId","wireInId","onEvent","useFlow","WireInstructions","ensureRequired","ConfirmWireDetailsFormContextual","jsx","ConfirmWireDetailsForm"],"mappings":";;;;;AAWO,SAASA,IAA6B;AAC3C,QAAM,EAAE,WAAAC,GAAW,UAAAC,GAAU,SAAAC,EAAA,IAAYC,EAAA;AAEzC,2BACGC,GAAA,EAAiB,WAAWC,EAAeL,CAAS,GAAG,UAAAC,GAAoB,SAAAC,GAAkB;AAElG;AAEO,SAASI,IAAmC;AACjD,QAAM,EAAE,WAAAN,GAAW,UAAAC,GAAU,SAAAC,EAAA,IAAYC,EAAA;AAEzC,SACE,gBAAAI;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,WAAWH,EAAeL,CAAS;AAAA,MACnC,UAAAC;AAAA,MACA,SAAAC;AAAA,IAAA;AAAA,EAAA;AAGN;"}
@@ -0,0 +1,10 @@
1
+ import { BaseComponentInterface } from '../../../Base';
2
+ import { EventType } from '../../../../shared/constants';
3
+ import { OnEventType } from '../../../Base/useBase';
4
+ interface ConfirmWireDetailsFormProps extends BaseComponentInterface<'Payroll.ConfirmWireDetailsForm'> {
5
+ companyId: string;
6
+ wireInId?: string;
7
+ onEvent: OnEventType<EventType, unknown>;
8
+ }
9
+ export declare function ConfirmWireDetailsForm(props: ConfirmWireDetailsFormProps): import("react/jsx-runtime").JSX.Element;
10
+ export {};
@@ -0,0 +1,30 @@
1
+ import { jsx as r, jsxs as e } from "react/jsx-runtime";
2
+ import { useTranslation as f } from "react-i18next";
3
+ import { BaseComponent as d } from "../../../Base/Base.js";
4
+ import "../../../Base/useBase.js";
5
+ import { useComponentContext as C } from "../../../../contexts/ComponentAdapter/useComponentContext.js";
6
+ import { useComponentDictionary as p, useI18n as u } from "../../../../i18n/I18n.js";
7
+ import { Flex as l } from "../../../Common/Flex/Flex.js";
8
+ import { payrollWireEvents as m } from "../../../../shared/constants.js";
9
+ function O(o) {
10
+ return /* @__PURE__ */ r(d, { ...o, children: /* @__PURE__ */ r(h, { ...o, children: o.children }) });
11
+ }
12
+ const h = ({ companyId: o, wireInId: y, dictionary: a, onEvent: i }) => {
13
+ p("Payroll.ConfirmWireDetailsForm", a), u("Payroll.ConfirmWireDetailsForm");
14
+ const { t: n } = f("Payroll.ConfirmWireDetailsForm"), { Button: t } = C(), c = () => {
15
+ i(m.PAYROLL_WIRE_FORM_DONE);
16
+ }, s = () => {
17
+ i(m.PAYROLL_WIRE_FORM_CANCEL);
18
+ };
19
+ return /* @__PURE__ */ e(l, { flexDirection: "column", gap: 24, children: [
20
+ /* @__PURE__ */ r("h2", { children: n("title") }),
21
+ /* @__PURE__ */ e(l, { gap: 12, justifyContent: "flex-end", children: [
22
+ /* @__PURE__ */ r(t, { variant: "secondary", onClick: s, children: n("cta.cancel") }),
23
+ /* @__PURE__ */ r(t, { variant: "primary", onClick: c, children: n("cta.submit") })
24
+ ] })
25
+ ] });
26
+ };
27
+ export {
28
+ O as ConfirmWireDetailsForm
29
+ };
30
+ //# sourceMappingURL=ConfirmWireDetailsForm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConfirmWireDetailsForm.js","sources":["../../../../../src/components/Payroll/ConfirmWireDetails/ConfirmWireDetailsForm/ConfirmWireDetailsForm.tsx"],"sourcesContent":["import { useTranslation } from 'react-i18next'\nimport { BaseComponent, type BaseComponentInterface } from '@/components/Base'\nimport { useComponentContext } from '@/contexts/ComponentAdapter/useComponentContext'\nimport { useComponentDictionary, useI18n } from '@/i18n'\nimport { Flex } from '@/components/Common/Flex/Flex'\nimport { payrollWireEvents, type EventType } from '@/shared/constants'\nimport type { OnEventType } from '@/components/Base/useBase'\n\ninterface ConfirmWireDetailsFormProps\n extends BaseComponentInterface<'Payroll.ConfirmWireDetailsForm'> {\n companyId: string\n wireInId?: string\n onEvent: OnEventType<EventType, unknown>\n}\n\nexport function ConfirmWireDetailsForm(props: ConfirmWireDetailsFormProps) {\n return (\n <BaseComponent {...props}>\n <Root {...props}>{props.children}</Root>\n </BaseComponent>\n )\n}\n\nconst Root = ({ companyId, wireInId, dictionary, onEvent }: ConfirmWireDetailsFormProps) => {\n useComponentDictionary('Payroll.ConfirmWireDetailsForm', dictionary)\n useI18n('Payroll.ConfirmWireDetailsForm')\n const { t } = useTranslation('Payroll.ConfirmWireDetailsForm')\n const { Button } = useComponentContext()\n\n const handleSubmit = () => {\n onEvent(payrollWireEvents.PAYROLL_WIRE_FORM_DONE)\n }\n\n const handleCancel = () => {\n onEvent(payrollWireEvents.PAYROLL_WIRE_FORM_CANCEL)\n }\n\n return (\n <Flex flexDirection=\"column\" gap={24}>\n <h2>{t('title')}</h2>\n\n {/* TODO: Form fields will be implemented in subsequent ticket */}\n\n <Flex gap={12} justifyContent=\"flex-end\">\n <Button variant=\"secondary\" onClick={handleCancel}>\n {t('cta.cancel')}\n </Button>\n <Button variant=\"primary\" onClick={handleSubmit}>\n {t('cta.submit')}\n </Button>\n </Flex>\n </Flex>\n )\n}\n"],"names":["ConfirmWireDetailsForm","props","jsx","BaseComponent","Root","companyId","wireInId","dictionary","onEvent","useComponentDictionary","useI18n","t","useTranslation","Button","useComponentContext","handleSubmit","payrollWireEvents","handleCancel","jsxs","Flex"],"mappings":";;;;;;;;AAeO,SAASA,EAAuBC,GAAoC;AACzE,SACE,gBAAAC,EAACC,GAAA,EAAe,GAAGF,GACjB,UAAA,gBAAAC,EAACE,KAAM,GAAGH,GAAQ,UAAAA,EAAM,SAAA,CAAS,EAAA,CACnC;AAEJ;AAEA,MAAMG,IAAO,CAAC,EAAE,WAAAC,GAAW,UAAAC,GAAU,YAAAC,GAAY,SAAAC,QAA2C;AAC1F,EAAAC,EAAuB,kCAAkCF,CAAU,GACnEG,EAAQ,gCAAgC;AACxC,QAAM,EAAE,GAAAC,EAAA,IAAMC,EAAe,gCAAgC,GACvD,EAAE,QAAAC,EAAA,IAAWC,EAAA,GAEbC,IAAe,MAAM;AACzB,IAAAP,EAAQQ,EAAkB,sBAAsB;AAAA,EAClD,GAEMC,IAAe,MAAM;AACzB,IAAAT,EAAQQ,EAAkB,wBAAwB;AAAA,EACpD;AAEA,SACE,gBAAAE,EAACC,GAAA,EAAK,eAAc,UAAS,KAAK,IAChC,UAAA;AAAA,IAAA,gBAAAjB,EAAC,MAAA,EAAI,UAAAS,EAAE,OAAO,EAAA,CAAE;AAAA,IAIhB,gBAAAO,EAACC,GAAA,EAAK,KAAK,IAAI,gBAAe,YAC5B,UAAA;AAAA,MAAA,gBAAAjB,EAACW,KAAO,SAAQ,aAAY,SAASI,GAClC,UAAAN,EAAE,YAAY,GACjB;AAAA,MACA,gBAAAT,EAACW,KAAO,SAAQ,WAAU,SAASE,GAChC,UAAAJ,EAAE,YAAY,EAAA,CACjB;AAAA,IAAA,EAAA,CACF;AAAA,EAAA,GACF;AAEJ;"}
@@ -0,0 +1,2 @@
1
+ import "./types/i18next.d.ts"
2
+ export { ConfirmWireDetailsForm } from './ConfirmWireDetailsForm';
@@ -0,0 +1,10 @@
1
+ import { BaseComponentInterface } from '../../../Base';
2
+ import { EventType } from '../../../../shared/constants';
3
+ import { OnEventType } from '../../../Base/useBase';
4
+ interface WireInstructionsProps extends BaseComponentInterface<'Payroll.WireInstructions'> {
5
+ companyId: string;
6
+ wireInId?: string;
7
+ onEvent: OnEventType<EventType, unknown>;
8
+ }
9
+ export declare function WireInstructions(props: WireInstructionsProps): import("react/jsx-runtime").JSX.Element;
10
+ export {};
@@ -0,0 +1,30 @@
1
+ import { jsx as n, jsxs as e } from "react/jsx-runtime";
2
+ import { useTranslation as d } from "react-i18next";
3
+ import { BaseComponent as u } from "../../../Base/Base.js";
4
+ import "../../../Base/useBase.js";
5
+ import { useComponentContext as I } from "../../../../contexts/ComponentAdapter/useComponentContext.js";
6
+ import { useComponentDictionary as f, useI18n as p } from "../../../../i18n/I18n.js";
7
+ import { Flex as c } from "../../../Common/Flex/Flex.js";
8
+ import { payrollWireEvents as l } from "../../../../shared/constants.js";
9
+ function P(o) {
10
+ return /* @__PURE__ */ n(u, { ...o, children: /* @__PURE__ */ n(C, { ...o, children: o.children }) });
11
+ }
12
+ const C = ({ companyId: o, wireInId: h, dictionary: s, onEvent: t }) => {
13
+ f("Payroll.WireInstructions", s), p("Payroll.WireInstructions");
14
+ const { t: r } = d("Payroll.WireInstructions"), { Button: i } = I(), m = () => {
15
+ t(l.PAYROLL_WIRE_INSTRUCTIONS_DONE);
16
+ }, a = () => {
17
+ t(l.PAYROLL_WIRE_INSTRUCTIONS_CANCEL);
18
+ };
19
+ return /* @__PURE__ */ e(c, { flexDirection: "column", gap: 24, children: [
20
+ /* @__PURE__ */ n("h2", { children: r("title") }),
21
+ /* @__PURE__ */ e(c, { gap: 12, justifyContent: "flex-end", children: [
22
+ /* @__PURE__ */ n(i, { variant: "secondary", onClick: a, children: r("cta.close") }),
23
+ /* @__PURE__ */ n(i, { variant: "primary", onClick: m, children: r("cta.confirm") })
24
+ ] })
25
+ ] });
26
+ };
27
+ export {
28
+ P as WireInstructions
29
+ };
30
+ //# sourceMappingURL=WireInstructions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WireInstructions.js","sources":["../../../../../src/components/Payroll/ConfirmWireDetails/WireInstructions/WireInstructions.tsx"],"sourcesContent":["import { useTranslation } from 'react-i18next'\nimport { BaseComponent, type BaseComponentInterface } from '@/components/Base'\nimport { useComponentContext } from '@/contexts/ComponentAdapter/useComponentContext'\nimport { useComponentDictionary, useI18n } from '@/i18n'\nimport { Flex } from '@/components/Common/Flex/Flex'\nimport { payrollWireEvents, type EventType } from '@/shared/constants'\nimport type { OnEventType } from '@/components/Base/useBase'\n\ninterface WireInstructionsProps extends BaseComponentInterface<'Payroll.WireInstructions'> {\n companyId: string\n wireInId?: string\n onEvent: OnEventType<EventType, unknown>\n}\n\nexport function WireInstructions(props: WireInstructionsProps) {\n return (\n <BaseComponent {...props}>\n <Root {...props}>{props.children}</Root>\n </BaseComponent>\n )\n}\n\nconst Root = ({ companyId, wireInId, dictionary, onEvent }: WireInstructionsProps) => {\n useComponentDictionary('Payroll.WireInstructions', dictionary)\n useI18n('Payroll.WireInstructions')\n const { t } = useTranslation('Payroll.WireInstructions')\n const { Button } = useComponentContext()\n\n const handleConfirm = () => {\n onEvent(payrollWireEvents.PAYROLL_WIRE_INSTRUCTIONS_DONE)\n }\n\n const handleClose = () => {\n onEvent(payrollWireEvents.PAYROLL_WIRE_INSTRUCTIONS_CANCEL)\n }\n\n return (\n <Flex flexDirection=\"column\" gap={24}>\n <h2>{t('title')}</h2>\n\n {/* TODO: Wire instructions content will be implemented in subsequent ticket */}\n\n <Flex gap={12} justifyContent=\"flex-end\">\n <Button variant=\"secondary\" onClick={handleClose}>\n {t('cta.close')}\n </Button>\n <Button variant=\"primary\" onClick={handleConfirm}>\n {t('cta.confirm')}\n </Button>\n </Flex>\n </Flex>\n )\n}\n"],"names":["WireInstructions","props","jsx","BaseComponent","Root","companyId","wireInId","dictionary","onEvent","useComponentDictionary","useI18n","t","useTranslation","Button","useComponentContext","handleConfirm","payrollWireEvents","handleClose","jsxs","Flex"],"mappings":";;;;;;;;AAcO,SAASA,EAAiBC,GAA8B;AAC7D,SACE,gBAAAC,EAACC,GAAA,EAAe,GAAGF,GACjB,UAAA,gBAAAC,EAACE,KAAM,GAAGH,GAAQ,UAAAA,EAAM,SAAA,CAAS,EAAA,CACnC;AAEJ;AAEA,MAAMG,IAAO,CAAC,EAAE,WAAAC,GAAW,UAAAC,GAAU,YAAAC,GAAY,SAAAC,QAAqC;AACpF,EAAAC,EAAuB,4BAA4BF,CAAU,GAC7DG,EAAQ,0BAA0B;AAClC,QAAM,EAAE,GAAAC,EAAA,IAAMC,EAAe,0BAA0B,GACjD,EAAE,QAAAC,EAAA,IAAWC,EAAA,GAEbC,IAAgB,MAAM;AAC1B,IAAAP,EAAQQ,EAAkB,8BAA8B;AAAA,EAC1D,GAEMC,IAAc,MAAM;AACxB,IAAAT,EAAQQ,EAAkB,gCAAgC;AAAA,EAC5D;AAEA,SACE,gBAAAE,EAACC,GAAA,EAAK,eAAc,UAAS,KAAK,IAChC,UAAA;AAAA,IAAA,gBAAAjB,EAAC,MAAA,EAAI,UAAAS,EAAE,OAAO,EAAA,CAAE;AAAA,IAIhB,gBAAAO,EAACC,GAAA,EAAK,KAAK,IAAI,gBAAe,YAC5B,UAAA;AAAA,MAAA,gBAAAjB,EAACW,KAAO,SAAQ,aAAY,SAASI,GAClC,UAAAN,EAAE,WAAW,GAChB;AAAA,MACA,gBAAAT,EAACW,KAAO,SAAQ,WAAU,SAASE,GAChC,UAAAJ,EAAE,aAAa,EAAA,CAClB;AAAA,IAAA,EAAA,CACF;AAAA,EAAA,GACF;AAEJ;"}
@@ -0,0 +1,2 @@
1
+ import "./types/i18next.d.ts"
2
+ export { WireInstructions } from './WireInstructions';
@@ -0,0 +1,13 @@
1
+ import { payrollWireEvents } from '../../../shared/constants';
2
+ export type EventPayloads = {
3
+ [payrollWireEvents.PAYROLL_WIRE_START_TRANSFER]: undefined;
4
+ [payrollWireEvents.PAYROLL_WIRE_INSTRUCTIONS_DONE]: undefined;
5
+ [payrollWireEvents.PAYROLL_WIRE_FORM_DONE]: undefined;
6
+ [payrollWireEvents.PAYROLL_WIRE_FORM_CANCEL]: undefined;
7
+ };
8
+ export declare const confirmWireDetailsMachine: {
9
+ banner: import('robot3').MachineState<any>;
10
+ wireInstructions: import('robot3').MachineState<any>;
11
+ confirmForm: import('robot3').MachineState<any>;
12
+ final: import('robot3').MachineState<any>;
13
+ };
@@ -0,0 +1,63 @@
1
+ import { state as e, transition as r, reduce as o } from "robot3";
2
+ import { ConfirmWireDetailsFormContextual as i, WireInstructionsContextual as R } from "./ConfirmWireDetailsComponents.js";
3
+ import { payrollWireEvents as t } from "../../../shared/constants.js";
4
+ const s = {
5
+ banner: e(
6
+ r(
7
+ t.PAYROLL_WIRE_START_TRANSFER,
8
+ "wireInstructions",
9
+ o(
10
+ (n) => ({
11
+ ...n,
12
+ component: R
13
+ })
14
+ )
15
+ )
16
+ ),
17
+ wireInstructions: e(
18
+ r(
19
+ t.PAYROLL_WIRE_INSTRUCTIONS_DONE,
20
+ "confirmForm",
21
+ o(
22
+ (n) => ({
23
+ ...n,
24
+ component: i
25
+ })
26
+ )
27
+ ),
28
+ r(
29
+ t.PAYROLL_WIRE_FORM_CANCEL,
30
+ "banner",
31
+ o(
32
+ (n) => ({
33
+ ...n
34
+ })
35
+ )
36
+ )
37
+ ),
38
+ confirmForm: e(
39
+ r(
40
+ t.PAYROLL_WIRE_FORM_DONE,
41
+ "banner",
42
+ o(
43
+ (n) => ({
44
+ ...n
45
+ })
46
+ )
47
+ ),
48
+ r(
49
+ t.PAYROLL_WIRE_FORM_CANCEL,
50
+ "banner",
51
+ o(
52
+ (n) => ({
53
+ ...n
54
+ })
55
+ )
56
+ )
57
+ ),
58
+ final: e()
59
+ };
60
+ export {
61
+ s as confirmWireDetailsMachine
62
+ };
63
+ //# sourceMappingURL=confirmWireDetailsStateMachine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"confirmWireDetailsStateMachine.js","sources":["../../../../src/components/Payroll/ConfirmWireDetails/confirmWireDetailsStateMachine.tsx"],"sourcesContent":["import { state, transition, reduce } from 'robot3'\nimport type { ConfirmWireDetailsContextInterface } from './ConfirmWireDetailsComponents'\nimport {\n WireInstructionsContextual,\n ConfirmWireDetailsFormContextual,\n} from './ConfirmWireDetailsComponents'\nimport { payrollWireEvents } from '@/shared/constants'\nimport type { MachineTransition } from '@/types/Helpers'\n\nexport type EventPayloads = {\n [payrollWireEvents.PAYROLL_WIRE_START_TRANSFER]: undefined\n [payrollWireEvents.PAYROLL_WIRE_INSTRUCTIONS_DONE]: undefined\n [payrollWireEvents.PAYROLL_WIRE_FORM_DONE]: undefined\n [payrollWireEvents.PAYROLL_WIRE_FORM_CANCEL]: undefined\n}\n\nexport const confirmWireDetailsMachine = {\n banner: state<MachineTransition>(\n transition(\n payrollWireEvents.PAYROLL_WIRE_START_TRANSFER,\n 'wireInstructions',\n reduce(\n (ctx: ConfirmWireDetailsContextInterface): ConfirmWireDetailsContextInterface => ({\n ...ctx,\n component: WireInstructionsContextual,\n }),\n ),\n ),\n ),\n wireInstructions: state<MachineTransition>(\n transition(\n payrollWireEvents.PAYROLL_WIRE_INSTRUCTIONS_DONE,\n 'confirmForm',\n reduce(\n (ctx: ConfirmWireDetailsContextInterface): ConfirmWireDetailsContextInterface => ({\n ...ctx,\n component: ConfirmWireDetailsFormContextual,\n }),\n ),\n ),\n transition(\n payrollWireEvents.PAYROLL_WIRE_FORM_CANCEL,\n 'banner',\n reduce(\n (ctx: ConfirmWireDetailsContextInterface): ConfirmWireDetailsContextInterface => ({\n ...ctx,\n }),\n ),\n ),\n ),\n confirmForm: state<MachineTransition>(\n transition(\n payrollWireEvents.PAYROLL_WIRE_FORM_DONE,\n 'banner',\n reduce(\n (ctx: ConfirmWireDetailsContextInterface): ConfirmWireDetailsContextInterface => ({\n ...ctx,\n }),\n ),\n ),\n transition(\n payrollWireEvents.PAYROLL_WIRE_FORM_CANCEL,\n 'banner',\n reduce(\n (ctx: ConfirmWireDetailsContextInterface): ConfirmWireDetailsContextInterface => ({\n ...ctx,\n }),\n ),\n ),\n ),\n final: state<MachineTransition>(),\n}\n"],"names":["confirmWireDetailsMachine","state","transition","payrollWireEvents","reduce","ctx","WireInstructionsContextual","ConfirmWireDetailsFormContextual"],"mappings":";;;AAgBO,MAAMA,IAA4B;AAAA,EACvC,QAAQC;AAAA,IACNC;AAAA,MACEC,EAAkB;AAAA,MAClB;AAAA,MACAC;AAAA,QACE,CAACC,OAAiF;AAAA,UAChF,GAAGA;AAAA,UACH,WAAWC;AAAA,QAAA;AAAA,MACb;AAAA,IACF;AAAA,EACF;AAAA,EAEF,kBAAkBL;AAAA,IAChBC;AAAA,MACEC,EAAkB;AAAA,MAClB;AAAA,MACAC;AAAA,QACE,CAACC,OAAiF;AAAA,UAChF,GAAGA;AAAA,UACH,WAAWE;AAAA,QAAA;AAAA,MACb;AAAA,IACF;AAAA,IAEFL;AAAA,MACEC,EAAkB;AAAA,MAClB;AAAA,MACAC;AAAA,QACE,CAACC,OAAiF;AAAA,UAChF,GAAGA;AAAA,QAAA;AAAA,MACL;AAAA,IACF;AAAA,EACF;AAAA,EAEF,aAAaJ;AAAA,IACXC;AAAA,MACEC,EAAkB;AAAA,MAClB;AAAA,MACAC;AAAA,QACE,CAACC,OAAiF;AAAA,UAChF,GAAGA;AAAA,QAAA;AAAA,MACL;AAAA,IACF;AAAA,IAEFH;AAAA,MACEC,EAAkB;AAAA,MAClB;AAAA,MACAC;AAAA,QACE,CAACC,OAAiF;AAAA,UAChF,GAAGA;AAAA,QAAA;AAAA,MACL;AAAA,IACF;AAAA,EACF;AAAA,EAEF,OAAOJ,EAAA;AACT;"}
@@ -0,0 +1,3 @@
1
+ import "./types/i18next.d.ts"
2
+ export { ConfirmWireDetails } from './ConfirmWireDetails';
3
+ export type { ConfirmWireDetailsContextInterface } from './ConfirmWireDetailsComponents';
@@ -19,7 +19,7 @@ function w({
19
19
  defaultValue: r.key.replace(/_/g, " ").replace(/\b\w/g, (K) => K.toUpperCase())
20
20
  }), T = e(o.descriptionKey, {
21
21
  defaultValue: r.message || e("defaultBlockerDescription")
22
- }), k = e(o.helpTextKey, { defaultValue: e("defaultBlockerHelpText") });
22
+ }), k = e(o.helpTextKey, { defaultValue: e("defaultBlockerHelp") });
23
23
  return {
24
24
  ...r,
25
25
  title: B,
@@ -1 +1 @@
1
- {"version":3,"file":"PayrollBlockerAlerts.js","sources":["../../../../../src/components/Payroll/PayrollBlocker/components/PayrollBlockerAlerts.tsx"],"sourcesContent":["import { useTranslation } from 'react-i18next'\nimport { type ApiPayrollBlocker, getBlockerTranslationKeys } from '../payrollHelpers'\nimport { useComponentContext } from '@/contexts/ComponentAdapter/useComponentContext'\nimport { Flex } from '@/components/Common'\nimport { useI18n } from '@/i18n'\n\ninterface PayrollBlockerAlertsProps {\n blockers: ApiPayrollBlocker[]\n className?: string\n onMultipleViewClick?: () => void\n multipleViewLabel?: string\n}\n\n/**\n * PayrollBlockerAlerts - Alert-style component for inline blocker display\n * Shows single blocker as alert, or multiple blockers as summary with \"Review\" button\n * Returns null for empty blocker arrays\n */\nexport function PayrollBlockerAlerts({\n blockers,\n onMultipleViewClick,\n multipleViewLabel,\n className,\n}: PayrollBlockerAlertsProps) {\n useI18n('Payroll.PayrollBlocker')\n const { t } = useTranslation('Payroll.PayrollBlocker')\n const { Alert, Button, Text, UnorderedList } = useComponentContext()\n\n // Return null for empty blockers array\n if (blockers.length === 0) {\n return null\n }\n\n const hasMultipleBlockers = blockers.length > 1\n\n const enrichedBlockers = blockers.map(blocker => {\n const translationKeys = getBlockerTranslationKeys(blocker.key)\n\n const title = t(translationKeys.titleKey, {\n defaultValue: blocker.key.replace(/_/g, ' ').replace(/\\b\\w/g, l => l.toUpperCase()),\n })\n const description = t(translationKeys.descriptionKey, {\n defaultValue: blocker.message || t('defaultBlockerDescription'),\n })\n const helpText = t(translationKeys.helpTextKey, { defaultValue: t('defaultBlockerHelpText') })\n\n return {\n ...blocker,\n title,\n description,\n helpText,\n }\n })\n\n const singleBlocker = enrichedBlockers[0]\n\n if (!hasMultipleBlockers && singleBlocker) {\n return (\n <Alert status=\"error\" label={singleBlocker.title} className={className}>\n <Flex flexDirection=\"column\" gap={8}>\n <Text>{singleBlocker.description}</Text>\n {singleBlocker.helpText && singleBlocker.helpText !== singleBlocker.description && (\n <Text variant=\"supporting\" size=\"sm\">\n {singleBlocker.helpText}\n </Text>\n )}\n </Flex>\n </Alert>\n )\n }\n\n const listItems = enrichedBlockers.map(blocker => blocker.title)\n const defaultMultipleLabel = multipleViewLabel || t('viewAllBlockers')\n\n return (\n <Alert\n status=\"error\"\n label={t('multipleIssuesTitle', { count: blockers.length })}\n className={className}\n >\n <Flex flexDirection=\"column\" gap={16}>\n <UnorderedList items={listItems} />\n {onMultipleViewClick && (\n <div>\n <Button variant=\"secondary\" onClick={onMultipleViewClick} title={defaultMultipleLabel}>\n {defaultMultipleLabel}\n </Button>\n </div>\n )}\n </Flex>\n </Alert>\n )\n}\n"],"names":["PayrollBlockerAlerts","blockers","onMultipleViewClick","multipleViewLabel","className","useI18n","t","useTranslation","Alert","Button","Text","UnorderedList","useComponentContext","hasMultipleBlockers","enrichedBlockers","blocker","translationKeys","getBlockerTranslationKeys","title","l","description","helpText","singleBlocker","jsx","jsxs","Flex","listItems","defaultMultipleLabel"],"mappings":";;;;;;AAkBO,SAASA,EAAqB;AAAA,EACnC,UAAAC;AAAA,EACA,qBAAAC;AAAA,EACA,mBAAAC;AAAA,EACA,WAAAC;AACF,GAA8B;AAC5B,EAAAC,EAAQ,wBAAwB;AAChC,QAAM,EAAE,GAAAC,EAAA,IAAMC,EAAe,wBAAwB,GAC/C,EAAE,OAAAC,GAAO,QAAAC,GAAQ,MAAAC,GAAM,eAAAC,EAAA,IAAkBC,EAAA;AAG/C,MAAIX,EAAS,WAAW;AACtB,WAAO;AAGT,QAAMY,IAAsBZ,EAAS,SAAS,GAExCa,IAAmBb,EAAS,IAAI,CAAAc,MAAW;AAC/C,UAAMC,IAAkBC,EAA0BF,EAAQ,GAAG,GAEvDG,IAAQZ,EAAEU,EAAgB,UAAU;AAAA,MACxC,cAAcD,EAAQ,IAAI,QAAQ,MAAM,GAAG,EAAE,QAAQ,SAAS,CAAAI,MAAKA,EAAE,YAAA,CAAa;AAAA,IAAA,CACnF,GACKC,IAAcd,EAAEU,EAAgB,gBAAgB;AAAA,MACpD,cAAcD,EAAQ,WAAWT,EAAE,2BAA2B;AAAA,IAAA,CAC/D,GACKe,IAAWf,EAAEU,EAAgB,aAAa,EAAE,cAAcV,EAAE,wBAAwB,GAAG;AAE7F,WAAO;AAAA,MACL,GAAGS;AAAA,MACH,OAAAG;AAAA,MACA,aAAAE;AAAA,MACA,UAAAC;AAAA,IAAA;AAAA,EAEJ,CAAC,GAEKC,IAAgBR,EAAiB,CAAC;AAExC,MAAI,CAACD,KAAuBS;AAC1B,WACE,gBAAAC,EAACf,GAAA,EAAM,QAAO,SAAQ,OAAOc,EAAc,OAAO,WAAAlB,GAChD,UAAA,gBAAAoB,EAACC,GAAA,EAAK,eAAc,UAAS,KAAK,GAChC,UAAA;AAAA,MAAA,gBAAAF,EAACb,GAAA,EAAM,YAAc,YAAA,CAAY;AAAA,MAChCY,EAAc,YAAYA,EAAc,aAAaA,EAAc,eAClE,gBAAAC,EAACb,GAAA,EAAK,SAAQ,cAAa,MAAK,MAC7B,YAAc,SAAA,CACjB;AAAA,IAAA,EAAA,CAEJ,EAAA,CACF;AAIJ,QAAMgB,IAAYZ,EAAiB,IAAI,CAAAC,MAAWA,EAAQ,KAAK,GACzDY,IAAuBxB,KAAqBG,EAAE,iBAAiB;AAErE,SACE,gBAAAiB;AAAA,IAACf;AAAA,IAAA;AAAA,MACC,QAAO;AAAA,MACP,OAAOF,EAAE,uBAAuB,EAAE,OAAOL,EAAS,QAAQ;AAAA,MAC1D,WAAAG;AAAA,MAEA,UAAA,gBAAAoB,EAACC,GAAA,EAAK,eAAc,UAAS,KAAK,IAChC,UAAA;AAAA,QAAA,gBAAAF,EAACZ,GAAA,EAAc,OAAOe,EAAA,CAAW;AAAA,QAChCxB,KACC,gBAAAqB,EAAC,OAAA,EACC,UAAA,gBAAAA,EAACd,GAAA,EAAO,SAAQ,aAAY,SAASP,GAAqB,OAAOyB,GAC9D,UAAAA,EAAA,CACH,EAAA,CACF;AAAA,MAAA,EAAA,CAEJ;AAAA,IAAA;AAAA,EAAA;AAGN;"}
1
+ {"version":3,"file":"PayrollBlockerAlerts.js","sources":["../../../../../src/components/Payroll/PayrollBlocker/components/PayrollBlockerAlerts.tsx"],"sourcesContent":["import { useTranslation } from 'react-i18next'\nimport { type ApiPayrollBlocker, getBlockerTranslationKeys } from '../payrollHelpers'\nimport { useComponentContext } from '@/contexts/ComponentAdapter/useComponentContext'\nimport { Flex } from '@/components/Common'\nimport { useI18n } from '@/i18n'\n\ninterface PayrollBlockerAlertsProps {\n blockers: ApiPayrollBlocker[]\n className?: string\n onMultipleViewClick?: () => void\n multipleViewLabel?: string\n}\n\n/**\n * PayrollBlockerAlerts - Alert-style component for inline blocker display\n * Shows single blocker as alert, or multiple blockers as summary with \"Review\" button\n * Returns null for empty blocker arrays\n */\nexport function PayrollBlockerAlerts({\n blockers,\n onMultipleViewClick,\n multipleViewLabel,\n className,\n}: PayrollBlockerAlertsProps) {\n useI18n('Payroll.PayrollBlocker')\n const { t } = useTranslation('Payroll.PayrollBlocker')\n const { Alert, Button, Text, UnorderedList } = useComponentContext()\n\n // Return null for empty blockers array\n if (blockers.length === 0) {\n return null\n }\n\n const hasMultipleBlockers = blockers.length > 1\n\n const enrichedBlockers = blockers.map(blocker => {\n const translationKeys = getBlockerTranslationKeys(blocker.key)\n\n const title = t(translationKeys.titleKey, {\n defaultValue: blocker.key.replace(/_/g, ' ').replace(/\\b\\w/g, l => l.toUpperCase()),\n })\n const description = t(translationKeys.descriptionKey, {\n defaultValue: blocker.message || t('defaultBlockerDescription'),\n })\n const helpText = t(translationKeys.helpTextKey, { defaultValue: t('defaultBlockerHelp') })\n\n return {\n ...blocker,\n title,\n description,\n helpText,\n }\n })\n\n const singleBlocker = enrichedBlockers[0]\n\n if (!hasMultipleBlockers && singleBlocker) {\n return (\n <Alert status=\"error\" label={singleBlocker.title} className={className}>\n <Flex flexDirection=\"column\" gap={8}>\n <Text>{singleBlocker.description}</Text>\n {singleBlocker.helpText && singleBlocker.helpText !== singleBlocker.description && (\n <Text variant=\"supporting\" size=\"sm\">\n {singleBlocker.helpText}\n </Text>\n )}\n </Flex>\n </Alert>\n )\n }\n\n const listItems = enrichedBlockers.map(blocker => blocker.title)\n const defaultMultipleLabel = multipleViewLabel || t('viewAllBlockers')\n\n return (\n <Alert\n status=\"error\"\n label={t('multipleIssuesTitle', { count: blockers.length })}\n className={className}\n >\n <Flex flexDirection=\"column\" gap={16}>\n <UnorderedList items={listItems} />\n {onMultipleViewClick && (\n <div>\n <Button variant=\"secondary\" onClick={onMultipleViewClick} title={defaultMultipleLabel}>\n {defaultMultipleLabel}\n </Button>\n </div>\n )}\n </Flex>\n </Alert>\n )\n}\n"],"names":["PayrollBlockerAlerts","blockers","onMultipleViewClick","multipleViewLabel","className","useI18n","t","useTranslation","Alert","Button","Text","UnorderedList","useComponentContext","hasMultipleBlockers","enrichedBlockers","blocker","translationKeys","getBlockerTranslationKeys","title","l","description","helpText","singleBlocker","jsx","jsxs","Flex","listItems","defaultMultipleLabel"],"mappings":";;;;;;AAkBO,SAASA,EAAqB;AAAA,EACnC,UAAAC;AAAA,EACA,qBAAAC;AAAA,EACA,mBAAAC;AAAA,EACA,WAAAC;AACF,GAA8B;AAC5B,EAAAC,EAAQ,wBAAwB;AAChC,QAAM,EAAE,GAAAC,EAAA,IAAMC,EAAe,wBAAwB,GAC/C,EAAE,OAAAC,GAAO,QAAAC,GAAQ,MAAAC,GAAM,eAAAC,EAAA,IAAkBC,EAAA;AAG/C,MAAIX,EAAS,WAAW;AACtB,WAAO;AAGT,QAAMY,IAAsBZ,EAAS,SAAS,GAExCa,IAAmBb,EAAS,IAAI,CAAAc,MAAW;AAC/C,UAAMC,IAAkBC,EAA0BF,EAAQ,GAAG,GAEvDG,IAAQZ,EAAEU,EAAgB,UAAU;AAAA,MACxC,cAAcD,EAAQ,IAAI,QAAQ,MAAM,GAAG,EAAE,QAAQ,SAAS,CAAAI,MAAKA,EAAE,YAAA,CAAa;AAAA,IAAA,CACnF,GACKC,IAAcd,EAAEU,EAAgB,gBAAgB;AAAA,MACpD,cAAcD,EAAQ,WAAWT,EAAE,2BAA2B;AAAA,IAAA,CAC/D,GACKe,IAAWf,EAAEU,EAAgB,aAAa,EAAE,cAAcV,EAAE,oBAAoB,GAAG;AAEzF,WAAO;AAAA,MACL,GAAGS;AAAA,MACH,OAAAG;AAAA,MACA,aAAAE;AAAA,MACA,UAAAC;AAAA,IAAA;AAAA,EAEJ,CAAC,GAEKC,IAAgBR,EAAiB,CAAC;AAExC,MAAI,CAACD,KAAuBS;AAC1B,WACE,gBAAAC,EAACf,GAAA,EAAM,QAAO,SAAQ,OAAOc,EAAc,OAAO,WAAAlB,GAChD,UAAA,gBAAAoB,EAACC,GAAA,EAAK,eAAc,UAAS,KAAK,GAChC,UAAA;AAAA,MAAA,gBAAAF,EAACb,GAAA,EAAM,YAAc,YAAA,CAAY;AAAA,MAChCY,EAAc,YAAYA,EAAc,aAAaA,EAAc,eAClE,gBAAAC,EAACb,GAAA,EAAK,SAAQ,cAAa,MAAK,MAC7B,YAAc,SAAA,CACjB;AAAA,IAAA,EAAA,CAEJ,EAAA,CACF;AAIJ,QAAMgB,IAAYZ,EAAiB,IAAI,CAAAC,MAAWA,EAAQ,KAAK,GACzDY,IAAuBxB,KAAqBG,EAAE,iBAAiB;AAErE,SACE,gBAAAiB;AAAA,IAACf;AAAA,IAAA;AAAA,MACC,QAAO;AAAA,MACP,OAAOF,EAAE,uBAAuB,EAAE,OAAOL,EAAS,QAAQ;AAAA,MAC1D,WAAAG;AAAA,MAEA,UAAA,gBAAAoB,EAACC,GAAA,EAAK,eAAc,UAAS,KAAK,IAChC,UAAA;AAAA,QAAA,gBAAAF,EAACZ,GAAA,EAAc,OAAOe,EAAA,CAAW;AAAA,QAChCxB,KACC,gBAAAqB,EAAC,OAAA,EACC,UAAA,gBAAAA,EAACd,GAAA,EAAO,SAAQ,aAAY,SAASP,GAAqB,OAAOyB,GAC9D,UAAAA,EAAA,CACH,EAAA,CACF;AAAA,MAAA,EAAA,CAEJ;AAAA,IAAA;AAAA,EAAA;AAGN;"}
@@ -25,7 +25,7 @@ function b(r) {
25
25
  return {
26
26
  titleKey: `PayrollBlocker:blockers.${r}.title`,
27
27
  descriptionKey: `PayrollBlocker:blockers.${r}.description`,
28
- helpTextKey: `PayrollBlocker:blockers.${r}.helpText`,
28
+ helpTextKey: `PayrollBlocker:blockers.${r}.help`,
29
29
  defaultActionKey: `PayrollBlocker:blockers.${r}.defaultAction`
30
30
  };
31
31
  }
@@ -1 +1 @@
1
- {"version":3,"file":"payrollHelpers.js","sources":["../../../../src/components/Payroll/PayrollBlocker/payrollHelpers.ts"],"sourcesContent":["import { PayrollBlockersError } from '@gusto/embedded-api/models/errors/payrollblockerserror'\nimport { UnprocessableEntityErrorObject1 } from '@gusto/embedded-api/models/errors/unprocessableentityerrorobject1'\n\nfunction hasMetadataKey(metadata: unknown): metadata is { key: string } {\n return (\n typeof metadata === 'object' &&\n metadata !== null &&\n 'key' in metadata &&\n typeof (metadata as { key: unknown }).key === 'string'\n )\n}\n\nexport interface ApiPayrollBlocker {\n key: string\n message?: string\n}\n\nexport function isPayrollBlockersError(error: unknown): error is PayrollBlockersError {\n return error instanceof PayrollBlockersError\n}\n\nexport function isUnprocessableEntityWithPayrollBlockers(\n error: unknown,\n): error is UnprocessableEntityErrorObject1 {\n return (\n error instanceof UnprocessableEntityErrorObject1 &&\n Array.isArray(error.errors) &&\n error.errors.some(err => err.category === 'payroll_blocker')\n )\n}\n\nexport function parsePayrollBlockersFromError(error: unknown): ApiPayrollBlocker[] {\n // Handle PayrollBlockersError (dedicated blocker error type)\n if (isPayrollBlockersError(error)) {\n if (!error.errors || error.errors.length === 0) {\n return []\n }\n\n const blockers = error.errors.map(err => {\n const key = hasMetadataKey(err.metadata) ? err.metadata.key : err.errorKey || 'unknown'\n\n return { key, message: err.message }\n })\n\n return blockers\n }\n\n // Handle UnprocessableEntityErrorObject1 with payroll blockers\n if (isUnprocessableEntityWithPayrollBlockers(error)) {\n const blockers = error.errors\n .filter(err => err.category === 'payroll_blocker')\n .map(err => {\n const key = hasMetadataKey(err.metadata) ? err.metadata.key : err.errorKey || 'unknown'\n\n return { key, message: err.message }\n })\n\n return blockers\n }\n\n return []\n}\n\ntype PayrollBlockerError = PayrollBlockersError | UnprocessableEntityErrorObject1\n\nconst hasPayrollBlockers = (error: unknown): error is PayrollBlockerError => {\n if (error instanceof PayrollBlockersError) {\n return true\n }\n if (error instanceof UnprocessableEntityErrorObject1) {\n return (\n Array.isArray(error.errors) && error.errors.some(err => err.category === 'payroll_blocker')\n )\n }\n return false\n}\n\nexport interface PayrollSubmitResult {\n success: boolean\n blockers: ApiPayrollBlocker[]\n}\n\n/**\n * Direct submit handler for payroll operations that handles payroll blockers\n * Returns blockers if found, otherwise throws the error for caller to handle\n */\nexport const payrollSubmitHandler = async (\n payrollHandler: () => Promise<void>,\n): Promise<PayrollSubmitResult> => {\n try {\n await payrollHandler()\n return { success: true, blockers: [] }\n } catch (error: unknown) {\n if (hasPayrollBlockers(error)) {\n const blockers = parsePayrollBlockersFromError(error)\n return { success: false, blockers }\n }\n\n // For non-payroll errors, re-throw\n throw error\n }\n}\n\n/**\n * Get translation keys for a blocker - use these in components with useTranslation\n */\nexport function getBlockerTranslationKeys(key: string) {\n return {\n titleKey: `PayrollBlocker:blockers.${key}.title`,\n descriptionKey: `PayrollBlocker:blockers.${key}.description`,\n helpTextKey: `PayrollBlocker:blockers.${key}.helpText`,\n defaultActionKey: `PayrollBlocker:blockers.${key}.defaultAction`,\n }\n}\n"],"names":["hasMetadataKey","metadata","isPayrollBlockersError","error","PayrollBlockersError","isUnprocessableEntityWithPayrollBlockers","UnprocessableEntityErrorObject1","err","parsePayrollBlockersFromError","hasPayrollBlockers","payrollSubmitHandler","payrollHandler","getBlockerTranslationKeys","key"],"mappings":";;AAGA,SAASA,EAAeC,GAAgD;AACtE,SACE,OAAOA,KAAa,YACpBA,MAAa,QACb,SAASA,KACT,OAAQA,EAA8B,OAAQ;AAElD;AAOO,SAASC,EAAuBC,GAA+C;AACpF,SAAOA,aAAiBC;AAC1B;AAEO,SAASC,EACdF,GAC0C;AAC1C,SACEA,aAAiBG,KACjB,MAAM,QAAQH,EAAM,MAAM,KAC1BA,EAAM,OAAO,KAAK,CAAAI,MAAOA,EAAI,aAAa,iBAAiB;AAE/D;AAEO,SAASC,EAA8BL,GAAqC;AAEjF,SAAID,EAAuBC,CAAK,IAC1B,CAACA,EAAM,UAAUA,EAAM,OAAO,WAAW,IACpC,CAAA,IAGQA,EAAM,OAAO,IAAI,CAAAI,OAGzB,EAAE,KAFGP,EAAeO,EAAI,QAAQ,IAAIA,EAAI,SAAS,MAAMA,EAAI,YAAY,WAEhE,SAASA,EAAI,QAAA,EAC5B,IAMCF,EAAyCF,CAAK,IAC/BA,EAAM,OACpB,OAAO,CAAAI,MAAOA,EAAI,aAAa,iBAAiB,EAChD,IAAI,CAAAA,OAGI,EAAE,KAFGP,EAAeO,EAAI,QAAQ,IAAIA,EAAI,SAAS,MAAMA,EAAI,YAAY,WAEhE,SAASA,EAAI,QAAA,EAC5B,IAKE,CAAA;AACT;AAIA,MAAME,IAAqB,CAACN,MACtBA,aAAiBC,IACZ,KAELD,aAAiBG,IAEjB,MAAM,QAAQH,EAAM,MAAM,KAAKA,EAAM,OAAO,KAAK,CAAAI,MAAOA,EAAI,aAAa,iBAAiB,IAGvF,IAYIG,IAAuB,OAClCC,MACiC;AACjC,MAAI;AACF,iBAAMA,EAAA,GACC,EAAE,SAAS,IAAM,UAAU,CAAA,EAAC;AAAA,EACrC,SAASR,GAAgB;AACvB,QAAIM,EAAmBN,CAAK;AAE1B,aAAO,EAAE,SAAS,IAAO,UADRK,EAA8BL,CAAK,EAC3B;AAI3B,UAAMA;AAAA,EACR;AACF;AAKO,SAASS,EAA0BC,GAAa;AACrD,SAAO;AAAA,IACL,UAAU,2BAA2BA,CAAG;AAAA,IACxC,gBAAgB,2BAA2BA,CAAG;AAAA,IAC9C,aAAa,2BAA2BA,CAAG;AAAA,IAC3C,kBAAkB,2BAA2BA,CAAG;AAAA,EAAA;AAEpD;"}
1
+ {"version":3,"file":"payrollHelpers.js","sources":["../../../../src/components/Payroll/PayrollBlocker/payrollHelpers.ts"],"sourcesContent":["import { PayrollBlockersError } from '@gusto/embedded-api/models/errors/payrollblockerserror'\nimport { UnprocessableEntityErrorObject1 } from '@gusto/embedded-api/models/errors/unprocessableentityerrorobject1'\n\nfunction hasMetadataKey(metadata: unknown): metadata is { key: string } {\n return (\n typeof metadata === 'object' &&\n metadata !== null &&\n 'key' in metadata &&\n typeof (metadata as { key: unknown }).key === 'string'\n )\n}\n\nexport interface ApiPayrollBlocker {\n key: string\n message?: string\n}\n\nexport function isPayrollBlockersError(error: unknown): error is PayrollBlockersError {\n return error instanceof PayrollBlockersError\n}\n\nexport function isUnprocessableEntityWithPayrollBlockers(\n error: unknown,\n): error is UnprocessableEntityErrorObject1 {\n return (\n error instanceof UnprocessableEntityErrorObject1 &&\n Array.isArray(error.errors) &&\n error.errors.some(err => err.category === 'payroll_blocker')\n )\n}\n\nexport function parsePayrollBlockersFromError(error: unknown): ApiPayrollBlocker[] {\n // Handle PayrollBlockersError (dedicated blocker error type)\n if (isPayrollBlockersError(error)) {\n if (!error.errors || error.errors.length === 0) {\n return []\n }\n\n const blockers = error.errors.map(err => {\n const key = hasMetadataKey(err.metadata) ? err.metadata.key : err.errorKey || 'unknown'\n\n return { key, message: err.message }\n })\n\n return blockers\n }\n\n // Handle UnprocessableEntityErrorObject1 with payroll blockers\n if (isUnprocessableEntityWithPayrollBlockers(error)) {\n const blockers = error.errors\n .filter(err => err.category === 'payroll_blocker')\n .map(err => {\n const key = hasMetadataKey(err.metadata) ? err.metadata.key : err.errorKey || 'unknown'\n\n return { key, message: err.message }\n })\n\n return blockers\n }\n\n return []\n}\n\ntype PayrollBlockerError = PayrollBlockersError | UnprocessableEntityErrorObject1\n\nconst hasPayrollBlockers = (error: unknown): error is PayrollBlockerError => {\n if (error instanceof PayrollBlockersError) {\n return true\n }\n if (error instanceof UnprocessableEntityErrorObject1) {\n return (\n Array.isArray(error.errors) && error.errors.some(err => err.category === 'payroll_blocker')\n )\n }\n return false\n}\n\nexport interface PayrollSubmitResult {\n success: boolean\n blockers: ApiPayrollBlocker[]\n}\n\n/**\n * Direct submit handler for payroll operations that handles payroll blockers\n * Returns blockers if found, otherwise throws the error for caller to handle\n */\nexport const payrollSubmitHandler = async (\n payrollHandler: () => Promise<void>,\n): Promise<PayrollSubmitResult> => {\n try {\n await payrollHandler()\n return { success: true, blockers: [] }\n } catch (error: unknown) {\n if (hasPayrollBlockers(error)) {\n const blockers = parsePayrollBlockersFromError(error)\n return { success: false, blockers }\n }\n\n // For non-payroll errors, re-throw\n throw error\n }\n}\n\n/**\n * Get translation keys for a blocker - use these in components with useTranslation\n */\nexport function getBlockerTranslationKeys(key: string) {\n return {\n titleKey: `PayrollBlocker:blockers.${key}.title`,\n descriptionKey: `PayrollBlocker:blockers.${key}.description`,\n helpTextKey: `PayrollBlocker:blockers.${key}.help`,\n defaultActionKey: `PayrollBlocker:blockers.${key}.defaultAction`,\n }\n}\n"],"names":["hasMetadataKey","metadata","isPayrollBlockersError","error","PayrollBlockersError","isUnprocessableEntityWithPayrollBlockers","UnprocessableEntityErrorObject1","err","parsePayrollBlockersFromError","hasPayrollBlockers","payrollSubmitHandler","payrollHandler","getBlockerTranslationKeys","key"],"mappings":";;AAGA,SAASA,EAAeC,GAAgD;AACtE,SACE,OAAOA,KAAa,YACpBA,MAAa,QACb,SAASA,KACT,OAAQA,EAA8B,OAAQ;AAElD;AAOO,SAASC,EAAuBC,GAA+C;AACpF,SAAOA,aAAiBC;AAC1B;AAEO,SAASC,EACdF,GAC0C;AAC1C,SACEA,aAAiBG,KACjB,MAAM,QAAQH,EAAM,MAAM,KAC1BA,EAAM,OAAO,KAAK,CAAAI,MAAOA,EAAI,aAAa,iBAAiB;AAE/D;AAEO,SAASC,EAA8BL,GAAqC;AAEjF,SAAID,EAAuBC,CAAK,IAC1B,CAACA,EAAM,UAAUA,EAAM,OAAO,WAAW,IACpC,CAAA,IAGQA,EAAM,OAAO,IAAI,CAAAI,OAGzB,EAAE,KAFGP,EAAeO,EAAI,QAAQ,IAAIA,EAAI,SAAS,MAAMA,EAAI,YAAY,WAEhE,SAASA,EAAI,QAAA,EAC5B,IAMCF,EAAyCF,CAAK,IAC/BA,EAAM,OACpB,OAAO,CAAAI,MAAOA,EAAI,aAAa,iBAAiB,EAChD,IAAI,CAAAA,OAGI,EAAE,KAFGP,EAAeO,EAAI,QAAQ,IAAIA,EAAI,SAAS,MAAMA,EAAI,YAAY,WAEhE,SAASA,EAAI,QAAA,EAC5B,IAKE,CAAA;AACT;AAIA,MAAME,IAAqB,CAACN,MACtBA,aAAiBC,IACZ,KAELD,aAAiBG,IAEjB,MAAM,QAAQH,EAAM,MAAM,KAAKA,EAAM,OAAO,KAAK,CAAAI,MAAOA,EAAI,aAAa,iBAAiB,IAGvF,IAYIG,IAAuB,OAClCC,MACiC;AACjC,MAAI;AACF,iBAAMA,EAAA,GACC,EAAE,SAAS,IAAM,UAAU,CAAA,EAAC;AAAA,EACrC,SAASR,GAAgB;AACvB,QAAIM,EAAmBN,CAAK;AAE1B,aAAO,EAAE,SAAS,IAAO,UADRK,EAA8BL,CAAK,EAC3B;AAI3B,UAAMA;AAAA,EACR;AACF;AAKO,SAASS,EAA0BC,GAAa;AACrD,SAAO;AAAA,IACL,UAAU,2BAA2BA,CAAG;AAAA,IACxC,gBAAgB,2BAA2BA,CAAG;AAAA,IAC9C,aAAa,2BAA2BA,CAAG;AAAA,IAC3C,kBAAkB,2BAA2BA,CAAG;AAAA,EAAA;AAEpD;"}
@@ -1,9 +1,9 @@
1
- import { jsx as g } from "react/jsx-runtime";
1
+ import { jsx as f } from "react/jsx-runtime";
2
2
  import { useState as p, useMemo as V, useEffect as G } from "react";
3
3
  import { useEmployeesListSuspense as K } from "@gusto/embedded-api/react-query/employeesList";
4
4
  import { usePayrollsGetSuspense as j } from "@gusto/embedded-api/react-query/payrollsGet";
5
5
  import { usePayrollsCalculateMutation as v } from "@gusto/embedded-api/react-query/payrollsCalculate";
6
- import { PayrollProcessingRequestStatus as f } from "@gusto/embedded-api/models/components/payrollprocessingrequest";
6
+ import { PayrollProcessingRequestStatus as h } from "@gusto/embedded-api/models/components/payrollprocessingrequest";
7
7
  import { useTranslation as z } from "react-i18next";
8
8
  import { usePayrollsUpdateMutation as J } from "@gusto/embedded-api/react-query/payrollsUpdate";
9
9
  import { usePreparedPayrollData as Q } from "../usePreparedPayrollData.js";
@@ -14,46 +14,46 @@ import { componentEvents as r } from "../../../shared/constants.js";
14
14
  import { useComponentDictionary as ee, useI18n as te } from "../../../i18n/I18n.js";
15
15
  import { useBase as ae } from "../../Base/useBase.js";
16
16
  import { useDateFormatter as oe } from "../../../hooks/useDateFormatter.js";
17
- const se = (t) => t?.status === f.Calculating, re = (t) => t?.status === f.CalculateSuccess;
17
+ const se = (t) => t?.status === h.Calculating, re = (t) => t?.status === h.CalculateSuccess;
18
18
  function Ae(t) {
19
- return /* @__PURE__ */ g($, { ...t, children: /* @__PURE__ */ g(le, { ...t, children: t.children }) });
19
+ return /* @__PURE__ */ f($, { ...t, children: /* @__PURE__ */ f(le, { ...t, children: t.children }) });
20
20
  }
21
21
  const le = ({
22
22
  onEvent: t,
23
23
  companyId: l,
24
24
  payrollId: o,
25
- dictionary: E,
26
- alerts: R
25
+ dictionary: R,
26
+ alerts: w
27
27
  }) => {
28
- ee("Payroll.PayrollConfiguration", E), te("Payroll.PayrollConfiguration");
29
- const { t: n } = z("Payroll.PayrollConfiguration"), { baseSubmitHandler: h } = ae(), C = oe(), w = 10, [L, c] = p(1), [S, D] = p(w), [s, u] = p(!1), [_, P] = p([]), { data: m, isFetching: N } = K({
28
+ ee("Payroll.PayrollConfiguration", R), te("Payroll.PayrollConfiguration");
29
+ const { t: i } = z("Payroll.PayrollConfiguration"), { baseSubmitHandler: C } = ae(), L = oe(), D = 10, [S, n] = p(1), [E, _] = p(D), [s, c] = p(!1), [N, P] = p([]), { data: u, isFetching: A } = K({
30
30
  companyId: l,
31
31
  payrollUuid: o,
32
32
  // get back list of employees to specific payroll
33
- per: S,
34
- page: L,
33
+ per: E,
34
+ page: S,
35
35
  sortBy: "name"
36
36
  // sort alphanumeric by employee last_names
37
- }), A = V(() => m.showEmployees?.map((e) => e.uuid) || [], [m.showEmployees]), y = Number(m.httpMeta.response.headers.get("x-total-pages") ?? 1), U = {
38
- currentPage: L,
37
+ }), U = V(() => u.showEmployees?.map((e) => e.uuid) || [], [u.showEmployees]), y = Number(u.httpMeta.response.headers.get("x-total-pages") ?? 1), O = {
38
+ currentPage: S,
39
39
  handleFirstPage: () => {
40
- c(1);
40
+ n(1);
41
41
  },
42
42
  handlePreviousPage: () => {
43
- c((e) => Math.max(e - 1, 1));
43
+ n((e) => Math.max(e - 1, 1));
44
44
  },
45
45
  handleNextPage: () => {
46
- c((e) => Math.min(e + 1, y));
46
+ n((e) => Math.min(e + 1, y));
47
47
  },
48
48
  handleLastPage: () => {
49
- c(y);
49
+ n(y);
50
50
  },
51
51
  handleItemsPerPageChange: (e) => {
52
- D(e);
52
+ _(e);
53
53
  },
54
54
  totalPages: y,
55
- isFetching: N,
56
- itemsPerPage: S
55
+ isFetching: A,
56
+ itemsPerPage: E
57
57
  }, { data: a } = j(
58
58
  {
59
59
  companyId: l,
@@ -61,102 +61,103 @@ const le = ({
61
61
  include: ["taxes", "benefits", "deductions"]
62
62
  },
63
63
  { refetchInterval: s ? 5e3 : !1 }
64
- ), { mutateAsync: O } = v(), { mutateAsync: x, isPending: F } = J(), {
64
+ ), { mutateAsync: x } = v(), { mutateAsync: b, isPending: F } = J(), {
65
65
  preparedPayroll: d,
66
66
  paySchedule: Y,
67
- isLoading: b,
68
- handlePreparePayroll: B
67
+ isLoading: B,
68
+ handlePreparePayroll: k
69
69
  } = Q({
70
70
  companyId: l,
71
71
  payrollId: o,
72
- employeeUuids: A,
72
+ employeeUuids: U,
73
73
  sortBy: "last_name"
74
74
  // sort alphanumeric by employee last_names to match employees GET
75
- }), k = async () => {
76
- P([]), await h({}, async () => {
75
+ }), q = async () => {
76
+ P([]), await C({}, async () => {
77
77
  const e = await X(async () => {
78
- await O({
78
+ await x({
79
79
  request: {
80
80
  companyId: l,
81
81
  payrollId: o
82
82
  }
83
- }), u(!0);
83
+ }), c(!0);
84
84
  });
85
85
  !e.success && e.blockers.length > 0 && P(e.blockers);
86
86
  });
87
- }, q = (e) => {
87
+ }, M = (e) => {
88
88
  t(r.RUN_PAYROLL_EMPLOYEE_EDIT, {
89
89
  employeeId: e.uuid,
90
90
  firstName: e.firstName,
91
91
  lastName: e.lastName
92
92
  });
93
- }, M = ({
93
+ }, T = ({
94
94
  paymentMethod: e,
95
- ...i
95
+ reimbursements: g,
96
+ ...m
96
97
  }) => ({
97
- ...i,
98
+ ...m,
98
99
  ...e && e !== "Historical" ? { paymentMethod: e } : {},
99
- memo: i.memo || void 0
100
- }), T = async (e) => {
100
+ memo: m.memo || void 0
101
+ }), I = async (e) => {
101
102
  t(r.RUN_PAYROLL_EMPLOYEE_SKIP, {
102
103
  employeeId: e.employeeUuid
103
- }), await h({}, async () => {
104
- const i = M(e), H = await x({
104
+ }), await C({}, async () => {
105
+ const g = T(e), m = await b({
105
106
  request: {
106
107
  companyId: l,
107
108
  payrollId: o,
108
109
  payrollUpdate: {
109
110
  employeeCompensations: [
110
- { ...i, excluded: !i.excluded }
111
+ { ...g, excluded: !g.excluded }
111
112
  ]
112
113
  }
113
114
  }
114
115
  });
115
116
  t(r.RUN_PAYROLL_EMPLOYEE_SAVED, {
116
- payrollPrepared: H.payrollPrepared
117
- }), await B();
117
+ payrollPrepared: m.payrollPrepared
118
+ }), await k();
118
119
  });
119
- }, I = () => {
120
+ }, W = () => {
120
121
  t(r.RUN_PAYROLL_BLOCKERS_VIEW_ALL);
121
122
  };
122
123
  G(() => {
123
- se(a.payrollShow?.processingRequest) && !s && u(!0), s && re(a.payrollShow?.processingRequest) && (t(r.RUN_PAYROLL_CALCULATED, {
124
+ se(a.payrollShow?.processingRequest) && !s && c(!0), s && re(a.payrollShow?.processingRequest) && (t(r.RUN_PAYROLL_CALCULATED, {
124
125
  payrollId: o,
125
- alert: { type: "success", title: n("alerts.progressSaved") },
126
+ alert: { type: "success", title: i("alerts.progressSaved") },
126
127
  payPeriod: a.payrollShow?.payPeriod
127
- }), P([]), u(!1)), s && a.payrollShow?.processingRequest?.status === f.ProcessingFailed && (t(r.RUN_PAYROLL_PROCESSING_FAILED), u(!1));
128
+ }), P([]), c(!1)), s && a.payrollShow?.processingRequest?.status === h.ProcessingFailed && (t(r.RUN_PAYROLL_PROCESSING_FAILED), c(!1));
128
129
  }, [
129
130
  a.payrollShow?.processingRequest,
130
131
  s,
131
132
  t,
132
- n,
133
+ i,
133
134
  o,
134
135
  a.payrollShow?.calculatedAt
135
136
  ]);
136
- const W = a.payrollShow ? {
137
- label: n("alerts.directDepositDeadline", {
138
- payDate: C.formatShortWithWeekday(a.payrollShow.checkDate),
139
- ...C.formatWithTime(a.payrollShow.payrollDeadline)
137
+ const H = a.payrollShow ? {
138
+ label: i("alerts.directDepositDeadline", {
139
+ payDate: L.formatShortWithWeekday(a.payrollShow.checkDate),
140
+ ...L.formatWithTime(a.payrollShow.payrollDeadline)
140
141
  }),
141
- content: n("alerts.directDepositDeadlineText")
142
+ content: i("alerts.directDepositDeadlineText")
142
143
  } : void 0;
143
- return /* @__PURE__ */ g(
144
+ return /* @__PURE__ */ f(
144
145
  Z,
145
146
  {
146
- onCalculatePayroll: k,
147
- onEdit: q,
148
- onToggleExclude: T,
149
- onViewBlockers: I,
147
+ onCalculatePayroll: q,
148
+ onEdit: M,
149
+ onToggleExclude: I,
150
+ onViewBlockers: W,
150
151
  employeeCompensations: d?.employeeCompensations || [],
151
- employeeDetails: m.showEmployees || [],
152
+ employeeDetails: u.showEmployees || [],
152
153
  payPeriod: d?.payPeriod,
153
154
  paySchedule: Y,
154
155
  isOffCycle: d?.offCycle,
155
- alerts: R,
156
- payrollDeadlineNotice: W,
157
- isPending: s || b || F,
158
- payrollBlockers: _,
159
- pagination: U
156
+ alerts: w,
157
+ payrollDeadlineNotice: H,
158
+ isPending: s || B || F,
159
+ payrollBlockers: N,
160
+ pagination: O
160
161
  }
161
162
  );
162
163
  };
@@ -1 +1 @@
1
- {"version":3,"file":"PayrollConfiguration.js","sources":["../../../../src/components/Payroll/PayrollConfiguration/PayrollConfiguration.tsx"],"sourcesContent":["import { useEffect, useMemo, useState, type ReactNode } from 'react'\nimport { useEmployeesListSuspense } from '@gusto/embedded-api/react-query/employeesList'\nimport { usePayrollsGetSuspense } from '@gusto/embedded-api/react-query/payrollsGet'\nimport { usePayrollsCalculateMutation } from '@gusto/embedded-api/react-query/payrollsCalculate'\nimport type { Employee } from '@gusto/embedded-api/models/components/employee'\nimport type { PayrollProcessingRequest } from '@gusto/embedded-api/models/components/payrollprocessingrequest'\nimport { PayrollProcessingRequestStatus } from '@gusto/embedded-api/models/components/payrollprocessingrequest'\nimport { useTranslation } from 'react-i18next'\nimport { usePayrollsUpdateMutation } from '@gusto/embedded-api/react-query/payrollsUpdate'\nimport type { PayrollEmployeeCompensationsType } from '@gusto/embedded-api/models/components/payrollemployeecompensationstype'\nimport type { PayrollUpdateEmployeeCompensations } from '@gusto/embedded-api/models/components/payrollupdate'\nimport { usePreparedPayrollData } from '../usePreparedPayrollData'\nimport { payrollSubmitHandler, type ApiPayrollBlocker } from '../PayrollBlocker/payrollHelpers'\nimport { PayrollConfigurationPresentation } from './PayrollConfigurationPresentation'\nimport type { BaseComponentInterface } from '@/components/Base/Base'\nimport { BaseComponent } from '@/components/Base/Base'\nimport { componentEvents } from '@/shared/constants'\nimport { useComponentDictionary, useI18n } from '@/i18n'\nimport { useBase } from '@/components/Base'\nimport type { PaginationItemsPerPage } from '@/components/Common/PaginationControl/PaginationControlTypes'\nimport { useDateFormatter } from '@/hooks/useDateFormatter'\n\nconst isCalculating = (processingRequest?: PayrollProcessingRequest | null) =>\n processingRequest?.status === PayrollProcessingRequestStatus.Calculating\nconst isCalculated = (processingRequest?: PayrollProcessingRequest | null) =>\n processingRequest?.status === PayrollProcessingRequestStatus.CalculateSuccess\n\ninterface PayrollConfigurationProps extends BaseComponentInterface<'Payroll.PayrollConfiguration'> {\n companyId: string\n payrollId: string\n alerts?: ReactNode\n}\n\nexport function PayrollConfiguration(props: PayrollConfigurationProps & BaseComponentInterface) {\n return (\n <BaseComponent {...props}>\n <Root {...props}>{props.children}</Root>\n </BaseComponent>\n )\n}\n\nexport const Root = ({\n onEvent,\n companyId,\n payrollId,\n dictionary,\n alerts,\n}: PayrollConfigurationProps) => {\n useComponentDictionary('Payroll.PayrollConfiguration', dictionary)\n useI18n('Payroll.PayrollConfiguration')\n const { t } = useTranslation('Payroll.PayrollConfiguration')\n const { baseSubmitHandler } = useBase()\n const dateFormatter = useDateFormatter()\n const defaultItemsPerPage = 10\n\n const [currentPage, setCurrentPage] = useState(1)\n const [itemsPerPage, setItemsPerPage] = useState<PaginationItemsPerPage>(defaultItemsPerPage)\n const [isPolling, setIsPolling] = useState(false)\n const [payrollBlockers, setPayrollBlockers] = useState<ApiPayrollBlocker[]>([])\n\n const { data: employeeData, isFetching: isFetchingEmployeeData } = useEmployeesListSuspense({\n companyId,\n payrollUuid: payrollId, // get back list of employees to specific payroll\n per: itemsPerPage,\n page: currentPage,\n sortBy: 'name', // sort alphanumeric by employee last_names\n })\n\n // get list of employee uuids to filter into prepare endpoint to get back employee_compensation data\n const employeeUuids = useMemo(() => {\n return employeeData.showEmployees?.map(e => e.uuid) || []\n }, [employeeData.showEmployees])\n\n const totalPages = Number(employeeData.httpMeta.response.headers.get('x-total-pages') ?? 1)\n\n const handleItemsPerPageChange = (newCount: PaginationItemsPerPage) => {\n setItemsPerPage(newCount)\n }\n const handleFirstPage = () => {\n setCurrentPage(1)\n }\n const handlePreviousPage = () => {\n setCurrentPage(prevPage => Math.max(prevPage - 1, 1))\n }\n const handleNextPage = () => {\n setCurrentPage(prevPage => Math.min(prevPage + 1, totalPages))\n }\n const handleLastPage = () => {\n setCurrentPage(totalPages)\n }\n\n const pagination = {\n currentPage,\n handleFirstPage,\n handlePreviousPage,\n handleNextPage,\n handleLastPage,\n handleItemsPerPageChange,\n totalPages,\n isFetching: isFetchingEmployeeData,\n itemsPerPage,\n }\n\n const { data: payrollData } = usePayrollsGetSuspense(\n {\n companyId,\n payrollId,\n include: ['taxes', 'benefits', 'deductions'],\n },\n { refetchInterval: isPolling ? 5_000 : false },\n )\n\n const { mutateAsync: calculatePayroll } = usePayrollsCalculateMutation()\n\n const { mutateAsync: updatePayroll, isPending: isUpdatingPayroll } = usePayrollsUpdateMutation()\n\n const {\n preparedPayroll,\n paySchedule,\n isLoading: isPrepareLoading,\n handlePreparePayroll,\n } = usePreparedPayrollData({\n companyId,\n payrollId,\n employeeUuids,\n sortBy: 'last_name', // sort alphanumeric by employee last_names to match employees GET\n })\n\n const onCalculatePayroll = async () => {\n // Clear any existing blockers before attempting calculation\n setPayrollBlockers([])\n\n await baseSubmitHandler({}, async () => {\n const result = await payrollSubmitHandler(async () => {\n await calculatePayroll({\n request: {\n companyId,\n payrollId,\n },\n })\n setIsPolling(true)\n })\n\n if (!result.success && result.blockers.length > 0) {\n setPayrollBlockers(result.blockers)\n }\n })\n }\n const onEdit = (employee: Employee) => {\n onEvent(componentEvents.RUN_PAYROLL_EMPLOYEE_EDIT, {\n employeeId: employee.uuid,\n firstName: employee.firstName,\n lastName: employee.lastName,\n })\n }\n const transformEmployeeCompensation = ({\n paymentMethod,\n ...compensation\n }: PayrollEmployeeCompensationsType): PayrollUpdateEmployeeCompensations => {\n return {\n ...compensation,\n ...(paymentMethod && paymentMethod !== 'Historical' ? { paymentMethod } : {}),\n memo: compensation.memo || undefined,\n }\n }\n const onToggleExclude = async (employeeCompensation: PayrollEmployeeCompensationsType) => {\n onEvent(componentEvents.RUN_PAYROLL_EMPLOYEE_SKIP, {\n employeeId: employeeCompensation.employeeUuid,\n })\n await baseSubmitHandler({}, async () => {\n const transformedCompensation = transformEmployeeCompensation(employeeCompensation)\n const result = await updatePayroll({\n request: {\n companyId,\n payrollId,\n payrollUpdate: {\n employeeCompensations: [\n { ...transformedCompensation, excluded: !transformedCompensation.excluded },\n ],\n },\n },\n })\n onEvent(componentEvents.RUN_PAYROLL_EMPLOYEE_SAVED, {\n payrollPrepared: result.payrollPrepared,\n })\n // Refresh preparedPayroll to get updated data\n await handlePreparePayroll()\n })\n }\n\n const onViewBlockers = () => {\n onEvent(componentEvents.RUN_PAYROLL_BLOCKERS_VIEW_ALL)\n }\n\n useEffect(() => {\n // Start polling when payroll is calculating and not already polling\n if (isCalculating(payrollData.payrollShow?.processingRequest) && !isPolling) {\n setIsPolling(true)\n }\n // Stop polling and emit event when payroll is calculated successfully\n if (isPolling && isCalculated(payrollData.payrollShow?.processingRequest)) {\n onEvent(componentEvents.RUN_PAYROLL_CALCULATED, {\n payrollId,\n alert: { type: 'success', title: t('alerts.progressSaved') },\n payPeriod: payrollData.payrollShow?.payPeriod,\n })\n // Clear blockers on successful calculation\n setPayrollBlockers([])\n setIsPolling(false)\n }\n // If we are polling and payroll is in failed state, stop polling, and emit failure event\n if (\n isPolling &&\n payrollData.payrollShow?.processingRequest?.status ===\n PayrollProcessingRequestStatus.ProcessingFailed\n ) {\n onEvent(componentEvents.RUN_PAYROLL_PROCESSING_FAILED)\n setIsPolling(false)\n }\n }, [\n payrollData.payrollShow?.processingRequest,\n isPolling,\n onEvent,\n t,\n payrollId,\n payrollData.payrollShow?.calculatedAt,\n ])\n\n const payrollDeadlineNotice = payrollData.payrollShow\n ? {\n label: t('alerts.directDepositDeadline', {\n payDate: dateFormatter.formatShortWithWeekday(payrollData.payrollShow.checkDate),\n ...dateFormatter.formatWithTime(payrollData.payrollShow.payrollDeadline),\n }),\n content: t('alerts.directDepositDeadlineText'),\n }\n : undefined\n\n return (\n <PayrollConfigurationPresentation\n onCalculatePayroll={onCalculatePayroll}\n onEdit={onEdit}\n onToggleExclude={onToggleExclude}\n onViewBlockers={onViewBlockers}\n employeeCompensations={preparedPayroll?.employeeCompensations || []}\n employeeDetails={employeeData.showEmployees || []}\n payPeriod={preparedPayroll?.payPeriod}\n paySchedule={paySchedule}\n isOffCycle={preparedPayroll?.offCycle}\n alerts={alerts}\n payrollDeadlineNotice={payrollDeadlineNotice}\n isPending={isPolling || isPrepareLoading || isUpdatingPayroll}\n payrollBlockers={payrollBlockers}\n pagination={pagination}\n />\n )\n}\n"],"names":["isCalculating","processingRequest","PayrollProcessingRequestStatus","isCalculated","PayrollConfiguration","props","jsx","BaseComponent","Root","onEvent","companyId","payrollId","dictionary","alerts","useComponentDictionary","useI18n","t","useTranslation","baseSubmitHandler","useBase","dateFormatter","useDateFormatter","defaultItemsPerPage","currentPage","setCurrentPage","useState","itemsPerPage","setItemsPerPage","isPolling","setIsPolling","payrollBlockers","setPayrollBlockers","employeeData","isFetchingEmployeeData","useEmployeesListSuspense","employeeUuids","useMemo","totalPages","pagination","prevPage","newCount","payrollData","usePayrollsGetSuspense","calculatePayroll","usePayrollsCalculateMutation","updatePayroll","isUpdatingPayroll","usePayrollsUpdateMutation","preparedPayroll","paySchedule","isPrepareLoading","handlePreparePayroll","usePreparedPayrollData","onCalculatePayroll","result","payrollSubmitHandler","onEdit","employee","componentEvents","transformEmployeeCompensation","paymentMethod","compensation","onToggleExclude","employeeCompensation","transformedCompensation","onViewBlockers","useEffect","payrollDeadlineNotice","PayrollConfigurationPresentation"],"mappings":"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"}
1
+ {"version":3,"file":"PayrollConfiguration.js","sources":["../../../../src/components/Payroll/PayrollConfiguration/PayrollConfiguration.tsx"],"sourcesContent":["import { useEffect, useMemo, useState, type ReactNode } from 'react'\nimport { useEmployeesListSuspense } from '@gusto/embedded-api/react-query/employeesList'\nimport { usePayrollsGetSuspense } from '@gusto/embedded-api/react-query/payrollsGet'\nimport { usePayrollsCalculateMutation } from '@gusto/embedded-api/react-query/payrollsCalculate'\nimport type { Employee } from '@gusto/embedded-api/models/components/employee'\nimport type { PayrollProcessingRequest } from '@gusto/embedded-api/models/components/payrollprocessingrequest'\nimport { PayrollProcessingRequestStatus } from '@gusto/embedded-api/models/components/payrollprocessingrequest'\nimport { useTranslation } from 'react-i18next'\nimport { usePayrollsUpdateMutation } from '@gusto/embedded-api/react-query/payrollsUpdate'\nimport type { PayrollEmployeeCompensationsType } from '@gusto/embedded-api/models/components/payrollemployeecompensationstype'\nimport type { PayrollUpdateEmployeeCompensations } from '@gusto/embedded-api/models/components/payrollupdate'\nimport { usePreparedPayrollData } from '../usePreparedPayrollData'\nimport { payrollSubmitHandler, type ApiPayrollBlocker } from '../PayrollBlocker/payrollHelpers'\nimport { PayrollConfigurationPresentation } from './PayrollConfigurationPresentation'\nimport type { BaseComponentInterface } from '@/components/Base/Base'\nimport { BaseComponent } from '@/components/Base/Base'\nimport { componentEvents } from '@/shared/constants'\nimport { useComponentDictionary, useI18n } from '@/i18n'\nimport { useBase } from '@/components/Base'\nimport type { PaginationItemsPerPage } from '@/components/Common/PaginationControl/PaginationControlTypes'\nimport { useDateFormatter } from '@/hooks/useDateFormatter'\n\nconst isCalculating = (processingRequest?: PayrollProcessingRequest | null) =>\n processingRequest?.status === PayrollProcessingRequestStatus.Calculating\nconst isCalculated = (processingRequest?: PayrollProcessingRequest | null) =>\n processingRequest?.status === PayrollProcessingRequestStatus.CalculateSuccess\n\ninterface PayrollConfigurationProps extends BaseComponentInterface<'Payroll.PayrollConfiguration'> {\n companyId: string\n payrollId: string\n alerts?: ReactNode\n}\n\nexport function PayrollConfiguration(props: PayrollConfigurationProps & BaseComponentInterface) {\n return (\n <BaseComponent {...props}>\n <Root {...props}>{props.children}</Root>\n </BaseComponent>\n )\n}\n\nexport const Root = ({\n onEvent,\n companyId,\n payrollId,\n dictionary,\n alerts,\n}: PayrollConfigurationProps) => {\n useComponentDictionary('Payroll.PayrollConfiguration', dictionary)\n useI18n('Payroll.PayrollConfiguration')\n const { t } = useTranslation('Payroll.PayrollConfiguration')\n const { baseSubmitHandler } = useBase()\n const dateFormatter = useDateFormatter()\n const defaultItemsPerPage = 10\n\n const [currentPage, setCurrentPage] = useState(1)\n const [itemsPerPage, setItemsPerPage] = useState<PaginationItemsPerPage>(defaultItemsPerPage)\n const [isPolling, setIsPolling] = useState(false)\n const [payrollBlockers, setPayrollBlockers] = useState<ApiPayrollBlocker[]>([])\n\n const { data: employeeData, isFetching: isFetchingEmployeeData } = useEmployeesListSuspense({\n companyId,\n payrollUuid: payrollId, // get back list of employees to specific payroll\n per: itemsPerPage,\n page: currentPage,\n sortBy: 'name', // sort alphanumeric by employee last_names\n })\n\n // get list of employee uuids to filter into prepare endpoint to get back employee_compensation data\n const employeeUuids = useMemo(() => {\n return employeeData.showEmployees?.map(e => e.uuid) || []\n }, [employeeData.showEmployees])\n\n const totalPages = Number(employeeData.httpMeta.response.headers.get('x-total-pages') ?? 1)\n\n const handleItemsPerPageChange = (newCount: PaginationItemsPerPage) => {\n setItemsPerPage(newCount)\n }\n const handleFirstPage = () => {\n setCurrentPage(1)\n }\n const handlePreviousPage = () => {\n setCurrentPage(prevPage => Math.max(prevPage - 1, 1))\n }\n const handleNextPage = () => {\n setCurrentPage(prevPage => Math.min(prevPage + 1, totalPages))\n }\n const handleLastPage = () => {\n setCurrentPage(totalPages)\n }\n\n const pagination = {\n currentPage,\n handleFirstPage,\n handlePreviousPage,\n handleNextPage,\n handleLastPage,\n handleItemsPerPageChange,\n totalPages,\n isFetching: isFetchingEmployeeData,\n itemsPerPage,\n }\n\n const { data: payrollData } = usePayrollsGetSuspense(\n {\n companyId,\n payrollId,\n include: ['taxes', 'benefits', 'deductions'],\n },\n { refetchInterval: isPolling ? 5_000 : false },\n )\n\n const { mutateAsync: calculatePayroll } = usePayrollsCalculateMutation()\n\n const { mutateAsync: updatePayroll, isPending: isUpdatingPayroll } = usePayrollsUpdateMutation()\n\n const {\n preparedPayroll,\n paySchedule,\n isLoading: isPrepareLoading,\n handlePreparePayroll,\n } = usePreparedPayrollData({\n companyId,\n payrollId,\n employeeUuids,\n sortBy: 'last_name', // sort alphanumeric by employee last_names to match employees GET\n })\n\n const onCalculatePayroll = async () => {\n // Clear any existing blockers before attempting calculation\n setPayrollBlockers([])\n\n await baseSubmitHandler({}, async () => {\n const result = await payrollSubmitHandler(async () => {\n await calculatePayroll({\n request: {\n companyId,\n payrollId,\n },\n })\n setIsPolling(true)\n })\n\n if (!result.success && result.blockers.length > 0) {\n setPayrollBlockers(result.blockers)\n }\n })\n }\n const onEdit = (employee: Employee) => {\n onEvent(componentEvents.RUN_PAYROLL_EMPLOYEE_EDIT, {\n employeeId: employee.uuid,\n firstName: employee.firstName,\n lastName: employee.lastName,\n })\n }\n const transformEmployeeCompensation = ({\n paymentMethod,\n reimbursements,\n ...compensation\n }: PayrollEmployeeCompensationsType): PayrollUpdateEmployeeCompensations => {\n return {\n ...compensation,\n ...(paymentMethod && paymentMethod !== 'Historical' ? { paymentMethod } : {}),\n memo: compensation.memo || undefined,\n }\n }\n const onToggleExclude = async (employeeCompensation: PayrollEmployeeCompensationsType) => {\n onEvent(componentEvents.RUN_PAYROLL_EMPLOYEE_SKIP, {\n employeeId: employeeCompensation.employeeUuid,\n })\n await baseSubmitHandler({}, async () => {\n const transformedCompensation = transformEmployeeCompensation(employeeCompensation)\n const result = await updatePayroll({\n request: {\n companyId,\n payrollId,\n payrollUpdate: {\n employeeCompensations: [\n { ...transformedCompensation, excluded: !transformedCompensation.excluded },\n ],\n },\n },\n })\n onEvent(componentEvents.RUN_PAYROLL_EMPLOYEE_SAVED, {\n payrollPrepared: result.payrollPrepared,\n })\n // Refresh preparedPayroll to get updated data\n await handlePreparePayroll()\n })\n }\n\n const onViewBlockers = () => {\n onEvent(componentEvents.RUN_PAYROLL_BLOCKERS_VIEW_ALL)\n }\n\n useEffect(() => {\n // Start polling when payroll is calculating and not already polling\n if (isCalculating(payrollData.payrollShow?.processingRequest) && !isPolling) {\n setIsPolling(true)\n }\n // Stop polling and emit event when payroll is calculated successfully\n if (isPolling && isCalculated(payrollData.payrollShow?.processingRequest)) {\n onEvent(componentEvents.RUN_PAYROLL_CALCULATED, {\n payrollId,\n alert: { type: 'success', title: t('alerts.progressSaved') },\n payPeriod: payrollData.payrollShow?.payPeriod,\n })\n // Clear blockers on successful calculation\n setPayrollBlockers([])\n setIsPolling(false)\n }\n // If we are polling and payroll is in failed state, stop polling, and emit failure event\n if (\n isPolling &&\n payrollData.payrollShow?.processingRequest?.status ===\n PayrollProcessingRequestStatus.ProcessingFailed\n ) {\n onEvent(componentEvents.RUN_PAYROLL_PROCESSING_FAILED)\n setIsPolling(false)\n }\n }, [\n payrollData.payrollShow?.processingRequest,\n isPolling,\n onEvent,\n t,\n payrollId,\n payrollData.payrollShow?.calculatedAt,\n ])\n\n const payrollDeadlineNotice = payrollData.payrollShow\n ? {\n label: t('alerts.directDepositDeadline', {\n payDate: dateFormatter.formatShortWithWeekday(payrollData.payrollShow.checkDate),\n ...dateFormatter.formatWithTime(payrollData.payrollShow.payrollDeadline),\n }),\n content: t('alerts.directDepositDeadlineText'),\n }\n : undefined\n\n return (\n <PayrollConfigurationPresentation\n onCalculatePayroll={onCalculatePayroll}\n onEdit={onEdit}\n onToggleExclude={onToggleExclude}\n onViewBlockers={onViewBlockers}\n employeeCompensations={preparedPayroll?.employeeCompensations || []}\n employeeDetails={employeeData.showEmployees || []}\n payPeriod={preparedPayroll?.payPeriod}\n paySchedule={paySchedule}\n isOffCycle={preparedPayroll?.offCycle}\n alerts={alerts}\n payrollDeadlineNotice={payrollDeadlineNotice}\n isPending={isPolling || isPrepareLoading || isUpdatingPayroll}\n payrollBlockers={payrollBlockers}\n pagination={pagination}\n />\n )\n}\n"],"names":["isCalculating","processingRequest","PayrollProcessingRequestStatus","isCalculated","PayrollConfiguration","props","jsx","BaseComponent","Root","onEvent","companyId","payrollId","dictionary","alerts","useComponentDictionary","useI18n","t","useTranslation","baseSubmitHandler","useBase","dateFormatter","useDateFormatter","defaultItemsPerPage","currentPage","setCurrentPage","useState","itemsPerPage","setItemsPerPage","isPolling","setIsPolling","payrollBlockers","setPayrollBlockers","employeeData","isFetchingEmployeeData","useEmployeesListSuspense","employeeUuids","useMemo","totalPages","pagination","prevPage","newCount","payrollData","usePayrollsGetSuspense","calculatePayroll","usePayrollsCalculateMutation","updatePayroll","isUpdatingPayroll","usePayrollsUpdateMutation","preparedPayroll","paySchedule","isPrepareLoading","handlePreparePayroll","usePreparedPayrollData","onCalculatePayroll","result","payrollSubmitHandler","onEdit","employee","componentEvents","transformEmployeeCompensation","paymentMethod","reimbursements","compensation","onToggleExclude","employeeCompensation","transformedCompensation","onViewBlockers","useEffect","payrollDeadlineNotice","PayrollConfigurationPresentation"],"mappings":"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"}