@gusto/embedded-react-sdk 0.56.0 → 0.56.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (109) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/dist/components/Payroll/OffCycle/OffCycleFlow.js.map +1 -1
  3. package/dist/components/Payroll/OffCycle/OffCycleFlowComponents.js +24 -18
  4. package/dist/components/Payroll/OffCycle/OffCycleFlowComponents.js.map +1 -1
  5. package/dist/components/Payroll/OffCycle/offCycleStateMachine.js +39 -21
  6. package/dist/components/Payroll/OffCycle/offCycleStateMachine.js.map +1 -1
  7. package/dist/components/Payroll/OffCycleCreation/OffCycleCreation.js +85 -82
  8. package/dist/components/Payroll/OffCycleCreation/OffCycleCreation.js.map +1 -1
  9. package/dist/components/Payroll/OffCycleCreation/OffCycleCreationPresentation.js +52 -51
  10. package/dist/components/Payroll/OffCycleCreation/OffCycleCreationPresentation.js.map +1 -1
  11. package/dist/components/Payroll/PayrollBlocker/components/PayrollBlockerAlerts.js +12 -12
  12. package/dist/components/Payroll/PayrollBlocker/components/PayrollBlockerAlerts.js.map +1 -1
  13. package/dist/components/Payroll/PayrollBlocker/components/PayrollBlockerList.js +40 -40
  14. package/dist/components/Payroll/PayrollBlocker/components/PayrollBlockerList.js.map +1 -1
  15. package/dist/components/Payroll/PayrollConfiguration/PayrollConfiguration.js +26 -25
  16. package/dist/components/Payroll/PayrollConfiguration/PayrollConfiguration.js.map +1 -1
  17. package/dist/components/Payroll/PayrollEditEmployee/PayrollEditEmployeePresentation.js +13 -16
  18. package/dist/components/Payroll/PayrollEditEmployee/PayrollEditEmployeePresentation.js.map +1 -1
  19. package/dist/components/Payroll/PayrollEditEmployee/TimeOffField.js +0 -1
  20. package/dist/components/Payroll/PayrollEditEmployee/TimeOffField.js.map +1 -1
  21. package/dist/components/Payroll/PayrollEditEmployee/shared/usePayrollEditEmployeeForm/payrollEditEmployeeHelpers.js +138 -110
  22. package/dist/components/Payroll/PayrollEditEmployee/shared/usePayrollEditEmployeeForm/payrollEditEmployeeHelpers.js.map +1 -1
  23. package/dist/components/Payroll/PayrollEditEmployee/shared/usePayrollEditEmployeeForm/usePayrollEditEmployeeForm.js +149 -146
  24. package/dist/components/Payroll/PayrollEditEmployee/shared/usePayrollEditEmployeeForm/usePayrollEditEmployeeForm.js.map +1 -1
  25. package/dist/components/Payroll/PayrollExecutionFlow/PayrollExecutionFlow.js.map +1 -1
  26. package/dist/components/Payroll/PayrollExecutionFlow/payrollExecutionMachine.js +4 -0
  27. package/dist/components/Payroll/PayrollExecutionFlow/payrollExecutionMachine.js.map +1 -1
  28. package/dist/components/Payroll/PayrollFlow/PayrollFlow.js.map +1 -1
  29. package/dist/components/Payroll/PayrollFlow/TransitionFlowContextual.js +22 -35
  30. package/dist/components/Payroll/PayrollFlow/TransitionFlowContextual.js.map +1 -1
  31. package/dist/components/Payroll/Transition/TransitionFlow.js +49 -36
  32. package/dist/components/Payroll/Transition/TransitionFlow.js.map +1 -1
  33. package/dist/components/Payroll/Transition/TransitionFlowComponents.js +24 -47
  34. package/dist/components/Payroll/Transition/TransitionFlowComponents.js.map +1 -1
  35. package/dist/components/Payroll/Transition/transitionStateMachine.js +35 -40
  36. package/dist/components/Payroll/Transition/transitionStateMachine.js.map +1 -1
  37. package/dist/components/Payroll/TransitionPayroll/TransitionPayroll.js +48 -0
  38. package/dist/components/Payroll/TransitionPayroll/TransitionPayroll.js.map +1 -0
  39. package/dist/components/Payroll/TransitionPayroll/TransitionPayrollComponents.js +35 -0
  40. package/dist/components/Payroll/TransitionPayroll/TransitionPayrollComponents.js.map +1 -0
  41. package/dist/components/Payroll/TransitionPayroll/transitionPayrollStateMachine.js +23 -0
  42. package/dist/components/Payroll/TransitionPayroll/transitionPayrollStateMachine.js.map +1 -0
  43. package/dist/components/Payroll/TransitionPayroll/useResolveTransitionPayroll.js +32 -0
  44. package/dist/components/Payroll/TransitionPayroll/useResolveTransitionPayroll.js.map +1 -0
  45. package/dist/components/Payroll/index.js +7 -5
  46. package/dist/components/Payroll/index.js.map +1 -1
  47. package/dist/i18n/I18n.js +9 -4
  48. package/dist/i18n/I18n.js.map +1 -1
  49. package/dist/i18n/en/Payroll.PayrollBlocker.json.js +10 -8
  50. package/dist/i18n/en/Payroll.PayrollBlocker.json.js.map +1 -1
  51. package/dist/i18n/es_US/Company.StateTaxes.json.js +1 -1
  52. package/dist/i18n/es_US/Contractor.ContractorList.json.js +14 -12
  53. package/dist/i18n/es_US/Contractor.ContractorList.json.js.map +1 -1
  54. package/dist/i18n/es_US/Contractor.Management.Compensation.json.js +4 -4
  55. package/dist/i18n/es_US/Contractor.Management.Profile.json.js +4 -4
  56. package/dist/i18n/es_US/Contractor.ManagementContractorList.json.js +40 -38
  57. package/dist/i18n/es_US/Contractor.ManagementContractorList.json.js.map +1 -1
  58. package/dist/i18n/es_US/Contractor.Payments.PaymentsList.json.js +18 -16
  59. package/dist/i18n/es_US/Contractor.Payments.PaymentsList.json.js.map +1 -1
  60. package/dist/i18n/es_US/Contractor.Profile.json.js +5 -5
  61. package/dist/i18n/es_US/Payroll.OffCycleCreation.json.js +11 -9
  62. package/dist/i18n/es_US/Payroll.OffCycleCreation.json.js.map +1 -1
  63. package/dist/i18n/es_US/Payroll.OffCyclePayPeriodDateForm.json.js +2 -2
  64. package/dist/i18n/es_US/Payroll.OffCycleTaxWithholding.json.js +6 -6
  65. package/dist/i18n/es_US/Payroll.PayrollConfiguration.json.js +15 -15
  66. package/dist/i18n/es_US/Payroll.PayrollEditEmployee.json.js +28 -26
  67. package/dist/i18n/es_US/Payroll.PayrollEditEmployee.json.js.map +1 -1
  68. package/dist/i18n/es_US/Payroll.PayrollOverview.json.js +40 -38
  69. package/dist/i18n/es_US/Payroll.PayrollOverview.json.js.map +1 -1
  70. package/dist/i18n/es_US/Payroll.PrintChecksBanner.json.js +14 -0
  71. package/dist/i18n/es_US/Payroll.PrintChecksBanner.json.js.map +1 -0
  72. package/dist/i18n/es_US/Payroll.PrintChecksFailure.json.js +12 -0
  73. package/dist/i18n/es_US/Payroll.PrintChecksFailure.json.js.map +1 -0
  74. package/dist/i18n/es_US/Payroll.PrintChecksForm.json.js +26 -0
  75. package/dist/i18n/es_US/Payroll.PrintChecksForm.json.js.map +1 -0
  76. package/dist/i18n/es_US/Payroll.PrintChecksSummary.json.js +14 -0
  77. package/dist/i18n/es_US/Payroll.PrintChecksSummary.json.js.map +1 -0
  78. package/dist/i18n/es_US/Payroll.UNSTABLE_PayrollEditEmployee.json.js +78 -0
  79. package/dist/i18n/es_US/Payroll.UNSTABLE_PayrollEditEmployee.json.js.map +1 -0
  80. package/dist/i18n/es_US/common.json.js +1 -1
  81. package/dist/package.json.js +1 -1
  82. package/dist/shared/constants.js +21 -20
  83. package/dist/shared/constants.js.map +1 -1
  84. package/dist/src/components/Payroll/OffCycle/OffCycleFlow.d.ts +2 -0
  85. package/dist/src/components/Payroll/OffCycle/OffCycleFlowComponents.d.ts +2 -0
  86. package/dist/src/components/Payroll/OffCycle/offCycleStateMachine.d.ts +1 -0
  87. package/dist/src/components/Payroll/OffCycleCreation/OffCycleCreation.d.ts +1 -0
  88. package/dist/src/components/Payroll/OffCycleCreation/OffCycleCreationPresentation.d.ts +1 -1
  89. package/dist/src/components/Payroll/OffCycleCreation/OffCycleCreationTypes.d.ts +5 -0
  90. package/dist/src/components/Payroll/PayrollConfiguration/PayrollConfiguration.d.ts +1 -1
  91. package/dist/src/components/Payroll/PayrollEditEmployee/shared/usePayrollEditEmployeeForm/payrollEditEmployeeHelpers.d.ts +18 -0
  92. package/dist/src/components/Payroll/PayrollExecutionFlow/PayrollExecutionFlow.d.ts +1 -1
  93. package/dist/src/components/Payroll/PayrollExecutionFlow/payrollExecutionMachine.d.ts +8 -0
  94. package/dist/src/components/Payroll/PayrollFlow/PayrollFlow.d.ts +1 -1
  95. package/dist/src/components/Payroll/PayrollFlow/TransitionFlowContextual.d.ts +6 -1
  96. package/dist/src/components/Payroll/Transition/TransitionFlow.d.ts +17 -15
  97. package/dist/src/components/Payroll/Transition/TransitionFlowComponents.d.ts +21 -12
  98. package/dist/src/components/Payroll/Transition/transitionStateMachine.d.ts +25 -4
  99. package/dist/src/components/Payroll/TransitionPayroll/TransitionPayroll.d.ts +55 -0
  100. package/dist/src/components/Payroll/TransitionPayroll/TransitionPayrollComponents.d.ts +24 -0
  101. package/dist/src/components/Payroll/TransitionPayroll/TransitionPayrollTypes.d.ts +23 -0
  102. package/dist/src/components/Payroll/TransitionPayroll/index.d.ts +2 -0
  103. package/dist/src/components/Payroll/TransitionPayroll/transitionPayrollStateMachine.d.ts +15 -0
  104. package/dist/src/components/Payroll/TransitionPayroll/useResolveTransitionPayroll.d.ts +28 -0
  105. package/dist/src/components/Payroll/index.d.ts +2 -0
  106. package/dist/src/i18n/types.d.ts +6 -0
  107. package/dist/src/shared/constants.d.ts +2 -0
  108. package/docs/guides/endpoint-inventory.json +14 -19
  109. package/package.json +4 -4
package/CHANGELOG.md CHANGED
@@ -1,5 +1,21 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.56.1](https://github.com/Gusto/embedded-react-sdk/compare/v0.56.0...v0.56.1) (2026-09-22)
4
+
5
+ ### Features & Enhancements
6
+
7
+ - Add `Payroll.TransitionPayroll`, a standalone block that resolves an existing transition payroll for a pay-schedule change (or creates one) and can be composed directly, and rework `Payroll.TransitionFlow` to build on it. `TransitionFlow` keeps its optional `payrollUuid` prop, and the `runPayroll/employee/edit` event now includes `payrollId`. ([#2822](https://github.com/Gusto/embedded-react-sdk/issues/2822))
8
+
9
+ ### Fixes
10
+
11
+ - Handle the `partner_tos_not_accepted` payroll blocker so it surfaces correctly instead of failing on an unrecognized enum value ([#2825](https://github.com/Gusto/embedded-react-sdk/issues/2825))
12
+ - Submit `0` for a previously-loaded workweek cell that is cleared, so clearing a loaded value now persists instead of being dropped ([#2817](https://github.com/Gusto/embedded-react-sdk/issues/2817))
13
+
14
+ ### Chores & Maintenance
15
+
16
+ - Sync translations from Lokalise ([#2800](https://github.com/Gusto/embedded-react-sdk/issues/2800))
17
+ - Bump dev dependencies (`dotenv`, `release-it`)
18
+
3
19
  ## [0.56.0](https://github.com/Gusto/embedded-react-sdk/compare/v0.55.8...v0.56.0) (2026-09-21)
4
20
 
5
21
  ### ⚠ Breaking Changes
@@ -1 +1 @@
1
- {"version":3,"file":"OffCycleFlow.js","sources":["../../../../src/components/Payroll/OffCycle/OffCycleFlow.tsx"],"sourcesContent":["import { useMemo } from 'react'\nimport { createMachine } from 'robot3'\nimport { offCycleMachine, offCycleBreadcrumbsNodes } from './offCycleStateMachine'\nimport {\n OffCycleCreationContextual,\n type OffCycleFlowContextInterface,\n type OffCycleFlowProps,\n} from './OffCycleFlowComponents'\nimport { Flow } from '@/components/Flow/Flow'\nimport { buildBreadcrumbs } from '@/helpers/breadcrumbHelpers'\n\n/**\n * Guided flow to create and run a bonus or correction payroll.\n *\n * @remarks\n * Guides the user through configuring pay period dates, selecting a reason, choosing\n * employees, and setting deduction and tax withholding preferences, then transitions\n * into the standard payroll execution experience (configuration, overview, submission,\n * receipts). All off-cycle payroll types share the same execution steps as regular\n * payrolls — only the creation step differs.\n *\n * @events\n * | Event | Description | Data |\n * | ----- | ----------- | ---- |\n * | `breadcrumb/navigate` | User navigates via the flow breadcrumb header | `{ key: string }` |\n * | `offCycle/created` | Off-cycle payroll has been created and the flow transitions to execution | `{ payrollUuid: string }` |\n *\n * Once the flow transitions to execution, all standard run-payroll events are emitted\n * (e.g. `runPayroll/calculated`, `runPayroll/submitted`, `runPayroll/processed`).\n *\n * @components\n * - {@link OffCycleCreation}\n * - {@link PayrollExecutionFlow}\n *\n * @param props - {@link OffCycleFlowProps}\n * @returns The rendered off-cycle payroll flow.\n * @public\n *\n * @example\n * ```tsx title=\"App.tsx\"\n * import { Payroll, type EventType } from '@gusto/embedded-react-sdk'\n *\n * function MyApp() {\n * return (\n * <Payroll.OffCycleFlow\n * companyId=\"a007e1ab-3595-43c2-ab4b-af7a5af2e365\"\n * onEvent={(eventType: EventType) => {\n * if (eventType === 'runPayroll/submitted') {\n * // Payroll submitted — navigate to your next screen\n * }\n * }}\n * />\n * )\n * }\n * ```\n */\nexport function OffCycleFlow({\n companyId,\n payrollType,\n onEvent,\n withReimbursements,\n}: OffCycleFlowProps) {\n const offCycleFlowMachine = useMemo(\n () =>\n createMachine(\n 'createOffCyclePayroll',\n offCycleMachine,\n (initialContext: OffCycleFlowContextInterface) => ({\n ...initialContext,\n component: OffCycleCreationContextual,\n companyId,\n payrollType,\n withReimbursements,\n header: {\n type: 'breadcrumbs' as const,\n breadcrumbs: buildBreadcrumbs(offCycleBreadcrumbsNodes),\n currentBreadcrumbId: 'createOffCyclePayroll',\n },\n }),\n ),\n [companyId, payrollType, withReimbursements],\n )\n\n return <Flow machine={offCycleFlowMachine} onEvent={onEvent} />\n}\n"],"names":["OffCycleFlow","companyId","payrollType","onEvent","withReimbursements","offCycleFlowMachine","useMemo","createMachine","offCycleMachine","initialContext","OffCycleCreationContextual","buildBreadcrumbs","offCycleBreadcrumbsNodes","jsx","Flow"],"mappings":";;;;;;;AAwDO,SAASA,EAAa;AAAA,EAC3B,WAAAC;AAAA,EACA,aAAAC;AAAA,EACA,SAAAC;AAAA,EACA,oBAAAC;AACF,GAAsB;AACpB,QAAMC,IAAsBC;AAAA,IAC1B,MACEC;AAAA,MACE;AAAA,MACAC;AAAA,MACA,CAACC,OAAkD;AAAA,QACjD,GAAGA;AAAA,QACH,WAAWC;AAAA,QACX,WAAAT;AAAA,QACA,aAAAC;AAAA,QACA,oBAAAE;AAAA,QACA,QAAQ;AAAA,UACN,MAAM;AAAA,UACN,aAAaO,EAAiBC,CAAwB;AAAA,UACtD,qBAAqB;AAAA,QAAA;AAAA,MACvB;AAAA,IACF;AAAA,IAEJ,CAACX,GAAWC,GAAaE,CAAkB;AAAA,EAAA;AAG7C,SAAO,gBAAAS,EAACC,GAAA,EAAK,SAAST,GAAqB,SAAAF,EAAA,CAAkB;AAC/D;"}
1
+ {"version":3,"file":"OffCycleFlow.js","sources":["../../../../src/components/Payroll/OffCycle/OffCycleFlow.tsx"],"sourcesContent":["import { useMemo } from 'react'\nimport { createMachine } from 'robot3'\nimport { offCycleMachine, offCycleBreadcrumbsNodes } from './offCycleStateMachine'\nimport {\n OffCycleCreationContextual,\n type OffCycleFlowContextInterface,\n type OffCycleFlowProps,\n} from './OffCycleFlowComponents'\nimport { Flow } from '@/components/Flow/Flow'\nimport { buildBreadcrumbs } from '@/helpers/breadcrumbHelpers'\n\n/**\n * Guided flow to create and run a bonus or correction payroll.\n *\n * @remarks\n * Guides the user through configuring pay period dates, selecting a reason, choosing\n * employees, and setting deduction and tax withholding preferences, then transitions\n * into the standard payroll execution experience (configuration, overview, submission,\n * receipts). All off-cycle payroll types share the same execution steps as regular\n * payrolls — only the creation step differs.\n *\n * @events\n * | Event | Description | Data |\n * | ----- | ----------- | ---- |\n * | `breadcrumb/navigate` | User navigates via the flow breadcrumb header | `{ key: string }` |\n * | `offCycle/created` | Off-cycle payroll has been created and the flow transitions to execution | `{ payrollUuid: string }` |\n * | `offCycle/blockers/viewAll` | User opens the payroll blockers step from the creation screen's blocker alert | none |\n *\n * Once the flow transitions to execution, all standard run-payroll events are emitted\n * (e.g. `runPayroll/calculated`, `runPayroll/submitted`, `runPayroll/processed`).\n *\n * @components\n * - {@link OffCycleCreation}\n * - {@link PayrollBlockerList}\n * - {@link PayrollExecutionFlow}\n *\n * @param props - {@link OffCycleFlowProps}\n * @returns The rendered off-cycle payroll flow.\n * @public\n *\n * @example\n * ```tsx title=\"App.tsx\"\n * import { Payroll, type EventType } from '@gusto/embedded-react-sdk'\n *\n * function MyApp() {\n * return (\n * <Payroll.OffCycleFlow\n * companyId=\"a007e1ab-3595-43c2-ab4b-af7a5af2e365\"\n * onEvent={(eventType: EventType) => {\n * if (eventType === 'runPayroll/submitted') {\n * // Payroll submitted — navigate to your next screen\n * }\n * }}\n * />\n * )\n * }\n * ```\n */\nexport function OffCycleFlow({\n companyId,\n payrollType,\n onEvent,\n withReimbursements,\n}: OffCycleFlowProps) {\n const offCycleFlowMachine = useMemo(\n () =>\n createMachine(\n 'createOffCyclePayroll',\n offCycleMachine,\n (initialContext: OffCycleFlowContextInterface) => ({\n ...initialContext,\n component: OffCycleCreationContextual,\n companyId,\n payrollType,\n withReimbursements,\n header: {\n type: 'breadcrumbs' as const,\n breadcrumbs: buildBreadcrumbs(offCycleBreadcrumbsNodes),\n currentBreadcrumbId: 'createOffCyclePayroll',\n },\n }),\n ),\n [companyId, payrollType, withReimbursements],\n )\n\n return <Flow machine={offCycleFlowMachine} onEvent={onEvent} />\n}\n"],"names":["OffCycleFlow","companyId","payrollType","onEvent","withReimbursements","offCycleFlowMachine","useMemo","createMachine","offCycleMachine","initialContext","OffCycleCreationContextual","buildBreadcrumbs","offCycleBreadcrumbsNodes","jsx","Flow"],"mappings":";;;;;;;AA0DO,SAASA,EAAa;AAAA,EAC3B,WAAAC;AAAA,EACA,aAAAC;AAAA,EACA,SAAAC;AAAA,EACA,oBAAAC;AACF,GAAsB;AACpB,QAAMC,IAAsBC;AAAA,IAC1B,MACEC;AAAA,MACE;AAAA,MACAC;AAAA,MACA,CAACC,OAAkD;AAAA,QACjD,GAAGA;AAAA,QACH,WAAWC;AAAA,QACX,WAAAT;AAAA,QACA,aAAAC;AAAA,QACA,oBAAAE;AAAA,QACA,QAAQ;AAAA,UACN,MAAM;AAAA,UACN,aAAaO,EAAiBC,CAAwB;AAAA,UACtD,qBAAqB;AAAA,QAAA;AAAA,MACvB;AAAA,IACF;AAAA,IAEJ,CAACX,GAAWC,GAAaE,CAAkB;AAAA,EAAA;AAG7C,SAAO,gBAAAS,EAACC,GAAA,EAAK,SAAST,GAAqB,SAAAF,EAAA,CAAkB;AAC/D;"}
@@ -1,15 +1,16 @@
1
- import { jsx as l } from "react/jsx-runtime";
1
+ import { jsx as t } from "react/jsx-runtime";
2
2
  import { useMemo as y } from "react";
3
3
  import { usePayrollsGetSuspense as p } from "@gusto/embedded-api/react-query/payrollsGet";
4
4
  import { PayrollExecutionInternalFlow as u } from "../PayrollExecutionFlow/PayrollExecutionFlow.js";
5
5
  import { isDismissalPayroll as d } from "../helpers.js";
6
- import { useFlow as s } from "../../Flow/useFlow.js";
6
+ import { useFlow as c } from "../../Flow/useFlow.js";
7
7
  import { ensureRequired as a } from "../../../helpers/ensureRequired.js";
8
8
  import { BaseComponent as C } from "../../Base/Base.js";
9
9
  import { OffCycleCreation as P } from "../OffCycleCreation/OffCycleCreation.js";
10
- function D() {
11
- const { companyId: o, payrollType: r, onEvent: e } = s();
12
- return /* @__PURE__ */ l(
10
+ import { PayrollBlockerList as x } from "../PayrollBlocker/components/PayrollBlockerList.js";
11
+ function k() {
12
+ const { companyId: o, payrollType: r, onEvent: e } = c();
13
+ return /* @__PURE__ */ t(
13
14
  P,
14
15
  {
15
16
  companyId: a(o),
@@ -18,41 +19,46 @@ function D() {
18
19
  }
19
20
  );
20
21
  }
21
- function S() {
22
- const { companyId: o, payrollUuid: r, onEvent: e, withReimbursements: t, header: n } = s(), m = a(o), c = a(r), i = n?.type === "breadcrumbs" ? n.breadcrumbs?.createOffCyclePayroll?.[0] : void 0, f = y(
22
+ function F() {
23
+ const { companyId: o, onEvent: r } = c();
24
+ return /* @__PURE__ */ t(x, { companyId: a(o), onEvent: r });
25
+ }
26
+ function L() {
27
+ const { companyId: o, payrollUuid: r, onEvent: e, withReimbursements: n, header: l } = c(), m = a(o), s = a(r), i = l?.type === "breadcrumbs" ? l.breadcrumbs?.createOffCyclePayroll?.[0] : void 0, f = y(
23
28
  () => i ? [i] : void 0,
24
29
  [i]
25
30
  );
26
- return /* @__PURE__ */ l(C, { onEvent: e, children: /* @__PURE__ */ l(
27
- x,
31
+ return /* @__PURE__ */ t(C, { onEvent: e, children: /* @__PURE__ */ t(
32
+ I,
28
33
  {
29
34
  companyId: m,
30
- payrollId: c,
35
+ payrollId: s,
31
36
  onEvent: e,
32
- withReimbursements: t,
37
+ withReimbursements: n,
33
38
  prefixBreadcrumbs: f
34
39
  }
35
40
  ) });
36
41
  }
37
- function x({
42
+ function I({
38
43
  companyId: o,
39
44
  payrollId: r,
40
45
  ...e
41
46
  }) {
42
- const { data: t } = p({ companyId: o, payrollId: r }), n = t.payrollShow?.payPeriod;
43
- return /* @__PURE__ */ l(
47
+ const { data: n } = p({ companyId: o, payrollId: r }), l = n.payrollShow?.payPeriod;
48
+ return /* @__PURE__ */ t(
44
49
  u,
45
50
  {
46
51
  companyId: o,
47
52
  payrollId: r,
48
- initialPayPeriod: n,
49
- isDismissalPayroll: d(t.payrollShow?.offCycleReason),
53
+ initialPayPeriod: l,
54
+ isDismissalPayroll: d(n.payrollShow?.offCycleReason),
50
55
  ...e
51
56
  }
52
57
  );
53
58
  }
54
59
  export {
55
- D as OffCycleCreationContextual,
56
- S as OffCycleExecutionContextual
60
+ k as OffCycleCreationContextual,
61
+ L as OffCycleExecutionContextual,
62
+ F as PayrollBlockerListContextual
57
63
  };
58
64
  //# sourceMappingURL=OffCycleFlowComponents.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"OffCycleFlowComponents.js","sources":["../../../../src/components/Payroll/OffCycle/OffCycleFlowComponents.tsx"],"sourcesContent":["import { useMemo } from 'react'\nimport { usePayrollsGetSuspense } from '@gusto/embedded-api/react-query/payrollsGet'\nimport { OffCycleCreation } from '../OffCycleCreation'\nimport {\n PayrollExecutionInternalFlow,\n type PayrollExecutionInternalFlowProps,\n} from '../PayrollExecutionFlow/PayrollExecutionFlow'\nimport type { OffCycleReason } from '../OffCycleReasonSelection'\nimport { isDismissalPayroll } from '../helpers'\nimport { useFlow, type FlowContextInterface } from '@/components/Flow/useFlow'\nimport type { OnEventType } from '@/components/Base/useBase'\nimport type { EventType } from '@/shared/constants'\nimport { ensureRequired } from '@/helpers/ensureRequired'\nimport { BaseComponent } from '@/components/Base/Base'\n\n/**\n * Flow context shared across the off-cycle payroll flow steps.\n *\n * @internal\n */\nexport interface OffCycleFlowContextInterface extends FlowContextInterface {\n /** The associated company identifier. */\n companyId: string\n /** Identifier of the off-cycle payroll created during the flow; set once creation completes. */\n payrollUuid?: string\n /** Pre-selected off-cycle reason (bonus or correction). */\n payrollType?: OffCycleReason\n /** Whether to show reimbursement fields throughout the execution steps. Defaults to true. */\n withReimbursements?: boolean\n}\n\n/**\n * Props for {@link OffCycleFlow}.\n *\n * @public\n */\nexport interface OffCycleFlowProps {\n /** The associated company identifier. */\n companyId: string\n /** Optional pre-selected off-cycle reason. When provided, the creation form starts with this reason selected. */\n payrollType?: OffCycleReason\n /** Callback invoked when the flow emits an event. See the events table on {@link OffCycleFlow}. */\n onEvent: OnEventType<EventType, unknown>\n /** Optional flag to show/hide reimbursement fields throughout the flow. Defaults to true. */\n withReimbursements?: boolean\n}\n\n/** @internal */\nexport function OffCycleCreationContextual() {\n const { companyId, payrollType, onEvent } = useFlow<OffCycleFlowContextInterface>()\n return (\n <OffCycleCreation\n companyId={ensureRequired(companyId)}\n payrollType={payrollType}\n onEvent={onEvent}\n />\n )\n}\n\n/** @internal */\nexport function OffCycleExecutionContextual() {\n const { companyId, payrollUuid, onEvent, withReimbursements, header } =\n useFlow<OffCycleFlowContextInterface>()\n\n const resolvedCompanyId = ensureRequired(companyId)\n const resolvedPayrollId = ensureRequired(payrollUuid)\n\n const offCycleRootBreadcrumb =\n header?.type === 'breadcrumbs' ? header.breadcrumbs?.['createOffCyclePayroll']?.[0] : undefined\n const prefixBreadcrumbs = useMemo(\n () => (offCycleRootBreadcrumb ? [offCycleRootBreadcrumb] : undefined),\n [offCycleRootBreadcrumb],\n )\n\n return (\n <BaseComponent onEvent={onEvent}>\n <OffCycleExecutionWithData\n companyId={resolvedCompanyId}\n payrollId={resolvedPayrollId}\n onEvent={onEvent}\n withReimbursements={withReimbursements}\n prefixBreadcrumbs={prefixBreadcrumbs}\n />\n </BaseComponent>\n )\n}\n\ntype OffCycleExecutionWithDataProps = Pick<\n PayrollExecutionInternalFlowProps,\n 'companyId' | 'payrollId' | 'onEvent' | 'prefixBreadcrumbs' | 'withReimbursements'\n>\n\nfunction OffCycleExecutionWithData({\n companyId,\n payrollId,\n ...rest\n}: OffCycleExecutionWithDataProps) {\n const { data } = usePayrollsGetSuspense({ companyId, payrollId })\n const initialPayPeriod = data.payrollShow?.payPeriod\n\n return (\n <PayrollExecutionInternalFlow\n companyId={companyId}\n payrollId={payrollId}\n initialPayPeriod={initialPayPeriod}\n isDismissalPayroll={isDismissalPayroll(data.payrollShow?.offCycleReason)}\n {...rest}\n />\n )\n}\n"],"names":["OffCycleCreationContextual","companyId","payrollType","onEvent","useFlow","jsx","OffCycleCreation","ensureRequired","OffCycleExecutionContextual","payrollUuid","withReimbursements","header","resolvedCompanyId","resolvedPayrollId","offCycleRootBreadcrumb","prefixBreadcrumbs","useMemo","BaseComponent","OffCycleExecutionWithData","payrollId","rest","data","usePayrollsGetSuspense","initialPayPeriod","PayrollExecutionInternalFlow","isDismissalPayroll"],"mappings":";;;;;;;;;AAgDO,SAASA,IAA6B;AAC3C,QAAM,EAAE,WAAAC,GAAW,aAAAC,GAAa,SAAAC,EAAA,IAAYC,EAAA;AAC5C,SACE,gBAAAC;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,WAAWC,EAAeN,CAAS;AAAA,MACnC,aAAAC;AAAA,MACA,SAAAC;AAAA,IAAA;AAAA,EAAA;AAGN;AAGO,SAASK,IAA8B;AAC5C,QAAM,EAAE,WAAAP,GAAW,aAAAQ,GAAa,SAAAN,GAAS,oBAAAO,GAAoB,QAAAC,EAAA,IAC3DP,EAAA,GAEIQ,IAAoBL,EAAeN,CAAS,GAC5CY,IAAoBN,EAAeE,CAAW,GAE9CK,IACJH,GAAQ,SAAS,gBAAgBA,EAAO,aAAc,wBAA2B,CAAC,IAAI,QAClFI,IAAoBC;AAAA,IACxB,MAAOF,IAAyB,CAACA,CAAsB,IAAI;AAAA,IAC3D,CAACA,CAAsB;AAAA,EAAA;AAGzB,SACE,gBAAAT,EAACY,KAAc,SAAAd,GACb,UAAA,gBAAAE;AAAA,IAACa;AAAA,IAAA;AAAA,MACC,WAAWN;AAAA,MACX,WAAWC;AAAA,MACX,SAAAV;AAAA,MACA,oBAAAO;AAAA,MACA,mBAAAK;AAAA,IAAA;AAAA,EAAA,GAEJ;AAEJ;AAOA,SAASG,EAA0B;AAAA,EACjC,WAAAjB;AAAA,EACA,WAAAkB;AAAA,EACA,GAAGC;AACL,GAAmC;AACjC,QAAM,EAAE,MAAAC,EAAA,IAASC,EAAuB,EAAE,WAAArB,GAAW,WAAAkB,GAAW,GAC1DI,IAAmBF,EAAK,aAAa;AAE3C,SACE,gBAAAhB;AAAA,IAACmB;AAAA,IAAA;AAAA,MACC,WAAAvB;AAAA,MACA,WAAAkB;AAAA,MACA,kBAAAI;AAAA,MACA,oBAAoBE,EAAmBJ,EAAK,aAAa,cAAc;AAAA,MACtE,GAAGD;AAAA,IAAA;AAAA,EAAA;AAGV;"}
1
+ {"version":3,"file":"OffCycleFlowComponents.js","sources":["../../../../src/components/Payroll/OffCycle/OffCycleFlowComponents.tsx"],"sourcesContent":["import { useMemo } from 'react'\nimport { usePayrollsGetSuspense } from '@gusto/embedded-api/react-query/payrollsGet'\nimport { OffCycleCreation } from '../OffCycleCreation'\nimport { PayrollBlockerList } from '../PayrollBlocker'\nimport {\n PayrollExecutionInternalFlow,\n type PayrollExecutionInternalFlowProps,\n} from '../PayrollExecutionFlow/PayrollExecutionFlow'\nimport type { OffCycleReason } from '../OffCycleReasonSelection'\nimport { isDismissalPayroll } from '../helpers'\nimport { useFlow, type FlowContextInterface } from '@/components/Flow/useFlow'\nimport type { OnEventType } from '@/components/Base/useBase'\nimport type { EventType } from '@/shared/constants'\nimport { ensureRequired } from '@/helpers/ensureRequired'\nimport { BaseComponent } from '@/components/Base/Base'\n\n/**\n * Flow context shared across the off-cycle payroll flow steps.\n *\n * @internal\n */\nexport interface OffCycleFlowContextInterface extends FlowContextInterface {\n /** The associated company identifier. */\n companyId: string\n /** Identifier of the off-cycle payroll created during the flow; set once creation completes. */\n payrollUuid?: string\n /** Pre-selected off-cycle reason (bonus or correction). */\n payrollType?: OffCycleReason\n /** Whether to show reimbursement fields throughout the execution steps. Defaults to true. */\n withReimbursements?: boolean\n}\n\n/**\n * Props for {@link OffCycleFlow}.\n *\n * @public\n */\nexport interface OffCycleFlowProps {\n /** The associated company identifier. */\n companyId: string\n /** Optional pre-selected off-cycle reason. When provided, the creation form starts with this reason selected. */\n payrollType?: OffCycleReason\n /** Callback invoked when the flow emits an event. See the events table on {@link OffCycleFlow}. */\n onEvent: OnEventType<EventType, unknown>\n /** Optional flag to show/hide reimbursement fields throughout the flow. Defaults to true. */\n withReimbursements?: boolean\n}\n\n/** @internal */\nexport function OffCycleCreationContextual() {\n const { companyId, payrollType, onEvent } = useFlow<OffCycleFlowContextInterface>()\n return (\n <OffCycleCreation\n companyId={ensureRequired(companyId)}\n payrollType={payrollType}\n onEvent={onEvent}\n />\n )\n}\n\n/** @internal */\nexport function PayrollBlockerListContextual() {\n const { companyId, onEvent } = useFlow<OffCycleFlowContextInterface>()\n return <PayrollBlockerList companyId={ensureRequired(companyId)} onEvent={onEvent} />\n}\n\n/** @internal */\nexport function OffCycleExecutionContextual() {\n const { companyId, payrollUuid, onEvent, withReimbursements, header } =\n useFlow<OffCycleFlowContextInterface>()\n\n const resolvedCompanyId = ensureRequired(companyId)\n const resolvedPayrollId = ensureRequired(payrollUuid)\n\n const offCycleRootBreadcrumb =\n header?.type === 'breadcrumbs' ? header.breadcrumbs?.['createOffCyclePayroll']?.[0] : undefined\n const prefixBreadcrumbs = useMemo(\n () => (offCycleRootBreadcrumb ? [offCycleRootBreadcrumb] : undefined),\n [offCycleRootBreadcrumb],\n )\n\n return (\n <BaseComponent onEvent={onEvent}>\n <OffCycleExecutionWithData\n companyId={resolvedCompanyId}\n payrollId={resolvedPayrollId}\n onEvent={onEvent}\n withReimbursements={withReimbursements}\n prefixBreadcrumbs={prefixBreadcrumbs}\n />\n </BaseComponent>\n )\n}\n\ntype OffCycleExecutionWithDataProps = Pick<\n PayrollExecutionInternalFlowProps,\n 'companyId' | 'payrollId' | 'onEvent' | 'prefixBreadcrumbs' | 'withReimbursements'\n>\n\nfunction OffCycleExecutionWithData({\n companyId,\n payrollId,\n ...rest\n}: OffCycleExecutionWithDataProps) {\n const { data } = usePayrollsGetSuspense({ companyId, payrollId })\n const initialPayPeriod = data.payrollShow?.payPeriod\n\n return (\n <PayrollExecutionInternalFlow\n companyId={companyId}\n payrollId={payrollId}\n initialPayPeriod={initialPayPeriod}\n isDismissalPayroll={isDismissalPayroll(data.payrollShow?.offCycleReason)}\n {...rest}\n />\n )\n}\n"],"names":["OffCycleCreationContextual","companyId","payrollType","onEvent","useFlow","jsx","OffCycleCreation","ensureRequired","PayrollBlockerListContextual","PayrollBlockerList","OffCycleExecutionContextual","payrollUuid","withReimbursements","header","resolvedCompanyId","resolvedPayrollId","offCycleRootBreadcrumb","prefixBreadcrumbs","useMemo","BaseComponent","OffCycleExecutionWithData","payrollId","rest","data","usePayrollsGetSuspense","initialPayPeriod","PayrollExecutionInternalFlow","isDismissalPayroll"],"mappings":";;;;;;;;;;AAiDO,SAASA,IAA6B;AAC3C,QAAM,EAAE,WAAAC,GAAW,aAAAC,GAAa,SAAAC,EAAA,IAAYC,EAAA;AAC5C,SACE,gBAAAC;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,WAAWC,EAAeN,CAAS;AAAA,MACnC,aAAAC;AAAA,MACA,SAAAC;AAAA,IAAA;AAAA,EAAA;AAGN;AAGO,SAASK,IAA+B;AAC7C,QAAM,EAAE,WAAAP,GAAW,SAAAE,EAAA,IAAYC,EAAA;AAC/B,2BAAQK,GAAA,EAAmB,WAAWF,EAAeN,CAAS,GAAG,SAAAE,GAAkB;AACrF;AAGO,SAASO,IAA8B;AAC5C,QAAM,EAAE,WAAAT,GAAW,aAAAU,GAAa,SAAAR,GAAS,oBAAAS,GAAoB,QAAAC,EAAA,IAC3DT,EAAA,GAEIU,IAAoBP,EAAeN,CAAS,GAC5Cc,IAAoBR,EAAeI,CAAW,GAE9CK,IACJH,GAAQ,SAAS,gBAAgBA,EAAO,aAAc,wBAA2B,CAAC,IAAI,QAClFI,IAAoBC;AAAA,IACxB,MAAOF,IAAyB,CAACA,CAAsB,IAAI;AAAA,IAC3D,CAACA,CAAsB;AAAA,EAAA;AAGzB,SACE,gBAAAX,EAACc,KAAc,SAAAhB,GACb,UAAA,gBAAAE;AAAA,IAACe;AAAA,IAAA;AAAA,MACC,WAAWN;AAAA,MACX,WAAWC;AAAA,MACX,SAAAZ;AAAA,MACA,oBAAAS;AAAA,MACA,mBAAAK;AAAA,IAAA;AAAA,EAAA,GAEJ;AAEJ;AAOA,SAASG,EAA0B;AAAA,EACjC,WAAAnB;AAAA,EACA,WAAAoB;AAAA,EACA,GAAGC;AACL,GAAmC;AACjC,QAAM,EAAE,MAAAC,EAAA,IAASC,EAAuB,EAAE,WAAAvB,GAAW,WAAAoB,GAAW,GAC1DI,IAAmBF,EAAK,aAAa;AAE3C,SACE,gBAAAlB;AAAA,IAACqB;AAAA,IAAA;AAAA,MACC,WAAAzB;AAAA,MACA,WAAAoB;AAAA,MACA,kBAAAI;AAAA,MACA,oBAAoBE,EAAmBJ,EAAK,aAAa,cAAc;AAAA,MACtE,GAAGD;AAAA,IAAA;AAAA,EAAA;AAGV;"}
@@ -1,7 +1,7 @@
1
- import { state as a, transition as c, reduce as l, guard as f } from "robot3";
2
- import { OffCycleExecutionContextual as y, OffCycleCreationContextual as t } from "./OffCycleFlowComponents.js";
3
- import { componentEvents as n } from "../../../shared/constants.js";
4
- import { patchBreadcrumbsHeader as o } from "../../../helpers/breadcrumbHelpers.js";
1
+ import { state as l, transition as o, reduce as a, guard as f } from "robot3";
2
+ import { OffCycleExecutionContextual as d, PayrollBlockerListContextual as i, OffCycleCreationContextual as y } from "./OffCycleFlowComponents.js";
3
+ import { componentEvents as c } from "../../../shared/constants.js";
4
+ import { patchBreadcrumbsHeader as t, updateBreadcrumbs as u } from "../../../helpers/breadcrumbHelpers.js";
5
5
  const O = {
6
6
  createOffCyclePayroll: {
7
7
  parent: null,
@@ -10,45 +10,63 @@ const O = {
10
10
  label: "createOffCyclePayroll.breadcrumbLabel",
11
11
  namespace: "Payroll.OffCycle",
12
12
  onNavigate: ((e) => ({
13
- ...o(e, { currentBreadcrumbId: "createOffCyclePayroll" }),
14
- component: t,
13
+ ...t(e, { currentBreadcrumbId: "createOffCyclePayroll" }),
14
+ component: y,
15
15
  payrollUuid: void 0
16
16
  }))
17
17
  }
18
+ },
19
+ blockers: {
20
+ parent: "createOffCyclePayroll",
21
+ item: {
22
+ id: "blockers",
23
+ label: "breadcrumbLabel",
24
+ namespace: "Payroll.PayrollBlocker"
25
+ }
18
26
  }
19
27
  };
20
- function i(e) {
28
+ function m(e) {
21
29
  return {
22
- ...o(e, { currentBreadcrumbId: "createOffCyclePayroll" }),
23
- component: t,
30
+ ...t(e, { currentBreadcrumbId: "createOffCyclePayroll" }),
31
+ component: y,
24
32
  payrollUuid: void 0
25
33
  };
26
34
  }
27
- const d = c(
28
- n.BREADCRUMB_NAVIGATE,
35
+ const n = o(
36
+ c.BREADCRUMB_NAVIGATE,
29
37
  "createOffCyclePayroll",
30
38
  f(
31
39
  (e, r) => r.payload.key === "createOffCyclePayroll"
32
40
  ),
33
- l(i)
34
- ), s = {
35
- createOffCyclePayroll: a(
36
- c(
37
- n.OFF_CYCLE_CREATED,
41
+ a(m)
42
+ ), P = {
43
+ createOffCyclePayroll: l(
44
+ o(
45
+ c.OFF_CYCLE_CREATED,
38
46
  "execution",
39
- l(
47
+ a(
40
48
  (e, r) => ({
41
- ...o(e, { currentBreadcrumbId: void 0 }),
49
+ ...t(e, { currentBreadcrumbId: void 0 }),
42
50
  payrollUuid: r.payload?.payrollUuid,
43
- component: y
51
+ component: d
44
52
  })
45
53
  )
54
+ ),
55
+ o(
56
+ c.OFF_CYCLE_BLOCKERS_VIEW_ALL,
57
+ "blockers",
58
+ a((e) => ({
59
+ ...u("blockers", e),
60
+ component: i,
61
+ payrollUuid: void 0
62
+ }))
46
63
  )
47
64
  ),
48
- execution: a(d)
65
+ blockers: l(n),
66
+ execution: l(n)
49
67
  };
50
68
  export {
51
69
  O as offCycleBreadcrumbsNodes,
52
- s as offCycleMachine
70
+ P as offCycleMachine
53
71
  };
54
72
  //# sourceMappingURL=offCycleStateMachine.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"offCycleStateMachine.js","sources":["../../../../src/components/Payroll/OffCycle/offCycleStateMachine.ts"],"sourcesContent":["import { state, transition, reduce, guard } from 'robot3'\nimport {\n OffCycleCreationContextual,\n OffCycleExecutionContextual,\n type OffCycleFlowContextInterface,\n} from './OffCycleFlowComponents'\nimport { componentEvents } from '@/shared/constants'\nimport type { MachineTransition } from '@/types/Helpers'\nimport type { BreadcrumbNodes } from '@/components/Common/FlowBreadcrumbs/FlowBreadcrumbsTypes'\nimport { patchBreadcrumbsHeader } from '@/helpers/breadcrumbHelpers'\n\n/** @internal */\nexport const offCycleBreadcrumbsNodes: BreadcrumbNodes = {\n createOffCyclePayroll: {\n parent: null,\n item: {\n id: 'createOffCyclePayroll',\n label: 'createOffCyclePayroll.breadcrumbLabel',\n namespace: 'Payroll.OffCycle',\n onNavigate: ((ctx: OffCycleFlowContextInterface) => ({\n ...patchBreadcrumbsHeader(ctx, { currentBreadcrumbId: 'createOffCyclePayroll' }),\n component: OffCycleCreationContextual,\n payrollUuid: undefined,\n })) as (context: unknown) => unknown,\n },\n },\n}\n\nfunction toCreationReducer(ctx: OffCycleFlowContextInterface): OffCycleFlowContextInterface {\n return {\n ...patchBreadcrumbsHeader(ctx, { currentBreadcrumbId: 'createOffCyclePayroll' }),\n component: OffCycleCreationContextual,\n payrollUuid: undefined,\n }\n}\n\nconst creationBreadcrumbTransition = transition(\n componentEvents.BREADCRUMB_NAVIGATE,\n 'createOffCyclePayroll',\n guard(\n (_ctx: OffCycleFlowContextInterface, ev: { payload: { key: string } }) =>\n ev.payload.key === 'createOffCyclePayroll',\n ),\n reduce(toCreationReducer),\n)\n\n/** @internal */\nexport const offCycleMachine = {\n createOffCyclePayroll: state<MachineTransition>(\n transition(\n componentEvents.OFF_CYCLE_CREATED,\n 'execution',\n reduce(\n (\n ctx: OffCycleFlowContextInterface,\n ev: { payload?: { payrollUuid?: string } },\n ): OffCycleFlowContextInterface => ({\n ...patchBreadcrumbsHeader(ctx, { currentBreadcrumbId: undefined }),\n payrollUuid: ev.payload?.payrollUuid,\n component: OffCycleExecutionContextual,\n }),\n ),\n ),\n ),\n\n execution: state<MachineTransition>(creationBreadcrumbTransition),\n}\n"],"names":["offCycleBreadcrumbsNodes","ctx","patchBreadcrumbsHeader","OffCycleCreationContextual","toCreationReducer","creationBreadcrumbTransition","transition","componentEvents","guard","_ctx","ev","reduce","offCycleMachine","state","OffCycleExecutionContextual"],"mappings":";;;;AAYO,MAAMA,IAA4C;AAAA,EACvD,uBAAuB;AAAA,IACrB,QAAQ;AAAA,IACR,MAAM;AAAA,MACJ,IAAI;AAAA,MACJ,OAAO;AAAA,MACP,WAAW;AAAA,MACX,aAAa,CAACC,OAAuC;AAAA,QACnD,GAAGC,EAAuBD,GAAK,EAAE,qBAAqB,yBAAyB;AAAA,QAC/E,WAAWE;AAAA,QACX,aAAa;AAAA,MAAA;AAAA,IACf;AAAA,EACF;AAEJ;AAEA,SAASC,EAAkBH,GAAiE;AAC1F,SAAO;AAAA,IACL,GAAGC,EAAuBD,GAAK,EAAE,qBAAqB,yBAAyB;AAAA,IAC/E,WAAWE;AAAA,IACX,aAAa;AAAA,EAAA;AAEjB;AAEA,MAAME,IAA+BC;AAAA,EACnCC,EAAgB;AAAA,EAChB;AAAA,EACAC;AAAA,IACE,CAACC,GAAoCC,MACnCA,EAAG,QAAQ,QAAQ;AAAA,EAAA;AAAA,EAEvBC,EAAOP,CAAiB;AAC1B,GAGaQ,IAAkB;AAAA,EAC7B,uBAAuBC;AAAA,IACrBP;AAAA,MACEC,EAAgB;AAAA,MAChB;AAAA,MACAI;AAAA,QACE,CACEV,GACAS,OACkC;AAAA,UAClC,GAAGR,EAAuBD,GAAK,EAAE,qBAAqB,QAAW;AAAA,UACjE,aAAaS,EAAG,SAAS;AAAA,UACzB,WAAWI;AAAA,QAAA;AAAA,MACb;AAAA,IACF;AAAA,EACF;AAAA,EAGF,WAAWD,EAAyBR,CAA4B;AAClE;"}
1
+ {"version":3,"file":"offCycleStateMachine.js","sources":["../../../../src/components/Payroll/OffCycle/offCycleStateMachine.ts"],"sourcesContent":["import { state, transition, reduce, guard } from 'robot3'\nimport {\n OffCycleCreationContextual,\n OffCycleExecutionContextual,\n PayrollBlockerListContextual,\n type OffCycleFlowContextInterface,\n} from './OffCycleFlowComponents'\nimport { componentEvents } from '@/shared/constants'\nimport type { MachineTransition } from '@/types/Helpers'\nimport type { BreadcrumbNodes } from '@/components/Common/FlowBreadcrumbs/FlowBreadcrumbsTypes'\nimport { patchBreadcrumbsHeader, updateBreadcrumbs } from '@/helpers/breadcrumbHelpers'\n\n/** @internal */\nexport const offCycleBreadcrumbsNodes: BreadcrumbNodes = {\n createOffCyclePayroll: {\n parent: null,\n item: {\n id: 'createOffCyclePayroll',\n label: 'createOffCyclePayroll.breadcrumbLabel',\n namespace: 'Payroll.OffCycle',\n onNavigate: ((ctx: OffCycleFlowContextInterface) => ({\n ...patchBreadcrumbsHeader(ctx, { currentBreadcrumbId: 'createOffCyclePayroll' }),\n component: OffCycleCreationContextual,\n payrollUuid: undefined,\n })) as (context: unknown) => unknown,\n },\n },\n blockers: {\n parent: 'createOffCyclePayroll',\n item: {\n id: 'blockers',\n label: 'breadcrumbLabel',\n namespace: 'Payroll.PayrollBlocker',\n },\n },\n}\n\nfunction toCreationReducer(ctx: OffCycleFlowContextInterface): OffCycleFlowContextInterface {\n return {\n ...patchBreadcrumbsHeader(ctx, { currentBreadcrumbId: 'createOffCyclePayroll' }),\n component: OffCycleCreationContextual,\n payrollUuid: undefined,\n }\n}\n\nconst creationBreadcrumbTransition = transition(\n componentEvents.BREADCRUMB_NAVIGATE,\n 'createOffCyclePayroll',\n guard(\n (_ctx: OffCycleFlowContextInterface, ev: { payload: { key: string } }) =>\n ev.payload.key === 'createOffCyclePayroll',\n ),\n reduce(toCreationReducer),\n)\n\n/** @internal */\nexport const offCycleMachine = {\n createOffCyclePayroll: state<MachineTransition>(\n transition(\n componentEvents.OFF_CYCLE_CREATED,\n 'execution',\n reduce(\n (\n ctx: OffCycleFlowContextInterface,\n ev: { payload?: { payrollUuid?: string } },\n ): OffCycleFlowContextInterface => ({\n ...patchBreadcrumbsHeader(ctx, { currentBreadcrumbId: undefined }),\n payrollUuid: ev.payload?.payrollUuid,\n component: OffCycleExecutionContextual,\n }),\n ),\n ),\n transition(\n componentEvents.OFF_CYCLE_BLOCKERS_VIEW_ALL,\n 'blockers',\n reduce((ctx: OffCycleFlowContextInterface): OffCycleFlowContextInterface => ({\n ...updateBreadcrumbs('blockers', ctx),\n component: PayrollBlockerListContextual,\n payrollUuid: undefined,\n })),\n ),\n ),\n\n blockers: state<MachineTransition>(creationBreadcrumbTransition),\n\n execution: state<MachineTransition>(creationBreadcrumbTransition),\n}\n"],"names":["offCycleBreadcrumbsNodes","ctx","patchBreadcrumbsHeader","OffCycleCreationContextual","toCreationReducer","creationBreadcrumbTransition","transition","componentEvents","guard","_ctx","ev","reduce","offCycleMachine","state","OffCycleExecutionContextual","updateBreadcrumbs","PayrollBlockerListContextual"],"mappings":";;;;AAaO,MAAMA,IAA4C;AAAA,EACvD,uBAAuB;AAAA,IACrB,QAAQ;AAAA,IACR,MAAM;AAAA,MACJ,IAAI;AAAA,MACJ,OAAO;AAAA,MACP,WAAW;AAAA,MACX,aAAa,CAACC,OAAuC;AAAA,QACnD,GAAGC,EAAuBD,GAAK,EAAE,qBAAqB,yBAAyB;AAAA,QAC/E,WAAWE;AAAA,QACX,aAAa;AAAA,MAAA;AAAA,IACf;AAAA,EACF;AAAA,EAEF,UAAU;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,MACJ,IAAI;AAAA,MACJ,OAAO;AAAA,MACP,WAAW;AAAA,IAAA;AAAA,EACb;AAEJ;AAEA,SAASC,EAAkBH,GAAiE;AAC1F,SAAO;AAAA,IACL,GAAGC,EAAuBD,GAAK,EAAE,qBAAqB,yBAAyB;AAAA,IAC/E,WAAWE;AAAA,IACX,aAAa;AAAA,EAAA;AAEjB;AAEA,MAAME,IAA+BC;AAAA,EACnCC,EAAgB;AAAA,EAChB;AAAA,EACAC;AAAA,IACE,CAACC,GAAoCC,MACnCA,EAAG,QAAQ,QAAQ;AAAA,EAAA;AAAA,EAEvBC,EAAOP,CAAiB;AAC1B,GAGaQ,IAAkB;AAAA,EAC7B,uBAAuBC;AAAA,IACrBP;AAAA,MACEC,EAAgB;AAAA,MAChB;AAAA,MACAI;AAAA,QACE,CACEV,GACAS,OACkC;AAAA,UAClC,GAAGR,EAAuBD,GAAK,EAAE,qBAAqB,QAAW;AAAA,UACjE,aAAaS,EAAG,SAAS;AAAA,UACzB,WAAWI;AAAA,QAAA;AAAA,MACb;AAAA,IACF;AAAA,IAEFR;AAAA,MACEC,EAAgB;AAAA,MAChB;AAAA,MACAI,EAAO,CAACV,OAAqE;AAAA,QAC3E,GAAGc,EAAkB,YAAYd,CAAG;AAAA,QACpC,WAAWe;AAAA,QACX,aAAa;AAAA,MAAA,EACb;AAAA,IAAA;AAAA,EACJ;AAAA,EAGF,UAAUH,EAAyBR,CAA4B;AAAA,EAE/D,WAAWQ,EAAyBR,CAA4B;AAClE;"}
@@ -1,52 +1,54 @@
1
1
  import { jsx as c } from "react/jsx-runtime";
2
- import { useState as x, useCallback as g, useMemo as H, useEffect as J } from "react";
3
- import { useForm as K, FormProvider as Z } from "react-hook-form";
4
- import { zodResolver as Q } from "@hookform/resolvers/zod";
2
+ import { useState as F, useCallback as y, useMemo as J, useEffect as Z } from "react";
3
+ import { useForm as Q, FormProvider as X } from "react-hook-form";
4
+ import { zodResolver as $ } from "@hookform/resolvers/zod";
5
5
  import { z as l } from "zod";
6
- import { useTranslation as T } from "react-i18next";
7
- import { usePayrollsCreateOffCycleMutation as X } from "@gusto/embedded-api/react-query/payrollsCreateOffCycle";
8
- import { usePayrollsGetBlockersSuspense as $ } from "@gusto/embedded-api/react-query/payrollsGetBlockers";
9
- import { WithholdingPayPeriod as ee, OffCycleReason as U } from "@gusto/embedded-api/models/operations/postv1companiescompanyidpayrolls";
10
- import { RFCDate as P } from "@gusto/embedded-api/types/rfcdate";
11
- import { useEmployeesListSuspense as oe } from "@gusto/embedded-api/react-query/employeesList";
12
- import { createOffCyclePayPeriodDateFormSchema as te } from "../OffCyclePayPeriodDateForm/OffCyclePayPeriodDateFormTypes.js";
13
- import { useOffCyclePayPeriodDateValidation as ne } from "../OffCyclePayPeriodDateForm/useOffCyclePayPeriodDateValidation.js";
14
- import { OffCycleCreationPresentation as se } from "./OffCycleCreationPresentation.js";
15
- import { useCompanyPaymentSpeed as le } from "../../../hooks/useCompanyPaymentSpeed.js";
16
- import { BaseComponent as ie } from "../../Base/Base.js";
17
- import { useBase as re } from "../../Base/useBase.js";
18
- import { useComponentDictionary as ae, useI18n as a } from "../../../i18n/I18n.js";
19
- import { componentEvents as ce } from "../../../shared/constants.js";
20
- import { SDKInternalError as me } from "../../../types/sdkError.js";
21
- import { Form as de } from "../../Common/Form/Form.js";
22
- import { OFF_CYCLE_REASON_DEFAULTS as y } from "../OffCycleReasonSelection/types.js";
23
- const ue = {
24
- bonus: U.Bonus,
25
- correction: U.Correction
6
+ import { useTranslation as W } from "react-i18next";
7
+ import { usePayrollsCreateOffCycleMutation as ee } from "@gusto/embedded-api/react-query/payrollsCreateOffCycle";
8
+ import { usePayrollsGetBlockersSuspense as oe } from "@gusto/embedded-api/react-query/payrollsGetBlockers";
9
+ import { WithholdingPayPeriod as te, OffCycleReason as A } from "@gusto/embedded-api/models/operations/postv1companiescompanyidpayrolls";
10
+ import { RFCDate as E } from "@gusto/embedded-api/types/rfcdate";
11
+ import { useEmployeesListSuspense as ne } from "@gusto/embedded-api/react-query/employeesList";
12
+ import { createOffCyclePayPeriodDateFormSchema as se } from "../OffCyclePayPeriodDateForm/OffCyclePayPeriodDateFormTypes.js";
13
+ import { useOffCyclePayPeriodDateValidation as le } from "../OffCyclePayPeriodDateForm/useOffCyclePayPeriodDateValidation.js";
14
+ import { OffCycleCreationPresentation as ie } from "./OffCycleCreationPresentation.js";
15
+ import { useCompanyPaymentSpeed as re } from "../../../hooks/useCompanyPaymentSpeed.js";
16
+ import { BaseComponent as ae } from "../../Base/Base.js";
17
+ import { useBase as ce } from "../../Base/useBase.js";
18
+ import { useComponentDictionary as me, useI18n as a } from "../../../i18n/I18n.js";
19
+ import { componentEvents as T } from "../../../shared/constants.js";
20
+ import { SDKInternalError as de } from "../../../types/sdkError.js";
21
+ import { Form as ue } from "../../Common/Form/Form.js";
22
+ import { OFF_CYCLE_REASON_DEFAULTS as f } from "../OffCycleReasonSelection/types.js";
23
+ const ye = {
24
+ bonus: A.Bonus,
25
+ correction: A.Correction
26
26
  };
27
- function Me(m) {
28
- return /* @__PURE__ */ c(ie, { ...m, children: /* @__PURE__ */ c(ye, { ...m }) });
27
+ function Ne(m) {
28
+ return /* @__PURE__ */ c(ae, { ...m, children: /* @__PURE__ */ c(fe, { ...m }) });
29
29
  }
30
- function ye({ dictionary: m, companyId: d, payrollType: f = "bonus", className: W }) {
31
- ae("Payroll.OffCycleCreation", m), a("Payroll.OffCycleCreation"), a("Payroll.OffCycleReasonSelection"), a("Payroll.OffCyclePayPeriodDateForm"), a("Payroll.OffCycleDeductionsSetting"), a("Payroll.EmployeeSelection");
32
- const { t: v } = T("Payroll.OffCyclePayPeriodDateForm"), { t: O } = T("Payroll.OffCycleCreation"), { onEvent: A, baseSubmitHandler: F } = re(), { paymentSpeedDays: E } = le(d), { minCheckDate: k, maxDate: N, minPayPeriodDate: L, today: R } = ne(E), { mutateAsync: M, isPending: _ } = X(), [p, S] = x({
33
- withholdingPayPeriod: ee.EveryOtherWeek,
34
- withholdingRate: y[f].withholdingType
35
- }), [B, h] = x(!1), j = g(() => {
36
- h(!0);
37
- }, []), I = g((e) => {
38
- S(e), h(!1);
39
- }, []), V = g(() => {
40
- h(!1);
41
- }, []), { data: w } = oe({
30
+ function fe({ dictionary: m, companyId: d, payrollType: h = "bonus", className: U }) {
31
+ me("Payroll.OffCycleCreation", m), a("Payroll.OffCycleCreation"), a("Payroll.OffCycleReasonSelection"), a("Payroll.OffCyclePayPeriodDateForm"), a("Payroll.OffCycleDeductionsSetting"), a("Payroll.EmployeeSelection");
32
+ const { t: v } = W("Payroll.OffCyclePayPeriodDateForm"), { t: O } = W("Payroll.OffCycleCreation"), { onEvent: p, baseSubmitHandler: L } = ce(), { paymentSpeedDays: k } = re(d), { minCheckDate: R, maxDate: _, minPayPeriodDate: B, today: w } = le(k), { mutateAsync: N, isPending: M } = ee(), [C, S] = F({
33
+ withholdingPayPeriod: te.EveryOtherWeek,
34
+ withholdingRate: f[h].withholdingType
35
+ }), [V, D] = F(!1), j = y(() => {
36
+ D(!0);
37
+ }, []), I = y((e) => {
38
+ S(e), D(!1);
39
+ }, []), Y = y(() => {
40
+ D(!1);
41
+ }, []), q = y(() => {
42
+ p(T.OFF_CYCLE_BLOCKERS_VIEW_ALL);
43
+ }, [p]), { data: b } = ne({
42
44
  companyId: d,
43
45
  onboardedActive: !0
44
- }), { data: q } = $({
46
+ }), { data: z } = oe({
45
47
  companyUuid: d
46
- }), z = (q.payrollBlockers ?? []).map((e) => ({
48
+ }), K = (z.payrollBlockers ?? []).map((e) => ({
47
49
  key: e.key,
48
50
  message: e.message
49
- })), b = H(() => [...w.showEmployees ?? []].sort((o, t) => {
51
+ })), x = J(() => [...b.showEmployees ?? []].sort((o, t) => {
50
52
  const n = o.lastName.localeCompare(t.lastName);
51
53
  return n !== 0 ? n : o.firstName.localeCompare(t.firstName);
52
54
  }).map((o) => {
@@ -56,16 +58,16 @@ function ye({ dictionary: m, companyId: d, payrollType: f = "bonus", className:
56
58
  value: o.uuid,
57
59
  description: n?.title || void 0
58
60
  };
59
- }), [w]), Y = (e, o) => (
61
+ }), [b]), G = (e, o) => (
60
62
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
61
63
  v(e, o)
62
- ), i = K({
64
+ ), i = Q({
63
65
  resolver: (e, o, t) => {
64
- const n = e.isCheckOnly, r = te(
65
- Y,
66
- n ? R : k,
67
- E
68
- ), D = l.object({
66
+ const n = e.isCheckOnly, r = se(
67
+ G,
68
+ n ? w : R,
69
+ k
70
+ ), P = l.object({
69
71
  reason: l.enum(["bonus", "correction"]),
70
72
  skipRegularDeductions: l.boolean(),
71
73
  includeAllEmployees: l.boolean(),
@@ -77,73 +79,74 @@ function ye({ dictionary: m, companyId: d, payrollType: f = "bonus", className:
77
79
  message: O("errors.noEmployeesSelected")
78
80
  });
79
81
  });
80
- return Q(D)(e, o, t);
82
+ return $(P)(e, o, t);
81
83
  },
82
84
  defaultValues: {
83
- reason: f,
85
+ reason: h,
84
86
  isCheckOnly: !1,
85
87
  startDate: null,
86
88
  endDate: null,
87
89
  checkDate: null,
88
- skipRegularDeductions: y[f].skipDeductions,
90
+ skipRegularDeductions: f[h].skipDeductions,
89
91
  includeAllEmployees: !1,
90
92
  selectedEmployeeUuids: []
91
93
  }
92
- }), C = i.watch("reason");
93
- J(() => {
94
+ }), g = i.watch("reason");
95
+ Z(() => {
94
96
  i.setValue(
95
97
  "skipRegularDeductions",
96
- y[C].skipDeductions
98
+ f[g].skipDeductions
97
99
  ), S((e) => ({
98
100
  ...e,
99
- withholdingRate: y[C].withholdingType
101
+ withholdingRate: f[g].withholdingType
100
102
  }));
101
- }, [C, i]);
102
- const G = async (e) => {
103
- const o = e.reason, t = e.checkDate, n = e.startDate, r = e.endDate, D = e.includeAllEmployees ? b.map((s) => s.value) : e.selectedEmployeeUuids.length > 0 ? e.selectedEmployeeUuids : void 0;
104
- await F(e, async () => {
105
- const s = await M({
103
+ }, [g, i]);
104
+ const H = async (e) => {
105
+ const o = e.reason, t = e.checkDate, n = e.startDate, r = e.endDate, P = e.includeAllEmployees ? x.map((s) => s.value) : e.selectedEmployeeUuids.length > 0 ? e.selectedEmployeeUuids : void 0;
106
+ await L(e, async () => {
107
+ const s = await N({
106
108
  request: {
107
109
  companyId: d,
108
110
  requestBody: {
109
111
  offCycle: !0,
110
- offCycleReason: ue[o],
111
- startDate: new P(n),
112
- endDate: new P(r),
113
- checkDate: new P(t),
112
+ offCycleReason: ye[o],
113
+ startDate: new E(n),
114
+ endDate: new E(r),
115
+ checkDate: new E(t),
114
116
  skipRegularDeductions: e.skipRegularDeductions,
115
117
  isCheckOnlyPayroll: e.isCheckOnly,
116
- employeeUuids: D,
117
- withholdingPayPeriod: p.withholdingPayPeriod,
118
- fixedWithholdingRate: p.withholdingRate === "supplemental"
118
+ employeeUuids: P,
119
+ withholdingPayPeriod: C.withholdingPayPeriod,
120
+ fixedWithholdingRate: C.withholdingRate === "supplemental"
119
121
  }
120
122
  }
121
123
  }), u = s.payrollUnprocessed?.payrollUuid ?? s.payrollUnprocessed?.uuid;
122
124
  if (!u)
123
- throw new me(O("errors.missingPayrollId"));
124
- A(ce.OFF_CYCLE_CREATED, { payrollUuid: u });
125
+ throw new de(O("errors.missingPayrollId"));
126
+ p(T.OFF_CYCLE_CREATED, { payrollUuid: u });
125
127
  });
126
128
  };
127
- return /* @__PURE__ */ c(Z, { ...i, children: /* @__PURE__ */ c(de, { onSubmit: i.handleSubmit(G), children: /* @__PURE__ */ c(
128
- se,
129
+ return /* @__PURE__ */ c(X, { ...i, children: /* @__PURE__ */ c(ue, { onSubmit: i.handleSubmit(H), children: /* @__PURE__ */ c(
130
+ ie,
129
131
  {
130
- employees: b,
131
- blockers: z,
132
- isPending: _,
133
- minCheckDate: k,
134
- minCheckOnlyDate: R,
135
- maxDate: N,
136
- minPayPeriodDate: L,
137
- taxWithholdingConfig: p,
138
- isTaxWithholdingModalOpen: B,
132
+ employees: x,
133
+ blockers: K,
134
+ onViewBlockersClick: q,
135
+ isPending: M,
136
+ minCheckDate: R,
137
+ minCheckOnlyDate: w,
138
+ maxDate: _,
139
+ minPayPeriodDate: B,
140
+ taxWithholdingConfig: C,
141
+ isTaxWithholdingModalOpen: V,
139
142
  onTaxWithholdingEditClick: j,
140
143
  onTaxWithholdingModalDone: I,
141
- onTaxWithholdingModalCancel: V,
142
- className: W
144
+ onTaxWithholdingModalCancel: Y,
145
+ className: U
143
146
  }
144
147
  ) }) });
145
148
  }
146
149
  export {
147
- Me as OffCycleCreation
150
+ Ne as OffCycleCreation
148
151
  };
149
152
  //# sourceMappingURL=OffCycleCreation.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"OffCycleCreation.js","sources":["../../../../src/components/Payroll/OffCycleCreation/OffCycleCreation.tsx"],"sourcesContent":["import { useCallback, useEffect, useMemo, useState } from 'react'\nimport { FormProvider, useForm, type Resolver } from 'react-hook-form'\nimport { zodResolver } from '@hookform/resolvers/zod'\nimport { z } from 'zod'\nimport { useTranslation } from 'react-i18next'\nimport { usePayrollsCreateOffCycleMutation } from '@gusto/embedded-api/react-query/payrollsCreateOffCycle'\nimport { usePayrollsGetBlockersSuspense } from '@gusto/embedded-api/react-query/payrollsGetBlockers'\nimport {\n OffCycleReason as ApiOffCycleReason,\n WithholdingPayPeriod,\n} from '@gusto/embedded-api/models/operations/postv1companiescompanyidpayrolls'\nimport { RFCDate } from '@gusto/embedded-api/types/rfcdate'\nimport { useEmployeesListSuspense } from '@gusto/embedded-api/react-query/employeesList'\nimport { OFF_CYCLE_REASON_DEFAULTS, type OffCycleReason } from '../OffCycleReasonSelection'\nimport type { ApiPayrollBlocker } from '../PayrollBlocker/payrollHelpers'\nimport { createOffCyclePayPeriodDateFormSchema } from '../OffCyclePayPeriodDateForm/OffCyclePayPeriodDateFormTypes'\nimport { useOffCyclePayPeriodDateValidation } from '../OffCyclePayPeriodDateForm/useOffCyclePayPeriodDateValidation'\nimport type { OffCycleTaxWithholdingConfig } from '../OffCycleTaxWithholdingTable/OffCycleTaxWithholdingTableTypes'\nimport type { OffCycleCreationFormData, OffCycleCreationProps } from './OffCycleCreationTypes'\nimport { OffCycleCreationPresentation } from './OffCycleCreationPresentation'\nimport { useCompanyPaymentSpeed } from '@/hooks/useCompanyPaymentSpeed'\nimport { BaseComponent } from '@/components/Base/Base'\nimport { useBase } from '@/components/Base/useBase'\nimport { useComponentDictionary, useI18n } from '@/i18n'\nimport { componentEvents } from '@/shared/constants'\nimport { SDKInternalError } from '@/types/sdkError'\nimport { Form } from '@/components/Common/Form'\nimport type { MultiSelectComboBoxOption } from '@/components/Common/UI/MultiSelectComboBox/MultiSelectComboBoxTypes'\n\nconst LOCAL_TO_API_REASON: Record<OffCycleReason, ApiOffCycleReason> = {\n bonus: ApiOffCycleReason.Bonus,\n correction: ApiOffCycleReason.Correction,\n}\n\n/**\n * Creation form for off-cycle (bonus or correction) payrolls.\n *\n * Walks the user through configuring pay period dates, selecting a reason, choosing\n * employees, and setting deduction and tax withholding preferences, then submits the\n * resulting payroll for execution.\n *\n * @events\n * | Event | Description | Data |\n * | ----- | ----------- | ---- |\n * | `offCycle/created` | The off-cycle payroll has been created | `{ payrollUuid: string }` |\n *\n * Changing the reason updates the deduction and withholding defaults — `'bonus'` skips\n * regular deductions and uses the supplemental withholding rate; `'correction'` includes\n * regular deductions and uses the regular rate.\n *\n * @param props - {@link OffCycleCreationProps} plus base component props.\n * @returns The off-cycle payroll creation form.\n * @public\n */\nexport function OffCycleCreation(props: OffCycleCreationProps) {\n return (\n <BaseComponent {...props}>\n <Root {...props} />\n </BaseComponent>\n )\n}\n\nfunction Root({ dictionary, companyId, payrollType = 'bonus', className }: OffCycleCreationProps) {\n useComponentDictionary('Payroll.OffCycleCreation', dictionary)\n useI18n('Payroll.OffCycleCreation')\n useI18n('Payroll.OffCycleReasonSelection')\n useI18n('Payroll.OffCyclePayPeriodDateForm')\n useI18n('Payroll.OffCycleDeductionsSetting')\n useI18n('Payroll.EmployeeSelection')\n\n const { t } = useTranslation('Payroll.OffCyclePayPeriodDateForm')\n const { t: tCreation } = useTranslation('Payroll.OffCycleCreation')\n const { onEvent, baseSubmitHandler } = useBase()\n\n const { paymentSpeedDays } = useCompanyPaymentSpeed(companyId)\n\n const { minCheckDate, maxDate, minPayPeriodDate, today } =\n useOffCyclePayPeriodDateValidation(paymentSpeedDays)\n const { mutateAsync: createOffCyclePayroll, isPending } = usePayrollsCreateOffCycleMutation()\n\n const [taxWithholdingConfig, setTaxWithholdingConfig] = useState<OffCycleTaxWithholdingConfig>({\n withholdingPayPeriod: WithholdingPayPeriod.EveryOtherWeek,\n withholdingRate: OFF_CYCLE_REASON_DEFAULTS[payrollType].withholdingType,\n })\n const [isTaxWithholdingModalOpen, setIsTaxWithholdingModalOpen] = useState(false)\n\n const handleTaxWithholdingEditClick = useCallback(() => {\n setIsTaxWithholdingModalOpen(true)\n }, [])\n\n const handleTaxWithholdingModalDone = useCallback((config: OffCycleTaxWithholdingConfig) => {\n setTaxWithholdingConfig(config)\n setIsTaxWithholdingModalOpen(false)\n }, [])\n\n const handleTaxWithholdingModalCancel = useCallback(() => {\n setIsTaxWithholdingModalOpen(false)\n }, [])\n\n const { data: employeesData } = useEmployeesListSuspense({\n companyId,\n onboardedActive: true,\n })\n\n const { data: blockersData } = usePayrollsGetBlockersSuspense({\n companyUuid: companyId,\n })\n\n const blockers: ApiPayrollBlocker[] = (blockersData.payrollBlockers ?? []).map(blocker => ({\n key: blocker.key,\n message: blocker.message,\n }))\n\n const employees: MultiSelectComboBoxOption[] = useMemo(() => {\n const employeeList = employeesData.showEmployees ?? []\n return [...employeeList]\n .sort((a, b) => {\n const lastNameComparison = a.lastName.localeCompare(b.lastName)\n if (lastNameComparison !== 0) return lastNameComparison\n return a.firstName.localeCompare(b.firstName)\n })\n .map(employee => {\n const fullName = [employee.firstName, employee.lastName].filter(Boolean).join(' ')\n const primaryJob = employee.jobs?.find(job => job.primary) ?? employee.jobs?.[0]\n return {\n label: fullName,\n value: employee.uuid,\n description: primaryJob?.title || undefined,\n }\n })\n }, [employeesData])\n\n const translateValidation = (key: string, options?: Record<string, unknown>): string =>\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n t(key as any, options as any) as string\n\n const dynamicResolver: Resolver<OffCycleCreationFormData> = (values, context, options) => {\n const isCheckOnly = values.isCheckOnly\n\n const dateSchema = createOffCyclePayPeriodDateFormSchema(\n translateValidation,\n isCheckOnly ? today : minCheckDate,\n paymentSpeedDays,\n )\n const schema = z\n .object({\n reason: z.enum(['bonus', 'correction']),\n skipRegularDeductions: z.boolean(),\n includeAllEmployees: z.boolean(),\n selectedEmployeeUuids: z.array(z.string()),\n })\n .and(dateSchema)\n .superRefine((data, ctx) => {\n if (!data.includeAllEmployees && data.selectedEmployeeUuids.length === 0) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: ['selectedEmployeeUuids'],\n message: tCreation('errors.noEmployeesSelected'),\n })\n }\n })\n\n return zodResolver(schema)(values, context, options)\n }\n\n const methods = useForm<OffCycleCreationFormData>({\n resolver: dynamicResolver,\n defaultValues: {\n reason: payrollType,\n isCheckOnly: false,\n startDate: null,\n endDate: null,\n checkDate: null,\n skipRegularDeductions: OFF_CYCLE_REASON_DEFAULTS[payrollType].skipDeductions,\n includeAllEmployees: false,\n selectedEmployeeUuids: [],\n },\n })\n\n const watchedReason = methods.watch('reason')\n\n useEffect(() => {\n methods.setValue(\n 'skipRegularDeductions',\n OFF_CYCLE_REASON_DEFAULTS[watchedReason].skipDeductions,\n )\n setTaxWithholdingConfig(prev => ({\n ...prev,\n withholdingRate: OFF_CYCLE_REASON_DEFAULTS[watchedReason].withholdingType,\n }))\n }, [watchedReason, methods])\n\n const onSubmit = async (data: OffCycleCreationFormData) => {\n const reason = data.reason\n const checkDate = data.checkDate!\n const startDate = data.startDate!\n const endDate = data.endDate!\n const employeeUuids = data.includeAllEmployees\n ? employees.map(e => e.value)\n : data.selectedEmployeeUuids.length > 0\n ? data.selectedEmployeeUuids\n : undefined\n\n await baseSubmitHandler(data, async () => {\n const response = await createOffCyclePayroll({\n request: {\n companyId,\n requestBody: {\n offCycle: true,\n offCycleReason: LOCAL_TO_API_REASON[reason],\n startDate: new RFCDate(startDate),\n endDate: new RFCDate(endDate),\n checkDate: new RFCDate(checkDate),\n skipRegularDeductions: data.skipRegularDeductions,\n isCheckOnlyPayroll: data.isCheckOnly,\n employeeUuids,\n withholdingPayPeriod: taxWithholdingConfig.withholdingPayPeriod,\n fixedWithholdingRate: taxWithholdingConfig.withholdingRate === 'supplemental',\n },\n },\n })\n\n const payrollUuid =\n response.payrollUnprocessed?.payrollUuid ?? response.payrollUnprocessed?.uuid\n\n if (!payrollUuid) {\n throw new SDKInternalError(tCreation('errors.missingPayrollId'))\n }\n\n onEvent(componentEvents.OFF_CYCLE_CREATED, { payrollUuid })\n })\n }\n\n return (\n <FormProvider {...methods}>\n <Form onSubmit={methods.handleSubmit(onSubmit)}>\n <OffCycleCreationPresentation\n employees={employees}\n blockers={blockers}\n isPending={isPending}\n minCheckDate={minCheckDate}\n minCheckOnlyDate={today}\n maxDate={maxDate}\n minPayPeriodDate={minPayPeriodDate}\n taxWithholdingConfig={taxWithholdingConfig}\n isTaxWithholdingModalOpen={isTaxWithholdingModalOpen}\n onTaxWithholdingEditClick={handleTaxWithholdingEditClick}\n onTaxWithholdingModalDone={handleTaxWithholdingModalDone}\n onTaxWithholdingModalCancel={handleTaxWithholdingModalCancel}\n className={className}\n />\n </Form>\n </FormProvider>\n )\n}\n"],"names":["LOCAL_TO_API_REASON","ApiOffCycleReason","OffCycleCreation","props","jsx","BaseComponent","Root","dictionary","companyId","payrollType","className","useComponentDictionary","useI18n","t","useTranslation","tCreation","onEvent","baseSubmitHandler","useBase","paymentSpeedDays","useCompanyPaymentSpeed","minCheckDate","maxDate","minPayPeriodDate","today","useOffCyclePayPeriodDateValidation","createOffCyclePayroll","isPending","usePayrollsCreateOffCycleMutation","taxWithholdingConfig","setTaxWithholdingConfig","useState","WithholdingPayPeriod","OFF_CYCLE_REASON_DEFAULTS","isTaxWithholdingModalOpen","setIsTaxWithholdingModalOpen","handleTaxWithholdingEditClick","useCallback","handleTaxWithholdingModalDone","config","handleTaxWithholdingModalCancel","employeesData","useEmployeesListSuspense","blockersData","usePayrollsGetBlockersSuspense","blockers","blocker","employees","useMemo","a","b","lastNameComparison","employee","fullName","primaryJob","job","translateValidation","key","options","methods","useForm","values","context","isCheckOnly","dateSchema","createOffCyclePayPeriodDateFormSchema","schema","z","data","ctx","zodResolver","watchedReason","useEffect","prev","onSubmit","reason","checkDate","startDate","endDate","employeeUuids","e","response","RFCDate","payrollUuid","SDKInternalError","componentEvents","FormProvider","Form","OffCycleCreationPresentation"],"mappings":"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"}
1
+ {"version":3,"file":"OffCycleCreation.js","sources":["../../../../src/components/Payroll/OffCycleCreation/OffCycleCreation.tsx"],"sourcesContent":["import { useCallback, useEffect, useMemo, useState } from 'react'\nimport { FormProvider, useForm, type Resolver } from 'react-hook-form'\nimport { zodResolver } from '@hookform/resolvers/zod'\nimport { z } from 'zod'\nimport { useTranslation } from 'react-i18next'\nimport { usePayrollsCreateOffCycleMutation } from '@gusto/embedded-api/react-query/payrollsCreateOffCycle'\nimport { usePayrollsGetBlockersSuspense } from '@gusto/embedded-api/react-query/payrollsGetBlockers'\nimport {\n OffCycleReason as ApiOffCycleReason,\n WithholdingPayPeriod,\n} from '@gusto/embedded-api/models/operations/postv1companiescompanyidpayrolls'\nimport { RFCDate } from '@gusto/embedded-api/types/rfcdate'\nimport { useEmployeesListSuspense } from '@gusto/embedded-api/react-query/employeesList'\nimport { OFF_CYCLE_REASON_DEFAULTS, type OffCycleReason } from '../OffCycleReasonSelection'\nimport type { ApiPayrollBlocker } from '../PayrollBlocker/payrollHelpers'\nimport { createOffCyclePayPeriodDateFormSchema } from '../OffCyclePayPeriodDateForm/OffCyclePayPeriodDateFormTypes'\nimport { useOffCyclePayPeriodDateValidation } from '../OffCyclePayPeriodDateForm/useOffCyclePayPeriodDateValidation'\nimport type { OffCycleTaxWithholdingConfig } from '../OffCycleTaxWithholdingTable/OffCycleTaxWithholdingTableTypes'\nimport type { OffCycleCreationFormData, OffCycleCreationProps } from './OffCycleCreationTypes'\nimport { OffCycleCreationPresentation } from './OffCycleCreationPresentation'\nimport { useCompanyPaymentSpeed } from '@/hooks/useCompanyPaymentSpeed'\nimport { BaseComponent } from '@/components/Base/Base'\nimport { useBase } from '@/components/Base/useBase'\nimport { useComponentDictionary, useI18n } from '@/i18n'\nimport { componentEvents } from '@/shared/constants'\nimport { SDKInternalError } from '@/types/sdkError'\nimport { Form } from '@/components/Common/Form'\nimport type { MultiSelectComboBoxOption } from '@/components/Common/UI/MultiSelectComboBox/MultiSelectComboBoxTypes'\n\nconst LOCAL_TO_API_REASON: Record<OffCycleReason, ApiOffCycleReason> = {\n bonus: ApiOffCycleReason.Bonus,\n correction: ApiOffCycleReason.Correction,\n}\n\n/**\n * Creation form for off-cycle (bonus or correction) payrolls.\n *\n * Walks the user through configuring pay period dates, selecting a reason, choosing\n * employees, and setting deduction and tax withholding preferences, then submits the\n * resulting payroll for execution.\n *\n * @events\n * | Event | Description | Data |\n * | ----- | ----------- | ---- |\n * | `offCycle/created` | The off-cycle payroll has been created | `{ payrollUuid: string }` |\n * | `offCycle/blockers/viewAll` | The user chose to view the company's payroll blockers from the blocker alert | none |\n *\n * Changing the reason updates the deduction and withholding defaults — `'bonus'` skips\n * regular deductions and uses the supplemental withholding rate; `'correction'` includes\n * regular deductions and uses the regular rate.\n *\n * @param props - {@link OffCycleCreationProps} plus base component props.\n * @returns The off-cycle payroll creation form.\n * @public\n */\nexport function OffCycleCreation(props: OffCycleCreationProps) {\n return (\n <BaseComponent {...props}>\n <Root {...props} />\n </BaseComponent>\n )\n}\n\nfunction Root({ dictionary, companyId, payrollType = 'bonus', className }: OffCycleCreationProps) {\n useComponentDictionary('Payroll.OffCycleCreation', dictionary)\n useI18n('Payroll.OffCycleCreation')\n useI18n('Payroll.OffCycleReasonSelection')\n useI18n('Payroll.OffCyclePayPeriodDateForm')\n useI18n('Payroll.OffCycleDeductionsSetting')\n useI18n('Payroll.EmployeeSelection')\n\n const { t } = useTranslation('Payroll.OffCyclePayPeriodDateForm')\n const { t: tCreation } = useTranslation('Payroll.OffCycleCreation')\n const { onEvent, baseSubmitHandler } = useBase()\n\n const { paymentSpeedDays } = useCompanyPaymentSpeed(companyId)\n\n const { minCheckDate, maxDate, minPayPeriodDate, today } =\n useOffCyclePayPeriodDateValidation(paymentSpeedDays)\n const { mutateAsync: createOffCyclePayroll, isPending } = usePayrollsCreateOffCycleMutation()\n\n const [taxWithholdingConfig, setTaxWithholdingConfig] = useState<OffCycleTaxWithholdingConfig>({\n withholdingPayPeriod: WithholdingPayPeriod.EveryOtherWeek,\n withholdingRate: OFF_CYCLE_REASON_DEFAULTS[payrollType].withholdingType,\n })\n const [isTaxWithholdingModalOpen, setIsTaxWithholdingModalOpen] = useState(false)\n\n const handleTaxWithholdingEditClick = useCallback(() => {\n setIsTaxWithholdingModalOpen(true)\n }, [])\n\n const handleTaxWithholdingModalDone = useCallback((config: OffCycleTaxWithholdingConfig) => {\n setTaxWithholdingConfig(config)\n setIsTaxWithholdingModalOpen(false)\n }, [])\n\n const handleTaxWithholdingModalCancel = useCallback(() => {\n setIsTaxWithholdingModalOpen(false)\n }, [])\n\n const handleViewBlockers = useCallback(() => {\n onEvent(componentEvents.OFF_CYCLE_BLOCKERS_VIEW_ALL)\n }, [onEvent])\n\n const { data: employeesData } = useEmployeesListSuspense({\n companyId,\n onboardedActive: true,\n })\n\n const { data: blockersData } = usePayrollsGetBlockersSuspense({\n companyUuid: companyId,\n })\n\n const blockers: ApiPayrollBlocker[] = (blockersData.payrollBlockers ?? []).map(blocker => ({\n key: blocker.key,\n message: blocker.message,\n }))\n\n const employees: MultiSelectComboBoxOption[] = useMemo(() => {\n const employeeList = employeesData.showEmployees ?? []\n return [...employeeList]\n .sort((a, b) => {\n const lastNameComparison = a.lastName.localeCompare(b.lastName)\n if (lastNameComparison !== 0) return lastNameComparison\n return a.firstName.localeCompare(b.firstName)\n })\n .map(employee => {\n const fullName = [employee.firstName, employee.lastName].filter(Boolean).join(' ')\n const primaryJob = employee.jobs?.find(job => job.primary) ?? employee.jobs?.[0]\n return {\n label: fullName,\n value: employee.uuid,\n description: primaryJob?.title || undefined,\n }\n })\n }, [employeesData])\n\n const translateValidation = (key: string, options?: Record<string, unknown>): string =>\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n t(key as any, options as any) as string\n\n const dynamicResolver: Resolver<OffCycleCreationFormData> = (values, context, options) => {\n const isCheckOnly = values.isCheckOnly\n\n const dateSchema = createOffCyclePayPeriodDateFormSchema(\n translateValidation,\n isCheckOnly ? today : minCheckDate,\n paymentSpeedDays,\n )\n const schema = z\n .object({\n reason: z.enum(['bonus', 'correction']),\n skipRegularDeductions: z.boolean(),\n includeAllEmployees: z.boolean(),\n selectedEmployeeUuids: z.array(z.string()),\n })\n .and(dateSchema)\n .superRefine((data, ctx) => {\n if (!data.includeAllEmployees && data.selectedEmployeeUuids.length === 0) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: ['selectedEmployeeUuids'],\n message: tCreation('errors.noEmployeesSelected'),\n })\n }\n })\n\n return zodResolver(schema)(values, context, options)\n }\n\n const methods = useForm<OffCycleCreationFormData>({\n resolver: dynamicResolver,\n defaultValues: {\n reason: payrollType,\n isCheckOnly: false,\n startDate: null,\n endDate: null,\n checkDate: null,\n skipRegularDeductions: OFF_CYCLE_REASON_DEFAULTS[payrollType].skipDeductions,\n includeAllEmployees: false,\n selectedEmployeeUuids: [],\n },\n })\n\n const watchedReason = methods.watch('reason')\n\n useEffect(() => {\n methods.setValue(\n 'skipRegularDeductions',\n OFF_CYCLE_REASON_DEFAULTS[watchedReason].skipDeductions,\n )\n setTaxWithholdingConfig(prev => ({\n ...prev,\n withholdingRate: OFF_CYCLE_REASON_DEFAULTS[watchedReason].withholdingType,\n }))\n }, [watchedReason, methods])\n\n const onSubmit = async (data: OffCycleCreationFormData) => {\n const reason = data.reason\n const checkDate = data.checkDate!\n const startDate = data.startDate!\n const endDate = data.endDate!\n const employeeUuids = data.includeAllEmployees\n ? employees.map(e => e.value)\n : data.selectedEmployeeUuids.length > 0\n ? data.selectedEmployeeUuids\n : undefined\n\n await baseSubmitHandler(data, async () => {\n const response = await createOffCyclePayroll({\n request: {\n companyId,\n requestBody: {\n offCycle: true,\n offCycleReason: LOCAL_TO_API_REASON[reason],\n startDate: new RFCDate(startDate),\n endDate: new RFCDate(endDate),\n checkDate: new RFCDate(checkDate),\n skipRegularDeductions: data.skipRegularDeductions,\n isCheckOnlyPayroll: data.isCheckOnly,\n employeeUuids,\n withholdingPayPeriod: taxWithholdingConfig.withholdingPayPeriod,\n fixedWithholdingRate: taxWithholdingConfig.withholdingRate === 'supplemental',\n },\n },\n })\n\n const payrollUuid =\n response.payrollUnprocessed?.payrollUuid ?? response.payrollUnprocessed?.uuid\n\n if (!payrollUuid) {\n throw new SDKInternalError(tCreation('errors.missingPayrollId'))\n }\n\n onEvent(componentEvents.OFF_CYCLE_CREATED, { payrollUuid })\n })\n }\n\n return (\n <FormProvider {...methods}>\n <Form onSubmit={methods.handleSubmit(onSubmit)}>\n <OffCycleCreationPresentation\n employees={employees}\n blockers={blockers}\n onViewBlockersClick={handleViewBlockers}\n isPending={isPending}\n minCheckDate={minCheckDate}\n minCheckOnlyDate={today}\n maxDate={maxDate}\n minPayPeriodDate={minPayPeriodDate}\n taxWithholdingConfig={taxWithholdingConfig}\n isTaxWithholdingModalOpen={isTaxWithholdingModalOpen}\n onTaxWithholdingEditClick={handleTaxWithholdingEditClick}\n onTaxWithholdingModalDone={handleTaxWithholdingModalDone}\n onTaxWithholdingModalCancel={handleTaxWithholdingModalCancel}\n className={className}\n />\n </Form>\n </FormProvider>\n )\n}\n"],"names":["LOCAL_TO_API_REASON","ApiOffCycleReason","OffCycleCreation","props","jsx","BaseComponent","Root","dictionary","companyId","payrollType","className","useComponentDictionary","useI18n","t","useTranslation","tCreation","onEvent","baseSubmitHandler","useBase","paymentSpeedDays","useCompanyPaymentSpeed","minCheckDate","maxDate","minPayPeriodDate","today","useOffCyclePayPeriodDateValidation","createOffCyclePayroll","isPending","usePayrollsCreateOffCycleMutation","taxWithholdingConfig","setTaxWithholdingConfig","useState","WithholdingPayPeriod","OFF_CYCLE_REASON_DEFAULTS","isTaxWithholdingModalOpen","setIsTaxWithholdingModalOpen","handleTaxWithholdingEditClick","useCallback","handleTaxWithholdingModalDone","config","handleTaxWithholdingModalCancel","handleViewBlockers","componentEvents","employeesData","useEmployeesListSuspense","blockersData","usePayrollsGetBlockersSuspense","blockers","blocker","employees","useMemo","a","b","lastNameComparison","employee","fullName","primaryJob","job","translateValidation","key","options","methods","useForm","values","context","isCheckOnly","dateSchema","createOffCyclePayPeriodDateFormSchema","schema","z","data","ctx","zodResolver","watchedReason","useEffect","prev","onSubmit","reason","checkDate","startDate","endDate","employeeUuids","e","response","RFCDate","payrollUuid","SDKInternalError","FormProvider","Form","OffCycleCreationPresentation"],"mappings":"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"}