@gusto/embedded-react-sdk 0.46.0 → 0.46.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (152) hide show
  1. package/CHANGELOG.md +50 -0
  2. package/dist/components/Common/DataView/DataCards/DataCards.d.ts +2 -1
  3. package/dist/components/Common/DataView/DataCards/DataCards.js +14 -13
  4. package/dist/components/Common/DataView/DataCards/DataCards.js.map +1 -1
  5. package/dist/components/Common/DataView/DataTable/DataTable.d.ts +2 -1
  6. package/dist/components/Common/DataView/DataTable/DataTable.js +51 -50
  7. package/dist/components/Common/DataView/DataTable/DataTable.js.map +1 -1
  8. package/dist/components/Common/DataView/DataView.d.ts +1 -0
  9. package/dist/components/Common/DataView/DataView.js.map +1 -1
  10. package/dist/components/Common/DataView/useDataView.d.ts +8 -1
  11. package/dist/components/Common/DataView/useDataView.js +20 -17
  12. package/dist/components/Common/DataView/useDataView.js.map +1 -1
  13. package/dist/components/Employee/Compensation/management/AddAnotherJob/AddAnotherJob.d.ts +9 -0
  14. package/dist/components/Employee/Compensation/management/AddAnotherJob/AddAnotherJob.js +76 -0
  15. package/dist/components/Employee/Compensation/management/AddAnotherJob/AddAnotherJob.js.map +1 -0
  16. package/dist/components/Employee/Compensation/management/AddAnotherJob/AddAnotherJob.module.scss.js +8 -0
  17. package/dist/components/Employee/Compensation/management/AddAnotherJob/AddAnotherJob.module.scss.js.map +1 -0
  18. package/dist/components/Employee/Compensation/management/EditCompensation/EditCompensation.js +57 -202
  19. package/dist/components/Employee/Compensation/management/EditCompensation/EditCompensation.js.map +1 -1
  20. package/dist/components/Employee/Compensation/management/EditPendingCompensation/EditPendingCompensation.d.ts +25 -0
  21. package/dist/components/Employee/Compensation/management/EditPendingCompensation/EditPendingCompensation.js +81 -0
  22. package/dist/components/Employee/Compensation/management/EditPendingCompensation/EditPendingCompensation.js.map +1 -0
  23. package/dist/components/Employee/Compensation/management/EditPendingCompensation/EditPendingCompensation.module.scss.js +8 -0
  24. package/dist/components/Employee/Compensation/management/EditPendingCompensation/EditPendingCompensation.module.scss.js.map +1 -0
  25. package/dist/components/Employee/Compensation/management/ManagementCompensationFormBody.d.ts +18 -0
  26. package/dist/components/Employee/Compensation/management/ManagementCompensationFormBody.js +171 -0
  27. package/dist/components/Employee/Compensation/management/ManagementCompensationFormBody.js.map +1 -0
  28. package/dist/components/Employee/Compensation/management/index.d.ts +3 -0
  29. package/dist/components/Employee/Compensation/onboarding/EditCompensation/EditCompensation.d.ts +6 -1
  30. package/dist/components/Employee/Compensation/onboarding/EditCompensation/EditCompensation.js +67 -209
  31. package/dist/components/Employee/Compensation/onboarding/EditCompensation/EditCompensation.js.map +1 -1
  32. package/dist/components/Employee/Compensation/shared/AddCompensationFormBody.d.ts +18 -0
  33. package/dist/components/Employee/Compensation/shared/AddCompensationFormBody.js +169 -0
  34. package/dist/components/Employee/Compensation/shared/AddCompensationFormBody.js.map +1 -0
  35. package/dist/components/Employee/Compensation/shared/useCompensationForm/compensationSchema.d.ts +16 -0
  36. package/dist/components/Employee/Compensation/shared/useCompensationForm/compensationSchema.js +36 -30
  37. package/dist/components/Employee/Compensation/shared/useCompensationForm/compensationSchema.js.map +1 -1
  38. package/dist/components/Employee/Compensation/shared/useCompensationForm/fields.d.ts +1 -1
  39. package/dist/components/Employee/Compensation/shared/useCompensationForm/fields.js.map +1 -1
  40. package/dist/components/Employee/Compensation/shared/useCompensationForm/useCompensationForm.js +213 -191
  41. package/dist/components/Employee/Compensation/shared/useCompensationForm/useCompensationForm.js.map +1 -1
  42. package/dist/components/Employee/Dashboard/Dashboard.js +65 -53
  43. package/dist/components/Employee/Dashboard/Dashboard.js.map +1 -1
  44. package/dist/components/Employee/Dashboard/DashboardComponents.d.ts +3 -3
  45. package/dist/components/Employee/Dashboard/DashboardComponents.js +138 -101
  46. package/dist/components/Employee/Dashboard/DashboardComponents.js.map +1 -1
  47. package/dist/components/Employee/Dashboard/JobAndPayView.js +340 -320
  48. package/dist/components/Employee/Dashboard/JobAndPayView.js.map +1 -1
  49. package/dist/components/Employee/Dashboard/JobAndPayView.module.scss.js +5 -3
  50. package/dist/components/Employee/Dashboard/JobAndPayView.module.scss.js.map +1 -1
  51. package/dist/components/Employee/Dashboard/dashboardStateMachine.js +147 -148
  52. package/dist/components/Employee/Dashboard/dashboardStateMachine.js.map +1 -1
  53. package/dist/components/Employee/Dashboard/getPendingCompensationChanges.d.ts +6 -0
  54. package/dist/components/Employee/Dashboard/getPendingCompensationChanges.js +13 -12
  55. package/dist/components/Employee/Dashboard/getPendingCompensationChanges.js.map +1 -1
  56. package/dist/components/Employee/Dashboard/hooks/useEmployeeCompensation.d.ts +2 -2
  57. package/dist/components/Employee/Dashboard/hooks/useEmployeeCompensation.js +34 -35
  58. package/dist/components/Employee/Dashboard/hooks/useEmployeeCompensation.js.map +1 -1
  59. package/dist/components/Employee/EmployeeList/management/ManagementEmployeeList.js +37 -40
  60. package/dist/components/Employee/EmployeeList/management/ManagementEmployeeList.js.map +1 -1
  61. package/dist/components/Employee/EmployeeList/management/ManagementEmployeeListView.d.ts +1 -2
  62. package/dist/components/Employee/EmployeeList/management/ManagementEmployeeListView.js +64 -71
  63. package/dist/components/Employee/EmployeeList/management/ManagementEmployeeListView.js.map +1 -1
  64. package/dist/components/Employee/EmployeeListFlow/EmployeeListFlow.d.ts +2 -0
  65. package/dist/components/Employee/EmployeeListFlow/EmployeeListFlow.js +25 -0
  66. package/dist/components/Employee/EmployeeListFlow/EmployeeListFlow.js.map +1 -0
  67. package/dist/components/Employee/EmployeeListFlow/EmployeeListFlowComponents.d.ts +13 -0
  68. package/dist/components/Employee/EmployeeListFlow/EmployeeListFlowComponents.js +37 -0
  69. package/dist/components/Employee/EmployeeListFlow/EmployeeListFlowComponents.js.map +1 -0
  70. package/dist/components/Employee/EmployeeListFlow/employeeListStateMachine.d.ts +6 -0
  71. package/dist/components/Employee/EmployeeListFlow/employeeListStateMachine.js +69 -0
  72. package/dist/components/Employee/EmployeeListFlow/employeeListStateMachine.js.map +1 -0
  73. package/dist/components/Employee/EmployeeListFlow/index.d.ts +3 -0
  74. package/dist/components/Employee/HomeAddress/management/HomeAddress.js +15 -12
  75. package/dist/components/Employee/HomeAddress/management/HomeAddress.js.map +1 -1
  76. package/dist/components/Employee/HomeAddress/management/HomeAddressView.d.ts +2 -1
  77. package/dist/components/Employee/HomeAddress/management/HomeAddressView.js +86 -83
  78. package/dist/components/Employee/HomeAddress/management/HomeAddressView.js.map +1 -1
  79. package/dist/components/Employee/WorkAddress/management/WorkAddress.js +14 -11
  80. package/dist/components/Employee/WorkAddress/management/WorkAddress.js.map +1 -1
  81. package/dist/components/Employee/WorkAddress/management/WorkAddressView.d.ts +2 -1
  82. package/dist/components/Employee/WorkAddress/management/WorkAddressView.js +92 -89
  83. package/dist/components/Employee/WorkAddress/management/WorkAddressView.js.map +1 -1
  84. package/dist/components/Employee/exports/employeeManagement.d.ts +2 -0
  85. package/dist/components/Employee/exports/employeeManagement.js +18 -16
  86. package/dist/components/Employee/exports/employeeManagement.js.map +1 -1
  87. package/dist/components/Employee/index.d.ts +2 -0
  88. package/dist/components/Employee/index.js +32 -30
  89. package/dist/components/Employee/index.js.map +1 -1
  90. package/dist/components/Flow/FlowHeader.js +34 -31
  91. package/dist/components/Flow/FlowHeader.js.map +1 -1
  92. package/dist/components/Flow/useFlow.d.ts +12 -0
  93. package/dist/components/Flow/useFlow.js.map +1 -1
  94. package/dist/components/TimeOff/PolicyList/PolicyList.js +92 -69
  95. package/dist/components/TimeOff/PolicyList/PolicyList.js.map +1 -1
  96. package/dist/components/TimeOff/PolicyList/PolicyListPresentation.js +23 -23
  97. package/dist/components/TimeOff/PolicyList/PolicyListPresentation.js.map +1 -1
  98. package/dist/components/TimeOff/TimeOffFlow/TimeOffFlowComponents.d.ts +1 -1
  99. package/dist/components/TimeOff/TimeOffFlow/TimeOffFlowComponents.js.map +1 -1
  100. package/dist/components/TimeOff/TimeOffFlow/timeOffStateMachine.js +73 -56
  101. package/dist/components/TimeOff/TimeOffFlow/timeOffStateMachine.js.map +1 -1
  102. package/dist/components/TimeOff/TimeOffManagement/PolicyConfigurationForm/PolicyConfigurationForm.js +58 -58
  103. package/dist/components/TimeOff/TimeOffManagement/PolicyConfigurationForm/PolicyConfigurationForm.js.map +1 -1
  104. package/dist/components/TimeOff/TimeOffManagement/PolicyConfigurationForm/PolicyConfigurationFormPresentation.d.ts +1 -1
  105. package/dist/components/TimeOff/TimeOffManagement/PolicyConfigurationForm/PolicyConfigurationFormPresentation.js +91 -87
  106. package/dist/components/TimeOff/TimeOffManagement/PolicyConfigurationForm/PolicyConfigurationFormPresentation.js.map +1 -1
  107. package/dist/components/TimeOff/TimeOffManagement/PolicyConfigurationForm/PolicyConfigurationFormTypes.d.ts +2 -0
  108. package/dist/components/TimeOff/TimeOffManagement/SelectEmployees/SelectEmployeesHoliday.js +91 -124
  109. package/dist/components/TimeOff/TimeOffManagement/SelectEmployees/SelectEmployeesHoliday.js.map +1 -1
  110. package/dist/components/TimeOff/TimeOffManagement/SelectEmployees/SelectEmployeesPresentation.d.ts +1 -1
  111. package/dist/components/TimeOff/TimeOffManagement/SelectEmployees/SelectEmployeesPresentation.js +72 -87
  112. package/dist/components/TimeOff/TimeOffManagement/SelectEmployees/SelectEmployeesPresentation.js.map +1 -1
  113. package/dist/components/TimeOff/TimeOffManagement/SelectEmployees/SelectEmployeesPresentationTypes.d.ts +1 -6
  114. package/dist/components/TimeOff/TimeOffManagement/SelectEmployees/SelectEmployeesTimeOff.js +160 -220
  115. package/dist/components/TimeOff/TimeOffManagement/SelectEmployees/SelectEmployeesTimeOff.js.map +1 -1
  116. package/dist/components/TimeOff/TimeOffManagement/SelectEmployees/useSelectEmployeesData.d.ts +7 -3
  117. package/dist/components/TimeOff/TimeOffManagement/SelectEmployees/useSelectEmployeesData.js +77 -54
  118. package/dist/components/TimeOff/TimeOffManagement/SelectEmployees/useSelectEmployeesData.js.map +1 -1
  119. package/dist/components/TimeOff/TimeOffManagement/SelectEmployees/useSelectEmployeesData.test.d.ts +1 -0
  120. package/dist/components/TimeOff/TimeOffPolicyDetail/EditEmployeeBalanceModal.js +12 -11
  121. package/dist/components/TimeOff/TimeOffPolicyDetail/EditEmployeeBalanceModal.js.map +1 -1
  122. package/dist/components/TimeOff/TimeOffPolicyDetail/TimeOffPolicyDetail.js +177 -147
  123. package/dist/components/TimeOff/TimeOffPolicyDetail/TimeOffPolicyDetail.js.map +1 -1
  124. package/dist/components/TimeOff/shared/EmployeeTable/EmployeeTable.d.ts +1 -1
  125. package/dist/components/TimeOff/shared/EmployeeTable/EmployeeTable.js +38 -36
  126. package/dist/components/TimeOff/shared/EmployeeTable/EmployeeTable.js.map +1 -1
  127. package/dist/components/TimeOff/shared/EmployeeTable/EmployeeTableTypes.d.ts +2 -0
  128. package/dist/i18n/en/Company.TimeOff.SelectEmployees.json.js +10 -10
  129. package/dist/i18n/en/Company.TimeOff.TimeOffPolicies.json.js +17 -15
  130. package/dist/i18n/en/Company.TimeOff.TimeOffPolicies.json.js.map +1 -1
  131. package/dist/i18n/en/Company.TimeOff.TimeOffPolicyDetails.json.js +9 -9
  132. package/dist/i18n/en/Employee.Compensation.json.js +64 -56
  133. package/dist/i18n/en/Employee.Compensation.json.js.map +1 -1
  134. package/dist/i18n/en/Employee.Dashboard.json.js +26 -24
  135. package/dist/i18n/en/Employee.Dashboard.json.js.map +1 -1
  136. package/dist/i18n/en/Employee.HomeAddress.Management.json.js +12 -10
  137. package/dist/i18n/en/Employee.HomeAddress.Management.json.js.map +1 -1
  138. package/dist/i18n/en/Employee.ManagementEmployeeList.json.js +32 -30
  139. package/dist/i18n/en/Employee.ManagementEmployeeList.json.js.map +1 -1
  140. package/dist/i18n/en/Employee.WorkAddress.Management.json.js +16 -14
  141. package/dist/i18n/en/Employee.WorkAddress.Management.json.js.map +1 -1
  142. package/dist/i18n/en/common.json.d.ts +14 -0
  143. package/dist/partner-hook-utils/form/fields/DatePickerHookField.js +33 -32
  144. package/dist/partner-hook-utils/form/fields/DatePickerHookField.js.map +1 -1
  145. package/dist/partner-hook-utils/types.d.ts +4 -0
  146. package/dist/shared/constants.d.ts +2 -0
  147. package/dist/shared/constants.js +13 -12
  148. package/dist/shared/constants.js.map +1 -1
  149. package/dist/style.css +1 -1
  150. package/dist/types/i18next.d.ts +26 -12
  151. package/docs/reference/endpoint-inventory.json +24 -8
  152. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"employeeManagement.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;"}
1
+ {"version":3,"file":"employeeManagement.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;"}
@@ -15,6 +15,8 @@ export { SelfOnboardingFlow } from './SelfOnboardingFlow/SelfOnboardingFlow';
15
15
  export { EmployeeDocuments } from './Documents/onboarding/EmployeeDocuments';
16
16
  export { DashboardFlow } from './Dashboard';
17
17
  export type { DashboardFlowProps } from './Dashboard';
18
+ export { EmployeeListFlow } from './EmployeeListFlow';
19
+ export type { EmployeeListFlowProps } from './EmployeeListFlow';
18
20
  export { HomeAddress } from './HomeAddress/management/HomeAddress';
19
21
  export type { HomeAddressProps } from './HomeAddress/management/HomeAddress';
20
22
  export { EmploymentEligibility } from './Documents/onboarding/DocumentSigner/EmploymentEligibility';
@@ -2,44 +2,46 @@ import { EmployeeList as e } from "./EmployeeList/onboarding/EmployeeList.js";
2
2
  import { Profile as t } from "./Profile/onboarding/Profile.js";
3
3
  import { OnboardingFlow as x } from "./OnboardingFlow/OnboardingFlow.js";
4
4
  import { SelfOnboardingFlow as n } from "./SelfOnboardingFlow/SelfOnboardingFlow.js";
5
- import { HomeAddress as i } from "./HomeAddress/management/HomeAddress.js";
6
- import { TerminateEmployee as d } from "./Terminations/TerminateEmployee/TerminateEmployee.js";
5
+ import { HomeAddress as a } from "./HomeAddress/management/HomeAddress.js";
6
+ import { TerminateEmployee as s } from "./Terminations/TerminateEmployee/TerminateEmployee.js";
7
7
  import { TerminationSummary as y } from "./Terminations/TerminationSummary/TerminationSummary.js";
8
- import { TerminationFlow as T } from "./Terminations/TerminationFlow/TerminationFlow.js";
9
- import { WorkAddress as u } from "./WorkAddress/management/WorkAddress.js";
10
- import { Compensation as F } from "./Compensation/onboarding/Compensation.js";
11
- import { DashboardFlow as w } from "./Dashboard/DashboardFlow.js";
8
+ import { TerminationFlow as E } from "./Terminations/TerminationFlow/TerminationFlow.js";
9
+ import { WorkAddress as T } from "./WorkAddress/management/WorkAddress.js";
10
+ import { Compensation as u } from "./Compensation/onboarding/Compensation.js";
11
+ import { DashboardFlow as S } from "./Dashboard/DashboardFlow.js";
12
12
  import { Deductions as c } from "./Deductions/Deductions.js";
13
- import { DocumentSigner as h } from "./Documents/onboarding/DocumentSigner/DocumentSigner.js";
14
- import { EmployeeDocuments as L } from "./Documents/onboarding/EmployeeDocuments/EmployeeDocuments.js";
15
- import { EmploymentEligibility as k } from "./Documents/onboarding/DocumentSigner/EmploymentEligibility/EmploymentEligibility.js";
16
- import { FederalTaxes as H } from "./FederalTaxes/management/FederalTaxes.js";
17
- import { Landing as W } from "./Landing/Landing.js";
18
- import { OnboardingSummary as q } from "./OnboardingSummary/OnboardingSummary.js";
19
- import { PaymentMethod as z } from "./PaymentMethod/onboarding/PaymentMethod.js";
20
- import { StateTaxes as G } from "./StateTaxes/management/StateTaxes.js";
21
- import { Taxes as J } from "./Taxes/Taxes.js";
13
+ import { DocumentSigner as O } from "./Documents/onboarding/DocumentSigner/DocumentSigner.js";
14
+ import { EmployeeDocuments as A } from "./Documents/onboarding/EmployeeDocuments/EmployeeDocuments.js";
15
+ import { EmployeeListFlow as k } from "./EmployeeListFlow/EmployeeListFlow.js";
16
+ import { EmploymentEligibility as H } from "./Documents/onboarding/DocumentSigner/EmploymentEligibility/EmploymentEligibility.js";
17
+ import { FederalTaxes as W } from "./FederalTaxes/management/FederalTaxes.js";
18
+ import { Landing as q } from "./Landing/Landing.js";
19
+ import { OnboardingSummary as z } from "./OnboardingSummary/OnboardingSummary.js";
20
+ import { PaymentMethod as G } from "./PaymentMethod/onboarding/PaymentMethod.js";
21
+ import { StateTaxes as J } from "./StateTaxes/management/StateTaxes.js";
22
+ import { Taxes as N } from "./Taxes/Taxes.js";
22
23
  export {
23
- F as Compensation,
24
- w as DashboardFlow,
24
+ u as Compensation,
25
+ S as DashboardFlow,
25
26
  c as Deductions,
26
- h as DocumentSigner,
27
- L as EmployeeDocuments,
27
+ O as DocumentSigner,
28
+ A as EmployeeDocuments,
28
29
  e as EmployeeList,
29
- k as EmploymentEligibility,
30
- H as FederalTaxes,
31
- i as HomeAddress,
32
- W as Landing,
30
+ k as EmployeeListFlow,
31
+ H as EmploymentEligibility,
32
+ W as FederalTaxes,
33
+ a as HomeAddress,
34
+ q as Landing,
33
35
  x as OnboardingFlow,
34
- q as OnboardingSummary,
35
- z as PaymentMethod,
36
+ z as OnboardingSummary,
37
+ G as PaymentMethod,
36
38
  t as Profile,
37
39
  n as SelfOnboardingFlow,
38
- G as StateTaxes,
39
- J as Taxes,
40
- d as TerminateEmployee,
41
- T as TerminationFlow,
40
+ J as StateTaxes,
41
+ N as Taxes,
42
+ s as TerminateEmployee,
43
+ E as TerminationFlow,
42
44
  y as TerminationSummary,
43
- u as WorkAddress
45
+ T as WorkAddress
44
46
  };
45
47
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;"}
@@ -1,21 +1,21 @@
1
- import { jsx as r, jsxs as s } from "react/jsx-runtime";
2
- import { useTranslation as i } from "react-i18next";
3
- import { FlowBreadcrumbs as d } from "../Common/FlowBreadcrumbs/FlowBreadcrumbs.js";
4
- import { Flex as m, FlexItem as c } from "../Common/Flex/Flex.js";
1
+ import { jsx as r, jsxs as i } from "react/jsx-runtime";
2
+ import { useTranslation as m } from "react-i18next";
3
+ import { FlowBreadcrumbs as f } from "../Common/FlowBreadcrumbs/FlowBreadcrumbs.js";
4
+ import { Flex as l, FlexItem as a } from "../Common/Flex/Flex.js";
5
5
  import "classnames";
6
- import { componentEvents as p } from "../../shared/constants.js";
7
- import { useFlow as a } from "./useFlow.js";
6
+ import { componentEvents as b } from "../../shared/constants.js";
7
+ import { useFlow as s } from "./useFlow.js";
8
8
  import { useComponentContext as u } from "../../contexts/ComponentAdapter/useComponentContext.js";
9
- import f from "../../assets/icons/caret-left.svg.js";
10
- function H() {
11
- const { header: e, component: t } = a();
9
+ import h from "../../assets/icons/caret-left.svg.js";
10
+ function L() {
11
+ const { header: e, component: t } = s();
12
12
  if (!e || !t) return null;
13
13
  switch (e.type) {
14
14
  case "minimal":
15
- return /* @__PURE__ */ r(b, { cta: e.cta });
15
+ return /* @__PURE__ */ r(w, { back: e.back, cta: e.cta });
16
16
  case "progress":
17
17
  return /* @__PURE__ */ r(
18
- h,
18
+ x,
19
19
  {
20
20
  currentStep: e.currentStep,
21
21
  totalSteps: e.totalSteps,
@@ -24,7 +24,7 @@ function H() {
24
24
  );
25
25
  case "breadcrumbs":
26
26
  return e.currentBreadcrumbId ? /* @__PURE__ */ r(
27
- w,
27
+ v,
28
28
  {
29
29
  currentBreadcrumbId: e.currentBreadcrumbId,
30
30
  breadcrumbs: e.breadcrumbs,
@@ -33,58 +33,61 @@ function H() {
33
33
  ) : null;
34
34
  }
35
35
  }
36
- function b({ cta: e }) {
37
- const { onEvent: t } = a(), n = u(), { t: o } = i();
38
- return /* @__PURE__ */ s(m, { flexDirection: "row", justifyContent: "space-between", alignItems: "center", children: [
39
- /* @__PURE__ */ r(c, { children: /* @__PURE__ */ r(
40
- n.Button,
36
+ function w({
37
+ back: e,
38
+ cta: t
39
+ }) {
40
+ const { onEvent: n } = s(), o = u(), { t: c } = m(e?.namespace), d = c(e ? e.labelKey : "back"), p = e?.event ?? b.CANCEL;
41
+ return /* @__PURE__ */ i(l, { flexDirection: "row", justifyContent: "space-between", alignItems: "center", children: [
42
+ /* @__PURE__ */ r(a, { children: /* @__PURE__ */ r(
43
+ o.Button,
41
44
  {
42
45
  variant: "secondary",
43
- icon: /* @__PURE__ */ r(f, { "aria-hidden": "true" }),
46
+ icon: /* @__PURE__ */ r(h, { "aria-hidden": "true" }),
44
47
  onClick: () => {
45
- t(p.CANCEL, void 0);
48
+ n(p, void 0);
46
49
  },
47
- children: o("back")
50
+ children: d
48
51
  }
49
52
  ) }),
50
- e && /* @__PURE__ */ r(c, { children: /* @__PURE__ */ r(e, {}) })
53
+ t && /* @__PURE__ */ r(a, { children: /* @__PURE__ */ r(t, {}) })
51
54
  ] });
52
55
  }
53
- function h({
56
+ function x({
54
57
  currentStep: e,
55
58
  totalSteps: t,
56
59
  cta: n
57
60
  }) {
58
- const o = u(), { t: l } = i();
61
+ const o = u(), { t: c } = m();
59
62
  return /* @__PURE__ */ r(
60
63
  o.ProgressBar,
61
64
  {
62
65
  totalSteps: t,
63
66
  currentStep: e,
64
- label: l("progressBarLabel", { totalSteps: t, currentStep: e }),
67
+ label: c("progressBarLabel", { totalSteps: t, currentStep: e }),
65
68
  cta: n
66
69
  }
67
70
  );
68
71
  }
69
- function w({
72
+ function v({
70
73
  currentBreadcrumbId: e,
71
74
  breadcrumbs: t = {},
72
75
  cta: n
73
76
  }) {
74
- const { onEvent: o } = a();
75
- return /* @__PURE__ */ s(m, { flexDirection: "row", justifyContent: "space-between", alignItems: "center", children: [
76
- /* @__PURE__ */ r(c, { flexGrow: 1, children: /* @__PURE__ */ r(
77
- d,
77
+ const { onEvent: o } = s();
78
+ return /* @__PURE__ */ i(l, { flexDirection: "row", justifyContent: "space-between", alignItems: "center", children: [
79
+ /* @__PURE__ */ r(a, { flexGrow: 1, children: /* @__PURE__ */ r(
80
+ f,
78
81
  {
79
82
  breadcrumbs: e ? t[e] ?? [] : [],
80
83
  currentBreadcrumbId: e,
81
84
  onEvent: o
82
85
  }
83
86
  ) }),
84
- /* @__PURE__ */ r(c, { children: n && /* @__PURE__ */ r(n, {}) })
87
+ /* @__PURE__ */ r(a, { children: n && /* @__PURE__ */ r(n, {}) })
85
88
  ] });
86
89
  }
87
90
  export {
88
- H as FlowHeader
91
+ L as FlowHeader
89
92
  };
90
93
  //# sourceMappingURL=FlowHeader.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"FlowHeader.js","sources":["../../../src/components/Flow/FlowHeader.tsx"],"sourcesContent":["import { useTranslation } from 'react-i18next'\nimport { FlowBreadcrumbs } from '../Common/FlowBreadcrumbs/FlowBreadcrumbs'\nimport type { BreadcrumbTrail } from '../Common/FlowBreadcrumbs/FlowBreadcrumbsTypes'\nimport { Flex } from '../Common/Flex'\nimport { FlexItem } from '../Common'\nimport { useFlow } from './useFlow'\nimport { componentEvents } from '@/shared/constants'\nimport { useComponentContext } from '@/contexts/ComponentAdapter/useComponentContext'\nimport CaretLeftIcon from '@/assets/icons/caret-left.svg?react'\n\n/**\n * Renders the chrome above the active flow component (back affordance,\n * progress bar, breadcrumbs, ...). Layout is driven by a single\n * discriminated `header` field on the flow context. Each variant maps to a\n * focused renderer below:\n *\n * header.type === 'minimal' → MinimalHeader\n * header.type === 'progress' → ProgressHeader\n * header.type === 'breadcrumbs' → BreadcrumbsHeader\n *\n * To add a new piece of chrome:\n * 1. Add a new variant to `FlowHeaderConfig` in `useFlow.ts`.\n * 2. Add a new renderer function below.\n * 3. Branch on it in `FlowHeader`.\n */\nexport function FlowHeader() {\n const { header, component } = useFlow()\n\n if (!header || !component) return null\n\n switch (header.type) {\n case 'minimal':\n return <MinimalHeader cta={header.cta} />\n case 'progress':\n return (\n <ProgressHeader\n currentStep={header.currentStep}\n totalSteps={header.totalSteps}\n cta={header.cta}\n />\n )\n case 'breadcrumbs':\n // The breadcrumb trail is intentionally persisted across \"passive\"\n // states (e.g. landing screens) so that subsequent transitions can\n // pick up where they left off without rebuilding it. We render the\n // bar only when there's an active breadcrumb to show; otherwise\n // we treat the flow as \"no chrome\" for this state.\n if (!header.currentBreadcrumbId) return null\n return (\n <BreadcrumbsHeader\n currentBreadcrumbId={header.currentBreadcrumbId}\n breadcrumbs={header.breadcrumbs}\n cta={header.cta}\n />\n )\n }\n}\n\nfunction MinimalHeader({ cta: Cta }: { cta?: React.ComponentType }) {\n const { onEvent } = useFlow()\n const Components = useComponentContext()\n const { t } = useTranslation()\n\n return (\n <Flex flexDirection=\"row\" justifyContent=\"space-between\" alignItems=\"center\">\n <FlexItem>\n <Components.Button\n variant=\"secondary\"\n icon={<CaretLeftIcon aria-hidden=\"true\" />}\n onClick={() => {\n onEvent(componentEvents.CANCEL, undefined)\n }}\n >\n {t('back')}\n </Components.Button>\n </FlexItem>\n {Cta && (\n <FlexItem>\n <Cta />\n </FlexItem>\n )}\n </Flex>\n )\n}\n\nfunction ProgressHeader({\n currentStep,\n totalSteps,\n cta: Cta,\n}: {\n currentStep: number\n totalSteps: number\n cta?: React.ComponentType\n}) {\n const Components = useComponentContext()\n const { t } = useTranslation()\n\n return (\n <Components.ProgressBar\n totalSteps={totalSteps}\n currentStep={currentStep}\n label={t('progressBarLabel', { totalSteps, currentStep })}\n cta={Cta}\n />\n )\n}\n\nfunction BreadcrumbsHeader({\n currentBreadcrumbId,\n breadcrumbs = {},\n cta: Cta,\n}: {\n currentBreadcrumbId?: string\n breadcrumbs?: BreadcrumbTrail\n cta?: React.ComponentType\n}) {\n const { onEvent } = useFlow()\n\n return (\n <Flex flexDirection=\"row\" justifyContent=\"space-between\" alignItems=\"center\">\n <FlexItem flexGrow={1}>\n <FlowBreadcrumbs\n breadcrumbs={currentBreadcrumbId ? (breadcrumbs[currentBreadcrumbId] ?? []) : []}\n currentBreadcrumbId={currentBreadcrumbId}\n onEvent={onEvent}\n />\n </FlexItem>\n <FlexItem>{Cta && <Cta />}</FlexItem>\n </Flex>\n )\n}\n"],"names":["FlowHeader","header","component","useFlow","jsx","MinimalHeader","ProgressHeader","BreadcrumbsHeader","Cta","onEvent","Components","useComponentContext","t","useTranslation","Flex","FlexItem","CaretLeftIcon","componentEvents","currentStep","totalSteps","currentBreadcrumbId","breadcrumbs","FlowBreadcrumbs"],"mappings":";;;;;;;;;AAyBO,SAASA,IAAa;AAC3B,QAAM,EAAE,QAAAC,GAAQ,WAAAC,EAAA,IAAcC,EAAA;AAE9B,MAAI,CAACF,KAAU,CAACC,EAAW,QAAO;AAElC,UAAQD,EAAO,MAAA;AAAA,IACb,KAAK;AACH,aAAO,gBAAAG,EAACC,GAAA,EAAc,KAAKJ,EAAO,IAAA,CAAK;AAAA,IACzC,KAAK;AACH,aACE,gBAAAG;AAAA,QAACE;AAAA,QAAA;AAAA,UACC,aAAaL,EAAO;AAAA,UACpB,YAAYA,EAAO;AAAA,UACnB,KAAKA,EAAO;AAAA,QAAA;AAAA,MAAA;AAAA,IAGlB,KAAK;AAMH,aAAKA,EAAO,sBAEV,gBAAAG;AAAA,QAACG;AAAA,QAAA;AAAA,UACC,qBAAqBN,EAAO;AAAA,UAC5B,aAAaA,EAAO;AAAA,UACpB,KAAKA,EAAO;AAAA,QAAA;AAAA,MAAA,IALwB;AAAA,EAMtC;AAGR;AAEA,SAASI,EAAc,EAAE,KAAKG,KAAsC;AAClE,QAAM,EAAE,SAAAC,EAAA,IAAYN,EAAA,GACdO,IAAaC,EAAA,GACb,EAAE,GAAAC,EAAA,IAAMC,EAAA;AAEd,2BACGC,GAAA,EAAK,eAAc,OAAM,gBAAe,iBAAgB,YAAW,UAClE,UAAA;AAAA,IAAA,gBAAAV,EAACW,GAAA,EACC,UAAA,gBAAAX;AAAA,MAACM,EAAW;AAAA,MAAX;AAAA,QACC,SAAQ;AAAA,QACR,MAAM,gBAAAN,EAACY,GAAA,EAAc,eAAY,OAAA,CAAO;AAAA,QACxC,SAAS,MAAM;AACb,UAAAP,EAAQQ,EAAgB,QAAQ,MAAS;AAAA,QAC3C;AAAA,QAEC,YAAE,MAAM;AAAA,MAAA;AAAA,IAAA,GAEb;AAAA,IACCT,KACC,gBAAAJ,EAACW,GAAA,EACC,UAAA,gBAAAX,EAACI,KAAI,EAAA,CACP;AAAA,EAAA,GAEJ;AAEJ;AAEA,SAASF,EAAe;AAAA,EACtB,aAAAY;AAAA,EACA,YAAAC;AAAA,EACA,KAAKX;AACP,GAIG;AACD,QAAME,IAAaC,EAAA,GACb,EAAE,GAAAC,EAAA,IAAMC,EAAA;AAEd,SACE,gBAAAT;AAAA,IAACM,EAAW;AAAA,IAAX;AAAA,MACC,YAAAS;AAAA,MACA,aAAAD;AAAA,MACA,OAAON,EAAE,oBAAoB,EAAE,YAAAO,GAAY,aAAAD,GAAa;AAAA,MACxD,KAAKV;AAAA,IAAA;AAAA,EAAA;AAGX;AAEA,SAASD,EAAkB;AAAA,EACzB,qBAAAa;AAAA,EACA,aAAAC,IAAc,CAAA;AAAA,EACd,KAAKb;AACP,GAIG;AACD,QAAM,EAAE,SAAAC,EAAA,IAAYN,EAAA;AAEpB,2BACGW,GAAA,EAAK,eAAc,OAAM,gBAAe,iBAAgB,YAAW,UAClE,UAAA;AAAA,IAAA,gBAAAV,EAACW,GAAA,EAAS,UAAU,GAClB,UAAA,gBAAAX;AAAA,MAACkB;AAAA,MAAA;AAAA,QACC,aAAaF,IAAuBC,EAAYD,CAAmB,KAAK,CAAA,IAAM,CAAA;AAAA,QAC9E,qBAAAA;AAAA,QACA,SAAAX;AAAA,MAAA;AAAA,IAAA,GAEJ;AAAA,IACA,gBAAAL,EAACW,GAAA,EAAU,UAAAP,KAAO,gBAAAJ,EAACI,KAAI,EAAA,CAAG;AAAA,EAAA,GAC5B;AAEJ;"}
1
+ {"version":3,"file":"FlowHeader.js","sources":["../../../src/components/Flow/FlowHeader.tsx"],"sourcesContent":["import { useTranslation } from 'react-i18next'\nimport type { CustomTypeOptions } from 'i18next'\nimport { FlowBreadcrumbs } from '../Common/FlowBreadcrumbs/FlowBreadcrumbs'\nimport type { BreadcrumbTrail } from '../Common/FlowBreadcrumbs/FlowBreadcrumbsTypes'\nimport { Flex } from '../Common/Flex'\nimport { FlexItem } from '../Common'\nimport { useFlow } from './useFlow'\nimport { componentEvents, type EventType } from '@/shared/constants'\nimport { useComponentContext } from '@/contexts/ComponentAdapter/useComponentContext'\nimport CaretLeftIcon from '@/assets/icons/caret-left.svg?react'\n\n/**\n * Renders the chrome above the active flow component (back affordance,\n * progress bar, breadcrumbs, ...). Layout is driven by a single\n * discriminated `header` field on the flow context. Each variant maps to a\n * focused renderer below:\n *\n * header.type === 'minimal' → MinimalHeader\n * header.type === 'progress' → ProgressHeader\n * header.type === 'breadcrumbs' → BreadcrumbsHeader\n *\n * To add a new piece of chrome:\n * 1. Add a new variant to `FlowHeaderConfig` in `useFlow.ts`.\n * 2. Add a new renderer function below.\n * 3. Branch on it in `FlowHeader`.\n */\nexport function FlowHeader() {\n const { header, component } = useFlow()\n\n if (!header || !component) return null\n\n switch (header.type) {\n case 'minimal':\n return <MinimalHeader back={header.back} cta={header.cta} />\n case 'progress':\n return (\n <ProgressHeader\n currentStep={header.currentStep}\n totalSteps={header.totalSteps}\n cta={header.cta}\n />\n )\n case 'breadcrumbs':\n // The breadcrumb trail is intentionally persisted across \"passive\"\n // states (e.g. landing screens) so that subsequent transitions can\n // pick up where they left off without rebuilding it. We render the\n // bar only when there's an active breadcrumb to show; otherwise\n // we treat the flow as \"no chrome\" for this state.\n if (!header.currentBreadcrumbId) return null\n return (\n <BreadcrumbsHeader\n currentBreadcrumbId={header.currentBreadcrumbId}\n breadcrumbs={header.breadcrumbs}\n cta={header.cta}\n />\n )\n }\n}\n\nfunction MinimalHeader({\n back,\n cta: Cta,\n}: {\n back?: {\n labelKey: string\n namespace: keyof CustomTypeOptions['resources']\n event: EventType\n }\n cta?: React.ComponentType\n}) {\n const { onEvent } = useFlow()\n const Components = useComponentContext()\n const { t } = useTranslation(back?.namespace)\n\n const label = back ? t(back.labelKey as never) : t('back')\n const event = back?.event ?? componentEvents.CANCEL\n\n return (\n <Flex flexDirection=\"row\" justifyContent=\"space-between\" alignItems=\"center\">\n <FlexItem>\n <Components.Button\n variant=\"secondary\"\n icon={<CaretLeftIcon aria-hidden=\"true\" />}\n onClick={() => {\n onEvent(event, undefined)\n }}\n >\n {label}\n </Components.Button>\n </FlexItem>\n {Cta && (\n <FlexItem>\n <Cta />\n </FlexItem>\n )}\n </Flex>\n )\n}\n\nfunction ProgressHeader({\n currentStep,\n totalSteps,\n cta: Cta,\n}: {\n currentStep: number\n totalSteps: number\n cta?: React.ComponentType\n}) {\n const Components = useComponentContext()\n const { t } = useTranslation()\n\n return (\n <Components.ProgressBar\n totalSteps={totalSteps}\n currentStep={currentStep}\n label={t('progressBarLabel', { totalSteps, currentStep })}\n cta={Cta}\n />\n )\n}\n\nfunction BreadcrumbsHeader({\n currentBreadcrumbId,\n breadcrumbs = {},\n cta: Cta,\n}: {\n currentBreadcrumbId?: string\n breadcrumbs?: BreadcrumbTrail\n cta?: React.ComponentType\n}) {\n const { onEvent } = useFlow()\n\n return (\n <Flex flexDirection=\"row\" justifyContent=\"space-between\" alignItems=\"center\">\n <FlexItem flexGrow={1}>\n <FlowBreadcrumbs\n breadcrumbs={currentBreadcrumbId ? (breadcrumbs[currentBreadcrumbId] ?? []) : []}\n currentBreadcrumbId={currentBreadcrumbId}\n onEvent={onEvent}\n />\n </FlexItem>\n <FlexItem>{Cta && <Cta />}</FlexItem>\n </Flex>\n )\n}\n"],"names":["FlowHeader","header","component","useFlow","MinimalHeader","jsx","ProgressHeader","BreadcrumbsHeader","back","Cta","onEvent","Components","useComponentContext","t","useTranslation","label","event","componentEvents","Flex","FlexItem","CaretLeftIcon","currentStep","totalSteps","currentBreadcrumbId","breadcrumbs","FlowBreadcrumbs"],"mappings":";;;;;;;;;AA0BO,SAASA,IAAa;AAC3B,QAAM,EAAE,QAAAC,GAAQ,WAAAC,EAAA,IAAcC,EAAA;AAE9B,MAAI,CAACF,KAAU,CAACC,EAAW,QAAO;AAElC,UAAQD,EAAO,MAAA;AAAA,IACb,KAAK;AACH,+BAAQG,GAAA,EAAc,MAAMH,EAAO,MAAM,KAAKA,EAAO,KAAK;AAAA,IAC5D,KAAK;AACH,aACE,gBAAAI;AAAA,QAACC;AAAA,QAAA;AAAA,UACC,aAAaL,EAAO;AAAA,UACpB,YAAYA,EAAO;AAAA,UACnB,KAAKA,EAAO;AAAA,QAAA;AAAA,MAAA;AAAA,IAGlB,KAAK;AAMH,aAAKA,EAAO,sBAEV,gBAAAI;AAAA,QAACE;AAAA,QAAA;AAAA,UACC,qBAAqBN,EAAO;AAAA,UAC5B,aAAaA,EAAO;AAAA,UACpB,KAAKA,EAAO;AAAA,QAAA;AAAA,MAAA,IALwB;AAAA,EAMtC;AAGR;AAEA,SAASG,EAAc;AAAA,EACrB,MAAAI;AAAA,EACA,KAAKC;AACP,GAOG;AACD,QAAM,EAAE,SAAAC,EAAA,IAAYP,EAAA,GACdQ,IAAaC,EAAA,GACb,EAAE,GAAAC,EAAA,IAAMC,EAAeN,GAAM,SAAS,GAEtCO,IAAeF,EAAPL,IAASA,EAAK,WAAuB,MAAN,GACvCQ,IAAQR,GAAM,SAASS,EAAgB;AAE7C,2BACGC,GAAA,EAAK,eAAc,OAAM,gBAAe,iBAAgB,YAAW,UAClE,UAAA;AAAA,IAAA,gBAAAb,EAACc,GAAA,EACC,UAAA,gBAAAd;AAAA,MAACM,EAAW;AAAA,MAAX;AAAA,QACC,SAAQ;AAAA,QACR,MAAM,gBAAAN,EAACe,GAAA,EAAc,eAAY,OAAA,CAAO;AAAA,QACxC,SAAS,MAAM;AACb,UAAAV,EAAQM,GAAO,MAAS;AAAA,QAC1B;AAAA,QAEC,UAAAD;AAAA,MAAA;AAAA,IAAA,GAEL;AAAA,IACCN,KACC,gBAAAJ,EAACc,GAAA,EACC,UAAA,gBAAAd,EAACI,KAAI,EAAA,CACP;AAAA,EAAA,GAEJ;AAEJ;AAEA,SAASH,EAAe;AAAA,EACtB,aAAAe;AAAA,EACA,YAAAC;AAAA,EACA,KAAKb;AACP,GAIG;AACD,QAAME,IAAaC,EAAA,GACb,EAAE,GAAAC,EAAA,IAAMC,EAAA;AAEd,SACE,gBAAAT;AAAA,IAACM,EAAW;AAAA,IAAX;AAAA,MACC,YAAAW;AAAA,MACA,aAAAD;AAAA,MACA,OAAOR,EAAE,oBAAoB,EAAE,YAAAS,GAAY,aAAAD,GAAa;AAAA,MACxD,KAAKZ;AAAA,IAAA;AAAA,EAAA;AAGX;AAEA,SAASF,EAAkB;AAAA,EACzB,qBAAAgB;AAAA,EACA,aAAAC,IAAc,CAAA;AAAA,EACd,KAAKf;AACP,GAIG;AACD,QAAM,EAAE,SAAAC,EAAA,IAAYP,EAAA;AAEpB,2BACGe,GAAA,EAAK,eAAc,OAAM,gBAAe,iBAAgB,YAAW,UAClE,UAAA;AAAA,IAAA,gBAAAb,EAACc,GAAA,EAAS,UAAU,GAClB,UAAA,gBAAAd;AAAA,MAACoB;AAAA,MAAA;AAAA,QACC,aAAaF,IAAuBC,EAAYD,CAAmB,KAAK,CAAA,IAAM,CAAA;AAAA,QAC9E,qBAAAA;AAAA,QACA,SAAAb;AAAA,MAAA;AAAA,IAAA,GAEJ;AAAA,IACA,gBAAAL,EAACc,GAAA,EAAU,UAAAV,KAAO,gBAAAJ,EAACI,KAAI,EAAA,CAAG;AAAA,EAAA,GAC5B;AAEJ;"}
@@ -23,6 +23,18 @@ export interface CtaConfig {
23
23
  */
24
24
  export type FlowHeaderConfig = {
25
25
  type: 'minimal';
26
+ /**
27
+ * Optional override for the default back button (defaults to
28
+ * `t('back')` + `componentEvents.CANCEL`). Provide both `label` and
29
+ * `event` to render a flow-specific affordance — e.g. "Back to
30
+ * employees" routed to a dedicated state-machine transition so nested
31
+ * flows don't intercept it as a generic cancel.
32
+ */
33
+ back?: {
34
+ labelKey: string;
35
+ namespace: keyof CustomTypeOptions['resources'];
36
+ event: EventType;
37
+ };
26
38
  cta?: React.ComponentType;
27
39
  } | {
28
40
  type: 'progress';
@@ -1 +1 @@
1
- {"version":3,"file":"useFlow.js","sources":["../../../src/components/Flow/useFlow.ts"],"sourcesContent":["import { createContext, useContext } from 'react'\nimport type { CustomTypeOptions } from 'i18next'\nimport type { OnEventType } from '../Base/useBase'\nimport type { CommonComponentInterface } from '../Base'\nimport type { BreadcrumbTrail } from '../Common/FlowBreadcrumbs/FlowBreadcrumbsTypes'\nimport type { EventType } from '@/shared/constants'\n\nexport interface CtaConfig {\n labelKey: string\n namespace?: keyof CustomTypeOptions['resources']\n}\n\n/**\n * Discriminated union describing the chrome rendered above the active flow\n * component. Each variant declares only the data it needs:\n * - `minimal` → Back button. Optional `cta` for an extra control next to it.\n * - `progress` → Step indicator. Requires `currentStep` / `totalSteps`,\n * plus optional `cta`.\n * - `breadcrumbs` → Breadcrumb trail. Optional `currentBreadcrumbId` /\n * `breadcrumbs` (typically populated via\n * `buildBreadcrumbs` + `updateBreadcrumbs`), plus optional\n * `cta`.\n *\n * `cta` carries the same meaning across every variant: an optional component\n * rendered as part of the header chrome.\n */\nexport type FlowHeaderConfig =\n | {\n type: 'minimal'\n cta?: React.ComponentType\n }\n | {\n type: 'progress'\n currentStep: number\n totalSteps: number\n cta?: React.ComponentType\n }\n | {\n type: 'breadcrumbs'\n currentBreadcrumbId?: string\n breadcrumbs?: BreadcrumbTrail\n cta?: React.ComponentType\n }\n\nexport interface FlowContextInterface {\n component: React.ComponentType<CommonComponentInterface> | null\n onEvent: OnEventType<EventType, unknown>\n defaultValues?: Record<string, unknown>\n ctaConfig?: CtaConfig | null\n /**\n * Optional chrome rendered above the active flow component. When omitted\n * (or set to `null`), no header is shown.\n */\n header?: FlowHeaderConfig | null\n}\n\nexport const FlowContext = createContext<FlowContextInterface | null>(null)\n\n//TODO: This is hiding the fact that the callsite for useFlow\n// destructures a `companyId` that doesn't seem to exist\n// eslint-disable-next-line @typescript-eslint/no-unnecessary-type-parameters\nexport function useFlow<C extends FlowContextInterface>() {\n // When used outside provider, this is expected to return undefined - consumers must fallback to params\n const values = useContext<C>(FlowContext as unknown as React.Context<C>)\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (!values) {\n throw new Error('useFlow used outside provider')\n }\n return values\n}\n"],"names":["FlowContext","createContext","useFlow","values","useContext"],"mappings":";AAwDO,MAAMA,IAAcC,EAA2C,IAAI;AAKnE,SAASC,IAA0C;AAExD,QAAMC,IAASC,EAAcJ,CAA0C;AAEvE,MAAI,CAACG;AACH,UAAM,IAAI,MAAM,+BAA+B;AAEjD,SAAOA;AACT;"}
1
+ {"version":3,"file":"useFlow.js","sources":["../../../src/components/Flow/useFlow.ts"],"sourcesContent":["import { createContext, useContext } from 'react'\nimport type { CustomTypeOptions } from 'i18next'\nimport type { OnEventType } from '../Base/useBase'\nimport type { CommonComponentInterface } from '../Base'\nimport type { BreadcrumbTrail } from '../Common/FlowBreadcrumbs/FlowBreadcrumbsTypes'\nimport type { EventType } from '@/shared/constants'\n\nexport interface CtaConfig {\n labelKey: string\n namespace?: keyof CustomTypeOptions['resources']\n}\n\n/**\n * Discriminated union describing the chrome rendered above the active flow\n * component. Each variant declares only the data it needs:\n * - `minimal` → Back button. Optional `cta` for an extra control next to it.\n * - `progress` → Step indicator. Requires `currentStep` / `totalSteps`,\n * plus optional `cta`.\n * - `breadcrumbs` → Breadcrumb trail. Optional `currentBreadcrumbId` /\n * `breadcrumbs` (typically populated via\n * `buildBreadcrumbs` + `updateBreadcrumbs`), plus optional\n * `cta`.\n *\n * `cta` carries the same meaning across every variant: an optional component\n * rendered as part of the header chrome.\n */\nexport type FlowHeaderConfig =\n | {\n type: 'minimal'\n /**\n * Optional override for the default back button (defaults to\n * `t('back')` + `componentEvents.CANCEL`). Provide both `label` and\n * `event` to render a flow-specific affordance — e.g. \"Back to\n * employees\" routed to a dedicated state-machine transition so nested\n * flows don't intercept it as a generic cancel.\n */\n back?: {\n labelKey: string\n namespace: keyof CustomTypeOptions['resources']\n event: EventType\n }\n cta?: React.ComponentType\n }\n | {\n type: 'progress'\n currentStep: number\n totalSteps: number\n cta?: React.ComponentType\n }\n | {\n type: 'breadcrumbs'\n currentBreadcrumbId?: string\n breadcrumbs?: BreadcrumbTrail\n cta?: React.ComponentType\n }\n\nexport interface FlowContextInterface {\n component: React.ComponentType<CommonComponentInterface> | null\n onEvent: OnEventType<EventType, unknown>\n defaultValues?: Record<string, unknown>\n ctaConfig?: CtaConfig | null\n /**\n * Optional chrome rendered above the active flow component. When omitted\n * (or set to `null`), no header is shown.\n */\n header?: FlowHeaderConfig | null\n}\n\nexport const FlowContext = createContext<FlowContextInterface | null>(null)\n\n//TODO: This is hiding the fact that the callsite for useFlow\n// destructures a `companyId` that doesn't seem to exist\n// eslint-disable-next-line @typescript-eslint/no-unnecessary-type-parameters\nexport function useFlow<C extends FlowContextInterface>() {\n // When used outside provider, this is expected to return undefined - consumers must fallback to params\n const values = useContext<C>(FlowContext as unknown as React.Context<C>)\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (!values) {\n throw new Error('useFlow used outside provider')\n }\n return values\n}\n"],"names":["FlowContext","createContext","useFlow","values","useContext"],"mappings":";AAoEO,MAAMA,IAAcC,EAA2C,IAAI;AAKnE,SAASC,IAA0C;AAExD,QAAMC,IAASC,EAAcJ,CAA0C;AAEvE,MAAI,CAACG;AACH,UAAM,IAAI,MAAM,+BAA+B;AAEjD,SAAOA;AACT;"}
@@ -1,103 +1,126 @@
1
- import { jsx as a } from "react/jsx-runtime";
2
- import { useState as P } from "react";
3
- import { useTranslation as w } from "react-i18next";
4
- import { useQueryClient as b } from "@tanstack/react-query";
5
- import { useTimeOffPoliciesGetAllSuspense as U, invalidateAllTimeOffPoliciesGetAll as v } from "@gusto/embedded-api/react-query/timeOffPoliciesGetAll";
6
- import { useTimeOffPoliciesDeactivateMutation as B } from "@gusto/embedded-api/react-query/timeOffPoliciesDeactivate";
7
- import { useEmployeesListSuspense as G } from "@gusto/embedded-api/react-query/employeesList";
8
- import { useHolidayPayPoliciesGet as Y, invalidateAllHolidayPayPoliciesGet as q } from "@gusto/embedded-api/react-query/holidayPayPoliciesGet";
9
- import { useHolidayPayPoliciesDeleteMutation as x } from "@gusto/embedded-api/react-query/holidayPayPoliciesDelete";
10
- import { PolicyListPresentation as N } from "./PolicyListPresentation.js";
11
- import { isListedTimeOffPolicyType as Q } from "../TimeOffFlow/timeOffPolicyTypes.js";
12
- import { BaseBoundaries as R, BaseLayout as V } from "../../Base/Base.js";
1
+ import { jsx as n } from "react/jsx-runtime";
2
+ import { useState as T } from "react";
3
+ import { useTranslation as U } from "react-i18next";
4
+ import { useQueryClient as v } from "@tanstack/react-query";
5
+ import { useTimeOffPoliciesGetAllSuspense as R, invalidateAllTimeOffPoliciesGetAll as G } from "@gusto/embedded-api/react-query/timeOffPoliciesGetAll";
6
+ import { useTimeOffPoliciesDeactivateMutation as Y } from "@gusto/embedded-api/react-query/timeOffPoliciesDeactivate";
7
+ import { useEmployeesListSuspense as j } from "@gusto/embedded-api/react-query/employeesList";
8
+ import { useHolidayPayPoliciesGet as x, invalidateAllHolidayPayPoliciesGet as N } from "@gusto/embedded-api/react-query/holidayPayPoliciesGet";
9
+ import { useHolidayPayPoliciesDeleteMutation as Q } from "@gusto/embedded-api/react-query/holidayPayPoliciesDelete";
10
+ import { UnprocessableEntityError as V } from "@gusto/embedded-api/models/errors/unprocessableentityerror";
11
+ import { PolicyListPresentation as W } from "./PolicyListPresentation.js";
12
+ import { isListedTimeOffPolicyType as k } from "../TimeOffFlow/timeOffPolicyTypes.js";
13
+ import { BaseBoundaries as K, BaseLayout as z } from "../../Base/Base.js";
13
14
  import "../../Base/useBase.js";
14
- import { useBaseSubmit as W } from "../../Base/useBaseSubmit.js";
15
- import { composeErrorHandler as j } from "../../../partner-hook-utils/composeErrorHandler.js";
16
- import { componentEvents as s } from "../../../shared/constants.js";
17
- import { useI18n as k } from "../../../i18n/I18n.js";
18
- function ye({ FallbackComponent: i, ...o }) {
19
- return /* @__PURE__ */ a(
20
- R,
15
+ import { useBaseSubmit as J } from "../../Base/useBaseSubmit.js";
16
+ import { SDKInternalError as E } from "../../../types/sdkError.js";
17
+ import { composeErrorHandler as X } from "../../../partner-hook-utils/composeErrorHandler.js";
18
+ import { componentEvents as a } from "../../../shared/constants.js";
19
+ import { useI18n as Z } from "../../../i18n/I18n.js";
20
+ function Oe({ FallbackComponent: o, ...t }) {
21
+ return /* @__PURE__ */ n(
22
+ K,
21
23
  {
22
24
  componentName: "Company.TimeOff.TimeOffPolicies",
23
- FallbackComponent: i,
24
- children: /* @__PURE__ */ a(z, { ...o })
25
+ FallbackComponent: o,
26
+ children: /* @__PURE__ */ n($, { ...t })
25
27
  }
26
28
  );
27
29
  }
28
- function z({ companyId: i, onEvent: o }) {
29
- k("Company.TimeOff.TimeOffPolicies");
30
- const { t } = w("Company.TimeOff.TimeOffPolicies"), m = b(), {
31
- baseSubmitHandler: T,
32
- error: O,
33
- setError: h
34
- } = W("Company.TimeOff.TimeOffPolicies"), [E, r] = P(null), [D, c] = P(null), { data: C } = U({
35
- companyUuid: i
36
- }), I = (C.timeOffPolicies ?? []).filter(
37
- (e) => e.isActive && Q(e.policyType)
38
- ), u = Y(
39
- { companyUuid: i },
30
+ function $({ companyId: o, onEvent: t }) {
31
+ Z("Company.TimeOff.TimeOffPolicies");
32
+ const { t: i } = U("Company.TimeOff.TimeOffPolicies"), u = v(), {
33
+ baseSubmitHandler: O,
34
+ error: D,
35
+ setError: g
36
+ } = J("Company.TimeOff.TimeOffPolicies"), [C, m] = T(null), [I, y] = T(null), { data: _ } = R({
37
+ companyUuid: o
38
+ }), w = (_.timeOffPolicies ?? []).filter(
39
+ (e) => e.isActive && k(e.policyType)
40
+ ), p = x(
41
+ { companyUuid: o },
40
42
  {
41
43
  throwOnError: () => !1
42
44
  }
43
- ), n = u.data?.holidayPayPolicy, { data: _ } = G({
44
- companyId: i,
45
+ ), c = p.data?.holidayPayPolicy, { data: L } = j({
46
+ companyId: o,
45
47
  terminated: !1
46
- }), A = _.showEmployees?.length ?? 0, y = B(), f = x(), L = j([u], { submitError: O, setSubmitError: h }), g = y.isPending || f.isPending, p = (e) => e > 0 && e === A ? t("allEmployeesLabel") : e > 0 ? t("employeeCount", { count: e }) : t("enrolledDash"), d = I.map((e) => ({
48
+ }), A = L.showEmployees?.length ?? 0, f = Y(), d = Q(), F = X([p], { submitError: D, setSubmitError: g }), S = f.isPending || d.isPending, P = (e) => e > 0 && e === A ? i("allEmployeesLabel") : e > 0 ? i("employeeCount", { count: e }) : i("enrolledDash"), h = w.map((e) => ({
47
49
  uuid: e.uuid,
48
50
  name: e.name,
49
51
  policyType: e.policyType,
50
52
  isComplete: e.complete ?? !1,
51
- enrolledDisplay: p(e.employees.length)
52
- })).sort((e, l) => e.name.localeCompare(l.name));
53
- n && d.push({
54
- uuid: n.companyUuid,
55
- name: t("holidayPayPolicy"),
53
+ enrolledDisplay: P(e.employees.length)
54
+ })).sort((e, s) => e.name.localeCompare(s.name));
55
+ c && h.push({
56
+ uuid: c.companyUuid,
57
+ name: i("holidayPayPolicy"),
56
58
  policyType: "holiday",
57
59
  isComplete: !0,
58
- enrolledDisplay: p(n.employees.length),
60
+ enrolledDisplay: P(c.employees.length),
59
61
  isHoliday: !0
60
62
  });
61
- const F = () => {
62
- o(s.TIME_OFF_CREATE_POLICY);
63
- }, S = (e) => {
64
- o(s.TIME_OFF_VIEW_POLICY, {
63
+ const H = () => {
64
+ t(a.TIME_OFF_CREATE_POLICY);
65
+ }, M = (e) => {
66
+ t(a.TIME_OFF_VIEW_POLICY, {
65
67
  policyId: e.uuid,
66
68
  policyType: e.policyType
67
69
  });
68
- }, H = (e) => {
69
- o(s.TIME_OFF_VIEW_POLICY, {
70
+ }, b = (e) => {
71
+ t(a.TIME_OFF_VIEW_POLICY, {
70
72
  policyId: e.uuid,
71
73
  policyType: e.policyType
72
74
  });
73
- }, M = async (e) => {
74
- let l = !1;
75
- return c(e.uuid), await T({}, async () => {
76
- e.isHoliday ? (await f.mutateAsync({
77
- request: { companyUuid: i }
78
- }), await q(m), r(t("flash.holidayDeleted"))) : (await y.mutateAsync({
79
- request: { timeOffPolicyUuid: e.uuid }
80
- }), await v(m), r(t("flash.policyDeleted", { name: e.name }))), o(s.TIME_OFF_DELETE_POLICY_DONE, { policyId: e.uuid }), l = !0;
81
- }), c(null), l;
75
+ }, q = async (e) => {
76
+ let s = !1;
77
+ return y(e.uuid), await O({}, async () => {
78
+ if (e.isHoliday)
79
+ await d.mutateAsync({
80
+ request: { companyUuid: o }
81
+ }), await N(u), m(i("flash.holidayDeleted"));
82
+ else {
83
+ try {
84
+ await f.mutateAsync({
85
+ request: { timeOffPolicyUuid: e.uuid }
86
+ });
87
+ } catch (r) {
88
+ if (r instanceof V) {
89
+ if (r.errors.some(
90
+ (l) => l.message?.toLowerCase().includes("pending") || l.message?.toLowerCase().includes("approved")
91
+ ))
92
+ throw new E(
93
+ i("errors.pendingRequestsBlockDeletion", { name: e.name }),
94
+ "api_error"
95
+ );
96
+ const B = r.errors.map((l) => l.message).filter(Boolean);
97
+ throw new E(B.join(". ") || i("errors.deleteFailed"), "api_error");
98
+ }
99
+ throw r;
100
+ }
101
+ await G(u), m(i("flash.policyDeleted", { name: e.name }));
102
+ }
103
+ t(a.TIME_OFF_DELETE_POLICY_DONE, { policyId: e.uuid }), s = !0;
104
+ }), y(null), s;
82
105
  };
83
- return /* @__PURE__ */ a(V, { error: L.errors, children: /* @__PURE__ */ a(
84
- N,
106
+ return /* @__PURE__ */ n(z, { error: F.errors, children: /* @__PURE__ */ n(
107
+ W,
85
108
  {
86
- policies: d,
87
- onCreatePolicy: F,
88
- onEditPolicy: S,
89
- onFinishSetup: H,
90
- onDeletePolicy: M,
91
- deleteSuccessAlert: E,
109
+ policies: h,
110
+ onCreatePolicy: H,
111
+ onEditPolicy: M,
112
+ onFinishSetup: b,
113
+ onDeletePolicy: q,
114
+ deleteSuccessAlert: C,
92
115
  onDismissDeleteAlert: () => {
93
- r(null);
116
+ m(null);
94
117
  },
95
- isDeletingPolicyId: D,
96
- isPending: g
118
+ isDeletingPolicyId: I,
119
+ isPending: S
97
120
  }
98
121
  ) });
99
122
  }
100
123
  export {
101
- ye as PolicyList
124
+ Oe as PolicyList
102
125
  };
103
126
  //# sourceMappingURL=PolicyList.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PolicyList.js","sources":["../../../../src/components/TimeOff/PolicyList/PolicyList.tsx"],"sourcesContent":["import { useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { useQueryClient } from '@tanstack/react-query'\nimport {\n useTimeOffPoliciesGetAllSuspense,\n invalidateAllTimeOffPoliciesGetAll,\n} from '@gusto/embedded-api/react-query/timeOffPoliciesGetAll'\nimport { useTimeOffPoliciesDeactivateMutation } from '@gusto/embedded-api/react-query/timeOffPoliciesDeactivate'\nimport { useEmployeesListSuspense } from '@gusto/embedded-api/react-query/employeesList'\nimport {\n useHolidayPayPoliciesGet,\n invalidateAllHolidayPayPoliciesGet,\n} from '@gusto/embedded-api/react-query/holidayPayPoliciesGet'\nimport { useHolidayPayPoliciesDeleteMutation } from '@gusto/embedded-api/react-query/holidayPayPoliciesDelete'\nimport type { TimeOffPolicy } from '@gusto/embedded-api/models/components/timeoffpolicy'\nimport { PolicyListPresentation } from './PolicyListPresentation'\nimport type { PolicyListItem } from './PolicyListTypes'\nimport { isListedTimeOffPolicyType } from '@/components/TimeOff/TimeOffFlow/timeOffPolicyTypes'\nimport { BaseBoundaries, BaseLayout, type BaseComponentInterface } from '@/components/Base'\nimport { useBaseSubmit } from '@/components/Base/useBaseSubmit'\nimport { composeErrorHandler } from '@/partner-hook-utils/composeErrorHandler'\nimport { componentEvents } from '@/shared/constants'\nimport { useI18n } from '@/i18n'\n\nexport interface PolicyListProps extends BaseComponentInterface<'Company.TimeOff.TimeOffPolicies'> {\n companyId: string\n}\n\nexport function PolicyList({ FallbackComponent, ...props }: PolicyListProps) {\n return (\n <BaseBoundaries\n componentName=\"Company.TimeOff.TimeOffPolicies\"\n FallbackComponent={FallbackComponent}\n >\n <Root {...props} />\n </BaseBoundaries>\n )\n}\n\nfunction Root({ companyId, onEvent }: PolicyListProps) {\n useI18n('Company.TimeOff.TimeOffPolicies')\n const { t } = useTranslation('Company.TimeOff.TimeOffPolicies')\n const queryClient = useQueryClient()\n\n const {\n baseSubmitHandler,\n error: submitError,\n setError: setSubmitError,\n } = useBaseSubmit('Company.TimeOff.TimeOffPolicies')\n\n const [deleteSuccessAlert, setDeleteSuccessAlert] = useState<string | null>(null)\n const [isDeletingPolicyId, setIsDeletingPolicyId] = useState<string | null>(null)\n\n const { data: policiesData } = useTimeOffPoliciesGetAllSuspense({\n companyUuid: companyId,\n })\n const timeOffPolicies = (policiesData.timeOffPolicies ?? []).filter(\n policy => policy.isActive && isListedTimeOffPolicyType(policy.policyType),\n )\n\n // Holiday pay policy is auxiliary to the main time-off list; never crash the\n // boundary on its failure. composeErrorHandler below surfaces the error as\n // an inline alert via BaseLayout when it isn't an expected 204/404.\n const holidayQuery = useHolidayPayPoliciesGet(\n { companyUuid: companyId },\n {\n throwOnError: () => false,\n },\n )\n const holidayPayPolicy = holidayQuery.data?.holidayPayPolicy\n\n const { data: employeesData } = useEmployeesListSuspense({\n companyId,\n terminated: false,\n })\n const totalActiveEmployees = employeesData.showEmployees?.length ?? 0\n\n const deactivatePolicyMutation = useTimeOffPoliciesDeactivateMutation()\n const deleteHolidayMutation = useHolidayPayPoliciesDeleteMutation()\n\n const errorHandling = composeErrorHandler([holidayQuery], { submitError, setSubmitError })\n const isPending = deactivatePolicyMutation.isPending || deleteHolidayMutation.isPending\n\n const getEnrolledDisplay = (enrolledCount: number) => {\n if (enrolledCount > 0 && enrolledCount === totalActiveEmployees) {\n return t('allEmployeesLabel')\n } else if (enrolledCount > 0) {\n return t('employeeCount', { count: enrolledCount })\n }\n return t('enrolledDash')\n }\n\n const policies: PolicyListItem[] = timeOffPolicies\n .map((policy: TimeOffPolicy) => ({\n uuid: policy.uuid,\n name: policy.name,\n policyType: policy.policyType,\n isComplete: policy.complete ?? false,\n enrolledDisplay: getEnrolledDisplay(policy.employees.length),\n }))\n .sort((a, b) => a.name.localeCompare(b.name))\n\n if (holidayPayPolicy) {\n policies.push({\n uuid: holidayPayPolicy.companyUuid,\n name: t('holidayPayPolicy'),\n policyType: 'holiday',\n isComplete: true,\n enrolledDisplay: getEnrolledDisplay(holidayPayPolicy.employees.length),\n isHoliday: true,\n })\n }\n\n const handleCreatePolicy = () => {\n onEvent(componentEvents.TIME_OFF_CREATE_POLICY)\n }\n\n const handleEditPolicy = (policy: PolicyListItem) => {\n onEvent(componentEvents.TIME_OFF_VIEW_POLICY, {\n policyId: policy.uuid,\n policyType: policy.policyType,\n })\n }\n\n const handleFinishSetup = (policy: PolicyListItem) => {\n onEvent(componentEvents.TIME_OFF_VIEW_POLICY, {\n policyId: policy.uuid,\n policyType: policy.policyType,\n })\n }\n\n const handleDeletePolicy = async (policy: PolicyListItem): Promise<boolean> => {\n let success = false\n setIsDeletingPolicyId(policy.uuid)\n await baseSubmitHandler({}, async () => {\n if (policy.isHoliday) {\n await deleteHolidayMutation.mutateAsync({\n request: { companyUuid: companyId },\n })\n await invalidateAllHolidayPayPoliciesGet(queryClient)\n setDeleteSuccessAlert(t('flash.holidayDeleted'))\n } else {\n await deactivatePolicyMutation.mutateAsync({\n request: { timeOffPolicyUuid: policy.uuid },\n })\n await invalidateAllTimeOffPoliciesGetAll(queryClient)\n setDeleteSuccessAlert(t('flash.policyDeleted', { name: policy.name }))\n }\n onEvent(componentEvents.TIME_OFF_DELETE_POLICY_DONE, { policyId: policy.uuid })\n success = true\n })\n setIsDeletingPolicyId(null)\n return success\n }\n\n return (\n <BaseLayout error={errorHandling.errors}>\n <PolicyListPresentation\n policies={policies}\n onCreatePolicy={handleCreatePolicy}\n onEditPolicy={handleEditPolicy}\n onFinishSetup={handleFinishSetup}\n onDeletePolicy={handleDeletePolicy}\n deleteSuccessAlert={deleteSuccessAlert}\n onDismissDeleteAlert={() => {\n setDeleteSuccessAlert(null)\n }}\n isDeletingPolicyId={isDeletingPolicyId}\n isPending={isPending}\n />\n </BaseLayout>\n )\n}\n"],"names":["PolicyList","FallbackComponent","props","jsx","BaseBoundaries","Root","companyId","onEvent","useI18n","useTranslation","queryClient","useQueryClient","baseSubmitHandler","submitError","setSubmitError","useBaseSubmit","deleteSuccessAlert","setDeleteSuccessAlert","useState","isDeletingPolicyId","setIsDeletingPolicyId","policiesData","useTimeOffPoliciesGetAllSuspense","timeOffPolicies","policy","isListedTimeOffPolicyType","holidayQuery","useHolidayPayPoliciesGet","holidayPayPolicy","employeesData","useEmployeesListSuspense","totalActiveEmployees","deactivatePolicyMutation","useTimeOffPoliciesDeactivateMutation","deleteHolidayMutation","useHolidayPayPoliciesDeleteMutation","errorHandling","composeErrorHandler","isPending","getEnrolledDisplay","enrolledCount","policies","a","b","handleCreatePolicy","componentEvents","handleEditPolicy","handleFinishSetup","handleDeletePolicy","success","invalidateAllHolidayPayPoliciesGet","invalidateAllTimeOffPoliciesGetAll","BaseLayout","PolicyListPresentation"],"mappings":"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"}
1
+ {"version":3,"file":"PolicyList.js","sources":["../../../../src/components/TimeOff/PolicyList/PolicyList.tsx"],"sourcesContent":["import { useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { useQueryClient } from '@tanstack/react-query'\nimport {\n useTimeOffPoliciesGetAllSuspense,\n invalidateAllTimeOffPoliciesGetAll,\n} from '@gusto/embedded-api/react-query/timeOffPoliciesGetAll'\nimport { useTimeOffPoliciesDeactivateMutation } from '@gusto/embedded-api/react-query/timeOffPoliciesDeactivate'\nimport { useEmployeesListSuspense } from '@gusto/embedded-api/react-query/employeesList'\nimport {\n useHolidayPayPoliciesGet,\n invalidateAllHolidayPayPoliciesGet,\n} from '@gusto/embedded-api/react-query/holidayPayPoliciesGet'\nimport { useHolidayPayPoliciesDeleteMutation } from '@gusto/embedded-api/react-query/holidayPayPoliciesDelete'\nimport type { TimeOffPolicy } from '@gusto/embedded-api/models/components/timeoffpolicy'\nimport { UnprocessableEntityError } from '@gusto/embedded-api/models/errors/unprocessableentityerror'\nimport { PolicyListPresentation } from './PolicyListPresentation'\nimport type { PolicyListItem } from './PolicyListTypes'\nimport { isListedTimeOffPolicyType } from '@/components/TimeOff/TimeOffFlow/timeOffPolicyTypes'\nimport { BaseBoundaries, BaseLayout, type BaseComponentInterface } from '@/components/Base'\nimport { useBaseSubmit } from '@/components/Base/useBaseSubmit'\nimport { SDKInternalError } from '@/types/sdkError'\nimport { composeErrorHandler } from '@/partner-hook-utils/composeErrorHandler'\nimport { componentEvents } from '@/shared/constants'\nimport { useI18n } from '@/i18n'\n\nexport interface PolicyListProps extends BaseComponentInterface<'Company.TimeOff.TimeOffPolicies'> {\n companyId: string\n}\n\nexport function PolicyList({ FallbackComponent, ...props }: PolicyListProps) {\n return (\n <BaseBoundaries\n componentName=\"Company.TimeOff.TimeOffPolicies\"\n FallbackComponent={FallbackComponent}\n >\n <Root {...props} />\n </BaseBoundaries>\n )\n}\n\nfunction Root({ companyId, onEvent }: PolicyListProps) {\n useI18n('Company.TimeOff.TimeOffPolicies')\n const { t } = useTranslation('Company.TimeOff.TimeOffPolicies')\n const queryClient = useQueryClient()\n\n const {\n baseSubmitHandler,\n error: submitError,\n setError: setSubmitError,\n } = useBaseSubmit('Company.TimeOff.TimeOffPolicies')\n\n const [deleteSuccessAlert, setDeleteSuccessAlert] = useState<string | null>(null)\n const [isDeletingPolicyId, setIsDeletingPolicyId] = useState<string | null>(null)\n\n const { data: policiesData } = useTimeOffPoliciesGetAllSuspense({\n companyUuid: companyId,\n })\n const timeOffPolicies = (policiesData.timeOffPolicies ?? []).filter(\n policy => policy.isActive && isListedTimeOffPolicyType(policy.policyType),\n )\n\n // Holiday pay policy is auxiliary to the main time-off list; never crash the\n // boundary on its failure. composeErrorHandler below surfaces the error as\n // an inline alert via BaseLayout when it isn't an expected 204/404.\n const holidayQuery = useHolidayPayPoliciesGet(\n { companyUuid: companyId },\n {\n throwOnError: () => false,\n },\n )\n const holidayPayPolicy = holidayQuery.data?.holidayPayPolicy\n\n const { data: employeesData } = useEmployeesListSuspense({\n companyId,\n terminated: false,\n })\n const totalActiveEmployees = employeesData.showEmployees?.length ?? 0\n\n const deactivatePolicyMutation = useTimeOffPoliciesDeactivateMutation()\n const deleteHolidayMutation = useHolidayPayPoliciesDeleteMutation()\n\n const errorHandling = composeErrorHandler([holidayQuery], { submitError, setSubmitError })\n const isPending = deactivatePolicyMutation.isPending || deleteHolidayMutation.isPending\n\n const getEnrolledDisplay = (enrolledCount: number) => {\n if (enrolledCount > 0 && enrolledCount === totalActiveEmployees) {\n return t('allEmployeesLabel')\n } else if (enrolledCount > 0) {\n return t('employeeCount', { count: enrolledCount })\n }\n return t('enrolledDash')\n }\n\n const policies: PolicyListItem[] = timeOffPolicies\n .map((policy: TimeOffPolicy) => ({\n uuid: policy.uuid,\n name: policy.name,\n policyType: policy.policyType,\n isComplete: policy.complete ?? false,\n enrolledDisplay: getEnrolledDisplay(policy.employees.length),\n }))\n .sort((a, b) => a.name.localeCompare(b.name))\n\n if (holidayPayPolicy) {\n policies.push({\n uuid: holidayPayPolicy.companyUuid,\n name: t('holidayPayPolicy'),\n policyType: 'holiday',\n isComplete: true,\n enrolledDisplay: getEnrolledDisplay(holidayPayPolicy.employees.length),\n isHoliday: true,\n })\n }\n\n const handleCreatePolicy = () => {\n onEvent(componentEvents.TIME_OFF_CREATE_POLICY)\n }\n\n const handleEditPolicy = (policy: PolicyListItem) => {\n onEvent(componentEvents.TIME_OFF_VIEW_POLICY, {\n policyId: policy.uuid,\n policyType: policy.policyType,\n })\n }\n\n const handleFinishSetup = (policy: PolicyListItem) => {\n onEvent(componentEvents.TIME_OFF_VIEW_POLICY, {\n policyId: policy.uuid,\n policyType: policy.policyType,\n })\n }\n\n const handleDeletePolicy = async (policy: PolicyListItem): Promise<boolean> => {\n let success = false\n setIsDeletingPolicyId(policy.uuid)\n await baseSubmitHandler({}, async () => {\n if (policy.isHoliday) {\n await deleteHolidayMutation.mutateAsync({\n request: { companyUuid: companyId },\n })\n await invalidateAllHolidayPayPoliciesGet(queryClient)\n setDeleteSuccessAlert(t('flash.holidayDeleted'))\n } else {\n try {\n await deactivatePolicyMutation.mutateAsync({\n request: { timeOffPolicyUuid: policy.uuid },\n })\n } catch (err) {\n if (err instanceof UnprocessableEntityError) {\n const hasPendingRequests = err.errors.some(\n e =>\n e.message?.toLowerCase().includes('pending') ||\n e.message?.toLowerCase().includes('approved'),\n )\n if (hasPendingRequests) {\n throw new SDKInternalError(\n t('errors.pendingRequestsBlockDeletion', { name: policy.name }),\n 'api_error',\n )\n }\n const messages = err.errors.map(e => e.message).filter(Boolean)\n throw new SDKInternalError(messages.join('. ') || t('errors.deleteFailed'), 'api_error')\n }\n throw err\n }\n await invalidateAllTimeOffPoliciesGetAll(queryClient)\n setDeleteSuccessAlert(t('flash.policyDeleted', { name: policy.name }))\n }\n onEvent(componentEvents.TIME_OFF_DELETE_POLICY_DONE, { policyId: policy.uuid })\n success = true\n })\n setIsDeletingPolicyId(null)\n return success\n }\n\n return (\n <BaseLayout error={errorHandling.errors}>\n <PolicyListPresentation\n policies={policies}\n onCreatePolicy={handleCreatePolicy}\n onEditPolicy={handleEditPolicy}\n onFinishSetup={handleFinishSetup}\n onDeletePolicy={handleDeletePolicy}\n deleteSuccessAlert={deleteSuccessAlert}\n onDismissDeleteAlert={() => {\n setDeleteSuccessAlert(null)\n }}\n isDeletingPolicyId={isDeletingPolicyId}\n isPending={isPending}\n />\n </BaseLayout>\n )\n}\n"],"names":["PolicyList","FallbackComponent","props","jsx","BaseBoundaries","Root","companyId","onEvent","useI18n","t","useTranslation","queryClient","useQueryClient","baseSubmitHandler","submitError","setSubmitError","useBaseSubmit","deleteSuccessAlert","setDeleteSuccessAlert","useState","isDeletingPolicyId","setIsDeletingPolicyId","policiesData","useTimeOffPoliciesGetAllSuspense","timeOffPolicies","policy","isListedTimeOffPolicyType","holidayQuery","useHolidayPayPoliciesGet","holidayPayPolicy","employeesData","useEmployeesListSuspense","totalActiveEmployees","deactivatePolicyMutation","useTimeOffPoliciesDeactivateMutation","deleteHolidayMutation","useHolidayPayPoliciesDeleteMutation","errorHandling","composeErrorHandler","isPending","getEnrolledDisplay","enrolledCount","policies","a","b","handleCreatePolicy","componentEvents","handleEditPolicy","handleFinishSetup","handleDeletePolicy","success","invalidateAllHolidayPayPoliciesGet","err","UnprocessableEntityError","e","SDKInternalError","messages","invalidateAllTimeOffPoliciesGetAll","BaseLayout","PolicyListPresentation"],"mappings":"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"}