@gusto/embedded-react-sdk 0.55.8 → 0.56.0
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 +40 -0
- package/dist/components/Common/UI/Menu/MenuTypes.js.map +1 -1
- package/dist/components/Common/UI/MultiSelectComboBox/MultiSelectComboBox.js +43 -42
- package/dist/components/Common/UI/MultiSelectComboBox/MultiSelectComboBox.js.map +1 -1
- package/dist/components/Company/AssignSignatory/CreateSignatory/useCreateSignatory.js +4 -3
- package/dist/components/Company/AssignSignatory/CreateSignatory/useCreateSignatory.js.map +1 -1
- package/dist/components/Company/AssignSignatory/InviteSignatory/useInviteSignatory.js +4 -3
- package/dist/components/Company/AssignSignatory/InviteSignatory/useInviteSignatory.js.map +1 -1
- package/dist/components/Company/AssignSignatory/useAssignSignatory.js +6 -5
- package/dist/components/Company/AssignSignatory/useAssignSignatory.js.map +1 -1
- package/dist/components/Company/BankAccount/BankAccountForm/context.js +4 -3
- package/dist/components/Company/BankAccount/BankAccountForm/context.js.map +1 -1
- package/dist/components/Company/DocumentSigner/DocumentList/useDocumentList.js +4 -3
- package/dist/components/Company/DocumentSigner/DocumentList/useDocumentList.js.map +1 -1
- package/dist/components/Company/FederalTaxes/useFederalTaxes.js +6 -5
- package/dist/components/Company/FederalTaxes/useFederalTaxes.js.map +1 -1
- package/dist/components/Company/Industry/Context.js +7 -6
- package/dist/components/Company/Industry/Context.js.map +1 -1
- package/dist/components/Company/Locations/LocationForm/useLocationForm.js +4 -3
- package/dist/components/Company/Locations/LocationForm/useLocationForm.js.map +1 -1
- package/dist/components/Company/Locations/LocationsList/useLocationsList.js +4 -3
- package/dist/components/Company/Locations/LocationsList/useLocationsList.js.map +1 -1
- package/dist/components/Company/OnboardingOverview/context.js +4 -3
- package/dist/components/Company/OnboardingOverview/context.js.map +1 -1
- package/dist/components/Company/StateTaxes/StateTaxesForm/context.js +4 -3
- package/dist/components/Company/StateTaxes/StateTaxesForm/context.js.map +1 -1
- package/dist/components/Company/StateTaxes/StateTaxesList/context.js +4 -3
- package/dist/components/Company/StateTaxes/StateTaxesList/context.js.map +1 -1
- package/dist/components/Company/StateTaxes/TaxRateManagement/context.js +4 -3
- package/dist/components/Company/StateTaxes/TaxRateManagement/context.js.map +1 -1
- package/dist/components/Employee/Documents/onboarding/DocumentSigner/DocumentList/useDocumentList.js +4 -3
- package/dist/components/Employee/Documents/onboarding/DocumentSigner/DocumentList/useDocumentList.js.map +1 -1
- package/dist/components/Employee/EmployeeList/management/ManagementEmployeeListView.js +70 -69
- package/dist/components/Employee/EmployeeList/management/ManagementEmployeeListView.js.map +1 -1
- package/dist/components/Employee/EmployeeList/onboarding/EmployeeListView.js +2 -2
- package/dist/components/Employee/EmployeeList/onboarding/EmployeeListView.js.map +1 -1
- package/dist/components/Employee/EmployeeList/shared/useEmployeeList.js +51 -42
- package/dist/components/Employee/EmployeeList/shared/useEmployeeList.js.map +1 -1
- package/dist/components/Employee/EmployeeListFlow/employeeListStateMachine.js +29 -26
- package/dist/components/Employee/EmployeeListFlow/employeeListStateMachine.js.map +1 -1
- package/dist/components/Employee/HomeAddress/management/HomeAddressView.js +2 -2
- package/dist/components/Employee/HomeAddress/management/HomeAddressView.js.map +1 -1
- package/dist/components/Employee/Terminations/TerminateEmployee/TerminateEmployeePresentation.js +11 -11
- package/dist/components/Employee/Terminations/TerminateEmployee/TerminateEmployeePresentation.js.map +1 -1
- package/dist/components/Employee/Terminations/TerminationSummary/TerminationSummaryPresentation.js +3 -3
- package/dist/components/Employee/Terminations/TerminationSummary/TerminationSummaryPresentation.js.map +1 -1
- package/dist/components/Employee/WorkAddress/management/WorkAddressView.js +76 -79
- package/dist/components/Employee/WorkAddress/management/WorkAddressView.js.map +1 -1
- package/dist/components/InformationRequests/InformationRequestList/InformationRequestList.js +2 -2
- package/dist/components/InformationRequests/InformationRequestList/InformationRequestList.js.map +1 -1
- package/dist/components/Payroll/ConfirmWireDetails/ConfirmWireDetailsBanner/ConfirmWireDetailsBanner.js +2 -2
- package/dist/components/Payroll/ConfirmWireDetails/ConfirmWireDetailsBanner/ConfirmWireDetailsBanner.js.map +1 -1
- package/dist/components/Payroll/Dismissal/DismissalPayPeriodSelection/DismissalPayPeriodSelectionPresentation.js +10 -10
- package/dist/components/Payroll/Dismissal/DismissalPayPeriodSelection/DismissalPayPeriodSelectionPresentation.js.map +1 -1
- package/dist/components/Payroll/GrossUpModal/GrossUpModal.js +49 -45
- package/dist/components/Payroll/GrossUpModal/GrossUpModal.js.map +1 -1
- package/dist/components/Payroll/OffCycleCreation/OffCycleCreation.js +83 -76
- package/dist/components/Payroll/OffCycleCreation/OffCycleCreation.js.map +1 -1
- package/dist/components/Payroll/OffCycleCreation/OffCycleCreationPresentation.js +63 -60
- package/dist/components/Payroll/OffCycleCreation/OffCycleCreationPresentation.js.map +1 -1
- package/dist/components/Payroll/PayrollConfiguration/PayrollConfiguration.js +184 -165
- package/dist/components/Payroll/PayrollConfiguration/PayrollConfiguration.js.map +1 -1
- package/dist/components/Payroll/PayrollConfiguration/useCalculationPoll.js +48 -34
- package/dist/components/Payroll/PayrollConfiguration/useCalculationPoll.js.map +1 -1
- package/dist/components/Payroll/PayrollOverview/PayrollOverview.js +185 -171
- package/dist/components/Payroll/PayrollOverview/PayrollOverview.js.map +1 -1
- package/dist/components/Payroll/PayrollOverview/useSubmissionPoll.js +45 -34
- package/dist/components/Payroll/PayrollOverview/useSubmissionPoll.js.map +1 -1
- package/dist/components/Payroll/PayrollReceipts/PayrollReceiptsPresentation.js +44 -44
- package/dist/components/Payroll/PayrollReceipts/PayrollReceiptsPresentation.js.map +1 -1
- package/dist/components/Payroll/PayrollReceipts/PayrollReceiptsPresentation.module.scss.js +14 -14
- package/dist/components/Payroll/PrintChecks/PrintChecksFailure/PrintChecksFailure.js +16 -16
- package/dist/components/Payroll/PrintChecks/PrintChecksFailure/PrintChecksFailure.js.map +1 -1
- package/dist/components/Payroll/PrintChecks/PrintChecksForm/useGenerationPoll.js +52 -37
- package/dist/components/Payroll/PrintChecks/PrintChecksForm/useGenerationPoll.js.map +1 -1
- package/dist/components/Payroll/usePreparedPayrollData.js +9 -8
- package/dist/components/Payroll/usePreparedPayrollData.js.map +1 -1
- package/dist/contexts/ApiProvider/ApiProvider.js +29 -28
- package/dist/contexts/ApiProvider/ApiProvider.js.map +1 -1
- package/dist/contexts/ApiProvider/apiVersionMismatchHook.js +15 -0
- package/dist/contexts/ApiProvider/apiVersionMismatchHook.js.map +1 -0
- package/dist/contexts/GustoProvider/GustoProviderCustomUIAdapter.js.map +1 -1
- package/dist/contexts/ThemeProvider/ThemeProvider.js +32 -26
- package/dist/contexts/ThemeProvider/ThemeProvider.js.map +1 -1
- package/dist/hooks/usePollingTask/usePollingTask.js +53 -41
- package/dist/hooks/usePollingTask/usePollingTask.js.map +1 -1
- package/dist/i18n/en/Employee.ManagementEmployeeList.json.js +28 -24
- package/dist/i18n/en/Employee.ManagementEmployeeList.json.js.map +1 -1
- package/dist/i18n/en/Payroll.GrossUpModal.json.js +12 -10
- package/dist/i18n/en/Payroll.GrossUpModal.json.js.map +1 -1
- package/dist/i18n/en/Payroll.PayrollConfiguration.json.js +8 -8
- package/dist/i18n/en/Payroll.PayrollOverview.json.js +15 -15
- package/dist/package.json.js +1 -1
- package/dist/src/components/Common/UI/ComboBox/ComboBoxTypes.d.ts +1 -1
- package/dist/src/components/Common/UI/DatePicker/DatePickerTypes.d.ts +2 -1
- package/dist/src/components/Common/UI/Menu/MenuTypes.d.ts +1 -1
- package/dist/src/components/Common/UI/MultiSelectComboBox/MultiSelectComboBox.d.ts +1 -1
- package/dist/src/components/Common/UI/MultiSelectComboBox/MultiSelectComboBoxTypes.d.ts +5 -0
- package/dist/src/components/Common/UI/Select/SelectTypes.d.ts +2 -1
- package/dist/src/components/Employee/EmployeeList/shared/useEmployeeList.d.ts +7 -2
- package/dist/src/components/Employee/EmployeeListFlow/employeeListStateMachine.test.d.ts +1 -0
- package/dist/src/components/Payroll/OffCycleCreation/OffCycleCreationPresentation.d.ts +1 -1
- package/dist/src/components/Payroll/OffCycleCreation/OffCycleCreationTypes.d.ts +6 -0
- package/dist/src/components/Payroll/PayrollConfiguration/useCalculationPoll.d.ts +6 -1
- package/dist/src/components/Payroll/PayrollOverview/useSubmissionPoll.d.ts +10 -1
- package/dist/src/contexts/ApiProvider/ApiProvider.d.ts +5 -3
- package/dist/src/contexts/ApiProvider/apiVersionMismatchHook.d.ts +3 -0
- package/dist/src/contexts/ApiProvider/apiVersionMismatchHook.test.d.ts +1 -0
- package/dist/src/contexts/GustoProvider/GustoProviderCustomUIAdapter.d.ts +9 -1
- package/dist/src/contexts/ThemeProvider/ThemeProvider.d.ts +8 -3
- package/dist/src/hooks/usePollingTask/usePollingTask.d.ts +55 -14
- package/dist/src/i18n/types.d.ts +14 -0
- package/dist/style.css +1 -1
- package/docs/guides/endpoint-inventory.json +5 -0
- package/package.json +6 -6
|
@@ -1,27 +1,35 @@
|
|
|
1
|
-
import { useMemo as
|
|
1
|
+
import { useMemo as p } from "react";
|
|
2
2
|
import { useEmployeesList as L } from "@gusto/embedded-api/react-query/employeesList";
|
|
3
3
|
import { useEmployeesDeleteMutation as M } from "@gusto/embedded-api/react-query/employeesDelete";
|
|
4
|
-
import { useEmployeesUpdateOnboardingStatusMutation as
|
|
5
|
-
import { keepPreviousData as
|
|
6
|
-
import { usePagination as
|
|
7
|
-
import { useBaseSubmit as
|
|
8
|
-
import { composeErrorHandler as
|
|
9
|
-
import { EmployeeOnboardingStatus as
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
return
|
|
4
|
+
import { useEmployeesUpdateOnboardingStatusMutation as v } from "@gusto/embedded-api/react-query/employeesUpdateOnboardingStatus";
|
|
5
|
+
import { keepPreviousData as w } from "@tanstack/react-query";
|
|
6
|
+
import { usePagination as y } from "../../../../hooks/usePagination/usePagination.js";
|
|
7
|
+
import { useBaseSubmit as B } from "../../../Base/useBaseSubmit.js";
|
|
8
|
+
import { composeErrorHandler as G } from "../../../../partner-hook-utils/composeErrorHandler.js";
|
|
9
|
+
import { EmployeeOnboardingStatus as o, EmployeeSelfOnboardingStatuses as R } from "../../../../shared/constants.js";
|
|
10
|
+
import { normalizeToDate as C } from "../../../../helpers/dateFormatting.js";
|
|
11
|
+
function q(e) {
|
|
12
|
+
return e.terminations?.find((r) => {
|
|
13
|
+
if (!r.effectiveDate || r.active === !0) return !1;
|
|
14
|
+
const n = C(r.effectiveDate);
|
|
15
|
+
return n !== null && n.getTime() > Date.now();
|
|
16
|
+
})?.effectiveDate;
|
|
13
17
|
}
|
|
14
|
-
function
|
|
18
|
+
function F(e, a, r) {
|
|
19
|
+
const n = [];
|
|
20
|
+
return a !== "terminated" && (e.onboardingStatus === o.ADMIN_ONBOARDING_INCOMPLETE || e.onboardingStatus === o.SELF_ONBOARDING_PENDING_INVITE || e.onboardingStatus === o.SELF_ONBOARDING_AWAITING_ADMIN_REVIEW || e.onboardingStatus === o.ONBOARDING_COMPLETED) && n.push("edit"), e.onboardingStatus && R.has(e.onboardingStatus) && n.push("cancel_self_onboarding"), e.onboardingStatus === o.SELF_ONBOARDING_COMPLETED_BY_EMPLOYEE && n.push("review"), e.onboarded || n.push("delete"), a === "active" && !r && n.push("dismiss"), a === "terminated" && n.push("rehire"), n;
|
|
21
|
+
}
|
|
22
|
+
function U({
|
|
15
23
|
companyId: e,
|
|
16
|
-
employeeType:
|
|
24
|
+
employeeType: a
|
|
17
25
|
}) {
|
|
18
|
-
const { currentPage:
|
|
26
|
+
const { currentPage: r, itemsPerPage: n, getPaginationProps: b } = y(), P = p(() => {
|
|
19
27
|
const t = {
|
|
20
28
|
companyId: e,
|
|
21
|
-
page:
|
|
22
|
-
per:
|
|
29
|
+
page: r,
|
|
30
|
+
per: n
|
|
23
31
|
};
|
|
24
|
-
switch (
|
|
32
|
+
switch (a) {
|
|
25
33
|
case "active":
|
|
26
34
|
return { ...t, onboardedActive: !0 };
|
|
27
35
|
case "onboarding":
|
|
@@ -31,18 +39,19 @@ function J({
|
|
|
31
39
|
default:
|
|
32
40
|
return t;
|
|
33
41
|
}
|
|
34
|
-
}, [e,
|
|
35
|
-
baseSubmitHandler:
|
|
36
|
-
error:
|
|
37
|
-
setError:
|
|
38
|
-
} =
|
|
39
|
-
const
|
|
42
|
+
}, [e, r, n, a]), l = L(P, { placeholderData: w }), f = M(), d = v(), {
|
|
43
|
+
baseSubmitHandler: c,
|
|
44
|
+
error: D,
|
|
45
|
+
setError: N
|
|
46
|
+
} = B("EmployeeList"), E = G([l], { submitError: D, setSubmitError: N }), O = f.isPending || d.isPending, { data: u, isFetching: g } = l, S = p(() => (u?.showEmployees ?? []).map((t) => {
|
|
47
|
+
const s = t.jobs?.find((m) => m.primary === !0), i = q(t);
|
|
40
48
|
return {
|
|
41
49
|
...t,
|
|
42
|
-
allowedActions:
|
|
43
|
-
primaryJob:
|
|
50
|
+
allowedActions: F(t, a, i),
|
|
51
|
+
primaryJob: s,
|
|
52
|
+
pendingDismissalDate: i
|
|
44
53
|
};
|
|
45
|
-
}), [
|
|
54
|
+
}), [u?.showEmployees, a]), I = u?.httpMeta.response.headers ? b(u.httpMeta.response.headers, g) : {
|
|
46
55
|
handleNextPage: () => {
|
|
47
56
|
},
|
|
48
57
|
handleFirstPage: () => {
|
|
@@ -58,51 +67,51 @@ function J({
|
|
|
58
67
|
totalCount: 0,
|
|
59
68
|
itemsPerPage: 5
|
|
60
69
|
}, h = async (t) => {
|
|
61
|
-
await
|
|
62
|
-
await
|
|
63
|
-
request: { employeeId:
|
|
70
|
+
await c(t, async (s) => {
|
|
71
|
+
await f.mutateAsync({
|
|
72
|
+
request: { employeeId: s }
|
|
64
73
|
});
|
|
65
74
|
});
|
|
66
75
|
}, A = async (t) => {
|
|
67
|
-
let
|
|
68
|
-
return await
|
|
69
|
-
|
|
76
|
+
let s;
|
|
77
|
+
return await c(t, async (i) => {
|
|
78
|
+
s = (await d.mutateAsync({
|
|
70
79
|
request: {
|
|
71
80
|
employeeId: i,
|
|
72
81
|
requestBody: {
|
|
73
|
-
onboardingStatus:
|
|
82
|
+
onboardingStatus: o.SELF_ONBOARDING_AWAITING_ADMIN_REVIEW
|
|
74
83
|
}
|
|
75
84
|
}
|
|
76
85
|
})).employeeOnboardingStatus;
|
|
77
|
-
}),
|
|
86
|
+
}), s;
|
|
78
87
|
}, _ = async (t) => {
|
|
79
|
-
let
|
|
80
|
-
return await
|
|
81
|
-
|
|
88
|
+
let s;
|
|
89
|
+
return await c(t, async (i) => {
|
|
90
|
+
s = (await d.mutateAsync({
|
|
82
91
|
request: {
|
|
83
92
|
employeeId: i,
|
|
84
93
|
requestBody: {
|
|
85
|
-
onboardingStatus:
|
|
94
|
+
onboardingStatus: o.ADMIN_ONBOARDING_INCOMPLETE
|
|
86
95
|
}
|
|
87
96
|
}
|
|
88
97
|
})).employeeOnboardingStatus;
|
|
89
|
-
}),
|
|
98
|
+
}), s;
|
|
90
99
|
};
|
|
91
|
-
return !
|
|
100
|
+
return !u && g ? {
|
|
92
101
|
isLoading: !0,
|
|
93
102
|
errorHandling: E
|
|
94
103
|
} : {
|
|
95
104
|
isLoading: !1,
|
|
96
105
|
data: {
|
|
97
|
-
employees:
|
|
106
|
+
employees: S
|
|
98
107
|
},
|
|
99
108
|
pagination: I,
|
|
100
|
-
status: { isFetching:
|
|
109
|
+
status: { isFetching: g, isPending: O },
|
|
101
110
|
actions: { onDelete: h, onReview: A, onCancelSelfOnboarding: _ },
|
|
102
111
|
errorHandling: E
|
|
103
112
|
};
|
|
104
113
|
}
|
|
105
114
|
export {
|
|
106
|
-
|
|
115
|
+
U as useEmployeeList
|
|
107
116
|
};
|
|
108
117
|
//# sourceMappingURL=useEmployeeList.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useEmployeeList.js","sources":["../../../../../src/components/Employee/EmployeeList/shared/useEmployeeList.tsx"],"sourcesContent":["import { useMemo } from 'react'\nimport { useEmployeesList } from '@gusto/embedded-api/react-query/employeesList'\nimport type { Employee } from '@gusto/embedded-api/models/components/employee'\nimport type { Job } from '@gusto/embedded-api/models/components/job'\nimport type { EmployeeOnboardingStatus as EmployeeOnboardingStatusEntity } from '@gusto/embedded-api/models/components/employeeonboardingstatus'\nimport { useEmployeesDeleteMutation } from '@gusto/embedded-api/react-query/employeesDelete'\nimport { useEmployeesUpdateOnboardingStatusMutation } from '@gusto/embedded-api/react-query/employeesUpdateOnboardingStatus'\nimport { keepPreviousData } from '@tanstack/react-query'\nimport { usePagination } from '@/hooks/usePagination/usePagination'\nimport type { PaginationControlProps } from '@/components/Common/PaginationControl/PaginationControlTypes'\nimport { useBaseSubmit } from '@/components/Base/useBaseSubmit'\nimport { composeErrorHandler } from '@/partner-hook-utils/composeErrorHandler'\nimport { EmployeeOnboardingStatus, EmployeeSelfOnboardingStatuses } from '@/shared/constants'\nimport type { HookLoadingResult, BaseHookReady } from '@/partner-hook-utils/types'\n\n/**\n * Action that may be performed on an employee row, determined by the employee's onboarding state\n * and the `employeeType` filter passed to {@link useEmployeeList}.\n *\n * @public\n */\nexport type EmployeeAction =\n 'edit' | 'delete' | 'cancel_self_onboarding' | 'review' | 'dismiss' | 'rehire'\n\n/**\n * An employee entity extended with the actions permitted on it and a reference to its primary job.\n *\n * @public\n */\nexport interface EmployeeWithActions extends Employee {\n /** Actions permitted for this employee given its onboarding status and the active filter. */\n allowedActions: EmployeeAction[]\n /** The employee's primary job, if one is marked primary. */\n primaryJob?: Job\n}\n\n/**\n * Filter applied to {@link useEmployeeList} that scopes the result set and tailors the per-row action list.\n *\n * @public\n */\nexport type EmployeeType = 'active' | 'onboarding' | 'terminated'\n\n/**\n * Props for {@link useEmployeeList}.\n *\n * @public\n */\nexport interface UseEmployeeListProps {\n /** The associated company identifier. */\n companyId: string\n /** Filters the list and tailors the allowed actions. Omit to list all employees. */\n employeeType?: EmployeeType\n}\n\n/**\n * Ready state of {@link useEmployeeList}.\n *\n * @public\n */\nexport interface UseEmployeeListReady extends BaseHookReady<\n { employees: EmployeeWithActions[] },\n { isFetching: boolean; isPending: boolean }\n> {\n /** Pagination controls for the current employee list page. */\n pagination: PaginationControlProps\n /** Actions that mutate an employee's state, gated by the entry's `allowedActions`. */\n actions: {\n /** Deletes the employee. */\n onDelete: (employeeId: string) => Promise<void>\n /** Moves the employee into the admin-review onboarding status. Resolves to the updated record, or `undefined` if the call failed. */\n onReview: (employeeId: string) => Promise<EmployeeOnboardingStatusEntity | undefined>\n /** Reverts a self-onboarding employee to admin-driven onboarding. Resolves to the updated record, or `undefined` if the call failed. */\n onCancelSelfOnboarding: (\n employeeId: string,\n ) => Promise<EmployeeOnboardingStatusEntity | undefined>\n }\n}\n\n/**\n * Return type of {@link useEmployeeList}.\n *\n * @public\n */\nexport type UseEmployeeListResult = HookLoadingResult | UseEmployeeListReady\n\nfunction deriveAllowedActions(employee: Employee, employeeType?: EmployeeType): EmployeeAction[] {\n const actions: EmployeeAction[] = []\n\n // Edit action - available for certain onboarding statuses, but not for terminated employees\n if (\n employeeType !== 'terminated' &&\n (employee.onboardingStatus === EmployeeOnboardingStatus.ADMIN_ONBOARDING_INCOMPLETE ||\n employee.onboardingStatus === EmployeeOnboardingStatus.SELF_ONBOARDING_PENDING_INVITE ||\n employee.onboardingStatus ===\n EmployeeOnboardingStatus.SELF_ONBOARDING_AWAITING_ADMIN_REVIEW ||\n employee.onboardingStatus === EmployeeOnboardingStatus.ONBOARDING_COMPLETED)\n ) {\n actions.push('edit')\n }\n\n // Cancel self onboarding - available for employees in self-onboarding flow\n if (employee.onboardingStatus && EmployeeSelfOnboardingStatuses.has(employee.onboardingStatus)) {\n actions.push('cancel_self_onboarding')\n }\n\n // Review action - available when employee completed self-onboarding\n if (\n employee.onboardingStatus === EmployeeOnboardingStatus.SELF_ONBOARDING_COMPLETED_BY_EMPLOYEE\n ) {\n actions.push('review')\n }\n\n // Delete action - available for non-onboarded employees\n if (!employee.onboarded) {\n actions.push('delete')\n }\n\n // Tab-specific actions for ManagementEmployeeList\n if (employeeType === 'active') {\n actions.push('dismiss')\n }\n\n if (employeeType === 'terminated') {\n actions.push('rehire')\n }\n\n return actions\n}\n\n/**\n * Fetches a paginated list of a company's employees and decorates each entry with the actions\n * allowed for its current onboarding state.\n *\n * @remarks\n * `employeeType` maps to a server-side filter and changes which actions appear on each row:\n * `'active'` adds `dismiss`, `'terminated'` adds `rehire`, `'onboarding'` adds none. Omit it\n * to list every employee.\n *\n * `'onboarding'` includes employees who haven't completed onboarding as well as employees who\n * have completed onboarding but whose primary job's hire date hasn't arrived yet, so `onboarded`\n * may be `true` for rows in this filter.\n *\n * Page changes use placeholder data: the previous page stays rendered while the next one loads,\n * and `status.isFetching` flips to `true` during the request.\n *\n * @param input - Company and optional filter for the list.\n * @returns A {@link HookLoadingResult} while the first page is in flight, or a {@link UseEmployeeListReady} once data has arrived.\n * @public\n *\n * @example\n * ```tsx\n * import { useEmployeeList } from '@gusto/embedded-react-sdk'\n *\n * function EmployeeListPage({ companyId }: { companyId: string }) {\n * const employeeList = useEmployeeList({ companyId, employeeType: 'onboarding' })\n *\n * if (employeeList.isLoading) return <div>Loading...</div>\n *\n * return (\n * <ul>\n * {employeeList.data.employees.map(employee => (\n * <li key={employee.uuid}>\n * {employee.firstName} {employee.lastName}\n * {employee.allowedActions.includes('delete') && (\n * <button onClick={() => employeeList.actions.onDelete(employee.uuid)}>Delete</button>\n * )}\n * </li>\n * ))}\n * </ul>\n * )\n * }\n * ```\n */\nexport function useEmployeeList({\n companyId,\n employeeType,\n}: UseEmployeeListProps): UseEmployeeListResult {\n const { currentPage, itemsPerPage, getPaginationProps } = usePagination()\n\n const queryParams = useMemo(() => {\n const baseParams = {\n companyId,\n page: currentPage,\n per: itemsPerPage,\n }\n\n switch (employeeType) {\n case 'active':\n return { ...baseParams, onboardedActive: true }\n case 'onboarding':\n return { ...baseParams, onboardedActive: false }\n case 'terminated':\n return { ...baseParams, terminated: true }\n default:\n return baseParams\n }\n }, [companyId, currentPage, itemsPerPage, employeeType])\n\n const employeesQuery = useEmployeesList(queryParams, { placeholderData: keepPreviousData })\n\n const deleteEmployeeMutation = useEmployeesDeleteMutation()\n const updateOnboardingStatusMutation = useEmployeesUpdateOnboardingStatusMutation()\n\n const {\n baseSubmitHandler,\n error: submitError,\n setError: setSubmitError,\n } = useBaseSubmit('EmployeeList')\n\n const errorHandling = composeErrorHandler([employeesQuery], { submitError, setSubmitError })\n\n const isPending = deleteEmployeeMutation.isPending || updateOnboardingStatusMutation.isPending\n\n const { data, isFetching } = employeesQuery\n\n const employees = useMemo<EmployeeWithActions[]>(() => {\n return (data?.showEmployees ?? []).map(employee => {\n const primaryJob = employee.jobs?.find(job => job.primary === true)\n\n return {\n ...employee,\n allowedActions: deriveAllowedActions(employee, employeeType),\n primaryJob,\n }\n })\n }, [data?.showEmployees, employeeType])\n\n const paginationProps = data?.httpMeta.response.headers\n ? getPaginationProps(data.httpMeta.response.headers, isFetching)\n : {\n handleNextPage: () => {},\n handleFirstPage: () => {},\n handleLastPage: () => {},\n handlePreviousPage: () => {},\n handleItemsPerPageChange: () => {},\n currentPage: 1,\n totalPages: 1,\n totalCount: 0,\n itemsPerPage: 5 as const,\n }\n\n const onDelete = async (employeeId: string): Promise<void> => {\n await baseSubmitHandler(employeeId, async id => {\n await deleteEmployeeMutation.mutateAsync({\n request: { employeeId: id },\n })\n })\n }\n\n const onReview = async (\n employeeId: string,\n ): Promise<EmployeeOnboardingStatusEntity | undefined> => {\n let onboardingStatus: EmployeeOnboardingStatusEntity | undefined\n\n await baseSubmitHandler(employeeId, async id => {\n const result = await updateOnboardingStatusMutation.mutateAsync({\n request: {\n employeeId: id,\n requestBody: {\n onboardingStatus: EmployeeOnboardingStatus.SELF_ONBOARDING_AWAITING_ADMIN_REVIEW,\n },\n },\n })\n\n onboardingStatus = result.employeeOnboardingStatus\n })\n\n return onboardingStatus\n }\n\n const onCancelSelfOnboarding = async (\n employeeId: string,\n ): Promise<EmployeeOnboardingStatusEntity | undefined> => {\n let onboardingStatus: EmployeeOnboardingStatusEntity | undefined\n\n await baseSubmitHandler(employeeId, async id => {\n const result = await updateOnboardingStatusMutation.mutateAsync({\n request: {\n employeeId: id,\n requestBody: {\n onboardingStatus: EmployeeOnboardingStatus.ADMIN_ONBOARDING_INCOMPLETE,\n },\n },\n })\n\n onboardingStatus = result.employeeOnboardingStatus\n })\n\n return onboardingStatus\n }\n\n const isLoading = !data && isFetching\n\n if (isLoading) {\n return {\n isLoading: true,\n errorHandling,\n }\n }\n\n return {\n isLoading: false,\n data: {\n employees,\n },\n pagination: paginationProps,\n status: { isFetching, isPending },\n actions: { onDelete, onReview, onCancelSelfOnboarding },\n errorHandling,\n }\n}\n"],"names":["deriveAllowedActions","employee","employeeType","actions","EmployeeOnboardingStatus","EmployeeSelfOnboardingStatuses","useEmployeeList","companyId","currentPage","itemsPerPage","getPaginationProps","usePagination","queryParams","useMemo","baseParams","employeesQuery","useEmployeesList","keepPreviousData","deleteEmployeeMutation","useEmployeesDeleteMutation","updateOnboardingStatusMutation","useEmployeesUpdateOnboardingStatusMutation","baseSubmitHandler","submitError","setSubmitError","useBaseSubmit","errorHandling","composeErrorHandler","isPending","data","isFetching","employees","primaryJob","job","paginationProps","onDelete","employeeId","id","onReview","onboardingStatus","onCancelSelfOnboarding"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useEmployeeList.js","sources":["../../../../../src/components/Employee/EmployeeList/shared/useEmployeeList.tsx"],"sourcesContent":["import { useMemo } from 'react'\nimport { useEmployeesList } from '@gusto/embedded-api/react-query/employeesList'\nimport type { Employee } from '@gusto/embedded-api/models/components/employee'\nimport type { Job } from '@gusto/embedded-api/models/components/job'\nimport type { EmployeeOnboardingStatus as EmployeeOnboardingStatusEntity } from '@gusto/embedded-api/models/components/employeeonboardingstatus'\nimport { useEmployeesDeleteMutation } from '@gusto/embedded-api/react-query/employeesDelete'\nimport { useEmployeesUpdateOnboardingStatusMutation } from '@gusto/embedded-api/react-query/employeesUpdateOnboardingStatus'\nimport { keepPreviousData } from '@tanstack/react-query'\nimport { usePagination } from '@/hooks/usePagination/usePagination'\nimport type { PaginationControlProps } from '@/components/Common/PaginationControl/PaginationControlTypes'\nimport { useBaseSubmit } from '@/components/Base/useBaseSubmit'\nimport { composeErrorHandler } from '@/partner-hook-utils/composeErrorHandler'\nimport { EmployeeOnboardingStatus, EmployeeSelfOnboardingStatuses } from '@/shared/constants'\nimport type { HookLoadingResult, BaseHookReady } from '@/partner-hook-utils/types'\nimport { normalizeToDate } from '@/helpers/dateFormatting'\n\n/**\n * Action that may be performed on an employee row, determined by the employee's onboarding state\n * and the `employeeType` filter passed to {@link useEmployeeList}.\n *\n * @public\n */\nexport type EmployeeAction =\n 'edit' | 'delete' | 'cancel_self_onboarding' | 'review' | 'dismiss' | 'rehire'\n\n/**\n * An employee entity extended with the actions permitted on it and a reference to its primary job.\n *\n * @public\n */\nexport interface EmployeeWithActions extends Employee {\n /** Actions permitted for this employee given its onboarding status and the active filter. */\n allowedActions: EmployeeAction[]\n /** The employee's primary job, if one is marked primary. */\n primaryJob?: Job\n /** Effective date of a termination that hasn't gone into effect yet, if one is scheduled. */\n pendingDismissalDate?: string\n}\n\n/**\n * Filter applied to {@link useEmployeeList} that scopes the result set and tailors the per-row action list.\n *\n * @public\n */\nexport type EmployeeType = 'active' | 'onboarding' | 'terminated'\n\n/**\n * Props for {@link useEmployeeList}.\n *\n * @public\n */\nexport interface UseEmployeeListProps {\n /** The associated company identifier. */\n companyId: string\n /** Filters the list and tailors the allowed actions. Omit to list all employees. */\n employeeType?: EmployeeType\n}\n\n/**\n * Ready state of {@link useEmployeeList}.\n *\n * @public\n */\nexport interface UseEmployeeListReady extends BaseHookReady<\n { employees: EmployeeWithActions[] },\n { isFetching: boolean; isPending: boolean }\n> {\n /** Pagination controls for the current employee list page. */\n pagination: PaginationControlProps\n /** Actions that mutate an employee's state, gated by the entry's `allowedActions`. */\n actions: {\n /** Deletes the employee. */\n onDelete: (employeeId: string) => Promise<void>\n /** Moves the employee into the admin-review onboarding status. Resolves to the updated record, or `undefined` if the call failed. */\n onReview: (employeeId: string) => Promise<EmployeeOnboardingStatusEntity | undefined>\n /** Reverts a self-onboarding employee to admin-driven onboarding. Resolves to the updated record, or `undefined` if the call failed. */\n onCancelSelfOnboarding: (\n employeeId: string,\n ) => Promise<EmployeeOnboardingStatusEntity | undefined>\n }\n}\n\n/**\n * Return type of {@link useEmployeeList}.\n *\n * @public\n */\nexport type UseEmployeeListResult = HookLoadingResult | UseEmployeeListReady\n\nfunction getPendingDismissalDate(employee: Employee): string | undefined {\n const pending = employee.terminations?.find(termination => {\n if (!termination.effectiveDate || termination.active === true) return false\n const effectiveDate = normalizeToDate(termination.effectiveDate)\n return effectiveDate !== null && effectiveDate.getTime() > Date.now()\n })\n\n return pending?.effectiveDate\n}\n\nfunction deriveAllowedActions(\n employee: Employee,\n employeeType?: EmployeeType,\n pendingDismissalDate?: string,\n): EmployeeAction[] {\n const actions: EmployeeAction[] = []\n\n // Edit action - available for certain onboarding statuses, but not for terminated employees\n if (\n employeeType !== 'terminated' &&\n (employee.onboardingStatus === EmployeeOnboardingStatus.ADMIN_ONBOARDING_INCOMPLETE ||\n employee.onboardingStatus === EmployeeOnboardingStatus.SELF_ONBOARDING_PENDING_INVITE ||\n employee.onboardingStatus ===\n EmployeeOnboardingStatus.SELF_ONBOARDING_AWAITING_ADMIN_REVIEW ||\n employee.onboardingStatus === EmployeeOnboardingStatus.ONBOARDING_COMPLETED)\n ) {\n actions.push('edit')\n }\n\n // Cancel self onboarding - available for employees in self-onboarding flow\n if (employee.onboardingStatus && EmployeeSelfOnboardingStatuses.has(employee.onboardingStatus)) {\n actions.push('cancel_self_onboarding')\n }\n\n // Review action - available when employee completed self-onboarding\n if (\n employee.onboardingStatus === EmployeeOnboardingStatus.SELF_ONBOARDING_COMPLETED_BY_EMPLOYEE\n ) {\n actions.push('review')\n }\n\n // Delete action - available for non-onboarded employees\n if (!employee.onboarded) {\n actions.push('delete')\n }\n\n // Tab-specific actions for ManagementEmployeeList\n if (employeeType === 'active' && !pendingDismissalDate) {\n actions.push('dismiss')\n }\n\n if (employeeType === 'terminated') {\n actions.push('rehire')\n }\n\n return actions\n}\n\n/**\n * Fetches a paginated list of a company's employees and decorates each entry with the actions\n * allowed for its current onboarding state.\n *\n * @remarks\n * `employeeType` maps to a server-side filter and changes which actions appear on each row:\n * `'active'` adds `dismiss` unless the employee already has a termination scheduled for a future\n * date, `'terminated'` adds `rehire`, `'onboarding'` adds none. Omit it to list every employee.\n *\n * An `'active'` row with a pending termination carries its effective date on\n * `pendingDismissalDate` instead of the `dismiss` action.\n *\n * `'onboarding'` includes employees who haven't completed onboarding as well as employees who\n * have completed onboarding but whose primary job's hire date hasn't arrived yet, so `onboarded`\n * may be `true` for rows in this filter.\n *\n * Page changes use placeholder data: the previous page stays rendered while the next one loads,\n * and `status.isFetching` flips to `true` during the request.\n *\n * @param input - Company and optional filter for the list.\n * @returns A {@link HookLoadingResult} while the first page is in flight, or a {@link UseEmployeeListReady} once data has arrived.\n * @public\n *\n * @example\n * ```tsx\n * import { useEmployeeList } from '@gusto/embedded-react-sdk'\n *\n * function EmployeeListPage({ companyId }: { companyId: string }) {\n * const employeeList = useEmployeeList({ companyId, employeeType: 'onboarding' })\n *\n * if (employeeList.isLoading) return <div>Loading...</div>\n *\n * return (\n * <ul>\n * {employeeList.data.employees.map(employee => (\n * <li key={employee.uuid}>\n * {employee.firstName} {employee.lastName}\n * {employee.allowedActions.includes('delete') && (\n * <button onClick={() => employeeList.actions.onDelete(employee.uuid)}>Delete</button>\n * )}\n * </li>\n * ))}\n * </ul>\n * )\n * }\n * ```\n */\nexport function useEmployeeList({\n companyId,\n employeeType,\n}: UseEmployeeListProps): UseEmployeeListResult {\n const { currentPage, itemsPerPage, getPaginationProps } = usePagination()\n\n const queryParams = useMemo(() => {\n const baseParams = {\n companyId,\n page: currentPage,\n per: itemsPerPage,\n }\n\n switch (employeeType) {\n case 'active':\n return { ...baseParams, onboardedActive: true }\n case 'onboarding':\n return { ...baseParams, onboardedActive: false }\n case 'terminated':\n return { ...baseParams, terminated: true }\n default:\n return baseParams\n }\n }, [companyId, currentPage, itemsPerPage, employeeType])\n\n const employeesQuery = useEmployeesList(queryParams, { placeholderData: keepPreviousData })\n\n const deleteEmployeeMutation = useEmployeesDeleteMutation()\n const updateOnboardingStatusMutation = useEmployeesUpdateOnboardingStatusMutation()\n\n const {\n baseSubmitHandler,\n error: submitError,\n setError: setSubmitError,\n } = useBaseSubmit('EmployeeList')\n\n const errorHandling = composeErrorHandler([employeesQuery], { submitError, setSubmitError })\n\n const isPending = deleteEmployeeMutation.isPending || updateOnboardingStatusMutation.isPending\n\n const { data, isFetching } = employeesQuery\n\n const employees = useMemo<EmployeeWithActions[]>(() => {\n return (data?.showEmployees ?? []).map(employee => {\n const primaryJob = employee.jobs?.find(job => job.primary === true)\n const pendingDismissalDate = getPendingDismissalDate(employee)\n\n return {\n ...employee,\n allowedActions: deriveAllowedActions(employee, employeeType, pendingDismissalDate),\n primaryJob,\n pendingDismissalDate,\n }\n })\n }, [data?.showEmployees, employeeType])\n\n const paginationProps = data?.httpMeta.response.headers\n ? getPaginationProps(data.httpMeta.response.headers, isFetching)\n : {\n handleNextPage: () => {},\n handleFirstPage: () => {},\n handleLastPage: () => {},\n handlePreviousPage: () => {},\n handleItemsPerPageChange: () => {},\n currentPage: 1,\n totalPages: 1,\n totalCount: 0,\n itemsPerPage: 5 as const,\n }\n\n const onDelete = async (employeeId: string): Promise<void> => {\n await baseSubmitHandler(employeeId, async id => {\n await deleteEmployeeMutation.mutateAsync({\n request: { employeeId: id },\n })\n })\n }\n\n const onReview = async (\n employeeId: string,\n ): Promise<EmployeeOnboardingStatusEntity | undefined> => {\n let onboardingStatus: EmployeeOnboardingStatusEntity | undefined\n\n await baseSubmitHandler(employeeId, async id => {\n const result = await updateOnboardingStatusMutation.mutateAsync({\n request: {\n employeeId: id,\n requestBody: {\n onboardingStatus: EmployeeOnboardingStatus.SELF_ONBOARDING_AWAITING_ADMIN_REVIEW,\n },\n },\n })\n\n onboardingStatus = result.employeeOnboardingStatus\n })\n\n return onboardingStatus\n }\n\n const onCancelSelfOnboarding = async (\n employeeId: string,\n ): Promise<EmployeeOnboardingStatusEntity | undefined> => {\n let onboardingStatus: EmployeeOnboardingStatusEntity | undefined\n\n await baseSubmitHandler(employeeId, async id => {\n const result = await updateOnboardingStatusMutation.mutateAsync({\n request: {\n employeeId: id,\n requestBody: {\n onboardingStatus: EmployeeOnboardingStatus.ADMIN_ONBOARDING_INCOMPLETE,\n },\n },\n })\n\n onboardingStatus = result.employeeOnboardingStatus\n })\n\n return onboardingStatus\n }\n\n const isLoading = !data && isFetching\n\n if (isLoading) {\n return {\n isLoading: true,\n errorHandling,\n }\n }\n\n return {\n isLoading: false,\n data: {\n employees,\n },\n pagination: paginationProps,\n status: { isFetching, isPending },\n actions: { onDelete, onReview, onCancelSelfOnboarding },\n errorHandling,\n }\n}\n"],"names":["getPendingDismissalDate","employee","termination","effectiveDate","normalizeToDate","deriveAllowedActions","employeeType","pendingDismissalDate","actions","EmployeeOnboardingStatus","EmployeeSelfOnboardingStatuses","useEmployeeList","companyId","currentPage","itemsPerPage","getPaginationProps","usePagination","queryParams","useMemo","baseParams","employeesQuery","useEmployeesList","keepPreviousData","deleteEmployeeMutation","useEmployeesDeleteMutation","updateOnboardingStatusMutation","useEmployeesUpdateOnboardingStatusMutation","baseSubmitHandler","submitError","setSubmitError","useBaseSubmit","errorHandling","composeErrorHandler","isPending","data","isFetching","employees","primaryJob","job","paginationProps","onDelete","employeeId","id","onReview","onboardingStatus","onCancelSelfOnboarding"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { state as
|
|
2
|
-
import { DashboardFlowContextual as
|
|
1
|
+
import { state as a, transition as o, reduce as n } from "robot3";
|
|
2
|
+
import { DashboardFlowContextual as L, TerminationFlowContextual as m, OnboardingExecutionFlowContextual as r, EmployeeListContextual as s } from "./EmployeeListFlowComponents.js";
|
|
3
3
|
import { componentEvents as e } from "../../../shared/constants.js";
|
|
4
4
|
const i = {
|
|
5
5
|
type: "minimal",
|
|
@@ -8,22 +8,22 @@ const i = {
|
|
|
8
8
|
namespace: "Employee.ManagementEmployeeList",
|
|
9
9
|
event: e.EMPLOYEE_RETURN_TO_LIST
|
|
10
10
|
}
|
|
11
|
-
},
|
|
12
|
-
(
|
|
13
|
-
...
|
|
14
|
-
component:
|
|
11
|
+
}, t = n(
|
|
12
|
+
(E) => ({
|
|
13
|
+
...E,
|
|
14
|
+
component: s,
|
|
15
15
|
header: null,
|
|
16
16
|
employeeId: void 0
|
|
17
17
|
})
|
|
18
18
|
), _ = {
|
|
19
|
-
list:
|
|
19
|
+
list: a(
|
|
20
20
|
o(
|
|
21
21
|
e.EMPLOYEE_UPDATE,
|
|
22
22
|
"dashboard",
|
|
23
|
-
|
|
24
|
-
(
|
|
25
|
-
...
|
|
26
|
-
component:
|
|
23
|
+
n(
|
|
24
|
+
(E, l) => ({
|
|
25
|
+
...E,
|
|
26
|
+
component: L,
|
|
27
27
|
header: i,
|
|
28
28
|
employeeId: l.payload.employeeId
|
|
29
29
|
})
|
|
@@ -32,10 +32,10 @@ const i = {
|
|
|
32
32
|
o(
|
|
33
33
|
e.EMPLOYEE_DISMISS,
|
|
34
34
|
"terminate",
|
|
35
|
-
|
|
36
|
-
(
|
|
37
|
-
...
|
|
38
|
-
component:
|
|
35
|
+
n(
|
|
36
|
+
(E, l) => ({
|
|
37
|
+
...E,
|
|
38
|
+
component: m,
|
|
39
39
|
header: i,
|
|
40
40
|
employeeId: l.payload.employeeId
|
|
41
41
|
})
|
|
@@ -44,23 +44,26 @@ const i = {
|
|
|
44
44
|
o(
|
|
45
45
|
e.EMPLOYEE_CREATE,
|
|
46
46
|
"onboard",
|
|
47
|
-
|
|
48
|
-
...
|
|
49
|
-
component:
|
|
47
|
+
n((E) => ({
|
|
48
|
+
...E,
|
|
49
|
+
component: r,
|
|
50
50
|
header: i
|
|
51
51
|
}))
|
|
52
52
|
)
|
|
53
53
|
),
|
|
54
|
-
dashboard:
|
|
55
|
-
o(e.EMPLOYEE_RETURN_TO_LIST, "list",
|
|
54
|
+
dashboard: a(
|
|
55
|
+
o(e.EMPLOYEE_RETURN_TO_LIST, "list", t)
|
|
56
56
|
),
|
|
57
|
-
terminate:
|
|
58
|
-
o(e.EMPLOYEE_RETURN_TO_LIST, "list",
|
|
57
|
+
terminate: a(
|
|
58
|
+
o(e.EMPLOYEE_RETURN_TO_LIST, "list", t),
|
|
59
|
+
o(e.PAYROLL_EXIT_FLOW, "list", t),
|
|
60
|
+
o(e.RUN_PAYROLL_CANCELLED, "list", t),
|
|
61
|
+
o(e.CANCEL, "list", t)
|
|
59
62
|
),
|
|
60
|
-
onboard:
|
|
61
|
-
o(e.EMPLOYEE_RETURN_TO_LIST, "list",
|
|
62
|
-
o(e.EMPLOYEES_LIST, "list",
|
|
63
|
-
o(e.CANCEL, "list",
|
|
63
|
+
onboard: a(
|
|
64
|
+
o(e.EMPLOYEE_RETURN_TO_LIST, "list", t),
|
|
65
|
+
o(e.EMPLOYEES_LIST, "list", t),
|
|
66
|
+
o(e.CANCEL, "list", t)
|
|
64
67
|
)
|
|
65
68
|
};
|
|
66
69
|
export {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"employeeListStateMachine.js","sources":["../../../../src/components/Employee/EmployeeListFlow/employeeListStateMachine.ts"],"sourcesContent":["import { transition, reduce, state } from 'robot3'\nimport {\n DashboardFlowContextual,\n EmployeeListContextual,\n OnboardingExecutionFlowContextual,\n TerminationFlowContextual,\n type EmployeeListFlowContextInterface,\n} from './EmployeeListFlowComponents'\nimport { componentEvents } from '@/shared/constants'\nimport type { MachineEventType, MachineTransition } from '@/types/Helpers'\nimport type { FlowHeaderConfig } from '@/components/Flow/useFlow'\n\ntype EventPayloads = {\n [componentEvents.EMPLOYEE_UPDATE]: { employeeId: string }\n [componentEvents.EMPLOYEE_DISMISS]: { employeeId: string }\n}\n\nconst backToListHeader: FlowHeaderConfig = {\n type: 'minimal',\n back: {\n labelKey: 'backToListCta',\n namespace: 'Employee.ManagementEmployeeList',\n event: componentEvents.EMPLOYEE_RETURN_TO_LIST,\n },\n}\n\nconst returnToList = reduce(\n (ctx: EmployeeListFlowContextInterface): EmployeeListFlowContextInterface => ({\n ...ctx,\n component: EmployeeListContextual,\n header: null,\n employeeId: undefined,\n }),\n)\n\n/** @internal */\nexport const employeeListStateMachine = {\n list: state<MachineTransition>(\n transition(\n componentEvents.EMPLOYEE_UPDATE,\n 'dashboard',\n reduce(\n (\n ctx: EmployeeListFlowContextInterface,\n ev: MachineEventType<EventPayloads, typeof componentEvents.EMPLOYEE_UPDATE>,\n ): EmployeeListFlowContextInterface => ({\n ...ctx,\n component: DashboardFlowContextual,\n header: backToListHeader,\n employeeId: ev.payload.employeeId,\n }),\n ),\n ),\n transition(\n componentEvents.EMPLOYEE_DISMISS,\n 'terminate',\n reduce(\n (\n ctx: EmployeeListFlowContextInterface,\n ev: MachineEventType<EventPayloads, typeof componentEvents.EMPLOYEE_DISMISS>,\n ): EmployeeListFlowContextInterface => ({\n ...ctx,\n component: TerminationFlowContextual,\n header: backToListHeader,\n employeeId: ev.payload.employeeId,\n }),\n ),\n ),\n transition(\n componentEvents.EMPLOYEE_CREATE,\n 'onboard',\n reduce((ctx: EmployeeListFlowContextInterface): EmployeeListFlowContextInterface => ({\n ...ctx,\n component: OnboardingExecutionFlowContextual,\n header: backToListHeader,\n })),\n ),\n ),\n dashboard: state<MachineTransition>(\n transition(componentEvents.EMPLOYEE_RETURN_TO_LIST, 'list', returnToList),\n ),\n terminate: state<MachineTransition>(\n transition(componentEvents.EMPLOYEE_RETURN_TO_LIST, 'list', returnToList),\n ),\n onboard: state<MachineTransition>(\n transition(componentEvents.EMPLOYEE_RETURN_TO_LIST, 'list', returnToList),\n transition(componentEvents.EMPLOYEES_LIST, 'list', returnToList),\n transition(componentEvents.CANCEL, 'list', returnToList),\n ),\n}\n"],"names":["backToListHeader","componentEvents","returnToList","reduce","ctx","EmployeeListContextual","employeeListStateMachine","state","transition","ev","DashboardFlowContextual","TerminationFlowContextual","OnboardingExecutionFlowContextual"],"mappings":";;;AAiBA,MAAMA,IAAqC;AAAA,EACzC,MAAM;AAAA,EACN,MAAM;AAAA,IACJ,UAAU;AAAA,IACV,WAAW;AAAA,IACX,OAAOC,EAAgB;AAAA,EAAA;AAE3B,GAEMC,IAAeC;AAAA,EACnB,CAACC,OAA6E;AAAA,IAC5E,GAAGA;AAAA,IACH,WAAWC;AAAA,IACX,QAAQ;AAAA,IACR,YAAY;AAAA,EAAA;AAEhB,GAGaC,IAA2B;AAAA,EACtC,MAAMC;AAAA,IACJC;AAAA,MACEP,EAAgB;AAAA,MAChB;AAAA,MACAE;AAAA,QACE,CACEC,GACAK,OACsC;AAAA,UACtC,GAAGL;AAAA,UACH,WAAWM;AAAA,UACX,QAAQV;AAAA,UACR,YAAYS,EAAG,QAAQ;AAAA,QAAA;AAAA,MACzB;AAAA,IACF;AAAA,IAEFD;AAAA,MACEP,EAAgB;AAAA,MAChB;AAAA,MACAE;AAAA,QACE,CACEC,GACAK,OACsC;AAAA,UACtC,GAAGL;AAAA,UACH,WAAWO;AAAA,UACX,QAAQX;AAAA,UACR,YAAYS,EAAG,QAAQ;AAAA,QAAA;AAAA,MACzB;AAAA,IACF;AAAA,IAEFD;AAAA,MACEP,EAAgB;AAAA,MAChB;AAAA,MACAE,EAAO,CAACC,OAA6E;AAAA,QACnF,GAAGA;AAAA,QACH,WAAWQ;AAAA,QACX,QAAQZ;AAAA,MAAA,EACR;AAAA,IAAA;AAAA,EACJ;AAAA,EAEF,WAAWO;AAAA,IACTC,EAAWP,EAAgB,yBAAyB,QAAQC,CAAY;AAAA,EAAA;AAAA,EAE1E,WAAWK;AAAA,IACTC,EAAWP,EAAgB,yBAAyB,QAAQC,CAAY;AAAA,EAAA;AAAA,
|
|
1
|
+
{"version":3,"file":"employeeListStateMachine.js","sources":["../../../../src/components/Employee/EmployeeListFlow/employeeListStateMachine.ts"],"sourcesContent":["import { transition, reduce, state } from 'robot3'\nimport {\n DashboardFlowContextual,\n EmployeeListContextual,\n OnboardingExecutionFlowContextual,\n TerminationFlowContextual,\n type EmployeeListFlowContextInterface,\n} from './EmployeeListFlowComponents'\nimport { componentEvents } from '@/shared/constants'\nimport type { MachineEventType, MachineTransition } from '@/types/Helpers'\nimport type { FlowHeaderConfig } from '@/components/Flow/useFlow'\n\ntype EventPayloads = {\n [componentEvents.EMPLOYEE_UPDATE]: { employeeId: string }\n [componentEvents.EMPLOYEE_DISMISS]: { employeeId: string }\n}\n\nconst backToListHeader: FlowHeaderConfig = {\n type: 'minimal',\n back: {\n labelKey: 'backToListCta',\n namespace: 'Employee.ManagementEmployeeList',\n event: componentEvents.EMPLOYEE_RETURN_TO_LIST,\n },\n}\n\nconst returnToList = reduce(\n (ctx: EmployeeListFlowContextInterface): EmployeeListFlowContextInterface => ({\n ...ctx,\n component: EmployeeListContextual,\n header: null,\n employeeId: undefined,\n }),\n)\n\n/** @internal */\nexport const employeeListStateMachine = {\n list: state<MachineTransition>(\n transition(\n componentEvents.EMPLOYEE_UPDATE,\n 'dashboard',\n reduce(\n (\n ctx: EmployeeListFlowContextInterface,\n ev: MachineEventType<EventPayloads, typeof componentEvents.EMPLOYEE_UPDATE>,\n ): EmployeeListFlowContextInterface => ({\n ...ctx,\n component: DashboardFlowContextual,\n header: backToListHeader,\n employeeId: ev.payload.employeeId,\n }),\n ),\n ),\n transition(\n componentEvents.EMPLOYEE_DISMISS,\n 'terminate',\n reduce(\n (\n ctx: EmployeeListFlowContextInterface,\n ev: MachineEventType<EventPayloads, typeof componentEvents.EMPLOYEE_DISMISS>,\n ): EmployeeListFlowContextInterface => ({\n ...ctx,\n component: TerminationFlowContextual,\n header: backToListHeader,\n employeeId: ev.payload.employeeId,\n }),\n ),\n ),\n transition(\n componentEvents.EMPLOYEE_CREATE,\n 'onboard',\n reduce((ctx: EmployeeListFlowContextInterface): EmployeeListFlowContextInterface => ({\n ...ctx,\n component: OnboardingExecutionFlowContextual,\n header: backToListHeader,\n })),\n ),\n ),\n dashboard: state<MachineTransition>(\n transition(componentEvents.EMPLOYEE_RETURN_TO_LIST, 'list', returnToList),\n ),\n terminate: state<MachineTransition>(\n transition(componentEvents.EMPLOYEE_RETURN_TO_LIST, 'list', returnToList),\n transition(componentEvents.PAYROLL_EXIT_FLOW, 'list', returnToList),\n transition(componentEvents.RUN_PAYROLL_CANCELLED, 'list', returnToList),\n transition(componentEvents.CANCEL, 'list', returnToList),\n ),\n onboard: state<MachineTransition>(\n transition(componentEvents.EMPLOYEE_RETURN_TO_LIST, 'list', returnToList),\n transition(componentEvents.EMPLOYEES_LIST, 'list', returnToList),\n transition(componentEvents.CANCEL, 'list', returnToList),\n ),\n}\n"],"names":["backToListHeader","componentEvents","returnToList","reduce","ctx","EmployeeListContextual","employeeListStateMachine","state","transition","ev","DashboardFlowContextual","TerminationFlowContextual","OnboardingExecutionFlowContextual"],"mappings":";;;AAiBA,MAAMA,IAAqC;AAAA,EACzC,MAAM;AAAA,EACN,MAAM;AAAA,IACJ,UAAU;AAAA,IACV,WAAW;AAAA,IACX,OAAOC,EAAgB;AAAA,EAAA;AAE3B,GAEMC,IAAeC;AAAA,EACnB,CAACC,OAA6E;AAAA,IAC5E,GAAGA;AAAA,IACH,WAAWC;AAAA,IACX,QAAQ;AAAA,IACR,YAAY;AAAA,EAAA;AAEhB,GAGaC,IAA2B;AAAA,EACtC,MAAMC;AAAA,IACJC;AAAA,MACEP,EAAgB;AAAA,MAChB;AAAA,MACAE;AAAA,QACE,CACEC,GACAK,OACsC;AAAA,UACtC,GAAGL;AAAA,UACH,WAAWM;AAAA,UACX,QAAQV;AAAA,UACR,YAAYS,EAAG,QAAQ;AAAA,QAAA;AAAA,MACzB;AAAA,IACF;AAAA,IAEFD;AAAA,MACEP,EAAgB;AAAA,MAChB;AAAA,MACAE;AAAA,QACE,CACEC,GACAK,OACsC;AAAA,UACtC,GAAGL;AAAA,UACH,WAAWO;AAAA,UACX,QAAQX;AAAA,UACR,YAAYS,EAAG,QAAQ;AAAA,QAAA;AAAA,MACzB;AAAA,IACF;AAAA,IAEFD;AAAA,MACEP,EAAgB;AAAA,MAChB;AAAA,MACAE,EAAO,CAACC,OAA6E;AAAA,QACnF,GAAGA;AAAA,QACH,WAAWQ;AAAA,QACX,QAAQZ;AAAA,MAAA,EACR;AAAA,IAAA;AAAA,EACJ;AAAA,EAEF,WAAWO;AAAA,IACTC,EAAWP,EAAgB,yBAAyB,QAAQC,CAAY;AAAA,EAAA;AAAA,EAE1E,WAAWK;AAAA,IACTC,EAAWP,EAAgB,yBAAyB,QAAQC,CAAY;AAAA,IACxEM,EAAWP,EAAgB,mBAAmB,QAAQC,CAAY;AAAA,IAClEM,EAAWP,EAAgB,uBAAuB,QAAQC,CAAY;AAAA,IACtEM,EAAWP,EAAgB,QAAQ,QAAQC,CAAY;AAAA,EAAA;AAAA,EAEzD,SAASK;AAAA,IACPC,EAAWP,EAAgB,yBAAyB,QAAQC,CAAY;AAAA,IACxEM,EAAWP,EAAgB,gBAAgB,QAAQC,CAAY;AAAA,IAC/DM,EAAWP,EAAgB,QAAQ,QAAQC,CAAY;AAAA,EAAA;AAE3D;"}
|
|
@@ -203,7 +203,7 @@ function ct({
|
|
|
203
203
|
const i = await C.onSubmit();
|
|
204
204
|
i && (G(i), T());
|
|
205
205
|
}, be = C?.isPending ?? !1;
|
|
206
|
-
return /* @__PURE__ */
|
|
206
|
+
return /* @__PURE__ */ n(a, { className: X, flexDirection: "column", gap: 24, children: [
|
|
207
207
|
/* @__PURE__ */ n(a, { flexDirection: "column", gap: 4, alignItems: "flex-start", children: [
|
|
208
208
|
/* @__PURE__ */ t(r.Heading, { as: "h1", styledAs: "h2", children: e("title") }),
|
|
209
209
|
/* @__PURE__ */ t(r.Text, { variant: "supporting", children: e("description") })
|
|
@@ -506,7 +506,7 @@ function ct({
|
|
|
506
506
|
] })
|
|
507
507
|
}
|
|
508
508
|
)
|
|
509
|
-
] })
|
|
509
|
+
] });
|
|
510
510
|
}
|
|
511
511
|
export {
|
|
512
512
|
ct as HomeAddressView
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HomeAddressView.js","sources":["../../../../../src/components/Employee/HomeAddress/management/HomeAddressView.tsx"],"sourcesContent":["import { useLayoutEffect, useMemo, useRef, useState } from 'react'\nimport { Trans, useTranslation } from 'react-i18next'\nimport { useWatch } from 'react-hook-form'\nimport type { EmployeeAddress } from '@gusto/embedded-api/models/components/employeeaddress'\nimport type { TFunction } from 'i18next'\nimport {\n formatPendingHomeAddressLine,\n getPendingFutureHomeAddress,\n} from './getPendingFutureHomeAddress'\nimport HouseIcon from '@/assets/icons/house.svg?react'\nimport PencilSvg from '@/assets/icons/pencil.svg?react'\nimport TrashCanSvg from '@/assets/icons/trashcan.svg?react'\nimport { HomeAddressErrorCodes } from '@/components/Employee/Profile/shared/useHomeAddressForm/homeAddressSchema'\nimport type { UseHomeAddressFormReady } from '@/components/Employee/Profile/shared/useHomeAddressForm'\nimport { SDKFormProvider } from '@/partner-hook-utils/form/SDKFormProvider'\nimport type { HookSubmitResult } from '@/partner-hook-utils/types'\nimport { ActionsLayout, DataView, EmptyData, HamburgerMenu, useDataView } from '@/components/Common'\nimport { Flex, FlexItem } from '@/components/Common/Flex/Flex'\nimport { Grid } from '@/components/Common'\nimport { useComponentContext } from '@/contexts/ComponentAdapter/useComponentContext'\nimport { addDays, formatDateLongWithYear, normalizeToDate } from '@/helpers/dateFormatting'\nimport { formatStreetForDisplay, getCityStateZip } from '@/helpers/formattedStrings'\n\nfunction HomeAddressCourtesyWithholdingBlock({\n CourtesyWithholding,\n formHook,\n t,\n}: {\n CourtesyWithholding: UseHomeAddressFormReady['form']['Fields']['CourtesyWithholding']\n formHook: UseHomeAddressFormReady\n t: TFunction<'Employee.Management.HomeAddress'>\n}) {\n const Components = useComponentContext()\n const { control } = formHook.form.hookFormInternals.formMethods\n const courtesyWithholdingEnabled = useWatch({ control, name: 'courtesyWithholding' })\n\n return (\n <>\n <CourtesyWithholding\n label={t('form.courtesyWithholdingLabel')}\n description={\n <>\n {t('form.courtesyWithholdingDescription')}\n <Trans\n t={t}\n i18nKey=\"form.learnMoreCta\"\n components={{\n LearnMoreLink: <Components.Link />,\n }}\n />\n </>\n }\n />\n {courtesyWithholdingEnabled ? (\n <Components.Alert label={t('form.withholdingTitle')} status=\"warning\">\n <Trans t={t} i18nKey=\"form.withholdingNote\" />\n </Components.Alert>\n ) : null}\n </>\n )\n}\n\n/** @internal */\nexport interface HomeAddressViewProps {\n editHomeAddressForm: UseHomeAddressFormReady\n createHomeAddressForm: UseHomeAddressFormReady\n /** Full list for history, pending future row, and delete confirmation (from management list query). */\n employeeHomeAddresses: EmployeeAddress[] | undefined\n employeeDisplayName: string\n /** Resolved UUID passed to the edit form (`homeAddressUuid`); active row when not editing history. */\n editingHomeAddressUuid: string | undefined\n /** `undefined` = edit active/current address; otherwise set to a history row’s UUID. */\n onEditAddressTargetChange: (homeAddressUuid: string | undefined) => void\n onSaved: (result: HookSubmitResult<EmployeeAddress>) => void\n onConfirmDelete: (homeAddressUuid: string) => Promise<boolean>\n onBack: () => void\n isDeletePending?: boolean\n /** CSS class name applied to the root element. */\n className?: string\n}\n\n/** @internal */\nexport function HomeAddressView({\n editHomeAddressForm,\n createHomeAddressForm,\n employeeHomeAddresses,\n employeeDisplayName,\n editingHomeAddressUuid,\n onEditAddressTargetChange,\n onSaved,\n onConfirmDelete,\n onBack,\n isDeletePending = false,\n className,\n}: HomeAddressViewProps) {\n const { t } = useTranslation('Employee.Management.HomeAddress')\n const Components = useComponentContext()\n const [addressModal, setAddressModal] = useState<'edit' | 'create' | null>(null)\n const [deleteConfirmUuid, setDeleteConfirmUuid] = useState<string | null>(null)\n const addressModalContainerRef = useRef<HTMLDivElement>(null)\n const [addressModalPortal, setAddressModalPortal] = useState<HTMLElement | undefined>(undefined)\n\n useLayoutEffect(() => {\n if (!addressModal) {\n setAddressModalPortal(undefined)\n return\n }\n const syncPortal = () => {\n setAddressModalPortal(addressModalContainerRef.current ?? undefined)\n }\n syncPortal()\n if (addressModalContainerRef.current == null) {\n const id = requestAnimationFrame(syncPortal)\n return () => {\n cancelAnimationFrame(id)\n }\n }\n }, [addressModal])\n\n const {\n status: editStatus,\n actions: { onSubmit: editOnSubmit },\n form: editForm,\n } = editHomeAddressForm\n\n const homeAddresses = employeeHomeAddresses\n\n // The \"Current home address\" card must always show the active address,\n // independent of which row the edit modal is currently pointed at. Reading\n // `editHomeAddressForm.data.homeAddress` (which mirrors whichever uuid is\n // being edited) caused the card to mutate to the history row's content as\n // soon as the user opened Edit from the kebab menu.\n const currentHomeAddress = homeAddresses?.find(a => a.active === true) ?? homeAddresses?.[0]\n\n const {\n status: createStatus,\n actions: { onSubmit: createOnSubmit },\n form: createForm,\n } = createHomeAddressForm\n\n const {\n Fields: {\n Street1: EditStreet1,\n Street2: EditStreet2,\n City: EditCity,\n State: EditState,\n Zip: EditZip,\n CourtesyWithholding: EditCourtesyWithholding,\n EffectiveDate: EditEffectiveDate,\n },\n } = editForm\n\n const {\n Fields: {\n Street1: CreateStreet1,\n Street2: CreateStreet2,\n City: CreateCity,\n State: CreateState,\n Zip: CreateZip,\n CourtesyWithholding: CreateCourtesyWithholding,\n EffectiveDate: CreateEffectiveDate,\n },\n } = createForm\n\n const zipValidation = {\n [HomeAddressErrorCodes.REQUIRED]: t('form.validations.zip'),\n [HomeAddressErrorCodes.INVALID_ZIP]: t('form.validations.zip'),\n }\n\n const startDateValidation = {\n [HomeAddressErrorCodes.REQUIRED]: t('form.startDateRequired'),\n }\n\n const pendingFutureAddress = useMemo(\n () => getPendingFutureHomeAddress(homeAddresses),\n [homeAddresses],\n )\n\n const addressForDeleteModal = useMemo(() => {\n if (!deleteConfirmUuid || !homeAddresses) {\n return undefined\n }\n return homeAddresses.find(a => a.uuid === deleteConfirmUuid)\n }, [deleteConfirmUuid, homeAddresses])\n\n const changePendingPossessiveLabel = useMemo(() => {\n const trimmed = employeeDisplayName.trim()\n return trimmed ? `${trimmed}'s` : t('changePendingPossessiveFallback')\n }, [employeeDisplayName, t])\n\n const chronologicalAsc = [...(homeAddresses ?? [])].sort((a, b) => {\n const aDate = a.effectiveDate?.toString() ?? ''\n const bDate = b.effectiveDate?.toString() ?? ''\n if (!aDate && !bDate) return 0\n if (!aDate) return 1\n if (!bDate) return -1\n return aDate.localeCompare(bDate)\n })\n\n const historyAddresses = chronologicalAsc.filter(address => address.active !== true)\n const sortedHistory = [...historyAddresses].reverse()\n\n const historyEndDate = (row: EmployeeAddress) => {\n const idx = chronologicalAsc.findIndex(a => a.uuid === row.uuid)\n if (idx === -1 || idx >= chronologicalAsc.length - 1) return '—'\n const nextStart = chronologicalAsc[idx + 1]?.effectiveDate\n if (!nextStart) return '—'\n const nextDate = normalizeToDate(nextStart.toString())\n if (!nextDate) return '—'\n const endDate = addDays(nextDate, -1)\n const y = endDate.getFullYear()\n const m = String(endDate.getMonth() + 1).padStart(2, '0')\n const d = String(endDate.getDate()).padStart(2, '0')\n return formatDateLongWithYear(`${y}-${m}-${d}`)\n }\n\n const historyDataView = useDataView({\n data: sortedHistory,\n columns: [\n {\n title: t('columns.address'),\n render: (row: EmployeeAddress) => (\n <Flex flexDirection=\"column\" gap={0}>\n <Components.Text weight=\"medium\">{formatStreetForDisplay(row)}</Components.Text>\n <Components.Text variant=\"supporting\">{getCityStateZip(row)}</Components.Text>\n </Flex>\n ),\n },\n {\n title: t('columns.startDate'),\n render: (row: EmployeeAddress) =>\n row.effectiveDate ? formatDateLongWithYear(row.effectiveDate.toString()) : '—',\n },\n {\n title: t('columns.endDate'),\n render: (row: EmployeeAddress) => historyEndDate(row),\n },\n ],\n itemMenu: (row: EmployeeAddress) => (\n <HamburgerMenu\n triggerLabel={t('rowMenuAriaLabel')}\n items={[\n {\n label: t('rowEdit'),\n onClick: () => {\n onEditAddressTargetChange(row.uuid)\n setAddressModal('edit')\n },\n icon: <PencilSvg aria-hidden />,\n },\n {\n label: t('rowDelete'),\n onClick: () => {\n if (row.active === true) {\n return\n }\n setDeleteConfirmUuid(row.uuid)\n },\n icon: <TrashCanSvg aria-hidden />,\n },\n ]}\n />\n ),\n emptyState: () => (\n <div data-testid=\"home-address-history-empty\">\n <EmptyData\n icon={<HouseIcon aria-hidden />}\n title={t('historyEmptyTitle')}\n description={t('historyEmptyDescription')}\n />\n </div>\n ),\n })\n\n const closeAddressModal = () => {\n setAddressModal(null)\n onEditAddressTargetChange(undefined)\n // Forms set `resetOptions: { keepDirtyValues: true }` to preserve typed input\n // across `values` re-syncs; override here so closing actually clears dirty inputs.\n editHomeAddressForm.form.hookFormInternals.formMethods.reset(undefined, {\n keepDirtyValues: false,\n })\n createHomeAddressForm.form.hookFormInternals.formMethods.reset(undefined, {\n keepDirtyValues: false,\n })\n // Clear any submit errors so reopening doesn't show stale state.\n editHomeAddressForm.errorHandling.clearSubmitError()\n createHomeAddressForm.errorHandling.clearSubmitError()\n }\n\n const handleDeleteModalConfirm = async () => {\n if (!deleteConfirmUuid) {\n return\n }\n const deleted = await onConfirmDelete(deleteConfirmUuid)\n if (deleted) {\n setDeleteConfirmUuid(null)\n }\n }\n\n const addressModalSession =\n addressModal === 'edit'\n ? {\n onSubmit: editOnSubmit,\n isPending: editStatus.isPending,\n errorHandling: editHomeAddressForm.errorHandling,\n }\n : addressModal === 'create'\n ? {\n onSubmit: createOnSubmit,\n isPending: createStatus.isPending,\n errorHandling: createHomeAddressForm.errorHandling,\n }\n : null\n\n const handleSave = async () => {\n if (!addressModalSession) {\n return\n }\n\n const submitResult = await addressModalSession.onSubmit()\n\n if (submitResult) {\n onSaved(submitResult)\n closeAddressModal()\n }\n }\n\n const modalPending = addressModalSession?.isPending ?? false\n\n return (\n <section className={className}>\n <Flex flexDirection=\"column\" gap={24}>\n <Flex flexDirection=\"column\" gap={4} alignItems=\"flex-start\">\n <Components.Heading as=\"h1\" styledAs=\"h2\">\n {t('title')}\n </Components.Heading>\n <Components.Text variant=\"supporting\">{t('description')}</Components.Text>\n </Flex>\n\n <Components.Box\n header={\n <Components.BoxHeader\n title={t('currentSectionTitle')}\n action={\n currentHomeAddress ? (\n <Components.Button\n variant=\"secondary\"\n onClick={() => {\n onEditAddressTargetChange(undefined)\n setAddressModal('edit')\n }}\n isLoading={editStatus.isPending}\n >\n {t('editCta')}\n </Components.Button>\n ) : undefined\n }\n />\n }\n footer={\n <Components.Button\n variant=\"secondary\"\n onClick={() => {\n onEditAddressTargetChange(undefined)\n setAddressModal('create')\n }}\n isLoading={createStatus.isPending}\n >\n {t('changeCta')}\n </Components.Button>\n }\n >\n <Flex flexDirection=\"column\" gap={16}>\n {currentHomeAddress ? (\n <Flex flexDirection=\"column\" gap={4}>\n <FlexItem>\n <Components.Text weight=\"medium\">\n {formatStreetForDisplay(currentHomeAddress)}\n </Components.Text>\n <Components.Text weight=\"medium\">\n {getCityStateZip(currentHomeAddress)}\n </Components.Text>\n </FlexItem>\n {currentHomeAddress.effectiveDate ? (\n <Components.Text variant=\"supporting\">\n {t('currentSince', {\n date: formatDateLongWithYear(currentHomeAddress.effectiveDate.toString()),\n })}\n </Components.Text>\n ) : null}\n </Flex>\n ) : (\n <Components.Text>{t('form.noCurrentAddress')}</Components.Text>\n )}\n {pendingFutureAddress ? (\n <Components.Alert status=\"warning\" label={t('changePendingTitle')}>\n <Components.Text variant=\"supporting\">\n {t('changePendingDescription', {\n possessiveLabel: changePendingPossessiveLabel,\n newAddress: formatPendingHomeAddressLine(pendingFutureAddress),\n effectiveDate: pendingFutureAddress.effectiveDate\n ? formatDateLongWithYear(pendingFutureAddress.effectiveDate.toString())\n : '—',\n interpolation: { escapeValue: false },\n })}\n </Components.Text>\n </Components.Alert>\n ) : null}\n </Flex>\n </Components.Box>\n\n <Flex flexDirection=\"column\" gap={12}>\n <Components.Heading as=\"h2\" styledAs=\"h4\">\n {t('historySectionTitle')}\n </Components.Heading>\n <DataView label={t('historySectionTitle')} {...historyDataView} />\n </Flex>\n\n <ActionsLayout>\n <Components.Button variant=\"secondary\" onClick={onBack}>\n {t('backCta')}\n </Components.Button>\n </ActionsLayout>\n\n <Components.Modal\n isOpen={addressModal !== null}\n onClose={closeAddressModal}\n shouldCloseOnBackdropClick={false}\n containerRef={addressModalContainerRef}\n footer={\n <Flex flexDirection=\"row\" gap={12} justifyContent=\"flex-end\">\n <Components.Button\n variant=\"secondary\"\n onClick={() => {\n closeAddressModal()\n }}\n >\n {t('cancelCta')}\n </Components.Button>\n <Components.Button\n variant=\"primary\"\n onClick={() => {\n void handleSave()\n }}\n isLoading={modalPending}\n >\n {t('submitCta')}\n </Components.Button>\n </Flex>\n }\n >\n <Flex flexDirection=\"column\" gap={32}>\n <Flex flexDirection=\"column\" gap={4}>\n <Components.Heading as=\"h2\">\n {addressModal === 'edit' ? t('editModalTitle') : t('createModalTitle')}\n </Components.Heading>\n <Components.Text variant=\"supporting\">\n {addressModal === 'edit' ? t('editModalDescription') : t('createModalDescription')}\n </Components.Text>\n </Flex>\n {addressModalSession && addressModalSession.errorHandling.errors.length > 0 ? (\n <Components.Alert status=\"error\" label={t('submitErrorAlertTitle')}>\n <Components.UnorderedList\n items={addressModalSession.errorHandling.errors.flatMap(\n (submitError, errorIndex) => {\n const visibleFieldErrors = submitError.fieldErrors.filter(\n fieldError => fieldError.message,\n )\n if (visibleFieldErrors.length > 0) {\n return visibleFieldErrors.map(fieldError => (\n <span key={`${errorIndex}-${fieldError.field}`}>\n {fieldError.message}\n </span>\n ))\n }\n const message = submitError.message || t('submitErrorAlertFallback')\n return [<span key={errorIndex}>{message}</span>]\n },\n )}\n />\n <Components.Text variant=\"supporting\">{t('submitErrorAlertHelp')}</Components.Text>\n </Components.Alert>\n ) : null}\n {addressModal === 'edit' ? (\n <SDKFormProvider formHookResult={editHomeAddressForm}>\n <Grid\n gridTemplateColumns={{\n base: '1fr',\n small: '1fr',\n }}\n gap={20}\n >\n {EditEffectiveDate ? (\n <EditEffectiveDate\n label={t('columns.startDate')}\n description={t('startDateHelper')}\n validationMessages={startDateValidation}\n portalContainer={addressModalPortal}\n />\n ) : null}\n <EditStreet1\n label={t('form.street1')}\n validationMessages={{\n [HomeAddressErrorCodes.REQUIRED]: t('form.validations.street1'),\n }}\n />\n <EditStreet2\n label={t('form.street2')}\n validationMessages={{\n [HomeAddressErrorCodes.REQUIRED]: t('form.validations.street1'),\n }}\n />\n <EditCity\n label={t('form.city')}\n validationMessages={{\n [HomeAddressErrorCodes.REQUIRED]: t('form.validations.city'),\n }}\n />\n <EditState\n label={t('form.state')}\n placeholder={t('form.statePlaceholder')}\n validationMessages={{\n [HomeAddressErrorCodes.REQUIRED]: t('form.validations.state'),\n }}\n portalContainer={addressModalPortal}\n />\n <EditZip label={t('form.zip')} validationMessages={zipValidation} />\n <HomeAddressCourtesyWithholdingBlock\n CourtesyWithholding={EditCourtesyWithholding}\n formHook={editHomeAddressForm}\n t={t}\n />\n </Grid>\n </SDKFormProvider>\n ) : null}\n {addressModal === 'create' ? (\n <SDKFormProvider formHookResult={createHomeAddressForm}>\n <Grid\n gridTemplateColumns={{\n base: '1fr',\n small: '1fr',\n }}\n gap={20}\n >\n {CreateEffectiveDate ? (\n <CreateEffectiveDate\n label={t('columns.startDate')}\n description={t('startDateHelper')}\n validationMessages={startDateValidation}\n portalContainer={addressModalPortal}\n />\n ) : null}\n <CreateStreet1\n label={t('form.street1')}\n validationMessages={{\n [HomeAddressErrorCodes.REQUIRED]: t('form.validations.street1'),\n }}\n />\n <CreateStreet2\n label={t('form.street2')}\n validationMessages={{\n [HomeAddressErrorCodes.REQUIRED]: t('form.validations.street1'),\n }}\n />\n <CreateCity\n label={t('form.city')}\n validationMessages={{\n [HomeAddressErrorCodes.REQUIRED]: t('form.validations.city'),\n }}\n />\n <CreateState\n label={t('form.state')}\n placeholder={t('form.statePlaceholder')}\n validationMessages={{\n [HomeAddressErrorCodes.REQUIRED]: t('form.validations.state'),\n }}\n portalContainer={addressModalPortal}\n />\n <CreateZip label={t('form.zip')} validationMessages={zipValidation} />\n <HomeAddressCourtesyWithholdingBlock\n CourtesyWithholding={CreateCourtesyWithholding}\n formHook={createHomeAddressForm}\n t={t}\n />\n </Grid>\n </SDKFormProvider>\n ) : null}\n </Flex>\n </Components.Modal>\n\n <Components.Modal\n isOpen={deleteConfirmUuid !== null}\n onClose={() => {\n setDeleteConfirmUuid(null)\n }}\n shouldCloseOnBackdropClick={false}\n footer={\n <Flex flexDirection=\"row\" gap={12} justifyContent=\"flex-end\">\n <Components.Button\n variant=\"secondary\"\n onClick={() => {\n setDeleteConfirmUuid(null)\n }}\n >\n {t('cancelCta')}\n </Components.Button>\n <Components.Button\n variant=\"error\"\n onClick={() => {\n void handleDeleteModalConfirm()\n }}\n isLoading={isDeletePending}\n >\n {t('deleteModalConfirmCta')}\n </Components.Button>\n </Flex>\n }\n >\n <Flex flexDirection=\"column\" gap={16}>\n <Components.Heading as=\"h2\">{t('deleteModalTitle')}</Components.Heading>\n <Components.Text variant=\"supporting\">\n {addressForDeleteModal ? (\n <Trans\n t={t}\n i18nKey=\"deleteModalDescription\"\n values={{\n address: formatPendingHomeAddressLine(addressForDeleteModal),\n }}\n components={{\n strong: <Components.Text weight=\"medium\" as=\"span\" />,\n }}\n tOptions={{ interpolation: { escapeValue: false } }}\n />\n ) : null}\n </Components.Text>\n </Flex>\n </Components.Modal>\n </Flex>\n </section>\n )\n}\n"],"names":["HomeAddressCourtesyWithholdingBlock","CourtesyWithholding","formHook","t","Components","useComponentContext","control","courtesyWithholdingEnabled","useWatch","jsxs","Fragment","jsx","Trans","HomeAddressView","editHomeAddressForm","createHomeAddressForm","employeeHomeAddresses","employeeDisplayName","editingHomeAddressUuid","onEditAddressTargetChange","onSaved","onConfirmDelete","onBack","isDeletePending","className","useTranslation","addressModal","setAddressModal","useState","deleteConfirmUuid","setDeleteConfirmUuid","addressModalContainerRef","useRef","addressModalPortal","setAddressModalPortal","useLayoutEffect","syncPortal","id","editStatus","editOnSubmit","editForm","homeAddresses","currentHomeAddress","a","createStatus","createOnSubmit","createForm","EditStreet1","EditStreet2","EditCity","EditState","EditZip","EditCourtesyWithholding","EditEffectiveDate","CreateStreet1","CreateStreet2","CreateCity","CreateState","CreateZip","CreateCourtesyWithholding","CreateEffectiveDate","zipValidation","HomeAddressErrorCodes","startDateValidation","pendingFutureAddress","useMemo","getPendingFutureHomeAddress","addressForDeleteModal","changePendingPossessiveLabel","trimmed","chronologicalAsc","b","aDate","bDate","sortedHistory","address","historyEndDate","row","idx","nextStart","nextDate","normalizeToDate","endDate","addDays","y","m","d","formatDateLongWithYear","historyDataView","useDataView","Flex","formatStreetForDisplay","getCityStateZip","HamburgerMenu","PencilSvg","TrashCanSvg","EmptyData","HouseIcon","closeAddressModal","handleDeleteModalConfirm","addressModalSession","handleSave","submitResult","modalPending","FlexItem","formatPendingHomeAddressLine","DataView","ActionsLayout","submitError","errorIndex","visibleFieldErrors","fieldError","message","SDKFormProvider","Grid"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"HomeAddressView.js","sources":["../../../../../src/components/Employee/HomeAddress/management/HomeAddressView.tsx"],"sourcesContent":["import { useLayoutEffect, useMemo, useRef, useState } from 'react'\nimport { Trans, useTranslation } from 'react-i18next'\nimport { useWatch } from 'react-hook-form'\nimport type { EmployeeAddress } from '@gusto/embedded-api/models/components/employeeaddress'\nimport type { TFunction } from 'i18next'\nimport {\n formatPendingHomeAddressLine,\n getPendingFutureHomeAddress,\n} from './getPendingFutureHomeAddress'\nimport HouseIcon from '@/assets/icons/house.svg?react'\nimport PencilSvg from '@/assets/icons/pencil.svg?react'\nimport TrashCanSvg from '@/assets/icons/trashcan.svg?react'\nimport { HomeAddressErrorCodes } from '@/components/Employee/Profile/shared/useHomeAddressForm/homeAddressSchema'\nimport type { UseHomeAddressFormReady } from '@/components/Employee/Profile/shared/useHomeAddressForm'\nimport { SDKFormProvider } from '@/partner-hook-utils/form/SDKFormProvider'\nimport type { HookSubmitResult } from '@/partner-hook-utils/types'\nimport { ActionsLayout, DataView, EmptyData, HamburgerMenu, useDataView } from '@/components/Common'\nimport { Flex, FlexItem } from '@/components/Common/Flex/Flex'\nimport { Grid } from '@/components/Common'\nimport { useComponentContext } from '@/contexts/ComponentAdapter/useComponentContext'\nimport { addDays, formatDateLongWithYear, normalizeToDate } from '@/helpers/dateFormatting'\nimport { formatStreetForDisplay, getCityStateZip } from '@/helpers/formattedStrings'\n\nfunction HomeAddressCourtesyWithholdingBlock({\n CourtesyWithholding,\n formHook,\n t,\n}: {\n CourtesyWithholding: UseHomeAddressFormReady['form']['Fields']['CourtesyWithholding']\n formHook: UseHomeAddressFormReady\n t: TFunction<'Employee.Management.HomeAddress'>\n}) {\n const Components = useComponentContext()\n const { control } = formHook.form.hookFormInternals.formMethods\n const courtesyWithholdingEnabled = useWatch({ control, name: 'courtesyWithholding' })\n\n return (\n <>\n <CourtesyWithholding\n label={t('form.courtesyWithholdingLabel')}\n description={\n <>\n {t('form.courtesyWithholdingDescription')}\n <Trans\n t={t}\n i18nKey=\"form.learnMoreCta\"\n components={{\n LearnMoreLink: <Components.Link />,\n }}\n />\n </>\n }\n />\n {courtesyWithholdingEnabled ? (\n <Components.Alert label={t('form.withholdingTitle')} status=\"warning\">\n <Trans t={t} i18nKey=\"form.withholdingNote\" />\n </Components.Alert>\n ) : null}\n </>\n )\n}\n\n/** @internal */\nexport interface HomeAddressViewProps {\n editHomeAddressForm: UseHomeAddressFormReady\n createHomeAddressForm: UseHomeAddressFormReady\n /** Full list for history, pending future row, and delete confirmation (from management list query). */\n employeeHomeAddresses: EmployeeAddress[] | undefined\n employeeDisplayName: string\n /** Resolved UUID passed to the edit form (`homeAddressUuid`); active row when not editing history. */\n editingHomeAddressUuid: string | undefined\n /** `undefined` = edit active/current address; otherwise set to a history row’s UUID. */\n onEditAddressTargetChange: (homeAddressUuid: string | undefined) => void\n onSaved: (result: HookSubmitResult<EmployeeAddress>) => void\n onConfirmDelete: (homeAddressUuid: string) => Promise<boolean>\n onBack: () => void\n isDeletePending?: boolean\n /** CSS class name applied to the root element. */\n className?: string\n}\n\n/** @internal */\nexport function HomeAddressView({\n editHomeAddressForm,\n createHomeAddressForm,\n employeeHomeAddresses,\n employeeDisplayName,\n editingHomeAddressUuid,\n onEditAddressTargetChange,\n onSaved,\n onConfirmDelete,\n onBack,\n isDeletePending = false,\n className,\n}: HomeAddressViewProps) {\n const { t } = useTranslation('Employee.Management.HomeAddress')\n const Components = useComponentContext()\n const [addressModal, setAddressModal] = useState<'edit' | 'create' | null>(null)\n const [deleteConfirmUuid, setDeleteConfirmUuid] = useState<string | null>(null)\n const addressModalContainerRef = useRef<HTMLDivElement>(null)\n const [addressModalPortal, setAddressModalPortal] = useState<HTMLElement | undefined>(undefined)\n\n useLayoutEffect(() => {\n if (!addressModal) {\n setAddressModalPortal(undefined)\n return\n }\n const syncPortal = () => {\n setAddressModalPortal(addressModalContainerRef.current ?? undefined)\n }\n syncPortal()\n if (addressModalContainerRef.current == null) {\n const id = requestAnimationFrame(syncPortal)\n return () => {\n cancelAnimationFrame(id)\n }\n }\n }, [addressModal])\n\n const {\n status: editStatus,\n actions: { onSubmit: editOnSubmit },\n form: editForm,\n } = editHomeAddressForm\n\n const homeAddresses = employeeHomeAddresses\n\n // The \"Current home address\" card must always show the active address,\n // independent of which row the edit modal is currently pointed at. Reading\n // `editHomeAddressForm.data.homeAddress` (which mirrors whichever uuid is\n // being edited) caused the card to mutate to the history row's content as\n // soon as the user opened Edit from the kebab menu.\n const currentHomeAddress = homeAddresses?.find(a => a.active === true) ?? homeAddresses?.[0]\n\n const {\n status: createStatus,\n actions: { onSubmit: createOnSubmit },\n form: createForm,\n } = createHomeAddressForm\n\n const {\n Fields: {\n Street1: EditStreet1,\n Street2: EditStreet2,\n City: EditCity,\n State: EditState,\n Zip: EditZip,\n CourtesyWithholding: EditCourtesyWithholding,\n EffectiveDate: EditEffectiveDate,\n },\n } = editForm\n\n const {\n Fields: {\n Street1: CreateStreet1,\n Street2: CreateStreet2,\n City: CreateCity,\n State: CreateState,\n Zip: CreateZip,\n CourtesyWithholding: CreateCourtesyWithholding,\n EffectiveDate: CreateEffectiveDate,\n },\n } = createForm\n\n const zipValidation = {\n [HomeAddressErrorCodes.REQUIRED]: t('form.validations.zip'),\n [HomeAddressErrorCodes.INVALID_ZIP]: t('form.validations.zip'),\n }\n\n const startDateValidation = {\n [HomeAddressErrorCodes.REQUIRED]: t('form.startDateRequired'),\n }\n\n const pendingFutureAddress = useMemo(\n () => getPendingFutureHomeAddress(homeAddresses),\n [homeAddresses],\n )\n\n const addressForDeleteModal = useMemo(() => {\n if (!deleteConfirmUuid || !homeAddresses) {\n return undefined\n }\n return homeAddresses.find(a => a.uuid === deleteConfirmUuid)\n }, [deleteConfirmUuid, homeAddresses])\n\n const changePendingPossessiveLabel = useMemo(() => {\n const trimmed = employeeDisplayName.trim()\n return trimmed ? `${trimmed}'s` : t('changePendingPossessiveFallback')\n }, [employeeDisplayName, t])\n\n const chronologicalAsc = [...(homeAddresses ?? [])].sort((a, b) => {\n const aDate = a.effectiveDate?.toString() ?? ''\n const bDate = b.effectiveDate?.toString() ?? ''\n if (!aDate && !bDate) return 0\n if (!aDate) return 1\n if (!bDate) return -1\n return aDate.localeCompare(bDate)\n })\n\n const historyAddresses = chronologicalAsc.filter(address => address.active !== true)\n const sortedHistory = [...historyAddresses].reverse()\n\n const historyEndDate = (row: EmployeeAddress) => {\n const idx = chronologicalAsc.findIndex(a => a.uuid === row.uuid)\n if (idx === -1 || idx >= chronologicalAsc.length - 1) return '—'\n const nextStart = chronologicalAsc[idx + 1]?.effectiveDate\n if (!nextStart) return '—'\n const nextDate = normalizeToDate(nextStart.toString())\n if (!nextDate) return '—'\n const endDate = addDays(nextDate, -1)\n const y = endDate.getFullYear()\n const m = String(endDate.getMonth() + 1).padStart(2, '0')\n const d = String(endDate.getDate()).padStart(2, '0')\n return formatDateLongWithYear(`${y}-${m}-${d}`)\n }\n\n const historyDataView = useDataView({\n data: sortedHistory,\n columns: [\n {\n title: t('columns.address'),\n render: (row: EmployeeAddress) => (\n <Flex flexDirection=\"column\" gap={0}>\n <Components.Text weight=\"medium\">{formatStreetForDisplay(row)}</Components.Text>\n <Components.Text variant=\"supporting\">{getCityStateZip(row)}</Components.Text>\n </Flex>\n ),\n },\n {\n title: t('columns.startDate'),\n render: (row: EmployeeAddress) =>\n row.effectiveDate ? formatDateLongWithYear(row.effectiveDate.toString()) : '—',\n },\n {\n title: t('columns.endDate'),\n render: (row: EmployeeAddress) => historyEndDate(row),\n },\n ],\n itemMenu: (row: EmployeeAddress) => (\n <HamburgerMenu\n triggerLabel={t('rowMenuAriaLabel')}\n items={[\n {\n label: t('rowEdit'),\n onClick: () => {\n onEditAddressTargetChange(row.uuid)\n setAddressModal('edit')\n },\n icon: <PencilSvg aria-hidden />,\n },\n {\n label: t('rowDelete'),\n onClick: () => {\n if (row.active === true) {\n return\n }\n setDeleteConfirmUuid(row.uuid)\n },\n icon: <TrashCanSvg aria-hidden />,\n },\n ]}\n />\n ),\n emptyState: () => (\n <div data-testid=\"home-address-history-empty\">\n <EmptyData\n icon={<HouseIcon aria-hidden />}\n title={t('historyEmptyTitle')}\n description={t('historyEmptyDescription')}\n />\n </div>\n ),\n })\n\n const closeAddressModal = () => {\n setAddressModal(null)\n onEditAddressTargetChange(undefined)\n // Forms set `resetOptions: { keepDirtyValues: true }` to preserve typed input\n // across `values` re-syncs; override here so closing actually clears dirty inputs.\n editHomeAddressForm.form.hookFormInternals.formMethods.reset(undefined, {\n keepDirtyValues: false,\n })\n createHomeAddressForm.form.hookFormInternals.formMethods.reset(undefined, {\n keepDirtyValues: false,\n })\n // Clear any submit errors so reopening doesn't show stale state.\n editHomeAddressForm.errorHandling.clearSubmitError()\n createHomeAddressForm.errorHandling.clearSubmitError()\n }\n\n const handleDeleteModalConfirm = async () => {\n if (!deleteConfirmUuid) {\n return\n }\n const deleted = await onConfirmDelete(deleteConfirmUuid)\n if (deleted) {\n setDeleteConfirmUuid(null)\n }\n }\n\n const addressModalSession =\n addressModal === 'edit'\n ? {\n onSubmit: editOnSubmit,\n isPending: editStatus.isPending,\n errorHandling: editHomeAddressForm.errorHandling,\n }\n : addressModal === 'create'\n ? {\n onSubmit: createOnSubmit,\n isPending: createStatus.isPending,\n errorHandling: createHomeAddressForm.errorHandling,\n }\n : null\n\n const handleSave = async () => {\n if (!addressModalSession) {\n return\n }\n\n const submitResult = await addressModalSession.onSubmit()\n\n if (submitResult) {\n onSaved(submitResult)\n closeAddressModal()\n }\n }\n\n const modalPending = addressModalSession?.isPending ?? false\n\n return (\n <Flex className={className} flexDirection=\"column\" gap={24}>\n <Flex flexDirection=\"column\" gap={4} alignItems=\"flex-start\">\n <Components.Heading as=\"h1\" styledAs=\"h2\">\n {t('title')}\n </Components.Heading>\n <Components.Text variant=\"supporting\">{t('description')}</Components.Text>\n </Flex>\n\n <Components.Box\n header={\n <Components.BoxHeader\n title={t('currentSectionTitle')}\n action={\n currentHomeAddress ? (\n <Components.Button\n variant=\"secondary\"\n onClick={() => {\n onEditAddressTargetChange(undefined)\n setAddressModal('edit')\n }}\n isLoading={editStatus.isPending}\n >\n {t('editCta')}\n </Components.Button>\n ) : undefined\n }\n />\n }\n footer={\n <Components.Button\n variant=\"secondary\"\n onClick={() => {\n onEditAddressTargetChange(undefined)\n setAddressModal('create')\n }}\n isLoading={createStatus.isPending}\n >\n {t('changeCta')}\n </Components.Button>\n }\n >\n <Flex flexDirection=\"column\" gap={16}>\n {currentHomeAddress ? (\n <Flex flexDirection=\"column\" gap={4}>\n <FlexItem>\n <Components.Text weight=\"medium\">\n {formatStreetForDisplay(currentHomeAddress)}\n </Components.Text>\n <Components.Text weight=\"medium\">\n {getCityStateZip(currentHomeAddress)}\n </Components.Text>\n </FlexItem>\n {currentHomeAddress.effectiveDate ? (\n <Components.Text variant=\"supporting\">\n {t('currentSince', {\n date: formatDateLongWithYear(currentHomeAddress.effectiveDate.toString()),\n })}\n </Components.Text>\n ) : null}\n </Flex>\n ) : (\n <Components.Text>{t('form.noCurrentAddress')}</Components.Text>\n )}\n {pendingFutureAddress ? (\n <Components.Alert status=\"warning\" label={t('changePendingTitle')}>\n <Components.Text variant=\"supporting\">\n {t('changePendingDescription', {\n possessiveLabel: changePendingPossessiveLabel,\n newAddress: formatPendingHomeAddressLine(pendingFutureAddress),\n effectiveDate: pendingFutureAddress.effectiveDate\n ? formatDateLongWithYear(pendingFutureAddress.effectiveDate.toString())\n : '—',\n interpolation: { escapeValue: false },\n })}\n </Components.Text>\n </Components.Alert>\n ) : null}\n </Flex>\n </Components.Box>\n\n <Flex flexDirection=\"column\" gap={12}>\n <Components.Heading as=\"h2\" styledAs=\"h4\">\n {t('historySectionTitle')}\n </Components.Heading>\n <DataView label={t('historySectionTitle')} {...historyDataView} />\n </Flex>\n\n <ActionsLayout>\n <Components.Button variant=\"secondary\" onClick={onBack}>\n {t('backCta')}\n </Components.Button>\n </ActionsLayout>\n\n <Components.Modal\n isOpen={addressModal !== null}\n onClose={closeAddressModal}\n shouldCloseOnBackdropClick={false}\n containerRef={addressModalContainerRef}\n footer={\n <Flex flexDirection=\"row\" gap={12} justifyContent=\"flex-end\">\n <Components.Button\n variant=\"secondary\"\n onClick={() => {\n closeAddressModal()\n }}\n >\n {t('cancelCta')}\n </Components.Button>\n <Components.Button\n variant=\"primary\"\n onClick={() => {\n void handleSave()\n }}\n isLoading={modalPending}\n >\n {t('submitCta')}\n </Components.Button>\n </Flex>\n }\n >\n <Flex flexDirection=\"column\" gap={32}>\n <Flex flexDirection=\"column\" gap={4}>\n <Components.Heading as=\"h2\">\n {addressModal === 'edit' ? t('editModalTitle') : t('createModalTitle')}\n </Components.Heading>\n <Components.Text variant=\"supporting\">\n {addressModal === 'edit' ? t('editModalDescription') : t('createModalDescription')}\n </Components.Text>\n </Flex>\n {addressModalSession && addressModalSession.errorHandling.errors.length > 0 ? (\n <Components.Alert status=\"error\" label={t('submitErrorAlertTitle')}>\n <Components.UnorderedList\n items={addressModalSession.errorHandling.errors.flatMap(\n (submitError, errorIndex) => {\n const visibleFieldErrors = submitError.fieldErrors.filter(\n fieldError => fieldError.message,\n )\n if (visibleFieldErrors.length > 0) {\n return visibleFieldErrors.map(fieldError => (\n <span key={`${errorIndex}-${fieldError.field}`}>{fieldError.message}</span>\n ))\n }\n const message = submitError.message || t('submitErrorAlertFallback')\n return [<span key={errorIndex}>{message}</span>]\n },\n )}\n />\n <Components.Text variant=\"supporting\">{t('submitErrorAlertHelp')}</Components.Text>\n </Components.Alert>\n ) : null}\n {addressModal === 'edit' ? (\n <SDKFormProvider formHookResult={editHomeAddressForm}>\n <Grid\n gridTemplateColumns={{\n base: '1fr',\n small: '1fr',\n }}\n gap={20}\n >\n {EditEffectiveDate ? (\n <EditEffectiveDate\n label={t('columns.startDate')}\n description={t('startDateHelper')}\n validationMessages={startDateValidation}\n portalContainer={addressModalPortal}\n />\n ) : null}\n <EditStreet1\n label={t('form.street1')}\n validationMessages={{\n [HomeAddressErrorCodes.REQUIRED]: t('form.validations.street1'),\n }}\n />\n <EditStreet2\n label={t('form.street2')}\n validationMessages={{\n [HomeAddressErrorCodes.REQUIRED]: t('form.validations.street1'),\n }}\n />\n <EditCity\n label={t('form.city')}\n validationMessages={{\n [HomeAddressErrorCodes.REQUIRED]: t('form.validations.city'),\n }}\n />\n <EditState\n label={t('form.state')}\n placeholder={t('form.statePlaceholder')}\n validationMessages={{\n [HomeAddressErrorCodes.REQUIRED]: t('form.validations.state'),\n }}\n portalContainer={addressModalPortal}\n />\n <EditZip label={t('form.zip')} validationMessages={zipValidation} />\n <HomeAddressCourtesyWithholdingBlock\n CourtesyWithholding={EditCourtesyWithholding}\n formHook={editHomeAddressForm}\n t={t}\n />\n </Grid>\n </SDKFormProvider>\n ) : null}\n {addressModal === 'create' ? (\n <SDKFormProvider formHookResult={createHomeAddressForm}>\n <Grid\n gridTemplateColumns={{\n base: '1fr',\n small: '1fr',\n }}\n gap={20}\n >\n {CreateEffectiveDate ? (\n <CreateEffectiveDate\n label={t('columns.startDate')}\n description={t('startDateHelper')}\n validationMessages={startDateValidation}\n portalContainer={addressModalPortal}\n />\n ) : null}\n <CreateStreet1\n label={t('form.street1')}\n validationMessages={{\n [HomeAddressErrorCodes.REQUIRED]: t('form.validations.street1'),\n }}\n />\n <CreateStreet2\n label={t('form.street2')}\n validationMessages={{\n [HomeAddressErrorCodes.REQUIRED]: t('form.validations.street1'),\n }}\n />\n <CreateCity\n label={t('form.city')}\n validationMessages={{\n [HomeAddressErrorCodes.REQUIRED]: t('form.validations.city'),\n }}\n />\n <CreateState\n label={t('form.state')}\n placeholder={t('form.statePlaceholder')}\n validationMessages={{\n [HomeAddressErrorCodes.REQUIRED]: t('form.validations.state'),\n }}\n portalContainer={addressModalPortal}\n />\n <CreateZip label={t('form.zip')} validationMessages={zipValidation} />\n <HomeAddressCourtesyWithholdingBlock\n CourtesyWithholding={CreateCourtesyWithholding}\n formHook={createHomeAddressForm}\n t={t}\n />\n </Grid>\n </SDKFormProvider>\n ) : null}\n </Flex>\n </Components.Modal>\n\n <Components.Modal\n isOpen={deleteConfirmUuid !== null}\n onClose={() => {\n setDeleteConfirmUuid(null)\n }}\n shouldCloseOnBackdropClick={false}\n footer={\n <Flex flexDirection=\"row\" gap={12} justifyContent=\"flex-end\">\n <Components.Button\n variant=\"secondary\"\n onClick={() => {\n setDeleteConfirmUuid(null)\n }}\n >\n {t('cancelCta')}\n </Components.Button>\n <Components.Button\n variant=\"error\"\n onClick={() => {\n void handleDeleteModalConfirm()\n }}\n isLoading={isDeletePending}\n >\n {t('deleteModalConfirmCta')}\n </Components.Button>\n </Flex>\n }\n >\n <Flex flexDirection=\"column\" gap={16}>\n <Components.Heading as=\"h2\">{t('deleteModalTitle')}</Components.Heading>\n <Components.Text variant=\"supporting\">\n {addressForDeleteModal ? (\n <Trans\n t={t}\n i18nKey=\"deleteModalDescription\"\n values={{\n address: formatPendingHomeAddressLine(addressForDeleteModal),\n }}\n components={{\n strong: <Components.Text weight=\"medium\" as=\"span\" />,\n }}\n tOptions={{ interpolation: { escapeValue: false } }}\n />\n ) : null}\n </Components.Text>\n </Flex>\n </Components.Modal>\n </Flex>\n )\n}\n"],"names":["HomeAddressCourtesyWithholdingBlock","CourtesyWithholding","formHook","t","Components","useComponentContext","control","courtesyWithholdingEnabled","useWatch","jsxs","Fragment","jsx","Trans","HomeAddressView","editHomeAddressForm","createHomeAddressForm","employeeHomeAddresses","employeeDisplayName","editingHomeAddressUuid","onEditAddressTargetChange","onSaved","onConfirmDelete","onBack","isDeletePending","className","useTranslation","addressModal","setAddressModal","useState","deleteConfirmUuid","setDeleteConfirmUuid","addressModalContainerRef","useRef","addressModalPortal","setAddressModalPortal","useLayoutEffect","syncPortal","id","editStatus","editOnSubmit","editForm","homeAddresses","currentHomeAddress","a","createStatus","createOnSubmit","createForm","EditStreet1","EditStreet2","EditCity","EditState","EditZip","EditCourtesyWithholding","EditEffectiveDate","CreateStreet1","CreateStreet2","CreateCity","CreateState","CreateZip","CreateCourtesyWithholding","CreateEffectiveDate","zipValidation","HomeAddressErrorCodes","startDateValidation","pendingFutureAddress","useMemo","getPendingFutureHomeAddress","addressForDeleteModal","changePendingPossessiveLabel","trimmed","chronologicalAsc","b","aDate","bDate","sortedHistory","address","historyEndDate","row","idx","nextStart","nextDate","normalizeToDate","endDate","addDays","y","m","d","formatDateLongWithYear","historyDataView","useDataView","Flex","formatStreetForDisplay","getCityStateZip","HamburgerMenu","PencilSvg","TrashCanSvg","EmptyData","HouseIcon","closeAddressModal","handleDeleteModalConfirm","addressModalSession","handleSave","submitResult","modalPending","FlexItem","formatPendingHomeAddressLine","DataView","ActionsLayout","submitError","errorIndex","visibleFieldErrors","fieldError","message","SDKFormProvider","Grid"],"mappings":"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"}
|