@gusto/embedded-react-sdk 0.46.2 → 0.46.3
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 +67 -0
- package/dist/components/Common/DataView/DataTable/DataTable.js +76 -72
- package/dist/components/Common/DataView/DataTable/DataTable.js.map +1 -1
- package/dist/components/Common/DataView/DataTable/DataTable.module.scss.js +8 -0
- package/dist/components/Common/DataView/DataTable/DataTable.module.scss.js.map +1 -0
- package/dist/components/Common/DataView/useDataView.d.ts +2 -0
- package/dist/components/Common/DataView/useDataView.js.map +1 -1
- package/dist/components/Common/DocumentViewer/DocumentViewer.js +10 -10
- package/dist/components/Common/DocumentViewer/DocumentViewer.js.map +1 -1
- package/dist/components/Common/DocumentViewer/DocumentViewer.module.scss.js +9 -9
- package/dist/components/Common/PaginationControl/PaginationControl.js +11 -10
- package/dist/components/Common/PaginationControl/PaginationControl.js.map +1 -1
- package/dist/components/Common/PaginationControl/PaginationControlTypes.d.ts +1 -1
- package/dist/components/Common/UI/DescriptionList/DescriptionList.js +11 -10
- package/dist/components/Common/UI/DescriptionList/DescriptionList.js.map +1 -1
- package/dist/components/Common/UI/DescriptionList/DescriptionList.module.scss.js +4 -4
- package/dist/components/Common/UI/Input/InputTypes.d.ts +1 -1
- package/dist/components/Common/UI/Input/InputTypes.js.map +1 -1
- package/dist/components/Common/UI/NumberInput/NumberInput.js +51 -48
- package/dist/components/Common/UI/NumberInput/NumberInput.js.map +1 -1
- package/dist/components/Common/VisuallyHidden/VisuallyHidden.d.ts +1 -1
- package/dist/components/Common/VisuallyHidden/VisuallyHidden.js.map +1 -1
- package/dist/components/Company/AssignSignatory/CreateSignatory/useCreateSignatory.js +3 -4
- package/dist/components/Company/AssignSignatory/CreateSignatory/useCreateSignatory.js.map +1 -1
- package/dist/components/Company/AssignSignatory/InviteSignatory/useInviteSignatory.js +3 -4
- package/dist/components/Company/AssignSignatory/InviteSignatory/useInviteSignatory.js.map +1 -1
- package/dist/components/Company/AssignSignatory/useAssignSignatory.js +5 -6
- package/dist/components/Company/AssignSignatory/useAssignSignatory.js.map +1 -1
- package/dist/components/Company/BankAccount/BankAccountForm/context.js +3 -4
- package/dist/components/Company/BankAccount/BankAccountForm/context.js.map +1 -1
- package/dist/components/Company/DocumentSigner/DocumentList/useDocumentList.js +3 -4
- package/dist/components/Company/DocumentSigner/DocumentList/useDocumentList.js.map +1 -1
- package/dist/components/Company/DocumentSigner/shared/useSignCompanyForm/fields.js +4 -4
- package/dist/components/Company/FederalTaxes/useFederalTaxes.js +5 -6
- package/dist/components/Company/FederalTaxes/useFederalTaxes.js.map +1 -1
- package/dist/components/Company/Industry/Context.js +6 -7
- package/dist/components/Company/Industry/Context.js.map +1 -1
- package/dist/components/Company/Locations/LocationForm/useLocationForm.js +3 -4
- package/dist/components/Company/Locations/LocationForm/useLocationForm.js.map +1 -1
- package/dist/components/Company/Locations/LocationsList/useLocationsList.js +3 -4
- package/dist/components/Company/Locations/LocationsList/useLocationsList.js.map +1 -1
- package/dist/components/Company/OnboardingOverview/context.js +3 -4
- package/dist/components/Company/OnboardingOverview/context.js.map +1 -1
- package/dist/components/Company/PaySchedule/shared/usePayScheduleForm/fields.js +5 -5
- package/dist/components/Company/StateTaxes/StateTaxesForm/context.js +3 -4
- package/dist/components/Company/StateTaxes/StateTaxesForm/context.js.map +1 -1
- package/dist/components/Company/StateTaxes/StateTaxesList/context.js +3 -4
- package/dist/components/Company/StateTaxes/StateTaxesList/context.js.map +1 -1
- package/dist/components/Contractor/Address/useAddress.js +5 -6
- package/dist/components/Contractor/Address/useAddress.js.map +1 -1
- package/dist/components/Contractor/Profile/useContractorProfile.js +33 -34
- package/dist/components/Contractor/Profile/useContractorProfile.js.map +1 -1
- package/dist/components/Employee/Compensation/management/EditCompensation/EditCompensation.js +14 -11
- package/dist/components/Employee/Compensation/management/EditCompensation/EditCompensation.js.map +1 -1
- package/dist/components/Employee/Compensation/management/EditPendingCompensation/EditPendingCompensation.js +0 -2
- package/dist/components/Employee/Compensation/management/EditPendingCompensation/EditPendingCompensation.js.map +1 -1
- package/dist/components/Employee/Compensation/management/ManagementCompensationFormBody.js +18 -18
- package/dist/components/Employee/Compensation/management/ManagementCompensationFormBody.js.map +1 -1
- package/dist/components/Employee/Compensation/onboarding/JobsList/JobsListPresentation.js +36 -36
- package/dist/components/Employee/Compensation/onboarding/JobsList/JobsListPresentation.js.map +1 -1
- package/dist/components/Employee/Compensation/shared/useCompensationForm/fields.js +4 -4
- package/dist/components/Employee/Compensation/shared/useCompensationForm/useCompensationForm.js +140 -140
- package/dist/components/Employee/Compensation/shared/useCompensationForm/useCompensationForm.js.map +1 -1
- package/dist/components/Employee/Compensation/shared/useJobForm/fields.js +6 -6
- package/dist/components/Employee/Compensation/shared/useJobForm/useJobForm.d.ts +6 -5
- package/dist/components/Employee/Compensation/shared/useJobForm/useJobForm.js +162 -131
- package/dist/components/Employee/Compensation/shared/useJobForm/useJobForm.js.map +1 -1
- package/dist/components/Employee/Dashboard/BasicDetailsView.js +74 -88
- package/dist/components/Employee/Dashboard/BasicDetailsView.js.map +1 -1
- package/dist/components/Employee/Dashboard/Dashboard.js +53 -51
- package/dist/components/Employee/Dashboard/Dashboard.js.map +1 -1
- package/dist/components/Employee/Dashboard/DocumentsView.js +17 -10
- package/dist/components/Employee/Dashboard/DocumentsView.js.map +1 -1
- package/dist/components/Employee/Dashboard/JobAndPayView.js +383 -357
- package/dist/components/Employee/Dashboard/JobAndPayView.js.map +1 -1
- package/dist/components/Employee/Dashboard/TaxesView.js +114 -101
- package/dist/components/Employee/Dashboard/TaxesView.js.map +1 -1
- package/dist/components/Employee/Dashboard/getPendingCompensationChanges.js +36 -36
- package/dist/components/Employee/Dashboard/getPendingCompensationChanges.js.map +1 -1
- package/dist/components/Employee/Deductions/DeductionsForm/StandardDeductionForm.js +57 -57
- package/dist/components/Employee/Deductions/DeductionsForm/StandardDeductionForm.js.map +1 -1
- package/dist/components/Employee/Deductions/shared/useChildSupportGarnishmentForm/childSupportGarnishmentFormSchema.d.ts +14 -5
- package/dist/components/Employee/Deductions/shared/useChildSupportGarnishmentForm/childSupportGarnishmentFormSchema.js +55 -36
- package/dist/components/Employee/Deductions/shared/useChildSupportGarnishmentForm/childSupportGarnishmentFormSchema.js.map +1 -1
- package/dist/components/Employee/Deductions/shared/useChildSupportGarnishmentForm/fields.js +8 -8
- package/dist/components/Employee/Deductions/shared/useChildSupportGarnishmentForm/useChildSupportGarnishmentForm.js +18 -18
- package/dist/components/Employee/Deductions/shared/useChildSupportGarnishmentForm/useChildSupportGarnishmentForm.js.map +1 -1
- package/dist/components/Employee/Deductions/shared/useDeductionForm/fields.js +4 -4
- package/dist/components/Employee/Deductions/shared/useDeductionForm/useDeductionForm.d.ts +3 -3
- package/dist/components/Employee/Deductions/shared/useDeductionForm/useDeductionForm.js.map +1 -1
- package/dist/components/Employee/Documents/onboarding/DocumentSigner/DocumentList/useDocumentList.js +3 -4
- package/dist/components/Employee/Documents/onboarding/DocumentSigner/DocumentList/useDocumentList.js.map +1 -1
- package/dist/components/Employee/Documents/shared/useSignEmployeeForm/fields.js +1 -1
- package/dist/components/Employee/FederalTaxes/shared/useFederalTaxesForm/fields.js +4 -4
- package/dist/components/Employee/HomeAddress/management/HomeAddressView.js +157 -147
- package/dist/components/Employee/HomeAddress/management/HomeAddressView.js.map +1 -1
- package/dist/components/Employee/HomeAddress/management/useHomeAddressManagement.js +56 -55
- package/dist/components/Employee/HomeAddress/management/useHomeAddressManagement.js.map +1 -1
- package/dist/components/Employee/PaymentMethod/onboarding/BankForm.js +20 -20
- package/dist/components/Employee/PaymentMethod/onboarding/BankForm.js.map +1 -1
- package/dist/components/Employee/PaymentMethod/shared/useBankForm/fields.js +1 -1
- package/dist/components/Employee/PaymentMethod/shared/useSplitPaymentsForm/splitFieldFactory.d.ts +1 -1
- package/dist/components/Employee/PaymentMethod/shared/useSplitPaymentsForm/splitFieldFactory.js +4 -4
- package/dist/components/Employee/PaymentMethod/shared/useSplitPaymentsForm/splitFieldFactory.js.map +1 -1
- package/dist/components/Employee/Profile/shared/useEmployeeDetailsForm/fields.js +8 -8
- package/dist/components/Employee/Profile/shared/useHomeAddressForm/fields.js +5 -5
- package/dist/components/Employee/Profile/shared/useHomeAddressForm/homeAddressSchema.d.ts +0 -1
- package/dist/components/Employee/Profile/shared/useHomeAddressForm/homeAddressSchema.js +11 -12
- package/dist/components/Employee/Profile/shared/useHomeAddressForm/homeAddressSchema.js.map +1 -1
- package/dist/components/Employee/Profile/shared/useHomeAddressForm/homeAddressSchema.test.d.ts +1 -0
- package/dist/components/Employee/Profile/shared/useHomeAddressForm/useHomeAddressForm.d.ts +6 -1
- package/dist/components/Employee/Profile/shared/useHomeAddressForm/useHomeAddressForm.js +95 -94
- package/dist/components/Employee/Profile/shared/useHomeAddressForm/useHomeAddressForm.js.map +1 -1
- package/dist/components/Employee/Profile/shared/useWorkAddressForm/fields.js +4 -4
- package/dist/components/Employee/Profile/shared/useWorkAddressForm/useWorkAddressForm.d.ts +6 -1
- package/dist/components/Employee/Profile/shared/useWorkAddressForm/useWorkAddressForm.js +87 -86
- package/dist/components/Employee/Profile/shared/useWorkAddressForm/useWorkAddressForm.js.map +1 -1
- package/dist/components/Employee/StateTaxes/shared/EmployeeStateTaxesView.js +18 -18
- package/dist/components/Employee/StateTaxes/shared/EmployeeStateTaxesView.js.map +1 -1
- package/dist/components/Employee/StateTaxes/shared/useEmployeeStateTaxesForm/fieldComponents.js +8 -8
- package/dist/components/Employee/Taxes/useTaxes.js +3 -4
- package/dist/components/Employee/Taxes/useTaxes.js.map +1 -1
- package/dist/components/Employee/WorkAddress/management/WorkAddressView.js +5 -1
- package/dist/components/Employee/WorkAddress/management/WorkAddressView.js.map +1 -1
- package/dist/components/Employee/WorkAddress/management/useWorkAddressManagement.js +61 -60
- package/dist/components/Employee/WorkAddress/management/useWorkAddressManagement.js.map +1 -1
- package/dist/components/Payroll/GrossUpModal/GrossUpModal.js +2 -3
- package/dist/components/Payroll/GrossUpModal/GrossUpModal.js.map +1 -1
- package/dist/components/Payroll/usePreparedPayrollData.js +2 -3
- package/dist/components/Payroll/usePreparedPayrollData.js.map +1 -1
- package/dist/components/TimeOff/TimeOffManagement/SelectEmployees/SelectEmployeesHoliday.js +6 -7
- 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 +52 -68
- package/dist/components/TimeOff/TimeOffManagement/SelectEmployees/SelectEmployeesPresentation.js.map +1 -1
- package/dist/components/TimeOff/TimeOffManagement/SelectEmployees/SelectEmployeesPresentation.module.scss.js +4 -4
- package/dist/components/TimeOff/TimeOffManagement/SelectEmployees/SelectEmployeesPresentationTypes.d.ts +0 -11
- package/dist/components/TimeOff/TimeOffManagement/SelectEmployees/SelectEmployeesTimeOff.js +137 -163
- package/dist/components/TimeOff/TimeOffManagement/SelectEmployees/SelectEmployeesTimeOff.js.map +1 -1
- package/dist/components/TimeOff/TimeOffManagement/SelectEmployees/useSelectEmployeesData.js +36 -35
- package/dist/components/TimeOff/TimeOffManagement/SelectEmployees/useSelectEmployeesData.js.map +1 -1
- package/dist/components/TimeOff/TimeOffPolicyDetail/TimeOffPolicyDetailPresentation.js +34 -34
- package/dist/components/TimeOff/TimeOffPolicyDetail/TimeOffPolicyDetailPresentation.js.map +1 -1
- package/dist/helpers/breadcrumbHelpers.d.ts +1 -1
- package/dist/helpers/breadcrumbHelpers.js.map +1 -1
- package/dist/helpers/federalEin.d.ts +1 -0
- package/dist/helpers/federalEin.js.map +1 -1
- package/dist/helpers/mask.d.ts +8 -4
- package/dist/helpers/mask.js.map +1 -1
- package/dist/helpers/rem.d.ts +2 -1
- package/dist/helpers/rem.js.map +1 -1
- package/dist/hooks/useAsyncError.d.ts +1 -0
- package/dist/hooks/useAsyncError.js.map +1 -1
- package/dist/hooks/useForkRef/useForkRef.d.ts +1 -0
- package/dist/hooks/useForkRef/useForkRef.js.map +1 -1
- package/dist/i18n/I18n.d.ts +9 -1
- package/dist/i18n/I18n.js.map +1 -1
- package/dist/i18n/en/Company.TimeOff.EmployeeTable.json.js +14 -14
- package/dist/i18n/en/Company.TimeOff.SelectEmployees.json.js +12 -18
- package/dist/i18n/en/Company.TimeOff.SelectEmployees.json.js.map +1 -1
- package/dist/i18n/en/Employee.Compensation.json.js +24 -24
- package/dist/i18n/en/Employee.Dashboard.json.js +22 -20
- package/dist/i18n/en/Employee.Dashboard.json.js.map +1 -1
- package/dist/i18n/en/Employee.PaymentMethod.json.js +25 -25
- package/dist/i18n/en/Employee.StateTaxes.json.js +12 -10
- package/dist/i18n/en/Employee.StateTaxes.json.js.map +1 -1
- package/dist/style.css +1 -1
- package/dist/types/hooks.d.ts +1 -1
- package/dist/types/i18next.d.ts +4 -17
- package/dist/types/observability.d.ts +1 -1
- package/package.json +30 -27
- package/dist/components/Employee/Dashboard/CompensationCard.d.ts +0 -13
|
@@ -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 tHa,\n}: {\n CourtesyWithholding: UseHomeAddressFormReady['form']['Fields']['CourtesyWithholding']\n formHook: UseHomeAddressFormReady\n tHa: TFunction<'Employee.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={tHa('courtesyWithholdingLabel')}\n description={\n <>\n {tHa('courtesyWithholdingDescription')}\n <Trans\n t={tHa}\n i18nKey=\"learnMoreCta\"\n components={{\n LearnMoreLink: <Components.Link />,\n }}\n />\n </>\n }\n />\n {courtesyWithholdingEnabled ? (\n <Components.Alert label={tHa('withholdingTitle')} status=\"warning\">\n <Trans t={tHa} i18nKey=\"withholdingNote\" />\n </Components.Alert>\n ) : null}\n </>\n )\n}\n\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}\n\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}: HomeAddressViewProps) {\n const { t } = useTranslation('Employee.HomeAddress.Management')\n const { t: tHa } = useTranslation('Employee.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 data: { homeAddress },\n status: editStatus,\n actions: { onSubmit: editOnSubmit },\n form: editForm,\n } = editHomeAddressForm\n\n const homeAddresses = employeeHomeAddresses\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 },\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]: tHa('validations.zip'),\n [HomeAddressErrorCodes.INVALID_ZIP]: tHa('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 }\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 formMethods: editHomeAddressForm.form.hookFormInternals.formMethods,\n isPending: editStatus.isPending,\n }\n : addressModal === 'create'\n ? {\n onSubmit: createOnSubmit,\n formMethods: createHomeAddressForm.form.hookFormInternals.formMethods,\n isPending: createStatus.isPending,\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 }\n\n const hasFieldErrors = Object.keys(addressModalSession.formMethods.formState.errors).length > 0\n if (submitResult || !hasFieldErrors) {\n closeAddressModal()\n }\n }\n\n const modalPending = addressModalSession?.isPending ?? false\n\n return (\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 homeAddress ? (\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 {homeAddress ? (\n <Flex flexDirection=\"column\" gap={4}>\n <FlexItem>\n <Components.Text weight=\"medium\">\n {formatStreetForDisplay(homeAddress)}\n </Components.Text>\n <Components.Text weight=\"medium\">{getCityStateZip(homeAddress)}</Components.Text>\n </FlexItem>\n {homeAddress.effectiveDate ? (\n <Components.Text variant=\"supporting\">\n {t('currentSince', {\n date: formatDateLongWithYear(homeAddress.effectiveDate.toString()),\n })}\n </Components.Text>\n ) : null}\n </Flex>\n ) : (\n <Components.Text>{tHa('formTitle')}</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 {addressModal === 'edit' ? (\n <SDKFormProvider formHookResult={editHomeAddressForm}>\n <Grid\n gridTemplateColumns={{\n base: '1fr',\n small: '1fr',\n }}\n gap={20}\n >\n <EditStreet1\n label={tHa('street1')}\n validationMessages={{\n [HomeAddressErrorCodes.REQUIRED]: tHa('validations.street1'),\n }}\n />\n <EditStreet2\n label={tHa('street2')}\n validationMessages={{\n [HomeAddressErrorCodes.REQUIRED]: tHa('validations.street1'),\n }}\n />\n <EditCity\n label={tHa('city')}\n validationMessages={{\n [HomeAddressErrorCodes.REQUIRED]: tHa('validations.city'),\n }}\n />\n <EditState\n label={tHa('state')}\n validationMessages={{\n [HomeAddressErrorCodes.REQUIRED]: tHa('validations.state'),\n }}\n portalContainer={addressModalPortal}\n />\n <EditZip label={tHa('zip')} validationMessages={zipValidation} />\n <HomeAddressCourtesyWithholdingBlock\n CourtesyWithholding={EditCourtesyWithholding}\n formHook={editHomeAddressForm}\n tHa={tHa}\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={tHa('street1')}\n validationMessages={{\n [HomeAddressErrorCodes.REQUIRED]: tHa('validations.street1'),\n }}\n />\n <CreateStreet2\n label={tHa('street2')}\n validationMessages={{\n [HomeAddressErrorCodes.REQUIRED]: tHa('validations.street1'),\n }}\n />\n <CreateCity\n label={tHa('city')}\n validationMessages={{\n [HomeAddressErrorCodes.REQUIRED]: tHa('validations.city'),\n }}\n />\n <CreateState\n label={tHa('state')}\n validationMessages={{\n [HomeAddressErrorCodes.REQUIRED]: tHa('validations.state'),\n }}\n portalContainer={addressModalPortal}\n />\n <CreateZip label={tHa('zip')} validationMessages={zipValidation} />\n <HomeAddressCourtesyWithholdingBlock\n CourtesyWithholding={CreateCourtesyWithholding}\n formHook={createHomeAddressForm}\n tHa={tHa}\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","tHa","Components","useComponentContext","control","courtesyWithholdingEnabled","useWatch","jsxs","Fragment","jsx","Trans","HomeAddressView","editHomeAddressForm","createHomeAddressForm","employeeHomeAddresses","employeeDisplayName","editingHomeAddressUuid","onEditAddressTargetChange","onSaved","onConfirmDelete","onBack","isDeletePending","useTranslation","addressModal","setAddressModal","useState","deleteConfirmUuid","setDeleteConfirmUuid","addressModalContainerRef","useRef","addressModalPortal","setAddressModalPortal","useLayoutEffect","syncPortal","id","homeAddress","editStatus","editOnSubmit","editForm","homeAddresses","createStatus","createOnSubmit","createForm","EditStreet1","EditStreet2","EditCity","EditState","EditZip","EditCourtesyWithholding","CreateStreet1","CreateStreet2","CreateCity","CreateState","CreateZip","CreateCourtesyWithholding","CreateEffectiveDate","zipValidation","HomeAddressErrorCodes","startDateValidation","pendingFutureAddress","useMemo","getPendingFutureHomeAddress","addressForDeleteModal","a","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","hasFieldErrors","modalPending","FlexItem","formatPendingHomeAddressLine","DataView","ActionsLayout","SDKFormProvider","Grid"],"mappings":";;;;;;;;;;;;;;;;;;;;AAuBA,SAASA,EAAoC;AAAA,EAC3C,qBAAAC;AAAA,EACA,UAAAC;AAAA,EACA,KAAAC;AACF,GAIG;AACD,QAAMC,IAAaC,EAAA,GACb,EAAE,SAAAC,EAAA,IAAYJ,EAAS,KAAK,kBAAkB,aAC9CK,IAA6BC,GAAS,EAAE,SAAAF,GAAS,MAAM,uBAAuB;AAEpF,SACE,gBAAAG,EAAAC,GAAA,EACE,UAAA;AAAA,IAAA,gBAAAC;AAAA,MAACV;AAAA,MAAA;AAAA,QACC,OAAOE,EAAI,0BAA0B;AAAA,QACrC,aACE,gBAAAM,EAAAC,GAAA,EACG,UAAA;AAAA,UAAAP,EAAI,gCAAgC;AAAA,UACrC,gBAAAQ;AAAA,YAACC;AAAA,YAAA;AAAA,cACC,GAAGT;AAAA,cACH,SAAQ;AAAA,cACR,YAAY;AAAA,gBACV,eAAe,gBAAAQ,EAACP,EAAW,MAAX,CAAA,CAAgB;AAAA,cAAA;AAAA,YAClC;AAAA,UAAA;AAAA,QACF,EAAA,CACF;AAAA,MAAA;AAAA,IAAA;AAAA,IAGHG,IACC,gBAAAI,EAACP,EAAW,OAAX,EAAiB,OAAOD,EAAI,kBAAkB,GAAG,QAAO,WACvD,4BAACS,GAAA,EAAM,GAAGT,GAAK,SAAQ,mBAAkB,GAC3C,IACE;AAAA,EAAA,GACN;AAEJ;AAkBO,SAASU,GAAgB;AAAA,EAC9B,qBAAAC;AAAA,EACA,uBAAAC;AAAA,EACA,uBAAAC;AAAA,EACA,qBAAAC;AAAA,EACA,wBAAAC;AAAA,EACA,2BAAAC;AAAA,EACA,SAAAC;AAAA,EACA,iBAAAC;AAAA,EACA,QAAAC;AAAA,EACA,iBAAAC,IAAkB;AACpB,GAAyB;AACvB,QAAM,EAAE,EAAA,IAAMC,EAAe,iCAAiC,GACxD,EAAE,GAAGrB,MAAQqB,EAAe,sBAAsB,GAClDpB,IAAaC,EAAA,GACb,CAACoB,GAAcC,CAAe,IAAIC,EAAmC,IAAI,GACzE,CAACC,GAAmBC,CAAoB,IAAIF,EAAwB,IAAI,GACxEG,IAA2BC,GAAuB,IAAI,GACtD,CAACC,GAAoBC,CAAqB,IAAIN,EAAkC,MAAS;AAE/F,EAAAO,GAAgB,MAAM;AACpB,QAAI,CAACT,GAAc;AACjB,MAAAQ,EAAsB,MAAS;AAC/B;AAAA,IACF;AACA,UAAME,IAAa,MAAM;AACvB,MAAAF,EAAsBH,EAAyB,WAAW,MAAS;AAAA,IACrE;AAEA,QADAK,EAAA,GACIL,EAAyB,WAAW,MAAM;AAC5C,YAAMM,IAAK,sBAAsBD,CAAU;AAC3C,aAAO,MAAM;AACX,6BAAqBC,CAAE;AAAA,MACzB;AAAA,IACF;AAAA,EACF,GAAG,CAACX,CAAY,CAAC;AAEjB,QAAM;AAAA,IACJ,MAAM,EAAE,aAAAY,EAAA;AAAA,IACR,QAAQC;AAAA,IACR,SAAS,EAAE,UAAUC,EAAA;AAAA,IACrB,MAAMC;AAAA,EAAA,IACJ1B,GAEE2B,IAAgBzB,GAEhB;AAAA,IACJ,QAAQ0B;AAAA,IACR,SAAS,EAAE,UAAUC,GAAA;AAAA,IACrB,MAAMC;AAAA,EAAA,IACJ7B,GAEE;AAAA,IACJ,QAAQ;AAAA,MACN,SAAS8B;AAAA,MACT,SAASC;AAAA,MACT,MAAMC;AAAA,MACN,OAAOC;AAAA,MACP,KAAKC;AAAA,MACL,qBAAqBC;AAAA,IAAA;AAAA,EACvB,IACEV,IAEE;AAAA,IACJ,QAAQ;AAAA,MACN,SAASW;AAAA,MACT,SAASC;AAAA,MACT,MAAMC;AAAA,MACN,OAAOC;AAAA,MACP,KAAKC;AAAA,MACL,qBAAqBC;AAAA,MACrB,eAAeC;AAAA,IAAA;AAAA,EACjB,IACEb,IAEEc,IAAgB;AAAA,IACpB,CAACC,EAAsB,QAAQ,GAAGxD,EAAI,iBAAiB;AAAA,IACvD,CAACwD,EAAsB,WAAW,GAAGxD,EAAI,iBAAiB;AAAA,EAAA,GAGtDyD,KAAsB;AAAA,IAC1B,CAACD,EAAsB,QAAQ,GAAG,EAAE,wBAAwB;AAAA,EAAA,GAGxDE,IAAuBC;AAAA,IAC3B,MAAMC,GAA4BtB,CAAa;AAAA,IAC/C,CAACA,CAAa;AAAA,EAAA,GAGVuB,IAAwBF,EAAQ,MAAM;AAC1C,QAAI,GAAClC,KAAqB,CAACa;AAG3B,aAAOA,EAAc,KAAK,CAAAwB,MAAKA,EAAE,SAASrC,CAAiB;AAAA,EAC7D,GAAG,CAACA,GAAmBa,CAAa,CAAC,GAE/ByB,KAA+BJ,EAAQ,MAAM;AACjD,UAAMK,IAAUlD,EAAoB,KAAA;AACpC,WAAOkD,IAAU,GAAGA,CAAO,OAAO,EAAE,iCAAiC;AAAA,EACvE,GAAG,CAAClD,GAAqB,CAAC,CAAC,GAErBmD,IAAmB,CAAC,GAAI3B,KAAiB,CAAA,CAAG,EAAE,KAAK,CAACwB,GAAGI,MAAM;AACjE,UAAMC,IAAQL,EAAE,eAAe,SAAA,KAAc,IACvCM,IAAQF,EAAE,eAAe,SAAA,KAAc;AAC7C,WAAI,CAACC,KAAS,CAACC,IAAc,IACxBD,IACAC,IACED,EAAM,cAAcC,CAAK,IADb,KADA;AAAA,EAGrB,CAAC,GAGKC,KAAgB,CAAC,GADEJ,EAAiB,OAAO,CAAAK,MAAWA,EAAQ,WAAW,EAAI,CACzC,EAAE,QAAA,GAEtCC,KAAiB,CAACC,MAAyB;AAC/C,UAAMC,IAAMR,EAAiB,UAAU,QAAKH,GAAE,SAASU,EAAI,IAAI;AAC/D,QAAIC,MAAQ,MAAMA,KAAOR,EAAiB,SAAS,EAAG,QAAO;AAC7D,UAAMS,IAAYT,EAAiBQ,IAAM,CAAC,GAAG;AAC7C,QAAI,CAACC,EAAW,QAAO;AACvB,UAAMC,IAAWC,GAAgBF,EAAU,SAAA,CAAU;AACrD,QAAI,CAACC,EAAU,QAAO;AACtB,UAAME,IAAUC,GAAQH,GAAU,EAAE,GAC9BI,KAAIF,EAAQ,YAAA,GACZG,KAAI,OAAOH,EAAQ,SAAA,IAAa,CAAC,EAAE,SAAS,GAAG,GAAG,GAClDI,KAAI,OAAOJ,EAAQ,QAAA,CAAS,EAAE,SAAS,GAAG,GAAG;AACnD,WAAOK,EAAuB,GAAGH,EAAC,IAAIC,EAAC,IAAIC,EAAC,EAAE;AAAA,EAChD,GAEME,KAAkBC,GAAY;AAAA,IAClC,MAAMf;AAAA,IACN,SAAS;AAAA,MACP;AAAA,QACE,OAAO,EAAE,iBAAiB;AAAA,QAC1B,QAAQ,CAACG,MACP,gBAAAlE,EAAC+E,KAAK,eAAc,UAAS,KAAK,GAChC,UAAA;AAAA,UAAA,gBAAA7E,EAACP,EAAW,MAAX,EAAgB,QAAO,UAAU,UAAAqF,EAAuBd,CAAG,GAAE;AAAA,UAC9D,gBAAAhE,EAACP,EAAW,MAAX,EAAgB,SAAQ,cAAc,UAAAsF,EAAgBf,CAAG,EAAA,CAAE;AAAA,QAAA,EAAA,CAC9D;AAAA,MAAA;AAAA,MAGJ;AAAA,QACE,OAAO,EAAE,mBAAmB;AAAA,QAC5B,QAAQ,CAACA,MACPA,EAAI,gBAAgBU,EAAuBV,EAAI,cAAc,SAAA,CAAU,IAAI;AAAA,MAAA;AAAA,MAE/E;AAAA,QACE,OAAO,EAAE,iBAAiB;AAAA,QAC1B,QAAQ,CAACA,MAAyBD,GAAeC,CAAG;AAAA,MAAA;AAAA,IACtD;AAAA,IAEF,UAAU,CAACA,MACT,gBAAAhE;AAAA,MAACgF;AAAA,MAAA;AAAA,QACC,cAAc,EAAE,kBAAkB;AAAA,QAClC,OAAO;AAAA,UACL;AAAA,YACE,OAAO,EAAE,SAAS;AAAA,YAClB,SAAS,MAAM;AACb,cAAAxE,EAA0BwD,EAAI,IAAI,GAClCjD,EAAgB,MAAM;AAAA,YACxB;AAAA,YACA,MAAM,gBAAAf,EAACiF,IAAA,EAAU,eAAW,GAAA,CAAC;AAAA,UAAA;AAAA,UAE/B;AAAA,YACE,OAAO,EAAE,WAAW;AAAA,YACpB,SAAS,MAAM;AACb,cAAIjB,EAAI,WAAW,MAGnB9C,EAAqB8C,EAAI,IAAI;AAAA,YAC/B;AAAA,YACA,MAAM,gBAAAhE,EAACkF,IAAA,EAAY,eAAW,GAAA,CAAC;AAAA,UAAA;AAAA,QACjC;AAAA,MACF;AAAA,IAAA;AAAA,IAGJ,YAAY,MACV,gBAAAlF,EAAC,OAAA,EAAI,eAAY,8BACf,UAAA,gBAAAA;AAAA,MAACmF;AAAA,MAAA;AAAA,QACC,MAAM,gBAAAnF,EAACoF,IAAA,EAAU,eAAW,GAAA,CAAC;AAAA,QAC7B,OAAO,EAAE,mBAAmB;AAAA,QAC5B,aAAa,EAAE,yBAAyB;AAAA,MAAA;AAAA,IAAA,EAC1C,CACF;AAAA,EAAA,CAEH,GAEKC,IAAoB,MAAM;AAC9B,IAAAtE,EAAgB,IAAI,GACpBP,EAA0B,MAAS;AAAA,EACrC,GAEM8E,KAA2B,YAAY;AAC3C,QAAI,CAACrE;AACH;AAGF,IADgB,MAAMP,EAAgBO,CAAiB,KAErDC,EAAqB,IAAI;AAAA,EAE7B,GAEMqE,IACJzE,MAAiB,SACb;AAAA,IACE,UAAUc;AAAA,IACV,aAAazB,EAAoB,KAAK,kBAAkB;AAAA,IACxD,WAAWwB,EAAW;AAAA,EAAA,IAExBb,MAAiB,WACf;AAAA,IACE,UAAUkB;AAAA,IACV,aAAa5B,EAAsB,KAAK,kBAAkB;AAAA,IAC1D,WAAW2B,EAAa;AAAA,EAAA,IAE1B,MAEFyD,KAAa,YAAY;AAC7B,QAAI,CAACD;AACH;AAGF,UAAME,IAAe,MAAMF,EAAoB,SAAA;AAE/C,IAAIE,KACFhF,EAAQgF,CAAY;AAGtB,UAAMC,IAAiB,OAAO,KAAKH,EAAoB,YAAY,UAAU,MAAM,EAAE,SAAS;AAC9F,KAAIE,KAAgB,CAACC,MACnBL,EAAA;AAAA,EAEJ,GAEMM,KAAeJ,GAAqB,aAAa;AAEvD,SACE,gBAAAzF,EAAC+E,GAAA,EAAK,eAAc,UAAS,KAAK,IAChC,UAAA;AAAA,IAAA,gBAAA/E,EAAC+E,KAAK,eAAc,UAAS,KAAK,GAAG,YAAW,cAC9C,UAAA;AAAA,MAAA,gBAAA7E,EAACP,EAAW,SAAX,EAAmB,IAAG,MAAK,UAAS,MAClC,UAAA,EAAE,OAAO,EAAA,CACZ;AAAA,MACA,gBAAAO,EAACP,EAAW,MAAX,EAAgB,SAAQ,cAAc,UAAA,EAAE,aAAa,EAAA,CAAE;AAAA,IAAA,GAC1D;AAAA,IAEA,gBAAAO;AAAA,MAACP,EAAW;AAAA,MAAX;AAAA,QACC,QACE,gBAAAO;AAAA,UAACP,EAAW;AAAA,UAAX;AAAA,YACC,OAAO,EAAE,qBAAqB;AAAA,YAC9B,QACEiC,IACE,gBAAA1B;AAAA,cAACP,EAAW;AAAA,cAAX;AAAA,gBACC,SAAQ;AAAA,gBACR,SAAS,MAAM;AACb,kBAAAe,EAA0B,MAAS,GACnCO,EAAgB,MAAM;AAAA,gBACxB;AAAA,gBACA,WAAWY,EAAW;AAAA,gBAErB,YAAE,SAAS;AAAA,cAAA;AAAA,YAAA,IAEZ;AAAA,UAAA;AAAA,QAAA;AAAA,QAIV,QACE,gBAAA3B;AAAA,UAACP,EAAW;AAAA,UAAX;AAAA,YACC,SAAQ;AAAA,YACR,SAAS,MAAM;AACb,cAAAe,EAA0B,MAAS,GACnCO,EAAgB,QAAQ;AAAA,YAC1B;AAAA,YACA,WAAWgB,EAAa;AAAA,YAEvB,YAAE,WAAW;AAAA,UAAA;AAAA,QAAA;AAAA,QAIlB,UAAA,gBAAAjC,EAAC+E,GAAA,EAAK,eAAc,UAAS,KAAK,IAC/B,UAAA;AAAA,UAAAnD,IACC,gBAAA5B,EAAC+E,GAAA,EAAK,eAAc,UAAS,KAAK,GAChC,UAAA;AAAA,YAAA,gBAAA/E,EAAC8F,IAAA,EACC,UAAA;AAAA,cAAA,gBAAA5F,EAACP,EAAW,MAAX,EAAgB,QAAO,UACrB,UAAAqF,EAAuBpD,CAAW,GACrC;AAAA,cACA,gBAAA1B,EAACP,EAAW,MAAX,EAAgB,QAAO,UAAU,UAAAsF,EAAgBrD,CAAW,EAAA,CAAE;AAAA,YAAA,GACjE;AAAA,YACCA,EAAY,gBACX,gBAAA1B,EAACP,EAAW,MAAX,EAAgB,SAAQ,cACtB,UAAA,EAAE,gBAAgB;AAAA,cACjB,MAAMiF,EAAuBhD,EAAY,cAAc,UAAU;AAAA,YAAA,CAClE,GACH,IACE;AAAA,UAAA,GACN,IAEA,gBAAA1B,EAACP,EAAW,MAAX,EAAiB,UAAAD,EAAI,WAAW,GAAE;AAAA,UAEpC0D,IACC,gBAAAlD,EAACP,EAAW,OAAX,EAAiB,QAAO,WAAU,OAAO,EAAE,oBAAoB,GAC9D,4BAACA,EAAW,MAAX,EAAgB,SAAQ,cACtB,YAAE,4BAA4B;AAAA,YAC7B,iBAAiB8D;AAAA,YACjB,YAAYsC,EAA6B3C,CAAoB;AAAA,YAC7D,eAAeA,EAAqB,gBAChCwB,EAAuBxB,EAAqB,cAAc,SAAA,CAAU,IACpE;AAAA,YACJ,eAAe,EAAE,aAAa,GAAA;AAAA,UAAM,CACrC,EAAA,CACH,EAAA,CACF,IACE;AAAA,QAAA,EAAA,CACN;AAAA,MAAA;AAAA,IAAA;AAAA,IAGF,gBAAApD,EAAC+E,GAAA,EAAK,eAAc,UAAS,KAAK,IAChC,UAAA;AAAA,MAAA,gBAAA7E,EAACP,EAAW,SAAX,EAAmB,IAAG,MAAK,UAAS,MAClC,UAAA,EAAE,qBAAqB,EAAA,CAC1B;AAAA,wBACCqG,IAAA,EAAS,OAAO,EAAE,qBAAqB,GAAI,GAAGnB,GAAA,CAAiB;AAAA,IAAA,GAClE;AAAA,IAEA,gBAAA3E,EAAC+F,IAAA,EACC,UAAA,gBAAA/F,EAACP,EAAW,QAAX,EAAkB,SAAQ,aAAY,SAASkB,GAC7C,UAAA,EAAE,SAAS,GACd,GACF;AAAA,IAEA,gBAAAX;AAAA,MAACP,EAAW;AAAA,MAAX;AAAA,QACC,QAAQqB,MAAiB;AAAA,QACzB,SAASuE;AAAA,QACT,4BAA4B;AAAA,QAC5B,cAAclE;AAAA,QACd,0BACG0D,GAAA,EAAK,eAAc,OAAM,KAAK,IAAI,gBAAe,YAChD,UAAA;AAAA,UAAA,gBAAA7E;AAAA,YAACP,EAAW;AAAA,YAAX;AAAA,cACC,SAAQ;AAAA,cACR,SAAS,MAAM;AACb,gBAAA4F,EAAA;AAAA,cACF;AAAA,cAEC,YAAE,WAAW;AAAA,YAAA;AAAA,UAAA;AAAA,UAEhB,gBAAArF;AAAA,YAACP,EAAW;AAAA,YAAX;AAAA,cACC,SAAQ;AAAA,cACR,SAAS,MAAM;AACb,gBAAK+F,GAAA;AAAA,cACP;AAAA,cACA,WAAWG;AAAA,cAEV,YAAE,WAAW;AAAA,YAAA;AAAA,UAAA;AAAA,QAChB,GACF;AAAA,QAGF,UAAA,gBAAA7F,EAAC+E,GAAA,EAAK,eAAc,UAAS,KAAK,IAChC,UAAA;AAAA,UAAA,gBAAA/E,EAAC+E,GAAA,EAAK,eAAc,UAAS,KAAK,GAChC,UAAA;AAAA,YAAA,gBAAA7E,EAACP,EAAW,SAAX,EAAmB,IAAG,MACpB,UAA0B,EAA1BqB,MAAiB,SAAW,mBAAsB,kBAAN,EAAwB,CACvE;AAAA,YACA,gBAAAd,EAACP,EAAW,MAAX,EAAgB,SAAQ,cACtB,UAA0B,EAA1BqB,MAAiB,SAAW,yBAA4B,wBAAN,EAA8B,CACnF;AAAA,UAAA,GACF;AAAA,UACCA,MAAiB,SAChB,gBAAAd,EAACgG,GAAA,EAAgB,gBAAgB7F,GAC/B,UAAA,gBAAAL;AAAA,YAACmG;AAAA,YAAA;AAAA,cACC,qBAAqB;AAAA,gBACnB,MAAM;AAAA,gBACN,OAAO;AAAA,cAAA;AAAA,cAET,KAAK;AAAA,cAEL,UAAA;AAAA,gBAAA,gBAAAjG;AAAA,kBAACkC;AAAA,kBAAA;AAAA,oBACC,OAAO1C,EAAI,SAAS;AAAA,oBACpB,oBAAoB;AAAA,sBAClB,CAACwD,EAAsB,QAAQ,GAAGxD,EAAI,qBAAqB;AAAA,oBAAA;AAAA,kBAC7D;AAAA,gBAAA;AAAA,gBAEF,gBAAAQ;AAAA,kBAACmC;AAAA,kBAAA;AAAA,oBACC,OAAO3C,EAAI,SAAS;AAAA,oBACpB,oBAAoB;AAAA,sBAClB,CAACwD,EAAsB,QAAQ,GAAGxD,EAAI,qBAAqB;AAAA,oBAAA;AAAA,kBAC7D;AAAA,gBAAA;AAAA,gBAEF,gBAAAQ;AAAA,kBAACoC;AAAA,kBAAA;AAAA,oBACC,OAAO5C,EAAI,MAAM;AAAA,oBACjB,oBAAoB;AAAA,sBAClB,CAACwD,EAAsB,QAAQ,GAAGxD,EAAI,kBAAkB;AAAA,oBAAA;AAAA,kBAC1D;AAAA,gBAAA;AAAA,gBAEF,gBAAAQ;AAAA,kBAACqC;AAAA,kBAAA;AAAA,oBACC,OAAO7C,EAAI,OAAO;AAAA,oBAClB,oBAAoB;AAAA,sBAClB,CAACwD,EAAsB,QAAQ,GAAGxD,EAAI,mBAAmB;AAAA,oBAAA;AAAA,oBAE3D,iBAAiB6B;AAAA,kBAAA;AAAA,gBAAA;AAAA,kCAElBiB,IAAA,EAAQ,OAAO9C,EAAI,KAAK,GAAG,oBAAoBuD,GAAe;AAAA,gBAC/D,gBAAA/C;AAAA,kBAACX;AAAA,kBAAA;AAAA,oBACC,qBAAqBkD;AAAA,oBACrB,UAAUpC;AAAA,oBACV,KAAAX;AAAA,kBAAA;AAAA,gBAAA;AAAA,cACF;AAAA,YAAA;AAAA,UAAA,GAEJ,IACE;AAAA,UACHsB,MAAiB,WAChB,gBAAAd,EAACgG,GAAA,EAAgB,gBAAgB5F,GAC/B,UAAA,gBAAAN;AAAA,YAACmG;AAAA,YAAA;AAAA,cACC,qBAAqB;AAAA,gBACnB,MAAM;AAAA,gBACN,OAAO;AAAA,cAAA;AAAA,cAET,KAAK;AAAA,cAEJ,UAAA;AAAA,gBAAAnD,IACC,gBAAA9C;AAAA,kBAAC8C;AAAA,kBAAA;AAAA,oBACC,OAAO,EAAE,mBAAmB;AAAA,oBAC5B,aAAa,EAAE,iBAAiB;AAAA,oBAChC,oBAAoBG;AAAA,oBACpB,iBAAiB5B;AAAA,kBAAA;AAAA,gBAAA,IAEjB;AAAA,gBACJ,gBAAArB;AAAA,kBAACwC;AAAA,kBAAA;AAAA,oBACC,OAAOhD,EAAI,SAAS;AAAA,oBACpB,oBAAoB;AAAA,sBAClB,CAACwD,EAAsB,QAAQ,GAAGxD,EAAI,qBAAqB;AAAA,oBAAA;AAAA,kBAC7D;AAAA,gBAAA;AAAA,gBAEF,gBAAAQ;AAAA,kBAACyC;AAAA,kBAAA;AAAA,oBACC,OAAOjD,EAAI,SAAS;AAAA,oBACpB,oBAAoB;AAAA,sBAClB,CAACwD,EAAsB,QAAQ,GAAGxD,EAAI,qBAAqB;AAAA,oBAAA;AAAA,kBAC7D;AAAA,gBAAA;AAAA,gBAEF,gBAAAQ;AAAA,kBAAC0C;AAAA,kBAAA;AAAA,oBACC,OAAOlD,EAAI,MAAM;AAAA,oBACjB,oBAAoB;AAAA,sBAClB,CAACwD,EAAsB,QAAQ,GAAGxD,EAAI,kBAAkB;AAAA,oBAAA;AAAA,kBAC1D;AAAA,gBAAA;AAAA,gBAEF,gBAAAQ;AAAA,kBAAC2C;AAAA,kBAAA;AAAA,oBACC,OAAOnD,EAAI,OAAO;AAAA,oBAClB,oBAAoB;AAAA,sBAClB,CAACwD,EAAsB,QAAQ,GAAGxD,EAAI,mBAAmB;AAAA,oBAAA;AAAA,oBAE3D,iBAAiB6B;AAAA,kBAAA;AAAA,gBAAA;AAAA,kCAElBuB,IAAA,EAAU,OAAOpD,EAAI,KAAK,GAAG,oBAAoBuD,GAAe;AAAA,gBACjE,gBAAA/C;AAAA,kBAACX;AAAA,kBAAA;AAAA,oBACC,qBAAqBwD;AAAA,oBACrB,UAAUzC;AAAA,oBACV,KAAAZ;AAAA,kBAAA;AAAA,gBAAA;AAAA,cACF;AAAA,YAAA;AAAA,UAAA,GAEJ,IACE;AAAA,QAAA,EAAA,CACN;AAAA,MAAA;AAAA,IAAA;AAAA,IAGF,gBAAAQ;AAAA,MAACP,EAAW;AAAA,MAAX;AAAA,QACC,QAAQwB,MAAsB;AAAA,QAC9B,SAAS,MAAM;AACb,UAAAC,EAAqB,IAAI;AAAA,QAC3B;AAAA,QACA,4BAA4B;AAAA,QAC5B,0BACG2D,GAAA,EAAK,eAAc,OAAM,KAAK,IAAI,gBAAe,YAChD,UAAA;AAAA,UAAA,gBAAA7E;AAAA,YAACP,EAAW;AAAA,YAAX;AAAA,cACC,SAAQ;AAAA,cACR,SAAS,MAAM;AACb,gBAAAyB,EAAqB,IAAI;AAAA,cAC3B;AAAA,cAEC,YAAE,WAAW;AAAA,YAAA;AAAA,UAAA;AAAA,UAEhB,gBAAAlB;AAAA,YAACP,EAAW;AAAA,YAAX;AAAA,cACC,SAAQ;AAAA,cACR,SAAS,MAAM;AACb,gBAAK6F,GAAA;AAAA,cACP;AAAA,cACA,WAAW1E;AAAA,cAEV,YAAE,uBAAuB;AAAA,YAAA;AAAA,UAAA;AAAA,QAC5B,GACF;AAAA,QAGF,UAAA,gBAAAd,EAAC+E,GAAA,EAAK,eAAc,UAAS,KAAK,IAChC,UAAA;AAAA,UAAA,gBAAA7E,EAACP,EAAW,SAAX,EAAmB,IAAG,MAAM,UAAA,EAAE,kBAAkB,GAAE;AAAA,4BAClDA,EAAW,MAAX,EAAgB,SAAQ,cACtB,UAAA4D,IACC,gBAAArD;AAAA,YAACC;AAAA,YAAA;AAAA,cACC;AAAA,cACA,SAAQ;AAAA,cACR,QAAQ;AAAA,gBACN,SAAS4F,EAA6BxC,CAAqB;AAAA,cAAA;AAAA,cAE7D,YAAY;AAAA,gBACV,0BAAS5D,EAAW,MAAX,EAAgB,QAAO,UAAS,IAAG,OAAA,CAAO;AAAA,cAAA;AAAA,cAErD,UAAU,EAAE,eAAe,EAAE,aAAa,KAAM;AAAA,YAAE;AAAA,UAAA,IAElD,KAAA,CACN;AAAA,QAAA,EAAA,CACF;AAAA,MAAA;AAAA,IAAA;AAAA,EACF,GACF;AAEJ;"}
|
|
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 tHa,\n}: {\n CourtesyWithholding: UseHomeAddressFormReady['form']['Fields']['CourtesyWithholding']\n formHook: UseHomeAddressFormReady\n tHa: TFunction<'Employee.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={tHa('courtesyWithholdingLabel')}\n description={\n <>\n {tHa('courtesyWithholdingDescription')}\n <Trans\n t={tHa}\n i18nKey=\"learnMoreCta\"\n components={{\n LearnMoreLink: <Components.Link />,\n }}\n />\n </>\n }\n />\n {courtesyWithholdingEnabled ? (\n <Components.Alert label={tHa('withholdingTitle')} status=\"warning\">\n <Trans t={tHa} i18nKey=\"withholdingNote\" />\n </Components.Alert>\n ) : null}\n </>\n )\n}\n\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}\n\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}: HomeAddressViewProps) {\n const { t } = useTranslation('Employee.HomeAddress.Management')\n const { t: tHa } = useTranslation('Employee.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 data: { homeAddress },\n status: editStatus,\n actions: { onSubmit: editOnSubmit },\n form: editForm,\n } = editHomeAddressForm\n\n const homeAddresses = employeeHomeAddresses\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]: tHa('validations.zip'),\n [HomeAddressErrorCodes.INVALID_ZIP]: tHa('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 }\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 }\n : addressModal === 'create'\n ? {\n onSubmit: createOnSubmit,\n isPending: createStatus.isPending,\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 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 homeAddress ? (\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 {homeAddress ? (\n <Flex flexDirection=\"column\" gap={4}>\n <FlexItem>\n <Components.Text weight=\"medium\">\n {formatStreetForDisplay(homeAddress)}\n </Components.Text>\n <Components.Text weight=\"medium\">{getCityStateZip(homeAddress)}</Components.Text>\n </FlexItem>\n {homeAddress.effectiveDate ? (\n <Components.Text variant=\"supporting\">\n {t('currentSince', {\n date: formatDateLongWithYear(homeAddress.effectiveDate.toString()),\n })}\n </Components.Text>\n ) : null}\n </Flex>\n ) : (\n <Components.Text>{tHa('formTitle')}</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 {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={tHa('street1')}\n validationMessages={{\n [HomeAddressErrorCodes.REQUIRED]: tHa('validations.street1'),\n }}\n />\n <EditStreet2\n label={tHa('street2')}\n validationMessages={{\n [HomeAddressErrorCodes.REQUIRED]: tHa('validations.street1'),\n }}\n />\n <EditCity\n label={tHa('city')}\n validationMessages={{\n [HomeAddressErrorCodes.REQUIRED]: tHa('validations.city'),\n }}\n />\n <EditState\n label={tHa('state')}\n validationMessages={{\n [HomeAddressErrorCodes.REQUIRED]: tHa('validations.state'),\n }}\n portalContainer={addressModalPortal}\n />\n <EditZip label={tHa('zip')} validationMessages={zipValidation} />\n <HomeAddressCourtesyWithholdingBlock\n CourtesyWithholding={EditCourtesyWithholding}\n formHook={editHomeAddressForm}\n tHa={tHa}\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={tHa('street1')}\n validationMessages={{\n [HomeAddressErrorCodes.REQUIRED]: tHa('validations.street1'),\n }}\n />\n <CreateStreet2\n label={tHa('street2')}\n validationMessages={{\n [HomeAddressErrorCodes.REQUIRED]: tHa('validations.street1'),\n }}\n />\n <CreateCity\n label={tHa('city')}\n validationMessages={{\n [HomeAddressErrorCodes.REQUIRED]: tHa('validations.city'),\n }}\n />\n <CreateState\n label={tHa('state')}\n validationMessages={{\n [HomeAddressErrorCodes.REQUIRED]: tHa('validations.state'),\n }}\n portalContainer={addressModalPortal}\n />\n <CreateZip label={tHa('zip')} validationMessages={zipValidation} />\n <HomeAddressCourtesyWithholdingBlock\n CourtesyWithholding={CreateCourtesyWithholding}\n formHook={createHomeAddressForm}\n tHa={tHa}\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","tHa","Components","useComponentContext","control","courtesyWithholdingEnabled","useWatch","jsxs","Fragment","jsx","Trans","HomeAddressView","editHomeAddressForm","createHomeAddressForm","employeeHomeAddresses","employeeDisplayName","editingHomeAddressUuid","onEditAddressTargetChange","onSaved","onConfirmDelete","onBack","isDeletePending","useTranslation","addressModal","setAddressModal","useState","deleteConfirmUuid","setDeleteConfirmUuid","addressModalContainerRef","useRef","addressModalPortal","setAddressModalPortal","useLayoutEffect","syncPortal","id","homeAddress","editStatus","editOnSubmit","editForm","homeAddresses","createStatus","createOnSubmit","createForm","EditStreet1","EditStreet2","EditCity","EditState","EditZip","EditCourtesyWithholding","EditEffectiveDate","CreateStreet1","CreateStreet2","CreateCity","CreateState","CreateZip","CreateCourtesyWithholding","CreateEffectiveDate","zipValidation","HomeAddressErrorCodes","startDateValidation","pendingFutureAddress","useMemo","getPendingFutureHomeAddress","addressForDeleteModal","a","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","SDKFormProvider","Grid"],"mappings":"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"}
|
|
@@ -1,112 +1,113 @@
|
|
|
1
|
-
import { useState as
|
|
2
|
-
import { useEmployeeAddressesDeleteMutation as
|
|
3
|
-
import { useEmployeeAddressesGet as
|
|
4
|
-
import { useEmployeesGet as
|
|
5
|
-
import { useBaseSubmit as
|
|
1
|
+
import { useState as U, useMemo as _ } from "react";
|
|
2
|
+
import { useEmployeeAddressesDeleteMutation as N } from "@gusto/embedded-api/react-query/employeeAddressesDelete";
|
|
3
|
+
import { useEmployeeAddressesGet as T } from "@gusto/embedded-api/react-query/employeeAddressesGet";
|
|
4
|
+
import { useEmployeesGet as C } from "@gusto/embedded-api/react-query/employeesGet";
|
|
5
|
+
import { useBaseSubmit as G } from "../../../Base/useBaseSubmit.js";
|
|
6
6
|
import { useHomeAddressForm as y } from "../../Profile/shared/useHomeAddressForm/useHomeAddressForm.js";
|
|
7
|
-
import { composeErrorHandler as
|
|
8
|
-
import { firstLastName as
|
|
9
|
-
import { SDKInternalError as
|
|
10
|
-
import { componentEvents as
|
|
11
|
-
function
|
|
7
|
+
import { composeErrorHandler as O } from "../../../../partner-hook-utils/composeErrorHandler.js";
|
|
8
|
+
import { firstLastName as Q } from "../../../../helpers/formattedStrings.js";
|
|
9
|
+
import { SDKInternalError as u } from "../../../../types/sdkError.js";
|
|
10
|
+
import { componentEvents as q } from "../../../../shared/constants.js";
|
|
11
|
+
function ee(e) {
|
|
12
12
|
return e.isLoading ? !1 : !e.status.isEmployeeError;
|
|
13
13
|
}
|
|
14
|
-
function
|
|
14
|
+
function x(e, i) {
|
|
15
15
|
if (e.isLoading)
|
|
16
|
-
throw new
|
|
17
|
-
if (
|
|
18
|
-
throw new
|
|
16
|
+
throw new u("Edit home address form is still loading");
|
|
17
|
+
if (i.isLoading)
|
|
18
|
+
throw new u("Create home address form is still loading");
|
|
19
19
|
return {
|
|
20
20
|
editHomeAddressForm: e,
|
|
21
|
-
createHomeAddressForm:
|
|
21
|
+
createHomeAddressForm: i
|
|
22
22
|
};
|
|
23
23
|
}
|
|
24
|
-
function
|
|
24
|
+
function se({
|
|
25
25
|
employeeId: e,
|
|
26
|
-
onEvent:
|
|
26
|
+
onEvent: i
|
|
27
27
|
}) {
|
|
28
28
|
const {
|
|
29
29
|
baseSubmitHandler: H,
|
|
30
30
|
error: h,
|
|
31
31
|
setError: L
|
|
32
|
-
} =
|
|
32
|
+
} = G("Employee.HomeAddress.Management"), c = N(), [w, D] = U(void 0), f = T({ employeeId: e }, { enabled: !!e }), r = f.data?.employeeAddressList, F = r?.find((s) => s.active) ?? r?.[0], t = w ?? F?.uuid, S = t ? r?.find((s) => s.uuid === t) : void 0, d = y({
|
|
33
33
|
employeeId: e,
|
|
34
|
-
homeAddressUuid:
|
|
35
|
-
|
|
36
|
-
|
|
34
|
+
homeAddressUuid: t,
|
|
35
|
+
initialAddress: S,
|
|
36
|
+
withEffectiveDateField: !0
|
|
37
|
+
}), n = y({
|
|
37
38
|
employeeId: e,
|
|
38
39
|
homeAddressUuid: void 0,
|
|
39
40
|
withEffectiveDateField: !0
|
|
40
|
-
}),
|
|
41
|
-
const s =
|
|
42
|
-
return s ?
|
|
41
|
+
}), o = C({ employeeId: e }, { enabled: !!e }), l = _(() => {
|
|
42
|
+
const s = o.data?.employee;
|
|
43
|
+
return s ? Q({
|
|
43
44
|
first_name: s.firstName,
|
|
44
45
|
last_name: s.lastName
|
|
45
46
|
}).trim() : "";
|
|
46
|
-
}, [
|
|
47
|
-
[
|
|
47
|
+
}, [o.data?.employee]), a = O(
|
|
48
|
+
[o, f, d, n],
|
|
48
49
|
{ submitError: h, setSubmitError: L }
|
|
49
50
|
), E = {
|
|
50
|
-
setEditAddressTarget:
|
|
51
|
+
setEditAddressTarget: D,
|
|
51
52
|
confirmDeleteHomeAddress: async (s) => {
|
|
52
|
-
const
|
|
53
|
+
const R = r?.find((m) => m.uuid === s) ?? null;
|
|
53
54
|
let g = !1;
|
|
54
55
|
return await H(
|
|
55
|
-
{ homeAddressUuid: s, snapshot:
|
|
56
|
-
async ({ homeAddressUuid:
|
|
57
|
-
const p = r?.find((P) => P.uuid ===
|
|
56
|
+
{ homeAddressUuid: s, snapshot: R },
|
|
57
|
+
async ({ homeAddressUuid: m, snapshot: A }) => {
|
|
58
|
+
const p = r?.find((P) => P.uuid === m);
|
|
58
59
|
if (!p)
|
|
59
|
-
throw new
|
|
60
|
+
throw new u("Home address not found");
|
|
60
61
|
if (p.active === !0)
|
|
61
|
-
throw new
|
|
62
|
-
await
|
|
63
|
-
request: { homeAddressUuid:
|
|
64
|
-
}), g = !0, A &&
|
|
62
|
+
throw new u("Cannot delete the active home address");
|
|
63
|
+
await c.mutateAsync({
|
|
64
|
+
request: { homeAddressUuid: m }
|
|
65
|
+
}), g = !0, A && i(q.EMPLOYEE_HOME_ADDRESS_DELETED, A);
|
|
65
66
|
}
|
|
66
67
|
), g;
|
|
67
68
|
}
|
|
68
|
-
},
|
|
69
|
+
}, b = {
|
|
69
70
|
employeeDisplayName: l,
|
|
70
71
|
employeeHomeAddresses: r,
|
|
71
|
-
editingHomeAddressUuid:
|
|
72
|
-
editHomeAddressForm:
|
|
73
|
-
createHomeAddressForm:
|
|
72
|
+
editingHomeAddressUuid: t,
|
|
73
|
+
editHomeAddressForm: d,
|
|
74
|
+
createHomeAddressForm: n
|
|
74
75
|
};
|
|
75
|
-
if (
|
|
76
|
-
return { isLoading: !0, errorHandling:
|
|
77
|
-
if (
|
|
76
|
+
if (o.isLoading)
|
|
77
|
+
return { isLoading: !0, errorHandling: a };
|
|
78
|
+
if (o.isError)
|
|
78
79
|
return {
|
|
79
80
|
isLoading: !1,
|
|
80
|
-
data:
|
|
81
|
+
data: b,
|
|
81
82
|
status: {
|
|
82
|
-
isDeletePending:
|
|
83
|
+
isDeletePending: c.isPending,
|
|
83
84
|
isEmployeeError: !0
|
|
84
85
|
},
|
|
85
|
-
errorHandling:
|
|
86
|
+
errorHandling: a,
|
|
86
87
|
actions: E
|
|
87
88
|
};
|
|
88
|
-
if (
|
|
89
|
-
return { isLoading: !0, errorHandling:
|
|
90
|
-
const { editHomeAddressForm:
|
|
89
|
+
if (d.isLoading || n.isLoading)
|
|
90
|
+
return { isLoading: !0, errorHandling: a };
|
|
91
|
+
const { editHomeAddressForm: v, createHomeAddressForm: M } = x(d, n);
|
|
91
92
|
return {
|
|
92
93
|
isLoading: !1,
|
|
93
94
|
data: {
|
|
94
95
|
employeeDisplayName: l,
|
|
95
96
|
employeeHomeAddresses: r,
|
|
96
|
-
editingHomeAddressUuid:
|
|
97
|
-
editHomeAddressForm:
|
|
97
|
+
editingHomeAddressUuid: t,
|
|
98
|
+
editHomeAddressForm: v,
|
|
98
99
|
createHomeAddressForm: M
|
|
99
100
|
},
|
|
100
101
|
status: {
|
|
101
|
-
isDeletePending:
|
|
102
|
+
isDeletePending: c.isPending,
|
|
102
103
|
isEmployeeError: !1
|
|
103
104
|
},
|
|
104
|
-
errorHandling:
|
|
105
|
+
errorHandling: a,
|
|
105
106
|
actions: E
|
|
106
107
|
};
|
|
107
108
|
}
|
|
108
109
|
export {
|
|
109
|
-
|
|
110
|
-
|
|
110
|
+
ee as isUseHomeAddressManagementSuccess,
|
|
111
|
+
se as useHomeAddressManagement
|
|
111
112
|
};
|
|
112
113
|
//# sourceMappingURL=useHomeAddressManagement.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useHomeAddressManagement.js","sources":["../../../../../src/components/Employee/HomeAddress/management/useHomeAddressManagement.tsx"],"sourcesContent":["import { useMemo, useState } from 'react'\nimport type { EmployeeAddress } from '@gusto/embedded-api/models/components/employeeaddress'\nimport { useEmployeeAddressesDeleteMutation } from '@gusto/embedded-api/react-query/employeeAddressesDelete'\nimport { useEmployeeAddressesGet } from '@gusto/embedded-api/react-query/employeeAddressesGet'\nimport { useEmployeesGet } from '@gusto/embedded-api/react-query/employeesGet'\nimport type { OnEventType } from '@/components/Base/useBase'\nimport { useBaseSubmit } from '@/components/Base/useBaseSubmit'\nimport { useHomeAddressForm } from '@/components/Employee/Profile/shared/useHomeAddressForm'\nimport type {\n UseHomeAddressFormReady,\n UseHomeAddressFormResult,\n} from '@/components/Employee/Profile/shared/useHomeAddressForm'\nimport { composeErrorHandler } from '@/partner-hook-utils/composeErrorHandler'\nimport type {\n BaseHookReady,\n HookErrorHandling,\n HookLoadingResult,\n} from '@/partner-hook-utils/types'\nimport { firstLastName } from '@/helpers/formattedStrings'\nimport { SDKInternalError } from '@/types/sdkError'\nimport { componentEvents, type EventType } from '@/shared/constants'\n\nexport interface UseHomeAddressManagementParams {\n employeeId: string\n onEvent: OnEventType<EventType, unknown>\n}\n\nexport interface UseHomeAddressManagementDataPendingForms extends Record<string, unknown> {\n employeeDisplayName: string\n employeeHomeAddresses: EmployeeAddress[] | undefined\n editingHomeAddressUuid: string | undefined\n editHomeAddressForm: UseHomeAddressFormResult\n createHomeAddressForm: UseHomeAddressFormResult\n}\n\nexport interface UseHomeAddressManagementDataReady extends Record<string, unknown> {\n employeeDisplayName: string\n employeeHomeAddresses: EmployeeAddress[] | undefined\n editingHomeAddressUuid: string | undefined\n editHomeAddressForm: UseHomeAddressFormReady\n createHomeAddressForm: UseHomeAddressFormReady\n}\n\nexport interface UseHomeAddressManagementStatusEmployeeError extends Record<string, unknown> {\n isDeletePending: boolean\n isEmployeeError: true\n}\n\nexport interface UseHomeAddressManagementStatusSuccess extends Record<string, unknown> {\n isDeletePending: boolean\n isEmployeeError: false\n}\n\nexport interface UseHomeAddressManagementActions {\n setEditAddressTarget: (homeAddressUuid: string | undefined) => void\n confirmDeleteHomeAddress: (homeAddressUuid: string) => Promise<boolean>\n}\n\nexport interface UseHomeAddressManagementReadyEmployeeError extends BaseHookReady<\n UseHomeAddressManagementDataPendingForms,\n UseHomeAddressManagementStatusEmployeeError\n> {\n actions: UseHomeAddressManagementActions\n}\n\nexport interface UseHomeAddressManagementReadySuccess extends BaseHookReady<\n UseHomeAddressManagementDataReady,\n UseHomeAddressManagementStatusSuccess\n> {\n actions: UseHomeAddressManagementActions\n}\n\nexport type UseHomeAddressManagementReady =\n | UseHomeAddressManagementReadyEmployeeError\n | UseHomeAddressManagementReadySuccess\n\nexport type UseHomeAddressManagementResult = HookLoadingResult | UseHomeAddressManagementReady\n\nexport function isUseHomeAddressManagementSuccess(\n value: UseHomeAddressManagementResult,\n): value is UseHomeAddressManagementReadySuccess {\n if (value.isLoading) {\n return false\n }\n return !value.status.isEmployeeError\n}\n\nfunction homeAddressFormsReady(\n editHomeAddressForm: UseHomeAddressFormResult,\n createHomeAddressForm: UseHomeAddressFormResult,\n): Pick<UseHomeAddressManagementDataReady, 'editHomeAddressForm' | 'createHomeAddressForm'> {\n if (editHomeAddressForm.isLoading) {\n throw new SDKInternalError('Edit home address form is still loading')\n }\n if (createHomeAddressForm.isLoading) {\n throw new SDKInternalError('Create home address form is still loading')\n }\n return {\n editHomeAddressForm,\n createHomeAddressForm,\n }\n}\n\nexport function useHomeAddressManagement({\n employeeId,\n onEvent,\n}: UseHomeAddressManagementParams): UseHomeAddressManagementResult {\n const {\n baseSubmitHandler,\n error: rootSubmitError,\n setError: setRootSubmitError,\n } = useBaseSubmit('Employee.HomeAddress.Management')\n const deleteHomeAddressMutation = useEmployeeAddressesDeleteMutation()\n\n const [editTargetUuid, setEditAddressTarget] = useState<string | undefined>(undefined)\n\n const homeAddressesQuery = useEmployeeAddressesGet({ employeeId }, { enabled: !!employeeId })\n const employeeHomeAddresses = homeAddressesQuery.data?.employeeAddressList\n const currentHomeAddress =\n employeeHomeAddresses?.find(a => a.active) ?? employeeHomeAddresses?.[0]\n\n const editingHomeAddressUuid = editTargetUuid ?? currentHomeAddress?.uuid\n\n const editHomeAddressForm = useHomeAddressForm({\n employeeId,\n homeAddressUuid: editingHomeAddressUuid,\n withEffectiveDateField: false,\n })\n const createHomeAddressForm = useHomeAddressForm({\n employeeId,\n homeAddressUuid: undefined,\n withEffectiveDateField: true,\n })\n\n const employeeQuery = useEmployeesGet({ employeeId }, { enabled: !!employeeId })\n\n const employeeDisplayName = useMemo(() => {\n const employee = employeeQuery.data?.employee\n if (!employee) {\n return ''\n }\n return firstLastName({\n first_name: employee.firstName,\n last_name: employee.lastName,\n }).trim()\n }, [employeeQuery.data?.employee])\n\n const errorHandling: HookErrorHandling = composeErrorHandler(\n [employeeQuery, homeAddressesQuery, editHomeAddressForm, createHomeAddressForm],\n { submitError: rootSubmitError, setSubmitError: setRootSubmitError },\n )\n\n const confirmDeleteHomeAddress = async (homeAddressUuid: string): Promise<boolean> => {\n const snapshot = employeeHomeAddresses?.find(a => a.uuid === homeAddressUuid) ?? null\n\n let succeeded = false\n await baseSubmitHandler(\n { homeAddressUuid, snapshot },\n async ({ homeAddressUuid: uuid, snapshot: snap }) => {\n const target = employeeHomeAddresses?.find(a => a.uuid === uuid)\n if (!target) {\n throw new SDKInternalError('Home address not found')\n }\n if (target.active === true) {\n throw new SDKInternalError('Cannot delete the active home address')\n }\n\n await deleteHomeAddressMutation.mutateAsync({\n request: { homeAddressUuid: uuid },\n })\n succeeded = true\n if (snap) {\n onEvent(componentEvents.EMPLOYEE_HOME_ADDRESS_DELETED, snap)\n }\n },\n )\n return succeeded\n }\n\n const actions: UseHomeAddressManagementActions = {\n setEditAddressTarget,\n confirmDeleteHomeAddress,\n }\n\n const dataPayloadPendingForms: UseHomeAddressManagementDataPendingForms = {\n employeeDisplayName,\n employeeHomeAddresses,\n editingHomeAddressUuid,\n editHomeAddressForm,\n createHomeAddressForm,\n }\n\n if (employeeQuery.isLoading) {\n return { isLoading: true, errorHandling }\n }\n\n if (employeeQuery.isError) {\n return {\n isLoading: false,\n data: dataPayloadPendingForms,\n status: {\n isDeletePending: deleteHomeAddressMutation.isPending,\n isEmployeeError: true,\n },\n errorHandling,\n actions,\n }\n }\n\n const isFormsLoading = editHomeAddressForm.isLoading || createHomeAddressForm.isLoading\n if (isFormsLoading) {\n return { isLoading: true, errorHandling }\n }\n\n const { editHomeAddressForm: editReady, createHomeAddressForm: createReady } =\n homeAddressFormsReady(editHomeAddressForm, createHomeAddressForm)\n\n const dataReady: UseHomeAddressManagementDataReady = {\n employeeDisplayName,\n employeeHomeAddresses,\n editingHomeAddressUuid,\n editHomeAddressForm: editReady,\n createHomeAddressForm: createReady,\n }\n\n return {\n isLoading: false,\n data: dataReady,\n status: {\n isDeletePending: deleteHomeAddressMutation.isPending,\n isEmployeeError: false,\n },\n errorHandling,\n actions,\n }\n}\n"],"names":["isUseHomeAddressManagementSuccess","value","homeAddressFormsReady","editHomeAddressForm","createHomeAddressForm","SDKInternalError","useHomeAddressManagement","employeeId","onEvent","baseSubmitHandler","rootSubmitError","setRootSubmitError","useBaseSubmit","deleteHomeAddressMutation","useEmployeeAddressesDeleteMutation","editTargetUuid","setEditAddressTarget","useState","homeAddressesQuery","useEmployeeAddressesGet","employeeHomeAddresses","currentHomeAddress","a","editingHomeAddressUuid","useHomeAddressForm","employeeQuery","useEmployeesGet","employeeDisplayName","useMemo","employee","firstLastName","errorHandling","composeErrorHandler","actions","homeAddressUuid","snapshot","succeeded","uuid","snap","target","componentEvents","dataPayloadPendingForms","editReady","createReady"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useHomeAddressManagement.js","sources":["../../../../../src/components/Employee/HomeAddress/management/useHomeAddressManagement.tsx"],"sourcesContent":["import { useMemo, useState } from 'react'\nimport type { EmployeeAddress } from '@gusto/embedded-api/models/components/employeeaddress'\nimport { useEmployeeAddressesDeleteMutation } from '@gusto/embedded-api/react-query/employeeAddressesDelete'\nimport { useEmployeeAddressesGet } from '@gusto/embedded-api/react-query/employeeAddressesGet'\nimport { useEmployeesGet } from '@gusto/embedded-api/react-query/employeesGet'\nimport type { OnEventType } from '@/components/Base/useBase'\nimport { useBaseSubmit } from '@/components/Base/useBaseSubmit'\nimport { useHomeAddressForm } from '@/components/Employee/Profile/shared/useHomeAddressForm'\nimport type {\n UseHomeAddressFormReady,\n UseHomeAddressFormResult,\n} from '@/components/Employee/Profile/shared/useHomeAddressForm'\nimport { composeErrorHandler } from '@/partner-hook-utils/composeErrorHandler'\nimport type {\n BaseHookReady,\n HookErrorHandling,\n HookLoadingResult,\n} from '@/partner-hook-utils/types'\nimport { firstLastName } from '@/helpers/formattedStrings'\nimport { SDKInternalError } from '@/types/sdkError'\nimport { componentEvents, type EventType } from '@/shared/constants'\n\nexport interface UseHomeAddressManagementParams {\n employeeId: string\n onEvent: OnEventType<EventType, unknown>\n}\n\nexport interface UseHomeAddressManagementDataPendingForms extends Record<string, unknown> {\n employeeDisplayName: string\n employeeHomeAddresses: EmployeeAddress[] | undefined\n editingHomeAddressUuid: string | undefined\n editHomeAddressForm: UseHomeAddressFormResult\n createHomeAddressForm: UseHomeAddressFormResult\n}\n\nexport interface UseHomeAddressManagementDataReady extends Record<string, unknown> {\n employeeDisplayName: string\n employeeHomeAddresses: EmployeeAddress[] | undefined\n editingHomeAddressUuid: string | undefined\n editHomeAddressForm: UseHomeAddressFormReady\n createHomeAddressForm: UseHomeAddressFormReady\n}\n\nexport interface UseHomeAddressManagementStatusEmployeeError extends Record<string, unknown> {\n isDeletePending: boolean\n isEmployeeError: true\n}\n\nexport interface UseHomeAddressManagementStatusSuccess extends Record<string, unknown> {\n isDeletePending: boolean\n isEmployeeError: false\n}\n\nexport interface UseHomeAddressManagementActions {\n setEditAddressTarget: (homeAddressUuid: string | undefined) => void\n confirmDeleteHomeAddress: (homeAddressUuid: string) => Promise<boolean>\n}\n\nexport interface UseHomeAddressManagementReadyEmployeeError extends BaseHookReady<\n UseHomeAddressManagementDataPendingForms,\n UseHomeAddressManagementStatusEmployeeError\n> {\n actions: UseHomeAddressManagementActions\n}\n\nexport interface UseHomeAddressManagementReadySuccess extends BaseHookReady<\n UseHomeAddressManagementDataReady,\n UseHomeAddressManagementStatusSuccess\n> {\n actions: UseHomeAddressManagementActions\n}\n\nexport type UseHomeAddressManagementReady =\n | UseHomeAddressManagementReadyEmployeeError\n | UseHomeAddressManagementReadySuccess\n\nexport type UseHomeAddressManagementResult = HookLoadingResult | UseHomeAddressManagementReady\n\nexport function isUseHomeAddressManagementSuccess(\n value: UseHomeAddressManagementResult,\n): value is UseHomeAddressManagementReadySuccess {\n if (value.isLoading) {\n return false\n }\n return !value.status.isEmployeeError\n}\n\nfunction homeAddressFormsReady(\n editHomeAddressForm: UseHomeAddressFormResult,\n createHomeAddressForm: UseHomeAddressFormResult,\n): Pick<UseHomeAddressManagementDataReady, 'editHomeAddressForm' | 'createHomeAddressForm'> {\n if (editHomeAddressForm.isLoading) {\n throw new SDKInternalError('Edit home address form is still loading')\n }\n if (createHomeAddressForm.isLoading) {\n throw new SDKInternalError('Create home address form is still loading')\n }\n return {\n editHomeAddressForm,\n createHomeAddressForm,\n }\n}\n\nexport function useHomeAddressManagement({\n employeeId,\n onEvent,\n}: UseHomeAddressManagementParams): UseHomeAddressManagementResult {\n const {\n baseSubmitHandler,\n error: rootSubmitError,\n setError: setRootSubmitError,\n } = useBaseSubmit('Employee.HomeAddress.Management')\n const deleteHomeAddressMutation = useEmployeeAddressesDeleteMutation()\n\n const [editTargetUuid, setEditAddressTarget] = useState<string | undefined>(undefined)\n\n const homeAddressesQuery = useEmployeeAddressesGet({ employeeId }, { enabled: !!employeeId })\n const employeeHomeAddresses = homeAddressesQuery.data?.employeeAddressList\n const currentHomeAddress =\n employeeHomeAddresses?.find(a => a.active) ?? employeeHomeAddresses?.[0]\n\n const editingHomeAddressUuid = editTargetUuid ?? currentHomeAddress?.uuid\n\n const editingHomeAddressRow = editingHomeAddressUuid\n ? employeeHomeAddresses?.find(a => a.uuid === editingHomeAddressUuid)\n : undefined\n\n const editHomeAddressForm = useHomeAddressForm({\n employeeId,\n homeAddressUuid: editingHomeAddressUuid,\n initialAddress: editingHomeAddressRow,\n withEffectiveDateField: true,\n })\n const createHomeAddressForm = useHomeAddressForm({\n employeeId,\n homeAddressUuid: undefined,\n withEffectiveDateField: true,\n })\n\n const employeeQuery = useEmployeesGet({ employeeId }, { enabled: !!employeeId })\n\n const employeeDisplayName = useMemo(() => {\n const employee = employeeQuery.data?.employee\n if (!employee) {\n return ''\n }\n return firstLastName({\n first_name: employee.firstName,\n last_name: employee.lastName,\n }).trim()\n }, [employeeQuery.data?.employee])\n\n const errorHandling: HookErrorHandling = composeErrorHandler(\n [employeeQuery, homeAddressesQuery, editHomeAddressForm, createHomeAddressForm],\n { submitError: rootSubmitError, setSubmitError: setRootSubmitError },\n )\n\n const confirmDeleteHomeAddress = async (homeAddressUuid: string): Promise<boolean> => {\n const snapshot = employeeHomeAddresses?.find(a => a.uuid === homeAddressUuid) ?? null\n\n let succeeded = false\n await baseSubmitHandler(\n { homeAddressUuid, snapshot },\n async ({ homeAddressUuid: uuid, snapshot: snap }) => {\n const target = employeeHomeAddresses?.find(a => a.uuid === uuid)\n if (!target) {\n throw new SDKInternalError('Home address not found')\n }\n if (target.active === true) {\n throw new SDKInternalError('Cannot delete the active home address')\n }\n\n await deleteHomeAddressMutation.mutateAsync({\n request: { homeAddressUuid: uuid },\n })\n succeeded = true\n if (snap) {\n onEvent(componentEvents.EMPLOYEE_HOME_ADDRESS_DELETED, snap)\n }\n },\n )\n return succeeded\n }\n\n const actions: UseHomeAddressManagementActions = {\n setEditAddressTarget,\n confirmDeleteHomeAddress,\n }\n\n const dataPayloadPendingForms: UseHomeAddressManagementDataPendingForms = {\n employeeDisplayName,\n employeeHomeAddresses,\n editingHomeAddressUuid,\n editHomeAddressForm,\n createHomeAddressForm,\n }\n\n if (employeeQuery.isLoading) {\n return { isLoading: true, errorHandling }\n }\n\n if (employeeQuery.isError) {\n return {\n isLoading: false,\n data: dataPayloadPendingForms,\n status: {\n isDeletePending: deleteHomeAddressMutation.isPending,\n isEmployeeError: true,\n },\n errorHandling,\n actions,\n }\n }\n\n const isFormsLoading = editHomeAddressForm.isLoading || createHomeAddressForm.isLoading\n if (isFormsLoading) {\n return { isLoading: true, errorHandling }\n }\n\n const { editHomeAddressForm: editReady, createHomeAddressForm: createReady } =\n homeAddressFormsReady(editHomeAddressForm, createHomeAddressForm)\n\n const dataReady: UseHomeAddressManagementDataReady = {\n employeeDisplayName,\n employeeHomeAddresses,\n editingHomeAddressUuid,\n editHomeAddressForm: editReady,\n createHomeAddressForm: createReady,\n }\n\n return {\n isLoading: false,\n data: dataReady,\n status: {\n isDeletePending: deleteHomeAddressMutation.isPending,\n isEmployeeError: false,\n },\n errorHandling,\n actions,\n }\n}\n"],"names":["isUseHomeAddressManagementSuccess","value","homeAddressFormsReady","editHomeAddressForm","createHomeAddressForm","SDKInternalError","useHomeAddressManagement","employeeId","onEvent","baseSubmitHandler","rootSubmitError","setRootSubmitError","useBaseSubmit","deleteHomeAddressMutation","useEmployeeAddressesDeleteMutation","editTargetUuid","setEditAddressTarget","useState","homeAddressesQuery","useEmployeeAddressesGet","employeeHomeAddresses","currentHomeAddress","a","editingHomeAddressUuid","editingHomeAddressRow","useHomeAddressForm","employeeQuery","useEmployeesGet","employeeDisplayName","useMemo","employee","firstLastName","errorHandling","composeErrorHandler","actions","homeAddressUuid","snapshot","succeeded","uuid","snap","target","componentEvents","dataPayloadPendingForms","editReady","createReady"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { jsx as
|
|
1
|
+
import { jsx as t, jsxs as s } from "react/jsx-runtime";
|
|
2
2
|
import { useTranslation as p } from "react-i18next";
|
|
3
3
|
import { useBankForm as N } from "../shared/useBankForm/useBankForm.js";
|
|
4
4
|
import "classnames";
|
|
@@ -9,25 +9,25 @@ import { BaseLayout as c } from "../../../Base/Base.js";
|
|
|
9
9
|
import { SDKFormProvider as E } from "../../../../partner-hook-utils/form/SDKFormProvider.js";
|
|
10
10
|
import { useComponentContext as f } from "../../../../contexts/ComponentAdapter/useComponentContext.js";
|
|
11
11
|
function U({ employeeId: u, onEvent: a, ...l }) {
|
|
12
|
-
const
|
|
13
|
-
if (
|
|
14
|
-
return /* @__PURE__ */
|
|
15
|
-
const { Fields:
|
|
16
|
-
const
|
|
17
|
-
|
|
12
|
+
const n = N({ employeeId: u, ...l }), { t: o } = p("Employee.PaymentMethod"), i = f();
|
|
13
|
+
if (n.isLoading)
|
|
14
|
+
return /* @__PURE__ */ t(c, { isLoading: !0, error: n.errorHandling.errors });
|
|
15
|
+
const { Fields: r } = n.form, d = async () => {
|
|
16
|
+
const e = await n.actions.onSubmit();
|
|
17
|
+
e && a(m.EMPLOYEE_BANK_ACCOUNT_CREATED, e.data);
|
|
18
18
|
}, b = () => {
|
|
19
19
|
a(m.CANCEL);
|
|
20
20
|
};
|
|
21
|
-
return /* @__PURE__ */
|
|
22
|
-
/* @__PURE__ */
|
|
23
|
-
|
|
21
|
+
return /* @__PURE__ */ t(c, { error: n.errorHandling.errors, children: /* @__PURE__ */ t(E, { formHookResult: n, children: /* @__PURE__ */ s(C, { onSubmit: d, children: [
|
|
22
|
+
/* @__PURE__ */ t(
|
|
23
|
+
r.Name,
|
|
24
24
|
{
|
|
25
25
|
label: o("nameLabel"),
|
|
26
26
|
validationMessages: { REQUIRED: o("validations.accountName") }
|
|
27
27
|
}
|
|
28
28
|
),
|
|
29
|
-
/* @__PURE__ */
|
|
30
|
-
|
|
29
|
+
/* @__PURE__ */ t(
|
|
30
|
+
r.RoutingNumber,
|
|
31
31
|
{
|
|
32
32
|
label: o("routingNumberLabel"),
|
|
33
33
|
description: o("routingNumberDescription"),
|
|
@@ -37,26 +37,26 @@ function U({ employeeId: u, onEvent: a, ...l }) {
|
|
|
37
37
|
}
|
|
38
38
|
}
|
|
39
39
|
),
|
|
40
|
-
/* @__PURE__ */
|
|
41
|
-
|
|
40
|
+
/* @__PURE__ */ t(
|
|
41
|
+
r.AccountNumber,
|
|
42
42
|
{
|
|
43
43
|
label: o("accountNumberLabel"),
|
|
44
44
|
validationMessages: {
|
|
45
45
|
REQUIRED: o("validations.accountNumber"),
|
|
46
|
-
INVALID_ACCOUNT_NUMBER: o("validations.
|
|
46
|
+
INVALID_ACCOUNT_NUMBER: o("validations.accountNumberFormat")
|
|
47
47
|
}
|
|
48
48
|
}
|
|
49
49
|
),
|
|
50
|
-
/* @__PURE__ */
|
|
51
|
-
|
|
50
|
+
/* @__PURE__ */ t(
|
|
51
|
+
r.AccountType,
|
|
52
52
|
{
|
|
53
53
|
label: o("accountTypeLabel"),
|
|
54
|
-
getOptionLabel: (
|
|
54
|
+
getOptionLabel: (e) => o(e === "Checking" ? "accountTypeChecking" : "accountTypeSavings")
|
|
55
55
|
}
|
|
56
56
|
),
|
|
57
57
|
/* @__PURE__ */ s(g, { children: [
|
|
58
|
-
/* @__PURE__ */
|
|
59
|
-
/* @__PURE__ */
|
|
58
|
+
/* @__PURE__ */ t(i.Button, { variant: "secondary", type: "button", onClick: b, children: o("cancelAddCta") }),
|
|
59
|
+
/* @__PURE__ */ t(i.Button, { type: "submit", isLoading: n.status.isPending, children: o("saveCta") })
|
|
60
60
|
] })
|
|
61
61
|
] }) }) });
|
|
62
62
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BankForm.js","sources":["../../../../../src/components/Employee/PaymentMethod/onboarding/BankForm.tsx"],"sourcesContent":["import { useTranslation } from 'react-i18next'\nimport { useBankForm, type AccountType, type UseBankFormProps } from '../shared/useBankForm'\nimport { ActionsLayout } from '@/components/Common'\nimport { Form } from '@/components/Common/Form'\nimport { BaseLayout } from '@/components/Base/Base'\nimport { SDKFormProvider } from '@/partner-hook-utils/form/SDKFormProvider'\nimport { useComponentContext } from '@/contexts/ComponentAdapter/useComponentContext'\nimport { componentEvents, type EventType } from '@/shared/constants'\nimport type { OnEventType } from '@/components/Base/useBase'\n\nexport interface BankFormProps extends Omit<UseBankFormProps, 'employeeId'> {\n employeeId: string\n onEvent: OnEventType<EventType, unknown>\n}\n\nexport function BankForm({ employeeId, onEvent, ...hookProps }: BankFormProps) {\n const bankForm = useBankForm({ employeeId, ...hookProps })\n const { t } = useTranslation('Employee.PaymentMethod')\n const Components = useComponentContext()\n\n if (bankForm.isLoading) {\n return <BaseLayout isLoading error={bankForm.errorHandling.errors} />\n }\n\n const { Fields } = bankForm.form\n\n const handleSubmit = async () => {\n const result = await bankForm.actions.onSubmit()\n if (result) {\n onEvent(componentEvents.EMPLOYEE_BANK_ACCOUNT_CREATED, result.data)\n }\n }\n\n const handleCancel = () => {\n onEvent(componentEvents.CANCEL)\n }\n\n return (\n <BaseLayout error={bankForm.errorHandling.errors}>\n <SDKFormProvider formHookResult={bankForm}>\n <Form onSubmit={handleSubmit}>\n <Fields.Name\n label={t('nameLabel')}\n validationMessages={{ REQUIRED: t('validations.accountName') }}\n />\n <Fields.RoutingNumber\n label={t('routingNumberLabel')}\n description={t('routingNumberDescription')}\n validationMessages={{\n REQUIRED: t('validations.routingNumber'),\n INVALID_ROUTING_NUMBER: t('validations.routingNumber'),\n }}\n />\n <Fields.AccountNumber\n label={t('accountNumberLabel')}\n validationMessages={{\n REQUIRED: t('validations.accountNumber'),\n INVALID_ACCOUNT_NUMBER: t('validations.
|
|
1
|
+
{"version":3,"file":"BankForm.js","sources":["../../../../../src/components/Employee/PaymentMethod/onboarding/BankForm.tsx"],"sourcesContent":["import { useTranslation } from 'react-i18next'\nimport { useBankForm, type AccountType, type UseBankFormProps } from '../shared/useBankForm'\nimport { ActionsLayout } from '@/components/Common'\nimport { Form } from '@/components/Common/Form'\nimport { BaseLayout } from '@/components/Base/Base'\nimport { SDKFormProvider } from '@/partner-hook-utils/form/SDKFormProvider'\nimport { useComponentContext } from '@/contexts/ComponentAdapter/useComponentContext'\nimport { componentEvents, type EventType } from '@/shared/constants'\nimport type { OnEventType } from '@/components/Base/useBase'\n\nexport interface BankFormProps extends Omit<UseBankFormProps, 'employeeId'> {\n employeeId: string\n onEvent: OnEventType<EventType, unknown>\n}\n\nexport function BankForm({ employeeId, onEvent, ...hookProps }: BankFormProps) {\n const bankForm = useBankForm({ employeeId, ...hookProps })\n const { t } = useTranslation('Employee.PaymentMethod')\n const Components = useComponentContext()\n\n if (bankForm.isLoading) {\n return <BaseLayout isLoading error={bankForm.errorHandling.errors} />\n }\n\n const { Fields } = bankForm.form\n\n const handleSubmit = async () => {\n const result = await bankForm.actions.onSubmit()\n if (result) {\n onEvent(componentEvents.EMPLOYEE_BANK_ACCOUNT_CREATED, result.data)\n }\n }\n\n const handleCancel = () => {\n onEvent(componentEvents.CANCEL)\n }\n\n return (\n <BaseLayout error={bankForm.errorHandling.errors}>\n <SDKFormProvider formHookResult={bankForm}>\n <Form onSubmit={handleSubmit}>\n <Fields.Name\n label={t('nameLabel')}\n validationMessages={{ REQUIRED: t('validations.accountName') }}\n />\n <Fields.RoutingNumber\n label={t('routingNumberLabel')}\n description={t('routingNumberDescription')}\n validationMessages={{\n REQUIRED: t('validations.routingNumber'),\n INVALID_ROUTING_NUMBER: t('validations.routingNumber'),\n }}\n />\n <Fields.AccountNumber\n label={t('accountNumberLabel')}\n validationMessages={{\n REQUIRED: t('validations.accountNumber'),\n INVALID_ACCOUNT_NUMBER: t('validations.accountNumberFormat'),\n }}\n />\n <Fields.AccountType\n label={t('accountTypeLabel')}\n getOptionLabel={(type: AccountType) =>\n type === 'Checking' ? t('accountTypeChecking') : t('accountTypeSavings')\n }\n />\n <ActionsLayout>\n <Components.Button variant=\"secondary\" type=\"button\" onClick={handleCancel}>\n {t('cancelAddCta')}\n </Components.Button>\n <Components.Button type=\"submit\" isLoading={bankForm.status.isPending}>\n {t('saveCta')}\n </Components.Button>\n </ActionsLayout>\n </Form>\n </SDKFormProvider>\n </BaseLayout>\n )\n}\n"],"names":["BankForm","employeeId","onEvent","hookProps","bankForm","useBankForm","t","useTranslation","Components","useComponentContext","BaseLayout","Fields","handleSubmit","result","componentEvents","handleCancel","jsx","SDKFormProvider","jsxs","Form","type","ActionsLayout"],"mappings":";;;;;;;;;;AAeO,SAASA,EAAS,EAAE,YAAAC,GAAY,SAAAC,GAAS,GAAGC,KAA4B;AAC7E,QAAMC,IAAWC,EAAY,EAAE,YAAAJ,GAAY,GAAGE,GAAW,GACnD,EAAE,GAAAG,EAAA,IAAMC,EAAe,wBAAwB,GAC/CC,IAAaC,EAAA;AAEnB,MAAIL,EAAS;AACX,6BAAQM,GAAA,EAAW,WAAS,IAAC,OAAON,EAAS,cAAc,QAAQ;AAGrE,QAAM,EAAE,QAAAO,MAAWP,EAAS,MAEtBQ,IAAe,YAAY;AAC/B,UAAMC,IAAS,MAAMT,EAAS,QAAQ,SAAA;AACtC,IAAIS,KACFX,EAAQY,EAAgB,+BAA+BD,EAAO,IAAI;AAAA,EAEtE,GAEME,IAAe,MAAM;AACzB,IAAAb,EAAQY,EAAgB,MAAM;AAAA,EAChC;AAEA,SACE,gBAAAE,EAACN,GAAA,EAAW,OAAON,EAAS,cAAc,QACxC,UAAA,gBAAAY,EAACC,GAAA,EAAgB,gBAAgBb,GAC/B,UAAA,gBAAAc,EAACC,GAAA,EAAK,UAAUP,GACd,UAAA;AAAA,IAAA,gBAAAI;AAAA,MAACL,EAAO;AAAA,MAAP;AAAA,QACC,OAAOL,EAAE,WAAW;AAAA,QACpB,oBAAoB,EAAE,UAAUA,EAAE,yBAAyB,EAAA;AAAA,MAAE;AAAA,IAAA;AAAA,IAE/D,gBAAAU;AAAA,MAACL,EAAO;AAAA,MAAP;AAAA,QACC,OAAOL,EAAE,oBAAoB;AAAA,QAC7B,aAAaA,EAAE,0BAA0B;AAAA,QACzC,oBAAoB;AAAA,UAClB,UAAUA,EAAE,2BAA2B;AAAA,UACvC,wBAAwBA,EAAE,2BAA2B;AAAA,QAAA;AAAA,MACvD;AAAA,IAAA;AAAA,IAEF,gBAAAU;AAAA,MAACL,EAAO;AAAA,MAAP;AAAA,QACC,OAAOL,EAAE,oBAAoB;AAAA,QAC7B,oBAAoB;AAAA,UAClB,UAAUA,EAAE,2BAA2B;AAAA,UACvC,wBAAwBA,EAAE,iCAAiC;AAAA,QAAA;AAAA,MAC7D;AAAA,IAAA;AAAA,IAEF,gBAAAU;AAAA,MAACL,EAAO;AAAA,MAAP;AAAA,QACC,OAAOL,EAAE,kBAAkB;AAAA,QAC3B,gBAAgB,CAACc,MACOd,EAAtBc,MAAS,aAAe,wBAA2B,oBAAN;AAAA,MAA0B;AAAA,IAAA;AAAA,sBAG1EC,GAAA,EACC,UAAA;AAAA,MAAA,gBAAAL,EAACR,EAAW,QAAX,EAAkB,SAAQ,aAAY,MAAK,UAAS,SAASO,GAC3D,UAAAT,EAAE,cAAc,EAAA,CACnB;AAAA,MACA,gBAAAU,EAACR,EAAW,QAAX,EAAkB,MAAK,UAAS,WAAWJ,EAAS,OAAO,WACzD,UAAAE,EAAE,SAAS,EAAA,CACd;AAAA,IAAA,EAAA,CACF;AAAA,EAAA,EAAA,CACF,GACF,GACF;AAEJ;"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsx as n } from "react/jsx-runtime";
|
|
2
|
-
import { TextInputHookField as o } from "../../../../../partner-hook-utils/form/fields/TextInputHookField.js";
|
|
3
2
|
import { RadioGroupHookField as r } from "../../../../../partner-hook-utils/form/fields/RadioGroupHookField.js";
|
|
3
|
+
import { TextInputHookField as o } from "../../../../../partner-hook-utils/form/fields/TextInputHookField.js";
|
|
4
4
|
function m(e) {
|
|
5
5
|
return /* @__PURE__ */ n(o, { ...e, name: "name" });
|
|
6
6
|
}
|
package/dist/components/Employee/PaymentMethod/shared/useSplitPaymentsForm/splitFieldFactory.d.ts
CHANGED
|
@@ -5,7 +5,7 @@ import { FormHookResult, ValidationMessages } from '../../../../../partner-hook-
|
|
|
5
5
|
/**
|
|
6
6
|
* Validation codes a bound split-amount Field can emit at submit time:
|
|
7
7
|
* `REQUIRED` (every non-remainder split must have a value), `INVALID_AMOUNT`
|
|
8
|
-
* (Amount mode, value < 0), `INVALID_PERCENTAGE` (Percentage mode, non-integer
|
|
8
|
+
* (Amount mode, `value < 0`), `INVALID_PERCENTAGE` (Percentage mode, non-integer
|
|
9
9
|
* or out of `0..100`). Supply translations for all three via `validationMessages`.
|
|
10
10
|
* The sum-to-100 invariant is surfaced separately via `status.hasPercentageImbalance`.
|
|
11
11
|
*/
|
package/dist/components/Employee/PaymentMethod/shared/useSplitPaymentsForm/splitFieldFactory.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsx as a } from "react/jsx-runtime";
|
|
2
2
|
import { useWatch as f } from "react-hook-form";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
3
|
+
import { SPLIT_BY as s } from "../../../../../shared/constants.js";
|
|
4
|
+
import { NumberInputHookField as F } from "../../../../../partner-hook-utils/form/fields/NumberInputHookField.js";
|
|
5
5
|
function B(t) {
|
|
6
6
|
function n({
|
|
7
7
|
label: r,
|
|
@@ -13,9 +13,9 @@ function B(t) {
|
|
|
13
13
|
placeholder: c,
|
|
14
14
|
FieldComponent: d
|
|
15
15
|
}) {
|
|
16
|
-
const l = o?.form.hookFormInternals.formMethods.control, p = f({ control: l, name: "splitBy" }) ===
|
|
16
|
+
const l = o?.form.hookFormInternals.formMethods.control, p = f({ control: l, name: "splitBy" }) === s.amount ? "currency" : "percent";
|
|
17
17
|
return /* @__PURE__ */ a(
|
|
18
|
-
|
|
18
|
+
F,
|
|
19
19
|
{
|
|
20
20
|
name: `splitAmount.${t}`,
|
|
21
21
|
formHookResult: o,
|
package/dist/components/Employee/PaymentMethod/shared/useSplitPaymentsForm/splitFieldFactory.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"splitFieldFactory.js","sources":["../../../../../../src/components/Employee/PaymentMethod/shared/useSplitPaymentsForm/splitFieldFactory.tsx"],"sourcesContent":["import type { ComponentType, ReactNode } from 'react'\nimport { useWatch, type Control } from 'react-hook-form'\nimport type {\n SplitPaymentsFormErrorCodes,\n SplitPaymentsFormData,\n} from './useSplitPaymentsFormSchema'\nimport { NumberInputHookField } from '@/partner-hook-utils/form/fields'\nimport type { NumberInputProps } from '@/components/Common/UI/NumberInput/NumberInputTypes'\nimport type { FormHookResult, ValidationMessages } from '@/partner-hook-utils/types'\nimport { SPLIT_BY } from '@/shared/constants'\n\n/**\n * Validation codes a bound split-amount Field can emit at submit time:\n * `REQUIRED` (every non-remainder split must have a value), `INVALID_AMOUNT`\n * (Amount mode, value < 0), `INVALID_PERCENTAGE` (Percentage mode, non-integer\n * or out of `0..100`). Supply translations for all three via `validationMessages`.\n * The sum-to-100 invariant is surfaced separately via `status.hasPercentageImbalance`.\n */\nexport type SplitFieldValidation =\n | typeof SplitPaymentsFormErrorCodes.REQUIRED\n | typeof SplitPaymentsFormErrorCodes.INVALID_AMOUNT\n | typeof SplitPaymentsFormErrorCodes.INVALID_PERCENTAGE\n\n/**\n * Props accepted by a bound split-amount Field exposed on\n * `form.Fields.splits[i].Field`. The Field is pre-bound to its split; it\n * formats values as currency in Amount mode and as a percentage in\n * Percentage mode. The remainder split is auto-disabled and treated as not\n * required by the hook; the rest are required.\n */\nexport interface SplitFieldProps {\n label: string\n description?: ReactNode\n formHookResult?: FormHookResult\n validationMessages?: ValidationMessages<SplitFieldValidation>\n min?: NumberInputProps['min']\n max?: NumberInputProps['max']\n placeholder?: NumberInputProps['placeholder']\n FieldComponent?: ComponentType<NumberInputProps>\n}\n\nexport interface SplitFieldEntry {\n uuid: string\n name: string | null\n hiddenAccountNumber: string | null\n Field: ComponentType<SplitFieldProps>\n}\n\ninterface BuildSplitFieldsInput {\n uuid: string\n name: string | null\n hiddenAccountNumber: string | null\n}\n\nfunction createBoundSplitField(uuid: string): ComponentType<SplitFieldProps> {\n function BoundSplitField({\n label,\n description,\n formHookResult,\n validationMessages,\n min,\n max,\n placeholder,\n FieldComponent,\n }: SplitFieldProps) {\n const externalControl = formHookResult?.form.hookFormInternals.formMethods.control as\n | Control<SplitPaymentsFormData>\n | undefined\n const splitBy = useWatch({ control: externalControl, name: 'splitBy' })\n const format: NumberInputProps['format'] = splitBy === SPLIT_BY.amount ? 'currency' : 'percent'\n\n return (\n <NumberInputHookField<SplitFieldValidation>\n name={`splitAmount.${uuid}`}\n formHookResult={formHookResult}\n label={label}\n description={description}\n validationMessages={validationMessages}\n format={format}\n min={min}\n max={max}\n placeholder={placeholder}\n FieldComponent={FieldComponent}\n />\n )\n }\n BoundSplitField.displayName = `SplitField(${uuid})`\n return BoundSplitField\n}\n\n/**\n * Build the per-split bound Field components. The caller is responsible for\n * memoizing on the stable set of split uuids so Field identity stays stable\n * across mode toggles and reorders — those changes are observed inside each\n * Field rather than baked into the closure.\n */\nexport function buildSplitFieldEntries(splits: BuildSplitFieldsInput[]): SplitFieldEntry[] {\n return splits.map(split => ({\n uuid: split.uuid,\n name: split.name,\n hiddenAccountNumber: split.hiddenAccountNumber,\n Field: createBoundSplitField(split.uuid),\n }))\n}\n"],"names":["createBoundSplitField","uuid","BoundSplitField","label","description","formHookResult","validationMessages","min","max","placeholder","FieldComponent","externalControl","format","useWatch","SPLIT_BY","jsx","NumberInputHookField","buildSplitFieldEntries","splits","split"],"mappings":";;;;AAsDA,SAASA,EAAsBC,GAA8C;AAC3E,WAASC,EAAgB;AAAA,IACvB,OAAAC;AAAA,IACA,aAAAC;AAAA,IACA,gBAAAC;AAAA,IACA,oBAAAC;AAAA,IACA,KAAAC;AAAA,IACA,KAAAC;AAAA,IACA,aAAAC;AAAA,IACA,gBAAAC;AAAA,EAAA,GACkB;AAClB,UAAMC,IAAkBN,GAAgB,KAAK,kBAAkB,YAAY,SAIrEO,IADUC,EAAS,EAAE,SAASF,GAAiB,MAAM,WAAW,MACfG,EAAS,SAAS,aAAa;AAEtF,WACE,gBAAAC;AAAA,MAACC;AAAA,MAAA;AAAA,QACC,MAAM,eAAef,CAAI;AAAA,QACzB,gBAAAI;AAAA,QACA,OAAAF;AAAA,QACA,aAAAC;AAAA,QACA,oBAAAE;AAAA,QACA,QAAAM;AAAA,QACA,KAAAL;AAAA,QACA,KAAAC;AAAA,QACA,aAAAC;AAAA,QACA,gBAAAC;AAAA,MAAA;AAAA,IAAA;AAAA,EAGN;AACA,SAAAR,EAAgB,cAAc,cAAcD,CAAI,KACzCC;AACT;AAQO,SAASe,EAAuBC,GAAoD;AACzF,SAAOA,EAAO,IAAI,CAAAC,OAAU;AAAA,IAC1B,MAAMA,EAAM;AAAA,IACZ,MAAMA,EAAM;AAAA,IACZ,qBAAqBA,EAAM;AAAA,IAC3B,OAAOnB,EAAsBmB,EAAM,IAAI;AAAA,EAAA,EACvC;AACJ;"}
|
|
1
|
+
{"version":3,"file":"splitFieldFactory.js","sources":["../../../../../../src/components/Employee/PaymentMethod/shared/useSplitPaymentsForm/splitFieldFactory.tsx"],"sourcesContent":["import type { ComponentType, ReactNode } from 'react'\nimport { useWatch, type Control } from 'react-hook-form'\nimport type {\n SplitPaymentsFormErrorCodes,\n SplitPaymentsFormData,\n} from './useSplitPaymentsFormSchema'\nimport { NumberInputHookField } from '@/partner-hook-utils/form/fields'\nimport type { NumberInputProps } from '@/components/Common/UI/NumberInput/NumberInputTypes'\nimport type { FormHookResult, ValidationMessages } from '@/partner-hook-utils/types'\nimport { SPLIT_BY } from '@/shared/constants'\n\n/**\n * Validation codes a bound split-amount Field can emit at submit time:\n * `REQUIRED` (every non-remainder split must have a value), `INVALID_AMOUNT`\n * (Amount mode, `value < 0`), `INVALID_PERCENTAGE` (Percentage mode, non-integer\n * or out of `0..100`). Supply translations for all three via `validationMessages`.\n * The sum-to-100 invariant is surfaced separately via `status.hasPercentageImbalance`.\n */\nexport type SplitFieldValidation =\n | typeof SplitPaymentsFormErrorCodes.REQUIRED\n | typeof SplitPaymentsFormErrorCodes.INVALID_AMOUNT\n | typeof SplitPaymentsFormErrorCodes.INVALID_PERCENTAGE\n\n/**\n * Props accepted by a bound split-amount Field exposed on\n * `form.Fields.splits[i].Field`. The Field is pre-bound to its split; it\n * formats values as currency in Amount mode and as a percentage in\n * Percentage mode. The remainder split is auto-disabled and treated as not\n * required by the hook; the rest are required.\n */\nexport interface SplitFieldProps {\n label: string\n description?: ReactNode\n formHookResult?: FormHookResult\n validationMessages?: ValidationMessages<SplitFieldValidation>\n min?: NumberInputProps['min']\n max?: NumberInputProps['max']\n placeholder?: NumberInputProps['placeholder']\n FieldComponent?: ComponentType<NumberInputProps>\n}\n\nexport interface SplitFieldEntry {\n uuid: string\n name: string | null\n hiddenAccountNumber: string | null\n Field: ComponentType<SplitFieldProps>\n}\n\ninterface BuildSplitFieldsInput {\n uuid: string\n name: string | null\n hiddenAccountNumber: string | null\n}\n\nfunction createBoundSplitField(uuid: string): ComponentType<SplitFieldProps> {\n function BoundSplitField({\n label,\n description,\n formHookResult,\n validationMessages,\n min,\n max,\n placeholder,\n FieldComponent,\n }: SplitFieldProps) {\n const externalControl = formHookResult?.form.hookFormInternals.formMethods.control as\n | Control<SplitPaymentsFormData>\n | undefined\n const splitBy = useWatch({ control: externalControl, name: 'splitBy' })\n const format: NumberInputProps['format'] = splitBy === SPLIT_BY.amount ? 'currency' : 'percent'\n\n return (\n <NumberInputHookField<SplitFieldValidation>\n name={`splitAmount.${uuid}`}\n formHookResult={formHookResult}\n label={label}\n description={description}\n validationMessages={validationMessages}\n format={format}\n min={min}\n max={max}\n placeholder={placeholder}\n FieldComponent={FieldComponent}\n />\n )\n }\n BoundSplitField.displayName = `SplitField(${uuid})`\n return BoundSplitField\n}\n\n/**\n * Build the per-split bound Field components. The caller is responsible for\n * memoizing on the stable set of split uuids so Field identity stays stable\n * across mode toggles and reorders — those changes are observed inside each\n * Field rather than baked into the closure.\n */\nexport function buildSplitFieldEntries(splits: BuildSplitFieldsInput[]): SplitFieldEntry[] {\n return splits.map(split => ({\n uuid: split.uuid,\n name: split.name,\n hiddenAccountNumber: split.hiddenAccountNumber,\n Field: createBoundSplitField(split.uuid),\n }))\n}\n"],"names":["createBoundSplitField","uuid","BoundSplitField","label","description","formHookResult","validationMessages","min","max","placeholder","FieldComponent","externalControl","format","useWatch","SPLIT_BY","jsx","NumberInputHookField","buildSplitFieldEntries","splits","split"],"mappings":";;;;AAsDA,SAASA,EAAsBC,GAA8C;AAC3E,WAASC,EAAgB;AAAA,IACvB,OAAAC;AAAA,IACA,aAAAC;AAAA,IACA,gBAAAC;AAAA,IACA,oBAAAC;AAAA,IACA,KAAAC;AAAA,IACA,KAAAC;AAAA,IACA,aAAAC;AAAA,IACA,gBAAAC;AAAA,EAAA,GACkB;AAClB,UAAMC,IAAkBN,GAAgB,KAAK,kBAAkB,YAAY,SAIrEO,IADUC,EAAS,EAAE,SAASF,GAAiB,MAAM,WAAW,MACfG,EAAS,SAAS,aAAa;AAEtF,WACE,gBAAAC;AAAA,MAACC;AAAA,MAAA;AAAA,QACC,MAAM,eAAef,CAAI;AAAA,QACzB,gBAAAI;AAAA,QACA,OAAAF;AAAA,QACA,aAAAC;AAAA,QACA,oBAAAE;AAAA,QACA,QAAAM;AAAA,QACA,KAAAL;AAAA,QACA,KAAAC;AAAA,QACA,aAAAC;AAAA,QACA,gBAAAC;AAAA,MAAA;AAAA,IAAA;AAAA,EAGN;AACA,SAAAR,EAAgB,cAAc,cAAcD,CAAI,KACzCC;AACT;AAQO,SAASe,EAAuBC,GAAoD;AACzF,SAAOA,EAAO,IAAI,CAAAC,OAAU;AAAA,IAC1B,MAAMA,EAAM;AAAA,IACZ,MAAMA,EAAM;AAAA,IACZ,qBAAqBA,EAAM;AAAA,IAC3B,OAAOnB,EAAsBmB,EAAM,IAAI;AAAA,EAAA,EACvC;AACJ;"}
|