@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.
- package/CHANGELOG.md +50 -0
- package/dist/components/Common/DataView/DataCards/DataCards.d.ts +2 -1
- package/dist/components/Common/DataView/DataCards/DataCards.js +14 -13
- package/dist/components/Common/DataView/DataCards/DataCards.js.map +1 -1
- package/dist/components/Common/DataView/DataTable/DataTable.d.ts +2 -1
- package/dist/components/Common/DataView/DataTable/DataTable.js +51 -50
- package/dist/components/Common/DataView/DataTable/DataTable.js.map +1 -1
- package/dist/components/Common/DataView/DataView.d.ts +1 -0
- package/dist/components/Common/DataView/DataView.js.map +1 -1
- package/dist/components/Common/DataView/useDataView.d.ts +8 -1
- package/dist/components/Common/DataView/useDataView.js +20 -17
- package/dist/components/Common/DataView/useDataView.js.map +1 -1
- package/dist/components/Employee/Compensation/management/AddAnotherJob/AddAnotherJob.d.ts +9 -0
- package/dist/components/Employee/Compensation/management/AddAnotherJob/AddAnotherJob.js +76 -0
- package/dist/components/Employee/Compensation/management/AddAnotherJob/AddAnotherJob.js.map +1 -0
- package/dist/components/Employee/Compensation/management/AddAnotherJob/AddAnotherJob.module.scss.js +8 -0
- package/dist/components/Employee/Compensation/management/AddAnotherJob/AddAnotherJob.module.scss.js.map +1 -0
- package/dist/components/Employee/Compensation/management/EditCompensation/EditCompensation.js +57 -202
- package/dist/components/Employee/Compensation/management/EditCompensation/EditCompensation.js.map +1 -1
- package/dist/components/Employee/Compensation/management/EditPendingCompensation/EditPendingCompensation.d.ts +25 -0
- package/dist/components/Employee/Compensation/management/EditPendingCompensation/EditPendingCompensation.js +81 -0
- package/dist/components/Employee/Compensation/management/EditPendingCompensation/EditPendingCompensation.js.map +1 -0
- package/dist/components/Employee/Compensation/management/EditPendingCompensation/EditPendingCompensation.module.scss.js +8 -0
- package/dist/components/Employee/Compensation/management/EditPendingCompensation/EditPendingCompensation.module.scss.js.map +1 -0
- package/dist/components/Employee/Compensation/management/ManagementCompensationFormBody.d.ts +18 -0
- package/dist/components/Employee/Compensation/management/ManagementCompensationFormBody.js +171 -0
- package/dist/components/Employee/Compensation/management/ManagementCompensationFormBody.js.map +1 -0
- package/dist/components/Employee/Compensation/management/index.d.ts +3 -0
- package/dist/components/Employee/Compensation/onboarding/EditCompensation/EditCompensation.d.ts +6 -1
- package/dist/components/Employee/Compensation/onboarding/EditCompensation/EditCompensation.js +67 -209
- package/dist/components/Employee/Compensation/onboarding/EditCompensation/EditCompensation.js.map +1 -1
- package/dist/components/Employee/Compensation/shared/AddCompensationFormBody.d.ts +18 -0
- package/dist/components/Employee/Compensation/shared/AddCompensationFormBody.js +169 -0
- package/dist/components/Employee/Compensation/shared/AddCompensationFormBody.js.map +1 -0
- package/dist/components/Employee/Compensation/shared/useCompensationForm/compensationSchema.d.ts +16 -0
- package/dist/components/Employee/Compensation/shared/useCompensationForm/compensationSchema.js +36 -30
- package/dist/components/Employee/Compensation/shared/useCompensationForm/compensationSchema.js.map +1 -1
- package/dist/components/Employee/Compensation/shared/useCompensationForm/fields.d.ts +1 -1
- package/dist/components/Employee/Compensation/shared/useCompensationForm/fields.js.map +1 -1
- package/dist/components/Employee/Compensation/shared/useCompensationForm/useCompensationForm.js +213 -191
- package/dist/components/Employee/Compensation/shared/useCompensationForm/useCompensationForm.js.map +1 -1
- package/dist/components/Employee/Dashboard/Dashboard.js +65 -53
- package/dist/components/Employee/Dashboard/Dashboard.js.map +1 -1
- package/dist/components/Employee/Dashboard/DashboardComponents.d.ts +3 -3
- package/dist/components/Employee/Dashboard/DashboardComponents.js +138 -101
- package/dist/components/Employee/Dashboard/DashboardComponents.js.map +1 -1
- package/dist/components/Employee/Dashboard/JobAndPayView.js +340 -320
- package/dist/components/Employee/Dashboard/JobAndPayView.js.map +1 -1
- package/dist/components/Employee/Dashboard/JobAndPayView.module.scss.js +5 -3
- package/dist/components/Employee/Dashboard/JobAndPayView.module.scss.js.map +1 -1
- package/dist/components/Employee/Dashboard/dashboardStateMachine.js +147 -148
- package/dist/components/Employee/Dashboard/dashboardStateMachine.js.map +1 -1
- package/dist/components/Employee/Dashboard/getPendingCompensationChanges.d.ts +6 -0
- package/dist/components/Employee/Dashboard/getPendingCompensationChanges.js +13 -12
- package/dist/components/Employee/Dashboard/getPendingCompensationChanges.js.map +1 -1
- package/dist/components/Employee/Dashboard/hooks/useEmployeeCompensation.d.ts +2 -2
- package/dist/components/Employee/Dashboard/hooks/useEmployeeCompensation.js +34 -35
- package/dist/components/Employee/Dashboard/hooks/useEmployeeCompensation.js.map +1 -1
- package/dist/components/Employee/EmployeeList/management/ManagementEmployeeList.js +37 -40
- package/dist/components/Employee/EmployeeList/management/ManagementEmployeeList.js.map +1 -1
- package/dist/components/Employee/EmployeeList/management/ManagementEmployeeListView.d.ts +1 -2
- package/dist/components/Employee/EmployeeList/management/ManagementEmployeeListView.js +64 -71
- package/dist/components/Employee/EmployeeList/management/ManagementEmployeeListView.js.map +1 -1
- package/dist/components/Employee/EmployeeListFlow/EmployeeListFlow.d.ts +2 -0
- package/dist/components/Employee/EmployeeListFlow/EmployeeListFlow.js +25 -0
- package/dist/components/Employee/EmployeeListFlow/EmployeeListFlow.js.map +1 -0
- package/dist/components/Employee/EmployeeListFlow/EmployeeListFlowComponents.d.ts +13 -0
- package/dist/components/Employee/EmployeeListFlow/EmployeeListFlowComponents.js +37 -0
- package/dist/components/Employee/EmployeeListFlow/EmployeeListFlowComponents.js.map +1 -0
- package/dist/components/Employee/EmployeeListFlow/employeeListStateMachine.d.ts +6 -0
- package/dist/components/Employee/EmployeeListFlow/employeeListStateMachine.js +69 -0
- package/dist/components/Employee/EmployeeListFlow/employeeListStateMachine.js.map +1 -0
- package/dist/components/Employee/EmployeeListFlow/index.d.ts +3 -0
- package/dist/components/Employee/HomeAddress/management/HomeAddress.js +15 -12
- package/dist/components/Employee/HomeAddress/management/HomeAddress.js.map +1 -1
- package/dist/components/Employee/HomeAddress/management/HomeAddressView.d.ts +2 -1
- package/dist/components/Employee/HomeAddress/management/HomeAddressView.js +86 -83
- package/dist/components/Employee/HomeAddress/management/HomeAddressView.js.map +1 -1
- package/dist/components/Employee/WorkAddress/management/WorkAddress.js +14 -11
- package/dist/components/Employee/WorkAddress/management/WorkAddress.js.map +1 -1
- package/dist/components/Employee/WorkAddress/management/WorkAddressView.d.ts +2 -1
- package/dist/components/Employee/WorkAddress/management/WorkAddressView.js +92 -89
- package/dist/components/Employee/WorkAddress/management/WorkAddressView.js.map +1 -1
- package/dist/components/Employee/exports/employeeManagement.d.ts +2 -0
- package/dist/components/Employee/exports/employeeManagement.js +18 -16
- package/dist/components/Employee/exports/employeeManagement.js.map +1 -1
- package/dist/components/Employee/index.d.ts +2 -0
- package/dist/components/Employee/index.js +32 -30
- package/dist/components/Employee/index.js.map +1 -1
- package/dist/components/Flow/FlowHeader.js +34 -31
- package/dist/components/Flow/FlowHeader.js.map +1 -1
- package/dist/components/Flow/useFlow.d.ts +12 -0
- package/dist/components/Flow/useFlow.js.map +1 -1
- package/dist/components/TimeOff/PolicyList/PolicyList.js +92 -69
- package/dist/components/TimeOff/PolicyList/PolicyList.js.map +1 -1
- package/dist/components/TimeOff/PolicyList/PolicyListPresentation.js +23 -23
- package/dist/components/TimeOff/PolicyList/PolicyListPresentation.js.map +1 -1
- package/dist/components/TimeOff/TimeOffFlow/TimeOffFlowComponents.d.ts +1 -1
- package/dist/components/TimeOff/TimeOffFlow/TimeOffFlowComponents.js.map +1 -1
- package/dist/components/TimeOff/TimeOffFlow/timeOffStateMachine.js +73 -56
- package/dist/components/TimeOff/TimeOffFlow/timeOffStateMachine.js.map +1 -1
- package/dist/components/TimeOff/TimeOffManagement/PolicyConfigurationForm/PolicyConfigurationForm.js +58 -58
- package/dist/components/TimeOff/TimeOffManagement/PolicyConfigurationForm/PolicyConfigurationForm.js.map +1 -1
- package/dist/components/TimeOff/TimeOffManagement/PolicyConfigurationForm/PolicyConfigurationFormPresentation.d.ts +1 -1
- package/dist/components/TimeOff/TimeOffManagement/PolicyConfigurationForm/PolicyConfigurationFormPresentation.js +91 -87
- package/dist/components/TimeOff/TimeOffManagement/PolicyConfigurationForm/PolicyConfigurationFormPresentation.js.map +1 -1
- package/dist/components/TimeOff/TimeOffManagement/PolicyConfigurationForm/PolicyConfigurationFormTypes.d.ts +2 -0
- package/dist/components/TimeOff/TimeOffManagement/SelectEmployees/SelectEmployeesHoliday.js +91 -124
- package/dist/components/TimeOff/TimeOffManagement/SelectEmployees/SelectEmployeesHoliday.js.map +1 -1
- package/dist/components/TimeOff/TimeOffManagement/SelectEmployees/SelectEmployeesPresentation.d.ts +1 -1
- package/dist/components/TimeOff/TimeOffManagement/SelectEmployees/SelectEmployeesPresentation.js +72 -87
- package/dist/components/TimeOff/TimeOffManagement/SelectEmployees/SelectEmployeesPresentation.js.map +1 -1
- package/dist/components/TimeOff/TimeOffManagement/SelectEmployees/SelectEmployeesPresentationTypes.d.ts +1 -6
- package/dist/components/TimeOff/TimeOffManagement/SelectEmployees/SelectEmployeesTimeOff.js +160 -220
- package/dist/components/TimeOff/TimeOffManagement/SelectEmployees/SelectEmployeesTimeOff.js.map +1 -1
- package/dist/components/TimeOff/TimeOffManagement/SelectEmployees/useSelectEmployeesData.d.ts +7 -3
- package/dist/components/TimeOff/TimeOffManagement/SelectEmployees/useSelectEmployeesData.js +77 -54
- package/dist/components/TimeOff/TimeOffManagement/SelectEmployees/useSelectEmployeesData.js.map +1 -1
- package/dist/components/TimeOff/TimeOffManagement/SelectEmployees/useSelectEmployeesData.test.d.ts +1 -0
- package/dist/components/TimeOff/TimeOffPolicyDetail/EditEmployeeBalanceModal.js +12 -11
- package/dist/components/TimeOff/TimeOffPolicyDetail/EditEmployeeBalanceModal.js.map +1 -1
- package/dist/components/TimeOff/TimeOffPolicyDetail/TimeOffPolicyDetail.js +177 -147
- package/dist/components/TimeOff/TimeOffPolicyDetail/TimeOffPolicyDetail.js.map +1 -1
- package/dist/components/TimeOff/shared/EmployeeTable/EmployeeTable.d.ts +1 -1
- package/dist/components/TimeOff/shared/EmployeeTable/EmployeeTable.js +38 -36
- package/dist/components/TimeOff/shared/EmployeeTable/EmployeeTable.js.map +1 -1
- package/dist/components/TimeOff/shared/EmployeeTable/EmployeeTableTypes.d.ts +2 -0
- package/dist/i18n/en/Company.TimeOff.SelectEmployees.json.js +10 -10
- package/dist/i18n/en/Company.TimeOff.TimeOffPolicies.json.js +17 -15
- package/dist/i18n/en/Company.TimeOff.TimeOffPolicies.json.js.map +1 -1
- package/dist/i18n/en/Company.TimeOff.TimeOffPolicyDetails.json.js +9 -9
- package/dist/i18n/en/Employee.Compensation.json.js +64 -56
- package/dist/i18n/en/Employee.Compensation.json.js.map +1 -1
- package/dist/i18n/en/Employee.Dashboard.json.js +26 -24
- package/dist/i18n/en/Employee.Dashboard.json.js.map +1 -1
- package/dist/i18n/en/Employee.HomeAddress.Management.json.js +12 -10
- package/dist/i18n/en/Employee.HomeAddress.Management.json.js.map +1 -1
- package/dist/i18n/en/Employee.ManagementEmployeeList.json.js +32 -30
- package/dist/i18n/en/Employee.ManagementEmployeeList.json.js.map +1 -1
- package/dist/i18n/en/Employee.WorkAddress.Management.json.js +16 -14
- package/dist/i18n/en/Employee.WorkAddress.Management.json.js.map +1 -1
- package/dist/i18n/en/common.json.d.ts +14 -0
- package/dist/partner-hook-utils/form/fields/DatePickerHookField.js +33 -32
- package/dist/partner-hook-utils/form/fields/DatePickerHookField.js.map +1 -1
- package/dist/partner-hook-utils/types.d.ts +4 -0
- package/dist/shared/constants.d.ts +2 -0
- package/dist/shared/constants.js +13 -12
- package/dist/shared/constants.js.map +1 -1
- package/dist/style.css +1 -1
- package/dist/types/i18next.d.ts +26 -12
- package/docs/reference/endpoint-inventory.json +24 -8
- package/package.json +1 -1
|
@@ -1,271 +1,211 @@
|
|
|
1
|
-
import { jsx as
|
|
2
|
-
import { useRef as
|
|
3
|
-
import { useTimeOffPoliciesAddEmployeesMutation as
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
|
|
16
|
-
const z = {
|
|
1
|
+
import { jsx as P } from "react/jsx-runtime";
|
|
2
|
+
import { useRef as ee, useCallback as f, useMemo as O, useState as U } from "react";
|
|
3
|
+
import { useTimeOffPoliciesAddEmployeesMutation as ne } from "@gusto/embedded-api/react-query/timeOffPoliciesAddEmployees";
|
|
4
|
+
import { useTimeOffPoliciesGetSuspense as te } from "@gusto/embedded-api/react-query/timeOffPoliciesGet";
|
|
5
|
+
import { useTimeOffPoliciesUpdateMutation as oe } from "@gusto/embedded-api/react-query/timeOffPoliciesUpdate";
|
|
6
|
+
import { UnprocessableEntityError as se } from "@gusto/embedded-api/models/errors/unprocessableentityerror";
|
|
7
|
+
import { useQueryClient as ie } from "@tanstack/react-query";
|
|
8
|
+
import { useTranslation as ae } from "react-i18next";
|
|
9
|
+
import { SelectEmployeesPresentation as re } from "./SelectEmployeesPresentation.js";
|
|
10
|
+
import { useSelectEmployeesData as ce, matchesEmployeeSearch as le } from "./useSelectEmployeesData.js";
|
|
11
|
+
import { useBase as fe } from "../../../Base/useBase.js";
|
|
12
|
+
import { SDKInternalError as me } from "../../../../types/sdkError.js";
|
|
13
|
+
import { componentEvents as b } from "../../../../shared/constants.js";
|
|
14
|
+
import { useI18n as ue } from "../../../../i18n/I18n.js";
|
|
15
|
+
const I = {
|
|
17
16
|
vacation: "Vacation Hours",
|
|
18
17
|
sick: "Sick Hours"
|
|
19
18
|
};
|
|
20
|
-
function
|
|
21
|
-
if (!
|
|
22
|
-
const
|
|
23
|
-
return
|
|
19
|
+
function L(s, r) {
|
|
20
|
+
if (!s) return;
|
|
21
|
+
const t = I[r], a = s.eligiblePaidTimeOff?.find((c) => c.name === t)?.accrualBalance;
|
|
22
|
+
return a && a.length > 0 ? a : void 0;
|
|
24
23
|
}
|
|
25
|
-
function
|
|
26
|
-
const
|
|
27
|
-
for (const
|
|
28
|
-
const
|
|
29
|
-
|
|
24
|
+
function de(s, r) {
|
|
25
|
+
const t = {};
|
|
26
|
+
for (const i of s) {
|
|
27
|
+
const a = L(i, r);
|
|
28
|
+
a && (t[i.uuid] = a);
|
|
30
29
|
}
|
|
31
|
-
return
|
|
30
|
+
return t;
|
|
32
31
|
}
|
|
33
|
-
function
|
|
34
|
-
return
|
|
32
|
+
function Be(s) {
|
|
33
|
+
return s.mode === "wizard" ? /* @__PURE__ */ P(q, { ...s, mode: "wizard" }) : /* @__PURE__ */ P(pe, { ...s });
|
|
35
34
|
}
|
|
36
|
-
function
|
|
37
|
-
const { data:
|
|
38
|
-
timeOffPolicyUuid:
|
|
39
|
-
}),
|
|
40
|
-
if (!
|
|
41
|
-
const
|
|
42
|
-
const
|
|
43
|
-
for (const
|
|
44
|
-
|
|
45
|
-
return
|
|
46
|
-
}, [
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
l.uuid && (u[l.uuid] = l.balance ?? "0");
|
|
50
|
-
return u;
|
|
51
|
-
}, [r.employees]);
|
|
52
|
-
return /* @__PURE__ */ S(
|
|
53
|
-
H,
|
|
35
|
+
function pe(s) {
|
|
36
|
+
const { data: r } = te({
|
|
37
|
+
timeOffPolicyUuid: s.policyId
|
|
38
|
+
}), t = r.timeOffPolicy;
|
|
39
|
+
if (!t) throw new Error("Unexpected response: missing timeOffPolicy");
|
|
40
|
+
const i = t.accrualMethod === "unlimited", a = O(() => {
|
|
41
|
+
const c = /* @__PURE__ */ new Set();
|
|
42
|
+
for (const u of t.employees)
|
|
43
|
+
u.uuid && c.add(u.uuid);
|
|
44
|
+
return c;
|
|
45
|
+
}, [t.employees]);
|
|
46
|
+
return /* @__PURE__ */ P(
|
|
47
|
+
q,
|
|
54
48
|
{
|
|
55
|
-
...
|
|
49
|
+
...s,
|
|
56
50
|
mode: "standalone",
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
hideBalances: m
|
|
51
|
+
existingAssigneeUuids: a,
|
|
52
|
+
hideBalances: i
|
|
60
53
|
}
|
|
61
54
|
);
|
|
62
55
|
}
|
|
63
|
-
function
|
|
64
|
-
companyId:
|
|
65
|
-
policyId:
|
|
66
|
-
policyType:
|
|
67
|
-
mode:
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
hideBalances: u = !1
|
|
56
|
+
function q({
|
|
57
|
+
companyId: s,
|
|
58
|
+
policyId: r,
|
|
59
|
+
policyType: t,
|
|
60
|
+
mode: i = "standalone",
|
|
61
|
+
existingAssigneeUuids: a,
|
|
62
|
+
hideBalances: c = !1
|
|
71
63
|
}) {
|
|
72
|
-
|
|
73
|
-
const { t:
|
|
74
|
-
filteredEmployees:
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
64
|
+
ue("Company.TimeOff.SelectEmployees");
|
|
65
|
+
const { t: u } = ae("Company.TimeOff.SelectEmployees"), { onEvent: d, baseSubmitHandler: v } = fe(), A = ie(), {
|
|
66
|
+
filteredEmployees: Y,
|
|
67
|
+
eligibleEmployees: y,
|
|
68
|
+
selectedUuids: l,
|
|
69
|
+
searchValue: g,
|
|
70
|
+
pagination: x,
|
|
71
|
+
isFetching: N,
|
|
72
|
+
handleSelect: _,
|
|
73
|
+
handleSelectAll: w,
|
|
74
|
+
handleSearchChange: R,
|
|
75
|
+
handleSearchClear: z
|
|
76
|
+
} = ce(s, a), p = ee(/* @__PURE__ */ new Map()), k = f(
|
|
77
|
+
(e, n) => {
|
|
78
|
+
n ? p.current.set(e.uuid, e) : p.current.delete(e.uuid), _(e, n);
|
|
86
79
|
},
|
|
87
|
-
[
|
|
88
|
-
),
|
|
89
|
-
(e
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
80
|
+
[_]
|
|
81
|
+
), H = f(
|
|
82
|
+
(e) => {
|
|
83
|
+
const n = g ? y.filter((o) => le(o, g)) : y;
|
|
84
|
+
for (const o of n)
|
|
85
|
+
e ? p.current.set(o.uuid, o) : p.current.delete(o.uuid);
|
|
86
|
+
w(e);
|
|
93
87
|
},
|
|
94
|
-
[
|
|
95
|
-
),
|
|
96
|
-
() =>
|
|
97
|
-
[
|
|
98
|
-
), [
|
|
99
|
-
() => ({ ...
|
|
100
|
-
[
|
|
101
|
-
), { mutateAsync:
|
|
102
|
-
|
|
103
|
-
}, []),
|
|
104
|
-
(e) => e.map((
|
|
105
|
-
if (
|
|
106
|
-
const
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
),
|
|
110
|
-
return { uuid:
|
|
88
|
+
[y, g, w]
|
|
89
|
+
), M = O(
|
|
90
|
+
() => de(y, t),
|
|
91
|
+
[y, t]
|
|
92
|
+
), [E, K] = U({}), V = O(
|
|
93
|
+
() => ({ ...M, ...E }),
|
|
94
|
+
[M, E]
|
|
95
|
+
), { mutateAsync: B, isPending: D } = ne(), { mutateAsync: T, isPending: W } = oe(), j = D || W, [Q, S] = U(!1), G = f((e, n) => {
|
|
96
|
+
K((o) => ({ ...o, [e]: n }));
|
|
97
|
+
}, []), F = f(
|
|
98
|
+
(e) => e.map((n) => {
|
|
99
|
+
if (c) return { uuid: n, balance: "0" };
|
|
100
|
+
const o = E[n], m = L(
|
|
101
|
+
p.current.get(n),
|
|
102
|
+
t
|
|
103
|
+
), C = o && o.length > 0 ? o : m ?? "0";
|
|
104
|
+
return { uuid: n, balance: C };
|
|
111
105
|
}),
|
|
112
|
-
[
|
|
113
|
-
),
|
|
114
|
-
async (e
|
|
115
|
-
await
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
await q({
|
|
119
|
-
request: {
|
|
120
|
-
timeOffPolicyUuid: f,
|
|
121
|
-
requestBody: { employees: t.map((c) => ({ uuid: c })) }
|
|
122
|
-
}
|
|
123
|
-
});
|
|
124
|
-
} catch (c) {
|
|
125
|
-
if (c instanceof N) {
|
|
126
|
-
const E = c.errors[0]?.message ?? "";
|
|
127
|
-
throw new x(
|
|
128
|
-
l("errors.removeEmployeesFailed", { details: E }),
|
|
129
|
-
"api_error"
|
|
130
|
-
);
|
|
131
|
-
}
|
|
132
|
-
throw c;
|
|
133
|
-
}
|
|
134
|
-
let o;
|
|
135
|
-
if (e.length > 0 && (o = (await T({
|
|
106
|
+
[c, E, t]
|
|
107
|
+
), h = f(
|
|
108
|
+
async (e) => {
|
|
109
|
+
await v({}, async () => {
|
|
110
|
+
let n;
|
|
111
|
+
if (e.length > 0 && (n = (await B({
|
|
136
112
|
request: {
|
|
137
|
-
timeOffPolicyUuid:
|
|
138
|
-
requestBody: { employees:
|
|
113
|
+
timeOffPolicyUuid: r,
|
|
114
|
+
requestBody: { employees: F(e) }
|
|
139
115
|
}
|
|
140
|
-
})).timeOffPolicy),
|
|
141
|
-
const
|
|
116
|
+
})).timeOffPolicy), i === "wizard" && n) {
|
|
117
|
+
const o = typeof n == "object" && "version" in n ? String(n.version) : "";
|
|
142
118
|
try {
|
|
143
|
-
await
|
|
119
|
+
await T({
|
|
144
120
|
request: {
|
|
145
|
-
timeOffPolicyUuid:
|
|
146
|
-
requestBody: { complete: !0, version:
|
|
121
|
+
timeOffPolicyUuid: r,
|
|
122
|
+
requestBody: { complete: !0, version: o }
|
|
147
123
|
}
|
|
148
124
|
});
|
|
149
|
-
} catch (
|
|
150
|
-
if (
|
|
151
|
-
const
|
|
152
|
-
throw new
|
|
153
|
-
|
|
125
|
+
} catch (m) {
|
|
126
|
+
if (m instanceof se) {
|
|
127
|
+
const C = m.errors[0]?.message ?? "";
|
|
128
|
+
throw new me(
|
|
129
|
+
u("errors.completePolicyFailed", { details: C }),
|
|
154
130
|
"api_error"
|
|
155
131
|
);
|
|
156
132
|
}
|
|
157
|
-
throw
|
|
133
|
+
throw m;
|
|
158
134
|
}
|
|
159
135
|
}
|
|
160
|
-
|
|
136
|
+
A.invalidateQueries({
|
|
161
137
|
queryKey: ["@gusto/embedded-api", "timeOffPolicies", "get"]
|
|
162
|
-
}),
|
|
138
|
+
}), d(b.TIME_OFF_ADD_EMPLOYEES_DONE, n);
|
|
163
139
|
});
|
|
164
140
|
},
|
|
165
141
|
[
|
|
166
|
-
|
|
167
|
-
|
|
142
|
+
i,
|
|
143
|
+
v,
|
|
144
|
+
B,
|
|
145
|
+
F,
|
|
168
146
|
T,
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
y,
|
|
174
|
-
l
|
|
147
|
+
r,
|
|
148
|
+
A,
|
|
149
|
+
d,
|
|
150
|
+
u
|
|
175
151
|
]
|
|
176
|
-
),
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
152
|
+
), $ = f(async () => {
|
|
153
|
+
const e = [...l];
|
|
154
|
+
if (e.length === 0 && i === "standalone") {
|
|
155
|
+
d(b.TIME_OFF_ADD_EMPLOYEES_DONE);
|
|
180
156
|
return;
|
|
181
157
|
}
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
y(_.TIME_OFF_ADD_EMPLOYEES_DONE);
|
|
158
|
+
if (i === "standalone" && e.length > 0) {
|
|
159
|
+
S(!0);
|
|
185
160
|
return;
|
|
186
161
|
}
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
}, [m, n, a, y, O]), se = d(async () => {
|
|
196
|
-
const e = n ?? /* @__PURE__ */ new Set(), t = [...a].filter((o) => !e.has(o)), s = [...e].filter((o) => !a.has(o));
|
|
197
|
-
C(!1), await O(t, s);
|
|
198
|
-
}, [n, a, O]), re = d(async () => {
|
|
199
|
-
const e = n ?? /* @__PURE__ */ new Set(), t = [...a].filter((o) => !e.has(o)), s = [...e].filter((o) => !a.has(o));
|
|
200
|
-
w(!1), await O(t, s);
|
|
201
|
-
}, [n, a, O]), ae = p(() => {
|
|
202
|
-
if (!n) return a.size;
|
|
203
|
-
let e = 0;
|
|
204
|
-
for (const t of a) n.has(t) || (e += 1);
|
|
205
|
-
return e;
|
|
206
|
-
}, [n, a]), ie = p(() => {
|
|
207
|
-
if (!n) return 0;
|
|
208
|
-
let e = 0;
|
|
209
|
-
for (const t of n) a.has(t) || (e += 1);
|
|
210
|
-
return e;
|
|
211
|
-
}, [n, a]), ce = p(() => {
|
|
212
|
-
const e = n ?? /* @__PURE__ */ new Set(), t = z[r];
|
|
213
|
-
for (const s of a) {
|
|
214
|
-
if (e.has(s)) continue;
|
|
215
|
-
if (h.current.get(s)?.eligiblePaidTimeOff?.some((c) => c.name === t))
|
|
162
|
+
await h(e);
|
|
163
|
+
}, [i, l, d, h]), J = f(async () => {
|
|
164
|
+
const e = [...l];
|
|
165
|
+
S(!1), await h(e);
|
|
166
|
+
}, [l, h]), X = O(() => {
|
|
167
|
+
const e = I[t];
|
|
168
|
+
for (const n of l)
|
|
169
|
+
if (p.current.get(n)?.eligiblePaidTimeOff?.some((m) => m.name === e))
|
|
216
170
|
return !0;
|
|
217
|
-
}
|
|
218
171
|
return !1;
|
|
219
|
-
}, [
|
|
220
|
-
|
|
221
|
-
}, [
|
|
222
|
-
return /* @__PURE__ */
|
|
223
|
-
|
|
172
|
+
}, [l, t]), Z = f(() => {
|
|
173
|
+
d(b.TIME_OFF_ADD_EMPLOYEES_BACK);
|
|
174
|
+
}, [d]);
|
|
175
|
+
return /* @__PURE__ */ P(
|
|
176
|
+
re,
|
|
224
177
|
{
|
|
225
|
-
employees:
|
|
226
|
-
selectedUuids:
|
|
227
|
-
searchValue:
|
|
228
|
-
onSelect:
|
|
229
|
-
onSelectAll:
|
|
230
|
-
onSearchChange:
|
|
231
|
-
onSearchClear:
|
|
232
|
-
onBack:
|
|
233
|
-
onContinue:
|
|
234
|
-
showReassignmentWarning:
|
|
235
|
-
policyTypeLabel:
|
|
236
|
-
balances:
|
|
237
|
-
onBalanceChange:
|
|
238
|
-
pagination:
|
|
239
|
-
isFetching:
|
|
240
|
-
isPending:
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
isOpen: ee,
|
|
245
|
-
count: ie,
|
|
246
|
-
onConfirm: () => {
|
|
247
|
-
se();
|
|
248
|
-
},
|
|
249
|
-
onClose: () => {
|
|
250
|
-
C(!1);
|
|
251
|
-
},
|
|
252
|
-
isPending: L
|
|
253
|
-
} : void 0,
|
|
254
|
-
addConfirmDialog: m === "standalone" ? {
|
|
255
|
-
isOpen: te,
|
|
256
|
-
count: ae,
|
|
178
|
+
employees: Y,
|
|
179
|
+
selectedUuids: l,
|
|
180
|
+
searchValue: g,
|
|
181
|
+
onSelect: k,
|
|
182
|
+
onSelectAll: H,
|
|
183
|
+
onSearchChange: R,
|
|
184
|
+
onSearchClear: z,
|
|
185
|
+
onBack: Z,
|
|
186
|
+
onContinue: $,
|
|
187
|
+
showReassignmentWarning: X,
|
|
188
|
+
policyTypeLabel: u(`policyTypeLabel_${t}`),
|
|
189
|
+
balances: c ? void 0 : V,
|
|
190
|
+
onBalanceChange: c ? void 0 : G,
|
|
191
|
+
pagination: x,
|
|
192
|
+
isFetching: N,
|
|
193
|
+
isPending: j,
|
|
194
|
+
addConfirmDialog: i === "standalone" ? {
|
|
195
|
+
isOpen: Q,
|
|
196
|
+
count: l.size,
|
|
257
197
|
onConfirm: () => {
|
|
258
|
-
|
|
198
|
+
J();
|
|
259
199
|
},
|
|
260
200
|
onClose: () => {
|
|
261
|
-
|
|
201
|
+
S(!1);
|
|
262
202
|
},
|
|
263
|
-
isPending:
|
|
203
|
+
isPending: D
|
|
264
204
|
} : void 0
|
|
265
205
|
}
|
|
266
206
|
);
|
|
267
207
|
}
|
|
268
208
|
export {
|
|
269
|
-
|
|
209
|
+
Be as SelectEmployeesTimeOff
|
|
270
210
|
};
|
|
271
211
|
//# sourceMappingURL=SelectEmployeesTimeOff.js.map
|
package/dist/components/TimeOff/TimeOffManagement/SelectEmployees/SelectEmployeesTimeOff.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SelectEmployeesTimeOff.js","sources":["../../../../../src/components/TimeOff/TimeOffManagement/SelectEmployees/SelectEmployeesTimeOff.tsx"],"sourcesContent":["import { useCallback, useMemo, useRef, useState } from 'react'\nimport { useTimeOffPoliciesAddEmployeesMutation } from '@gusto/embedded-api/react-query/timeOffPoliciesAddEmployees'\nimport { useTimeOffPoliciesRemoveEmployeesMutation } from '@gusto/embedded-api/react-query/timeOffPoliciesRemoveEmployees'\nimport { useTimeOffPoliciesGetSuspense } from '@gusto/embedded-api/react-query/timeOffPoliciesGet'\nimport { useTimeOffPoliciesUpdateMutation } from '@gusto/embedded-api/react-query/timeOffPoliciesUpdate'\nimport { UnprocessableEntityError } from '@gusto/embedded-api/models/errors/unprocessableentityerror'\nimport { useQueryClient } from '@tanstack/react-query'\nimport { useTranslation } from 'react-i18next'\nimport type { CreatableTimeOffPolicyType } from '../../TimeOffFlow/timeOffPolicyTypes'\nimport { SelectEmployeesPresentation } from './SelectEmployeesPresentation'\nimport { useSelectEmployeesData } from './useSelectEmployeesData'\nimport type { EmployeeItem } from './SelectEmployeesPresentationTypes'\nimport { useBase } from '@/components/Base/useBase'\nimport { SDKInternalError } from '@/types/sdkError'\nimport { componentEvents } from '@/shared/constants'\nimport { useI18n } from '@/i18n'\n\ninterface SelectEmployeesTimeOffProps {\n companyId: string\n policyId: string\n policyType: CreatableTimeOffPolicyType\n mode?: 'standalone' | 'wizard'\n}\n\nconst PAID_TIME_OFF_NAME_BY_POLICY_TYPE: Record<CreatableTimeOffPolicyType, string> = {\n vacation: 'Vacation Hours',\n sick: 'Sick Hours',\n}\n\nfunction extractCarryOverBalance(\n employee: EmployeeItem | undefined,\n policyType: CreatableTimeOffPolicyType,\n): string | undefined {\n if (!employee) return undefined\n const targetName = PAID_TIME_OFF_NAME_BY_POLICY_TYPE[policyType]\n const matching = employee.eligiblePaidTimeOff?.find(pto => pto.name === targetName)\n const balance = matching?.accrualBalance\n return balance && balance.length > 0 ? balance : undefined\n}\n\nfunction deriveCarryOverBalances(\n employees: EmployeeItem[],\n policyType: CreatableTimeOffPolicyType,\n): Record<string, string> {\n const map: Record<string, string> = {}\n for (const employee of employees) {\n const balance = extractCarryOverBalance(employee, policyType)\n if (balance) {\n map[employee.uuid] = balance\n }\n }\n return map\n}\n\nexport function SelectEmployeesTimeOff(props: SelectEmployeesTimeOffProps) {\n if (props.mode === 'wizard') {\n return <SelectEmployeesTimeOffInner {...props} mode=\"wizard\" />\n }\n return <StandaloneLoader {...props} />\n}\n\nfunction StandaloneLoader(props: SelectEmployeesTimeOffProps) {\n const { data: policyResponse } = useTimeOffPoliciesGetSuspense({\n timeOffPolicyUuid: props.policyId,\n })\n const policy = policyResponse.timeOffPolicy\n if (!policy) throw new Error('Unexpected response: missing timeOffPolicy')\n\n const isUnlimited = policy.accrualMethod === 'unlimited'\n\n const originalUuids = useMemo(() => {\n const set = new Set<string>()\n for (const e of policy.employees) {\n if (e.uuid) set.add(e.uuid)\n }\n return set\n }, [policy.employees])\n\n const originalBalances = useMemo(() => {\n const map: Record<string, string> = {}\n for (const e of policy.employees) {\n if (e.uuid) map[e.uuid] = e.balance ?? '0'\n }\n return map\n }, [policy.employees])\n\n return (\n <SelectEmployeesTimeOffInner\n {...props}\n mode=\"standalone\"\n originalUuids={originalUuids}\n originalBalances={originalBalances}\n hideBalances={isUnlimited}\n />\n )\n}\n\ninterface InnerProps extends SelectEmployeesTimeOffProps {\n originalUuids?: Set<string>\n originalBalances?: Record<string, string>\n hideBalances?: boolean\n}\n\nfunction SelectEmployeesTimeOffInner({\n companyId,\n policyId,\n policyType,\n mode = 'standalone',\n originalUuids,\n originalBalances,\n hideBalances = false,\n}: InnerProps) {\n useI18n('Company.TimeOff.SelectEmployees')\n const { t } = useTranslation('Company.TimeOff.SelectEmployees')\n const { onEvent, baseSubmitHandler } = useBase()\n const queryClient = useQueryClient()\n const {\n filteredEmployees,\n selectedUuids,\n searchValue,\n pagination,\n isFetching,\n handleSelect,\n handleSelectAll,\n handleSearchChange,\n handleSearchClear,\n } = useSelectEmployeesData(companyId, originalUuids)\n\n // Captures the full Employee record at the moment a row is selected so\n // their carry-over balance is still available at submit time even if the\n // user has since searched/paginated the row out of view. Without this,\n // `selectedUuids` would point at UUIDs we no longer have data for.\n const selectedEmployeesRef = useRef(new Map<string, EmployeeItem>())\n\n const handleSelectWithCapture = useCallback(\n (item: EmployeeItem, checked: boolean) => {\n if (checked) {\n selectedEmployeesRef.current.set(item.uuid, item)\n } else {\n selectedEmployeesRef.current.delete(item.uuid)\n }\n handleSelect(item, checked)\n },\n [handleSelect],\n )\n\n const handleSelectAllWithCapture = useCallback(\n (checked: boolean, visibleItems: EmployeeItem[]) => {\n for (const item of visibleItems) {\n if (checked) {\n selectedEmployeesRef.current.set(item.uuid, item)\n } else {\n selectedEmployeesRef.current.delete(item.uuid)\n }\n }\n handleSelectAll(checked, visibleItems)\n },\n [handleSelectAll],\n )\n\n const carryOverBalances = useMemo(\n () => deriveCarryOverBalances(filteredEmployees, policyType),\n [filteredEmployees, policyType],\n )\n\n const [balances, setBalances] = useState<Record<string, string>>({})\n\n const effectiveBalances = useMemo<Record<string, string>>(\n () => ({ ...carryOverBalances, ...balances }),\n [carryOverBalances, balances],\n )\n\n const { mutateAsync: addEmployees, isPending: isAddPending } =\n useTimeOffPoliciesAddEmployeesMutation()\n const { mutateAsync: removeEmployees, isPending: isRemovePending } =\n useTimeOffPoliciesRemoveEmployeesMutation()\n const { mutateAsync: updatePolicy, isPending: isUpdatePending } =\n useTimeOffPoliciesUpdateMutation()\n const isSubmitPending = isAddPending || isRemovePending || isUpdatePending\n\n const [confirmRemoveOpen, setConfirmRemoveOpen] = useState(false)\n const [confirmAddOpen, setConfirmAddOpen] = useState(false)\n\n const handleBalanceChange = useCallback((uuid: string, value: string) => {\n setBalances(prev => ({ ...prev, [uuid]: value }))\n }, [])\n\n const buildAddPayload = useCallback(\n (uuids: string[]) =>\n uuids.map(uuid => {\n if (hideBalances) return { uuid, balance: '0' }\n const userValue = balances[uuid]\n const carryOver = extractCarryOverBalance(\n selectedEmployeesRef.current.get(uuid),\n policyType,\n )\n const balance = userValue && userValue.length > 0 ? userValue : (carryOver ?? '0')\n return { uuid, balance }\n }),\n [hideBalances, balances, policyType],\n )\n\n const submitDiff = useCallback(\n async (toAdd: string[], toRemove: string[], markComplete = false) => {\n await baseSubmitHandler({}, async () => {\n if (toRemove.length > 0) {\n try {\n await removeEmployees({\n request: {\n timeOffPolicyUuid: policyId,\n requestBody: { employees: toRemove.map(uuid => ({ uuid })) },\n },\n })\n } catch (err) {\n if (err instanceof UnprocessableEntityError) {\n const apiMessage = err.errors[0]?.message ?? ''\n throw new SDKInternalError(\n t('errors.removeEmployeesFailed', { details: apiMessage }),\n 'api_error',\n )\n }\n throw err\n }\n }\n let policyResult: unknown\n if (toAdd.length > 0) {\n const response = await addEmployees({\n request: {\n timeOffPolicyUuid: policyId,\n requestBody: { employees: buildAddPayload(toAdd) },\n },\n })\n policyResult = response.timeOffPolicy\n }\n if (markComplete && policyResult) {\n const version =\n typeof policyResult === 'object' && 'version' in policyResult\n ? String((policyResult as { version: unknown }).version)\n : ''\n try {\n await updatePolicy({\n request: {\n timeOffPolicyUuid: policyId,\n requestBody: { complete: true, version },\n },\n })\n } catch (err) {\n if (err instanceof UnprocessableEntityError) {\n const apiMessage = err.errors[0]?.message ?? ''\n throw new SDKInternalError(\n t('errors.completePolicyFailed', { details: apiMessage }),\n 'api_error',\n )\n }\n throw err\n }\n }\n void queryClient.invalidateQueries({\n queryKey: ['@gusto/embedded-api', 'timeOffPolicies', 'get'],\n })\n onEvent(componentEvents.TIME_OFF_ADD_EMPLOYEES_DONE, policyResult)\n })\n },\n [\n baseSubmitHandler,\n removeEmployees,\n addEmployees,\n buildAddPayload,\n updatePolicy,\n policyId,\n queryClient,\n onEvent,\n t,\n ],\n )\n\n const handleContinue = useCallback(async () => {\n if (mode === 'wizard') {\n const toAdd = [...selectedUuids]\n await submitDiff(toAdd, [], true)\n return\n }\n\n const original = originalUuids ?? new Set<string>()\n const toAdd = [...selectedUuids].filter(uuid => !original.has(uuid))\n const toRemove = [...original].filter(uuid => !selectedUuids.has(uuid))\n\n if (toAdd.length === 0 && toRemove.length === 0) {\n onEvent(componentEvents.TIME_OFF_ADD_EMPLOYEES_DONE)\n return\n }\n\n if (toRemove.length > 0) {\n setConfirmRemoveOpen(true)\n return\n }\n\n if (toAdd.length > 0) {\n setConfirmAddOpen(true)\n return\n }\n }, [mode, originalUuids, selectedUuids, onEvent, submitDiff])\n\n const handleConfirmRemove = useCallback(async () => {\n const original = originalUuids ?? new Set<string>()\n const toAdd = [...selectedUuids].filter(uuid => !original.has(uuid))\n const toRemove = [...original].filter(uuid => !selectedUuids.has(uuid))\n setConfirmRemoveOpen(false)\n await submitDiff(toAdd, toRemove)\n }, [originalUuids, selectedUuids, submitDiff])\n\n const handleConfirmAdd = useCallback(async () => {\n const original = originalUuids ?? new Set<string>()\n const toAdd = [...selectedUuids].filter(uuid => !original.has(uuid))\n const toRemove = [...original].filter(uuid => !selectedUuids.has(uuid))\n setConfirmAddOpen(false)\n await submitDiff(toAdd, toRemove)\n }, [originalUuids, selectedUuids, submitDiff])\n\n const addCount = useMemo(() => {\n if (!originalUuids) return selectedUuids.size\n let count = 0\n for (const uuid of selectedUuids) if (!originalUuids.has(uuid)) count += 1\n return count\n }, [originalUuids, selectedUuids])\n\n const removeCount = useMemo(() => {\n if (!originalUuids) return 0\n let count = 0\n for (const uuid of originalUuids) if (!selectedUuids.has(uuid)) count += 1\n return count\n }, [originalUuids, selectedUuids])\n\n const showReassignmentWarning = useMemo(() => {\n const originalSet = originalUuids ?? new Set<string>()\n const targetPtoName = PAID_TIME_OFF_NAME_BY_POLICY_TYPE[policyType]\n for (const uuid of selectedUuids) {\n if (originalSet.has(uuid)) continue\n const employee = selectedEmployeesRef.current.get(uuid)\n if (employee?.eligiblePaidTimeOff?.some(pto => pto.name === targetPtoName)) {\n return true\n }\n }\n return false\n }, [selectedUuids, originalUuids, policyType])\n\n const handleBack = useCallback(() => {\n onEvent(componentEvents.TIME_OFF_ADD_EMPLOYEES_BACK)\n }, [onEvent])\n\n return (\n <SelectEmployeesPresentation\n employees={filteredEmployees}\n selectedUuids={selectedUuids}\n searchValue={searchValue}\n onSelect={handleSelectWithCapture}\n onSelectAll={handleSelectAllWithCapture}\n onSearchChange={handleSearchChange}\n onSearchClear={handleSearchClear}\n onBack={handleBack}\n onContinue={handleContinue}\n showReassignmentWarning={showReassignmentWarning}\n policyTypeLabel={t(`policyTypeLabel_${policyType}`)}\n balances={hideBalances ? undefined : effectiveBalances}\n onBalanceChange={hideBalances ? undefined : handleBalanceChange}\n pagination={pagination}\n isFetching={isFetching}\n isPending={isSubmitPending}\n originallyOnPolicyUuids={originalUuids}\n originalBalances={originalBalances}\n removeConfirmDialog={\n mode === 'standalone'\n ? {\n isOpen: confirmRemoveOpen,\n count: removeCount,\n onConfirm: () => {\n void handleConfirmRemove()\n },\n onClose: () => {\n setConfirmRemoveOpen(false)\n },\n isPending: isRemovePending,\n }\n : undefined\n }\n addConfirmDialog={\n mode === 'standalone'\n ? {\n isOpen: confirmAddOpen,\n count: addCount,\n onConfirm: () => {\n void handleConfirmAdd()\n },\n onClose: () => {\n setConfirmAddOpen(false)\n },\n isPending: isAddPending,\n }\n : undefined\n }\n />\n )\n}\n"],"names":["PAID_TIME_OFF_NAME_BY_POLICY_TYPE","extractCarryOverBalance","employee","policyType","targetName","balance","pto","deriveCarryOverBalances","employees","map","SelectEmployeesTimeOff","props","jsx","SelectEmployeesTimeOffInner","StandaloneLoader","policyResponse","useTimeOffPoliciesGetSuspense","policy","isUnlimited","originalUuids","useMemo","set","e","originalBalances","companyId","policyId","mode","hideBalances","useI18n","t","useTranslation","onEvent","baseSubmitHandler","useBase","queryClient","useQueryClient","filteredEmployees","selectedUuids","searchValue","pagination","isFetching","handleSelect","handleSelectAll","handleSearchChange","handleSearchClear","useSelectEmployeesData","selectedEmployeesRef","useRef","handleSelectWithCapture","useCallback","item","checked","handleSelectAllWithCapture","visibleItems","carryOverBalances","balances","setBalances","useState","effectiveBalances","addEmployees","isAddPending","useTimeOffPoliciesAddEmployeesMutation","removeEmployees","isRemovePending","useTimeOffPoliciesRemoveEmployeesMutation","updatePolicy","isUpdatePending","useTimeOffPoliciesUpdateMutation","isSubmitPending","confirmRemoveOpen","setConfirmRemoveOpen","confirmAddOpen","setConfirmAddOpen","handleBalanceChange","uuid","value","prev","buildAddPayload","uuids","userValue","carryOver","submitDiff","toAdd","toRemove","markComplete","err","UnprocessableEntityError","apiMessage","SDKInternalError","policyResult","version","componentEvents","handleContinue","original","handleConfirmRemove","handleConfirmAdd","addCount","count","removeCount","showReassignmentWarning","originalSet","targetPtoName","handleBack","SelectEmployeesPresentation"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SelectEmployeesTimeOff.js","sources":["../../../../../src/components/TimeOff/TimeOffManagement/SelectEmployees/SelectEmployeesTimeOff.tsx"],"sourcesContent":["import { useCallback, useMemo, useRef, useState } from 'react'\nimport { useTimeOffPoliciesAddEmployeesMutation } from '@gusto/embedded-api/react-query/timeOffPoliciesAddEmployees'\nimport { useTimeOffPoliciesGetSuspense } from '@gusto/embedded-api/react-query/timeOffPoliciesGet'\nimport { useTimeOffPoliciesUpdateMutation } from '@gusto/embedded-api/react-query/timeOffPoliciesUpdate'\nimport { UnprocessableEntityError } from '@gusto/embedded-api/models/errors/unprocessableentityerror'\nimport { useQueryClient } from '@tanstack/react-query'\nimport { useTranslation } from 'react-i18next'\nimport type { CreatableTimeOffPolicyType } from '../../TimeOffFlow/timeOffPolicyTypes'\nimport { SelectEmployeesPresentation } from './SelectEmployeesPresentation'\nimport { matchesEmployeeSearch, useSelectEmployeesData } from './useSelectEmployeesData'\nimport type { EmployeeItem } from './SelectEmployeesPresentationTypes'\nimport { useBase } from '@/components/Base/useBase'\nimport { SDKInternalError } from '@/types/sdkError'\nimport { componentEvents } from '@/shared/constants'\nimport { useI18n } from '@/i18n'\n\ninterface SelectEmployeesTimeOffProps {\n companyId: string\n policyId: string\n policyType: CreatableTimeOffPolicyType\n mode?: 'standalone' | 'wizard'\n}\n\nconst PAID_TIME_OFF_NAME_BY_POLICY_TYPE: Record<CreatableTimeOffPolicyType, string> = {\n vacation: 'Vacation Hours',\n sick: 'Sick Hours',\n}\n\nfunction extractCarryOverBalance(\n employee: EmployeeItem | undefined,\n policyType: CreatableTimeOffPolicyType,\n): string | undefined {\n if (!employee) return undefined\n const targetName = PAID_TIME_OFF_NAME_BY_POLICY_TYPE[policyType]\n const matching = employee.eligiblePaidTimeOff?.find(pto => pto.name === targetName)\n const balance = matching?.accrualBalance\n return balance && balance.length > 0 ? balance : undefined\n}\n\nfunction deriveCarryOverBalances(\n employees: EmployeeItem[],\n policyType: CreatableTimeOffPolicyType,\n): Record<string, string> {\n const map: Record<string, string> = {}\n for (const employee of employees) {\n const balance = extractCarryOverBalance(employee, policyType)\n if (balance) {\n map[employee.uuid] = balance\n }\n }\n return map\n}\n\nexport function SelectEmployeesTimeOff(props: SelectEmployeesTimeOffProps) {\n if (props.mode === 'wizard') {\n return <SelectEmployeesTimeOffInner {...props} mode=\"wizard\" />\n }\n return <StandaloneLoader {...props} />\n}\n\nfunction StandaloneLoader(props: SelectEmployeesTimeOffProps) {\n const { data: policyResponse } = useTimeOffPoliciesGetSuspense({\n timeOffPolicyUuid: props.policyId,\n })\n const policy = policyResponse.timeOffPolicy\n if (!policy) throw new Error('Unexpected response: missing timeOffPolicy')\n\n const isUnlimited = policy.accrualMethod === 'unlimited'\n\n const existingAssigneeUuids = useMemo(() => {\n const set = new Set<string>()\n for (const e of policy.employees) {\n if (e.uuid) set.add(e.uuid)\n }\n return set\n }, [policy.employees])\n\n return (\n <SelectEmployeesTimeOffInner\n {...props}\n mode=\"standalone\"\n existingAssigneeUuids={existingAssigneeUuids}\n hideBalances={isUnlimited}\n />\n )\n}\n\ninterface InnerProps extends SelectEmployeesTimeOffProps {\n existingAssigneeUuids?: Set<string>\n hideBalances?: boolean\n}\n\nfunction SelectEmployeesTimeOffInner({\n companyId,\n policyId,\n policyType,\n mode = 'standalone',\n existingAssigneeUuids,\n hideBalances = false,\n}: InnerProps) {\n useI18n('Company.TimeOff.SelectEmployees')\n const { t } = useTranslation('Company.TimeOff.SelectEmployees')\n const { onEvent, baseSubmitHandler } = useBase()\n const queryClient = useQueryClient()\n const {\n filteredEmployees,\n eligibleEmployees,\n selectedUuids,\n searchValue,\n pagination,\n isFetching,\n handleSelect,\n handleSelectAll,\n handleSearchChange,\n handleSearchClear,\n } = useSelectEmployeesData(companyId, existingAssigneeUuids)\n\n // Captures the full Employee record at the moment a row is selected so\n // their record is still available for the reassignment-warning check at\n // submit time even if the user has since searched/paginated the row out of\n // view. Without this, `selectedUuids` would point at UUIDs we no longer\n // have data for.\n const selectedEmployeesRef = useRef(new Map<string, EmployeeItem>())\n\n const handleSelectWithCapture = useCallback(\n (item: EmployeeItem, checked: boolean) => {\n if (checked) {\n selectedEmployeesRef.current.set(item.uuid, item)\n } else {\n selectedEmployeesRef.current.delete(item.uuid)\n }\n handleSelect(item, checked)\n },\n [handleSelect],\n )\n\n const handleSelectAllWithCapture = useCallback(\n (checked: boolean) => {\n // Mirror the hook's scope: full search-filtered list across pages, not\n // just the visible page slice. Keeps `selectedEmployeesRef` in sync so\n // off-page selections survive a submit (carry-over balances, etc.).\n const scope = searchValue\n ? eligibleEmployees.filter(employee => matchesEmployeeSearch(employee, searchValue))\n : eligibleEmployees\n for (const item of scope) {\n if (checked) {\n selectedEmployeesRef.current.set(item.uuid, item)\n } else {\n selectedEmployeesRef.current.delete(item.uuid)\n }\n }\n handleSelectAll(checked)\n },\n [eligibleEmployees, searchValue, handleSelectAll],\n )\n\n const carryOverBalances = useMemo(\n () => deriveCarryOverBalances(eligibleEmployees, policyType),\n [eligibleEmployees, policyType],\n )\n\n const [balances, setBalances] = useState<Record<string, string>>({})\n\n const effectiveBalances = useMemo<Record<string, string>>(\n () => ({ ...carryOverBalances, ...balances }),\n [carryOverBalances, balances],\n )\n\n const { mutateAsync: addEmployees, isPending: isAddPending } =\n useTimeOffPoliciesAddEmployeesMutation()\n const { mutateAsync: updatePolicy, isPending: isUpdatePending } =\n useTimeOffPoliciesUpdateMutation()\n const isSubmitPending = isAddPending || isUpdatePending\n\n const [confirmAddOpen, setConfirmAddOpen] = useState(false)\n\n const handleBalanceChange = useCallback((uuid: string, value: string) => {\n setBalances(prev => ({ ...prev, [uuid]: value }))\n }, [])\n\n const buildAddPayload = useCallback(\n (uuids: string[]) =>\n uuids.map(uuid => {\n if (hideBalances) return { uuid, balance: '0' }\n const userValue = balances[uuid]\n const carryOver = extractCarryOverBalance(\n selectedEmployeesRef.current.get(uuid),\n policyType,\n )\n const balance = userValue && userValue.length > 0 ? userValue : (carryOver ?? '0')\n return { uuid, balance }\n }),\n [hideBalances, balances, policyType],\n )\n\n const submitAdd = useCallback(\n async (toAdd: string[]) => {\n await baseSubmitHandler({}, async () => {\n let policyResult: unknown\n if (toAdd.length > 0) {\n const response = await addEmployees({\n request: {\n timeOffPolicyUuid: policyId,\n requestBody: { employees: buildAddPayload(toAdd) },\n },\n })\n policyResult = response.timeOffPolicy\n }\n if (mode === 'wizard' && policyResult) {\n const version =\n typeof policyResult === 'object' && 'version' in policyResult\n ? String((policyResult as { version: unknown }).version)\n : ''\n try {\n await updatePolicy({\n request: {\n timeOffPolicyUuid: policyId,\n requestBody: { complete: true, version },\n },\n })\n } catch (err) {\n if (err instanceof UnprocessableEntityError) {\n const apiMessage = err.errors[0]?.message ?? ''\n throw new SDKInternalError(\n t('errors.completePolicyFailed', { details: apiMessage }),\n 'api_error',\n )\n }\n throw err\n }\n }\n void queryClient.invalidateQueries({\n queryKey: ['@gusto/embedded-api', 'timeOffPolicies', 'get'],\n })\n onEvent(componentEvents.TIME_OFF_ADD_EMPLOYEES_DONE, policyResult)\n })\n },\n [\n mode,\n baseSubmitHandler,\n addEmployees,\n buildAddPayload,\n updatePolicy,\n policyId,\n queryClient,\n onEvent,\n t,\n ],\n )\n\n const handleContinue = useCallback(async () => {\n const toAdd = [...selectedUuids]\n\n if (toAdd.length === 0 && mode === 'standalone') {\n onEvent(componentEvents.TIME_OFF_ADD_EMPLOYEES_DONE)\n return\n }\n\n if (mode === 'standalone' && toAdd.length > 0) {\n setConfirmAddOpen(true)\n return\n }\n\n await submitAdd(toAdd)\n }, [mode, selectedUuids, onEvent, submitAdd])\n\n const handleConfirmAdd = useCallback(async () => {\n const toAdd = [...selectedUuids]\n setConfirmAddOpen(false)\n await submitAdd(toAdd)\n }, [selectedUuids, submitAdd])\n\n const showReassignmentWarning = useMemo(() => {\n const targetPtoName = PAID_TIME_OFF_NAME_BY_POLICY_TYPE[policyType]\n for (const uuid of selectedUuids) {\n const employee = selectedEmployeesRef.current.get(uuid)\n if (employee?.eligiblePaidTimeOff?.some(pto => pto.name === targetPtoName)) {\n return true\n }\n }\n return false\n }, [selectedUuids, policyType])\n\n const handleBack = useCallback(() => {\n onEvent(componentEvents.TIME_OFF_ADD_EMPLOYEES_BACK)\n }, [onEvent])\n\n return (\n <SelectEmployeesPresentation\n employees={filteredEmployees}\n selectedUuids={selectedUuids}\n searchValue={searchValue}\n onSelect={handleSelectWithCapture}\n onSelectAll={handleSelectAllWithCapture}\n onSearchChange={handleSearchChange}\n onSearchClear={handleSearchClear}\n onBack={handleBack}\n onContinue={handleContinue}\n showReassignmentWarning={showReassignmentWarning}\n policyTypeLabel={t(`policyTypeLabel_${policyType}`)}\n balances={hideBalances ? undefined : effectiveBalances}\n onBalanceChange={hideBalances ? undefined : handleBalanceChange}\n pagination={pagination}\n isFetching={isFetching}\n isPending={isSubmitPending}\n addConfirmDialog={\n mode === 'standalone'\n ? {\n isOpen: confirmAddOpen,\n count: selectedUuids.size,\n onConfirm: () => {\n void handleConfirmAdd()\n },\n onClose: () => {\n setConfirmAddOpen(false)\n },\n isPending: isAddPending,\n }\n : undefined\n }\n />\n )\n}\n"],"names":["PAID_TIME_OFF_NAME_BY_POLICY_TYPE","extractCarryOverBalance","employee","policyType","targetName","balance","pto","deriveCarryOverBalances","employees","map","SelectEmployeesTimeOff","props","jsx","SelectEmployeesTimeOffInner","StandaloneLoader","policyResponse","useTimeOffPoliciesGetSuspense","policy","isUnlimited","existingAssigneeUuids","useMemo","set","e","companyId","policyId","mode","hideBalances","useI18n","t","useTranslation","onEvent","baseSubmitHandler","useBase","queryClient","useQueryClient","filteredEmployees","eligibleEmployees","selectedUuids","searchValue","pagination","isFetching","handleSelect","handleSelectAll","handleSearchChange","handleSearchClear","useSelectEmployeesData","selectedEmployeesRef","useRef","handleSelectWithCapture","useCallback","item","checked","handleSelectAllWithCapture","scope","matchesEmployeeSearch","carryOverBalances","balances","setBalances","useState","effectiveBalances","addEmployees","isAddPending","useTimeOffPoliciesAddEmployeesMutation","updatePolicy","isUpdatePending","useTimeOffPoliciesUpdateMutation","isSubmitPending","confirmAddOpen","setConfirmAddOpen","handleBalanceChange","uuid","value","prev","buildAddPayload","uuids","userValue","carryOver","submitAdd","toAdd","policyResult","version","err","UnprocessableEntityError","apiMessage","SDKInternalError","componentEvents","handleContinue","handleConfirmAdd","showReassignmentWarning","targetPtoName","handleBack","SelectEmployeesPresentation"],"mappings":"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"}
|
package/dist/components/TimeOff/TimeOffManagement/SelectEmployees/useSelectEmployeesData.d.ts
CHANGED
|
@@ -1,12 +1,16 @@
|
|
|
1
1
|
import { EmployeeItem } from './SelectEmployeesPresentationTypes';
|
|
2
|
-
export declare function
|
|
2
|
+
export declare function isStartedByToday(hireDate: string | undefined): boolean;
|
|
3
|
+
export declare function matchesEmployeeSearch(employee: EmployeeItem, query: string): boolean;
|
|
4
|
+
export declare function useSelectEmployeesData(companyId: string, excludeUuids?: Set<string>): {
|
|
3
5
|
filteredEmployees: EmployeeItem[];
|
|
6
|
+
eligibleEmployees: EmployeeItem[];
|
|
7
|
+
eligibleCount: number;
|
|
4
8
|
selectedUuids: Set<string>;
|
|
5
9
|
searchValue: string;
|
|
6
|
-
pagination:
|
|
10
|
+
pagination: import('../../../..').PaginationControlProps;
|
|
7
11
|
isFetching: boolean;
|
|
8
12
|
handleSelect: (item: EmployeeItem, checked: boolean) => void;
|
|
9
|
-
handleSelectAll: (checked: boolean,
|
|
13
|
+
handleSelectAll: (checked: boolean, _visibleItems?: EmployeeItem[]) => void;
|
|
10
14
|
handleSearchChange: (value: string) => void;
|
|
11
15
|
handleSearchClear: () => void;
|
|
12
16
|
};
|