@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,64 +1,87 @@
|
|
|
1
|
-
import { useState as
|
|
2
|
-
import { useEmployeesListSuspense as
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
1
|
+
import { useState as x, useMemo as M, useCallback as f } from "react";
|
|
2
|
+
import { useEmployeesListSuspense as R, buildEmployeesListQuery as _ } from "@gusto/embedded-api/react-query/employeesList";
|
|
3
|
+
import { useGustoEmbeddedContext as L } from "@gusto/embedded-api/react-query/_context";
|
|
4
|
+
import { useSuspenseQueries as T } from "@tanstack/react-query";
|
|
5
|
+
import { Include as h } from "@gusto/embedded-api/models/operations/getv1companiescompanyidemployees";
|
|
6
|
+
import { useClientPagination as O } from "../../../../hooks/useClientPagination/useClientPagination.js";
|
|
7
|
+
const g = 100;
|
|
8
|
+
function v(t) {
|
|
9
|
+
if (!t) return !1;
|
|
10
|
+
const a = (/* @__PURE__ */ new Date()).toISOString().slice(0, 10);
|
|
11
|
+
return t <= a;
|
|
12
|
+
}
|
|
13
|
+
function S(t, a) {
|
|
14
|
+
return `${t.firstName ?? ""} ${t.lastName ?? ""}`.toLowerCase().includes(a.toLowerCase());
|
|
15
|
+
}
|
|
16
|
+
function k(t, a) {
|
|
17
|
+
const y = L(), [E, m] = x(() => /* @__PURE__ */ new Set()), { data: r, isFetching: b } = R({
|
|
18
|
+
companyId: t,
|
|
10
19
|
terminated: !1,
|
|
11
|
-
page:
|
|
12
|
-
per:
|
|
13
|
-
include: [
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
),
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
20
|
+
page: 1,
|
|
21
|
+
per: g,
|
|
22
|
+
include: [h.AllCompensations]
|
|
23
|
+
}), C = Number(r.httpMeta.response.headers.get("x-total-pages") ?? 1), u = T({
|
|
24
|
+
queries: Array.from(
|
|
25
|
+
{ length: Math.max(0, C - 1) },
|
|
26
|
+
(s, e) => _(y, {
|
|
27
|
+
companyId: t,
|
|
28
|
+
terminated: !1,
|
|
29
|
+
page: e + 2,
|
|
30
|
+
per: g,
|
|
31
|
+
include: [h.AllCompensations]
|
|
32
|
+
})
|
|
33
|
+
)
|
|
34
|
+
}), n = M(() => [
|
|
35
|
+
...r.showEmployees ?? [],
|
|
36
|
+
...u.flatMap((e) => e.data.showEmployees ?? [])
|
|
37
|
+
].filter((e) => v((e.jobs?.find((i) => i.primary) ?? e.jobs?.[0])?.hireDate)).filter((e) => !a?.has(e.uuid)).map((e) => ({
|
|
38
|
+
uuid: e.uuid,
|
|
39
|
+
firstName: e.firstName,
|
|
40
|
+
lastName: e.lastName,
|
|
41
|
+
jobTitle: e.jobs?.find((i) => i.primary)?.title ?? e.jobs?.[0]?.title ?? null,
|
|
42
|
+
department: e.department ?? null,
|
|
43
|
+
eligiblePaidTimeOff: e.eligiblePaidTimeOff
|
|
44
|
+
})), [r.showEmployees, u, a]), {
|
|
45
|
+
data: w,
|
|
46
|
+
pagination: P,
|
|
47
|
+
searchValue: l,
|
|
48
|
+
actions: d
|
|
49
|
+
} = O(n, {
|
|
50
|
+
searchPredicate: S
|
|
51
|
+
}), A = u.some((s) => s.isFetching), N = b || A, F = f((s, e) => {
|
|
52
|
+
m((i) => {
|
|
53
|
+
const o = new Set(i);
|
|
54
|
+
return e ? o.add(s.uuid) : o.delete(s.uuid), o;
|
|
40
55
|
});
|
|
41
|
-
}, []),
|
|
42
|
-
(e) => {
|
|
43
|
-
|
|
56
|
+
}, []), j = f(
|
|
57
|
+
(s, e) => {
|
|
58
|
+
const i = l ? n.filter((o) => S(o, l)) : n;
|
|
59
|
+
m((o) => {
|
|
60
|
+
const c = new Set(o);
|
|
61
|
+
for (const p of i)
|
|
62
|
+
s ? c.add(p.uuid) : c.delete(p.uuid);
|
|
63
|
+
return c;
|
|
64
|
+
});
|
|
44
65
|
},
|
|
45
|
-
[
|
|
46
|
-
)
|
|
47
|
-
u(""), a();
|
|
48
|
-
}, [a]);
|
|
66
|
+
[n, l]
|
|
67
|
+
);
|
|
49
68
|
return {
|
|
50
69
|
filteredEmployees: w,
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
70
|
+
eligibleEmployees: n,
|
|
71
|
+
eligibleCount: n.length,
|
|
72
|
+
selectedUuids: E,
|
|
73
|
+
searchValue: l,
|
|
74
|
+
pagination: P,
|
|
75
|
+
isFetching: N,
|
|
76
|
+
handleSelect: F,
|
|
77
|
+
handleSelectAll: j,
|
|
78
|
+
handleSearchChange: d.onSearchChange,
|
|
79
|
+
handleSearchClear: d.onSearchClear
|
|
59
80
|
};
|
|
60
81
|
}
|
|
61
82
|
export {
|
|
62
|
-
|
|
83
|
+
v as isStartedByToday,
|
|
84
|
+
S as matchesEmployeeSearch,
|
|
85
|
+
k as useSelectEmployeesData
|
|
63
86
|
};
|
|
64
87
|
//# sourceMappingURL=useSelectEmployeesData.js.map
|
package/dist/components/TimeOff/TimeOffManagement/SelectEmployees/useSelectEmployeesData.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useSelectEmployeesData.js","sources":["../../../../../src/components/TimeOff/TimeOffManagement/SelectEmployees/useSelectEmployeesData.ts"],"sourcesContent":["import { useCallback,
|
|
1
|
+
{"version":3,"file":"useSelectEmployeesData.js","sources":["../../../../../src/components/TimeOff/TimeOffManagement/SelectEmployees/useSelectEmployeesData.ts"],"sourcesContent":["import { useCallback, useMemo, useState } from 'react'\nimport {\n buildEmployeesListQuery,\n useEmployeesListSuspense,\n} from '@gusto/embedded-api/react-query/employeesList'\nimport { useGustoEmbeddedContext } from '@gusto/embedded-api/react-query/_context'\nimport { useSuspenseQueries } from '@tanstack/react-query'\nimport { Include } from '@gusto/embedded-api/models/operations/getv1companiescompanyidemployees'\nimport type { PaidTimeOff } from '@gusto/embedded-api/models/components/paidtimeoff'\nimport type { EmployeeItem } from './SelectEmployeesPresentationTypes'\nimport { useClientPagination } from '@/hooks/useClientPagination/useClientPagination'\n\nconst SERVER_MAX_PER_PAGE = 100\n\n// Employees whose primary job's hire_date is in the future are rejected by\n// `POST /time_off_policies/:uuid/add_employees` as \"ineligible\" with no\n// per-uuid reason in the response. We can detect this from the employees\n// list response, so we drop them client-side to prevent the error.\nexport function isStartedByToday(hireDate: string | undefined): boolean {\n if (!hireDate) return false\n const today = new Date().toISOString().slice(0, 10)\n return hireDate <= today\n}\n\n// Single source of truth for the search predicate so the client-pagination\n// hook and the select-all handler agree on what's \"in scope\" for a query.\nexport function matchesEmployeeSearch(employee: EmployeeItem, query: string): boolean {\n return `${employee.firstName ?? ''} ${employee.lastName ?? ''}`\n .toLowerCase()\n .includes(query.toLowerCase())\n}\n\nexport function useSelectEmployeesData(companyId: string, excludeUuids?: Set<string>) {\n const gustoClient = useGustoEmbeddedContext()\n const [selectedUuids, setSelectedUuids] = useState<Set<string>>(() => new Set())\n\n // Fetch the full employees list up front so filter, search, and pagination\n // can all be applied client-side. include: all_compensations is required to\n // populate eligiblePaidTimeOff, which carries each employee's current\n // balance on their existing time-off policies — used to pre-fill carry-over\n // balances for selection.\n const { data: firstPage, isFetching: isFirstPageFetching } = useEmployeesListSuspense({\n companyId,\n terminated: false,\n page: 1,\n per: SERVER_MAX_PER_PAGE,\n include: [Include.AllCompensations],\n })\n\n const totalServerPages = Number(firstPage.httpMeta.response.headers.get('x-total-pages') ?? 1)\n\n // For each additional server page we fire a suspense query in parallel.\n // No explicit concurrency cap: typical embedded customers are <100\n // employees (one server page, zero extra requests). For larger companies\n // the browser's per-origin connection limit (~6) acts as the natural\n // ceiling. If this flow ever needs to support thousands of employees,\n // reconsider — either a server-side eligibility filter or a paginated\n // fetch-as-you-scroll strategy would be the right escape hatches.\n const restPageResults = useSuspenseQueries({\n queries: Array.from({ length: Math.max(0, totalServerPages - 1) }, (_, i) =>\n buildEmployeesListQuery(gustoClient, {\n companyId,\n terminated: false,\n page: i + 2,\n per: SERVER_MAX_PER_PAGE,\n include: [Include.AllCompensations],\n }),\n ),\n })\n\n const eligibleEmployees = useMemo<EmployeeItem[]>(() => {\n const showEmployees = [\n ...(firstPage.showEmployees ?? []),\n ...restPageResults.flatMap(r => r.data.showEmployees ?? []),\n ]\n return showEmployees\n .filter(e => isStartedByToday((e.jobs?.find(job => job.primary) ?? e.jobs?.[0])?.hireDate))\n .filter(e => !excludeUuids?.has(e.uuid))\n .map(e => ({\n uuid: e.uuid,\n firstName: e.firstName,\n lastName: e.lastName,\n jobTitle: e.jobs?.find(job => job.primary)?.title ?? e.jobs?.[0]?.title ?? null,\n department: e.department ?? null,\n eligiblePaidTimeOff: e.eligiblePaidTimeOff as PaidTimeOff[] | undefined,\n }))\n }, [firstPage.showEmployees, restPageResults, excludeUuids])\n\n const {\n data: filteredEmployees,\n pagination,\n searchValue,\n actions: paginationActions,\n } = useClientPagination(eligibleEmployees, {\n searchPredicate: matchesEmployeeSearch,\n })\n\n const isRestFetching = restPageResults.some(r => r.isFetching)\n const isFetching = isFirstPageFetching || isRestFetching\n\n const handleSelect = useCallback((item: EmployeeItem, checked: boolean) => {\n setSelectedUuids(prev => {\n const next = new Set(prev)\n if (checked) next.add(item.uuid)\n else next.delete(item.uuid)\n return next\n })\n }, [])\n\n // Select-all scopes to the full search-filtered list (every page), not just\n // the rendered page slice that DataView passes in. This matches the user\n // expectation that \"select all\" actually means \"all\" — including any\n // employees the current pagination has scrolled off-screen. The second\n // argument from DataView (the visible page slice) is intentionally ignored.\n const handleSelectAll = useCallback(\n (checked: boolean, _visibleItems?: EmployeeItem[]) => {\n const scope = searchValue\n ? eligibleEmployees.filter(employee => matchesEmployeeSearch(employee, searchValue))\n : eligibleEmployees\n setSelectedUuids(prev => {\n const next = new Set(prev)\n for (const item of scope) {\n if (checked) next.add(item.uuid)\n else next.delete(item.uuid)\n }\n return next\n })\n },\n [eligibleEmployees, searchValue],\n )\n\n return {\n filteredEmployees,\n eligibleEmployees,\n eligibleCount: eligibleEmployees.length,\n selectedUuids,\n searchValue,\n pagination,\n isFetching,\n handleSelect,\n handleSelectAll,\n handleSearchChange: paginationActions.onSearchChange,\n handleSearchClear: paginationActions.onSearchClear,\n }\n}\n"],"names":["SERVER_MAX_PER_PAGE","isStartedByToday","hireDate","today","matchesEmployeeSearch","employee","query","useSelectEmployeesData","companyId","excludeUuids","gustoClient","useGustoEmbeddedContext","selectedUuids","setSelectedUuids","useState","firstPage","isFirstPageFetching","useEmployeesListSuspense","Include","totalServerPages","restPageResults","useSuspenseQueries","_","i","buildEmployeesListQuery","eligibleEmployees","useMemo","r","job","filteredEmployees","pagination","searchValue","paginationActions","useClientPagination","isRestFetching","isFetching","handleSelect","useCallback","item","checked","prev","next","handleSelectAll","_visibleItems","scope"],"mappings":"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"}
|
package/dist/components/TimeOff/TimeOffManagement/SelectEmployees/useSelectEmployeesData.test.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { jsx as
|
|
1
|
+
import { jsx as e, jsxs as c } from "react/jsx-runtime";
|
|
2
2
|
import { useState as b, useEffect as x } from "react";
|
|
3
3
|
import { useTranslation as g } from "react-i18next";
|
|
4
4
|
import { Flex as D } from "../../Common/Flex/Flex.js";
|
|
@@ -7,7 +7,7 @@ import "../../../shared/constants.js";
|
|
|
7
7
|
import { ActionsLayout as M } from "../../Common/ActionsLayout/ActionsLayout.js";
|
|
8
8
|
import { useComponentContext as B } from "../../../contexts/ComponentAdapter/useComponentContext.js";
|
|
9
9
|
import { useI18n as T } from "../../../i18n/I18n.js";
|
|
10
|
-
function
|
|
10
|
+
function q({
|
|
11
11
|
isOpen: s,
|
|
12
12
|
onClose: t,
|
|
13
13
|
employeeName: d,
|
|
@@ -17,30 +17,31 @@ function H({
|
|
|
17
17
|
error: n
|
|
18
18
|
}) {
|
|
19
19
|
T("Company.TimeOff.TimeOffPolicyDetails");
|
|
20
|
-
const { t:
|
|
20
|
+
const { t: a } = g("Company.TimeOff.TimeOffPolicyDetails"), { Modal: p, Heading: u, NumberInput: h, Button: l, Alert: y } = B(), [m, r] = b(i);
|
|
21
21
|
x(() => {
|
|
22
22
|
r(i);
|
|
23
23
|
}, [i]);
|
|
24
24
|
const C = () => {
|
|
25
25
|
f(m);
|
|
26
26
|
};
|
|
27
|
-
return /* @__PURE__ */
|
|
27
|
+
return /* @__PURE__ */ e(
|
|
28
28
|
p,
|
|
29
29
|
{
|
|
30
30
|
isOpen: s,
|
|
31
31
|
onClose: t,
|
|
32
32
|
footer: /* @__PURE__ */ c(M, { children: [
|
|
33
|
-
/* @__PURE__ */
|
|
34
|
-
/* @__PURE__ */
|
|
33
|
+
/* @__PURE__ */ e(l, { variant: "secondary", onClick: t, isDisabled: o, children: a("editBalanceModal.cancelCta") }),
|
|
34
|
+
/* @__PURE__ */ e(l, { variant: "primary", onClick: C, isLoading: o, children: a("editBalanceModal.updateCta") })
|
|
35
35
|
] }),
|
|
36
36
|
children: /* @__PURE__ */ c(D, { flexDirection: "column", gap: 16, children: [
|
|
37
|
-
/* @__PURE__ */
|
|
38
|
-
n && /* @__PURE__ */
|
|
39
|
-
/* @__PURE__ */
|
|
37
|
+
/* @__PURE__ */ e(u, { as: "h3", styledAs: "h3", children: a("editBalanceModal.title", { name: d }) }),
|
|
38
|
+
n && /* @__PURE__ */ e(y, { status: "error", label: n.message }),
|
|
39
|
+
/* @__PURE__ */ e(
|
|
40
40
|
h,
|
|
41
41
|
{
|
|
42
42
|
name: "balance",
|
|
43
|
-
label:
|
|
43
|
+
label: a("editBalanceModal.balanceLabel"),
|
|
44
|
+
isRequired: !0,
|
|
44
45
|
value: m,
|
|
45
46
|
onChange: r,
|
|
46
47
|
minimumFractionDigits: 1,
|
|
@@ -53,6 +54,6 @@ function H({
|
|
|
53
54
|
);
|
|
54
55
|
}
|
|
55
56
|
export {
|
|
56
|
-
|
|
57
|
+
q as EditEmployeeBalanceModal
|
|
57
58
|
};
|
|
58
59
|
//# sourceMappingURL=EditEmployeeBalanceModal.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EditEmployeeBalanceModal.js","sources":["../../../../src/components/TimeOff/TimeOffPolicyDetail/EditEmployeeBalanceModal.tsx"],"sourcesContent":["import { useEffect, useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport type { SDKError } from '@/types/sdkError'\nimport { ActionsLayout, Flex } from '@/components/Common'\nimport { useComponentContext } from '@/contexts/ComponentAdapter/useComponentContext'\nimport { useI18n } from '@/i18n'\n\nexport interface EditEmployeeBalanceModalProps {\n isOpen: boolean\n onClose: () => void\n employeeName: string\n currentBalance: number\n onConfirm: (newBalance: number) => void\n isPending: boolean\n error?: SDKError | null\n}\n\nexport function EditEmployeeBalanceModal({\n isOpen,\n onClose,\n employeeName,\n currentBalance,\n onConfirm,\n isPending,\n error,\n}: EditEmployeeBalanceModalProps) {\n useI18n('Company.TimeOff.TimeOffPolicyDetails')\n const { t } = useTranslation('Company.TimeOff.TimeOffPolicyDetails')\n const { Modal, Heading, NumberInput, Button, Alert } = useComponentContext()\n\n const [balance, setBalance] = useState(currentBalance)\n\n useEffect(() => {\n setBalance(currentBalance)\n }, [currentBalance])\n\n const handleConfirm = () => {\n onConfirm(balance)\n }\n\n return (\n <Modal\n isOpen={isOpen}\n onClose={onClose}\n footer={\n <ActionsLayout>\n <Button variant=\"secondary\" onClick={onClose} isDisabled={isPending}>\n {t('editBalanceModal.cancelCta')}\n </Button>\n <Button variant=\"primary\" onClick={handleConfirm} isLoading={isPending}>\n {t('editBalanceModal.updateCta')}\n </Button>\n </ActionsLayout>\n }\n >\n <Flex flexDirection=\"column\" gap={16}>\n <Heading as=\"h3\" styledAs=\"h3\">\n {t('editBalanceModal.title', { name: employeeName })}\n </Heading>\n {error && <Alert status=\"error\" label={error.message} />}\n <NumberInput\n name=\"balance\"\n label={t('editBalanceModal.balanceLabel')}\n value={balance}\n onChange={setBalance}\n minimumFractionDigits={1}\n maximumFractionDigits={2}\n min={0}\n />\n </Flex>\n </Modal>\n )\n}\n"],"names":["EditEmployeeBalanceModal","isOpen","onClose","employeeName","currentBalance","onConfirm","isPending","error","useI18n","t","useTranslation","Modal","Heading","NumberInput","Button","Alert","useComponentContext","balance","setBalance","useState","useEffect","handleConfirm","jsx","ActionsLayout","jsxs","Flex"],"mappings":";;;;;;;;;AAiBO,SAASA,EAAyB;AAAA,EACvC,QAAAC;AAAA,EACA,SAAAC;AAAA,EACA,cAAAC;AAAA,EACA,gBAAAC;AAAA,EACA,WAAAC;AAAA,EACA,WAAAC;AAAA,EACA,OAAAC;AACF,GAAkC;AAChC,EAAAC,EAAQ,sCAAsC;AAC9C,QAAM,EAAE,GAAAC,EAAA,IAAMC,EAAe,sCAAsC,GAC7D,EAAE,OAAAC,GAAO,SAAAC,GAAS,aAAAC,GAAa,QAAAC,GAAQ,OAAAC,EAAA,IAAUC,EAAA,GAEjD,CAACC,GAASC,CAAU,IAAIC,EAASf,CAAc;AAErD,EAAAgB,EAAU,MAAM;AACd,IAAAF,EAAWd,CAAc;AAAA,EAC3B,GAAG,CAACA,CAAc,CAAC;AAEnB,QAAMiB,IAAgB,MAAM;AAC1B,IAAAhB,EAAUY,CAAO;AAAA,EACnB;AAEA,SACE,gBAAAK;AAAA,IAACX;AAAA,IAAA;AAAA,MACC,QAAAV;AAAA,MACA,SAAAC;AAAA,MACA,0BACGqB,GAAA,EACC,UAAA;AAAA,QAAA,gBAAAD,EAACR,GAAA,EAAO,SAAQ,aAAY,SAASZ,GAAS,YAAYI,GACvD,UAAAG,EAAE,4BAA4B,EAAA,CACjC;AAAA,QACA,gBAAAa,EAACR,GAAA,EAAO,SAAQ,WAAU,SAASO,GAAe,WAAWf,GAC1D,UAAAG,EAAE,4BAA4B,EAAA,CACjC;AAAA,MAAA,GACF;AAAA,MAGF,UAAA,gBAAAe,EAACC,GAAA,EAAK,eAAc,UAAS,KAAK,IAChC,UAAA;AAAA,QAAA,gBAAAH,EAACV,GAAA,EAAQ,IAAG,MAAK,UAAS,MACvB,UAAAH,EAAE,0BAA0B,EAAE,MAAMN,EAAA,CAAc,EAAA,CACrD;AAAA,QACCI,KAAS,gBAAAe,EAACP,GAAA,EAAM,QAAO,SAAQ,OAAOR,EAAM,SAAS;AAAA,QACtD,gBAAAe;AAAA,UAACT;AAAA,UAAA;AAAA,YACC,MAAK;AAAA,YACL,OAAOJ,EAAE,+BAA+B;AAAA,YACxC,OAAOQ;AAAA,YACP,UAAUC;AAAA,YACV,uBAAuB;AAAA,YACvB,uBAAuB;AAAA,YACvB,KAAK;AAAA,UAAA;AAAA,QAAA;AAAA,MACP,EAAA,CACF;AAAA,IAAA;AAAA,EAAA;AAGN;"}
|
|
1
|
+
{"version":3,"file":"EditEmployeeBalanceModal.js","sources":["../../../../src/components/TimeOff/TimeOffPolicyDetail/EditEmployeeBalanceModal.tsx"],"sourcesContent":["import { useEffect, useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport type { SDKError } from '@/types/sdkError'\nimport { ActionsLayout, Flex } from '@/components/Common'\nimport { useComponentContext } from '@/contexts/ComponentAdapter/useComponentContext'\nimport { useI18n } from '@/i18n'\n\nexport interface EditEmployeeBalanceModalProps {\n isOpen: boolean\n onClose: () => void\n employeeName: string\n currentBalance: number\n onConfirm: (newBalance: number) => void\n isPending: boolean\n error?: SDKError | null\n}\n\nexport function EditEmployeeBalanceModal({\n isOpen,\n onClose,\n employeeName,\n currentBalance,\n onConfirm,\n isPending,\n error,\n}: EditEmployeeBalanceModalProps) {\n useI18n('Company.TimeOff.TimeOffPolicyDetails')\n const { t } = useTranslation('Company.TimeOff.TimeOffPolicyDetails')\n const { Modal, Heading, NumberInput, Button, Alert } = useComponentContext()\n\n const [balance, setBalance] = useState(currentBalance)\n\n useEffect(() => {\n setBalance(currentBalance)\n }, [currentBalance])\n\n const handleConfirm = () => {\n onConfirm(balance)\n }\n\n return (\n <Modal\n isOpen={isOpen}\n onClose={onClose}\n footer={\n <ActionsLayout>\n <Button variant=\"secondary\" onClick={onClose} isDisabled={isPending}>\n {t('editBalanceModal.cancelCta')}\n </Button>\n <Button variant=\"primary\" onClick={handleConfirm} isLoading={isPending}>\n {t('editBalanceModal.updateCta')}\n </Button>\n </ActionsLayout>\n }\n >\n <Flex flexDirection=\"column\" gap={16}>\n <Heading as=\"h3\" styledAs=\"h3\">\n {t('editBalanceModal.title', { name: employeeName })}\n </Heading>\n {error && <Alert status=\"error\" label={error.message} />}\n <NumberInput\n name=\"balance\"\n label={t('editBalanceModal.balanceLabel')}\n isRequired\n value={balance}\n onChange={setBalance}\n minimumFractionDigits={1}\n maximumFractionDigits={2}\n min={0}\n />\n </Flex>\n </Modal>\n )\n}\n"],"names":["EditEmployeeBalanceModal","isOpen","onClose","employeeName","currentBalance","onConfirm","isPending","error","useI18n","t","useTranslation","Modal","Heading","NumberInput","Button","Alert","useComponentContext","balance","setBalance","useState","useEffect","handleConfirm","jsx","ActionsLayout","jsxs","Flex"],"mappings":";;;;;;;;;AAiBO,SAASA,EAAyB;AAAA,EACvC,QAAAC;AAAA,EACA,SAAAC;AAAA,EACA,cAAAC;AAAA,EACA,gBAAAC;AAAA,EACA,WAAAC;AAAA,EACA,WAAAC;AAAA,EACA,OAAAC;AACF,GAAkC;AAChC,EAAAC,EAAQ,sCAAsC;AAC9C,QAAM,EAAE,GAAAC,EAAA,IAAMC,EAAe,sCAAsC,GAC7D,EAAE,OAAAC,GAAO,SAAAC,GAAS,aAAAC,GAAa,QAAAC,GAAQ,OAAAC,EAAA,IAAUC,EAAA,GAEjD,CAACC,GAASC,CAAU,IAAIC,EAASf,CAAc;AAErD,EAAAgB,EAAU,MAAM;AACd,IAAAF,EAAWd,CAAc;AAAA,EAC3B,GAAG,CAACA,CAAc,CAAC;AAEnB,QAAMiB,IAAgB,MAAM;AAC1B,IAAAhB,EAAUY,CAAO;AAAA,EACnB;AAEA,SACE,gBAAAK;AAAA,IAACX;AAAA,IAAA;AAAA,MACC,QAAAV;AAAA,MACA,SAAAC;AAAA,MACA,0BACGqB,GAAA,EACC,UAAA;AAAA,QAAA,gBAAAD,EAACR,GAAA,EAAO,SAAQ,aAAY,SAASZ,GAAS,YAAYI,GACvD,UAAAG,EAAE,4BAA4B,EAAA,CACjC;AAAA,QACA,gBAAAa,EAACR,GAAA,EAAO,SAAQ,WAAU,SAASO,GAAe,WAAWf,GAC1D,UAAAG,EAAE,4BAA4B,EAAA,CACjC;AAAA,MAAA,GACF;AAAA,MAGF,UAAA,gBAAAe,EAACC,GAAA,EAAK,eAAc,UAAS,KAAK,IAChC,UAAA;AAAA,QAAA,gBAAAH,EAACV,GAAA,EAAQ,IAAG,MAAK,UAAS,MACvB,UAAAH,EAAE,0BAA0B,EAAE,MAAMN,EAAA,CAAc,EAAA,CACrD;AAAA,QACCI,KAAS,gBAAAe,EAACP,GAAA,EAAM,QAAO,SAAQ,OAAOR,EAAM,SAAS;AAAA,QACtD,gBAAAe;AAAA,UAACT;AAAA,UAAA;AAAA,YACC,MAAK;AAAA,YACL,OAAOJ,EAAE,+BAA+B;AAAA,YACxC,YAAU;AAAA,YACV,OAAOQ;AAAA,YACP,UAAUC;AAAA,YACV,uBAAuB;AAAA,YACvB,uBAAuB;AAAA,YACvB,KAAK;AAAA,UAAA;AAAA,QAAA;AAAA,MACP,EAAA,CACF;AAAA,IAAA;AAAA,EAAA;AAGN;"}
|