@gusto/embedded-react-sdk 0.56.3 → 0.56.5

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 (74) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/dist/components/Common/DocumentEmbed/DocumentEmbed.js +18 -0
  3. package/dist/components/Common/DocumentEmbed/DocumentEmbed.js.map +1 -0
  4. package/dist/components/Common/DocumentViewer/DocumentViewer.js +35 -29
  5. package/dist/components/Common/DocumentViewer/DocumentViewer.js.map +1 -1
  6. package/dist/components/Common/FieldCaption/FieldCaption.js +21 -18
  7. package/dist/components/Common/FieldCaption/FieldCaption.js.map +1 -1
  8. package/dist/components/Common/FieldCaption/FieldCaption.module.scss.js +5 -3
  9. package/dist/components/Common/FieldCaption/FieldCaption.module.scss.js.map +1 -1
  10. package/dist/components/Contractor/ContractorList/management/ManagementContractorList.js +64 -61
  11. package/dist/components/Contractor/ContractorList/management/ManagementContractorList.js.map +1 -1
  12. package/dist/components/Contractor/ContractorList/management/ManagementContractorListView.js +133 -134
  13. package/dist/components/Contractor/ContractorList/management/ManagementContractorListView.js.map +1 -1
  14. package/dist/components/Contractor/ContractorListFlow/ContractorListFlow.js.map +1 -1
  15. package/dist/components/Contractor/ContractorListFlow/ContractorListFlowComponents.js +22 -9
  16. package/dist/components/Contractor/ContractorListFlow/ContractorListFlowComponents.js.map +1 -1
  17. package/dist/components/Contractor/ContractorListFlow/contractorListStateMachine.js +51 -20
  18. package/dist/components/Contractor/ContractorListFlow/contractorListStateMachine.js.map +1 -1
  19. package/dist/components/Contractor/Dismissal/Dismissal.js +77 -0
  20. package/dist/components/Contractor/Dismissal/Dismissal.js.map +1 -0
  21. package/dist/components/Contractor/Dismissal/DismissalPresentation.js +57 -0
  22. package/dist/components/Contractor/Dismissal/DismissalPresentation.js.map +1 -0
  23. package/dist/components/Contractor/Dismissal/useDismissal/useDismissal.js +44 -0
  24. package/dist/components/Contractor/Dismissal/useDismissal/useDismissal.js.map +1 -0
  25. package/dist/components/Contractor/Payments/PaymentStatement/PaymentStatementPresentation.js +45 -41
  26. package/dist/components/Contractor/Payments/PaymentStatement/PaymentStatementPresentation.js.map +1 -1
  27. package/dist/components/Contractor/exports/contractorManagement.js +56 -54
  28. package/dist/components/Contractor/exports/contractorManagement.js.map +1 -1
  29. package/dist/components/Payroll/PayrollEditEmployee/PayrollEditEmployeePresentation.js +201 -196
  30. package/dist/components/Payroll/PayrollEditEmployee/PayrollEditEmployeePresentation.js.map +1 -1
  31. package/dist/components/Payroll/PayrollEditEmployee/shared/usePayrollEditEmployeeForm/fields.js +55 -52
  32. package/dist/components/Payroll/PayrollEditEmployee/shared/usePayrollEditEmployeeForm/fields.js.map +1 -1
  33. package/dist/components/Payroll/PayrollEditEmployee/shared/usePayrollEditEmployeeForm/payrollEditEmployeeSchema.js +38 -29
  34. package/dist/components/Payroll/PayrollEditEmployee/shared/usePayrollEditEmployeeForm/payrollEditEmployeeSchema.js.map +1 -1
  35. package/dist/components/Payroll/PayrollExecutionFlow/payrollExecutionMachine.js +17 -14
  36. package/dist/components/Payroll/PayrollExecutionFlow/payrollExecutionMachine.js.map +1 -1
  37. package/dist/components/Payroll/UNSTABLE_PayrollEditEmployee/UNSTABLE_PayrollEditEmployee.js +72 -68
  38. package/dist/components/Payroll/UNSTABLE_PayrollEditEmployee/UNSTABLE_PayrollEditEmployee.js.map +1 -1
  39. package/dist/contexts/ComponentAdapter/useComponentContext.js.map +1 -1
  40. package/dist/i18n/I18n.js +1 -0
  41. package/dist/i18n/I18n.js.map +1 -1
  42. package/dist/i18n/en/Contractor.Dismissal.json.js +20 -0
  43. package/dist/i18n/en/Contractor.Dismissal.json.js.map +1 -0
  44. package/dist/i18n/en/Contractor.Payments.PaymentStatement.json.js +2 -2
  45. package/dist/i18n/en/Payroll.PayrollEditEmployee.json.js +38 -38
  46. package/dist/i18n/en/Payroll.UNSTABLE_PayrollEditEmployee.json.js +31 -31
  47. package/dist/i18n/en/common.json.js +37 -35
  48. package/dist/i18n/en/common.json.js.map +1 -1
  49. package/dist/package.json.js +1 -1
  50. package/dist/shared/constants.js +1 -0
  51. package/dist/shared/constants.js.map +1 -1
  52. package/dist/src/components/Common/DocumentEmbed/DocumentEmbed.d.ts +3 -0
  53. package/dist/src/components/Common/DocumentEmbed/DocumentEmbedTypes.d.ts +25 -0
  54. package/dist/src/components/Common/DocumentEmbed/index.d.ts +2 -0
  55. package/dist/src/components/Contractor/ContractorList/management/ManagementContractorList.d.ts +2 -0
  56. package/dist/src/components/Contractor/ContractorList/management/ManagementContractorListView.d.ts +3 -1
  57. package/dist/src/components/Contractor/ContractorListFlow/ContractorListFlow.d.ts +6 -4
  58. package/dist/src/components/Contractor/ContractorListFlow/ContractorListFlowComponents.d.ts +2 -0
  59. package/dist/src/components/Contractor/ContractorListFlow/contractorListStateMachine.d.ts +1 -0
  60. package/dist/src/components/Contractor/ContractorListFlow/contractorListStateMachine.test.d.ts +1 -0
  61. package/dist/src/components/Contractor/Dismissal/Dismissal.d.ts +45 -0
  62. package/dist/src/components/Contractor/Dismissal/DismissalPresentation.d.ts +17 -0
  63. package/dist/src/components/Contractor/Dismissal/useDismissal/useDismissal.d.ts +41 -0
  64. package/dist/src/components/Contractor/Dismissal/useDismissal/useDismissal.test.d.ts +1 -0
  65. package/dist/src/components/Contractor/exports/contractorManagement.d.ts +1 -0
  66. package/dist/src/components/Payroll/PayrollEditEmployee/shared/usePayrollEditEmployeeForm/payrollEditEmployeeSchema.d.ts +19 -0
  67. package/dist/src/contexts/ComponentAdapter/componentAdapterTypes.d.ts +1 -0
  68. package/dist/src/contexts/ComponentAdapter/useComponentContext.d.ts +5 -2
  69. package/dist/src/i18n/en/common.json.d.ts +3 -0
  70. package/dist/src/i18n/types.d.ts +47 -0
  71. package/dist/src/shared/constants.d.ts +2 -0
  72. package/dist/style.css +1 -1
  73. package/docs/guides/endpoint-inventory.json +18 -0
  74. package/package.json +1 -1
@@ -1,41 +1,48 @@
1
1
  import { z as e } from "zod";
2
- import { PayrollUpdatePaymentMethod as i } from "@gusto/embedded-api/models/components/payrollupdate";
3
- const f = [
4
- i.DirectDeposit,
5
- i.Check
6
- ], I = f.map((r) => ({ value: r, label: r })), c = {
2
+ import { PayrollUpdatePaymentMethod as E } from "@gusto/embedded-api/models/components/payrollupdate";
3
+ const N = [
4
+ E.DirectDeposit,
5
+ E.Check
6
+ ], I = N.map((r) => ({ value: r, label: r })), n = {
7
7
  NEGATIVE_AMOUNT: "NEGATIVE_AMOUNT",
8
+ MAX_HOURS: "MAX_HOURS",
8
9
  REIMBURSEMENT_AMOUNT: "REIMBURSEMENT_AMOUNT",
10
+ MAX_REIMBURSEMENT_AMOUNT: "MAX_REIMBURSEMENT_AMOUNT",
9
11
  REQUIRED_WORKWEEK: "REQUIRED_WORKWEEK"
10
- }, p = /^\d+(\.\d+)?$/, t = e.string().refine((r) => r === "" || p.test(r), {
11
- message: c.NEGATIVE_AMOUNT
12
- }), M = e.object({
12
+ }, R = /^\d+(\.\d+)?$/, t = e.string().refine((r) => r === "" || R.test(r), {
13
+ message: n.NEGATIVE_AMOUNT
14
+ }), A = 99999, U = t.refine(
15
+ (r) => r === "" || Number(r) <= A,
16
+ { message: n.MAX_HOURS }
17
+ ), O = e.object({
13
18
  uuid: e.string().nullable().optional(),
14
19
  description: e.string(),
15
20
  amount: e.string(),
16
21
  recurring: e.boolean().optional()
17
- }), R = e.object({
22
+ }), T = 1e6, p = e.object({
18
23
  description: e.string(),
19
24
  amount: e.string().refine((r) => parseFloat(r) > 0, {
20
- message: c.REIMBURSEMENT_AMOUNT
25
+ message: n.REIMBURSEMENT_AMOUNT
26
+ }).refine((r) => parseFloat(r) <= T, {
27
+ message: n.MAX_REIMBURSEMENT_AMOUNT
21
28
  })
22
29
  });
23
- function a(r, n, E) {
24
- for (const [d, m] of Object.entries(n))
25
- for (const [u, g] of Object.entries(m)) {
26
- const o = Object.entries(g);
27
- if (!(o.length <= 1 || !o.some(([, s]) => s !== "")))
28
- for (const [s, l] of o)
29
- l === "" && r.addIssue({
30
+ function c(r, o, a) {
31
+ for (const [m, M] of Object.entries(o))
32
+ for (const [d, u] of Object.entries(M)) {
33
+ const s = Object.entries(u);
34
+ if (!(s.length <= 1 || !s.some(([, i]) => i !== "")))
35
+ for (const [i, g] of s)
36
+ g === "" && r.addIssue({
30
37
  code: e.ZodIssueCode.custom,
31
- message: c.REQUIRED_WORKWEEK,
32
- path: [E, d, u, s]
38
+ message: n.REQUIRED_WORKWEEK,
39
+ path: [a, m, d, i]
33
40
  });
34
41
  }
35
42
  }
36
- function A() {
43
+ function S() {
37
44
  return e.object({
38
- hours: e.record(e.string(), e.record(e.string(), e.record(e.string(), t))),
45
+ hours: e.record(e.string(), e.record(e.string(), e.record(e.string(), U))),
39
46
  overtimeIncludedEarnings: e.record(
40
47
  e.string(),
41
48
  e.record(e.string(), e.record(e.string(), t))
@@ -43,21 +50,23 @@ function A() {
43
50
  overtimeExcludedEarnings: e.record(e.string(), e.record(e.string(), t)),
44
51
  timeOff: e.record(e.string(), t),
45
52
  finalPayout: e.record(e.string(), t),
46
- reimbursements: e.array(M),
53
+ reimbursements: e.array(O),
47
54
  // Binding shape only — the draft is validated against `reimbursementDraftSchema`
48
55
  // at save time, not by the main resolver, so a half-filled draft never blocks
49
56
  // the payroll submit.
50
57
  reimbursementDraft: e.object({ description: e.string(), amount: e.string() }),
51
- paymentMethod: e.enum(i).optional()
52
- }).superRefine((r, n) => {
53
- a(n, r.hours, "hours"), a(n, r.overtimeIncludedEarnings, "overtimeIncludedEarnings");
58
+ paymentMethod: e.enum(E).optional()
59
+ }).superRefine((r, o) => {
60
+ c(o, r.hours, "hours"), c(o, r.overtimeIncludedEarnings, "overtimeIncludedEarnings");
54
61
  });
55
62
  }
56
63
  export {
64
+ A as MAX_HOURS,
65
+ T as MAX_REIMBURSEMENT_AMOUNT,
57
66
  I as PAYMENT_METHOD_OPTIONS,
58
- f as PAYMENT_METHOD_VALUES,
59
- c as PayrollEditEmployeeErrorCodes,
60
- A as createPayrollEditEmployeeSchema,
61
- R as reimbursementDraftSchema
67
+ N as PAYMENT_METHOD_VALUES,
68
+ n as PayrollEditEmployeeErrorCodes,
69
+ S as createPayrollEditEmployeeSchema,
70
+ p as reimbursementDraftSchema
62
71
  };
63
72
  //# sourceMappingURL=payrollEditEmployeeSchema.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"payrollEditEmployeeSchema.js","sources":["../../../../../../src/components/Payroll/PayrollEditEmployee/shared/usePayrollEditEmployeeForm/payrollEditEmployeeSchema.ts"],"sourcesContent":["import { z } from 'zod'\nimport { PayrollUpdatePaymentMethod } from '@gusto/embedded-api/models/components/payrollupdate'\n\n/**\n * Payment-method option values, in display order. The hook publishes these on\n * `fieldsMetadata.paymentMethod` via `withOptions`; the UI supplies the\n * translated labels through `getOptionLabel`.\n *\n * @internal\n */\nexport const PAYMENT_METHOD_VALUES = [\n PayrollUpdatePaymentMethod.DirectDeposit,\n PayrollUpdatePaymentMethod.Check,\n] as const\n\n/** @internal */\nexport const PAYMENT_METHOD_OPTIONS = PAYMENT_METHOD_VALUES.map(value => ({ value, label: value }))\n\n/**\n * Validation error codes produced by the payroll edit-employee schema.\n *\n * @public\n */\nexport const PayrollEditEmployeeErrorCodes = {\n NEGATIVE_AMOUNT: 'NEGATIVE_AMOUNT',\n REIMBURSEMENT_AMOUNT: 'REIMBURSEMENT_AMOUNT',\n REQUIRED_WORKWEEK: 'REQUIRED_WORKWEEK',\n} as const\n\n/**\n * Union of validation error codes emitted by the payroll edit-employee schema.\n *\n * @public\n */\nexport type PayrollEditEmployeeErrorCode =\n (typeof PayrollEditEmployeeErrorCodes)[keyof typeof PayrollEditEmployeeErrorCodes]\n\n// A plain, non-negative decimal: one or more digits with an optional fractional\n// part. Deliberately strict — `parseFloat` would accept \"5ea\" (→ 5), \"Infinity\",\n// and \"1e3\", any of which would silently corrupt the amount downstream.\nconst NON_NEGATIVE = /^\\d+(\\.\\d+)?$/\n\n// Hours and amounts are entered as strings. Blank is allowed (it means \"not\n// provided\" — see the submit rule), but any provided value must be a valid,\n// non-negative number.\nconst nonNegativeAmount = z.string().refine(value => value === '' || NON_NEGATIVE.test(value), {\n message: PayrollEditEmployeeErrorCodes.NEGATIVE_AMOUNT,\n})\n\n// Committed reimbursement rows are presentational passthrough: they hold data\n// that was already validated when its draft was saved (or came from the server),\n// so the amount is a plain string here. All reimbursement validation lives in\n// `reimbursementDraftSchema` below, mirroring the legacy editor.\nconst reimbursementSchema = z.object({\n uuid: z.string().nullable().optional(),\n description: z.string(),\n amount: z.string(),\n recurring: z.boolean().optional(),\n})\n\n/**\n * The single reimbursement validation schema: the \"add reimbursement\" draft row.\n * Amount must be a number greater than zero, matching the legacy editor's\n * inline validation. The hook validates the draft against this before committing\n * it to the presentational `reimbursements` list.\n *\n * @internal\n */\nexport const reimbursementDraftSchema = z.object({\n description: z.string(),\n amount: z.string().refine(value => parseFloat(value) > 0, {\n message: PayrollEditEmployeeErrorCodes.REIMBURSEMENT_AMOUNT,\n }),\n})\n\n// A \"row\" is one job+name line's week map (`{ [workweekStart]: amount }`). A\n// collapsed (non-split) row always has exactly one key, so `entries.length <= 1`\n// makes this a no-op for collapsed rows — only a split row (multiple workweek\n// keys) can be \"partial.\" See the module-level remarks on {@link createPayrollEditEmployeeSchema}.\nfunction addRequiredWorkweekIssues(\n ctx: z.RefinementCtx,\n section: Record<string, Record<string, Record<string, string>>>,\n sectionKey: 'hours' | 'overtimeIncludedEarnings',\n): void {\n for (const [jobUuid, names] of Object.entries(section)) {\n for (const [name, weekMap] of Object.entries(names)) {\n const entries = Object.entries(weekMap)\n if (entries.length <= 1) continue\n const hasAnyValue = entries.some(([, value]) => value !== '')\n if (!hasAnyValue) continue\n for (const [workweekStart, value] of entries) {\n if (value === '') {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: PayrollEditEmployeeErrorCodes.REQUIRED_WORKWEEK,\n path: [sectionKey, jobUuid, name, workweekStart],\n })\n }\n }\n }\n }\n}\n\n/**\n * Builds the Zod schema for the payroll edit-employee form.\n *\n * @remarks\n * Overtime-affecting values are keyed by workweek internally: hours and\n * additional earnings are job-then-name-then-workweekStart records, so the\n * single-workweek (or not-yet-split) case is just the degenerate one-key form\n * of the multi-workweek shape. Non-overtime earnings (`overtimeExcludedEarnings`) are flat\n * job-then-name-to-amount records with no per-workweek breakdown, since they do\n * not feed the blended rate. Time off and final payout are keyed by\n * compensation name. This keeps one schema and one submit path.\n *\n * A `superRefine` enforces per-row completeness on `hours` and\n * `overtimeIncludedEarnings`: once any workweek cell in a job+name row is filled, every\n * other cell in that row must be filled too, surfaced per empty cell as\n * {@link PayrollEditEmployeeErrorCodes.REQUIRED_WORKWEEK}. A row with nothing\n * filled is left alone (still submittable as untouched). This needs no\n * workweek/split context passed in — it's purely structural on whatever keys a\n * row happens to have, which is why a collapsed row (always exactly one key)\n * can never trigger it.\n *\n * @returns The Zod schema validating {@link PayrollEditEmployeeFormData}.\n * @internal\n */\nexport function createPayrollEditEmployeeSchema() {\n return z\n .object({\n hours: z.record(z.string(), z.record(z.string(), z.record(z.string(), nonNegativeAmount))),\n overtimeIncludedEarnings: z.record(\n z.string(),\n z.record(z.string(), z.record(z.string(), nonNegativeAmount)),\n ),\n overtimeExcludedEarnings: z.record(z.string(), z.record(z.string(), nonNegativeAmount)),\n timeOff: z.record(z.string(), nonNegativeAmount),\n finalPayout: z.record(z.string(), nonNegativeAmount),\n reimbursements: z.array(reimbursementSchema),\n // Binding shape only — the draft is validated against `reimbursementDraftSchema`\n // at save time, not by the main resolver, so a half-filled draft never blocks\n // the payroll submit.\n reimbursementDraft: z.object({ description: z.string(), amount: z.string() }),\n paymentMethod: z.enum(PayrollUpdatePaymentMethod).optional(),\n })\n .superRefine((data, ctx) => {\n addRequiredWorkweekIssues(ctx, data.hours, 'hours')\n addRequiredWorkweekIssues(ctx, data.overtimeIncludedEarnings, 'overtimeIncludedEarnings')\n })\n}\n\n/**\n * Shape of the values managed by the payroll edit-employee form.\n *\n * @public\n */\nexport type PayrollEditEmployeeFormData = z.infer<\n ReturnType<typeof createPayrollEditEmployeeSchema>\n>\n\n/**\n * Validated values produced by the payroll edit-employee form on submit.\n *\n * @internal\n */\nexport type PayrollEditEmployeeFormOutputs = PayrollEditEmployeeFormData\n\n/**\n * A single reimbursement row in {@link PayrollEditEmployeeFormData}.\n *\n * @public\n */\nexport type ReimbursementFormEntry = PayrollEditEmployeeFormData['reimbursements'][number]\n"],"names":["PAYMENT_METHOD_VALUES","PayrollUpdatePaymentMethod","PAYMENT_METHOD_OPTIONS","value","PayrollEditEmployeeErrorCodes","NON_NEGATIVE","nonNegativeAmount","z","reimbursementSchema","reimbursementDraftSchema","addRequiredWorkweekIssues","ctx","section","sectionKey","jobUuid","names","name","weekMap","entries","workweekStart","createPayrollEditEmployeeSchema","data"],"mappings":";;AAUO,MAAMA,IAAwB;AAAA,EACnCC,EAA2B;AAAA,EAC3BA,EAA2B;AAC7B,GAGaC,IAAyBF,EAAsB,IAAI,CAAAG,OAAU,EAAE,OAAAA,GAAO,OAAOA,IAAQ,GAOrFC,IAAgC;AAAA,EAC3C,iBAAiB;AAAA,EACjB,sBAAsB;AAAA,EACtB,mBAAmB;AACrB,GAaMC,IAAe,iBAKfC,IAAoBC,EAAE,OAAA,EAAS,OAAO,CAAAJ,MAASA,MAAU,MAAME,EAAa,KAAKF,CAAK,GAAG;AAAA,EAC7F,SAASC,EAA8B;AACzC,CAAC,GAMKI,IAAsBD,EAAE,OAAO;AAAA,EACnC,MAAMA,EAAE,OAAA,EAAS,SAAA,EAAW,SAAA;AAAA,EAC5B,aAAaA,EAAE,OAAA;AAAA,EACf,QAAQA,EAAE,OAAA;AAAA,EACV,WAAWA,EAAE,QAAA,EAAU,SAAA;AACzB,CAAC,GAUYE,IAA2BF,EAAE,OAAO;AAAA,EAC/C,aAAaA,EAAE,OAAA;AAAA,EACf,QAAQA,EAAE,OAAA,EAAS,OAAO,CAAAJ,MAAS,WAAWA,CAAK,IAAI,GAAG;AAAA,IACxD,SAASC,EAA8B;AAAA,EAAA,CACxC;AACH,CAAC;AAMD,SAASM,EACPC,GACAC,GACAC,GACM;AACN,aAAW,CAACC,GAASC,CAAK,KAAK,OAAO,QAAQH,CAAO;AACnD,eAAW,CAACI,GAAMC,CAAO,KAAK,OAAO,QAAQF,CAAK,GAAG;AACnD,YAAMG,IAAU,OAAO,QAAQD,CAAO;AAGtC,UAFI,EAAAC,EAAQ,UAAU,KAElB,CADgBA,EAAQ,KAAK,CAAC,CAAA,EAAGf,CAAK,MAAMA,MAAU,EAAE;AAE5D,mBAAW,CAACgB,GAAehB,CAAK,KAAKe;AACnC,UAAIf,MAAU,MACZQ,EAAI,SAAS;AAAA,YACX,MAAMJ,EAAE,aAAa;AAAA,YACrB,SAASH,EAA8B;AAAA,YACvC,MAAM,CAACS,GAAYC,GAASE,GAAMG,CAAa;AAAA,UAAA,CAChD;AAAA,IAGP;AAEJ;AA0BO,SAASC,IAAkC;AAChD,SAAOb,EACJ,OAAO;AAAA,IACN,OAAOA,EAAE,OAAOA,EAAE,OAAA,GAAUA,EAAE,OAAOA,EAAE,OAAA,GAAUA,EAAE,OAAOA,EAAE,UAAUD,CAAiB,CAAC,CAAC;AAAA,IACzF,0BAA0BC,EAAE;AAAA,MAC1BA,EAAE,OAAA;AAAA,MACFA,EAAE,OAAOA,EAAE,OAAA,GAAUA,EAAE,OAAOA,EAAE,OAAA,GAAUD,CAAiB,CAAC;AAAA,IAAA;AAAA,IAE9D,0BAA0BC,EAAE,OAAOA,EAAE,OAAA,GAAUA,EAAE,OAAOA,EAAE,OAAA,GAAUD,CAAiB,CAAC;AAAA,IACtF,SAASC,EAAE,OAAOA,EAAE,OAAA,GAAUD,CAAiB;AAAA,IAC/C,aAAaC,EAAE,OAAOA,EAAE,OAAA,GAAUD,CAAiB;AAAA,IACnD,gBAAgBC,EAAE,MAAMC,CAAmB;AAAA;AAAA;AAAA;AAAA,IAI3C,oBAAoBD,EAAE,OAAO,EAAE,aAAaA,EAAE,OAAA,GAAU,QAAQA,EAAE,OAAA,EAAO,CAAG;AAAA,IAC5E,eAAeA,EAAE,KAAKN,CAA0B,EAAE,SAAA;AAAA,EAAS,CAC5D,EACA,YAAY,CAACoB,GAAMV,MAAQ;AAC1B,IAAAD,EAA0BC,GAAKU,EAAK,OAAO,OAAO,GAClDX,EAA0BC,GAAKU,EAAK,0BAA0B,0BAA0B;AAAA,EAC1F,CAAC;AACL;"}
1
+ {"version":3,"file":"payrollEditEmployeeSchema.js","sources":["../../../../../../src/components/Payroll/PayrollEditEmployee/shared/usePayrollEditEmployeeForm/payrollEditEmployeeSchema.ts"],"sourcesContent":["import { z } from 'zod'\nimport { PayrollUpdatePaymentMethod } from '@gusto/embedded-api/models/components/payrollupdate'\n\n/**\n * Payment-method option values, in display order. The hook publishes these on\n * `fieldsMetadata.paymentMethod` via `withOptions`; the UI supplies the\n * translated labels through `getOptionLabel`.\n *\n * @internal\n */\nexport const PAYMENT_METHOD_VALUES = [\n PayrollUpdatePaymentMethod.DirectDeposit,\n PayrollUpdatePaymentMethod.Check,\n] as const\n\n/** @internal */\nexport const PAYMENT_METHOD_OPTIONS = PAYMENT_METHOD_VALUES.map(value => ({ value, label: value }))\n\n/**\n * Validation error codes produced by the payroll edit-employee schema.\n *\n * @public\n */\nexport const PayrollEditEmployeeErrorCodes = {\n NEGATIVE_AMOUNT: 'NEGATIVE_AMOUNT',\n MAX_HOURS: 'MAX_HOURS',\n REIMBURSEMENT_AMOUNT: 'REIMBURSEMENT_AMOUNT',\n MAX_REIMBURSEMENT_AMOUNT: 'MAX_REIMBURSEMENT_AMOUNT',\n REQUIRED_WORKWEEK: 'REQUIRED_WORKWEEK',\n} as const\n\n/**\n * Union of validation error codes emitted by the payroll edit-employee schema.\n *\n * @public\n */\nexport type PayrollEditEmployeeErrorCode =\n (typeof PayrollEditEmployeeErrorCodes)[keyof typeof PayrollEditEmployeeErrorCodes]\n\n// A plain, non-negative decimal: one or more digits with an optional fractional\n// part. Deliberately strict — `parseFloat` would accept \"5ea\" (→ 5), \"Infinity\",\n// and \"1e3\", any of which would silently corrupt the amount downstream.\nconst NON_NEGATIVE = /^\\d+(\\.\\d+)?$/\n\n// Hours and amounts are entered as strings. Blank is allowed (it means \"not\n// provided\" — see the submit rule), but any provided value must be a valid,\n// non-negative number.\nconst nonNegativeAmount = z.string().refine(value => value === '' || NON_NEGATIVE.test(value), {\n message: PayrollEditEmployeeErrorCodes.NEGATIVE_AMOUNT,\n})\n\n/**\n * Mirrors the server's fixed hours cap (`draft_payrolls`' `MAX_HOURS`) so an\n * over-limit value is caught inline instead of round-tripping to a 422. Also\n * applied as the hours fields' native `max` so the stepper can't reach it.\n *\n * @public\n */\nexport const MAX_HOURS = 99_999\n\nconst nonNegativeHours = nonNegativeAmount.refine(\n value => value === '' || Number(value) <= MAX_HOURS,\n { message: PayrollEditEmployeeErrorCodes.MAX_HOURS },\n)\n\n// Committed reimbursement rows are presentational passthrough: they hold data\n// that was already validated when its draft was saved (or came from the server),\n// so the amount is a plain string here. All reimbursement validation lives in\n// `reimbursementDraftSchema` below, mirroring the legacy editor.\nconst reimbursementSchema = z.object({\n uuid: z.string().nullable().optional(),\n description: z.string(),\n amount: z.string(),\n recurring: z.boolean().optional(),\n})\n\n/**\n * Mirrors the server's fixed reimbursement cap (`payroll_core_data`'s\n * `Reimbursements::MAX_AMOUNT`) so an over-limit value is caught inline\n * instead of round-tripping to a 422. Also applied as the amount field's\n * native `max` so the stepper can't reach it.\n *\n * @public\n */\nexport const MAX_REIMBURSEMENT_AMOUNT = 1_000_000\n\n/**\n * The single reimbursement validation schema: the \"add reimbursement\" draft row.\n * Amount must be a number greater than zero, matching the legacy editor's\n * inline validation. The hook validates the draft against this before committing\n * it to the presentational `reimbursements` list.\n *\n * @internal\n */\nexport const reimbursementDraftSchema = z.object({\n description: z.string(),\n amount: z\n .string()\n .refine(value => parseFloat(value) > 0, {\n message: PayrollEditEmployeeErrorCodes.REIMBURSEMENT_AMOUNT,\n })\n .refine(value => parseFloat(value) <= MAX_REIMBURSEMENT_AMOUNT, {\n message: PayrollEditEmployeeErrorCodes.MAX_REIMBURSEMENT_AMOUNT,\n }),\n})\n\n// A \"row\" is one job+name line's week map (`{ [workweekStart]: amount }`). A\n// collapsed (non-split) row always has exactly one key, so `entries.length <= 1`\n// makes this a no-op for collapsed rows — only a split row (multiple workweek\n// keys) can be \"partial.\" See the module-level remarks on {@link createPayrollEditEmployeeSchema}.\nfunction addRequiredWorkweekIssues(\n ctx: z.RefinementCtx,\n section: Record<string, Record<string, Record<string, string>>>,\n sectionKey: 'hours' | 'overtimeIncludedEarnings',\n): void {\n for (const [jobUuid, names] of Object.entries(section)) {\n for (const [name, weekMap] of Object.entries(names)) {\n const entries = Object.entries(weekMap)\n if (entries.length <= 1) continue\n const hasAnyValue = entries.some(([, value]) => value !== '')\n if (!hasAnyValue) continue\n for (const [workweekStart, value] of entries) {\n if (value === '') {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: PayrollEditEmployeeErrorCodes.REQUIRED_WORKWEEK,\n path: [sectionKey, jobUuid, name, workweekStart],\n })\n }\n }\n }\n }\n}\n\n/**\n * Builds the Zod schema for the payroll edit-employee form.\n *\n * @remarks\n * Overtime-affecting values are keyed by workweek internally: hours and\n * additional earnings are job-then-name-then-workweekStart records, so the\n * single-workweek (or not-yet-split) case is just the degenerate one-key form\n * of the multi-workweek shape. Non-overtime earnings (`overtimeExcludedEarnings`) are flat\n * job-then-name-to-amount records with no per-workweek breakdown, since they do\n * not feed the blended rate. Time off and final payout are keyed by\n * compensation name. This keeps one schema and one submit path.\n *\n * A `superRefine` enforces per-row completeness on `hours` and\n * `overtimeIncludedEarnings`: once any workweek cell in a job+name row is filled, every\n * other cell in that row must be filled too, surfaced per empty cell as\n * {@link PayrollEditEmployeeErrorCodes.REQUIRED_WORKWEEK}. A row with nothing\n * filled is left alone (still submittable as untouched). This needs no\n * workweek/split context passed in — it's purely structural on whatever keys a\n * row happens to have, which is why a collapsed row (always exactly one key)\n * can never trigger it.\n *\n * @returns The Zod schema validating {@link PayrollEditEmployeeFormData}.\n * @internal\n */\nexport function createPayrollEditEmployeeSchema() {\n return z\n .object({\n hours: z.record(z.string(), z.record(z.string(), z.record(z.string(), nonNegativeHours))),\n overtimeIncludedEarnings: z.record(\n z.string(),\n z.record(z.string(), z.record(z.string(), nonNegativeAmount)),\n ),\n overtimeExcludedEarnings: z.record(z.string(), z.record(z.string(), nonNegativeAmount)),\n timeOff: z.record(z.string(), nonNegativeAmount),\n finalPayout: z.record(z.string(), nonNegativeAmount),\n reimbursements: z.array(reimbursementSchema),\n // Binding shape only — the draft is validated against `reimbursementDraftSchema`\n // at save time, not by the main resolver, so a half-filled draft never blocks\n // the payroll submit.\n reimbursementDraft: z.object({ description: z.string(), amount: z.string() }),\n paymentMethod: z.enum(PayrollUpdatePaymentMethod).optional(),\n })\n .superRefine((data, ctx) => {\n addRequiredWorkweekIssues(ctx, data.hours, 'hours')\n addRequiredWorkweekIssues(ctx, data.overtimeIncludedEarnings, 'overtimeIncludedEarnings')\n })\n}\n\n/**\n * Shape of the values managed by the payroll edit-employee form.\n *\n * @public\n */\nexport type PayrollEditEmployeeFormData = z.infer<\n ReturnType<typeof createPayrollEditEmployeeSchema>\n>\n\n/**\n * Validated values produced by the payroll edit-employee form on submit.\n *\n * @internal\n */\nexport type PayrollEditEmployeeFormOutputs = PayrollEditEmployeeFormData\n\n/**\n * A single reimbursement row in {@link PayrollEditEmployeeFormData}.\n *\n * @public\n */\nexport type ReimbursementFormEntry = PayrollEditEmployeeFormData['reimbursements'][number]\n"],"names":["PAYMENT_METHOD_VALUES","PayrollUpdatePaymentMethod","PAYMENT_METHOD_OPTIONS","value","PayrollEditEmployeeErrorCodes","NON_NEGATIVE","nonNegativeAmount","z","MAX_HOURS","nonNegativeHours","reimbursementSchema","MAX_REIMBURSEMENT_AMOUNT","reimbursementDraftSchema","addRequiredWorkweekIssues","ctx","section","sectionKey","jobUuid","names","name","weekMap","entries","workweekStart","createPayrollEditEmployeeSchema","data"],"mappings":";;AAUO,MAAMA,IAAwB;AAAA,EACnCC,EAA2B;AAAA,EAC3BA,EAA2B;AAC7B,GAGaC,IAAyBF,EAAsB,IAAI,CAAAG,OAAU,EAAE,OAAAA,GAAO,OAAOA,IAAQ,GAOrFC,IAAgC;AAAA,EAC3C,iBAAiB;AAAA,EACjB,WAAW;AAAA,EACX,sBAAsB;AAAA,EACtB,0BAA0B;AAAA,EAC1B,mBAAmB;AACrB,GAaMC,IAAe,iBAKfC,IAAoBC,EAAE,OAAA,EAAS,OAAO,CAAAJ,MAASA,MAAU,MAAME,EAAa,KAAKF,CAAK,GAAG;AAAA,EAC7F,SAASC,EAA8B;AACzC,CAAC,GASYI,IAAY,OAEnBC,IAAmBH,EAAkB;AAAA,EACzC,CAAAH,MAASA,MAAU,MAAM,OAAOA,CAAK,KAAKK;AAAA,EAC1C,EAAE,SAASJ,EAA8B,UAAA;AAC3C,GAMMM,IAAsBH,EAAE,OAAO;AAAA,EACnC,MAAMA,EAAE,OAAA,EAAS,SAAA,EAAW,SAAA;AAAA,EAC5B,aAAaA,EAAE,OAAA;AAAA,EACf,QAAQA,EAAE,OAAA;AAAA,EACV,WAAWA,EAAE,QAAA,EAAU,SAAA;AACzB,CAAC,GAUYI,IAA2B,KAU3BC,IAA2BL,EAAE,OAAO;AAAA,EAC/C,aAAaA,EAAE,OAAA;AAAA,EACf,QAAQA,EACL,OAAA,EACA,OAAO,CAAAJ,MAAS,WAAWA,CAAK,IAAI,GAAG;AAAA,IACtC,SAASC,EAA8B;AAAA,EAAA,CACxC,EACA,OAAO,OAAS,WAAWD,CAAK,KAAKQ,GAA0B;AAAA,IAC9D,SAASP,EAA8B;AAAA,EAAA,CACxC;AACL,CAAC;AAMD,SAASS,EACPC,GACAC,GACAC,GACM;AACN,aAAW,CAACC,GAASC,CAAK,KAAK,OAAO,QAAQH,CAAO;AACnD,eAAW,CAACI,GAAMC,CAAO,KAAK,OAAO,QAAQF,CAAK,GAAG;AACnD,YAAMG,IAAU,OAAO,QAAQD,CAAO;AAGtC,UAFI,EAAAC,EAAQ,UAAU,KAElB,CADgBA,EAAQ,KAAK,CAAC,CAAA,EAAGlB,CAAK,MAAMA,MAAU,EAAE;AAE5D,mBAAW,CAACmB,GAAenB,CAAK,KAAKkB;AACnC,UAAIlB,MAAU,MACZW,EAAI,SAAS;AAAA,YACX,MAAMP,EAAE,aAAa;AAAA,YACrB,SAASH,EAA8B;AAAA,YACvC,MAAM,CAACY,GAAYC,GAASE,GAAMG,CAAa;AAAA,UAAA,CAChD;AAAA,IAGP;AAEJ;AA0BO,SAASC,IAAkC;AAChD,SAAOhB,EACJ,OAAO;AAAA,IACN,OAAOA,EAAE,OAAOA,EAAE,OAAA,GAAUA,EAAE,OAAOA,EAAE,OAAA,GAAUA,EAAE,OAAOA,EAAE,UAAUE,CAAgB,CAAC,CAAC;AAAA,IACxF,0BAA0BF,EAAE;AAAA,MAC1BA,EAAE,OAAA;AAAA,MACFA,EAAE,OAAOA,EAAE,OAAA,GAAUA,EAAE,OAAOA,EAAE,OAAA,GAAUD,CAAiB,CAAC;AAAA,IAAA;AAAA,IAE9D,0BAA0BC,EAAE,OAAOA,EAAE,OAAA,GAAUA,EAAE,OAAOA,EAAE,OAAA,GAAUD,CAAiB,CAAC;AAAA,IACtF,SAASC,EAAE,OAAOA,EAAE,OAAA,GAAUD,CAAiB;AAAA,IAC/C,aAAaC,EAAE,OAAOA,EAAE,OAAA,GAAUD,CAAiB;AAAA,IACnD,gBAAgBC,EAAE,MAAMG,CAAmB;AAAA;AAAA;AAAA;AAAA,IAI3C,oBAAoBH,EAAE,OAAO,EAAE,aAAaA,EAAE,OAAA,GAAU,QAAQA,EAAE,OAAA,EAAO,CAAG;AAAA,IAC5E,eAAeA,EAAE,KAAKN,CAA0B,EAAE,SAAA;AAAA,EAAS,CAC5D,EACA,YAAY,CAACuB,GAAMV,MAAQ;AAC1B,IAAAD,EAA0BC,GAAKU,EAAK,OAAO,OAAO,GAClDX,EAA0BC,GAAKU,EAAK,0BAA0B,0BAA0B;AAAA,EAC1F,CAAC;AACL;"}
@@ -1,9 +1,9 @@
1
- import { state as n, transition as r, reduce as t, guard as P } from "robot3";
1
+ import { state as s, transition as r, reduce as t, guard as P } from "robot3";
2
2
  import { PayrollOverviewContextual as c, PayrollConfigurationContextual as d, PayrollReceiptsContextual as u, PayrollEditEmployeeContextual as b, PayrollBlockerContextual as f } from "../PayrollFlow/PayrollFlowComponents.js";
3
3
  import { componentEvents as i } from "../../../shared/constants.js";
4
4
  import { updateBreadcrumbs as l, patchBreadcrumbsHeader as p, hideBreadcrumb as g } from "../../../helpers/breadcrumbHelpers.js";
5
- import { createBreadcrumbNavigateTransition as L } from "../../Common/FlowBreadcrumbs/breadcrumbTransitionHelpers.js";
6
- const s = L(), B = (e = !1) => ({
5
+ import { createBreadcrumbNavigateTransition as v } from "../../Common/FlowBreadcrumbs/breadcrumbTransitionHelpers.js";
6
+ const n = v(), B = (e = !1) => ({
7
7
  configuration: {
8
8
  parent: null,
9
9
  item: {
@@ -60,7 +60,7 @@ const s = L(), B = (e = !1) => ({
60
60
  namespace: "Payroll.PayrollBlocker"
61
61
  }
62
62
  }
63
- }), v = r(
63
+ }), L = r(
64
64
  i.RUN_PAYROLL_CALCULATED,
65
65
  "overview",
66
66
  t(
@@ -197,31 +197,34 @@ const s = L(), B = (e = !1) => ({
197
197
  }
198
198
  }))
199
199
  ), K = {
200
- configuration: n(
201
- s("configuration"),
202
- v,
200
+ configuration: s(
201
+ n("configuration"),
202
+ L,
203
203
  D,
204
204
  E,
205
205
  C
206
206
  ),
207
- overview: n(
208
- s("configuration", y),
207
+ overview: s(
208
+ n("configuration", y),
209
209
  R,
210
210
  N,
211
211
  _
212
212
  ),
213
- editEmployee: n(
214
- s("configuration"),
213
+ editEmployee: s(
214
+ n("configuration"),
215
215
  w,
216
216
  O
217
217
  ),
218
- receipts: n(s("configuration")),
219
- blockers: n(s("configuration"))
218
+ receipts: s(
219
+ n("configuration"),
220
+ n("overview")
221
+ ),
222
+ blockers: s(n("configuration"))
220
223
  };
221
224
  export {
222
225
  D as alreadyProcessedTransition,
223
226
  C as blockersViewAllTransition,
224
- v as calculatedTransition,
227
+ L as calculatedTransition,
225
228
  E as employeeEditTransition,
226
229
  B as getPayrollExecutionBreadcrumbsNodes,
227
230
  K as payrollExecutionMachine
@@ -1 +1 @@
1
- {"version":3,"file":"payrollExecutionMachine.js","sources":["../../../../src/components/Payroll/PayrollExecutionFlow/payrollExecutionMachine.ts"],"sourcesContent":["import { transition, reduce, state, guard } from 'robot3'\nimport type { PayrollPayPeriodType } from '@gusto/embedded-api/models/components/payrollpayperiodtype'\nimport type { PayrollFlowAlert } from '../PayrollFlow/PayrollFlowComponents'\nimport {\n PayrollConfigurationContextual,\n PayrollOverviewContextual,\n PayrollEditEmployeeContextual,\n PayrollReceiptsContextual,\n PayrollBlockerContextual,\n type PayrollFlowContextInterface,\n} from '../PayrollFlow/PayrollFlowComponents'\nimport { componentEvents } from '@/shared/constants'\nimport type { MachineEventType, MachineTransition } from '@/types/Helpers'\nimport {\n hideBreadcrumb,\n patchBreadcrumbsHeader,\n updateBreadcrumbs,\n} from '@/helpers/breadcrumbHelpers'\nimport type {\n BreadcrumbNode,\n BreadcrumbNodes,\n} from '@/components/Common/FlowBreadcrumbs/FlowBreadcrumbsTypes'\nimport { createBreadcrumbNavigateTransition } from '@/components/Common/FlowBreadcrumbs/breadcrumbTransitionHelpers'\n\ntype PayrollEventPayloads = {\n [componentEvents.RUN_PAYROLL_EMPLOYEE_EDIT]: {\n payrollId: string\n employeeId: string\n firstName: string\n lastName: string\n }\n [componentEvents.RUN_PAYROLL_CALCULATED]: {\n payrollUuid: string\n alert?: PayrollFlowAlert\n payPeriod?: PayrollPayPeriodType\n }\n [componentEvents.RUN_PAYROLL_ALREADY_PROCESSED]: {\n payrollId: string\n alert?: PayrollFlowAlert\n payPeriod?: PayrollPayPeriodType\n }\n [componentEvents.BREADCRUMB_NAVIGATE]: {\n key: string\n onNavigate: (ctx: PayrollFlowContextInterface) => PayrollFlowContextInterface\n }\n [componentEvents.RUN_PAYROLL_BLOCKERS_VIEW_ALL]: undefined\n [componentEvents.RUN_PAYROLL_EDIT]: undefined\n}\n\nconst breadcrumbNavigateTransition =\n createBreadcrumbNavigateTransition<PayrollFlowContextInterface>()\n\ntype BreadcrumbNodeKeys = 'configuration' | 'overview' | 'editEmployee' | 'receipts' | 'blockers'\n\n/** @internal */\nexport const getPayrollExecutionBreadcrumbsNodes = (\n isDismissal: boolean = false,\n): BreadcrumbNodes => {\n const configLabel = isDismissal ? 'breadcrumbLabelDismissal' : 'breadcrumbLabel'\n\n return {\n configuration: {\n parent: null,\n item: {\n id: 'configuration',\n label: configLabel,\n namespace: 'Payroll.PayrollConfiguration',\n onNavigate: ((ctx: PayrollFlowContextInterface) => ({\n ...updateBreadcrumbs('configuration', ctx, {\n startDate: ctx.payPeriod?.startDate ?? '',\n endDate: ctx.payPeriod?.endDate ?? '',\n }),\n component: PayrollConfigurationContextual,\n alerts: undefined,\n })) as (context: unknown) => unknown,\n },\n },\n overview: {\n parent: 'configuration',\n item: {\n id: 'overview',\n label: 'breadcrumbLabel',\n namespace: 'Payroll.PayrollOverview',\n onNavigate: ((ctx: PayrollFlowContextInterface) => ({\n ...updateBreadcrumbs('overview', ctx, {\n startDate: ctx.payPeriod?.startDate ?? '',\n endDate: ctx.payPeriod?.endDate ?? '',\n }),\n component: PayrollOverviewContextual,\n alerts: undefined,\n })) as (context: unknown) => unknown,\n },\n },\n editEmployee: {\n parent: 'configuration',\n item: {\n id: 'editEmployee',\n label: 'breadcrumbLabel',\n namespace: 'Payroll.PayrollEditEmployee',\n },\n },\n receipts: {\n parent: 'overview',\n item: {\n id: 'receipts',\n label: 'breadcrumbLabel',\n namespace: 'Payroll.PayrollReceipts',\n },\n },\n blockers: {\n parent: 'configuration',\n item: {\n id: 'blockers',\n label: 'breadcrumbLabel',\n namespace: 'Payroll.PayrollBlocker',\n },\n },\n } satisfies Record<BreadcrumbNodeKeys, BreadcrumbNode>\n}\n\n/** @internal */\nexport const calculatedTransition = transition(\n componentEvents.RUN_PAYROLL_CALCULATED,\n 'overview',\n reduce(\n (\n ctx: PayrollFlowContextInterface,\n ev: MachineEventType<PayrollEventPayloads, typeof componentEvents.RUN_PAYROLL_CALCULATED>,\n ): PayrollFlowContextInterface => {\n return {\n ...updateBreadcrumbs('overview', ctx, {\n startDate: ev.payload.payPeriod?.startDate ?? '',\n endDate: ev.payload.payPeriod?.endDate ?? '',\n }),\n component: PayrollOverviewContextual,\n payPeriod: ev.payload.payPeriod ?? ctx.payPeriod,\n alerts: ev.payload.alert\n ? [\n ...(ctx.alerts ?? []).filter(a => a.alertKey !== 'progressSaved'),\n { ...ev.payload.alert, alertKey: 'progressSaved' as const },\n ]\n : ctx.alerts,\n ctaConfig: {\n labelKey: 'exitFlowCta',\n namespace: 'Payroll.PayrollOverview',\n },\n }\n },\n ),\n)\n\n/** @internal */\nexport const alreadyProcessedTransition = transition(\n componentEvents.RUN_PAYROLL_ALREADY_PROCESSED,\n 'overview',\n reduce(\n (\n ctx: PayrollFlowContextInterface,\n ev: MachineEventType<\n PayrollEventPayloads,\n typeof componentEvents.RUN_PAYROLL_ALREADY_PROCESSED\n >,\n ): PayrollFlowContextInterface => {\n const payPeriod = ev.payload.payPeriod ?? ctx.payPeriod\n return {\n ...updateBreadcrumbs('overview', ctx, {\n startDate: payPeriod?.startDate ?? '',\n endDate: payPeriod?.endDate ?? '',\n }),\n component: PayrollOverviewContextual,\n payPeriod,\n alerts: ev.payload.alert\n ? [\n ...(ctx.alerts ?? []).filter(a => a.alertKey !== 'alreadyProcessed'),\n { ...ev.payload.alert, alertKey: 'alreadyProcessed' as const },\n ]\n : ctx.alerts,\n ctaConfig: {\n labelKey: 'exitFlowCta',\n namespace: 'Payroll.PayrollOverview',\n },\n }\n },\n ),\n)\n\n/** @internal */\nexport const employeeEditTransition = transition(\n componentEvents.RUN_PAYROLL_EMPLOYEE_EDIT,\n 'editEmployee',\n reduce(\n (\n ctx: PayrollFlowContextInterface,\n ev: MachineEventType<PayrollEventPayloads, typeof componentEvents.RUN_PAYROLL_EMPLOYEE_EDIT>,\n ): PayrollFlowContextInterface => {\n return {\n ...updateBreadcrumbs('editEmployee', ctx, {\n firstName: ev.payload.firstName,\n lastName: ev.payload.lastName,\n startDate: ctx.payPeriod?.startDate ?? '',\n endDate: ctx.payPeriod?.endDate ?? '',\n }),\n component: PayrollEditEmployeeContextual,\n employeeId: ev.payload.employeeId,\n firstName: ev.payload.firstName,\n lastName: ev.payload.lastName,\n ctaConfig: null,\n }\n },\n ),\n)\n\n/** @internal */\nexport const blockersViewAllTransition = transition(\n componentEvents.RUN_PAYROLL_BLOCKERS_VIEW_ALL,\n 'blockers',\n reduce((ctx: PayrollFlowContextInterface): PayrollFlowContextInterface => {\n return {\n ...updateBreadcrumbs('blockers', ctx),\n component: PayrollBlockerContextual,\n }\n }),\n)\n\nconst notSubmitted = (ctx: PayrollFlowContextInterface) => !ctx.hasPayrollSubmissionStarted\n\nconst editPayrollTransition = transition(\n componentEvents.RUN_PAYROLL_EDIT,\n 'configuration',\n guard(notSubmitted),\n reduce((ctx: PayrollFlowContextInterface): PayrollFlowContextInterface => {\n return {\n ...updateBreadcrumbs('configuration', ctx, {\n startDate: ctx.payPeriod?.startDate ?? '',\n endDate: ctx.payPeriod?.endDate ?? '',\n }),\n component: PayrollConfigurationContextual,\n alerts: undefined,\n ctaConfig: {\n labelKey: 'exitFlowCta',\n namespace: 'Payroll.PayrollConfiguration',\n },\n }\n }),\n)\n\nconst payrollSubmittingTransition = transition(\n componentEvents.RUN_PAYROLL_SUBMITTING,\n 'overview',\n reduce((ctx: PayrollFlowContextInterface): PayrollFlowContextInterface => ({\n ...hideBreadcrumb('configuration', ctx),\n hasPayrollSubmissionStarted: true,\n })),\n)\n\nconst receiptGetTransition = transition(\n componentEvents.RUN_PAYROLL_RECEIPT_GET,\n 'receipts',\n reduce((ctx: PayrollFlowContextInterface): PayrollFlowContextInterface => ({\n ...updateBreadcrumbs('receipts', ctx, {\n startDate: ctx.payPeriod?.startDate ?? '',\n endDate: ctx.payPeriod?.endDate ?? '',\n }),\n component: PayrollReceiptsContextual,\n alerts: undefined,\n ctaConfig: {\n labelKey: 'exitFlowCta',\n namespace: 'Payroll.PayrollReceipts',\n },\n })),\n)\n\nconst employeeSavedTransition = transition(\n componentEvents.RUN_PAYROLL_EMPLOYEE_SAVED,\n 'configuration',\n reduce((ctx: PayrollFlowContextInterface): PayrollFlowContextInterface => ({\n ...patchBreadcrumbsHeader(ctx, { currentBreadcrumbId: 'configuration' }),\n component: PayrollConfigurationContextual,\n employeeId: undefined,\n firstName: undefined,\n lastName: undefined,\n ctaConfig: {\n labelKey: 'exitFlowCta',\n namespace: 'Payroll.PayrollConfiguration',\n },\n })),\n)\n\nconst employeeCancelledTransition = transition(\n componentEvents.RUN_PAYROLL_EMPLOYEE_CANCELLED,\n 'configuration',\n reduce((ctx: PayrollFlowContextInterface): PayrollFlowContextInterface => ({\n ...patchBreadcrumbsHeader(ctx, { currentBreadcrumbId: 'configuration' }),\n component: PayrollConfigurationContextual,\n employeeId: undefined,\n firstName: undefined,\n lastName: undefined,\n ctaConfig: {\n labelKey: 'exitFlowCta',\n namespace: 'Payroll.PayrollConfiguration',\n },\n })),\n)\n\n/** @internal */\nexport const payrollExecutionMachine = {\n configuration: state<MachineTransition>(\n breadcrumbNavigateTransition('configuration'),\n calculatedTransition,\n alreadyProcessedTransition,\n employeeEditTransition,\n blockersViewAllTransition,\n ),\n overview: state<MachineTransition>(\n breadcrumbNavigateTransition('configuration', notSubmitted),\n payrollSubmittingTransition,\n editPayrollTransition,\n receiptGetTransition,\n ),\n editEmployee: state<MachineTransition>(\n breadcrumbNavigateTransition('configuration'),\n employeeSavedTransition,\n employeeCancelledTransition,\n ),\n receipts: state<MachineTransition>(breadcrumbNavigateTransition('configuration')),\n blockers: state<MachineTransition>(breadcrumbNavigateTransition('configuration')),\n}\n"],"names":["breadcrumbNavigateTransition","createBreadcrumbNavigateTransition","getPayrollExecutionBreadcrumbsNodes","isDismissal","ctx","updateBreadcrumbs","PayrollConfigurationContextual","PayrollOverviewContextual","calculatedTransition","transition","componentEvents","reduce","ev","a","alreadyProcessedTransition","payPeriod","employeeEditTransition","PayrollEditEmployeeContextual","blockersViewAllTransition","PayrollBlockerContextual","notSubmitted","editPayrollTransition","guard","payrollSubmittingTransition","hideBreadcrumb","receiptGetTransition","PayrollReceiptsContextual","employeeSavedTransition","patchBreadcrumbsHeader","employeeCancelledTransition","payrollExecutionMachine","state"],"mappings":"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"}
1
+ {"version":3,"file":"payrollExecutionMachine.js","sources":["../../../../src/components/Payroll/PayrollExecutionFlow/payrollExecutionMachine.ts"],"sourcesContent":["import { transition, reduce, state, guard } from 'robot3'\nimport type { PayrollPayPeriodType } from '@gusto/embedded-api/models/components/payrollpayperiodtype'\nimport type { PayrollFlowAlert } from '../PayrollFlow/PayrollFlowComponents'\nimport {\n PayrollConfigurationContextual,\n PayrollOverviewContextual,\n PayrollEditEmployeeContextual,\n PayrollReceiptsContextual,\n PayrollBlockerContextual,\n type PayrollFlowContextInterface,\n} from '../PayrollFlow/PayrollFlowComponents'\nimport { componentEvents } from '@/shared/constants'\nimport type { MachineEventType, MachineTransition } from '@/types/Helpers'\nimport {\n hideBreadcrumb,\n patchBreadcrumbsHeader,\n updateBreadcrumbs,\n} from '@/helpers/breadcrumbHelpers'\nimport type {\n BreadcrumbNode,\n BreadcrumbNodes,\n} from '@/components/Common/FlowBreadcrumbs/FlowBreadcrumbsTypes'\nimport { createBreadcrumbNavigateTransition } from '@/components/Common/FlowBreadcrumbs/breadcrumbTransitionHelpers'\n\ntype PayrollEventPayloads = {\n [componentEvents.RUN_PAYROLL_EMPLOYEE_EDIT]: {\n payrollId: string\n employeeId: string\n firstName: string\n lastName: string\n }\n [componentEvents.RUN_PAYROLL_CALCULATED]: {\n payrollUuid: string\n alert?: PayrollFlowAlert\n payPeriod?: PayrollPayPeriodType\n }\n [componentEvents.RUN_PAYROLL_ALREADY_PROCESSED]: {\n payrollId: string\n alert?: PayrollFlowAlert\n payPeriod?: PayrollPayPeriodType\n }\n [componentEvents.BREADCRUMB_NAVIGATE]: {\n key: string\n onNavigate: (ctx: PayrollFlowContextInterface) => PayrollFlowContextInterface\n }\n [componentEvents.RUN_PAYROLL_BLOCKERS_VIEW_ALL]: undefined\n [componentEvents.RUN_PAYROLL_EDIT]: undefined\n}\n\nconst breadcrumbNavigateTransition =\n createBreadcrumbNavigateTransition<PayrollFlowContextInterface>()\n\ntype BreadcrumbNodeKeys = 'configuration' | 'overview' | 'editEmployee' | 'receipts' | 'blockers'\n\n/** @internal */\nexport const getPayrollExecutionBreadcrumbsNodes = (\n isDismissal: boolean = false,\n): BreadcrumbNodes => {\n const configLabel = isDismissal ? 'breadcrumbLabelDismissal' : 'breadcrumbLabel'\n\n return {\n configuration: {\n parent: null,\n item: {\n id: 'configuration',\n label: configLabel,\n namespace: 'Payroll.PayrollConfiguration',\n onNavigate: ((ctx: PayrollFlowContextInterface) => ({\n ...updateBreadcrumbs('configuration', ctx, {\n startDate: ctx.payPeriod?.startDate ?? '',\n endDate: ctx.payPeriod?.endDate ?? '',\n }),\n component: PayrollConfigurationContextual,\n alerts: undefined,\n })) as (context: unknown) => unknown,\n },\n },\n overview: {\n parent: 'configuration',\n item: {\n id: 'overview',\n label: 'breadcrumbLabel',\n namespace: 'Payroll.PayrollOverview',\n onNavigate: ((ctx: PayrollFlowContextInterface) => ({\n ...updateBreadcrumbs('overview', ctx, {\n startDate: ctx.payPeriod?.startDate ?? '',\n endDate: ctx.payPeriod?.endDate ?? '',\n }),\n component: PayrollOverviewContextual,\n alerts: undefined,\n })) as (context: unknown) => unknown,\n },\n },\n editEmployee: {\n parent: 'configuration',\n item: {\n id: 'editEmployee',\n label: 'breadcrumbLabel',\n namespace: 'Payroll.PayrollEditEmployee',\n },\n },\n receipts: {\n parent: 'overview',\n item: {\n id: 'receipts',\n label: 'breadcrumbLabel',\n namespace: 'Payroll.PayrollReceipts',\n },\n },\n blockers: {\n parent: 'configuration',\n item: {\n id: 'blockers',\n label: 'breadcrumbLabel',\n namespace: 'Payroll.PayrollBlocker',\n },\n },\n } satisfies Record<BreadcrumbNodeKeys, BreadcrumbNode>\n}\n\n/** @internal */\nexport const calculatedTransition = transition(\n componentEvents.RUN_PAYROLL_CALCULATED,\n 'overview',\n reduce(\n (\n ctx: PayrollFlowContextInterface,\n ev: MachineEventType<PayrollEventPayloads, typeof componentEvents.RUN_PAYROLL_CALCULATED>,\n ): PayrollFlowContextInterface => {\n return {\n ...updateBreadcrumbs('overview', ctx, {\n startDate: ev.payload.payPeriod?.startDate ?? '',\n endDate: ev.payload.payPeriod?.endDate ?? '',\n }),\n component: PayrollOverviewContextual,\n payPeriod: ev.payload.payPeriod ?? ctx.payPeriod,\n alerts: ev.payload.alert\n ? [\n ...(ctx.alerts ?? []).filter(a => a.alertKey !== 'progressSaved'),\n { ...ev.payload.alert, alertKey: 'progressSaved' as const },\n ]\n : ctx.alerts,\n ctaConfig: {\n labelKey: 'exitFlowCta',\n namespace: 'Payroll.PayrollOverview',\n },\n }\n },\n ),\n)\n\n/** @internal */\nexport const alreadyProcessedTransition = transition(\n componentEvents.RUN_PAYROLL_ALREADY_PROCESSED,\n 'overview',\n reduce(\n (\n ctx: PayrollFlowContextInterface,\n ev: MachineEventType<\n PayrollEventPayloads,\n typeof componentEvents.RUN_PAYROLL_ALREADY_PROCESSED\n >,\n ): PayrollFlowContextInterface => {\n const payPeriod = ev.payload.payPeriod ?? ctx.payPeriod\n return {\n ...updateBreadcrumbs('overview', ctx, {\n startDate: payPeriod?.startDate ?? '',\n endDate: payPeriod?.endDate ?? '',\n }),\n component: PayrollOverviewContextual,\n payPeriod,\n alerts: ev.payload.alert\n ? [\n ...(ctx.alerts ?? []).filter(a => a.alertKey !== 'alreadyProcessed'),\n { ...ev.payload.alert, alertKey: 'alreadyProcessed' as const },\n ]\n : ctx.alerts,\n ctaConfig: {\n labelKey: 'exitFlowCta',\n namespace: 'Payroll.PayrollOverview',\n },\n }\n },\n ),\n)\n\n/** @internal */\nexport const employeeEditTransition = transition(\n componentEvents.RUN_PAYROLL_EMPLOYEE_EDIT,\n 'editEmployee',\n reduce(\n (\n ctx: PayrollFlowContextInterface,\n ev: MachineEventType<PayrollEventPayloads, typeof componentEvents.RUN_PAYROLL_EMPLOYEE_EDIT>,\n ): PayrollFlowContextInterface => {\n return {\n ...updateBreadcrumbs('editEmployee', ctx, {\n firstName: ev.payload.firstName,\n lastName: ev.payload.lastName,\n startDate: ctx.payPeriod?.startDate ?? '',\n endDate: ctx.payPeriod?.endDate ?? '',\n }),\n component: PayrollEditEmployeeContextual,\n employeeId: ev.payload.employeeId,\n firstName: ev.payload.firstName,\n lastName: ev.payload.lastName,\n ctaConfig: null,\n }\n },\n ),\n)\n\n/** @internal */\nexport const blockersViewAllTransition = transition(\n componentEvents.RUN_PAYROLL_BLOCKERS_VIEW_ALL,\n 'blockers',\n reduce((ctx: PayrollFlowContextInterface): PayrollFlowContextInterface => {\n return {\n ...updateBreadcrumbs('blockers', ctx),\n component: PayrollBlockerContextual,\n }\n }),\n)\n\nconst notSubmitted = (ctx: PayrollFlowContextInterface) => !ctx.hasPayrollSubmissionStarted\n\nconst editPayrollTransition = transition(\n componentEvents.RUN_PAYROLL_EDIT,\n 'configuration',\n guard(notSubmitted),\n reduce((ctx: PayrollFlowContextInterface): PayrollFlowContextInterface => {\n return {\n ...updateBreadcrumbs('configuration', ctx, {\n startDate: ctx.payPeriod?.startDate ?? '',\n endDate: ctx.payPeriod?.endDate ?? '',\n }),\n component: PayrollConfigurationContextual,\n alerts: undefined,\n ctaConfig: {\n labelKey: 'exitFlowCta',\n namespace: 'Payroll.PayrollConfiguration',\n },\n }\n }),\n)\n\nconst payrollSubmittingTransition = transition(\n componentEvents.RUN_PAYROLL_SUBMITTING,\n 'overview',\n reduce((ctx: PayrollFlowContextInterface): PayrollFlowContextInterface => ({\n ...hideBreadcrumb('configuration', ctx),\n hasPayrollSubmissionStarted: true,\n })),\n)\n\nconst receiptGetTransition = transition(\n componentEvents.RUN_PAYROLL_RECEIPT_GET,\n 'receipts',\n reduce((ctx: PayrollFlowContextInterface): PayrollFlowContextInterface => ({\n ...updateBreadcrumbs('receipts', ctx, {\n startDate: ctx.payPeriod?.startDate ?? '',\n endDate: ctx.payPeriod?.endDate ?? '',\n }),\n component: PayrollReceiptsContextual,\n alerts: undefined,\n ctaConfig: {\n labelKey: 'exitFlowCta',\n namespace: 'Payroll.PayrollReceipts',\n },\n })),\n)\n\nconst employeeSavedTransition = transition(\n componentEvents.RUN_PAYROLL_EMPLOYEE_SAVED,\n 'configuration',\n reduce((ctx: PayrollFlowContextInterface): PayrollFlowContextInterface => ({\n ...patchBreadcrumbsHeader(ctx, { currentBreadcrumbId: 'configuration' }),\n component: PayrollConfigurationContextual,\n employeeId: undefined,\n firstName: undefined,\n lastName: undefined,\n ctaConfig: {\n labelKey: 'exitFlowCta',\n namespace: 'Payroll.PayrollConfiguration',\n },\n })),\n)\n\nconst employeeCancelledTransition = transition(\n componentEvents.RUN_PAYROLL_EMPLOYEE_CANCELLED,\n 'configuration',\n reduce((ctx: PayrollFlowContextInterface): PayrollFlowContextInterface => ({\n ...patchBreadcrumbsHeader(ctx, { currentBreadcrumbId: 'configuration' }),\n component: PayrollConfigurationContextual,\n employeeId: undefined,\n firstName: undefined,\n lastName: undefined,\n ctaConfig: {\n labelKey: 'exitFlowCta',\n namespace: 'Payroll.PayrollConfiguration',\n },\n })),\n)\n\n/** @internal */\nexport const payrollExecutionMachine = {\n configuration: state<MachineTransition>(\n breadcrumbNavigateTransition('configuration'),\n calculatedTransition,\n alreadyProcessedTransition,\n employeeEditTransition,\n blockersViewAllTransition,\n ),\n overview: state<MachineTransition>(\n breadcrumbNavigateTransition('configuration', notSubmitted),\n payrollSubmittingTransition,\n editPayrollTransition,\n receiptGetTransition,\n ),\n editEmployee: state<MachineTransition>(\n breadcrumbNavigateTransition('configuration'),\n employeeSavedTransition,\n employeeCancelledTransition,\n ),\n receipts: state<MachineTransition>(\n breadcrumbNavigateTransition('configuration'),\n breadcrumbNavigateTransition('overview'),\n ),\n blockers: state<MachineTransition>(breadcrumbNavigateTransition('configuration')),\n}\n"],"names":["breadcrumbNavigateTransition","createBreadcrumbNavigateTransition","getPayrollExecutionBreadcrumbsNodes","isDismissal","ctx","updateBreadcrumbs","PayrollConfigurationContextual","PayrollOverviewContextual","calculatedTransition","transition","componentEvents","reduce","ev","a","alreadyProcessedTransition","payPeriod","employeeEditTransition","PayrollEditEmployeeContextual","blockersViewAllTransition","PayrollBlockerContextual","notSubmitted","editPayrollTransition","guard","payrollSubmittingTransition","hideBreadcrumb","receiptGetTransition","PayrollReceiptsContextual","employeeSavedTransition","patchBreadcrumbsHeader","employeeCancelledTransition","payrollExecutionMachine","state"],"mappings":"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"}