@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":"WorkAddressView.js","sources":["../../../../../src/components/Employee/WorkAddress/management/WorkAddressView.tsx"],"sourcesContent":["import { useLayoutEffect, useMemo, useRef, useState } from 'react'\nimport { Trans, useTranslation } from 'react-i18next'\nimport type { Location } from '@gusto/embedded-api/models/components/location'\nimport type { EmployeeWorkAddress } from '@gusto/embedded-api/models/components/employeeworkaddress'\nimport {\n formatPendingWorkAddressLine,\n getPendingFutureWorkAddress,\n} from './getPendingFutureWorkAddress'\nimport ListIcon from '@/assets/icons/list.svg?react'\nimport PencilSvg from '@/assets/icons/pencil.svg?react'\nimport TrashCanSvg from '@/assets/icons/trashcan.svg?react'\nimport {\n ActionsLayout,\n DataView,\n EmptyData,\n Grid,\n HamburgerMenu,\n useDataView,\n} from '@/components/Common'\nimport { Flex, FlexItem } from '@/components/Common/Flex/Flex'\nimport {\n LocationField,\n EffectiveDateField,\n} from '@/components/Employee/Profile/shared/useWorkAddressForm/fields'\nimport { WorkAddressErrorCodes } from '@/components/Employee/Profile/shared/useWorkAddressForm/workAddressSchema'\nimport type { UseWorkAddressFormReady } from '@/components/Employee/Profile/shared/useWorkAddressForm'\nimport { SDKFormProvider } from '@/partner-hook-utils/form/SDKFormProvider'\nimport type { HookSubmitResult } from '@/partner-hook-utils/types'\nimport { useComponentContext } from '@/contexts/ComponentAdapter/useComponentContext'\nimport { addDays, formatDateLongWithYear, normalizeToDate } from '@/helpers/dateFormatting'\nimport { getCityStateZip, getStreet } from '@/helpers/formattedStrings'\n\nexport interface WorkAddressViewProps {\n editWorkAddressForm: UseWorkAddressFormReady\n changeWorkAddressForm: UseWorkAddressFormReady\n /** Full list for history table, pending-future alert, and delete-confirmation lookup. */\n workAddresses: EmployeeWorkAddress[] | undefined\n editTargetUuid: string | undefined\n onEditTargetUuidChange: (uuid: string | undefined) => void\n employeeDisplayName: string\n onConfirmDelete: (workAddressUuid: string) => Promise<boolean>\n onWorkAddressSaved: (result: HookSubmitResult<EmployeeWorkAddress>) => void\n onBack: () => void\n isDeletePending?: boolean\n}\n\nfunction resolveLocation(\n row: EmployeeWorkAddress,\n companyLocations: Location[] | undefined,\n): Location | undefined {\n if (!row.locationUuid || !companyLocations?.length) {\n return undefined\n }\n return companyLocations.find(loc => loc.uuid === row.locationUuid)\n}\n\nfunction formatWorkAddressLines(\n row: EmployeeWorkAddress,\n companyLocations: Location[] | undefined,\n): { primary: string; secondary: string } {\n const location = resolveLocation(row, companyLocations)\n if (location) {\n const street = getStreet(location).trim()\n const locality = getCityStateZip(location).trim()\n return { primary: street, secondary: locality }\n }\n const street = getStreet(row).trim()\n const locality = getCityStateZip(row).trim()\n return { primary: street, secondary: locality }\n}\n\nexport function WorkAddressView({\n editWorkAddressForm,\n changeWorkAddressForm,\n workAddresses,\n editTargetUuid,\n onEditTargetUuidChange,\n employeeDisplayName,\n onConfirmDelete,\n onWorkAddressSaved,\n onBack,\n isDeletePending = false,\n}: WorkAddressViewProps) {\n const { t } = useTranslation('Employee.WorkAddress.Management')\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: { workAddress, companyLocations },\n status: editStatus,\n form: { Fields: editFormFields },\n } = editWorkAddressForm\n\n const editShowsEffectiveDateField = editFormFields.EffectiveDate != null\n\n const { status: createStatus } = changeWorkAddressForm\n\n const locationValidation = {\n [WorkAddressErrorCodes.REQUIRED]: t('form.locationRequired'),\n }\n\n const startDateValidation = {\n [WorkAddressErrorCodes.REQUIRED]: t('form.startDateRequired'),\n }\n\n const pendingFutureAddress = useMemo(\n () => getPendingFutureWorkAddress(workAddresses),\n [workAddresses],\n )\n\n const addressForDeleteModal = useMemo(() => {\n if (!deleteConfirmUuid || !workAddresses) {\n return undefined\n }\n return workAddresses.find(a => a.uuid === deleteConfirmUuid)\n }, [deleteConfirmUuid, workAddresses])\n\n const changePendingPossessiveLabel = useMemo(() => {\n const trimmed = employeeDisplayName.trim()\n return trimmed ? `${trimmed}'s` : t('changePendingPossessiveFallback')\n }, [employeeDisplayName, t])\n\n const chronologicalAsc = useMemo(() => {\n return [...(workAddresses ?? [])].sort((a, b) => {\n const aDate = a.effectiveDate ?? ''\n const bDate = b.effectiveDate ?? ''\n if (!aDate && !bDate) return 0\n if (!aDate) return 1\n if (!bDate) return -1\n return aDate.localeCompare(bDate)\n })\n }, [workAddresses])\n\n const historyAddresses = useMemo(\n () => chronologicalAsc.filter(address => address.active !== true),\n [chronologicalAsc],\n )\n\n const sortedHistory = useMemo(() => [...historyAddresses].reverse(), [historyAddresses])\n\n const historyEndDate = (row: EmployeeWorkAddress) => {\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)\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.location'),\n render: (row: EmployeeWorkAddress) => {\n const lines = formatWorkAddressLines(row, companyLocations)\n return (\n <Flex flexDirection=\"column\" gap={0}>\n <Components.Text weight=\"medium\">{lines.primary}</Components.Text>\n <Components.Text variant=\"supporting\">{lines.secondary}</Components.Text>\n </Flex>\n )\n },\n },\n {\n title: t('columns.startDate'),\n render: (row: EmployeeWorkAddress) =>\n row.effectiveDate ? formatDateLongWithYear(row.effectiveDate) : '—',\n },\n {\n title: t('columns.endDate'),\n render: (row: EmployeeWorkAddress) => historyEndDate(row),\n },\n ],\n itemMenu: (row: EmployeeWorkAddress) => (\n <HamburgerMenu\n triggerLabel={t('rowMenuAriaLabel')}\n items={[\n {\n label: t('rowEdit'),\n onClick: () => {\n onEditTargetUuidChange(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=\"work-address-history-empty\">\n <EmptyData\n icon={<ListIcon aria-hidden />}\n title={t('historyEmptyTitle')}\n description={t('historyEmptyDescription')}\n />\n </div>\n ),\n })\n\n const closeAddressModal = () => {\n setAddressModal(null)\n onEditTargetUuidChange(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 handleSave = async () => {\n if (!addressModal) {\n return\n }\n\n if (addressModal === 'edit') {\n const result = await editWorkAddressForm.actions.onSubmit(\n undefined,\n editShowsEffectiveDateField ? undefined : { effectiveDate: workAddress?.effectiveDate },\n )\n if (result) {\n onWorkAddressSaved(result)\n closeAddressModal()\n }\n return\n }\n\n const result = await changeWorkAddressForm.actions.onSubmit()\n if (result) {\n onWorkAddressSaved(result)\n closeAddressModal()\n }\n }\n\n const modalPending = addressModal === 'edit' ? editStatus.isPending : createStatus.isPending\n\n const currentLines = workAddress ? formatWorkAddressLines(workAddress, companyLocations) : null\n const currentLocation =\n workAddress && companyLocations ? resolveLocation(workAddress, companyLocations) : undefined\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 workAddress ? (\n <Components.Button\n variant=\"secondary\"\n onClick={() => {\n onEditTargetUuidChange(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 onEditTargetUuidChange(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 {workAddress && currentLines ? (\n <Flex flexDirection=\"column\" gap={4}>\n <FlexItem>\n {currentLocation ? (\n <>\n <Components.Text weight=\"medium\">\n {getStreet(currentLocation).trim()}\n </Components.Text>\n <Components.Text weight=\"medium\">\n {getCityStateZip(currentLocation)}\n </Components.Text>\n </>\n ) : (\n <>\n <Components.Text weight=\"medium\">{currentLines.primary}</Components.Text>\n <Components.Text weight=\"medium\">{currentLines.secondary}</Components.Text>\n </>\n )}\n </FlexItem>\n {workAddress.effectiveDate ? (\n <Components.Text variant=\"supporting\">\n {t('currentSince', {\n date: formatDateLongWithYear(workAddress.effectiveDate),\n })}\n </Components.Text>\n ) : null}\n </Flex>\n ) : (\n <Components.Text>{t('currentEmpty')}</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: formatPendingWorkAddressLine(pendingFutureAddress, companyLocations),\n effectiveDate: pendingFutureAddress.effectiveDate\n ? formatDateLongWithYear(pendingFutureAddress.effectiveDate)\n : '—',\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 variant=\"secondary\" onClick={closeAddressModal}>\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={16}>\n <Components.Heading as=\"h2\">\n {addressModal === 'edit' ? t('editModalTitle') : t('changeModalTitle')}\n </Components.Heading>\n <Components.Text variant=\"supporting\">\n {addressModal === 'edit' ? t('editModalDescription') : t('changeModalDescription')}\n </Components.Text>\n {addressModal === 'edit' && editShowsEffectiveDateField ? (\n <Components.Alert status=\"warning\" label={t('editPastAddressAlertTitle')} />\n ) : null}\n {addressModal === 'edit' ? (\n <SDKFormProvider formHookResult={editWorkAddressForm}>\n <Grid\n gridTemplateColumns={{\n base: '1fr',\n small: '1fr',\n }}\n gap={20}\n >\n <LocationField\n label={\n editShowsEffectiveDateField\n ? t('form.editInactiveLocationLabel')\n : t('form.editLocationLabel')\n }\n description={t('form.editLocationDescription')}\n validationMessages={locationValidation}\n portalContainer={addressModalPortal}\n />\n {editShowsEffectiveDateField ? (\n <EffectiveDateField\n label={t('form.startDateLabel')}\n description={t('form.editInactiveStartDateDescription')}\n validationMessages={startDateValidation}\n portalContainer={addressModalPortal}\n />\n ) : null}\n </Grid>\n </SDKFormProvider>\n ) : null}\n {addressModal === 'create' ? (\n <SDKFormProvider formHookResult={changeWorkAddressForm}>\n <Grid\n gridTemplateColumns={{\n base: '1fr',\n small: '1fr',\n }}\n gap={20}\n >\n <LocationField\n label={t('form.newWorkAddressLabel')}\n description={t('form.newWorkAddressDescription')}\n validationMessages={locationValidation}\n portalContainer={addressModalPortal}\n />\n <EffectiveDateField\n label={t('form.startDateLabel')}\n description={t('form.startDateDescription')}\n validationMessages={startDateValidation}\n portalContainer={addressModalPortal}\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 && deleteConfirmUuid !== null}\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: formatPendingWorkAddressLine(addressForDeleteModal, companyLocations),\n }}\n components={{\n strong: <Components.Text weight=\"medium\" as=\"span\" />,\n }}\n />\n ) : null}\n </Components.Text>\n </Flex>\n </Components.Modal>\n </Flex>\n )\n}\n"],"names":["resolveLocation","row","companyLocations","loc","formatWorkAddressLines","location","street","getStreet","locality","getCityStateZip","WorkAddressView","editWorkAddressForm","changeWorkAddressForm","workAddresses","editTargetUuid","onEditTargetUuidChange","employeeDisplayName","onConfirmDelete","onWorkAddressSaved","onBack","isDeletePending","useTranslation","Components","useComponentContext","addressModal","setAddressModal","useState","deleteConfirmUuid","setDeleteConfirmUuid","addressModalContainerRef","useRef","addressModalPortal","setAddressModalPortal","useLayoutEffect","syncPortal","id","workAddress","editStatus","editFormFields","editShowsEffectiveDateField","createStatus","locationValidation","WorkAddressErrorCodes","startDateValidation","pendingFutureAddress","useMemo","getPendingFutureWorkAddress","addressForDeleteModal","a","changePendingPossessiveLabel","trimmed","chronologicalAsc","b","aDate","bDate","historyAddresses","address","sortedHistory","historyEndDate","idx","nextStart","nextDate","normalizeToDate","endDate","addDays","y","m","d","formatDateLongWithYear","historyDataView","useDataView","lines","jsxs","Flex","jsx","HamburgerMenu","PencilSvg","TrashCanSvg","EmptyData","ListIcon","closeAddressModal","handleDeleteModalConfirm","handleSave","result","modalPending","currentLines","currentLocation","FlexItem","Fragment","formatPendingWorkAddressLine","DataView","ActionsLayout","SDKFormProvider","Grid","LocationField","EffectiveDateField","Trans"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"WorkAddressView.js","sources":["../../../../../src/components/Employee/WorkAddress/management/WorkAddressView.tsx"],"sourcesContent":["import { useLayoutEffect, useMemo, useRef, useState } from 'react'\nimport { Trans, useTranslation } from 'react-i18next'\nimport type { Location } from '@gusto/embedded-api/models/components/location'\nimport type { EmployeeWorkAddress } from '@gusto/embedded-api/models/components/employeeworkaddress'\nimport {\n formatPendingWorkAddressLine,\n getPendingFutureWorkAddress,\n} from './getPendingFutureWorkAddress'\nimport ListIcon from '@/assets/icons/list.svg?react'\nimport PencilSvg from '@/assets/icons/pencil.svg?react'\nimport TrashCanSvg from '@/assets/icons/trashcan.svg?react'\nimport {\n ActionsLayout,\n DataView,\n EmptyData,\n Grid,\n HamburgerMenu,\n useDataView,\n} from '@/components/Common'\nimport { Flex, FlexItem } from '@/components/Common/Flex/Flex'\nimport {\n LocationField,\n EffectiveDateField,\n} from '@/components/Employee/Profile/shared/useWorkAddressForm/fields'\nimport { WorkAddressErrorCodes } from '@/components/Employee/Profile/shared/useWorkAddressForm/workAddressSchema'\nimport type { UseWorkAddressFormReady } from '@/components/Employee/Profile/shared/useWorkAddressForm'\nimport { SDKFormProvider } from '@/partner-hook-utils/form/SDKFormProvider'\nimport type { HookSubmitResult } from '@/partner-hook-utils/types'\nimport { useComponentContext } from '@/contexts/ComponentAdapter/useComponentContext'\nimport { addDays, formatDateLongWithYear, normalizeToDate } from '@/helpers/dateFormatting'\nimport { getCityStateZip, getStreet } from '@/helpers/formattedStrings'\n\nexport interface WorkAddressViewProps {\n editWorkAddressForm: UseWorkAddressFormReady\n changeWorkAddressForm: UseWorkAddressFormReady\n /** Full list for history table, pending-future alert, and delete-confirmation lookup. */\n workAddresses: EmployeeWorkAddress[] | undefined\n editTargetUuid: string | undefined\n onEditTargetUuidChange: (uuid: string | undefined) => void\n employeeDisplayName: string\n onConfirmDelete: (workAddressUuid: string) => Promise<boolean>\n onWorkAddressSaved: (result: HookSubmitResult<EmployeeWorkAddress>) => void\n onBack: () => void\n isDeletePending?: boolean\n}\n\nfunction resolveLocation(\n row: EmployeeWorkAddress,\n companyLocations: Location[] | undefined,\n): Location | undefined {\n if (!row.locationUuid || !companyLocations?.length) {\n return undefined\n }\n return companyLocations.find(loc => loc.uuid === row.locationUuid)\n}\n\nfunction formatWorkAddressLines(\n row: EmployeeWorkAddress,\n companyLocations: Location[] | undefined,\n): { primary: string; secondary: string } {\n const location = resolveLocation(row, companyLocations)\n if (location) {\n const street = getStreet(location).trim()\n const locality = getCityStateZip(location).trim()\n return { primary: street, secondary: locality }\n }\n const street = getStreet(row).trim()\n const locality = getCityStateZip(row).trim()\n return { primary: street, secondary: locality }\n}\n\nexport function WorkAddressView({\n editWorkAddressForm,\n changeWorkAddressForm,\n workAddresses,\n editTargetUuid,\n onEditTargetUuidChange,\n employeeDisplayName,\n onConfirmDelete,\n onWorkAddressSaved,\n onBack,\n isDeletePending = false,\n}: WorkAddressViewProps) {\n const { t } = useTranslation('Employee.WorkAddress.Management')\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: { workAddress, companyLocations },\n status: editStatus,\n form: { Fields: editFormFields },\n } = editWorkAddressForm\n\n const editShowsEffectiveDateField = editFormFields.EffectiveDate != null\n\n const { status: createStatus } = changeWorkAddressForm\n\n const locationValidation = {\n [WorkAddressErrorCodes.REQUIRED]: t('form.locationRequired'),\n }\n\n const startDateValidation = {\n [WorkAddressErrorCodes.REQUIRED]: t('form.startDateRequired'),\n }\n\n const pendingFutureAddress = useMemo(\n () => getPendingFutureWorkAddress(workAddresses),\n [workAddresses],\n )\n\n const addressForDeleteModal = useMemo(() => {\n if (!deleteConfirmUuid || !workAddresses) {\n return undefined\n }\n return workAddresses.find(a => a.uuid === deleteConfirmUuid)\n }, [deleteConfirmUuid, workAddresses])\n\n const changePendingPossessiveLabel = useMemo(() => {\n const trimmed = employeeDisplayName.trim()\n return trimmed ? `${trimmed}'s` : t('changePendingPossessiveFallback')\n }, [employeeDisplayName, t])\n\n const chronologicalAsc = useMemo(() => {\n return [...(workAddresses ?? [])].sort((a, b) => {\n const aDate = a.effectiveDate ?? ''\n const bDate = b.effectiveDate ?? ''\n if (!aDate && !bDate) return 0\n if (!aDate) return 1\n if (!bDate) return -1\n return aDate.localeCompare(bDate)\n })\n }, [workAddresses])\n\n const historyAddresses = useMemo(\n () => chronologicalAsc.filter(address => address.active !== true),\n [chronologicalAsc],\n )\n\n const sortedHistory = useMemo(() => [...historyAddresses].reverse(), [historyAddresses])\n\n const historyEndDate = (row: EmployeeWorkAddress) => {\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)\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.location'),\n render: (row: EmployeeWorkAddress) => {\n const lines = formatWorkAddressLines(row, companyLocations)\n return (\n <Flex flexDirection=\"column\" gap={0}>\n <Components.Text weight=\"medium\">{lines.primary}</Components.Text>\n <Components.Text variant=\"supporting\">{lines.secondary}</Components.Text>\n </Flex>\n )\n },\n },\n {\n title: t('columns.startDate'),\n render: (row: EmployeeWorkAddress) =>\n row.effectiveDate ? formatDateLongWithYear(row.effectiveDate) : '—',\n },\n {\n title: t('columns.endDate'),\n render: (row: EmployeeWorkAddress) => historyEndDate(row),\n },\n ],\n itemMenu: (row: EmployeeWorkAddress) => (\n <HamburgerMenu\n triggerLabel={t('rowMenuAriaLabel')}\n items={[\n {\n label: t('rowEdit'),\n onClick: () => {\n onEditTargetUuidChange(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=\"work-address-history-empty\">\n <EmptyData\n icon={<ListIcon aria-hidden />}\n title={t('historyEmptyTitle')}\n description={t('historyEmptyDescription')}\n />\n </div>\n ),\n })\n\n const closeAddressModal = () => {\n setAddressModal(null)\n onEditTargetUuidChange(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 handleSave = async () => {\n if (!addressModal) {\n return\n }\n\n if (addressModal === 'edit') {\n const result = await editWorkAddressForm.actions.onSubmit(\n undefined,\n editShowsEffectiveDateField ? undefined : { effectiveDate: workAddress?.effectiveDate },\n )\n if (result) {\n onWorkAddressSaved(result)\n closeAddressModal()\n }\n return\n }\n\n const result = await changeWorkAddressForm.actions.onSubmit()\n if (result) {\n onWorkAddressSaved(result)\n closeAddressModal()\n }\n }\n\n const modalPending = addressModal === 'edit' ? editStatus.isPending : createStatus.isPending\n\n const currentLines = workAddress ? formatWorkAddressLines(workAddress, companyLocations) : null\n const currentLocation =\n workAddress && companyLocations ? resolveLocation(workAddress, companyLocations) : undefined\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 workAddress ? (\n <Components.Button\n variant=\"secondary\"\n onClick={() => {\n onEditTargetUuidChange(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 onEditTargetUuidChange(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 {workAddress && currentLines ? (\n <Flex flexDirection=\"column\" gap={4}>\n <FlexItem>\n {currentLocation ? (\n <>\n <Components.Text weight=\"medium\">\n {getStreet(currentLocation).trim()}\n </Components.Text>\n <Components.Text weight=\"medium\">\n {getCityStateZip(currentLocation)}\n </Components.Text>\n </>\n ) : (\n <>\n <Components.Text weight=\"medium\">{currentLines.primary}</Components.Text>\n <Components.Text weight=\"medium\">{currentLines.secondary}</Components.Text>\n </>\n )}\n </FlexItem>\n {workAddress.effectiveDate ? (\n <Components.Text variant=\"supporting\">\n {t('currentSince', {\n date: formatDateLongWithYear(workAddress.effectiveDate),\n })}\n </Components.Text>\n ) : null}\n </Flex>\n ) : (\n <Components.Text>{t('currentEmpty')}</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: formatPendingWorkAddressLine(pendingFutureAddress, companyLocations),\n effectiveDate: pendingFutureAddress.effectiveDate\n ? formatDateLongWithYear(pendingFutureAddress.effectiveDate)\n : '—',\n // Values are inserted into JSX text, so the browser already\n // escapes them. Telling i18next to escape too produces\n // double-encoded entities like `'` showing as text.\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 variant=\"secondary\" onClick={closeAddressModal}>\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={16}>\n <Components.Heading as=\"h2\">\n {addressModal === 'edit' ? t('editModalTitle') : t('changeModalTitle')}\n </Components.Heading>\n <Components.Text variant=\"supporting\">\n {addressModal === 'edit' ? t('editModalDescription') : t('changeModalDescription')}\n </Components.Text>\n {addressModal === 'edit' && editShowsEffectiveDateField ? (\n <Components.Alert status=\"warning\" label={t('editPastAddressAlertTitle')} />\n ) : null}\n {addressModal === 'edit' ? (\n <SDKFormProvider formHookResult={editWorkAddressForm}>\n <Grid\n gridTemplateColumns={{\n base: '1fr',\n small: '1fr',\n }}\n gap={20}\n >\n <LocationField\n label={\n editShowsEffectiveDateField\n ? t('form.editInactiveLocationLabel')\n : t('form.editLocationLabel')\n }\n description={t('form.editLocationDescription')}\n validationMessages={locationValidation}\n portalContainer={addressModalPortal}\n />\n {editShowsEffectiveDateField ? (\n <EffectiveDateField\n label={t('form.startDateLabel')}\n description={t('form.editInactiveStartDateDescription')}\n validationMessages={startDateValidation}\n portalContainer={addressModalPortal}\n />\n ) : null}\n </Grid>\n </SDKFormProvider>\n ) : null}\n {addressModal === 'create' ? (\n <SDKFormProvider formHookResult={changeWorkAddressForm}>\n <Grid\n gridTemplateColumns={{\n base: '1fr',\n small: '1fr',\n }}\n gap={20}\n >\n <LocationField\n label={t('form.newWorkAddressLabel')}\n description={t('form.newWorkAddressDescription')}\n validationMessages={locationValidation}\n portalContainer={addressModalPortal}\n />\n <EffectiveDateField\n label={t('form.startDateLabel')}\n description={t('form.startDateDescription')}\n validationMessages={startDateValidation}\n portalContainer={addressModalPortal}\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 && deleteConfirmUuid !== null}\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: formatPendingWorkAddressLine(addressForDeleteModal, companyLocations),\n }}\n components={{\n strong: <Components.Text weight=\"medium\" as=\"span\" />,\n }}\n />\n ) : null}\n </Components.Text>\n </Flex>\n </Components.Modal>\n </Flex>\n )\n}\n"],"names":["resolveLocation","row","companyLocations","loc","formatWorkAddressLines","location","street","getStreet","locality","getCityStateZip","WorkAddressView","editWorkAddressForm","changeWorkAddressForm","workAddresses","editTargetUuid","onEditTargetUuidChange","employeeDisplayName","onConfirmDelete","onWorkAddressSaved","onBack","isDeletePending","useTranslation","Components","useComponentContext","addressModal","setAddressModal","useState","deleteConfirmUuid","setDeleteConfirmUuid","addressModalContainerRef","useRef","addressModalPortal","setAddressModalPortal","useLayoutEffect","syncPortal","id","workAddress","editStatus","editFormFields","editShowsEffectiveDateField","createStatus","locationValidation","WorkAddressErrorCodes","startDateValidation","pendingFutureAddress","useMemo","getPendingFutureWorkAddress","addressForDeleteModal","a","changePendingPossessiveLabel","trimmed","chronologicalAsc","b","aDate","bDate","historyAddresses","address","sortedHistory","historyEndDate","idx","nextStart","nextDate","normalizeToDate","endDate","addDays","y","m","d","formatDateLongWithYear","historyDataView","useDataView","lines","jsxs","Flex","jsx","HamburgerMenu","PencilSvg","TrashCanSvg","EmptyData","ListIcon","closeAddressModal","handleDeleteModalConfirm","handleSave","result","modalPending","currentLines","currentLocation","FlexItem","Fragment","formatPendingWorkAddressLine","DataView","ActionsLayout","SDKFormProvider","Grid","LocationField","EffectiveDateField","Trans"],"mappings":"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"}
|
|
@@ -1,67 +1,68 @@
|
|
|
1
|
-
import { useState as
|
|
2
|
-
import { useEmployeeAddressesDeleteWorkAddressMutation as
|
|
3
|
-
import { useEmployeeAddressesGetWorkAddresses as
|
|
4
|
-
import { useEmployeesGet as
|
|
5
|
-
import { useBaseSubmit as
|
|
6
|
-
import { useWorkAddressForm as
|
|
7
|
-
import { composeErrorHandler as
|
|
8
|
-
import { firstLastName as
|
|
9
|
-
import { normalizeToSDKError as
|
|
10
|
-
import { componentEvents as
|
|
11
|
-
function
|
|
1
|
+
import { useState as T, useMemo as E } from "react";
|
|
2
|
+
import { useEmployeeAddressesDeleteWorkAddressMutation as C } from "@gusto/embedded-api/react-query/employeeAddressesDeleteWorkAddress";
|
|
3
|
+
import { useEmployeeAddressesGetWorkAddresses as K } from "@gusto/embedded-api/react-query/employeeAddressesGetWorkAddresses";
|
|
4
|
+
import { useEmployeesGet as O } from "@gusto/embedded-api/react-query/employeesGet";
|
|
5
|
+
import { useBaseSubmit as Q } from "../../../Base/useBaseSubmit.js";
|
|
6
|
+
import { useWorkAddressForm as h } from "../../Profile/shared/useWorkAddressForm/useWorkAddressForm.js";
|
|
7
|
+
import { composeErrorHandler as q } from "../../../../partner-hook-utils/composeErrorHandler.js";
|
|
8
|
+
import { firstLastName as G } from "../../../../helpers/formattedStrings.js";
|
|
9
|
+
import { normalizeToSDKError as x, SDKInternalError as d } from "../../../../types/sdkError.js";
|
|
10
|
+
import { componentEvents as z } from "../../../../shared/constants.js";
|
|
11
|
+
function ie(e) {
|
|
12
12
|
return e.isLoading ? !1 : !e.status.isEmployeeError;
|
|
13
13
|
}
|
|
14
|
-
function
|
|
14
|
+
function B(e, n) {
|
|
15
15
|
if (e.isLoading)
|
|
16
|
-
throw new
|
|
17
|
-
if (
|
|
18
|
-
throw new
|
|
16
|
+
throw new d("Edit work address form is still loading");
|
|
17
|
+
if (n.isLoading)
|
|
18
|
+
throw new d("Change work address form is still loading");
|
|
19
19
|
return {
|
|
20
20
|
editWorkAddressForm: e,
|
|
21
|
-
changeWorkAddressForm:
|
|
21
|
+
changeWorkAddressForm: n
|
|
22
22
|
};
|
|
23
23
|
}
|
|
24
|
-
function
|
|
24
|
+
function de({
|
|
25
25
|
employeeId: e,
|
|
26
|
-
onEvent:
|
|
26
|
+
onEvent: n
|
|
27
27
|
}) {
|
|
28
28
|
const {
|
|
29
|
-
baseSubmitHandler:
|
|
30
|
-
error:
|
|
31
|
-
setError:
|
|
32
|
-
} =
|
|
29
|
+
baseSubmitHandler: D,
|
|
30
|
+
error: F,
|
|
31
|
+
setError: S
|
|
32
|
+
} = Q("Employee.WorkAddress.Management"), l = C(), [t, v] = T(void 0), o = O({ employeeId: e }, { enabled: !!e }), a = o.data?.employee?.companyUuid, f = K(
|
|
33
33
|
{ employeeId: e },
|
|
34
34
|
{ enabled: !!e && !!a }
|
|
35
|
-
), r = f.data?.employeeWorkAddressesList, b =
|
|
35
|
+
), r = f.data?.employeeWorkAddressesList, b = E(() => r?.length ? r.find((s) => s.active) ?? r[0] ?? null : null, [r]), g = t ?? b?.uuid, p = E(() => {
|
|
36
36
|
if (!(!t || !r))
|
|
37
37
|
return r.find((s) => s.uuid === t);
|
|
38
|
-
}, [t, r]), R =
|
|
38
|
+
}, [t, r]), R = g ? r?.find((s) => s.uuid === g) : void 0, M = p ? p.active !== !0 : !1, u = h({
|
|
39
39
|
companyId: a,
|
|
40
40
|
employeeId: e,
|
|
41
|
-
workAddressUuid:
|
|
42
|
-
|
|
43
|
-
|
|
41
|
+
workAddressUuid: g,
|
|
42
|
+
initialAddress: R,
|
|
43
|
+
withEffectiveDateField: M
|
|
44
|
+
}), m = h({
|
|
44
45
|
companyId: a,
|
|
45
46
|
employeeId: e,
|
|
46
47
|
withEffectiveDateField: !0
|
|
47
|
-
}),
|
|
48
|
+
}), y = E(() => {
|
|
48
49
|
const s = o.data?.employee;
|
|
49
|
-
return s ?
|
|
50
|
+
return s ? G({
|
|
50
51
|
first_name: s.firstName,
|
|
51
52
|
last_name: s.lastName
|
|
52
53
|
}).trim() : "";
|
|
53
|
-
}, [o.data?.employee]),
|
|
54
|
+
}, [o.data?.employee]), k = !!o.data?.employee && !a, i = q(
|
|
54
55
|
[
|
|
55
56
|
o,
|
|
56
57
|
f,
|
|
57
|
-
m,
|
|
58
58
|
u,
|
|
59
|
-
|
|
59
|
+
m,
|
|
60
|
+
...k ? [
|
|
60
61
|
{
|
|
61
62
|
errorHandling: {
|
|
62
63
|
errors: [
|
|
63
|
-
|
|
64
|
-
new
|
|
64
|
+
x(
|
|
65
|
+
new d(
|
|
65
66
|
"Employee record is missing companyUuid, which is required to load work address locations."
|
|
66
67
|
)
|
|
67
68
|
)
|
|
@@ -74,70 +75,70 @@ function ie({
|
|
|
74
75
|
}
|
|
75
76
|
] : []
|
|
76
77
|
],
|
|
77
|
-
{ submitError:
|
|
78
|
-
),
|
|
79
|
-
setEditTargetUuid:
|
|
78
|
+
{ submitError: F, setSubmitError: S }
|
|
79
|
+
), A = {
|
|
80
|
+
setEditTargetUuid: v,
|
|
80
81
|
confirmDeleteWorkAddress: async (s) => {
|
|
81
|
-
const
|
|
82
|
+
const H = r?.find((c) => c.uuid === s) ?? null;
|
|
82
83
|
let w = !1;
|
|
83
|
-
return await
|
|
84
|
-
{ workAddressUuid: s, snapshot:
|
|
85
|
-
async ({ workAddressUuid: c, snapshot:
|
|
86
|
-
const L = r?.find((
|
|
84
|
+
return await D(
|
|
85
|
+
{ workAddressUuid: s, snapshot: H },
|
|
86
|
+
async ({ workAddressUuid: c, snapshot: W }) => {
|
|
87
|
+
const L = r?.find((N) => N.uuid === c);
|
|
87
88
|
if (!L)
|
|
88
|
-
throw new
|
|
89
|
+
throw new d("Work address not found");
|
|
89
90
|
if (L.active === !0)
|
|
90
|
-
throw new
|
|
91
|
+
throw new d("Cannot delete the active work address");
|
|
91
92
|
await l.mutateAsync({
|
|
92
93
|
request: { workAddressUuid: c }
|
|
93
|
-
}), w = !0,
|
|
94
|
+
}), w = !0, W && n(z.EMPLOYEE_WORK_ADDRESS_DELETED, W);
|
|
94
95
|
}
|
|
95
96
|
), w;
|
|
96
97
|
}
|
|
97
|
-
},
|
|
98
|
-
employeeDisplayName:
|
|
98
|
+
}, U = {
|
|
99
|
+
employeeDisplayName: y,
|
|
99
100
|
employeeWorkAddresses: r,
|
|
100
101
|
editTargetUuid: t,
|
|
101
|
-
editWorkAddressForm:
|
|
102
|
-
changeWorkAddressForm:
|
|
102
|
+
editWorkAddressForm: u,
|
|
103
|
+
changeWorkAddressForm: m
|
|
103
104
|
};
|
|
104
105
|
if (o.isLoading)
|
|
105
106
|
return { isLoading: !0, errorHandling: i };
|
|
106
|
-
if (o.isError ||
|
|
107
|
+
if (o.isError || k)
|
|
107
108
|
return {
|
|
108
109
|
isLoading: !1,
|
|
109
|
-
data:
|
|
110
|
+
data: U,
|
|
110
111
|
status: {
|
|
111
112
|
isDeletePending: l.isPending,
|
|
112
113
|
isEmployeeError: !0
|
|
113
114
|
},
|
|
114
115
|
errorHandling: i,
|
|
115
|
-
actions:
|
|
116
|
+
actions: A
|
|
116
117
|
};
|
|
117
118
|
if (f.isLoading)
|
|
118
119
|
return { isLoading: !0, errorHandling: i };
|
|
119
|
-
if (
|
|
120
|
+
if (u.isLoading || m.isLoading)
|
|
120
121
|
return { isLoading: !0, errorHandling: i };
|
|
121
|
-
const { editWorkAddressForm:
|
|
122
|
+
const { editWorkAddressForm: P, changeWorkAddressForm: _ } = B(u, m);
|
|
122
123
|
return {
|
|
123
124
|
isLoading: !1,
|
|
124
125
|
data: {
|
|
125
|
-
employeeDisplayName:
|
|
126
|
+
employeeDisplayName: y,
|
|
126
127
|
employeeWorkAddresses: r,
|
|
127
128
|
editTargetUuid: t,
|
|
128
|
-
editWorkAddressForm:
|
|
129
|
-
changeWorkAddressForm:
|
|
129
|
+
editWorkAddressForm: P,
|
|
130
|
+
changeWorkAddressForm: _
|
|
130
131
|
},
|
|
131
132
|
status: {
|
|
132
133
|
isDeletePending: l.isPending,
|
|
133
134
|
isEmployeeError: !1
|
|
134
135
|
},
|
|
135
136
|
errorHandling: i,
|
|
136
|
-
actions:
|
|
137
|
+
actions: A
|
|
137
138
|
};
|
|
138
139
|
}
|
|
139
140
|
export {
|
|
140
|
-
|
|
141
|
-
|
|
141
|
+
ie as isUseWorkAddressManagementSuccess,
|
|
142
|
+
de as useWorkAddressManagement
|
|
142
143
|
};
|
|
143
144
|
//# sourceMappingURL=useWorkAddressManagement.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useWorkAddressManagement.js","sources":["../../../../../src/components/Employee/WorkAddress/management/useWorkAddressManagement.tsx"],"sourcesContent":["import { useMemo, useState } from 'react'\nimport type { EmployeeWorkAddress } from '@gusto/embedded-api/models/components/employeeworkaddress'\nimport { useEmployeeAddressesDeleteWorkAddressMutation } from '@gusto/embedded-api/react-query/employeeAddressesDeleteWorkAddress'\nimport { useEmployeeAddressesGetWorkAddresses } from '@gusto/embedded-api/react-query/employeeAddressesGetWorkAddresses'\nimport { useEmployeesGet } from '@gusto/embedded-api/react-query/employeesGet'\nimport type { OnEventType } from '@/components/Base/useBase'\nimport { useBaseSubmit } from '@/components/Base/useBaseSubmit'\nimport { useWorkAddressForm } from '@/components/Employee/Profile/shared/useWorkAddressForm'\nimport type {\n UseWorkAddressFormReady,\n UseWorkAddressFormResult,\n} from '@/components/Employee/Profile/shared/useWorkAddressForm'\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 { normalizeToSDKError, SDKInternalError } from '@/types/sdkError'\nimport { componentEvents, type EventType } from '@/shared/constants'\n\nexport interface UseWorkAddressManagementParams {\n employeeId: string\n onEvent: OnEventType<EventType, unknown>\n}\n\nexport interface UseWorkAddressManagementDataPendingForms extends Record<string, unknown> {\n employeeDisplayName: string\n employeeWorkAddresses: EmployeeWorkAddress[] | undefined\n editTargetUuid: string | undefined\n editWorkAddressForm: UseWorkAddressFormResult\n changeWorkAddressForm: UseWorkAddressFormResult\n}\n\nexport interface UseWorkAddressManagementDataReady extends Record<string, unknown> {\n employeeDisplayName: string\n employeeWorkAddresses: EmployeeWorkAddress[] | undefined\n editTargetUuid: string | undefined\n editWorkAddressForm: UseWorkAddressFormReady\n changeWorkAddressForm: UseWorkAddressFormReady\n}\n\nexport interface UseWorkAddressManagementStatusEmployeeError extends Record<string, unknown> {\n isDeletePending: boolean\n isEmployeeError: true\n}\n\nexport interface UseWorkAddressManagementStatusSuccess extends Record<string, unknown> {\n isDeletePending: boolean\n isEmployeeError: false\n}\n\nexport interface UseWorkAddressManagementActions {\n setEditTargetUuid: (workAddressUuid: string | undefined) => void\n confirmDeleteWorkAddress: (workAddressUuid: string) => Promise<boolean>\n}\n\nexport interface UseWorkAddressManagementReadyEmployeeError extends BaseHookReady<\n UseWorkAddressManagementDataPendingForms,\n UseWorkAddressManagementStatusEmployeeError\n> {\n actions: UseWorkAddressManagementActions\n}\n\nexport interface UseWorkAddressManagementReadySuccess extends BaseHookReady<\n UseWorkAddressManagementDataReady,\n UseWorkAddressManagementStatusSuccess\n> {\n actions: UseWorkAddressManagementActions\n}\n\nexport type UseWorkAddressManagementReady =\n | UseWorkAddressManagementReadyEmployeeError\n | UseWorkAddressManagementReadySuccess\n\nexport type UseWorkAddressManagementResult = HookLoadingResult | UseWorkAddressManagementReady\n\nexport function isUseWorkAddressManagementSuccess(\n value: UseWorkAddressManagementResult,\n): value is UseWorkAddressManagementReadySuccess {\n if (value.isLoading) {\n return false\n }\n return !value.status.isEmployeeError\n}\n\nfunction workAddressFormsReady(\n editWorkAddressForm: UseWorkAddressFormResult,\n changeWorkAddressForm: UseWorkAddressFormResult,\n): Pick<UseWorkAddressManagementDataReady, 'editWorkAddressForm' | 'changeWorkAddressForm'> {\n if (editWorkAddressForm.isLoading) {\n throw new SDKInternalError('Edit work address form is still loading')\n }\n if (changeWorkAddressForm.isLoading) {\n throw new SDKInternalError('Change work address form is still loading')\n }\n return {\n editWorkAddressForm,\n changeWorkAddressForm,\n }\n}\n\nexport function useWorkAddressManagement({\n employeeId,\n onEvent,\n}: UseWorkAddressManagementParams): UseWorkAddressManagementResult {\n const {\n baseSubmitHandler,\n error: rootSubmitError,\n setError: setRootSubmitError,\n } = useBaseSubmit('Employee.WorkAddress.Management')\n const deleteWorkAddressMutation = useEmployeeAddressesDeleteWorkAddressMutation()\n const [editTargetUuid, setEditTargetUuid] = useState<string | undefined>(undefined)\n\n const employeeQuery = useEmployeesGet({ employeeId }, { enabled: !!employeeId })\n const companyId = employeeQuery.data?.employee?.companyUuid\n\n const workAddressesQuery = useEmployeeAddressesGetWorkAddresses(\n { employeeId },\n { enabled: !!employeeId && !!companyId },\n )\n\n const employeeWorkAddresses = workAddressesQuery.data?.employeeWorkAddressesList\n\n const currentWorkAddress = useMemo<EmployeeWorkAddress | null>(() => {\n if (!employeeWorkAddresses?.length) {\n return null\n }\n return employeeWorkAddresses.find(w => w.active) ?? employeeWorkAddresses[0] ?? null\n }, [employeeWorkAddresses])\n\n const workAddressUuidForEdit = editTargetUuid ?? currentWorkAddress?.uuid\n\n const editInactiveRow = useMemo(() => {\n if (!editTargetUuid || !employeeWorkAddresses) {\n return undefined\n }\n return employeeWorkAddresses.find(w => w.uuid === editTargetUuid)\n }, [editTargetUuid, employeeWorkAddresses])\n\n const withEffectiveDateOnEdit = editInactiveRow ? editInactiveRow.active !== true : false\n\n const editWorkAddressForm = useWorkAddressForm({\n companyId,\n employeeId,\n workAddressUuid: workAddressUuidForEdit,\n withEffectiveDateField: withEffectiveDateOnEdit,\n })\n\n const changeWorkAddressForm = useWorkAddressForm({\n companyId,\n employeeId,\n withEffectiveDateField: true,\n })\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 isMissingCompany = !!employeeQuery.data?.employee && !companyId\n\n const errorHandling: HookErrorHandling = composeErrorHandler(\n [\n employeeQuery,\n workAddressesQuery,\n editWorkAddressForm,\n changeWorkAddressForm,\n ...(isMissingCompany\n ? [\n {\n errorHandling: {\n errors: [\n normalizeToSDKError(\n new SDKInternalError(\n 'Employee record is missing companyUuid, which is required to load work address locations.',\n ),\n ),\n ],\n retryQueries: () => {},\n clearSubmitError: () => {},\n },\n },\n ]\n : []),\n ],\n { submitError: rootSubmitError, setSubmitError: setRootSubmitError },\n )\n\n const confirmDeleteWorkAddress = async (workAddressUuid: string): Promise<boolean> => {\n const snapshot = employeeWorkAddresses?.find(w => w.uuid === workAddressUuid) ?? null\n\n let succeeded = false\n await baseSubmitHandler(\n { workAddressUuid, snapshot },\n async ({ workAddressUuid: uuid, snapshot: snap }) => {\n const target = employeeWorkAddresses?.find(w => w.uuid === uuid)\n if (!target) {\n throw new SDKInternalError('Work address not found')\n }\n if (target.active === true) {\n throw new SDKInternalError('Cannot delete the active work address')\n }\n\n await deleteWorkAddressMutation.mutateAsync({\n request: { workAddressUuid: uuid },\n })\n succeeded = true\n if (snap) {\n onEvent(componentEvents.EMPLOYEE_WORK_ADDRESS_DELETED, snap)\n }\n },\n )\n return succeeded\n }\n\n const actions: UseWorkAddressManagementActions = {\n setEditTargetUuid,\n confirmDeleteWorkAddress,\n }\n\n const dataPayloadPendingForms: UseWorkAddressManagementDataPendingForms = {\n employeeDisplayName,\n employeeWorkAddresses,\n editTargetUuid,\n editWorkAddressForm,\n changeWorkAddressForm,\n }\n\n if (employeeQuery.isLoading) {\n return { isLoading: true, errorHandling }\n }\n\n if (employeeQuery.isError || isMissingCompany) {\n return {\n isLoading: false,\n data: dataPayloadPendingForms,\n status: {\n isDeletePending: deleteWorkAddressMutation.isPending,\n isEmployeeError: true,\n },\n errorHandling,\n actions,\n }\n }\n\n if (workAddressesQuery.isLoading) {\n return { isLoading: true, errorHandling }\n }\n\n const isFormsLoading = editWorkAddressForm.isLoading || changeWorkAddressForm.isLoading\n if (isFormsLoading) {\n return { isLoading: true, errorHandling }\n }\n\n const { editWorkAddressForm: editReady, changeWorkAddressForm: changeReady } =\n workAddressFormsReady(editWorkAddressForm, changeWorkAddressForm)\n\n const dataReady: UseWorkAddressManagementDataReady = {\n employeeDisplayName,\n employeeWorkAddresses,\n editTargetUuid,\n editWorkAddressForm: editReady,\n changeWorkAddressForm: changeReady,\n }\n\n return {\n isLoading: false,\n data: dataReady,\n status: {\n isDeletePending: deleteWorkAddressMutation.isPending,\n isEmployeeError: false,\n },\n errorHandling,\n actions,\n }\n}\n"],"names":["isUseWorkAddressManagementSuccess","value","workAddressFormsReady","editWorkAddressForm","changeWorkAddressForm","SDKInternalError","useWorkAddressManagement","employeeId","onEvent","baseSubmitHandler","rootSubmitError","setRootSubmitError","useBaseSubmit","deleteWorkAddressMutation","useEmployeeAddressesDeleteWorkAddressMutation","editTargetUuid","setEditTargetUuid","useState","employeeQuery","useEmployeesGet","companyId","workAddressesQuery","useEmployeeAddressesGetWorkAddresses","employeeWorkAddresses","currentWorkAddress","useMemo","w","workAddressUuidForEdit","editInactiveRow","withEffectiveDateOnEdit","useWorkAddressForm","employeeDisplayName","employee","firstLastName","isMissingCompany","errorHandling","composeErrorHandler","normalizeToSDKError","actions","workAddressUuid","snapshot","succeeded","uuid","snap","target","componentEvents","dataPayloadPendingForms","editReady","changeReady"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useWorkAddressManagement.js","sources":["../../../../../src/components/Employee/WorkAddress/management/useWorkAddressManagement.tsx"],"sourcesContent":["import { useMemo, useState } from 'react'\nimport type { EmployeeWorkAddress } from '@gusto/embedded-api/models/components/employeeworkaddress'\nimport { useEmployeeAddressesDeleteWorkAddressMutation } from '@gusto/embedded-api/react-query/employeeAddressesDeleteWorkAddress'\nimport { useEmployeeAddressesGetWorkAddresses } from '@gusto/embedded-api/react-query/employeeAddressesGetWorkAddresses'\nimport { useEmployeesGet } from '@gusto/embedded-api/react-query/employeesGet'\nimport type { OnEventType } from '@/components/Base/useBase'\nimport { useBaseSubmit } from '@/components/Base/useBaseSubmit'\nimport { useWorkAddressForm } from '@/components/Employee/Profile/shared/useWorkAddressForm'\nimport type {\n UseWorkAddressFormReady,\n UseWorkAddressFormResult,\n} from '@/components/Employee/Profile/shared/useWorkAddressForm'\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 { normalizeToSDKError, SDKInternalError } from '@/types/sdkError'\nimport { componentEvents, type EventType } from '@/shared/constants'\n\nexport interface UseWorkAddressManagementParams {\n employeeId: string\n onEvent: OnEventType<EventType, unknown>\n}\n\nexport interface UseWorkAddressManagementDataPendingForms extends Record<string, unknown> {\n employeeDisplayName: string\n employeeWorkAddresses: EmployeeWorkAddress[] | undefined\n editTargetUuid: string | undefined\n editWorkAddressForm: UseWorkAddressFormResult\n changeWorkAddressForm: UseWorkAddressFormResult\n}\n\nexport interface UseWorkAddressManagementDataReady extends Record<string, unknown> {\n employeeDisplayName: string\n employeeWorkAddresses: EmployeeWorkAddress[] | undefined\n editTargetUuid: string | undefined\n editWorkAddressForm: UseWorkAddressFormReady\n changeWorkAddressForm: UseWorkAddressFormReady\n}\n\nexport interface UseWorkAddressManagementStatusEmployeeError extends Record<string, unknown> {\n isDeletePending: boolean\n isEmployeeError: true\n}\n\nexport interface UseWorkAddressManagementStatusSuccess extends Record<string, unknown> {\n isDeletePending: boolean\n isEmployeeError: false\n}\n\nexport interface UseWorkAddressManagementActions {\n setEditTargetUuid: (workAddressUuid: string | undefined) => void\n confirmDeleteWorkAddress: (workAddressUuid: string) => Promise<boolean>\n}\n\nexport interface UseWorkAddressManagementReadyEmployeeError extends BaseHookReady<\n UseWorkAddressManagementDataPendingForms,\n UseWorkAddressManagementStatusEmployeeError\n> {\n actions: UseWorkAddressManagementActions\n}\n\nexport interface UseWorkAddressManagementReadySuccess extends BaseHookReady<\n UseWorkAddressManagementDataReady,\n UseWorkAddressManagementStatusSuccess\n> {\n actions: UseWorkAddressManagementActions\n}\n\nexport type UseWorkAddressManagementReady =\n | UseWorkAddressManagementReadyEmployeeError\n | UseWorkAddressManagementReadySuccess\n\nexport type UseWorkAddressManagementResult = HookLoadingResult | UseWorkAddressManagementReady\n\nexport function isUseWorkAddressManagementSuccess(\n value: UseWorkAddressManagementResult,\n): value is UseWorkAddressManagementReadySuccess {\n if (value.isLoading) {\n return false\n }\n return !value.status.isEmployeeError\n}\n\nfunction workAddressFormsReady(\n editWorkAddressForm: UseWorkAddressFormResult,\n changeWorkAddressForm: UseWorkAddressFormResult,\n): Pick<UseWorkAddressManagementDataReady, 'editWorkAddressForm' | 'changeWorkAddressForm'> {\n if (editWorkAddressForm.isLoading) {\n throw new SDKInternalError('Edit work address form is still loading')\n }\n if (changeWorkAddressForm.isLoading) {\n throw new SDKInternalError('Change work address form is still loading')\n }\n return {\n editWorkAddressForm,\n changeWorkAddressForm,\n }\n}\n\nexport function useWorkAddressManagement({\n employeeId,\n onEvent,\n}: UseWorkAddressManagementParams): UseWorkAddressManagementResult {\n const {\n baseSubmitHandler,\n error: rootSubmitError,\n setError: setRootSubmitError,\n } = useBaseSubmit('Employee.WorkAddress.Management')\n const deleteWorkAddressMutation = useEmployeeAddressesDeleteWorkAddressMutation()\n const [editTargetUuid, setEditTargetUuid] = useState<string | undefined>(undefined)\n\n const employeeQuery = useEmployeesGet({ employeeId }, { enabled: !!employeeId })\n const companyId = employeeQuery.data?.employee?.companyUuid\n\n const workAddressesQuery = useEmployeeAddressesGetWorkAddresses(\n { employeeId },\n { enabled: !!employeeId && !!companyId },\n )\n\n const employeeWorkAddresses = workAddressesQuery.data?.employeeWorkAddressesList\n\n const currentWorkAddress = useMemo<EmployeeWorkAddress | null>(() => {\n if (!employeeWorkAddresses?.length) {\n return null\n }\n return employeeWorkAddresses.find(w => w.active) ?? employeeWorkAddresses[0] ?? null\n }, [employeeWorkAddresses])\n\n const workAddressUuidForEdit = editTargetUuid ?? currentWorkAddress?.uuid\n\n const editInactiveRow = useMemo(() => {\n if (!editTargetUuid || !employeeWorkAddresses) {\n return undefined\n }\n return employeeWorkAddresses.find(w => w.uuid === editTargetUuid)\n }, [editTargetUuid, employeeWorkAddresses])\n\n const editingWorkAddressRow = workAddressUuidForEdit\n ? employeeWorkAddresses?.find(w => w.uuid === workAddressUuidForEdit)\n : undefined\n\n const withEffectiveDateOnEdit = editInactiveRow ? editInactiveRow.active !== true : false\n\n const editWorkAddressForm = useWorkAddressForm({\n companyId,\n employeeId,\n workAddressUuid: workAddressUuidForEdit,\n initialAddress: editingWorkAddressRow,\n withEffectiveDateField: withEffectiveDateOnEdit,\n })\n\n const changeWorkAddressForm = useWorkAddressForm({\n companyId,\n employeeId,\n withEffectiveDateField: true,\n })\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 isMissingCompany = !!employeeQuery.data?.employee && !companyId\n\n const errorHandling: HookErrorHandling = composeErrorHandler(\n [\n employeeQuery,\n workAddressesQuery,\n editWorkAddressForm,\n changeWorkAddressForm,\n ...(isMissingCompany\n ? [\n {\n errorHandling: {\n errors: [\n normalizeToSDKError(\n new SDKInternalError(\n 'Employee record is missing companyUuid, which is required to load work address locations.',\n ),\n ),\n ],\n retryQueries: () => {},\n clearSubmitError: () => {},\n },\n },\n ]\n : []),\n ],\n { submitError: rootSubmitError, setSubmitError: setRootSubmitError },\n )\n\n const confirmDeleteWorkAddress = async (workAddressUuid: string): Promise<boolean> => {\n const snapshot = employeeWorkAddresses?.find(w => w.uuid === workAddressUuid) ?? null\n\n let succeeded = false\n await baseSubmitHandler(\n { workAddressUuid, snapshot },\n async ({ workAddressUuid: uuid, snapshot: snap }) => {\n const target = employeeWorkAddresses?.find(w => w.uuid === uuid)\n if (!target) {\n throw new SDKInternalError('Work address not found')\n }\n if (target.active === true) {\n throw new SDKInternalError('Cannot delete the active work address')\n }\n\n await deleteWorkAddressMutation.mutateAsync({\n request: { workAddressUuid: uuid },\n })\n succeeded = true\n if (snap) {\n onEvent(componentEvents.EMPLOYEE_WORK_ADDRESS_DELETED, snap)\n }\n },\n )\n return succeeded\n }\n\n const actions: UseWorkAddressManagementActions = {\n setEditTargetUuid,\n confirmDeleteWorkAddress,\n }\n\n const dataPayloadPendingForms: UseWorkAddressManagementDataPendingForms = {\n employeeDisplayName,\n employeeWorkAddresses,\n editTargetUuid,\n editWorkAddressForm,\n changeWorkAddressForm,\n }\n\n if (employeeQuery.isLoading) {\n return { isLoading: true, errorHandling }\n }\n\n if (employeeQuery.isError || isMissingCompany) {\n return {\n isLoading: false,\n data: dataPayloadPendingForms,\n status: {\n isDeletePending: deleteWorkAddressMutation.isPending,\n isEmployeeError: true,\n },\n errorHandling,\n actions,\n }\n }\n\n if (workAddressesQuery.isLoading) {\n return { isLoading: true, errorHandling }\n }\n\n const isFormsLoading = editWorkAddressForm.isLoading || changeWorkAddressForm.isLoading\n if (isFormsLoading) {\n return { isLoading: true, errorHandling }\n }\n\n const { editWorkAddressForm: editReady, changeWorkAddressForm: changeReady } =\n workAddressFormsReady(editWorkAddressForm, changeWorkAddressForm)\n\n const dataReady: UseWorkAddressManagementDataReady = {\n employeeDisplayName,\n employeeWorkAddresses,\n editTargetUuid,\n editWorkAddressForm: editReady,\n changeWorkAddressForm: changeReady,\n }\n\n return {\n isLoading: false,\n data: dataReady,\n status: {\n isDeletePending: deleteWorkAddressMutation.isPending,\n isEmployeeError: false,\n },\n errorHandling,\n actions,\n }\n}\n"],"names":["isUseWorkAddressManagementSuccess","value","workAddressFormsReady","editWorkAddressForm","changeWorkAddressForm","SDKInternalError","useWorkAddressManagement","employeeId","onEvent","baseSubmitHandler","rootSubmitError","setRootSubmitError","useBaseSubmit","deleteWorkAddressMutation","useEmployeeAddressesDeleteWorkAddressMutation","editTargetUuid","setEditTargetUuid","useState","employeeQuery","useEmployeesGet","companyId","workAddressesQuery","useEmployeeAddressesGetWorkAddresses","employeeWorkAddresses","currentWorkAddress","useMemo","w","workAddressUuidForEdit","editInactiveRow","editingWorkAddressRow","withEffectiveDateOnEdit","useWorkAddressForm","employeeDisplayName","employee","firstLastName","isMissingCompany","errorHandling","composeErrorHandler","normalizeToSDKError","actions","workAddressUuid","snapshot","succeeded","uuid","snap","target","componentEvents","dataPayloadPendingForms","editReady","changeReady"],"mappings":"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"}
|
|
@@ -19,13 +19,12 @@ import "@gusto/embedded-api/models/errors/unprocessableentityerror";
|
|
|
19
19
|
import "@gusto/embedded-api/models/errors/httpclienterrors";
|
|
20
20
|
import { formatNumberAsCurrency as L } from "../../../helpers/formattedStrings.js";
|
|
21
21
|
import { useComponentContext as V } from "../../../contexts/ComponentAdapter/useComponentContext.js";
|
|
22
|
-
import "../../../contexts/LoadingIndicatorProvider/useLoadingIndicator.js";
|
|
23
22
|
import { useI18n as E } from "../../../i18n/I18n.js";
|
|
24
23
|
import { NumberInputField as T } from "../../Common/Fields/NumberInputField/NumberInputField.js";
|
|
25
24
|
const q = P.object({
|
|
26
25
|
netPay: P.number().positive()
|
|
27
26
|
});
|
|
28
|
-
function
|
|
27
|
+
function fe({ isOpen: n, onCalculateGrossUp: w, onApply: A, onCancel: d }) {
|
|
29
28
|
E("Payroll.GrossUpModal");
|
|
30
29
|
const { t: r } = k("Payroll.GrossUpModal"), { Modal: M, Heading: u, Text: p, Button: i, Alert: f } = V(), { baseSubmitHandler: y } = H(), N = R(null), [l, c] = o(null), [h, m] = o(null), [g, b] = o(!1), [x, v] = o(!1), s = U({
|
|
31
30
|
resolver: z(q),
|
|
@@ -112,6 +111,6 @@ function ye({ isOpen: n, onCalculateGrossUp: w, onApply: A, onCancel: d }) {
|
|
|
112
111
|
);
|
|
113
112
|
}
|
|
114
113
|
export {
|
|
115
|
-
|
|
114
|
+
fe as GrossUpModal
|
|
116
115
|
};
|
|
117
116
|
//# sourceMappingURL=GrossUpModal.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GrossUpModal.js","sources":["../../../../src/components/Payroll/GrossUpModal/GrossUpModal.tsx"],"sourcesContent":["import { useEffect, useRef, useState } from 'react'\nimport { FormProvider, useForm } from 'react-hook-form'\nimport { useTranslation } from 'react-i18next'\nimport { z } from 'zod'\nimport { zodResolver } from '@hookform/resolvers/zod'\nimport type { GrossUpModalProps } from './GrossUpModalTypes'\nimport styles from './GrossUpModal.module.scss'\nimport { ActionsLayout, Flex, NumberInputField } from '@/components/Common'\nimport { useBase } from '@/components/Base'\nimport { useComponentContext } from '@/contexts/ComponentAdapter/useComponentContext'\nimport { useI18n } from '@/i18n'\nimport { formatNumberAsCurrency } from '@/helpers/formattedStrings'\n\nconst GrossUpFormSchema = z.object({\n netPay: z.number().positive(),\n})\n\ntype GrossUpFormValues = z.infer<typeof GrossUpFormSchema>\n\nexport function GrossUpModal({ isOpen, onCalculateGrossUp, onApply, onCancel }: GrossUpModalProps) {\n useI18n('Payroll.GrossUpModal')\n const { t } = useTranslation('Payroll.GrossUpModal')\n const { Modal, Heading, Text, Button, Alert } = useComponentContext()\n const { baseSubmitHandler } = useBase()\n const modalContainerRef = useRef<HTMLDivElement>(null)\n\n const [calculatedGrossUp, setCalculatedGrossUp] = useState<string | null>(null)\n const [errorMessage, setErrorMessage] = useState<string | null>(null)\n const [isCalculating, setIsCalculating] = useState(false)\n const [isApplying, setIsApplying] = useState(false)\n\n const formHandlers = useForm<GrossUpFormValues>({\n resolver: zodResolver(GrossUpFormSchema),\n defaultValues: { netPay: 0 },\n })\n\n useEffect(() => {\n if (!isOpen) {\n formHandlers.reset({ netPay: 0 })\n setCalculatedGrossUp(null)\n setErrorMessage(null)\n }\n }, [isOpen, formHandlers.reset])\n\n const handleCalculate = async (data: GrossUpFormValues) => {\n setErrorMessage(null)\n setCalculatedGrossUp(null)\n setIsCalculating(true)\n\n await baseSubmitHandler(null, async () => {\n try {\n const result = await onCalculateGrossUp(data.netPay)\n\n if (result) {\n setCalculatedGrossUp(result)\n } else {\n setErrorMessage(t('errorMessage'))\n }\n } finally {\n setIsCalculating(false)\n }\n })\n }\n\n const handleApply = async () => {\n if (calculatedGrossUp) {\n setIsApplying(true)\n await baseSubmitHandler(null, async () => {\n try {\n await onApply(calculatedGrossUp)\n } finally {\n setIsApplying(false)\n }\n })\n }\n }\n\n return (\n <Modal\n isOpen={isOpen}\n onClose={onCancel}\n containerRef={modalContainerRef}\n footer={\n <ActionsLayout>\n <Button\n variant=\"primary\"\n isDisabled={!calculatedGrossUp}\n onClick={handleApply}\n isLoading={isApplying}\n >\n {t('applyCta')}\n </Button>\n <Button variant=\"secondary\" onClick={onCancel}>\n {t('cancelCta')}\n </Button>\n </ActionsLayout>\n }\n >\n <FormProvider {...formHandlers}>\n <div className={styles.header}>\n <Heading as=\"h2\" styledAs=\"h3\">\n {t('title')}\n </Heading>\n <Text variant=\"supporting\" as=\"p\">\n {t('description')}\n </Text>\n </div>\n\n <div className={styles.content}>\n {errorMessage && (\n <div className={styles.alert}>\n <Alert label={errorMessage} status=\"error\" disableScrollIntoView />\n </div>\n )}\n\n <div className={styles.alert}>\n <Alert label={t('warning')} status=\"warning\" disableScrollIntoView />\n </div>\n\n <Flex flexDirection=\"row\" gap={8}>\n <NumberInputField\n name=\"netPay\"\n label={t('netPayLabel')}\n format=\"currency\"\n errorMessage={t('validations.netPay')}\n min={0}\n isRequired\n />\n <Button\n variant=\"secondary\"\n className={styles.calculateButton}\n isDisabled={isCalculating}\n onClick={formHandlers.handleSubmit(handleCalculate)}\n >\n {isCalculating ? t('calculatingCta') : t('calculateCta')}\n </Button>\n </Flex>\n\n {calculatedGrossUp && (\n <>\n <div className={styles.result}>\n <Text size=\"sm\" variant=\"supporting\" weight=\"semibold\">\n {t('grossPayResult')}\n </Text>\n <Heading as=\"h3\">{formatNumberAsCurrency(parseFloat(calculatedGrossUp))}</Heading>\n </div>\n </>\n )}\n </div>\n </FormProvider>\n </Modal>\n )\n}\n"],"names":["GrossUpFormSchema","z","GrossUpModal","isOpen","onCalculateGrossUp","onApply","onCancel","useI18n","t","useTranslation","Modal","Heading","Text","Button","Alert","useComponentContext","baseSubmitHandler","useBase","modalContainerRef","useRef","calculatedGrossUp","setCalculatedGrossUp","useState","errorMessage","setErrorMessage","isCalculating","setIsCalculating","isApplying","setIsApplying","formHandlers","useForm","zodResolver","useEffect","handleCalculate","data","result","jsx","ActionsLayout","jsxs","FormProvider","styles","Flex","NumberInputField","Fragment"],"mappings":"
|
|
1
|
+
{"version":3,"file":"GrossUpModal.js","sources":["../../../../src/components/Payroll/GrossUpModal/GrossUpModal.tsx"],"sourcesContent":["import { useEffect, useRef, useState } from 'react'\nimport { FormProvider, useForm } from 'react-hook-form'\nimport { useTranslation } from 'react-i18next'\nimport { z } from 'zod'\nimport { zodResolver } from '@hookform/resolvers/zod'\nimport type { GrossUpModalProps } from './GrossUpModalTypes'\nimport styles from './GrossUpModal.module.scss'\nimport { ActionsLayout, Flex, NumberInputField } from '@/components/Common'\nimport { useBase } from '@/components/Base'\nimport { useComponentContext } from '@/contexts/ComponentAdapter/useComponentContext'\nimport { useI18n } from '@/i18n'\nimport { formatNumberAsCurrency } from '@/helpers/formattedStrings'\n\nconst GrossUpFormSchema = z.object({\n netPay: z.number().positive(),\n})\n\ntype GrossUpFormValues = z.infer<typeof GrossUpFormSchema>\n\nexport function GrossUpModal({ isOpen, onCalculateGrossUp, onApply, onCancel }: GrossUpModalProps) {\n useI18n('Payroll.GrossUpModal')\n const { t } = useTranslation('Payroll.GrossUpModal')\n const { Modal, Heading, Text, Button, Alert } = useComponentContext()\n const { baseSubmitHandler } = useBase()\n const modalContainerRef = useRef<HTMLDivElement>(null)\n\n const [calculatedGrossUp, setCalculatedGrossUp] = useState<string | null>(null)\n const [errorMessage, setErrorMessage] = useState<string | null>(null)\n const [isCalculating, setIsCalculating] = useState(false)\n const [isApplying, setIsApplying] = useState(false)\n\n const formHandlers = useForm<GrossUpFormValues>({\n resolver: zodResolver(GrossUpFormSchema),\n defaultValues: { netPay: 0 },\n })\n\n useEffect(() => {\n if (!isOpen) {\n formHandlers.reset({ netPay: 0 })\n setCalculatedGrossUp(null)\n setErrorMessage(null)\n }\n }, [isOpen, formHandlers.reset])\n\n const handleCalculate = async (data: GrossUpFormValues) => {\n setErrorMessage(null)\n setCalculatedGrossUp(null)\n setIsCalculating(true)\n\n await baseSubmitHandler(null, async () => {\n try {\n const result = await onCalculateGrossUp(data.netPay)\n\n if (result) {\n setCalculatedGrossUp(result)\n } else {\n setErrorMessage(t('errorMessage'))\n }\n } finally {\n setIsCalculating(false)\n }\n })\n }\n\n const handleApply = async () => {\n if (calculatedGrossUp) {\n setIsApplying(true)\n await baseSubmitHandler(null, async () => {\n try {\n await onApply(calculatedGrossUp)\n } finally {\n setIsApplying(false)\n }\n })\n }\n }\n\n return (\n <Modal\n isOpen={isOpen}\n onClose={onCancel}\n containerRef={modalContainerRef}\n footer={\n <ActionsLayout>\n <Button\n variant=\"primary\"\n isDisabled={!calculatedGrossUp}\n onClick={handleApply}\n isLoading={isApplying}\n >\n {t('applyCta')}\n </Button>\n <Button variant=\"secondary\" onClick={onCancel}>\n {t('cancelCta')}\n </Button>\n </ActionsLayout>\n }\n >\n <FormProvider {...formHandlers}>\n <div className={styles.header}>\n <Heading as=\"h2\" styledAs=\"h3\">\n {t('title')}\n </Heading>\n <Text variant=\"supporting\" as=\"p\">\n {t('description')}\n </Text>\n </div>\n\n <div className={styles.content}>\n {errorMessage && (\n <div className={styles.alert}>\n <Alert label={errorMessage} status=\"error\" disableScrollIntoView />\n </div>\n )}\n\n <div className={styles.alert}>\n <Alert label={t('warning')} status=\"warning\" disableScrollIntoView />\n </div>\n\n <Flex flexDirection=\"row\" gap={8}>\n <NumberInputField\n name=\"netPay\"\n label={t('netPayLabel')}\n format=\"currency\"\n errorMessage={t('validations.netPay')}\n min={0}\n isRequired\n />\n <Button\n variant=\"secondary\"\n className={styles.calculateButton}\n isDisabled={isCalculating}\n onClick={formHandlers.handleSubmit(handleCalculate)}\n >\n {isCalculating ? t('calculatingCta') : t('calculateCta')}\n </Button>\n </Flex>\n\n {calculatedGrossUp && (\n <>\n <div className={styles.result}>\n <Text size=\"sm\" variant=\"supporting\" weight=\"semibold\">\n {t('grossPayResult')}\n </Text>\n <Heading as=\"h3\">{formatNumberAsCurrency(parseFloat(calculatedGrossUp))}</Heading>\n </div>\n </>\n )}\n </div>\n </FormProvider>\n </Modal>\n )\n}\n"],"names":["GrossUpFormSchema","z","GrossUpModal","isOpen","onCalculateGrossUp","onApply","onCancel","useI18n","t","useTranslation","Modal","Heading","Text","Button","Alert","useComponentContext","baseSubmitHandler","useBase","modalContainerRef","useRef","calculatedGrossUp","setCalculatedGrossUp","useState","errorMessage","setErrorMessage","isCalculating","setIsCalculating","isApplying","setIsApplying","formHandlers","useForm","zodResolver","useEffect","handleCalculate","data","result","jsx","ActionsLayout","jsxs","FormProvider","styles","Flex","NumberInputField","Fragment"],"mappings":"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"}
|
|
@@ -16,9 +16,8 @@ import "../../contexts/LocaleProvider/useLocale.js";
|
|
|
16
16
|
import "../../shared/constants.js";
|
|
17
17
|
import "classnames";
|
|
18
18
|
import "../../contexts/ComponentAdapter/useComponentContext.js";
|
|
19
|
-
import "../../contexts/LoadingIndicatorProvider/useLoadingIndicator.js";
|
|
20
19
|
import { retryAsync as x } from "../../helpers/retryAsync.js";
|
|
21
|
-
const q = 4, v = 1500, B = (e) => e instanceof T ? e.errors.some((r) => r.category === "invalid_operation") : !1,
|
|
20
|
+
const q = 4, v = 1500, B = (e) => e instanceof T ? e.errors.some((r) => r.category === "invalid_operation") : !1, $ = ({
|
|
22
21
|
companyId: e,
|
|
23
22
|
payrollId: r,
|
|
24
23
|
employeeUuids: a,
|
|
@@ -69,6 +68,6 @@ const q = 4, v = 1500, B = (e) => e instanceof T ? e.errors.some((r) => r.catego
|
|
|
69
68
|
};
|
|
70
69
|
};
|
|
71
70
|
export {
|
|
72
|
-
|
|
71
|
+
$ as usePreparedPayrollData
|
|
73
72
|
};
|
|
74
73
|
//# sourceMappingURL=usePreparedPayrollData.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usePreparedPayrollData.js","sources":["../../../src/components/Payroll/usePreparedPayrollData.ts"],"sourcesContent":["import { useState, useEffect, useCallback, useRef, useMemo } from 'react'\nimport { usePayrollsPrepareMutation } from '@gusto/embedded-api/react-query/payrollsPrepare'\nimport { usePaySchedulesGet } from '@gusto/embedded-api/react-query/paySchedulesGet'\nimport type { PayrollPrepared } from '@gusto/embedded-api/models/components/payroll'\nimport type { PayScheduleShow } from '@gusto/embedded-api/models/components/payscheduleshow'\nimport type { QueryParamSortBy } from '@gusto/embedded-api/models/operations/putv1companiescompanyidpayrollspayrollidprepare'\nimport { UnprocessableEntityError } from '@gusto/embedded-api/models/errors/unprocessableentityerror'\nimport { useBase } from '../Base'\nimport { retryAsync } from '@/helpers/retryAsync'\n\ninterface UsePreparedPayrollDataParams {\n companyId: string\n payrollId: string\n employeeUuids?: string[]\n sortBy?: QueryParamSortBy\n onDataReady?: (preparedPayroll: PayrollPrepared) => void\n}\n\ninterface UsePreparedPayrollDataReturn {\n handlePreparePayroll: () => Promise<void>\n preparedPayroll: PayrollPrepared | undefined\n paySchedule: PayScheduleShow | undefined\n isLoading: boolean\n isPaginating: boolean\n hasInitialData: boolean\n}\n\nconst PREPARE_MAX_ATTEMPTS = 4\nconst PREPARE_RETRY_DELAY_MS = 1500\n\nconst isPayrollBeingProcessedError = (error: unknown): boolean => {\n if (!(error instanceof UnprocessableEntityError)) return false\n return error.errors.some(e => e.category === 'invalid_operation')\n}\n\nexport const usePreparedPayrollData = ({\n companyId,\n payrollId,\n employeeUuids,\n sortBy,\n onDataReady,\n}: UsePreparedPayrollDataParams): UsePreparedPayrollDataReturn => {\n const { mutateAsync: preparePayroll, isPending: isPreparePayrollPending } =\n usePayrollsPrepareMutation()\n const [preparedPayroll, setPreparedPayroll] = useState<PayrollPrepared | undefined>()\n const hasInitialDataRef = useRef(false)\n const hasFiredRef = useRef(false)\n const { baseSubmitHandler } = useBase()\n\n const employeeUuidsKey = useMemo(() => employeeUuids?.join(',') ?? '', [employeeUuids])\n\n const { data: payScheduleData, isLoading: isPayScheduleLoading } = usePaySchedulesGet(\n {\n companyId,\n payScheduleId: preparedPayroll?.payPeriod?.payScheduleUuid || '',\n },\n {\n enabled: !!preparedPayroll?.payPeriod?.payScheduleUuid,\n },\n )\n\n const executePrepare = useCallback(async () => {\n const result = await preparePayroll({\n request: {\n companyId,\n payrollId,\n sortBy,\n requestBody: {\n employeeUuids,\n },\n },\n })\n setPreparedPayroll(result.payrollPrepared)\n if (result.payrollPrepared) {\n hasInitialDataRef.current = true\n onDataReady?.(result.payrollPrepared)\n }\n }, [companyId, payrollId, preparePayroll, employeeUuidsKey, sortBy, onDataReady])\n\n const handlePreparePayroll = useCallback(async () => {\n await baseSubmitHandler(null, () =>\n retryAsync(executePrepare, {\n maxAttempts: PREPARE_MAX_ATTEMPTS,\n delayMs: PREPARE_RETRY_DELAY_MS,\n shouldRetry: isPayrollBeingProcessedError,\n }),\n )\n }, [baseSubmitHandler, executePrepare])\n\n useEffect(() => {\n if (hasFiredRef.current) return\n hasFiredRef.current = true\n void handlePreparePayroll()\n }, [handlePreparePayroll])\n\n const isInitialLoading = isPreparePayrollPending && !hasInitialDataRef.current\n const isPaginating = isPreparePayrollPending && hasInitialDataRef.current\n const isLoading = isInitialLoading || isPayScheduleLoading\n\n return {\n handlePreparePayroll,\n preparedPayroll,\n paySchedule: payScheduleData?.payScheduleShow,\n isLoading,\n isPaginating,\n hasInitialData: hasInitialDataRef.current,\n }\n}\n"],"names":["PREPARE_MAX_ATTEMPTS","PREPARE_RETRY_DELAY_MS","isPayrollBeingProcessedError","error","UnprocessableEntityError","e","usePreparedPayrollData","companyId","payrollId","employeeUuids","sortBy","onDataReady","preparePayroll","isPreparePayrollPending","usePayrollsPrepareMutation","preparedPayroll","setPreparedPayroll","useState","hasInitialDataRef","useRef","hasFiredRef","baseSubmitHandler","useBase","employeeUuidsKey","useMemo","payScheduleData","isPayScheduleLoading","usePaySchedulesGet","executePrepare","useCallback","result","handlePreparePayroll","retryAsync","useEffect","isInitialLoading","isPaginating","isLoading"],"mappings":"
|
|
1
|
+
{"version":3,"file":"usePreparedPayrollData.js","sources":["../../../src/components/Payroll/usePreparedPayrollData.ts"],"sourcesContent":["import { useState, useEffect, useCallback, useRef, useMemo } from 'react'\nimport { usePayrollsPrepareMutation } from '@gusto/embedded-api/react-query/payrollsPrepare'\nimport { usePaySchedulesGet } from '@gusto/embedded-api/react-query/paySchedulesGet'\nimport type { PayrollPrepared } from '@gusto/embedded-api/models/components/payroll'\nimport type { PayScheduleShow } from '@gusto/embedded-api/models/components/payscheduleshow'\nimport type { QueryParamSortBy } from '@gusto/embedded-api/models/operations/putv1companiescompanyidpayrollspayrollidprepare'\nimport { UnprocessableEntityError } from '@gusto/embedded-api/models/errors/unprocessableentityerror'\nimport { useBase } from '../Base'\nimport { retryAsync } from '@/helpers/retryAsync'\n\ninterface UsePreparedPayrollDataParams {\n companyId: string\n payrollId: string\n employeeUuids?: string[]\n sortBy?: QueryParamSortBy\n onDataReady?: (preparedPayroll: PayrollPrepared) => void\n}\n\ninterface UsePreparedPayrollDataReturn {\n handlePreparePayroll: () => Promise<void>\n preparedPayroll: PayrollPrepared | undefined\n paySchedule: PayScheduleShow | undefined\n isLoading: boolean\n isPaginating: boolean\n hasInitialData: boolean\n}\n\nconst PREPARE_MAX_ATTEMPTS = 4\nconst PREPARE_RETRY_DELAY_MS = 1500\n\nconst isPayrollBeingProcessedError = (error: unknown): boolean => {\n if (!(error instanceof UnprocessableEntityError)) return false\n return error.errors.some(e => e.category === 'invalid_operation')\n}\n\nexport const usePreparedPayrollData = ({\n companyId,\n payrollId,\n employeeUuids,\n sortBy,\n onDataReady,\n}: UsePreparedPayrollDataParams): UsePreparedPayrollDataReturn => {\n const { mutateAsync: preparePayroll, isPending: isPreparePayrollPending } =\n usePayrollsPrepareMutation()\n const [preparedPayroll, setPreparedPayroll] = useState<PayrollPrepared | undefined>()\n const hasInitialDataRef = useRef(false)\n const hasFiredRef = useRef(false)\n const { baseSubmitHandler } = useBase()\n\n const employeeUuidsKey = useMemo(() => employeeUuids?.join(',') ?? '', [employeeUuids])\n\n const { data: payScheduleData, isLoading: isPayScheduleLoading } = usePaySchedulesGet(\n {\n companyId,\n payScheduleId: preparedPayroll?.payPeriod?.payScheduleUuid || '',\n },\n {\n enabled: !!preparedPayroll?.payPeriod?.payScheduleUuid,\n },\n )\n\n const executePrepare = useCallback(async () => {\n const result = await preparePayroll({\n request: {\n companyId,\n payrollId,\n sortBy,\n requestBody: {\n employeeUuids,\n },\n },\n })\n setPreparedPayroll(result.payrollPrepared)\n if (result.payrollPrepared) {\n hasInitialDataRef.current = true\n onDataReady?.(result.payrollPrepared)\n }\n }, [companyId, payrollId, preparePayroll, employeeUuidsKey, sortBy, onDataReady])\n\n const handlePreparePayroll = useCallback(async () => {\n await baseSubmitHandler(null, () =>\n retryAsync(executePrepare, {\n maxAttempts: PREPARE_MAX_ATTEMPTS,\n delayMs: PREPARE_RETRY_DELAY_MS,\n shouldRetry: isPayrollBeingProcessedError,\n }),\n )\n }, [baseSubmitHandler, executePrepare])\n\n useEffect(() => {\n if (hasFiredRef.current) return\n hasFiredRef.current = true\n void handlePreparePayroll()\n }, [handlePreparePayroll])\n\n const isInitialLoading = isPreparePayrollPending && !hasInitialDataRef.current\n const isPaginating = isPreparePayrollPending && hasInitialDataRef.current\n const isLoading = isInitialLoading || isPayScheduleLoading\n\n return {\n handlePreparePayroll,\n preparedPayroll,\n paySchedule: payScheduleData?.payScheduleShow,\n isLoading,\n isPaginating,\n hasInitialData: hasInitialDataRef.current,\n }\n}\n"],"names":["PREPARE_MAX_ATTEMPTS","PREPARE_RETRY_DELAY_MS","isPayrollBeingProcessedError","error","UnprocessableEntityError","e","usePreparedPayrollData","companyId","payrollId","employeeUuids","sortBy","onDataReady","preparePayroll","isPreparePayrollPending","usePayrollsPrepareMutation","preparedPayroll","setPreparedPayroll","useState","hasInitialDataRef","useRef","hasFiredRef","baseSubmitHandler","useBase","employeeUuidsKey","useMemo","payScheduleData","isPayScheduleLoading","usePaySchedulesGet","executePrepare","useCallback","result","handlePreparePayroll","retryAsync","useEffect","isInitialLoading","isPaginating","isLoading"],"mappings":";;;;;;;;;;;;;;;;;;;AA2BA,MAAMA,IAAuB,GACvBC,IAAyB,MAEzBC,IAA+B,CAACC,MAC9BA,aAAiBC,IAChBD,EAAM,OAAO,KAAK,CAAAE,MAAKA,EAAE,aAAa,mBAAmB,IADP,IAI9CC,IAAyB,CAAC;AAAA,EACrC,WAAAC;AAAA,EACA,WAAAC;AAAA,EACA,eAAAC;AAAA,EACA,QAAAC;AAAA,EACA,aAAAC;AACF,MAAkE;AAChE,QAAM,EAAE,aAAaC,GAAgB,WAAWC,EAAA,IAC9CC,EAAA,GACI,CAACC,GAAiBC,CAAkB,IAAIC,EAAA,GACxCC,IAAoBC,EAAO,EAAK,GAChCC,IAAcD,EAAO,EAAK,GAC1B,EAAE,mBAAAE,EAAA,IAAsBC,EAAA,GAExBC,IAAmBC,EAAQ,MAAMf,GAAe,KAAK,GAAG,KAAK,IAAI,CAACA,CAAa,CAAC,GAEhF,EAAE,MAAMgB,GAAiB,WAAWC,MAAyBC;AAAA,IACjE;AAAA,MACE,WAAApB;AAAA,MACA,eAAeQ,GAAiB,WAAW,mBAAmB;AAAA,IAAA;AAAA,IAEhE;AAAA,MACE,SAAS,CAAC,CAACA,GAAiB,WAAW;AAAA,IAAA;AAAA,EACzC,GAGIa,IAAiBC,EAAY,YAAY;AAC7C,UAAMC,IAAS,MAAMlB,EAAe;AAAA,MAClC,SAAS;AAAA,QACP,WAAAL;AAAA,QACA,WAAAC;AAAA,QACA,QAAAE;AAAA,QACA,aAAa;AAAA,UACX,eAAAD;AAAA,QAAA;AAAA,MACF;AAAA,IACF,CACD;AACD,IAAAO,EAAmBc,EAAO,eAAe,GACrCA,EAAO,oBACTZ,EAAkB,UAAU,IAC5BP,IAAcmB,EAAO,eAAe;AAAA,EAExC,GAAG,CAACvB,GAAWC,GAAWI,GAAgBW,GAAkBb,GAAQC,CAAW,CAAC,GAE1EoB,IAAuBF,EAAY,YAAY;AACnD,UAAMR;AAAA,MAAkB;AAAA,MAAM,MAC5BW,EAAWJ,GAAgB;AAAA,QACzB,aAAa5B;AAAA,QACb,SAASC;AAAA,QACT,aAAaC;AAAA,MAAA,CACd;AAAA,IAAA;AAAA,EAEL,GAAG,CAACmB,GAAmBO,CAAc,CAAC;AAEtC,EAAAK,EAAU,MAAM;AACd,IAAIb,EAAY,YAChBA,EAAY,UAAU,IACjBW,EAAA;AAAA,EACP,GAAG,CAACA,CAAoB,CAAC;AAEzB,QAAMG,IAAmBrB,KAA2B,CAACK,EAAkB,SACjEiB,IAAetB,KAA2BK,EAAkB,SAC5DkB,IAAYF,KAAoBR;AAEtC,SAAO;AAAA,IACL,sBAAAK;AAAA,IACA,iBAAAhB;AAAA,IACA,aAAaU,GAAiB;AAAA,IAC9B,WAAAW;AAAA,IACA,cAAAD;AAAA,IACA,gBAAgBjB,EAAkB;AAAA,EAAA;AAEtC;"}
|
|
@@ -7,7 +7,7 @@ import { SelectEmployeesPresentation as v } from "./SelectEmployeesPresentation.
|
|
|
7
7
|
import { useSelectEmployeesData as I } from "./useSelectEmployeesData.js";
|
|
8
8
|
import { useBase as q } from "../../../Base/useBase.js";
|
|
9
9
|
import { componentEvents as l } from "../../../../shared/constants.js";
|
|
10
|
-
function
|
|
10
|
+
function R(e) {
|
|
11
11
|
return e.mode === "wizard" ? /* @__PURE__ */ r(E, { ...e, mode: "wizard" }) : /* @__PURE__ */ r(x, { ...e });
|
|
12
12
|
}
|
|
13
13
|
function x(e) {
|
|
@@ -46,8 +46,8 @@ function E({
|
|
|
46
46
|
handleSelect: A,
|
|
47
47
|
handleSelectAll: _,
|
|
48
48
|
handleSearchChange: D,
|
|
49
|
-
handleSearchClear:
|
|
50
|
-
} = I(e, n), { mutateAsync: m, isPending:
|
|
49
|
+
handleSearchClear: O
|
|
50
|
+
} = I(e, n), { mutateAsync: m, isPending: g } = M(), C = p(async () => {
|
|
51
51
|
const y = [...d];
|
|
52
52
|
if (t === "wizard") {
|
|
53
53
|
o(l.TIME_OFF_HOLIDAY_ADD_EMPLOYEES_DONE, {
|
|
@@ -95,18 +95,17 @@ function E({
|
|
|
95
95
|
onSelect: A,
|
|
96
96
|
onSelectAll: _,
|
|
97
97
|
onSearchChange: D,
|
|
98
|
-
onSearchClear:
|
|
98
|
+
onSearchClear: O,
|
|
99
99
|
onBack: H,
|
|
100
100
|
onContinue: C,
|
|
101
|
-
showReassignmentWarning: !1,
|
|
102
101
|
isHolidayPolicy: !0,
|
|
103
102
|
pagination: h,
|
|
104
103
|
isFetching: S,
|
|
105
|
-
isPending:
|
|
104
|
+
isPending: g
|
|
106
105
|
}
|
|
107
106
|
);
|
|
108
107
|
}
|
|
109
108
|
export {
|
|
110
|
-
|
|
109
|
+
R as SelectEmployeesHoliday
|
|
111
110
|
};
|
|
112
111
|
//# sourceMappingURL=SelectEmployeesHoliday.js.map
|