@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.
Files changed (172) hide show
  1. package/CHANGELOG.md +67 -0
  2. package/dist/components/Common/DataView/DataTable/DataTable.js +76 -72
  3. package/dist/components/Common/DataView/DataTable/DataTable.js.map +1 -1
  4. package/dist/components/Common/DataView/DataTable/DataTable.module.scss.js +8 -0
  5. package/dist/components/Common/DataView/DataTable/DataTable.module.scss.js.map +1 -0
  6. package/dist/components/Common/DataView/useDataView.d.ts +2 -0
  7. package/dist/components/Common/DataView/useDataView.js.map +1 -1
  8. package/dist/components/Common/DocumentViewer/DocumentViewer.js +10 -10
  9. package/dist/components/Common/DocumentViewer/DocumentViewer.js.map +1 -1
  10. package/dist/components/Common/DocumentViewer/DocumentViewer.module.scss.js +9 -9
  11. package/dist/components/Common/PaginationControl/PaginationControl.js +11 -10
  12. package/dist/components/Common/PaginationControl/PaginationControl.js.map +1 -1
  13. package/dist/components/Common/PaginationControl/PaginationControlTypes.d.ts +1 -1
  14. package/dist/components/Common/UI/DescriptionList/DescriptionList.js +11 -10
  15. package/dist/components/Common/UI/DescriptionList/DescriptionList.js.map +1 -1
  16. package/dist/components/Common/UI/DescriptionList/DescriptionList.module.scss.js +4 -4
  17. package/dist/components/Common/UI/Input/InputTypes.d.ts +1 -1
  18. package/dist/components/Common/UI/Input/InputTypes.js.map +1 -1
  19. package/dist/components/Common/UI/NumberInput/NumberInput.js +51 -48
  20. package/dist/components/Common/UI/NumberInput/NumberInput.js.map +1 -1
  21. package/dist/components/Common/VisuallyHidden/VisuallyHidden.d.ts +1 -1
  22. package/dist/components/Common/VisuallyHidden/VisuallyHidden.js.map +1 -1
  23. package/dist/components/Company/AssignSignatory/CreateSignatory/useCreateSignatory.js +3 -4
  24. package/dist/components/Company/AssignSignatory/CreateSignatory/useCreateSignatory.js.map +1 -1
  25. package/dist/components/Company/AssignSignatory/InviteSignatory/useInviteSignatory.js +3 -4
  26. package/dist/components/Company/AssignSignatory/InviteSignatory/useInviteSignatory.js.map +1 -1
  27. package/dist/components/Company/AssignSignatory/useAssignSignatory.js +5 -6
  28. package/dist/components/Company/AssignSignatory/useAssignSignatory.js.map +1 -1
  29. package/dist/components/Company/BankAccount/BankAccountForm/context.js +3 -4
  30. package/dist/components/Company/BankAccount/BankAccountForm/context.js.map +1 -1
  31. package/dist/components/Company/DocumentSigner/DocumentList/useDocumentList.js +3 -4
  32. package/dist/components/Company/DocumentSigner/DocumentList/useDocumentList.js.map +1 -1
  33. package/dist/components/Company/DocumentSigner/shared/useSignCompanyForm/fields.js +4 -4
  34. package/dist/components/Company/FederalTaxes/useFederalTaxes.js +5 -6
  35. package/dist/components/Company/FederalTaxes/useFederalTaxes.js.map +1 -1
  36. package/dist/components/Company/Industry/Context.js +6 -7
  37. package/dist/components/Company/Industry/Context.js.map +1 -1
  38. package/dist/components/Company/Locations/LocationForm/useLocationForm.js +3 -4
  39. package/dist/components/Company/Locations/LocationForm/useLocationForm.js.map +1 -1
  40. package/dist/components/Company/Locations/LocationsList/useLocationsList.js +3 -4
  41. package/dist/components/Company/Locations/LocationsList/useLocationsList.js.map +1 -1
  42. package/dist/components/Company/OnboardingOverview/context.js +3 -4
  43. package/dist/components/Company/OnboardingOverview/context.js.map +1 -1
  44. package/dist/components/Company/PaySchedule/shared/usePayScheduleForm/fields.js +5 -5
  45. package/dist/components/Company/StateTaxes/StateTaxesForm/context.js +3 -4
  46. package/dist/components/Company/StateTaxes/StateTaxesForm/context.js.map +1 -1
  47. package/dist/components/Company/StateTaxes/StateTaxesList/context.js +3 -4
  48. package/dist/components/Company/StateTaxes/StateTaxesList/context.js.map +1 -1
  49. package/dist/components/Contractor/Address/useAddress.js +5 -6
  50. package/dist/components/Contractor/Address/useAddress.js.map +1 -1
  51. package/dist/components/Contractor/Profile/useContractorProfile.js +33 -34
  52. package/dist/components/Contractor/Profile/useContractorProfile.js.map +1 -1
  53. package/dist/components/Employee/Compensation/management/EditCompensation/EditCompensation.js +14 -11
  54. package/dist/components/Employee/Compensation/management/EditCompensation/EditCompensation.js.map +1 -1
  55. package/dist/components/Employee/Compensation/management/EditPendingCompensation/EditPendingCompensation.js +0 -2
  56. package/dist/components/Employee/Compensation/management/EditPendingCompensation/EditPendingCompensation.js.map +1 -1
  57. package/dist/components/Employee/Compensation/management/ManagementCompensationFormBody.js +18 -18
  58. package/dist/components/Employee/Compensation/management/ManagementCompensationFormBody.js.map +1 -1
  59. package/dist/components/Employee/Compensation/onboarding/JobsList/JobsListPresentation.js +36 -36
  60. package/dist/components/Employee/Compensation/onboarding/JobsList/JobsListPresentation.js.map +1 -1
  61. package/dist/components/Employee/Compensation/shared/useCompensationForm/fields.js +4 -4
  62. package/dist/components/Employee/Compensation/shared/useCompensationForm/useCompensationForm.js +140 -140
  63. package/dist/components/Employee/Compensation/shared/useCompensationForm/useCompensationForm.js.map +1 -1
  64. package/dist/components/Employee/Compensation/shared/useJobForm/fields.js +6 -6
  65. package/dist/components/Employee/Compensation/shared/useJobForm/useJobForm.d.ts +6 -5
  66. package/dist/components/Employee/Compensation/shared/useJobForm/useJobForm.js +162 -131
  67. package/dist/components/Employee/Compensation/shared/useJobForm/useJobForm.js.map +1 -1
  68. package/dist/components/Employee/Dashboard/BasicDetailsView.js +74 -88
  69. package/dist/components/Employee/Dashboard/BasicDetailsView.js.map +1 -1
  70. package/dist/components/Employee/Dashboard/Dashboard.js +53 -51
  71. package/dist/components/Employee/Dashboard/Dashboard.js.map +1 -1
  72. package/dist/components/Employee/Dashboard/DocumentsView.js +17 -10
  73. package/dist/components/Employee/Dashboard/DocumentsView.js.map +1 -1
  74. package/dist/components/Employee/Dashboard/JobAndPayView.js +383 -357
  75. package/dist/components/Employee/Dashboard/JobAndPayView.js.map +1 -1
  76. package/dist/components/Employee/Dashboard/TaxesView.js +114 -101
  77. package/dist/components/Employee/Dashboard/TaxesView.js.map +1 -1
  78. package/dist/components/Employee/Dashboard/getPendingCompensationChanges.js +36 -36
  79. package/dist/components/Employee/Dashboard/getPendingCompensationChanges.js.map +1 -1
  80. package/dist/components/Employee/Deductions/DeductionsForm/StandardDeductionForm.js +57 -57
  81. package/dist/components/Employee/Deductions/DeductionsForm/StandardDeductionForm.js.map +1 -1
  82. package/dist/components/Employee/Deductions/shared/useChildSupportGarnishmentForm/childSupportGarnishmentFormSchema.d.ts +14 -5
  83. package/dist/components/Employee/Deductions/shared/useChildSupportGarnishmentForm/childSupportGarnishmentFormSchema.js +55 -36
  84. package/dist/components/Employee/Deductions/shared/useChildSupportGarnishmentForm/childSupportGarnishmentFormSchema.js.map +1 -1
  85. package/dist/components/Employee/Deductions/shared/useChildSupportGarnishmentForm/fields.js +8 -8
  86. package/dist/components/Employee/Deductions/shared/useChildSupportGarnishmentForm/useChildSupportGarnishmentForm.js +18 -18
  87. package/dist/components/Employee/Deductions/shared/useChildSupportGarnishmentForm/useChildSupportGarnishmentForm.js.map +1 -1
  88. package/dist/components/Employee/Deductions/shared/useDeductionForm/fields.js +4 -4
  89. package/dist/components/Employee/Deductions/shared/useDeductionForm/useDeductionForm.d.ts +3 -3
  90. package/dist/components/Employee/Deductions/shared/useDeductionForm/useDeductionForm.js.map +1 -1
  91. package/dist/components/Employee/Documents/onboarding/DocumentSigner/DocumentList/useDocumentList.js +3 -4
  92. package/dist/components/Employee/Documents/onboarding/DocumentSigner/DocumentList/useDocumentList.js.map +1 -1
  93. package/dist/components/Employee/Documents/shared/useSignEmployeeForm/fields.js +1 -1
  94. package/dist/components/Employee/FederalTaxes/shared/useFederalTaxesForm/fields.js +4 -4
  95. package/dist/components/Employee/HomeAddress/management/HomeAddressView.js +157 -147
  96. package/dist/components/Employee/HomeAddress/management/HomeAddressView.js.map +1 -1
  97. package/dist/components/Employee/HomeAddress/management/useHomeAddressManagement.js +56 -55
  98. package/dist/components/Employee/HomeAddress/management/useHomeAddressManagement.js.map +1 -1
  99. package/dist/components/Employee/PaymentMethod/onboarding/BankForm.js +20 -20
  100. package/dist/components/Employee/PaymentMethod/onboarding/BankForm.js.map +1 -1
  101. package/dist/components/Employee/PaymentMethod/shared/useBankForm/fields.js +1 -1
  102. package/dist/components/Employee/PaymentMethod/shared/useSplitPaymentsForm/splitFieldFactory.d.ts +1 -1
  103. package/dist/components/Employee/PaymentMethod/shared/useSplitPaymentsForm/splitFieldFactory.js +4 -4
  104. package/dist/components/Employee/PaymentMethod/shared/useSplitPaymentsForm/splitFieldFactory.js.map +1 -1
  105. package/dist/components/Employee/Profile/shared/useEmployeeDetailsForm/fields.js +8 -8
  106. package/dist/components/Employee/Profile/shared/useHomeAddressForm/fields.js +5 -5
  107. package/dist/components/Employee/Profile/shared/useHomeAddressForm/homeAddressSchema.d.ts +0 -1
  108. package/dist/components/Employee/Profile/shared/useHomeAddressForm/homeAddressSchema.js +11 -12
  109. package/dist/components/Employee/Profile/shared/useHomeAddressForm/homeAddressSchema.js.map +1 -1
  110. package/dist/components/Employee/Profile/shared/useHomeAddressForm/homeAddressSchema.test.d.ts +1 -0
  111. package/dist/components/Employee/Profile/shared/useHomeAddressForm/useHomeAddressForm.d.ts +6 -1
  112. package/dist/components/Employee/Profile/shared/useHomeAddressForm/useHomeAddressForm.js +95 -94
  113. package/dist/components/Employee/Profile/shared/useHomeAddressForm/useHomeAddressForm.js.map +1 -1
  114. package/dist/components/Employee/Profile/shared/useWorkAddressForm/fields.js +4 -4
  115. package/dist/components/Employee/Profile/shared/useWorkAddressForm/useWorkAddressForm.d.ts +6 -1
  116. package/dist/components/Employee/Profile/shared/useWorkAddressForm/useWorkAddressForm.js +87 -86
  117. package/dist/components/Employee/Profile/shared/useWorkAddressForm/useWorkAddressForm.js.map +1 -1
  118. package/dist/components/Employee/StateTaxes/shared/EmployeeStateTaxesView.js +18 -18
  119. package/dist/components/Employee/StateTaxes/shared/EmployeeStateTaxesView.js.map +1 -1
  120. package/dist/components/Employee/StateTaxes/shared/useEmployeeStateTaxesForm/fieldComponents.js +8 -8
  121. package/dist/components/Employee/Taxes/useTaxes.js +3 -4
  122. package/dist/components/Employee/Taxes/useTaxes.js.map +1 -1
  123. package/dist/components/Employee/WorkAddress/management/WorkAddressView.js +5 -1
  124. package/dist/components/Employee/WorkAddress/management/WorkAddressView.js.map +1 -1
  125. package/dist/components/Employee/WorkAddress/management/useWorkAddressManagement.js +61 -60
  126. package/dist/components/Employee/WorkAddress/management/useWorkAddressManagement.js.map +1 -1
  127. package/dist/components/Payroll/GrossUpModal/GrossUpModal.js +2 -3
  128. package/dist/components/Payroll/GrossUpModal/GrossUpModal.js.map +1 -1
  129. package/dist/components/Payroll/usePreparedPayrollData.js +2 -3
  130. package/dist/components/Payroll/usePreparedPayrollData.js.map +1 -1
  131. package/dist/components/TimeOff/TimeOffManagement/SelectEmployees/SelectEmployeesHoliday.js +6 -7
  132. package/dist/components/TimeOff/TimeOffManagement/SelectEmployees/SelectEmployeesHoliday.js.map +1 -1
  133. package/dist/components/TimeOff/TimeOffManagement/SelectEmployees/SelectEmployeesPresentation.d.ts +1 -1
  134. package/dist/components/TimeOff/TimeOffManagement/SelectEmployees/SelectEmployeesPresentation.js +52 -68
  135. package/dist/components/TimeOff/TimeOffManagement/SelectEmployees/SelectEmployeesPresentation.js.map +1 -1
  136. package/dist/components/TimeOff/TimeOffManagement/SelectEmployees/SelectEmployeesPresentation.module.scss.js +4 -4
  137. package/dist/components/TimeOff/TimeOffManagement/SelectEmployees/SelectEmployeesPresentationTypes.d.ts +0 -11
  138. package/dist/components/TimeOff/TimeOffManagement/SelectEmployees/SelectEmployeesTimeOff.js +137 -163
  139. package/dist/components/TimeOff/TimeOffManagement/SelectEmployees/SelectEmployeesTimeOff.js.map +1 -1
  140. package/dist/components/TimeOff/TimeOffManagement/SelectEmployees/useSelectEmployeesData.js +36 -35
  141. package/dist/components/TimeOff/TimeOffManagement/SelectEmployees/useSelectEmployeesData.js.map +1 -1
  142. package/dist/components/TimeOff/TimeOffPolicyDetail/TimeOffPolicyDetailPresentation.js +34 -34
  143. package/dist/components/TimeOff/TimeOffPolicyDetail/TimeOffPolicyDetailPresentation.js.map +1 -1
  144. package/dist/helpers/breadcrumbHelpers.d.ts +1 -1
  145. package/dist/helpers/breadcrumbHelpers.js.map +1 -1
  146. package/dist/helpers/federalEin.d.ts +1 -0
  147. package/dist/helpers/federalEin.js.map +1 -1
  148. package/dist/helpers/mask.d.ts +8 -4
  149. package/dist/helpers/mask.js.map +1 -1
  150. package/dist/helpers/rem.d.ts +2 -1
  151. package/dist/helpers/rem.js.map +1 -1
  152. package/dist/hooks/useAsyncError.d.ts +1 -0
  153. package/dist/hooks/useAsyncError.js.map +1 -1
  154. package/dist/hooks/useForkRef/useForkRef.d.ts +1 -0
  155. package/dist/hooks/useForkRef/useForkRef.js.map +1 -1
  156. package/dist/i18n/I18n.d.ts +9 -1
  157. package/dist/i18n/I18n.js.map +1 -1
  158. package/dist/i18n/en/Company.TimeOff.EmployeeTable.json.js +14 -14
  159. package/dist/i18n/en/Company.TimeOff.SelectEmployees.json.js +12 -18
  160. package/dist/i18n/en/Company.TimeOff.SelectEmployees.json.js.map +1 -1
  161. package/dist/i18n/en/Employee.Compensation.json.js +24 -24
  162. package/dist/i18n/en/Employee.Dashboard.json.js +22 -20
  163. package/dist/i18n/en/Employee.Dashboard.json.js.map +1 -1
  164. package/dist/i18n/en/Employee.PaymentMethod.json.js +25 -25
  165. package/dist/i18n/en/Employee.StateTaxes.json.js +12 -10
  166. package/dist/i18n/en/Employee.StateTaxes.json.js.map +1 -1
  167. package/dist/style.css +1 -1
  168. package/dist/types/hooks.d.ts +1 -1
  169. package/dist/types/i18next.d.ts +4 -17
  170. package/dist/types/observability.d.ts +1 -1
  171. package/package.json +30 -27
  172. package/dist/components/Employee/Dashboard/CompensationCard.d.ts +0 -13
@@ -1 +1 @@
1
- {"version":3,"file":"JobAndPayView.js","sources":["../../../../src/components/Employee/Dashboard/JobAndPayView.tsx"],"sourcesContent":["import { useCallback, useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { useGustoEmbeddedContext } from '@gusto/embedded-api/react-query/_context'\nimport { payrollsGetPayStub } from '@gusto/embedded-api/funcs/payrollsGetPayStub'\nimport { useErrorBoundary } from 'react-error-boundary'\nimport { useJobsAndCompensationsDeleteMutation } from '@gusto/embedded-api/react-query/jobsAndCompensationsDelete'\nimport type { Job } from '@gusto/embedded-api/models/components/job'\nimport type { EmployeeBankAccount } from '@gusto/embedded-api/models/components/employeebankaccount'\nimport type { Garnishment } from '@gusto/embedded-api/models/components/garnishment'\nimport type { GetV1EmployeesEmployeeUuidPayStubsResponse } from '@gusto/embedded-api/models/operations/getv1employeesemployeeuuidpaystubs'\nimport { useEmployeeCompensation } from './hooks'\nimport type { PendingCompensationChange } from './getPendingCompensationChanges'\nimport { usePendingChangeDetailRenderer } from './usePendingChangeDetailRenderer'\nimport { PendingChangesReviewModal } from './PendingChangesReviewModal'\nimport styles from './JobAndPayView.module.scss'\nimport { Flex } from '@/components/Common/Flex/Flex'\nimport { useComponentContext } from '@/contexts/ComponentAdapter/useComponentContext'\nimport { DataView, useDataView, EmptyData, Loading, VisuallyHidden } from '@/components/Common'\nimport { HamburgerMenu } from '@/components/Common/HamburgerMenu'\nimport { BaseLayout } from '@/components/Base/Base'\nimport { composeErrorHandler } from '@/partner-hook-utils/composeErrorHandler'\nimport { readableStreamToBlob } from '@/helpers/readableStreamToBlob'\nimport { formatDateLongWithYear, formatDateToStringDate } from '@/helpers/dateFormatting'\nimport { useFormatCompensationRate } from '@/helpers/formattedStrings'\nimport useNumberFormatter from '@/hooks/useNumberFormatter'\nimport { useI18n } from '@/i18n'\nimport {\n usePaymentMethodList,\n useDeleteBankAccount,\n DeleteBankAccountDialog,\n} from '@/components/Employee/PaymentMethod/shared'\nimport {\n useDeductionsList,\n useDeleteDeduction,\n DeleteDeductionDialog,\n formatDeductionAmount,\n} from '@/components/Employee/Deductions/shared'\nimport { componentEvents, FlsaStatus, PAYMENT_METHODS, type EventType } from '@/shared/constants'\nimport type { OnEventType } from '@/components/Base/useBase'\nimport PlusCircleIcon from '@/assets/icons/plus-circle.svg?react'\nimport PercentCircleIcon from '@/assets/icons/percent-circle.svg?react'\nimport DownloadCloudIcon from '@/assets/icons/download-cloud.svg?react'\nimport TrashCanSvg from '@/assets/icons/trashcan.svg?react'\nimport PencilSvg from '@/assets/icons/pencil.svg?react'\n\ntype EmployeePayStub = NonNullable<\n GetV1EmployeesEmployeeUuidPayStubsResponse['employeePayStubsList']\n>[number]\n\nfunction parseJobRate(rate: Job['rate']): number | null {\n if (rate === undefined) return null\n const numericRate = parseFloat(rate)\n return Number.isFinite(numericRate) ? numericRate : null\n}\n\nexport interface JobAndPayViewProps {\n employeeId: string\n onEvent: OnEventType<EventType, unknown>\n onEditCompensation?: (job: Job) => void\n onAddJob?: () => void\n onAddAnotherJob?: () => void\n onAddDeduction?: () => void\n onEditDeduction?: (deduction: Garnishment) => void\n}\n\nexport function JobAndPayView({\n employeeId,\n onEvent,\n onEditCompensation,\n onAddJob,\n onAddAnotherJob,\n onAddDeduction,\n onEditDeduction,\n}: JobAndPayViewProps) {\n useI18n('Employee.PaymentMethod')\n useI18n('Employee.Compensation')\n useI18n('Employee.Deductions')\n const { t } = useTranslation('Employee.Dashboard')\n const { t: tPayment } = useTranslation('Employee.PaymentMethod')\n const { t: tCompensation } = useTranslation('Employee.Compensation')\n const { t: tDeductions } = useTranslation('Employee.Deductions')\n const Components = useComponentContext()\n const formatCompensationRate = useFormatCompensationRate()\n const formatCurrency = useNumberFormatter('currency')\n const formatPercent = useNumberFormatter('percent')\n const gustoEmbedded = useGustoEmbeddedContext()\n const { showBoundary } = useErrorBoundary()\n\n const compensation = useEmployeeCompensation({ employeeId })\n const {\n jobs,\n primaryFlsaStatus,\n pendingChanges,\n hasMultipleJobs: hasMultipleJobsFromHook,\n payStubs,\n employeeFirstName,\n } = compensation.data\n const payStubsPagination = compensation.pagination.payStubs\n const cancellingCompensationUuid = compensation.status.cancellingCompensationUuid\n const { cancelPendingChange } = compensation.actions\n const isCompensationCardLoading = compensation.status.isCompensationLoading\n const isPayStubsLoading = compensation.status.isPayStubsLoading\n\n const handleCancelChange = useCallback(\n async (pendingChange: PendingCompensationChange) => {\n const result = await cancelPendingChange(pendingChange)\n if (result) {\n onEvent(componentEvents.EMPLOYEE_COMPENSATION_CHANGE_CANCELLED, {\n employeeId,\n compensationId: pendingChange.compensationUuid,\n })\n }\n },\n [cancelPendingChange, onEvent, employeeId],\n )\n\n const [downloadingPayrollUuids, setDownloadingPayrollUuids] = useState<ReadonlySet<string>>(\n () => new Set(),\n )\n\n const handlePaystubDownload = useCallback(\n async (payrollUuid: string) => {\n // Omit `noopener` — it makes window.open return null in modern browsers,\n // which would leave us unable to navigate the new tab to the blob URL.\n const newWindow = window.open('', '_blank')\n const loadingMessage = t('jobAndPay.paystubs.downloadLoadingMessage')\n if (newWindow) {\n // Avoid the user staring at about:blank while we fetch the PDF. The\n // navigation to the Blob URL below replaces this document.\n const doc = newWindow.document\n doc.title = loadingMessage\n const style = doc.createElement('style')\n style.textContent =\n 'body{font-family:system-ui,-apple-system,sans-serif;display:flex;align-items:center;' +\n 'justify-content:center;height:100vh;margin:0;color:#444;gap:12px}' +\n '.spinner{width:20px;height:20px;border:2px solid #ccc;border-top-color:#444;' +\n 'border-radius:50%;animation:spin .8s linear infinite}' +\n '@keyframes spin{to{transform:rotate(360deg)}}'\n doc.head.appendChild(style)\n const spinner = doc.createElement('div')\n spinner.className = 'spinner'\n spinner.setAttribute('aria-hidden', 'true')\n const label = doc.createElement('span')\n label.textContent = loadingMessage\n doc.body.replaceChildren(spinner, label)\n }\n setDownloadingPayrollUuids(prev => {\n const next = new Set(prev)\n next.add(payrollUuid)\n return next\n })\n try {\n const response = await payrollsGetPayStub(gustoEmbedded, {\n payrollId: payrollUuid,\n employeeId,\n })\n if (!response.value?.responseStream) {\n throw new Error(t('jobAndPay.paystubs.downloadError'))\n }\n const pdfBlob = await readableStreamToBlob(response.value.responseStream, 'application/pdf')\n const url = URL.createObjectURL(pdfBlob)\n if (newWindow) {\n // Revoke after the new tab has loaded the blob; revoking synchronously\n // would race the navigation and leave the tab blank.\n newWindow.addEventListener('load', () => {\n URL.revokeObjectURL(url)\n })\n newWindow.location.href = url\n } else {\n URL.revokeObjectURL(url)\n }\n } catch (err) {\n if (newWindow) {\n newWindow.close()\n }\n showBoundary(err instanceof Error ? err : new Error(String(err)))\n } finally {\n setDownloadingPayrollUuids(prev => {\n const next = new Set(prev)\n next.delete(payrollUuid)\n return next\n })\n }\n },\n [gustoEmbedded, employeeId, t, showBoundary],\n )\n\n const [pendingDeleteJob, setPendingDeleteJob] = useState<{\n uuid: string\n title: string\n } | null>(null)\n\n const { mutateAsync: deleteEmployeeJob, isPending: isDeletingJob } =\n useJobsAndCompensationsDeleteMutation()\n\n const handleConfirmDeleteJob = async () => {\n if (!pendingDeleteJob) return\n const jobId = pendingDeleteJob.uuid\n await deleteEmployeeJob({ request: { jobId } })\n onEvent(componentEvents.EMPLOYEE_JOB_DELETED, { employeeId, jobId })\n setPendingDeleteJob(null)\n }\n\n const singleJob = jobs.length === 1 ? jobs[0]! : undefined\n const hasMultipleJobs = hasMultipleJobsFromHook\n // Block adding a secondary if the primary already has a future-dated\n // compensation that isn't Nonexempt — that comp will delete secondary jobs\n // at its effective date, matching the gws-flows guard on the new-job action.\n // Use local date (not UTC) so the comparison matches how effectiveDate strings\n // are handled throughout the dashboard (same as getPendingCompensationChanges).\n const localTodayISO = formatDateToStringDate(new Date()) ?? ''\n const primaryJob = jobs.find(j => j.primary)\n const hasFutureNonNonexemptComp =\n primaryJob?.compensations?.some(\n c =>\n c.effectiveDate !== undefined &&\n c.effectiveDate > localTodayISO &&\n c.flsaStatus !== FlsaStatus.NONEXEMPT,\n ) ?? false\n const canAddAnotherJob =\n jobs.length >= 1 && primaryFlsaStatus === FlsaStatus.NONEXEMPT && !hasFutureNonNonexemptComp\n const singleJobNumericRate = singleJob ? parseJobRate(singleJob.rate) : null\n const singleJobCurrentComp = singleJob?.compensations?.find(\n c => c.uuid === singleJob.currentCompensationUuid,\n )\n const singleJobEffectiveDateRow = singleJobCurrentComp?.effectiveDate ? (\n <Flex flexDirection=\"column\" gap={0}>\n <Components.Text variant=\"supporting\">\n {t('jobAndPay.compensation.effectiveDate')}\n </Components.Text>\n <Components.Text>\n {formatDateLongWithYear(singleJobCurrentComp.effectiveDate)}\n </Components.Text>\n </Flex>\n ) : null\n\n const [isReviewOpen, setIsReviewOpen] = useState(false)\n const renderDetail = usePendingChangeDetailRenderer(employeeFirstName)\n\n // Split pending changes: \"new job\" (job hasn't started yet, no current comp)\n // vs \"update\" (existing comp with a scheduled future change).\n // New-job changes get a Pending badge on the card/table row.\n // Update changes get the existing warning alert treatment.\n const newJobPendingChanges = pendingChanges.filter(c => c.isNewJob)\n const updatePendingChanges = pendingChanges.filter(c => !c.isNewJob)\n\n const pendingNewJobUuids = new Set(newJobPendingChanges.map(c => c.jobUuid))\n const singleJobIsPendingNew = singleJob ? pendingNewJobUuids.has(singleJob.uuid) : false\n const hasAnyPendingNewJobs = pendingNewJobUuids.size > 0\n\n const hasPendingUpdates = updatePendingChanges.length > 0\n const showSummaryAlert = hasMultipleJobs && updatePendingChanges.length > 1\n const showInlineAlert = hasPendingUpdates && !showSummaryAlert\n const nextChange = updatePendingChanges[0]\n\n const paymentMethodList = usePaymentMethodList({ employeeId })\n const paymentMethod = paymentMethodList.isLoading\n ? undefined\n : paymentMethodList.data.paymentMethod\n const bankAccounts = paymentMethodList.isLoading ? [] : paymentMethodList.data.bankAccounts\n const deletePendingBankAccountUuid = paymentMethodList.isLoading\n ? undefined\n : paymentMethodList.status.deletePendingBankAccountUuid\n\n const { pendingDeleteAccount, setPendingDeleteAccount, handleConfirmDelete } =\n useDeleteBankAccount(async uuid => {\n if (paymentMethodList.isLoading) return\n const result = await paymentMethodList.actions.onDelete(uuid)\n if (result) {\n onEvent(componentEvents.EMPLOYEE_BANK_ACCOUNT_DELETED, result.data)\n }\n })\n\n const deductionsList = useDeductionsList({ employeeId })\n const deductions = deductionsList.isLoading ? [] : deductionsList.data.deductions\n const deletingGarnishmentUuid = deductionsList.isLoading\n ? undefined\n : deductionsList.status.deletingGarnishmentUuid\n\n const {\n pendingDeleteDeduction,\n setPendingDeleteDeduction,\n handleConfirmDelete: handleConfirmDeleteDeduction,\n } = useDeleteDeduction(async garnishment => {\n if (deductionsList.isLoading) return\n const result = await deductionsList.actions.onDelete(garnishment)\n if (result) {\n onEvent(componentEvents.EMPLOYEE_DEDUCTION_DELETED, result.data.garnishment)\n }\n })\n\n // All three hooks own their own error state; merge into one error\n // surface so the BaseLayout below shows whatever failed (read errors\n // from the queries, submit errors from delete/cancel actions).\n const errorHandling = composeErrorHandler([compensation, paymentMethodList, deductionsList])\n\n const jobsColumns = [\n {\n key: 'jobTitle',\n title: t('jobAndPay.compensation.columns.jobTitle'),\n render: (job: Job) => {\n const numericRate = parseJobRate(job.rate)\n return (\n <Flex flexDirection=\"column\" gap={0}>\n <Components.Text>{job.title || '-'}</Components.Text>\n {numericRate !== null && job.paymentUnit ? (\n <Components.Text variant=\"supporting\">\n {formatCompensationRate(numericRate, job.paymentUnit)}\n </Components.Text>\n ) : null}\n </Flex>\n )\n },\n },\n {\n key: 'payType',\n title: t('jobAndPay.compensation.columns.payType'),\n render: (job: Job) => {\n const flsaStatus = job.compensations?.find(\n comp => comp.uuid === job.currentCompensationUuid,\n )?.flsaStatus\n return flsaStatus !== undefined ? tCompensation(`flsaStatusLabels.${flsaStatus}`) : '-'\n },\n },\n {\n key: 'effectiveDate',\n title: t('jobAndPay.compensation.columns.effectiveDate'),\n render: (job: Job) => {\n const currentComp = job.compensations?.find(c => c.uuid === job.currentCompensationUuid)\n return currentComp?.effectiveDate ? formatDateLongWithYear(currentComp.effectiveDate) : '-'\n },\n },\n ...(hasAnyPendingNewJobs\n ? [\n {\n key: 'status',\n title: <VisuallyHidden>{t('jobAndPay.compensation.columns.status')}</VisuallyHidden>,\n render: (job: Job) =>\n pendingNewJobUuids.has(job.uuid) ? (\n <Components.Badge status=\"warning\">\n {t('jobAndPay.compensation.pendingStatus')}\n </Components.Badge>\n ) : null,\n },\n ]\n : []),\n ]\n\n const jobsDataView = useDataView({\n data: jobs,\n columns: jobsColumns,\n itemMenu: (job: Job) => (\n <HamburgerMenu\n triggerLabel={t('jobAndPay.compensation.hamburgerTitle')}\n isLoading={isDeletingJob}\n items={[\n {\n label: t('jobAndPay.compensation.editJobCta'),\n icon: <PencilSvg aria-hidden />,\n onClick: () => {\n onEditCompensation?.(job)\n },\n },\n ...(!job.primary\n ? [\n {\n label: t('jobAndPay.compensation.deleteJobCta'),\n icon: <TrashCanSvg aria-hidden />,\n onClick: () => {\n setPendingDeleteJob({ uuid: job.uuid, title: job.title ?? '' })\n },\n },\n ]\n : []),\n ]}\n />\n ),\n })\n\n const bankAccountsColumns = [\n {\n key: 'nickname',\n title: t('jobAndPay.payment.nickname'),\n render: (bankAccount: EmployeeBankAccount) => bankAccount.name || '-',\n },\n {\n key: 'routingNumber',\n title: t('jobAndPay.payment.routingNumber'),\n render: (bankAccount: EmployeeBankAccount) => bankAccount.routingNumber || '-',\n },\n {\n key: 'accountType',\n title: t('jobAndPay.payment.accountType'),\n render: (bankAccount: EmployeeBankAccount) => bankAccount.accountType || '-',\n },\n ]\n\n const garnishmentsColumns = [\n {\n key: 'description',\n title: t('jobAndPay.deductions.deduction'),\n render: (garnishment: Garnishment) => garnishment.description || '-',\n },\n {\n key: 'frequency',\n title: t('jobAndPay.deductions.frequency'),\n render: (garnishment: Garnishment) =>\n garnishment.recurring\n ? t('jobAndPay.deductions.recurring')\n : t('jobAndPay.deductions.oneTime'),\n },\n {\n key: 'amount',\n title: t('jobAndPay.deductions.withhold'),\n render: (garnishment: Garnishment) =>\n formatDeductionAmount(garnishment, {\n formatCurrency,\n formatPercent,\n formatPerPaycheck: (value: string) =>\n t('jobAndPay.deductions.amountPerPaycheck', { value }),\n }),\n },\n ]\n\n const payStubsColumns = [\n {\n key: 'payday',\n title: t('jobAndPay.paystubs.payday'),\n render: (payStub: EmployeePayStub) => formatDateLongWithYear(payStub.checkDate) || '-',\n },\n {\n key: 'checkAmount',\n title: t('jobAndPay.paystubs.checkAmount'),\n render: (payStub: EmployeePayStub) => {\n if (!payStub.netPay) return '-'\n const amount = parseFloat(payStub.netPay)\n return isNaN(amount) ? '-' : formatCurrency(amount)\n },\n },\n {\n key: 'grossPay',\n title: t('jobAndPay.paystubs.grossPay'),\n render: (payStub: EmployeePayStub) => {\n if (!payStub.grossPay) return '-'\n const amount = parseFloat(payStub.grossPay)\n return isNaN(amount) ? '-' : formatCurrency(amount)\n },\n },\n {\n key: 'paymentMethod',\n title: t('jobAndPay.paystubs.paymentMethod'),\n render: () => paymentMethod?.type || t('jobAndPay.paystubs.noPaymentMethod'),\n },\n ]\n\n const bankAccountsDataView = useDataView({\n data: bankAccounts,\n columns: bankAccountsColumns,\n itemMenu: (bankAccount: EmployeeBankAccount) => (\n <HamburgerMenu\n items={[\n {\n label: tPayment('deleteBankAccountCta'),\n onClick: () => {\n setPendingDeleteAccount({\n uuid: bankAccount.uuid,\n hiddenAccountNumber: bankAccount.hiddenAccountNumber,\n })\n },\n icon: <TrashCanSvg aria-hidden />,\n },\n ]}\n triggerLabel={tPayment('hamburgerTitle')}\n />\n ),\n })\n\n const garnishmentsDataView = useDataView({\n data: deductions,\n columns: garnishmentsColumns,\n itemMenu: (garnishment: Garnishment) => (\n <HamburgerMenu\n isLoading={deletingGarnishmentUuid === garnishment.uuid}\n items={[\n {\n label: tDeductions('editCta'),\n onClick: () => onEditDeduction?.(garnishment),\n icon: <PencilSvg aria-hidden />,\n },\n {\n label: tDeductions('deleteCta'),\n onClick: () => {\n setPendingDeleteDeduction(garnishment)\n },\n icon: <TrashCanSvg aria-hidden />,\n },\n ]}\n triggerLabel={tDeductions('hamburgerTitle')}\n />\n ),\n emptyState: () => (\n <EmptyData\n title={t('jobAndPay.deductions.emptyState.title')}\n description={t('jobAndPay.deductions.emptyState.description')}\n />\n ),\n })\n\n const payStubsDataView = useDataView({\n data: payStubs,\n columns: payStubsColumns,\n pagination: payStubsPagination,\n itemMenu: payStub => {\n const isDownloading =\n !!payStub.payrollUuid && downloadingPayrollUuids.has(payStub.payrollUuid)\n return (\n <Components.ButtonIcon\n variant=\"tertiary\"\n aria-label={t('jobAndPay.paystubs.downloadCta')}\n isDisabled={!payStub.payrollUuid}\n isLoading={isDownloading}\n onClick={() => {\n if (payStub.payrollUuid) {\n void handlePaystubDownload(payStub.payrollUuid)\n }\n }}\n >\n <DownloadCloudIcon aria-hidden />\n </Components.ButtonIcon>\n )\n },\n emptyState: () => (\n <EmptyData\n title={t('jobAndPay.paystubs.emptyState.title')}\n description={t('jobAndPay.paystubs.emptyState.description')}\n />\n ),\n })\n\n // `usePaymentMethodList` and `useDeductionsList` still use the older\n // `HookLoadingResult | Ready` shape, which returns `isLoading: true`\n // when the query has errored AND data is missing. Treat those rows\n // as \"not loading\" so the section doesn't show a perpetual skeleton\n // while BaseLayout already renders the error alert above.\n const isPaymentMethodLoading =\n paymentMethodList.isLoading && paymentMethodList.errorHandling.errors.length === 0\n const isDeductionsLoading =\n deductionsList.isLoading && deductionsList.errorHandling.errors.length === 0\n const isDirectDeposit = paymentMethod?.type === PAYMENT_METHODS.directDeposit\n\n return (\n <BaseLayout error={errorHandling.errors}>\n <Flex flexDirection=\"column\" gap={24}>\n <Components.Box\n withPadding={!hasMultipleJobs}\n header={\n <Components.BoxHeader\n title={t('jobAndPay.compensation.title')}\n action={\n // While the compensation card is loading we don't yet\n // know if the employee has jobs — suppress the action\n // so we don't surface an \"Add job\" CTA against an\n // employee who already has one.\n isCompensationCardLoading ? null : hasMultipleJobs ? null : singleJob ? (\n <Components.Button\n variant=\"secondary\"\n onClick={() => {\n onEditCompensation?.(singleJob)\n }}\n >\n {t('jobAndPay.compensation.editCta')}\n </Components.Button>\n ) : (\n <Components.Button\n variant=\"secondary\"\n onClick={onAddJob}\n icon={<PlusCircleIcon />}\n >\n {t('jobAndPay.compensation.addJobCta')}\n </Components.Button>\n )\n }\n />\n }\n footer={\n !isCompensationCardLoading && canAddAnotherJob ? (\n <Components.Button\n variant=\"secondary\"\n onClick={onAddAnotherJob}\n icon={<PlusCircleIcon />}\n >\n {t('jobAndPay.compensation.addAnotherJobCta')}\n </Components.Button>\n ) : undefined\n }\n >\n {isCompensationCardLoading ? (\n <Loading />\n ) : (\n <Flex flexDirection=\"column\" gap={16}>\n {hasPendingUpdates && (\n <div\n className={[styles.alertWrapper, hasMultipleJobs && styles.alertWrapperPadded]\n .filter(Boolean)\n .join(' ')}\n >\n <Flex flexDirection=\"column\" gap={16}>\n {showInlineAlert && nextChange && (\n <Components.Alert\n status=\"warning\"\n disableScrollIntoView\n label={\n hasMultipleJobs\n ? t('jobAndPay.compensation.pendingChange.alertLabelWithJob', {\n jobTitle: nextChange.jobTitle,\n date: formatDateLongWithYear(nextChange.effectiveDate),\n })\n : t('jobAndPay.compensation.pendingChange.alertLabel', {\n date: formatDateLongWithYear(nextChange.effectiveDate),\n })\n }\n >\n <Flex flexDirection=\"column\" gap={12}>\n <Components.UnorderedList\n items={nextChange.details.map(detail => renderDetail(detail))}\n />\n <div>\n <Components.Button\n variant=\"secondary\"\n isLoading={cancellingCompensationUuid === nextChange.compensationUuid}\n onClick={() => {\n void handleCancelChange(nextChange)\n }}\n >\n {t('jobAndPay.compensation.pendingChange.cancelCta')}\n </Components.Button>\n </div>\n </Flex>\n </Components.Alert>\n )}\n {showSummaryAlert && (\n <Components.Alert\n status=\"warning\"\n disableScrollIntoView\n label={t('jobAndPay.compensation.pendingChange.summaryLabel', {\n name: employeeFirstName ?? '',\n })}\n action={\n <Components.Button\n variant=\"secondary\"\n onClick={() => {\n setIsReviewOpen(true)\n }}\n >\n {t('jobAndPay.compensation.pendingChange.reviewCta')}\n </Components.Button>\n }\n />\n )}\n </Flex>\n </div>\n )}\n {hasMultipleJobs ? (\n <DataView\n label={t('jobAndPay.compensation.tableLabel')}\n isWithinBox\n {...jobsDataView}\n />\n ) : singleJob ? (\n <Flex flexDirection=\"column\" gap={12}>\n {singleJob.title && (\n <Flex flexDirection=\"column\" gap={0}>\n <Components.Text variant=\"supporting\">\n {t('jobAndPay.compensation.jobTitle')}\n </Components.Text>\n <Components.Text>{singleJob.title}</Components.Text>\n </Flex>\n )}\n\n {singleJob.paymentUnit && (\n <Flex flexDirection=\"column\" gap={0}>\n <Components.Text variant=\"supporting\">\n {t('jobAndPay.compensation.type')}\n </Components.Text>\n <Components.Text>\n {singleJob.paymentUnit === 'Hour'\n ? t('jobAndPay.compensation.types.hourly')\n : singleJob.paymentUnit === 'Salary' || singleJob.paymentUnit === 'Year'\n ? t('jobAndPay.compensation.types.salary')\n : singleJob.paymentUnit}\n </Components.Text>\n </Flex>\n )}\n\n {singleJobNumericRate !== null && singleJob.paymentUnit && (\n <Flex flexDirection=\"column\" gap={0}>\n <Components.Text variant=\"supporting\">\n {t('jobAndPay.compensation.wage')}\n </Components.Text>\n <Components.Text>\n {formatCompensationRate(singleJobNumericRate, singleJob.paymentUnit)}\n </Components.Text>\n </Flex>\n )}\n\n {singleJobEffectiveDateRow}\n\n {singleJobIsPendingNew && (\n <Flex flexDirection=\"column\" gap={0}>\n <Components.Text variant=\"supporting\">\n {t('jobAndPay.compensation.columns.status')}\n </Components.Text>\n <div>\n <Components.Badge status=\"warning\">\n {t('jobAndPay.compensation.pendingStatus')}\n </Components.Badge>\n </div>\n </Flex>\n )}\n </Flex>\n ) : (\n <EmptyData\n title={t('jobAndPay.compensation.emptyState.title')}\n description={t('jobAndPay.compensation.emptyState.description')}\n />\n )}\n </Flex>\n )}\n </Components.Box>\n\n <Components.Box\n withPadding={bankAccounts.length === 0}\n header={\n <Components.BoxHeader\n title={t('jobAndPay.payment.title')}\n action={\n <Flex gap={8} alignItems=\"center\" justifyContent=\"flex-end\">\n {isDirectDeposit && bankAccounts.length > 1 && (\n <Components.Button\n variant=\"secondary\"\n onClick={() => {\n onEvent(componentEvents.EMPLOYEE_SPLIT_PAYCHECK, { employeeId })\n }}\n icon={<PercentCircleIcon />}\n >\n {t('jobAndPay.payment.splitPaycheckCta')}\n </Components.Button>\n )}\n <Components.Button\n variant=\"secondary\"\n onClick={() => {\n onEvent(componentEvents.EMPLOYEE_BANK_ACCOUNT_CREATE, { employeeId })\n }}\n icon={<PlusCircleIcon />}\n >\n {t('jobAndPay.payment.addBankAccountCta')}\n </Components.Button>\n </Flex>\n }\n />\n }\n >\n {isPaymentMethodLoading ? (\n <Loading />\n ) : bankAccounts.length === 0 ? (\n <Flex flexDirection=\"column\" gap={0}>\n <Components.Text variant=\"supporting\">\n {tPayment('paymentMethodLabel')}\n </Components.Text>\n <Components.Text>\n {isDirectDeposit ? tPayment('directDepositLabel') : tPayment('checkLabel')}\n </Components.Text>\n </Flex>\n ) : (\n <DataView\n label={t('jobAndPay.payment.listLabel')}\n isWithinBox\n {...bankAccountsDataView}\n />\n )}\n </Components.Box>\n\n <Components.Box\n withPadding={false}\n header={\n <Components.BoxHeader\n title={t('jobAndPay.deductions.title')}\n action={\n <Components.Button\n variant=\"secondary\"\n onClick={onAddDeduction}\n icon={<PlusCircleIcon />}\n >\n {t('jobAndPay.deductions.addDeductionCta')}\n </Components.Button>\n }\n />\n }\n >\n {isDeductionsLoading ? (\n <Loading />\n ) : (\n <DataView\n label={t('jobAndPay.deductions.listLabel')}\n isWithinBox\n {...garnishmentsDataView}\n />\n )}\n </Components.Box>\n\n <Components.Box\n withPadding={false}\n header={<Components.BoxHeader title={t('jobAndPay.paystubs.title')} />}\n >\n {isPayStubsLoading ? (\n <Loading />\n ) : (\n <DataView label={t('jobAndPay.paystubs.listLabel')} isWithinBox {...payStubsDataView} />\n )}\n </Components.Box>\n\n <PendingChangesReviewModal\n isOpen={isReviewOpen}\n pendingChanges={updatePendingChanges}\n employeeFirstName={employeeFirstName}\n cancellingCompensationUuid={cancellingCompensationUuid}\n onClose={() => {\n setIsReviewOpen(false)\n }}\n onCancelChange={change => {\n void handleCancelChange(change)\n }}\n />\n\n <DeleteBankAccountDialog\n pendingDeleteAccount={pendingDeleteAccount}\n isPrimaryActionLoading={deletePendingBankAccountUuid === pendingDeleteAccount?.uuid}\n onClose={() => {\n setPendingDeleteAccount(null)\n }}\n onConfirm={() => {\n void handleConfirmDelete()\n }}\n />\n\n <DeleteDeductionDialog\n pendingDeleteDeduction={pendingDeleteDeduction}\n isPrimaryActionLoading={deletingGarnishmentUuid === pendingDeleteDeduction?.uuid}\n onClose={() => {\n setPendingDeleteDeduction(null)\n }}\n onConfirm={() => {\n void handleConfirmDeleteDeduction()\n }}\n />\n\n <Components.Dialog\n isOpen={pendingDeleteJob !== null}\n onClose={() => {\n setPendingDeleteJob(null)\n }}\n onPrimaryActionClick={() => {\n void handleConfirmDeleteJob()\n }}\n isPrimaryActionLoading={isDeletingJob}\n isDestructive\n title={t('jobAndPay.compensation.deleteJobDialog.title')}\n primaryActionLabel={t('jobAndPay.compensation.deleteJobDialog.confirmCta')}\n closeActionLabel={t('jobAndPay.compensation.deleteJobDialog.cancelCta')}\n >\n {pendingDeleteJob\n ? t('jobAndPay.compensation.deleteJobDialog.description', {\n jobTitle: pendingDeleteJob.title,\n })\n : null}\n </Components.Dialog>\n </Flex>\n </BaseLayout>\n )\n}\n"],"names":["parseJobRate","rate","numericRate","JobAndPayView","employeeId","onEvent","onEditCompensation","onAddJob","onAddAnotherJob","onAddDeduction","onEditDeduction","useI18n","useTranslation","tPayment","tCompensation","tDeductions","Components","useComponentContext","formatCompensationRate","useFormatCompensationRate","formatCurrency","useNumberFormatter","formatPercent","gustoEmbedded","useGustoEmbeddedContext","showBoundary","useErrorBoundary","compensation","useEmployeeCompensation","jobs","primaryFlsaStatus","pendingChanges","hasMultipleJobsFromHook","payStubs","employeeFirstName","payStubsPagination","cancellingCompensationUuid","cancelPendingChange","isCompensationCardLoading","isPayStubsLoading","handleCancelChange","useCallback","pendingChange","componentEvents","downloadingPayrollUuids","setDownloadingPayrollUuids","useState","handlePaystubDownload","payrollUuid","newWindow","loadingMessage","doc","style","spinner","label","prev","next","response","payrollsGetPayStub","pdfBlob","readableStreamToBlob","url","err","pendingDeleteJob","setPendingDeleteJob","deleteEmployeeJob","isDeletingJob","useJobsAndCompensationsDeleteMutation","handleConfirmDeleteJob","jobId","singleJob","hasMultipleJobs","localTodayISO","formatDateToStringDate","hasFutureNonNonexemptComp","j","c","FlsaStatus","canAddAnotherJob","singleJobNumericRate","singleJobCurrentComp","singleJobEffectiveDateRow","jsxs","Flex","jsx","formatDateLongWithYear","isReviewOpen","setIsReviewOpen","renderDetail","usePendingChangeDetailRenderer","newJobPendingChanges","updatePendingChanges","pendingNewJobUuids","singleJobIsPendingNew","hasAnyPendingNewJobs","hasPendingUpdates","showSummaryAlert","showInlineAlert","nextChange","paymentMethodList","usePaymentMethodList","paymentMethod","bankAccounts","deletePendingBankAccountUuid","pendingDeleteAccount","setPendingDeleteAccount","handleConfirmDelete","useDeleteBankAccount","uuid","result","deductionsList","useDeductionsList","deductions","deletingGarnishmentUuid","pendingDeleteDeduction","setPendingDeleteDeduction","handleConfirmDeleteDeduction","useDeleteDeduction","garnishment","errorHandling","composeErrorHandler","jobsColumns","job","flsaStatus","comp","currentComp","VisuallyHidden","jobsDataView","useDataView","HamburgerMenu","PencilSvg","TrashCanSvg","bankAccountsColumns","bankAccount","garnishmentsColumns","formatDeductionAmount","value","payStubsColumns","payStub","amount","bankAccountsDataView","garnishmentsDataView","EmptyData","payStubsDataView","isDownloading","DownloadCloudIcon","isPaymentMethodLoading","isDeductionsLoading","isDirectDeposit","PAYMENT_METHODS","BaseLayout","PlusCircleIcon","Loading","styles","detail","DataView","PercentCircleIcon","PendingChangesReviewModal","change","DeleteBankAccountDialog","DeleteDeductionDialog"],"mappings":"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"}
1
+ {"version":3,"file":"JobAndPayView.js","sources":["../../../../src/components/Employee/Dashboard/JobAndPayView.tsx"],"sourcesContent":["import { useCallback, useEffect, useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { useGustoEmbeddedContext } from '@gusto/embedded-api/react-query/_context'\nimport { payrollsGetPayStub } from '@gusto/embedded-api/funcs/payrollsGetPayStub'\nimport { useErrorBoundary } from 'react-error-boundary'\nimport { useJobsAndCompensationsDeleteMutation } from '@gusto/embedded-api/react-query/jobsAndCompensationsDelete'\nimport type { Job } from '@gusto/embedded-api/models/components/job'\nimport type { EmployeeBankAccount } from '@gusto/embedded-api/models/components/employeebankaccount'\nimport type { Garnishment } from '@gusto/embedded-api/models/components/garnishment'\nimport type { GetV1EmployeesEmployeeUuidPayStubsResponse } from '@gusto/embedded-api/models/operations/getv1employeesemployeeuuidpaystubs'\nimport { useEmployeeCompensation } from './hooks'\nimport type { PendingCompensationChange } from './getPendingCompensationChanges'\nimport { usePendingChangeDetailRenderer } from './usePendingChangeDetailRenderer'\nimport { PendingChangesReviewModal } from './PendingChangesReviewModal'\nimport styles from './JobAndPayView.module.scss'\nimport { Flex } from '@/components/Common/Flex/Flex'\nimport { useComponentContext } from '@/contexts/ComponentAdapter/useComponentContext'\nimport { DataView, useDataView, EmptyData, Loading, VisuallyHidden } from '@/components/Common'\nimport { HamburgerMenu } from '@/components/Common/HamburgerMenu'\nimport { BaseLayout } from '@/components/Base/Base'\nimport { composeErrorHandler } from '@/partner-hook-utils/composeErrorHandler'\nimport { readableStreamToBlob } from '@/helpers/readableStreamToBlob'\nimport { formatDateLongWithYear, formatDateToStringDate } from '@/helpers/dateFormatting'\nimport { useFormatCompensationRate } from '@/helpers/formattedStrings'\nimport useNumberFormatter from '@/hooks/useNumberFormatter'\nimport { useI18n } from '@/i18n'\nimport {\n usePaymentMethodList,\n useDeleteBankAccount,\n DeleteBankAccountDialog,\n} from '@/components/Employee/PaymentMethod/shared'\nimport {\n useDeductionsList,\n useDeleteDeduction,\n DeleteDeductionDialog,\n formatDeductionAmount,\n} from '@/components/Employee/Deductions/shared'\nimport { componentEvents, FlsaStatus, PAYMENT_METHODS, type EventType } from '@/shared/constants'\nimport type { OnEventType } from '@/components/Base/useBase'\nimport PlusCircleIcon from '@/assets/icons/plus-circle.svg?react'\nimport PercentCircleIcon from '@/assets/icons/percent-circle.svg?react'\nimport DownloadCloudIcon from '@/assets/icons/download-cloud.svg?react'\nimport TrashCanSvg from '@/assets/icons/trashcan.svg?react'\nimport PencilSvg from '@/assets/icons/pencil.svg?react'\n\ntype EmployeePayStub = NonNullable<\n GetV1EmployeesEmployeeUuidPayStubsResponse['employeePayStubsList']\n>[number]\n\nfunction parseJobRate(rate: Job['rate']): number | null {\n if (rate === undefined) return null\n const numericRate = parseFloat(rate)\n return Number.isFinite(numericRate) ? numericRate : null\n}\n\nexport interface JobAndPayViewProps {\n employeeId: string\n onEvent: OnEventType<EventType, unknown>\n onEditCompensation?: (job: Job) => void\n onAddJob?: () => void\n onAddAnotherJob?: () => void\n onAddDeduction?: () => void\n onEditDeduction?: (deduction: Garnishment) => void\n}\n\nexport function JobAndPayView({\n employeeId,\n onEvent,\n onEditCompensation,\n onAddJob,\n onAddAnotherJob,\n onAddDeduction,\n onEditDeduction,\n}: JobAndPayViewProps) {\n useI18n('Employee.PaymentMethod')\n useI18n('Employee.Compensation')\n useI18n('Employee.Deductions')\n const { t } = useTranslation('Employee.Dashboard')\n const { t: tPayment } = useTranslation('Employee.PaymentMethod')\n const { t: tCompensation } = useTranslation('Employee.Compensation')\n const { t: tDeductions } = useTranslation('Employee.Deductions')\n const Components = useComponentContext()\n const formatCompensationRate = useFormatCompensationRate()\n const formatCurrency = useNumberFormatter('currency')\n const formatPercent = useNumberFormatter('percent')\n const gustoEmbedded = useGustoEmbeddedContext()\n const { showBoundary } = useErrorBoundary()\n\n const compensation = useEmployeeCompensation({ employeeId })\n const {\n jobs,\n primaryFlsaStatus,\n pendingChanges,\n hasMultipleJobs: hasMultipleJobsFromHook,\n payStubs,\n employeeFirstName,\n } = compensation.data\n const payStubsPagination = compensation.pagination.payStubs\n const cancellingCompensationUuid = compensation.status.cancellingCompensationUuid\n const { cancelPendingChange } = compensation.actions\n const isCompensationCardLoading = compensation.status.isCompensationLoading\n const isPayStubsLoading = compensation.status.isPayStubsLoading\n\n const handleCancelChange = useCallback(\n async (pendingChange: PendingCompensationChange) => {\n const result = await cancelPendingChange(pendingChange)\n if (result) {\n onEvent(componentEvents.EMPLOYEE_COMPENSATION_CHANGE_CANCELLED, {\n employeeId,\n compensationId: pendingChange.compensationUuid,\n })\n }\n },\n [cancelPendingChange, onEvent, employeeId],\n )\n\n const [downloadingPayrollUuids, setDownloadingPayrollUuids] = useState<ReadonlySet<string>>(\n () => new Set(),\n )\n\n const handlePaystubDownload = useCallback(\n async (payrollUuid: string) => {\n // Omit `noopener` — it makes window.open return null in modern browsers,\n // which would leave us unable to navigate the new tab to the blob URL.\n const newWindow = window.open('', '_blank')\n const loadingMessage = t('jobAndPay.paystubs.downloadLoadingMessage')\n if (newWindow) {\n // Avoid the user staring at about:blank while we fetch the PDF. The\n // navigation to the Blob URL below replaces this document.\n const doc = newWindow.document\n doc.title = loadingMessage\n const style = doc.createElement('style')\n style.textContent =\n 'body{font-family:system-ui,-apple-system,sans-serif;display:flex;align-items:center;' +\n 'justify-content:center;height:100vh;margin:0;color:#444;gap:12px}' +\n '.spinner{width:20px;height:20px;border:2px solid #ccc;border-top-color:#444;' +\n 'border-radius:50%;animation:spin .8s linear infinite}' +\n '@keyframes spin{to{transform:rotate(360deg)}}'\n doc.head.appendChild(style)\n const spinner = doc.createElement('div')\n spinner.className = 'spinner'\n spinner.setAttribute('aria-hidden', 'true')\n const label = doc.createElement('span')\n label.textContent = loadingMessage\n doc.body.replaceChildren(spinner, label)\n }\n setDownloadingPayrollUuids(prev => {\n const next = new Set(prev)\n next.add(payrollUuid)\n return next\n })\n try {\n const response = await payrollsGetPayStub(gustoEmbedded, {\n payrollId: payrollUuid,\n employeeId,\n })\n if (!response.value?.responseStream) {\n throw new Error(t('jobAndPay.paystubs.downloadError'))\n }\n const pdfBlob = await readableStreamToBlob(response.value.responseStream, 'application/pdf')\n const url = URL.createObjectURL(pdfBlob)\n if (newWindow) {\n // Revoke after the new tab has loaded the blob; revoking synchronously\n // would race the navigation and leave the tab blank.\n newWindow.addEventListener('load', () => {\n URL.revokeObjectURL(url)\n })\n newWindow.location.href = url\n } else {\n URL.revokeObjectURL(url)\n }\n } catch (err) {\n if (newWindow) {\n newWindow.close()\n }\n showBoundary(err instanceof Error ? err : new Error(String(err)))\n } finally {\n setDownloadingPayrollUuids(prev => {\n const next = new Set(prev)\n next.delete(payrollUuid)\n return next\n })\n }\n },\n [gustoEmbedded, employeeId, t, showBoundary],\n )\n\n const [pendingDeleteJob, setPendingDeleteJob] = useState<{\n uuid: string\n title: string\n } | null>(null)\n\n const { mutateAsync: deleteEmployeeJob, isPending: isDeletingJob } =\n useJobsAndCompensationsDeleteMutation()\n\n const handleConfirmDeleteJob = async () => {\n if (!pendingDeleteJob) return\n const jobId = pendingDeleteJob.uuid\n await deleteEmployeeJob({ request: { jobId } })\n onEvent(componentEvents.EMPLOYEE_JOB_DELETED, { employeeId, jobId })\n setPendingDeleteJob(null)\n }\n\n const singleJob = jobs.length === 1 ? jobs[0]! : undefined\n const hasMultipleJobs = hasMultipleJobsFromHook\n // Block adding a secondary if the primary already has a future-dated\n // compensation that isn't Nonexempt — that comp will delete secondary jobs\n // at its effective date, matching the gws-flows guard on the new-job action.\n // Use local date (not UTC) so the comparison matches how effectiveDate strings\n // are handled throughout the dashboard (same as getPendingCompensationChanges).\n const localTodayISO = formatDateToStringDate(new Date()) ?? ''\n const primaryJob = jobs.find(j => j.primary)\n const hasFutureNonNonexemptComp =\n primaryJob?.compensations?.some(\n c =>\n c.effectiveDate !== undefined &&\n c.effectiveDate > localTodayISO &&\n c.flsaStatus !== FlsaStatus.NONEXEMPT,\n ) ?? false\n const canAddAnotherJob =\n jobs.length >= 1 && primaryFlsaStatus === FlsaStatus.NONEXEMPT && !hasFutureNonNonexemptComp\n const singleJobNumericRate = singleJob ? parseJobRate(singleJob.rate) : null\n const singleJobCurrentComp = singleJob?.compensations?.find(\n c => c.uuid === singleJob.currentCompensationUuid,\n )\n const emptyPlaceholder = <span aria-label={t('listEmptyPlaceholder')}>–</span>\n const singleJobPaymentTypeLabel = singleJob?.paymentUnit\n ? singleJob.paymentUnit === 'Hour'\n ? t('jobAndPay.compensation.types.hourly')\n : singleJob.paymentUnit === 'Salary' || singleJob.paymentUnit === 'Year'\n ? t('jobAndPay.compensation.types.salary')\n : singleJob.paymentUnit\n : null\n\n const [isReviewOpen, setIsReviewOpen] = useState(false)\n const renderDetail = usePendingChangeDetailRenderer(employeeFirstName)\n\n // Split pending changes: \"new job\" (job hasn't started yet, no current comp)\n // vs \"update\" (existing comp with a scheduled future change).\n // New-job changes get a Pending badge on the card/table row.\n // Update changes get the existing warning alert treatment.\n const newJobPendingChanges = pendingChanges.filter(c => c.isNewJob)\n const updatePendingChanges = pendingChanges.filter(c => !c.isNewJob)\n\n useEffect(() => {\n if (updatePendingChanges.length === 0) {\n setIsReviewOpen(false)\n }\n }, [updatePendingChanges.length])\n\n const pendingNewJobUuids = new Set(newJobPendingChanges.map(c => c.jobUuid))\n const singleJobIsPendingNew = singleJob ? pendingNewJobUuids.has(singleJob.uuid) : false\n const hasAnyPendingNewJobs = pendingNewJobUuids.size > 0\n\n // Jobs with a future-dated comp stacked on a current comp (\"pending update\"\n // as opposed to \"pending new job\"). Editing while one is queued would just\n // stack another future comp on top — confusing UX. Hide Edit until the\n // existing pending change is cancelled or it goes into effect.\n const pendingUpdateJobUuids = new Set(updatePendingChanges.map(c => c.jobUuid))\n const singleJobHasPendingUpdate = singleJob ? pendingUpdateJobUuids.has(singleJob.uuid) : false\n\n const hasPendingUpdates = updatePendingChanges.length > 0\n const showSummaryAlert = hasMultipleJobs && updatePendingChanges.length > 1\n const showInlineAlert = hasPendingUpdates && !showSummaryAlert\n const nextChange = updatePendingChanges[0]\n\n const paymentMethodList = usePaymentMethodList({ employeeId })\n const paymentMethod = paymentMethodList.isLoading\n ? undefined\n : paymentMethodList.data.paymentMethod\n const bankAccounts = paymentMethodList.isLoading ? [] : paymentMethodList.data.bankAccounts\n const deletePendingBankAccountUuid = paymentMethodList.isLoading\n ? undefined\n : paymentMethodList.status.deletePendingBankAccountUuid\n\n const { pendingDeleteAccount, setPendingDeleteAccount, handleConfirmDelete } =\n useDeleteBankAccount(async uuid => {\n if (paymentMethodList.isLoading) return\n const result = await paymentMethodList.actions.onDelete(uuid)\n if (result) {\n onEvent(componentEvents.EMPLOYEE_BANK_ACCOUNT_DELETED, result.data)\n }\n })\n\n const deductionsList = useDeductionsList({ employeeId })\n const deductions = deductionsList.isLoading ? [] : deductionsList.data.deductions\n const deletingGarnishmentUuid = deductionsList.isLoading\n ? undefined\n : deductionsList.status.deletingGarnishmentUuid\n\n const {\n pendingDeleteDeduction,\n setPendingDeleteDeduction,\n handleConfirmDelete: handleConfirmDeleteDeduction,\n } = useDeleteDeduction(async garnishment => {\n if (deductionsList.isLoading) return\n const result = await deductionsList.actions.onDelete(garnishment)\n if (result) {\n onEvent(componentEvents.EMPLOYEE_DEDUCTION_DELETED, result.data.garnishment)\n }\n })\n\n // All three hooks own their own error state; merge into one error\n // surface so the BaseLayout below shows whatever failed (read errors\n // from the queries, submit errors from delete/cancel actions).\n const errorHandling = composeErrorHandler([compensation, paymentMethodList, deductionsList])\n\n const jobsColumns = [\n {\n key: 'jobTitle',\n title: t('jobAndPay.compensation.columns.jobTitle'),\n render: (job: Job) => {\n // Title lives on compensation in the API — `job.title` is a\n // denormalized snapshot that can lag behind comp-level title edits on\n // pending (not-yet-started) jobs, so read from the comp pointed to by\n // `currentCompensationUuid` like the pay-type / effective-date /\n // status columns do.\n const currentComp = job.compensations?.find(c => c.uuid === job.currentCompensationUuid)\n const numericRate = parseJobRate(job.rate)\n return (\n <>\n {currentComp?.title || '-'}\n {numericRate !== null && job.paymentUnit ? (\n <Components.Text variant=\"supporting\" size=\"sm\">\n {formatCompensationRate(numericRate, job.paymentUnit)}\n </Components.Text>\n ) : null}\n </>\n )\n },\n },\n {\n key: 'payType',\n title: t('jobAndPay.compensation.columns.payType'),\n render: (job: Job) => {\n const flsaStatus = job.compensations?.find(\n comp => comp.uuid === job.currentCompensationUuid,\n )?.flsaStatus\n return flsaStatus !== undefined ? tCompensation(`flsaStatusLabels.${flsaStatus}`) : '-'\n },\n },\n {\n key: 'effectiveDate',\n title: t('jobAndPay.compensation.columns.effectiveDate'),\n render: (job: Job) => {\n const currentComp = job.compensations?.find(c => c.uuid === job.currentCompensationUuid)\n return currentComp?.effectiveDate ? formatDateLongWithYear(currentComp.effectiveDate) : '-'\n },\n },\n ...(hasAnyPendingNewJobs\n ? [\n {\n key: 'status',\n title: <VisuallyHidden>{t('jobAndPay.compensation.columns.status')}</VisuallyHidden>,\n render: (job: Job) =>\n pendingNewJobUuids.has(job.uuid) ? (\n <Components.Badge status=\"warning\">\n {t('jobAndPay.compensation.pendingStatus')}\n </Components.Badge>\n ) : null,\n },\n ]\n : []),\n ]\n\n const jobsDataView = useDataView({\n data: jobs,\n columns: jobsColumns,\n itemMenu: (job: Job) => {\n const jobHasPendingUpdate = pendingUpdateJobUuids.has(job.uuid)\n const items = [\n ...(jobHasPendingUpdate\n ? []\n : [\n {\n label: t('jobAndPay.compensation.editJobCta'),\n icon: <PencilSvg aria-hidden />,\n onClick: () => {\n onEditCompensation?.(job)\n },\n },\n ]),\n ...(!job.primary\n ? [\n {\n label: t('jobAndPay.compensation.deleteJobCta'),\n icon: <TrashCanSvg aria-hidden />,\n onClick: () => {\n // Match the title shown on the row (comp-derived), since\n // `job.title` can lag behind comp-level edits on\n // secondaries.\n const currentComp = job.compensations?.find(\n c => c.uuid === job.currentCompensationUuid,\n )\n setPendingDeleteJob({ uuid: job.uuid, title: currentComp?.title ?? '' })\n },\n },\n ]\n : []),\n ]\n if (items.length === 0) return null\n return (\n <HamburgerMenu\n triggerLabel={t('jobAndPay.compensation.hamburgerTitle')}\n isLoading={isDeletingJob}\n items={items}\n />\n )\n },\n })\n\n const bankAccountsColumns = [\n {\n key: 'nickname',\n title: t('jobAndPay.payment.nickname'),\n render: (bankAccount: EmployeeBankAccount) => bankAccount.name || '-',\n },\n {\n key: 'routingNumber',\n title: t('jobAndPay.payment.routingNumber'),\n render: (bankAccount: EmployeeBankAccount) => bankAccount.routingNumber || '-',\n },\n {\n key: 'accountType',\n title: t('jobAndPay.payment.accountType'),\n render: (bankAccount: EmployeeBankAccount) => bankAccount.accountType || '-',\n },\n ]\n\n const garnishmentsColumns = [\n {\n key: 'description',\n title: t('jobAndPay.deductions.deduction'),\n render: (garnishment: Garnishment) => garnishment.description || '-',\n },\n {\n key: 'frequency',\n title: t('jobAndPay.deductions.frequency'),\n render: (garnishment: Garnishment) =>\n garnishment.recurring\n ? t('jobAndPay.deductions.recurring')\n : t('jobAndPay.deductions.oneTime'),\n },\n {\n key: 'amount',\n title: t('jobAndPay.deductions.withhold'),\n render: (garnishment: Garnishment) =>\n formatDeductionAmount(garnishment, {\n formatCurrency,\n formatPercent,\n formatPerPaycheck: (value: string) =>\n t('jobAndPay.deductions.amountPerPaycheck', { value }),\n }),\n },\n ]\n\n const payStubsColumns = [\n {\n key: 'payday',\n title: t('jobAndPay.paystubs.payday'),\n render: (payStub: EmployeePayStub) => formatDateLongWithYear(payStub.checkDate) || '-',\n },\n {\n key: 'checkAmount',\n title: t('jobAndPay.paystubs.checkAmount'),\n render: (payStub: EmployeePayStub) => {\n if (!payStub.netPay) return '-'\n const amount = parseFloat(payStub.netPay)\n return isNaN(amount) ? '-' : formatCurrency(amount)\n },\n },\n {\n key: 'grossPay',\n title: t('jobAndPay.paystubs.grossPay'),\n render: (payStub: EmployeePayStub) => {\n if (!payStub.grossPay) return '-'\n const amount = parseFloat(payStub.grossPay)\n return isNaN(amount) ? '-' : formatCurrency(amount)\n },\n },\n {\n key: 'paymentMethod',\n title: t('jobAndPay.paystubs.paymentMethod'),\n render: () => paymentMethod?.type || t('jobAndPay.paystubs.noPaymentMethod'),\n },\n ]\n\n const bankAccountsDataView = useDataView({\n data: bankAccounts,\n columns: bankAccountsColumns,\n itemMenu: (bankAccount: EmployeeBankAccount) => (\n <HamburgerMenu\n items={[\n {\n label: tPayment('deleteBankAccountCta'),\n onClick: () => {\n setPendingDeleteAccount({\n uuid: bankAccount.uuid,\n hiddenAccountNumber: bankAccount.hiddenAccountNumber,\n })\n },\n icon: <TrashCanSvg aria-hidden />,\n },\n ]}\n triggerLabel={tPayment('hamburgerTitle')}\n />\n ),\n })\n\n const garnishmentsDataView = useDataView({\n data: deductions,\n columns: garnishmentsColumns,\n itemMenu: (garnishment: Garnishment) => (\n <HamburgerMenu\n isLoading={deletingGarnishmentUuid === garnishment.uuid}\n items={[\n {\n label: tDeductions('editCta'),\n onClick: () => onEditDeduction?.(garnishment),\n icon: <PencilSvg aria-hidden />,\n },\n {\n label: tDeductions('deleteCta'),\n onClick: () => {\n setPendingDeleteDeduction(garnishment)\n },\n icon: <TrashCanSvg aria-hidden />,\n },\n ]}\n triggerLabel={tDeductions('hamburgerTitle')}\n />\n ),\n emptyState: () => (\n <EmptyData\n title={t('jobAndPay.deductions.emptyState.title')}\n description={t('jobAndPay.deductions.emptyState.description')}\n />\n ),\n })\n\n const payStubsDataView = useDataView({\n data: payStubs,\n columns: payStubsColumns,\n pagination: payStubsPagination,\n itemMenu: payStub => {\n const isDownloading =\n !!payStub.payrollUuid && downloadingPayrollUuids.has(payStub.payrollUuid)\n return (\n <Components.ButtonIcon\n variant=\"tertiary\"\n aria-label={t('jobAndPay.paystubs.downloadCta')}\n isDisabled={!payStub.payrollUuid}\n isLoading={isDownloading}\n onClick={() => {\n if (payStub.payrollUuid) {\n void handlePaystubDownload(payStub.payrollUuid)\n }\n }}\n >\n <DownloadCloudIcon aria-hidden />\n </Components.ButtonIcon>\n )\n },\n emptyState: () => (\n <EmptyData\n title={t('jobAndPay.paystubs.emptyState.title')}\n description={t('jobAndPay.paystubs.emptyState.description')}\n />\n ),\n })\n\n // `usePaymentMethodList` and `useDeductionsList` still use the older\n // `HookLoadingResult | Ready` shape, which returns `isLoading: true`\n // when the query has errored AND data is missing. Treat those rows\n // as \"not loading\" so the section doesn't show a perpetual skeleton\n // while BaseLayout already renders the error alert above.\n const isPaymentMethodLoading =\n paymentMethodList.isLoading && paymentMethodList.errorHandling.errors.length === 0\n const isDeductionsLoading =\n deductionsList.isLoading && deductionsList.errorHandling.errors.length === 0\n const isDirectDeposit = paymentMethod?.type === PAYMENT_METHODS.directDeposit\n\n return (\n <BaseLayout error={errorHandling.errors}>\n <Flex flexDirection=\"column\" gap={24}>\n <Components.Box\n withPadding={!hasMultipleJobs}\n header={\n <Components.BoxHeader\n title={t('jobAndPay.compensation.title')}\n action={\n // While the compensation card is loading we don't yet\n // know if the employee has jobs — suppress the action\n // so we don't surface an \"Add job\" CTA against an\n // employee who already has one.\n isCompensationCardLoading ? null : hasMultipleJobs ? null : singleJob ? (\n singleJobHasPendingUpdate ? null : (\n <Components.Button\n variant=\"secondary\"\n onClick={() => {\n onEditCompensation?.(singleJob)\n }}\n >\n {t('jobAndPay.compensation.editCta')}\n </Components.Button>\n )\n ) : (\n <Components.Button\n variant=\"secondary\"\n onClick={onAddJob}\n icon={<PlusCircleIcon />}\n >\n {t('jobAndPay.compensation.addJobCta')}\n </Components.Button>\n )\n }\n />\n }\n footer={\n !isCompensationCardLoading && canAddAnotherJob ? (\n <Components.Button\n variant=\"secondary\"\n onClick={onAddAnotherJob}\n icon={<PlusCircleIcon />}\n >\n {t('jobAndPay.compensation.addAnotherJobCta')}\n </Components.Button>\n ) : undefined\n }\n >\n {isCompensationCardLoading ? (\n <Loading />\n ) : (\n <Flex flexDirection=\"column\" gap={16}>\n {hasPendingUpdates && (\n <div\n className={[styles.alertWrapper, hasMultipleJobs && styles.alertWrapperPadded]\n .filter(Boolean)\n .join(' ')}\n >\n <Flex flexDirection=\"column\" gap={16}>\n {showInlineAlert && nextChange && (\n <Components.Alert\n status=\"warning\"\n disableScrollIntoView\n label={\n hasMultipleJobs\n ? t('jobAndPay.compensation.pendingChange.alertLabelWithJob', {\n jobTitle: nextChange.jobTitle,\n date: formatDateLongWithYear(nextChange.effectiveDate),\n })\n : t('jobAndPay.compensation.pendingChange.alertLabel', {\n date: formatDateLongWithYear(nextChange.effectiveDate),\n })\n }\n >\n <Flex flexDirection=\"column\" gap={12}>\n <Components.UnorderedList\n items={nextChange.details.map(detail => renderDetail(detail))}\n />\n <div>\n <Components.Button\n variant=\"secondary\"\n isLoading={cancellingCompensationUuid === nextChange.compensationUuid}\n onClick={() => {\n void handleCancelChange(nextChange)\n }}\n >\n {t('jobAndPay.compensation.pendingChange.cancelCta')}\n </Components.Button>\n </div>\n </Flex>\n </Components.Alert>\n )}\n {showSummaryAlert && (\n <Components.Alert\n status=\"warning\"\n disableScrollIntoView\n label={t('jobAndPay.compensation.pendingChange.summaryLabel', {\n name: employeeFirstName ?? '',\n })}\n action={\n <Components.Button\n variant=\"secondary\"\n onClick={() => {\n setIsReviewOpen(true)\n }}\n >\n {t('jobAndPay.compensation.pendingChange.reviewCta')}\n </Components.Button>\n }\n />\n )}\n </Flex>\n </div>\n )}\n {hasMultipleJobs ? (\n <DataView\n label={t('jobAndPay.compensation.tableLabel')}\n isWithinBox\n {...jobsDataView}\n />\n ) : singleJob ? (\n <Components.DescriptionList\n items={[\n {\n term: t('jobAndPay.compensation.jobTitle'),\n description: singleJob.title || emptyPlaceholder,\n },\n {\n term: t('jobAndPay.compensation.type'),\n description: singleJobPaymentTypeLabel || emptyPlaceholder,\n },\n {\n term: t('jobAndPay.compensation.wage'),\n description:\n singleJobNumericRate !== null && singleJob.paymentUnit\n ? formatCompensationRate(singleJobNumericRate, singleJob.paymentUnit)\n : emptyPlaceholder,\n },\n {\n term: t('jobAndPay.compensation.effectiveDate'),\n description: singleJobCurrentComp?.effectiveDate\n ? formatDateLongWithYear(singleJobCurrentComp.effectiveDate)\n : emptyPlaceholder,\n },\n ...(singleJobIsPendingNew\n ? [\n {\n term: t('jobAndPay.compensation.columns.status'),\n description: (\n <Components.Badge status=\"warning\">\n {t('jobAndPay.compensation.pendingStatus')}\n </Components.Badge>\n ),\n },\n ]\n : []),\n ]}\n />\n ) : (\n <EmptyData\n title={t('jobAndPay.compensation.emptyState.title')}\n description={t('jobAndPay.compensation.emptyState.description')}\n />\n )}\n </Flex>\n )}\n </Components.Box>\n\n <Components.Box\n withPadding={bankAccounts.length === 0}\n header={\n <Components.BoxHeader\n title={t('jobAndPay.payment.title')}\n action={\n <Flex gap={8} alignItems=\"center\" justifyContent=\"flex-end\">\n {isDirectDeposit && bankAccounts.length > 1 && (\n <Components.Button\n variant=\"secondary\"\n onClick={() => {\n onEvent(componentEvents.EMPLOYEE_SPLIT_PAYCHECK, { employeeId })\n }}\n icon={<PercentCircleIcon />}\n >\n {t('jobAndPay.payment.splitPaycheckCta')}\n </Components.Button>\n )}\n <Components.Button\n variant=\"secondary\"\n onClick={() => {\n onEvent(componentEvents.EMPLOYEE_BANK_ACCOUNT_CREATE, { employeeId })\n }}\n icon={<PlusCircleIcon />}\n >\n {t('jobAndPay.payment.addBankAccountCta')}\n </Components.Button>\n </Flex>\n }\n />\n }\n >\n {isPaymentMethodLoading ? (\n <Loading />\n ) : bankAccounts.length === 0 ? (\n <Components.DescriptionList\n items={[\n {\n term: tPayment('paymentMethodLabel'),\n description: isDirectDeposit\n ? tPayment('directDepositLabel')\n : tPayment('checkLabel'),\n },\n ]}\n />\n ) : (\n <DataView\n label={t('jobAndPay.payment.listLabel')}\n isWithinBox\n {...bankAccountsDataView}\n />\n )}\n </Components.Box>\n\n <Components.Box\n withPadding={false}\n header={\n <Components.BoxHeader\n title={t('jobAndPay.deductions.title')}\n action={\n <Components.Button\n variant=\"secondary\"\n onClick={onAddDeduction}\n icon={<PlusCircleIcon />}\n >\n {t('jobAndPay.deductions.addDeductionCta')}\n </Components.Button>\n }\n />\n }\n >\n {isDeductionsLoading ? (\n <Loading />\n ) : (\n <DataView\n label={t('jobAndPay.deductions.listLabel')}\n isWithinBox\n {...garnishmentsDataView}\n />\n )}\n </Components.Box>\n\n <Components.Box\n withPadding={false}\n header={<Components.BoxHeader title={t('jobAndPay.paystubs.title')} />}\n >\n {isPayStubsLoading ? (\n <Loading />\n ) : (\n <DataView label={t('jobAndPay.paystubs.listLabel')} isWithinBox {...payStubsDataView} />\n )}\n </Components.Box>\n\n <PendingChangesReviewModal\n isOpen={isReviewOpen}\n pendingChanges={updatePendingChanges}\n employeeFirstName={employeeFirstName}\n cancellingCompensationUuid={cancellingCompensationUuid}\n onClose={() => {\n setIsReviewOpen(false)\n }}\n onCancelChange={change => {\n void handleCancelChange(change)\n }}\n />\n\n <DeleteBankAccountDialog\n pendingDeleteAccount={pendingDeleteAccount}\n isPrimaryActionLoading={deletePendingBankAccountUuid === pendingDeleteAccount?.uuid}\n onClose={() => {\n setPendingDeleteAccount(null)\n }}\n onConfirm={() => {\n void handleConfirmDelete()\n }}\n />\n\n <DeleteDeductionDialog\n pendingDeleteDeduction={pendingDeleteDeduction}\n isPrimaryActionLoading={deletingGarnishmentUuid === pendingDeleteDeduction?.uuid}\n onClose={() => {\n setPendingDeleteDeduction(null)\n }}\n onConfirm={() => {\n void handleConfirmDeleteDeduction()\n }}\n />\n\n <Components.Dialog\n isOpen={pendingDeleteJob !== null}\n onClose={() => {\n setPendingDeleteJob(null)\n }}\n onPrimaryActionClick={() => {\n void handleConfirmDeleteJob()\n }}\n isPrimaryActionLoading={isDeletingJob}\n isDestructive\n title={t('jobAndPay.compensation.deleteJobDialog.title')}\n primaryActionLabel={t('jobAndPay.compensation.deleteJobDialog.confirmCta')}\n closeActionLabel={t('jobAndPay.compensation.deleteJobDialog.cancelCta')}\n >\n {pendingDeleteJob\n ? t('jobAndPay.compensation.deleteJobDialog.description', {\n jobTitle: pendingDeleteJob.title,\n })\n : null}\n </Components.Dialog>\n </Flex>\n </BaseLayout>\n )\n}\n"],"names":["parseJobRate","rate","numericRate","JobAndPayView","employeeId","onEvent","onEditCompensation","onAddJob","onAddAnotherJob","onAddDeduction","onEditDeduction","useI18n","t","useTranslation","tPayment","tCompensation","tDeductions","Components","useComponentContext","formatCompensationRate","useFormatCompensationRate","formatCurrency","useNumberFormatter","formatPercent","gustoEmbedded","useGustoEmbeddedContext","showBoundary","useErrorBoundary","compensation","useEmployeeCompensation","jobs","primaryFlsaStatus","pendingChanges","hasMultipleJobsFromHook","payStubs","employeeFirstName","payStubsPagination","cancellingCompensationUuid","cancelPendingChange","isCompensationCardLoading","isPayStubsLoading","handleCancelChange","useCallback","pendingChange","componentEvents","downloadingPayrollUuids","setDownloadingPayrollUuids","useState","handlePaystubDownload","payrollUuid","newWindow","loadingMessage","doc","style","spinner","label","prev","next","response","payrollsGetPayStub","pdfBlob","readableStreamToBlob","url","err","pendingDeleteJob","setPendingDeleteJob","deleteEmployeeJob","isDeletingJob","useJobsAndCompensationsDeleteMutation","handleConfirmDeleteJob","jobId","singleJob","hasMultipleJobs","localTodayISO","formatDateToStringDate","hasFutureNonNonexemptComp","j","c","FlsaStatus","canAddAnotherJob","singleJobNumericRate","singleJobCurrentComp","emptyPlaceholder","jsx","singleJobPaymentTypeLabel","isReviewOpen","setIsReviewOpen","renderDetail","usePendingChangeDetailRenderer","newJobPendingChanges","updatePendingChanges","useEffect","pendingNewJobUuids","singleJobIsPendingNew","hasAnyPendingNewJobs","pendingUpdateJobUuids","singleJobHasPendingUpdate","hasPendingUpdates","showSummaryAlert","showInlineAlert","nextChange","paymentMethodList","usePaymentMethodList","paymentMethod","bankAccounts","deletePendingBankAccountUuid","pendingDeleteAccount","setPendingDeleteAccount","handleConfirmDelete","useDeleteBankAccount","uuid","result","deductionsList","useDeductionsList","deductions","deletingGarnishmentUuid","pendingDeleteDeduction","setPendingDeleteDeduction","handleConfirmDeleteDeduction","useDeleteDeduction","garnishment","errorHandling","composeErrorHandler","jobsColumns","job","currentComp","jsxs","Fragment","flsaStatus","comp","formatDateLongWithYear","VisuallyHidden","jobsDataView","useDataView","items","PencilSvg","TrashCanSvg","HamburgerMenu","bankAccountsColumns","bankAccount","garnishmentsColumns","formatDeductionAmount","value","payStubsColumns","payStub","amount","bankAccountsDataView","garnishmentsDataView","EmptyData","payStubsDataView","isDownloading","DownloadCloudIcon","isPaymentMethodLoading","isDeductionsLoading","isDirectDeposit","PAYMENT_METHODS","BaseLayout","Flex","PlusCircleIcon","Loading","styles","detail","DataView","PercentCircleIcon","PendingChangesReviewModal","change","DeleteBankAccountDialog","DeleteDeductionDialog"],"mappings":"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"}
@@ -1,135 +1,148 @@
1
- import { jsx as t, jsxs as c } from "react/jsx-runtime";
2
- import { useTranslation as F } from "react-i18next";
3
- import { Flex as o } from "../../Common/Flex/Flex.js";
4
- import { useComponentContext as b } from "../../../contexts/ComponentAdapter/useComponentContext.js";
1
+ import { jsx as e, jsxs as g } from "react/jsx-runtime";
2
+ import { useTranslation as x } from "react-i18next";
3
+ import { Flex as d } from "../../Common/Flex/Flex.js";
4
+ import { useComponentContext as B } from "../../../contexts/ComponentAdapter/useComponentContext.js";
5
5
  import "classnames";
6
6
  import "../../../shared/constants.js";
7
- import { Loading as g } from "../../Common/Loading/Loading.js";
8
- import { BaseLayout as v } from "../../Base/Base.js";
9
- import C from "../../../hooks/useNumberFormatter.js";
10
- import { useEmployeeTaxes as S } from "./hooks/useEmployeeTaxes.js";
11
- function N({
12
- employeeId: n,
13
- onEditFederalTaxes: d,
14
- onEditStateTaxes: m
7
+ import { Loading as F } from "../../Common/Loading/Loading.js";
8
+ import { BaseLayout as S } from "../../Base/Base.js";
9
+ import A from "../../../hooks/useNumberFormatter.js";
10
+ import { useEmployeeTaxes as H } from "./hooks/useEmployeeTaxes.js";
11
+ function $({
12
+ employeeId: t,
13
+ onEditFederalTaxes: c,
14
+ onEditStateTaxes: u
15
15
  }) {
16
- const u = S({ employeeId: n }), s = u.data.employeeFederalTax;
17
- return /* @__PURE__ */ t(v, { error: u.errorHandling.errors, children: /* @__PURE__ */ t(
18
- B,
16
+ const s = H({ employeeId: t }), m = s.data.employeeFederalTax;
17
+ return /* @__PURE__ */ e(S, { error: s.errorHandling.errors, children: /* @__PURE__ */ e(
18
+ W,
19
19
  {
20
- federalTaxes: s,
21
- stateTaxes: u.data.employeeStateTaxesList,
22
- isFederalTaxesLoading: u.status.isFederalTaxesLoading,
23
- isStateTaxesLoading: u.status.isStateTaxesLoading,
24
- onEditFederalTaxes: () => d?.(s),
25
- onEditStateTaxes: m
20
+ federalTaxes: m,
21
+ stateTaxes: s.data.employeeStateTaxesList,
22
+ isFederalTaxesLoading: s.status.isFederalTaxesLoading,
23
+ isStateTaxesLoading: s.status.isStateTaxesLoading,
24
+ onEditFederalTaxes: () => c?.(m),
25
+ onEditStateTaxes: u
26
26
  }
27
27
  ) });
28
28
  }
29
- function B({
30
- federalTaxes: n,
31
- stateTaxes: d,
32
- isLoading: m = !1,
33
- isFederalTaxesLoading: u = m,
34
- isStateTaxesLoading: s = m,
35
- onEditFederalTaxes: f,
36
- onEditStateTaxes: y
29
+ function W({
30
+ federalTaxes: t,
31
+ stateTaxes: c,
32
+ isLoading: u = !1,
33
+ isFederalTaxesLoading: s = u,
34
+ isStateTaxesLoading: m = u,
35
+ onEditFederalTaxes: b,
36
+ onEditStateTaxes: C
37
37
  }) {
38
- const { t: i } = F("Employee.Dashboard"), e = b(), p = C("currency"), D = (l, r) => {
39
- if (l.inputQuestionFormat.type === "Select" && l.inputQuestionFormat.options && l.inputQuestionFormat.options.length > 0) {
40
- const a = l.inputQuestionFormat.options.find((h) => h.value === r);
41
- if (a?.label)
42
- return a.label;
38
+ const { t: o } = x("Employee.Dashboard"), { t: D } = x("common"), r = B(), p = A("currency"), v = !!c?.some((n) => (n.questions?.length ?? 0) > 0), Q = (n, i) => {
39
+ if (n.inputQuestionFormat.type === "Select" && n.inputQuestionFormat.options && n.inputQuestionFormat.options.length > 0) {
40
+ const l = n.inputQuestionFormat.options.find((h) => h.value === i);
41
+ if (l?.label)
42
+ return l.label;
43
43
  }
44
- if (typeof r == "number")
45
- return l.inputQuestionFormat.type === "Currency" ? p(r) : r;
46
- if (typeof r == "string" && !isNaN(parseFloat(r))) {
47
- const a = parseFloat(r);
48
- return l.inputQuestionFormat.type === "Currency" ? p(a) : r;
44
+ if (typeof i == "number")
45
+ return n.inputQuestionFormat.type === "Currency" ? p(i) : i;
46
+ if (typeof i == "string" && !isNaN(parseFloat(i))) {
47
+ const l = parseFloat(i);
48
+ return n.inputQuestionFormat.type === "Currency" ? p(l) : i;
49
49
  }
50
- return typeof r == "boolean" ? i(r ? "common.yes" : "common.no") : r;
51
- };
52
- return /* @__PURE__ */ c(o, { flexDirection: "column", gap: 24, children: [
53
- /* @__PURE__ */ t(
54
- e.Box,
50
+ return typeof i == "boolean" ? o(i ? "common.yes" : "common.no") : i;
51
+ }, a = /* @__PURE__ */ e("span", { "aria-label": o("listEmptyPlaceholder"), children: "–" });
52
+ return /* @__PURE__ */ g(d, { flexDirection: "column", gap: 24, children: [
53
+ /* @__PURE__ */ e(
54
+ r.Box,
55
55
  {
56
- header: /* @__PURE__ */ t(
57
- e.BoxHeader,
56
+ header: /* @__PURE__ */ e(
57
+ r.BoxHeader,
58
58
  {
59
- title: i("taxes.federal.title"),
60
- action: /* @__PURE__ */ t(
61
- e.Button,
59
+ title: o("taxes.federal.title"),
60
+ action: /* @__PURE__ */ e(
61
+ r.Button,
62
62
  {
63
63
  variant: "secondary",
64
- onClick: f,
65
- isDisabled: u,
66
- children: i("taxes.federal.editCta")
64
+ onClick: b,
65
+ isDisabled: s,
66
+ children: o("taxes.federal.editCta")
67
67
  }
68
68
  )
69
69
  }
70
70
  ),
71
- children: /* @__PURE__ */ t(o, { flexDirection: "column", gap: 16, children: u ? /* @__PURE__ */ t(g, {}) : n ? /* @__PURE__ */ c(o, { flexDirection: "column", gap: 12, children: [
72
- n.filingStatus && /* @__PURE__ */ c(o, { flexDirection: "column", gap: 0, children: [
73
- /* @__PURE__ */ t(e.Text, { variant: "supporting", children: i("taxes.federal.filingStatus") }),
74
- /* @__PURE__ */ t(e.Text, { children: n.filingStatus })
75
- ] }),
76
- "twoJobs" in n && n.twoJobs !== null && /* @__PURE__ */ c(o, { flexDirection: "column", gap: 0, children: [
77
- /* @__PURE__ */ t(e.Text, { variant: "supporting", children: i("taxes.federal.multipleJobs") }),
78
- /* @__PURE__ */ t(e.Text, { children: n.twoJobs ? i("common.yes") : i("common.no") })
79
- ] }),
80
- "dependentsAmount" in n && n.dependentsAmount && /* @__PURE__ */ c(o, { flexDirection: "column", gap: 0, children: [
81
- /* @__PURE__ */ t(e.Text, { variant: "supporting", children: i("taxes.federal.dependentsAndOtherCredits") }),
82
- /* @__PURE__ */ t(e.Text, { children: p(parseFloat(n.dependentsAmount)) })
83
- ] }),
84
- "otherIncome" in n && n.otherIncome && /* @__PURE__ */ c(o, { flexDirection: "column", gap: 0, children: [
85
- /* @__PURE__ */ t(e.Text, { variant: "supporting", children: i("taxes.federal.otherIncome") }),
86
- /* @__PURE__ */ t(e.Text, { children: p(parseFloat(n.otherIncome)) })
87
- ] }),
88
- "deductions" in n && n.deductions && /* @__PURE__ */ c(o, { flexDirection: "column", gap: 0, children: [
89
- /* @__PURE__ */ t(e.Text, { variant: "supporting", children: i("taxes.federal.deductions") }),
90
- /* @__PURE__ */ t(e.Text, { children: p(parseFloat(n.deductions)) })
91
- ] }),
92
- "extraWithholding" in n && n.extraWithholding && /* @__PURE__ */ c(o, { flexDirection: "column", gap: 0, children: [
93
- /* @__PURE__ */ t(e.Text, { variant: "supporting", children: i("taxes.federal.extraWithholding") }),
94
- /* @__PURE__ */ t(e.Text, { children: p(parseFloat(n.extraWithholding)) })
95
- ] })
96
- ] }) : null })
71
+ children: /* @__PURE__ */ e(d, { flexDirection: "column", gap: 16, children: s ? /* @__PURE__ */ e(F, {}) : t ? /* @__PURE__ */ e(
72
+ r.DescriptionList,
73
+ {
74
+ items: [
75
+ {
76
+ term: o("taxes.federal.filingStatus"),
77
+ description: t.filingStatus || a
78
+ },
79
+ {
80
+ term: o("taxes.federal.multipleJobs"),
81
+ description: "twoJobs" in t && t.twoJobs !== null ? t.twoJobs ? o("common.yes") : o("common.no") : a
82
+ },
83
+ {
84
+ term: o("taxes.federal.dependentsAndOtherCredits"),
85
+ description: "dependentsAmount" in t && t.dependentsAmount ? p(parseFloat(t.dependentsAmount)) : a
86
+ },
87
+ {
88
+ term: o("taxes.federal.otherIncome"),
89
+ description: "otherIncome" in t && t.otherIncome ? p(parseFloat(t.otherIncome)) : a
90
+ },
91
+ {
92
+ term: o("taxes.federal.deductions"),
93
+ description: "deductions" in t && t.deductions ? p(parseFloat(t.deductions)) : a
94
+ },
95
+ {
96
+ term: o("taxes.federal.extraWithholding"),
97
+ description: "extraWithholding" in t && t.extraWithholding ? p(parseFloat(t.extraWithholding)) : a
98
+ }
99
+ ]
100
+ }
101
+ ) : null })
97
102
  }
98
103
  ),
99
- /* @__PURE__ */ t(
100
- e.Box,
104
+ /* @__PURE__ */ e(
105
+ r.Box,
101
106
  {
102
- header: /* @__PURE__ */ t(
103
- e.BoxHeader,
107
+ header: /* @__PURE__ */ e(
108
+ r.BoxHeader,
104
109
  {
105
- title: i("taxes.state.title"),
106
- action: /* @__PURE__ */ t(
107
- e.Button,
110
+ title: o("taxes.state.title"),
111
+ action: m || v ? /* @__PURE__ */ e(
112
+ r.Button,
108
113
  {
109
114
  variant: "secondary",
110
- onClick: y,
111
- isDisabled: s,
112
- children: i("taxes.state.editCta")
115
+ onClick: C,
116
+ isDisabled: m,
117
+ children: o("taxes.state.editCta")
113
118
  }
114
- )
119
+ ) : void 0
115
120
  }
116
121
  ),
117
- children: /* @__PURE__ */ t(o, { flexDirection: "column", gap: 16, children: s ? /* @__PURE__ */ t(g, {}) : d && d.length > 0 ? /* @__PURE__ */ t(o, { flexDirection: "column", gap: 24, children: d.map((l, r) => /* @__PURE__ */ c(o, { flexDirection: "column", gap: 16, children: [
118
- /* @__PURE__ */ t(e.Heading, { as: "h4", children: l.state }),
119
- l.questions && l.questions.length > 0 && /* @__PURE__ */ t(o, { flexDirection: "column", gap: 12, children: l.questions.map((a, h) => {
120
- const x = a.answers[0]?.value;
121
- return x == null ? null : /* @__PURE__ */ c(o, { flexDirection: "column", gap: 0, children: [
122
- /* @__PURE__ */ t(e.Text, { variant: "supporting", children: a.label }),
123
- /* @__PURE__ */ t(e.Text, { children: D(a, x) })
124
- ] }, a.key || h);
125
- }) })
126
- ] }, l.state || r)) }) : /* @__PURE__ */ t(e.Text, { children: i("taxes.state.noStateTaxes") }) })
122
+ children: /* @__PURE__ */ e(d, { flexDirection: "column", gap: 16, children: m ? /* @__PURE__ */ e(F, {}) : c && c.length > 0 ? /* @__PURE__ */ e(d, { flexDirection: "column", gap: 24, children: c.map((n, i) => {
123
+ const l = n.state ? D(`statesHash.${n.state}`, n.state) : "", h = (n.questions?.length ?? 0) > 0;
124
+ return /* @__PURE__ */ g(d, { flexDirection: "column", gap: 16, children: [
125
+ l ? /* @__PURE__ */ e(r.Heading, { as: "h4", children: l }) : null,
126
+ h ? /* @__PURE__ */ e(
127
+ r.DescriptionList,
128
+ {
129
+ items: n.questions.map((f) => {
130
+ const y = f.answers[0]?.value;
131
+ return {
132
+ term: f.label,
133
+ description: y == null ? a : Q(f, y)
134
+ };
135
+ })
136
+ }
137
+ ) : /* @__PURE__ */ e(r.Text, { variant: "supporting", children: o("taxes.state.noWithholdingForState") })
138
+ ] }, n.state || i);
139
+ }) }) : /* @__PURE__ */ e(r.Text, { children: o("taxes.state.noStateTaxes") }) })
127
140
  }
128
141
  )
129
142
  ] });
130
143
  }
131
144
  export {
132
- B as TaxesView,
133
- N as TaxesViewWithData
145
+ W as TaxesView,
146
+ $ as TaxesViewWithData
134
147
  };
135
148
  //# sourceMappingURL=TaxesView.js.map