@gusto/embedded-react-sdk 0.55.3 → 0.55.4
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 +23 -0
- package/dist/components/Common/DataView/DataCards/DataCards.d.ts +2 -1
- package/dist/components/Common/DataView/DataCards/DataCards.js +63 -54
- package/dist/components/Common/DataView/DataCards/DataCards.js.map +1 -1
- package/dist/components/Common/DataView/DataCards/DataCards.module.scss.js +14 -12
- package/dist/components/Common/DataView/DataCards/DataCards.module.scss.js.map +1 -1
- package/dist/components/Common/DataView/DataTable/DataTable.d.ts +2 -1
- package/dist/components/Common/DataView/DataTable/DataTable.js +75 -66
- package/dist/components/Common/DataView/DataTable/DataTable.js.map +1 -1
- package/dist/components/Common/DataView/DataTable/DataTable.module.scss.js +8 -4
- package/dist/components/Common/DataView/DataTable/DataTable.module.scss.js.map +1 -1
- package/dist/components/Common/DataView/DataView.js +18 -17
- package/dist/components/Common/DataView/DataView.js.map +1 -1
- package/dist/components/Company/AssignSignatory/CreateSignatory/useCreateSignatory.js +3 -6
- package/dist/components/Company/AssignSignatory/CreateSignatory/useCreateSignatory.js.map +1 -1
- package/dist/components/Company/AssignSignatory/InviteSignatory/useInviteSignatory.js +3 -6
- package/dist/components/Company/AssignSignatory/InviteSignatory/useInviteSignatory.js.map +1 -1
- package/dist/components/Company/AssignSignatory/useAssignSignatory.js +5 -8
- package/dist/components/Company/AssignSignatory/useAssignSignatory.js.map +1 -1
- package/dist/components/Company/BankAccount/BankAccountForm/context.js +3 -6
- package/dist/components/Company/BankAccount/BankAccountForm/context.js.map +1 -1
- package/dist/components/Company/DocumentSigner/DocumentList/useDocumentList.js +3 -6
- package/dist/components/Company/DocumentSigner/DocumentList/useDocumentList.js.map +1 -1
- package/dist/components/Company/FederalTaxes/useFederalTaxes.js +8 -11
- package/dist/components/Company/FederalTaxes/useFederalTaxes.js.map +1 -1
- package/dist/components/Company/Industry/Context.js +6 -9
- package/dist/components/Company/Industry/Context.js.map +1 -1
- package/dist/components/Company/Locations/LocationForm/useLocationForm.js +3 -6
- package/dist/components/Company/Locations/LocationForm/useLocationForm.js.map +1 -1
- package/dist/components/Company/Locations/LocationsList/List.js +27 -25
- package/dist/components/Company/Locations/LocationsList/List.js.map +1 -1
- package/dist/components/Company/Locations/LocationsList/LocationsList.js +41 -36
- package/dist/components/Company/Locations/LocationsList/LocationsList.js.map +1 -1
- package/dist/components/Company/Locations/LocationsList/useLocationsList.d.ts +1 -0
- package/dist/components/Company/Locations/LocationsList/useLocationsList.js +3 -6
- package/dist/components/Company/Locations/LocationsList/useLocationsList.js.map +1 -1
- package/dist/components/Company/OnboardingOverview/context.js +3 -6
- package/dist/components/Company/OnboardingOverview/context.js.map +1 -1
- package/dist/components/Company/StateTaxes/StateTaxesForm/Form.d.ts +9 -2
- package/dist/components/Company/StateTaxes/StateTaxesForm/Form.js +19 -18
- package/dist/components/Company/StateTaxes/StateTaxesForm/Form.js.map +1 -1
- package/dist/components/Company/StateTaxes/StateTaxesForm/StateTaxesForm.js +63 -62
- package/dist/components/Company/StateTaxes/StateTaxesForm/StateTaxesForm.js.map +1 -1
- package/dist/components/Company/StateTaxes/StateTaxesForm/context.js +3 -6
- package/dist/components/Company/StateTaxes/StateTaxesForm/context.js.map +1 -1
- package/dist/components/Company/StateTaxes/StateTaxesList/context.js +3 -6
- package/dist/components/Company/StateTaxes/StateTaxesList/context.js.map +1 -1
- package/dist/components/Company/StateTaxes/TaxRateManagement/AddTaxRateDialog.js +69 -65
- package/dist/components/Company/StateTaxes/TaxRateManagement/AddTaxRateDialog.js.map +1 -1
- package/dist/components/Company/StateTaxes/TaxRateManagement/context.js +3 -6
- package/dist/components/Company/StateTaxes/TaxRateManagement/context.js.map +1 -1
- package/dist/components/Company/StateTaxes/TaxRateManagement/toHistoryRows.js +30 -23
- package/dist/components/Company/StateTaxes/TaxRateManagement/toHistoryRows.js.map +1 -1
- package/dist/components/Company/StateTaxes/shared/RequirementFields.d.ts +8 -4
- package/dist/components/Company/StateTaxes/shared/RequirementFields.js +13 -12
- package/dist/components/Company/StateTaxes/shared/RequirementFields.js.map +1 -1
- package/dist/components/Company/StateTaxes/shared/prepareRequirements.d.ts +29 -0
- package/dist/components/Company/StateTaxes/shared/prepareRequirements.js +24 -0
- package/dist/components/Company/StateTaxes/shared/prepareRequirements.js.map +1 -0
- package/dist/components/Company/StateTaxes/shared/prepareRequirements.test.d.ts +1 -0
- package/dist/components/Contractor/Payments/PaymentsList/PaymentsList.js +68 -55
- package/dist/components/Contractor/Payments/PaymentsList/PaymentsList.js.map +1 -1
- package/dist/components/Contractor/Payments/PaymentsList/PaymentsListPresentation.js +36 -35
- package/dist/components/Contractor/Payments/PaymentsList/PaymentsListPresentation.js.map +1 -1
- package/dist/components/Employee/Documents/onboarding/DocumentSigner/DocumentList/useDocumentList.js +3 -6
- package/dist/components/Employee/Documents/onboarding/DocumentSigner/DocumentList/useDocumentList.js.map +1 -1
- package/dist/components/Employee/Paystubs/management/PaystubsCard/PaystubsCard.js +84 -96
- package/dist/components/Employee/Paystubs/management/PaystubsCard/PaystubsCard.js.map +1 -1
- package/dist/components/Flow/Flow.js +22 -22
- package/dist/components/Flow/Flow.js.map +1 -1
- package/dist/components/Flow/useFlow.js +3 -3
- package/dist/components/InformationRequests/InformationRequests.d.ts +1 -1
- package/dist/components/InformationRequests/InformationRequests.js +68 -53
- package/dist/components/InformationRequests/InformationRequests.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/OffCycleCreation/OffCycleCreation.js +52 -50
- package/dist/components/Payroll/OffCycleCreation/OffCycleCreation.js.map +1 -1
- package/dist/components/Payroll/OffCycleCreation/OffCycleCreationPresentation.d.ts +1 -1
- package/dist/components/Payroll/OffCycleCreation/OffCycleCreationPresentation.js +86 -67
- package/dist/components/Payroll/OffCycleCreation/OffCycleCreationPresentation.js.map +1 -1
- package/dist/components/Payroll/OffCycleCreation/OffCycleCreationTypes.d.ts +4 -0
- package/dist/components/Payroll/OffCycleDeductionsSetting/OffCycleDeductionsSetting.d.ts +1 -1
- package/dist/components/Payroll/OffCycleDeductionsSetting/OffCycleDeductionsSetting.js +26 -21
- package/dist/components/Payroll/OffCycleDeductionsSetting/OffCycleDeductionsSetting.js.map +1 -1
- package/dist/components/Payroll/OffCyclePayPeriodDateForm/OffCyclePayPeriodDateFormPresentation.d.ts +8 -1
- package/dist/components/Payroll/OffCyclePayPeriodDateForm/OffCyclePayPeriodDateFormPresentation.js +29 -17
- package/dist/components/Payroll/OffCyclePayPeriodDateForm/OffCyclePayPeriodDateFormPresentation.js.map +1 -1
- package/dist/components/Payroll/OffCycleTaxWithholdingTable/OffCycleTaxWithholdingTable.js +21 -18
- package/dist/components/Payroll/OffCycleTaxWithholdingTable/OffCycleTaxWithholdingTable.js.map +1 -1
- package/dist/components/Payroll/OffCycleTaxWithholdingTable/OffCycleTaxWithholdingTable.module.scss.js +9 -7
- package/dist/components/Payroll/OffCycleTaxWithholdingTable/OffCycleTaxWithholdingTable.module.scss.js.map +1 -1
- package/dist/components/Payroll/OffCycleTaxWithholdingTable/OffCycleTaxWithholdingTableTypes.d.ts +2 -0
- package/dist/components/Payroll/OffCycleTaxWithholdingTable/OffCycleTaxWithholdingTableTypes.js.map +1 -1
- package/dist/components/Payroll/PayrollConfiguration/PayrollConfiguration.js +193 -191
- package/dist/components/Payroll/PayrollConfiguration/PayrollConfiguration.js.map +1 -1
- package/dist/components/Payroll/PayrollConfiguration/usePayrollConfigurationData.d.ts +3 -2
- package/dist/components/Payroll/PayrollConfiguration/usePayrollConfigurationData.js +31 -31
- package/dist/components/Payroll/PayrollConfiguration/usePayrollConfigurationData.js.map +1 -1
- package/dist/components/Payroll/PayrollEditEmployee/PayrollEditEmployeePresentation.js +254 -243
- package/dist/components/Payroll/PayrollEditEmployee/PayrollEditEmployeePresentation.js.map +1 -1
- package/dist/components/Payroll/PayrollHistory/PayrollHistory.js +83 -76
- package/dist/components/Payroll/PayrollHistory/PayrollHistory.js.map +1 -1
- package/dist/components/Payroll/PayrollHistory/PayrollHistoryPresentation.js +23 -22
- package/dist/components/Payroll/PayrollHistory/PayrollHistoryPresentation.js.map +1 -1
- package/dist/components/Payroll/PayrollList/PayrollList.js +108 -97
- package/dist/components/Payroll/PayrollList/PayrollList.js.map +1 -1
- package/dist/components/Payroll/PayrollList/PayrollListPresentation.js +38 -37
- package/dist/components/Payroll/PayrollList/PayrollListPresentation.js.map +1 -1
- package/dist/components/Payroll/PayrollOverview/PayrollOverview.js +176 -167
- package/dist/components/Payroll/PayrollOverview/PayrollOverview.js.map +1 -1
- package/dist/components/Payroll/PayrollOverview/PayrollOverviewPresentation.d.ts +2 -1
- package/dist/components/Payroll/PayrollOverview/PayrollOverviewPresentation.js +173 -164
- package/dist/components/Payroll/PayrollOverview/PayrollOverviewPresentation.js.map +1 -1
- package/dist/components/Payroll/usePreparedPayrollData.js +12 -15
- package/dist/components/Payroll/usePreparedPayrollData.js.map +1 -1
- package/dist/helpers/openPdfInNewTab.d.ts +15 -0
- package/dist/helpers/openPdfInNewTab.js +28 -0
- package/dist/helpers/openPdfInNewTab.js.map +1 -0
- package/dist/i18n/en/Company.StateTaxes.json.js +1 -1
- package/dist/i18n/en/Payroll.OffCycleCreation.json.js +11 -9
- package/dist/i18n/en/Payroll.OffCycleCreation.json.js.map +1 -1
- package/dist/i18n/en/Payroll.OffCycleTaxWithholding.json.js +7 -7
- package/dist/i18n/en/Payroll.PayrollEditEmployee.json.js +29 -27
- package/dist/i18n/en/Payroll.PayrollEditEmployee.json.js.map +1 -1
- package/dist/i18n/en/Payroll.PayrollOverview.json.js +43 -41
- package/dist/i18n/en/Payroll.PayrollOverview.json.js.map +1 -1
- package/dist/i18n/types.d.ts +20 -0
- package/dist/style.css +1 -1
- package/package.json +17 -17
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PayrollHistoryPresentation.js","sources":["../../../../src/components/Payroll/PayrollHistory/PayrollHistoryPresentation.tsx"],"sourcesContent":["import { useTranslation } from 'react-i18next'\nimport type { Payroll } from '@gusto/embedded-api/models/components/payrollshow'\nimport type { WireInRequest } from '@gusto/embedded-api/models/components/wireinrequest'\nimport { PayrollStatusBadges } from '../PayrollStatusBadges'\nimport { getPayrollTypeLabel, calculateTotalPayroll, canCancelPayroll } from '../helpers'\nimport type { MenuItem } from '@/components/Common/UI/Menu/MenuTypes'\nimport { DataView, Flex, DateRangeFilter } from '@/components/Common'\nimport { useComponentContext } from '@/contexts/ComponentAdapter/useComponentContext'\nimport { HamburgerMenu } from '@/components/Common/HamburgerMenu'\nimport { formatNumberAsCurrency } from '@/helpers/formattedStrings'\nimport { useI18n } from '@/i18n'\nimport { useDateFormatter } from '@/hooks/useDateFormatter'\nimport type { PaginationControlProps } from '@/components/Common/PaginationControl/PaginationControlTypes'\nimport type { UseDateRangeFilterResult } from '@/hooks/useDateRangeFilter/useDateRangeFilter'\nimport TrashcanIcon from '@/assets/icons/trashcan.svg?react'\nimport FileIcon from '@/assets/icons/icon-file-outline.svg?react'\nimport ReceiptIcon from '@/assets/icons/icon-receipt-outline.svg?react'\nimport { EmptyData } from '@/components/Common/'\n\ninterface PayrollHistoryPresentationProps {\n payrollHistory: Payroll[]\n wireInRequests: WireInRequest[]\n pagination: PaginationControlProps\n onViewSummary: (payrollId: string, startDate?: string, endDate?: string) => void\n onViewReceipt: (payrollId: string, startDate?: string, endDate?: string) => void\n onCancelPayroll: (item: Payroll) => void\n cancelDialogItem: Payroll | null\n onCancelDialogOpen: (item: Payroll) => void\n onCancelDialogClose: () => void\n isLoading?: boolean\n dateRangeFilter: UseDateRangeFilterResult\n}\n\n/** @internal */\nexport const PayrollHistoryPresentation = ({\n payrollHistory,\n wireInRequests,\n pagination,\n onViewSummary,\n onViewReceipt,\n onCancelPayroll,\n cancelDialogItem,\n onCancelDialogOpen,\n onCancelDialogClose,\n isLoading = false,\n dateRangeFilter,\n}: PayrollHistoryPresentationProps) => {\n const { Heading, Text, Dialog } = useComponentContext()\n useI18n('Payroll.PayrollHistory')\n const { t } = useTranslation('Payroll.PayrollHistory')\n const dateFormatter = useDateFormatter()\n\n const formatDeadlineForDialog = (item: Payroll): string => {\n const deadline = item.payrollDeadline\n if (!deadline) return ''\n\n const deadlineDate = new Date(deadline)\n const timeZone = 'America/New_York'\n\n const formatter = new Intl.DateTimeFormat('en-US', {\n weekday: 'short',\n month: 'short',\n day: 'numeric',\n timeZone,\n })\n\n const timeFormatter = new Intl.DateTimeFormat('en-US', {\n hour: 'numeric',\n minute: '2-digit',\n timeZoneName: 'short',\n timeZone,\n })\n\n const dateStr = formatter.format(deadlineDate)\n const timeStr = timeFormatter.format(deadlineDate)\n\n return `${timeStr} on ${dateStr}`\n }\n\n const handleCancelClick = (item: Payroll) => {\n onCancelDialogOpen(item)\n }\n\n const handleConfirmCancel = () => {\n if (cancelDialogItem) {\n onCancelPayroll(cancelDialogItem)\n }\n }\n\n const getMenuItems = (item: Payroll): MenuItem[] => {\n const payrollId = item.payrollUuid || item.uuid!\n const items: MenuItem[] = [\n {\n label: t('menu.viewSummary'),\n icon: <FileIcon aria-hidden />,\n onClick: () => {\n onViewSummary(payrollId, item.payPeriod?.startDate, item.payPeriod?.endDate)\n },\n },\n {\n label: t('menu.viewReceipt'),\n icon: <ReceiptIcon aria-hidden />,\n onClick: () => {\n onViewReceipt(payrollId, item.payPeriod?.startDate, item.payPeriod?.endDate)\n },\n },\n ]\n\n if (canCancelPayroll(item)) {\n items.push({\n label: t('menu.cancelPayroll'),\n icon: <TrashcanIcon aria-hidden />,\n onClick: () => {\n handleCancelClick(item)\n },\n 'data-destructive': 'true',\n })\n }\n\n return items\n }\n\n return (\n <Flex flexDirection=\"column\" gap={16}>\n <Flex justifyContent=\"space-between\" alignItems=\"center\">\n <Heading as=\"h2\">{t('title')}</Heading>\n <DateRangeFilter\n startDate={dateRangeFilter.startDate}\n endDate={dateRangeFilter.endDate}\n onStartDateChange={dateRangeFilter.handleStartDateChange}\n onEndDateChange={dateRangeFilter.handleEndDateChange}\n onClear={dateRangeFilter.handleClearFilter}\n startDateLabel={t('dateFilter.startDate')}\n endDateLabel={t('dateFilter.endDate')}\n applyLabel={t('dateFilter.apply')}\n cancelLabel={t('dateFilter.cancel')}\n resetLabel={t('dateFilter.reset')}\n selectDatesLabel={t('dateFilter.selectDates')}\n triggerLabel={t('dateFilter.trigger')}\n maxEndDate={dateRangeFilter.getMaxEndDate()}\n minStartDate={dateRangeFilter.getMinStartDate()}\n />\n </Flex>\n\n <DataView\n label={t('dataView.label')}\n pagination={pagination}\n emptyState={() =>\n dateRangeFilter.isModified ? (\n <EmptyData\n title={t('emptyState.filtered.title')}\n description={t('emptyState.filtered.description')}\n />\n ) : (\n <EmptyData\n title={t('emptyState.default.title')}\n description={t('emptyState.default.description')}\n />\n )\n }\n columns={[\n {\n title: t('columns.payPeriod'),\n render: (item: Payroll) =>\n dateFormatter.formatPayPeriodRange(\n item.payPeriod?.startDate,\n item.payPeriod?.endDate,\n ),\n },\n {\n title: t('columns.type'),\n render: (item: Payroll) => getPayrollTypeLabel(item),\n },\n {\n title: t('columns.payDate'),\n render: (item: Payroll) => dateFormatter.formatShortWithYear(item.checkDate),\n },\n {\n title: t('columns.status'),\n render: (item: Payroll) => {\n const wireInRequest = wireInRequests.find(\n wire => wire.paymentUuid === item.payrollUuid,\n )\n return <PayrollStatusBadges payroll={item} wireInRequest={wireInRequest} />\n },\n },\n {\n title: t('columns.totalPayroll'),\n render: (item: Payroll) => formatNumberAsCurrency(calculateTotalPayroll(item)),\n },\n ]}\n data={payrollHistory}\n itemMenu={(item: Payroll) => <HamburgerMenu items={getMenuItems(item)} />}\n />\n\n <Dialog\n isOpen={!!cancelDialogItem}\n onClose={onCancelDialogClose}\n onPrimaryActionClick={handleConfirmCancel}\n isDestructive\n isPrimaryActionLoading={isLoading}\n primaryActionLabel={t('cancelDialog.primaryAction')}\n closeActionLabel={t('cancelDialog.secondaryAction')}\n title={\n cancelDialogItem\n ? t('cancelDialog.title', {\n payPeriod: dateFormatter.formatPayPeriodRange(\n cancelDialogItem.payPeriod?.startDate,\n cancelDialogItem.payPeriod?.endDate,\n ),\n })\n : ''\n }\n >\n {cancelDialogItem && (\n <Flex flexDirection=\"column\" gap={16}>\n <Text>{t('cancelDialog.body')}</Text>\n {cancelDialogItem.payrollDeadline && (\n <Text>\n {t('cancelDialog.deadline', {\n deadline: formatDeadlineForDialog(cancelDialogItem),\n })}\n </Text>\n )}\n </Flex>\n )}\n </Dialog>\n </Flex>\n )\n}\n"],"names":["PayrollHistoryPresentation","payrollHistory","wireInRequests","pagination","onViewSummary","onViewReceipt","onCancelPayroll","cancelDialogItem","onCancelDialogOpen","onCancelDialogClose","isLoading","dateRangeFilter","Heading","Text","Dialog","useComponentContext","useI18n","t","useTranslation","dateFormatter","useDateFormatter","formatDeadlineForDialog","item","deadline","deadlineDate","timeZone","formatter","timeFormatter","dateStr","handleCancelClick","handleConfirmCancel","getMenuItems","payrollId","items","jsx","FileIcon","ReceiptIcon","canCancelPayroll","TrashcanIcon","jsxs","Flex","DateRangeFilter","DataView","EmptyData","getPayrollTypeLabel","wireInRequest","wire","PayrollStatusBadges","formatNumberAsCurrency","calculateTotalPayroll","HamburgerMenu"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"PayrollHistoryPresentation.js","sources":["../../../../src/components/Payroll/PayrollHistory/PayrollHistoryPresentation.tsx"],"sourcesContent":["import { useTranslation } from 'react-i18next'\nimport type { Payroll } from '@gusto/embedded-api/models/components/payrollshow'\nimport type { WireInRequest } from '@gusto/embedded-api/models/components/wireinrequest'\nimport { PayrollStatusBadges } from '../PayrollStatusBadges'\nimport { getPayrollTypeLabel, calculateTotalPayroll, canCancelPayroll } from '../helpers'\nimport type { MenuItem } from '@/components/Common/UI/Menu/MenuTypes'\nimport { DataView, Flex, DateRangeFilter } from '@/components/Common'\nimport { useComponentContext } from '@/contexts/ComponentAdapter/useComponentContext'\nimport { HamburgerMenu } from '@/components/Common/HamburgerMenu'\nimport { formatNumberAsCurrency } from '@/helpers/formattedStrings'\nimport { useI18n } from '@/i18n'\nimport { useDateFormatter } from '@/hooks/useDateFormatter'\nimport type { PaginationControlProps } from '@/components/Common/PaginationControl/PaginationControlTypes'\nimport type { UseDateRangeFilterResult } from '@/hooks/useDateRangeFilter/useDateRangeFilter'\nimport TrashcanIcon from '@/assets/icons/trashcan.svg?react'\nimport FileIcon from '@/assets/icons/icon-file-outline.svg?react'\nimport ReceiptIcon from '@/assets/icons/icon-receipt-outline.svg?react'\nimport { EmptyData } from '@/components/Common/'\n\ninterface PayrollHistoryPresentationProps {\n payrollHistory: Payroll[]\n wireInRequests: WireInRequest[]\n pagination: PaginationControlProps\n onViewSummary: (payrollId: string, startDate?: string, endDate?: string) => void\n onViewReceipt: (payrollId: string, startDate?: string, endDate?: string) => void\n onCancelPayroll: (item: Payroll) => void\n cancelDialogItem: Payroll | null\n onCancelDialogOpen: (item: Payroll) => void\n onCancelDialogClose: () => void\n isLoading?: boolean\n dateRangeFilter: UseDateRangeFilterResult\n}\n\n/** @internal */\nexport const PayrollHistoryPresentation = ({\n payrollHistory,\n wireInRequests,\n pagination,\n onViewSummary,\n onViewReceipt,\n onCancelPayroll,\n cancelDialogItem,\n onCancelDialogOpen,\n onCancelDialogClose,\n isLoading = false,\n dateRangeFilter,\n}: PayrollHistoryPresentationProps) => {\n const { Heading, Text, Dialog } = useComponentContext()\n useI18n('Payroll.PayrollHistory')\n const { t } = useTranslation('Payroll.PayrollHistory')\n const dateFormatter = useDateFormatter()\n\n const formatDeadlineForDialog = (item: Payroll): string => {\n const deadline = item.payrollDeadline\n if (!deadline) return ''\n\n const deadlineDate = new Date(deadline)\n const timeZone = 'America/New_York'\n\n const formatter = new Intl.DateTimeFormat('en-US', {\n weekday: 'short',\n month: 'short',\n day: 'numeric',\n timeZone,\n })\n\n const timeFormatter = new Intl.DateTimeFormat('en-US', {\n hour: 'numeric',\n minute: '2-digit',\n timeZoneName: 'short',\n timeZone,\n })\n\n const dateStr = formatter.format(deadlineDate)\n const timeStr = timeFormatter.format(deadlineDate)\n\n return `${timeStr} on ${dateStr}`\n }\n\n const handleCancelClick = (item: Payroll) => {\n onCancelDialogOpen(item)\n }\n\n const handleConfirmCancel = () => {\n if (cancelDialogItem) {\n onCancelPayroll(cancelDialogItem)\n }\n }\n\n const getMenuItems = (item: Payroll): MenuItem[] => {\n const payrollId = item.payrollUuid || item.uuid!\n const items: MenuItem[] = [\n {\n label: t('menu.viewSummary'),\n icon: <FileIcon aria-hidden />,\n onClick: () => {\n onViewSummary(payrollId, item.payPeriod?.startDate, item.payPeriod?.endDate)\n },\n },\n {\n label: t('menu.viewReceipt'),\n icon: <ReceiptIcon aria-hidden />,\n onClick: () => {\n onViewReceipt(payrollId, item.payPeriod?.startDate, item.payPeriod?.endDate)\n },\n },\n ]\n\n if (canCancelPayroll(item)) {\n items.push({\n label: t('menu.cancelPayroll'),\n icon: <TrashcanIcon aria-hidden />,\n onClick: () => {\n handleCancelClick(item)\n },\n 'data-destructive': 'true',\n })\n }\n\n return items\n }\n\n return (\n <Flex flexDirection=\"column\" gap={16}>\n <Flex justifyContent=\"space-between\" alignItems=\"center\">\n <Heading as=\"h2\">{t('title')}</Heading>\n <DateRangeFilter\n startDate={dateRangeFilter.startDate}\n endDate={dateRangeFilter.endDate}\n onStartDateChange={dateRangeFilter.handleStartDateChange}\n onEndDateChange={dateRangeFilter.handleEndDateChange}\n onClear={dateRangeFilter.handleClearFilter}\n startDateLabel={t('dateFilter.startDate')}\n endDateLabel={t('dateFilter.endDate')}\n applyLabel={t('dateFilter.apply')}\n cancelLabel={t('dateFilter.cancel')}\n resetLabel={t('dateFilter.reset')}\n selectDatesLabel={t('dateFilter.selectDates')}\n triggerLabel={t('dateFilter.trigger')}\n maxEndDate={dateRangeFilter.getMaxEndDate()}\n minStartDate={dateRangeFilter.getMinStartDate()}\n />\n </Flex>\n\n <DataView\n label={t('dataView.label')}\n pagination={pagination}\n isFetching={pagination.isFetching}\n emptyState={() =>\n dateRangeFilter.isModified ? (\n <EmptyData\n title={t('emptyState.filtered.title')}\n description={t('emptyState.filtered.description')}\n />\n ) : (\n <EmptyData\n title={t('emptyState.default.title')}\n description={t('emptyState.default.description')}\n />\n )\n }\n columns={[\n {\n title: t('columns.payPeriod'),\n render: (item: Payroll) =>\n dateFormatter.formatPayPeriodRange(\n item.payPeriod?.startDate,\n item.payPeriod?.endDate,\n ),\n },\n {\n title: t('columns.type'),\n render: (item: Payroll) => getPayrollTypeLabel(item),\n },\n {\n title: t('columns.payDate'),\n render: (item: Payroll) => dateFormatter.formatShortWithYear(item.checkDate),\n },\n {\n title: t('columns.status'),\n render: (item: Payroll) => {\n const wireInRequest = wireInRequests.find(\n wire => wire.paymentUuid === item.payrollUuid,\n )\n return <PayrollStatusBadges payroll={item} wireInRequest={wireInRequest} />\n },\n },\n {\n title: t('columns.totalPayroll'),\n render: (item: Payroll) => formatNumberAsCurrency(calculateTotalPayroll(item)),\n },\n ]}\n data={payrollHistory}\n itemMenu={(item: Payroll) => <HamburgerMenu items={getMenuItems(item)} />}\n />\n\n <Dialog\n isOpen={!!cancelDialogItem}\n onClose={onCancelDialogClose}\n onPrimaryActionClick={handleConfirmCancel}\n isDestructive\n isPrimaryActionLoading={isLoading}\n primaryActionLabel={t('cancelDialog.primaryAction')}\n closeActionLabel={t('cancelDialog.secondaryAction')}\n title={\n cancelDialogItem\n ? t('cancelDialog.title', {\n payPeriod: dateFormatter.formatPayPeriodRange(\n cancelDialogItem.payPeriod?.startDate,\n cancelDialogItem.payPeriod?.endDate,\n ),\n })\n : ''\n }\n >\n {cancelDialogItem && (\n <Flex flexDirection=\"column\" gap={16}>\n <Text>{t('cancelDialog.body')}</Text>\n {cancelDialogItem.payrollDeadline && (\n <Text>\n {t('cancelDialog.deadline', {\n deadline: formatDeadlineForDialog(cancelDialogItem),\n })}\n </Text>\n )}\n </Flex>\n )}\n </Dialog>\n </Flex>\n )\n}\n"],"names":["PayrollHistoryPresentation","payrollHistory","wireInRequests","pagination","onViewSummary","onViewReceipt","onCancelPayroll","cancelDialogItem","onCancelDialogOpen","onCancelDialogClose","isLoading","dateRangeFilter","Heading","Text","Dialog","useComponentContext","useI18n","t","useTranslation","dateFormatter","useDateFormatter","formatDeadlineForDialog","item","deadline","deadlineDate","timeZone","formatter","timeFormatter","dateStr","handleCancelClick","handleConfirmCancel","getMenuItems","payrollId","items","jsx","FileIcon","ReceiptIcon","canCancelPayroll","TrashcanIcon","jsxs","Flex","DateRangeFilter","DataView","EmptyData","getPayrollTypeLabel","wireInRequest","wire","PayrollStatusBadges","formatNumberAsCurrency","calculateTotalPayroll","HamburgerMenu"],"mappings":"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"}
|
|
@@ -1,123 +1,134 @@
|
|
|
1
|
-
import { jsx as
|
|
2
|
-
import { useState as r, useCallback as
|
|
3
|
-
import { useQueryClient as
|
|
4
|
-
import {
|
|
5
|
-
import { usePaySchedulesGetAllSuspense as
|
|
6
|
-
import { usePayrollsSkipMutation as
|
|
7
|
-
import { usePayrollsDeleteMutation as
|
|
8
|
-
import { usePayrollsGetBlockersSuspense as
|
|
9
|
-
import { useWireInRequestsListSuspense as
|
|
1
|
+
import { jsx as l } from "react/jsx-runtime";
|
|
2
|
+
import { useState as r, useCallback as j } from "react";
|
|
3
|
+
import { useQueryClient as V, keepPreviousData as v } from "@tanstack/react-query";
|
|
4
|
+
import { usePayrollsList as z, invalidateAllPayrollsList as J } from "@gusto/embedded-api/react-query/payrollsList";
|
|
5
|
+
import { usePaySchedulesGetAllSuspense as X } from "@gusto/embedded-api/react-query/paySchedulesGetAll";
|
|
6
|
+
import { usePayrollsSkipMutation as Z } from "@gusto/embedded-api/react-query/payrollsSkip";
|
|
7
|
+
import { usePayrollsDeleteMutation as $ } from "@gusto/embedded-api/react-query/payrollsDelete";
|
|
8
|
+
import { usePayrollsGetBlockersSuspense as ee } from "@gusto/embedded-api/react-query/payrollsGetBlockers";
|
|
9
|
+
import { useWireInRequestsListSuspense as te } from "@gusto/embedded-api/react-query/wireInRequestsList";
|
|
10
10
|
import { PayrollType as g } from "@gusto/embedded-api/models/operations/postcompaniespayrollskipcompanyuuid";
|
|
11
|
-
import { QueryParamPayrollTypes as
|
|
12
|
-
import { useUnprocessedTransitionPayPeriods as
|
|
13
|
-
import { PayrollListPresentation as
|
|
14
|
-
import { BaseComponent as
|
|
15
|
-
import { useBase as
|
|
16
|
-
import { componentEvents as
|
|
17
|
-
import { usePagination as
|
|
18
|
-
import { useDateRangeFilter as
|
|
19
|
-
function
|
|
20
|
-
return /* @__PURE__ */
|
|
11
|
+
import { QueryParamPayrollTypes as c, ProcessingStatuses as se } from "@gusto/embedded-api/models/operations/getv1companiescompanyidpayrolls";
|
|
12
|
+
import { useUnprocessedTransitionPayPeriods as ae } from "../useUnprocessedTransitionPayPeriods.js";
|
|
13
|
+
import { PayrollListPresentation as oe } from "./PayrollListPresentation.js";
|
|
14
|
+
import { BaseComponent as re, BaseLayout as le } from "../../Base/Base.js";
|
|
15
|
+
import { useBase as ne } from "../../Base/useBase.js";
|
|
16
|
+
import { componentEvents as o } from "../../../shared/constants.js";
|
|
17
|
+
import { usePagination as ie } from "../../../hooks/usePagination/usePagination.js";
|
|
18
|
+
import { useDateRangeFilter as ce } from "../../../hooks/useDateRangeFilter/useDateRangeFilter.js";
|
|
19
|
+
function Be(t) {
|
|
20
|
+
return /* @__PURE__ */ l(re, { ...t, children: /* @__PURE__ */ l(me, { ...t }) });
|
|
21
21
|
}
|
|
22
|
-
const
|
|
22
|
+
const ue = 3, pe = () => /* @__PURE__ */ new Date(), ye = () => {
|
|
23
23
|
const t = /* @__PURE__ */ new Date();
|
|
24
|
-
return t.setMonth(t.getMonth() +
|
|
25
|
-
},
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
24
|
+
return t.setMonth(t.getMonth() + ue), t;
|
|
25
|
+
}, me = ({
|
|
26
|
+
companyId: t,
|
|
27
|
+
onEvent: a,
|
|
28
|
+
withOffcyclePayroll: L = !0,
|
|
29
|
+
LoaderComponent: h
|
|
30
|
+
}) => {
|
|
31
|
+
const { baseSubmitHandler: u } = ne(), R = V(), [k, p] = r(!1), [A, y] = r(null), { currentPage: w, itemsPerPage: O, getPaginationProps: E, resetPage: m } = ie(), [C, P] = r(!1), [T, d] = r(null), f = ce({
|
|
32
|
+
initialStartDate: pe(),
|
|
33
|
+
initialEndDate: ye(),
|
|
34
|
+
onFilterChange: j(() => {
|
|
35
|
+
m();
|
|
36
|
+
}, [m])
|
|
37
|
+
}), D = f.getApiDateParams(), { data: n, isFetching: _ } = z(
|
|
38
|
+
{
|
|
39
|
+
companyId: t,
|
|
40
|
+
processingStatuses: [se.Unprocessed],
|
|
41
|
+
startDate: D.startDate,
|
|
42
|
+
endDate: D.endDate,
|
|
43
|
+
payrollTypes: [
|
|
44
|
+
c.Regular,
|
|
45
|
+
c.OffCycle,
|
|
46
|
+
c.External
|
|
47
|
+
],
|
|
48
|
+
includeOffCycle: !0,
|
|
49
|
+
page: w,
|
|
50
|
+
per: O
|
|
51
|
+
},
|
|
52
|
+
{ placeholderData: v, throwOnError: !0 }
|
|
53
|
+
), S = n?.payrollList ?? [], { data: F } = X({
|
|
46
54
|
companyId: t
|
|
47
|
-
}), q =
|
|
55
|
+
}), q = F.payScheduleShowResponse, { data: B } = ee({
|
|
48
56
|
companyUuid: t
|
|
49
|
-
}), U = (
|
|
57
|
+
}), U = (B.payrollBlockers ?? []).map(
|
|
50
58
|
(e) => ({
|
|
51
59
|
key: e.key ?? "unknown",
|
|
52
60
|
message: e.message
|
|
53
61
|
})
|
|
54
|
-
), { data:
|
|
62
|
+
), { data: I } = te({
|
|
55
63
|
companyUuid: t
|
|
56
|
-
}),
|
|
57
|
-
|
|
58
|
-
|
|
64
|
+
}), M = I.wireInRequestList ?? [], { hasUnprocessedTransitions: Y } = ae(t), { mutateAsync: b } = Z(), { mutateAsync: x } = $(), H = ({ payrollUuid: e, payPeriod: s }) => {
|
|
65
|
+
a(o.RUN_PAYROLL_SELECTED, { payrollUuid: e, payPeriod: s });
|
|
66
|
+
}, N = () => {
|
|
67
|
+
a(o.RUN_OFF_CYCLE_PAYROLL);
|
|
68
|
+
}, G = ({
|
|
69
|
+
payrollUuid: e,
|
|
70
|
+
payPeriod: s
|
|
71
|
+
}) => {
|
|
72
|
+
a(o.REVIEW_PAYROLL, { payrollUuid: e, payPeriod: s });
|
|
73
|
+
}, K = async ({ payrollUuid: e }) => {
|
|
74
|
+
const s = S.find((i) => i.payrollUuid === e);
|
|
75
|
+
if (s?.payPeriod) {
|
|
76
|
+
y(e);
|
|
77
|
+
const i = s.offCycleReason === "Transition from old pay schedule" ? g.TransitionFromOldPaySchedule : g.Regular;
|
|
78
|
+
await u({}, async () => {
|
|
79
|
+
await b({
|
|
80
|
+
request: {
|
|
81
|
+
companyUuid: t,
|
|
82
|
+
requestBody: {
|
|
83
|
+
payrollType: i,
|
|
84
|
+
startDate: s.payPeriod?.startDate,
|
|
85
|
+
endDate: s.payPeriod?.endDate,
|
|
86
|
+
payScheduleUuid: s.payPeriod?.payScheduleUuid ?? void 0
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}), p(!0), a(o.PAYROLL_SKIPPED, { payrollId: e });
|
|
90
|
+
}), y(null);
|
|
91
|
+
}
|
|
92
|
+
}, Q = async ({ payrollUuid: e }) => {
|
|
93
|
+
e && (d(e), await u({}, async () => {
|
|
94
|
+
await x({
|
|
95
|
+
request: { companyId: t, payrollId: e }
|
|
96
|
+
}), await J(R), P(!0), a(o.PAYROLL_DELETED, { payrollId: e });
|
|
97
|
+
}), d(null));
|
|
98
|
+
};
|
|
99
|
+
if (!n)
|
|
100
|
+
return /* @__PURE__ */ l(le, { isLoading: !0, LoaderComponent: h });
|
|
101
|
+
const W = E(n.httpMeta.response.headers, _);
|
|
102
|
+
return /* @__PURE__ */ l(
|
|
103
|
+
oe,
|
|
59
104
|
{
|
|
60
|
-
payrolls:
|
|
61
|
-
pagination:
|
|
105
|
+
payrolls: S,
|
|
106
|
+
pagination: W,
|
|
62
107
|
paySchedules: q,
|
|
63
|
-
onRunPayroll:
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
}) => {
|
|
70
|
-
o(a.REVIEW_PAYROLL, { payrollUuid: e, payPeriod: s });
|
|
71
|
-
},
|
|
72
|
-
onSkipPayroll: async ({ payrollUuid: e }) => {
|
|
73
|
-
const s = D.find((l) => l.payrollUuid === e);
|
|
74
|
-
if (s?.payPeriod) {
|
|
75
|
-
p(e);
|
|
76
|
-
const l = s.offCycleReason === "Transition from old pay schedule" ? g.TransitionFromOldPaySchedule : g.Regular;
|
|
77
|
-
await c({}, async () => {
|
|
78
|
-
await b({
|
|
79
|
-
request: {
|
|
80
|
-
companyUuid: t,
|
|
81
|
-
requestBody: {
|
|
82
|
-
payrollType: l,
|
|
83
|
-
startDate: s.payPeriod?.startDate,
|
|
84
|
-
endDate: s.payPeriod?.endDate,
|
|
85
|
-
payScheduleUuid: s.payPeriod?.payScheduleUuid ?? void 0
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
}), u(!0), o(a.PAYROLL_SKIPPED, { payrollId: e });
|
|
89
|
-
}), p(null);
|
|
90
|
-
}
|
|
91
|
-
},
|
|
92
|
-
onDeletePayroll: async ({ payrollUuid: e }) => {
|
|
93
|
-
e && (m(e), await c({}, async () => {
|
|
94
|
-
await Y({
|
|
95
|
-
request: { companyId: t, payrollId: e }
|
|
96
|
-
}), await G(R), P(!0), o(a.PAYROLL_DELETED, { payrollId: e });
|
|
97
|
-
}), m(null));
|
|
98
|
-
},
|
|
99
|
-
onRunOffCyclePayroll: () => {
|
|
100
|
-
o(a.RUN_OFF_CYCLE_PAYROLL);
|
|
101
|
-
},
|
|
102
|
-
showSkipSuccessAlert: h,
|
|
108
|
+
onRunPayroll: H,
|
|
109
|
+
onSubmitPayroll: G,
|
|
110
|
+
onSkipPayroll: K,
|
|
111
|
+
onDeletePayroll: Q,
|
|
112
|
+
onRunOffCyclePayroll: N,
|
|
113
|
+
showSkipSuccessAlert: k,
|
|
103
114
|
onDismissSkipSuccessAlert: () => {
|
|
104
|
-
|
|
115
|
+
p(!1);
|
|
105
116
|
},
|
|
106
117
|
showDeleteSuccessAlert: C,
|
|
107
118
|
onDismissDeleteSuccessAlert: () => {
|
|
108
119
|
P(!1);
|
|
109
120
|
},
|
|
110
|
-
skippingPayrollId:
|
|
111
|
-
deletingPayrollId:
|
|
121
|
+
skippingPayrollId: A,
|
|
122
|
+
deletingPayrollId: T,
|
|
112
123
|
blockers: U,
|
|
113
|
-
wireInRequests:
|
|
114
|
-
dateRangeFilter:
|
|
115
|
-
hasUnprocessedTransitions:
|
|
124
|
+
wireInRequests: M,
|
|
125
|
+
dateRangeFilter: f,
|
|
126
|
+
hasUnprocessedTransitions: Y,
|
|
116
127
|
withOffcyclePayroll: L
|
|
117
128
|
}
|
|
118
129
|
);
|
|
119
130
|
};
|
|
120
131
|
export {
|
|
121
|
-
|
|
132
|
+
Be as PayrollList
|
|
122
133
|
};
|
|
123
134
|
//# sourceMappingURL=PayrollList.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PayrollList.js","sources":["../../../../src/components/Payroll/PayrollList/PayrollList.tsx"],"sourcesContent":["import { useState, useCallback } from 'react'\nimport { useQueryClient } from '@tanstack/react-query'\nimport {\n usePayrollsListSuspense,\n invalidateAllPayrollsList,\n} from '@gusto/embedded-api/react-query/payrollsList'\nimport { usePaySchedulesGetAllSuspense } from '@gusto/embedded-api/react-query/paySchedulesGetAll'\nimport { usePayrollsSkipMutation } from '@gusto/embedded-api/react-query/payrollsSkip'\nimport { usePayrollsDeleteMutation } from '@gusto/embedded-api/react-query/payrollsDelete'\nimport { usePayrollsGetBlockersSuspense } from '@gusto/embedded-api/react-query/payrollsGetBlockers'\nimport { useWireInRequestsListSuspense } from '@gusto/embedded-api/react-query/wireInRequestsList'\nimport { PayrollType } from '@gusto/embedded-api/models/operations/postcompaniespayrollskipcompanyuuid'\nimport {\n ProcessingStatuses,\n QueryParamPayrollTypes,\n} from '@gusto/embedded-api/models/operations/getv1companiescompanyidpayrolls'\nimport type { Payroll } from '@gusto/embedded-api/models/components/payrollshow'\nimport type { ApiPayrollBlocker } from '../PayrollBlocker/payrollHelpers'\nimport { useUnprocessedTransitionPayPeriods } from '../useUnprocessedTransitionPayPeriods'\nimport { PayrollListPresentation } from './PayrollListPresentation'\nimport type { BaseComponentInterface } from '@/components/Base'\nimport { BaseComponent, useBase } from '@/components/Base'\nimport { componentEvents } from '@/shared/constants'\nimport { usePagination } from '@/hooks/usePagination/usePagination'\nimport { useDateRangeFilter } from '@/hooks/useDateRangeFilter/useDateRangeFilter'\n\n/**\n * Props for {@link PayrollList}.\n *\n * @public\n */\nexport interface PayrollListBlockProps extends BaseComponentInterface<never> {\n /** The associated company identifier. */\n companyId: string\n /** Whether to show the off-cycle payroll call-to-action. Defaults to `true`. */\n withOffcyclePayroll?: boolean\n}\n\n/**\n * Lists upcoming payrolls and lets users start running them.\n *\n * Displays available payrolls with pay period dates, payroll type, check date,\n * deadline, and status. Each row offers actions to run, submit a calculated\n * payroll, skip, or delete (for cancellable off-cycle payrolls). A separate\n * call-to-action starts an off-cycle payroll.\n *\n * @remarks\n * When the company has unprocessed transition pay periods within the next\n * 90 days, the Run Payroll action on Regular rows is disabled to prevent a\n * regular payroll from being run before the transition is resolved. Off-cycle\n * rows and the Run off-cycle action remain enabled, since off-cycle is the\n * path used to run a transition payroll. {@link PayrollLanding} pairs this\n * list with an alert that lets users run or skip the pending transition; when\n * using `PayrollList` directly, render an equivalent resolution surface\n * alongside it.\n *\n * @events\n * | Event | Description | Data |\n * | ----- | ----------- | ---- |\n * | `runPayroll/selected` | User selected a payroll to run | `{ payrollUuid, payPeriod }` |\n * | `payroll/review` | User selected a calculated payroll to review and submit | `{ payrollUuid, payPeriod }` |\n * | `payroll/skipped` | A payroll was successfully skipped | `{ payrollId }` |\n * | `payroll/deleted` | A cancellable off-cycle payroll was successfully deleted | `{ payrollId }` |\n * | `runPayroll/offCycle/start` | User clicked the Run off-cycle call-to-action | — |\n *\n * @param props - See {@link PayrollListBlockProps}.\n * @returns The rendered payroll list.\n * @public\n */\nexport function PayrollList(props: PayrollListBlockProps) {\n return (\n <BaseComponent {...props}>\n <Root {...props} />\n </BaseComponent>\n )\n}\n\nconst FUTURE_LOOKAHEAD_MONTHS = 3\n\nconst getDefaultStartDate = (): Date => new Date()\n\nconst getDefaultEndDate = (): Date => {\n const date = new Date()\n date.setMonth(date.getMonth() + FUTURE_LOOKAHEAD_MONTHS)\n return date\n}\n\nconst Root = ({ companyId, onEvent, withOffcyclePayroll = true }: PayrollListBlockProps) => {\n const { baseSubmitHandler } = useBase()\n const queryClient = useQueryClient()\n const [showSkipSuccessAlert, setShowSkipSuccessAlert] = useState(false)\n const [skippingPayrollId, setSkippingPayrollId] = useState<string | null>(null)\n const { currentPage, itemsPerPage, getPaginationProps, resetPage } = usePagination()\n const [showDeleteSuccessAlert, setShowDeleteSuccessAlert] = useState(false)\n const [deletingPayrollId, setDeletingPayrollId] = useState<string | null>(null)\n\n const dateRangeFilter = useDateRangeFilter({\n initialStartDate: getDefaultStartDate(),\n initialEndDate: getDefaultEndDate(),\n onFilterChange: useCallback(() => {\n resetPage()\n }, [resetPage]),\n })\n const dateFilterParams = dateRangeFilter.getApiDateParams()\n\n const { data: payrollsData } = usePayrollsListSuspense({\n companyId,\n processingStatuses: [ProcessingStatuses.Unprocessed],\n startDate: dateFilterParams.startDate,\n endDate: dateFilterParams.endDate,\n payrollTypes: [\n QueryParamPayrollTypes.Regular,\n QueryParamPayrollTypes.OffCycle,\n QueryParamPayrollTypes.External,\n ],\n includeOffCycle: true,\n page: currentPage,\n per: itemsPerPage,\n })\n const payrollList = payrollsData.payrollList!\n const paginationProps = getPaginationProps(payrollsData.httpMeta.response.headers)\n const { data: paySchedulesData } = usePaySchedulesGetAllSuspense({\n companyId,\n })\n const paySchedulesList = paySchedulesData.payScheduleShowResponse!\n\n const { data: blockersData } = usePayrollsGetBlockersSuspense({\n companyUuid: companyId,\n })\n\n const payrollBlockerList = blockersData.payrollBlockers ?? []\n\n const blockers: ApiPayrollBlocker[] = payrollBlockerList.map(\n (blocker: { key?: string; message?: string }) => ({\n key: blocker.key ?? 'unknown',\n message: blocker.message,\n }),\n )\n\n const { data: wireInRequestsData } = useWireInRequestsListSuspense({\n companyUuid: companyId,\n })\n\n const wireInRequests = wireInRequestsData.wireInRequestList ?? []\n\n const { hasUnprocessedTransitions } = useUnprocessedTransitionPayPeriods(companyId)\n\n const { mutateAsync: skipPayroll } = usePayrollsSkipMutation()\n const { mutateAsync: deletePayrollMutation } = usePayrollsDeleteMutation()\n\n const onRunPayroll = ({ payrollUuid, payPeriod }: Pick<Payroll, 'payrollUuid' | 'payPeriod'>) => {\n onEvent(componentEvents.RUN_PAYROLL_SELECTED, { payrollUuid, payPeriod })\n }\n const onRunOffCyclePayroll = () => {\n onEvent(componentEvents.RUN_OFF_CYCLE_PAYROLL)\n }\n const onSubmitPayroll = ({\n payrollUuid,\n payPeriod,\n }: Pick<Payroll, 'payrollUuid' | 'payPeriod'>) => {\n onEvent(componentEvents.REVIEW_PAYROLL, { payrollUuid, payPeriod })\n }\n const onSkipPayroll = async ({ payrollUuid }: Pick<Payroll, 'payrollUuid'>) => {\n const payroll = payrollList.find(payroll => payroll.payrollUuid === payrollUuid)\n\n if (payroll?.payPeriod) {\n setSkippingPayrollId(payrollUuid!)\n const payrollType =\n payroll.offCycleReason === 'Transition from old pay schedule'\n ? PayrollType.TransitionFromOldPaySchedule\n : PayrollType.Regular\n\n await baseSubmitHandler({}, async () => {\n await skipPayroll({\n request: {\n companyUuid: companyId,\n requestBody: {\n payrollType,\n startDate: payroll.payPeriod?.startDate,\n endDate: payroll.payPeriod?.endDate,\n payScheduleUuid: payroll.payPeriod?.payScheduleUuid ?? undefined,\n },\n },\n })\n\n setShowSkipSuccessAlert(true)\n onEvent(componentEvents.PAYROLL_SKIPPED, { payrollId: payrollUuid })\n })\n setSkippingPayrollId(null)\n }\n }\n\n const onDeletePayroll = async ({ payrollUuid }: Pick<Payroll, 'payrollUuid'>) => {\n if (payrollUuid) {\n setDeletingPayrollId(payrollUuid)\n await baseSubmitHandler({}, async () => {\n await deletePayrollMutation({\n request: { companyId, payrollId: payrollUuid },\n })\n await invalidateAllPayrollsList(queryClient)\n setShowDeleteSuccessAlert(true)\n onEvent(componentEvents.PAYROLL_DELETED, { payrollId: payrollUuid })\n })\n setDeletingPayrollId(null)\n }\n }\n\n return (\n <PayrollListPresentation\n payrolls={payrollList}\n pagination={paginationProps}\n paySchedules={paySchedulesList}\n onRunPayroll={onRunPayroll}\n onSubmitPayroll={onSubmitPayroll}\n onSkipPayroll={onSkipPayroll}\n onDeletePayroll={onDeletePayroll}\n onRunOffCyclePayroll={onRunOffCyclePayroll}\n showSkipSuccessAlert={showSkipSuccessAlert}\n onDismissSkipSuccessAlert={() => {\n setShowSkipSuccessAlert(false)\n }}\n showDeleteSuccessAlert={showDeleteSuccessAlert}\n onDismissDeleteSuccessAlert={() => {\n setShowDeleteSuccessAlert(false)\n }}\n skippingPayrollId={skippingPayrollId}\n deletingPayrollId={deletingPayrollId}\n blockers={blockers}\n wireInRequests={wireInRequests}\n dateRangeFilter={dateRangeFilter}\n hasUnprocessedTransitions={hasUnprocessedTransitions}\n withOffcyclePayroll={withOffcyclePayroll}\n />\n )\n}\n"],"names":["PayrollList","props","jsx","BaseComponent","Root","FUTURE_LOOKAHEAD_MONTHS","getDefaultStartDate","getDefaultEndDate","date","companyId","onEvent","withOffcyclePayroll","baseSubmitHandler","useBase","queryClient","useQueryClient","showSkipSuccessAlert","setShowSkipSuccessAlert","useState","skippingPayrollId","setSkippingPayrollId","currentPage","itemsPerPage","getPaginationProps","resetPage","usePagination","showDeleteSuccessAlert","setShowDeleteSuccessAlert","deletingPayrollId","setDeletingPayrollId","dateRangeFilter","useDateRangeFilter","useCallback","dateFilterParams","payrollsData","usePayrollsListSuspense","ProcessingStatuses","QueryParamPayrollTypes","payrollList","paginationProps","paySchedulesData","usePaySchedulesGetAllSuspense","paySchedulesList","blockersData","usePayrollsGetBlockersSuspense","blockers","blocker","wireInRequestsData","useWireInRequestsListSuspense","wireInRequests","hasUnprocessedTransitions","useUnprocessedTransitionPayPeriods","skipPayroll","usePayrollsSkipMutation","deletePayrollMutation","usePayrollsDeleteMutation","PayrollListPresentation","payrollUuid","payPeriod","componentEvents","payroll","payrollType","PayrollType","invalidateAllPayrollsList"],"mappings":";;;;;;;;;;;;;;;;;;AAqEO,SAASA,GAAYC,GAA8B;AACxD,SACE,gBAAAC,EAACC,KAAe,GAAGF,GACjB,4BAACG,IAAA,EAAM,GAAGH,GAAO,EAAA,CACnB;AAEJ;AAEA,MAAMI,KAA0B,GAE1BC,KAAsB,MAAY,oBAAI,KAAA,GAEtCC,KAAoB,MAAY;AACpC,QAAMC,wBAAW,KAAA;AACjB,SAAAA,EAAK,SAASA,EAAK,SAAA,IAAaH,EAAuB,GAChDG;AACT,GAEMJ,KAAO,CAAC,EAAE,WAAAK,GAAW,SAAAC,GAAS,qBAAAC,IAAsB,SAAkC;AAC1F,QAAM,EAAE,mBAAAC,EAAA,IAAsBC,EAAA,GACxBC,IAAcC,EAAA,GACd,CAACC,GAAsBC,CAAuB,IAAIC,EAAS,EAAK,GAChE,CAACC,GAAmBC,CAAoB,IAAIF,EAAwB,IAAI,GACxE,EAAE,aAAAG,GAAa,cAAAC,GAAc,oBAAAC,GAAoB,WAAAC,EAAA,IAAcC,EAAA,GAC/D,CAACC,GAAwBC,CAAyB,IAAIT,EAAS,EAAK,GACpE,CAACU,GAAmBC,CAAoB,IAAIX,EAAwB,IAAI,GAExEY,IAAkBC,GAAmB;AAAA,IACzC,kBAAkBzB,GAAA;AAAA,IAClB,gBAAgBC,GAAA;AAAA,IAChB,gBAAgByB,EAAY,MAAM;AAChC,MAAAR,EAAA;AAAA,IACF,GAAG,CAACA,CAAS,CAAC;AAAA,EAAA,CACf,GACKS,IAAmBH,EAAgB,iBAAA,GAEnC,EAAE,MAAMI,EAAA,IAAiBC,EAAwB;AAAA,IACrD,WAAA1B;AAAA,IACA,oBAAoB,CAAC2B,EAAmB,WAAW;AAAA,IACnD,WAAWH,EAAiB;AAAA,IAC5B,SAASA,EAAiB;AAAA,IAC1B,cAAc;AAAA,MACZI,EAAuB;AAAA,MACvBA,EAAuB;AAAA,MACvBA,EAAuB;AAAA,IAAA;AAAA,IAEzB,iBAAiB;AAAA,IACjB,MAAMhB;AAAA,IACN,KAAKC;AAAA,EAAA,CACN,GACKgB,IAAcJ,EAAa,aAC3BK,IAAkBhB,EAAmBW,EAAa,SAAS,SAAS,OAAO,GAC3E,EAAE,MAAMM,EAAA,IAAqBC,EAA8B;AAAA,IAC/D,WAAAhC;AAAA,EAAA,CACD,GACKiC,IAAmBF,EAAiB,yBAEpC,EAAE,MAAMG,EAAA,IAAiBC,EAA+B;AAAA,IAC5D,aAAanC;AAAA,EAAA,CACd,GAIKoC,KAFqBF,EAAa,mBAAmB,CAAA,GAEF;AAAA,IACvD,CAACG,OAAiD;AAAA,MAChD,KAAKA,EAAQ,OAAO;AAAA,MACpB,SAASA,EAAQ;AAAA,IAAA;AAAA,EACnB,GAGI,EAAE,MAAMC,EAAA,IAAuBC,EAA8B;AAAA,IACjE,aAAavC;AAAA,EAAA,CACd,GAEKwC,IAAiBF,EAAmB,qBAAqB,CAAA,GAEzD,EAAE,2BAAAG,EAAA,IAA8BC,EAAmC1C,CAAS,GAE5E,EAAE,aAAa2C,EAAA,IAAgBC,EAAA,GAC/B,EAAE,aAAaC,EAAA,IAA0BC,EAAA;AA2D/C,SACE,gBAAArD;AAAA,IAACsD;AAAA,IAAA;AAAA,MACC,UAAUlB;AAAA,MACV,YAAYC;AAAA,MACZ,cAAcG;AAAA,MACd,cA9DiB,CAAC,EAAE,aAAAe,GAAa,WAAAC,QAA4D;AAC/F,QAAAhD,EAAQiD,EAAgB,sBAAsB,EAAE,aAAAF,GAAa,WAAAC,GAAW;AAAA,MAC1E;AAAA,MA6DI,iBAzDoB,CAAC;AAAA,QACvB,aAAAD;AAAA,QACA,WAAAC;AAAA,MAAA,MACgD;AAChD,QAAAhD,EAAQiD,EAAgB,gBAAgB,EAAE,aAAAF,GAAa,WAAAC,GAAW;AAAA,MACpE;AAAA,MAqDI,eApDkB,OAAO,EAAE,aAAAD,QAAgD;AAC7E,cAAMG,IAAUtB,EAAY,KAAK,CAAAsB,MAAWA,EAAQ,gBAAgBH,CAAW;AAE/E,YAAIG,GAAS,WAAW;AACtB,UAAAxC,EAAqBqC,CAAY;AACjC,gBAAMI,IACJD,EAAQ,mBAAmB,qCACvBE,EAAY,+BACZA,EAAY;AAElB,gBAAMlD,EAAkB,CAAA,GAAI,YAAY;AACtC,kBAAMwC,EAAY;AAAA,cAChB,SAAS;AAAA,gBACP,aAAa3C;AAAA,gBACb,aAAa;AAAA,kBACX,aAAAoD;AAAA,kBACA,WAAWD,EAAQ,WAAW;AAAA,kBAC9B,SAASA,EAAQ,WAAW;AAAA,kBAC5B,iBAAiBA,EAAQ,WAAW,mBAAmB;AAAA,gBAAA;AAAA,cACzD;AAAA,YACF,CACD,GAED3C,EAAwB,EAAI,GAC5BP,EAAQiD,EAAgB,iBAAiB,EAAE,WAAWF,GAAa;AAAA,UACrE,CAAC,GACDrC,EAAqB,IAAI;AAAA,QAC3B;AAAA,MACF;AAAA,MAyBI,iBAvBoB,OAAO,EAAE,aAAAqC,QAAgD;AAC/E,QAAIA,MACF5B,EAAqB4B,CAAW,GAChC,MAAM7C,EAAkB,CAAA,GAAI,YAAY;AACtC,gBAAM0C,EAAsB;AAAA,YAC1B,SAAS,EAAE,WAAA7C,GAAW,WAAWgD,EAAA;AAAA,UAAY,CAC9C,GACD,MAAMM,EAA0BjD,CAAW,GAC3Ca,EAA0B,EAAI,GAC9BjB,EAAQiD,EAAgB,iBAAiB,EAAE,WAAWF,GAAa;AAAA,QACrE,CAAC,GACD5B,EAAqB,IAAI;AAAA,MAE7B;AAAA,MAWI,sBA/DyB,MAAM;AACjC,QAAAnB,EAAQiD,EAAgB,qBAAqB;AAAA,MAC/C;AAAA,MA8DI,sBAAA3C;AAAA,MACA,2BAA2B,MAAM;AAC/B,QAAAC,EAAwB,EAAK;AAAA,MAC/B;AAAA,MACA,wBAAAS;AAAA,MACA,6BAA6B,MAAM;AACjC,QAAAC,EAA0B,EAAK;AAAA,MACjC;AAAA,MACA,mBAAAR;AAAA,MACA,mBAAAS;AAAA,MACA,UAAAiB;AAAA,MACA,gBAAAI;AAAA,MACA,iBAAAnB;AAAA,MACA,2BAAAoB;AAAA,MACA,qBAAAvC;AAAA,IAAA;AAAA,EAAA;AAGN;"}
|
|
1
|
+
{"version":3,"file":"PayrollList.js","sources":["../../../../src/components/Payroll/PayrollList/PayrollList.tsx"],"sourcesContent":["import { useState, useCallback } from 'react'\nimport { useQueryClient, keepPreviousData } from '@tanstack/react-query'\nimport {\n usePayrollsList,\n invalidateAllPayrollsList,\n} from '@gusto/embedded-api/react-query/payrollsList'\nimport { usePaySchedulesGetAllSuspense } from '@gusto/embedded-api/react-query/paySchedulesGetAll'\nimport { usePayrollsSkipMutation } from '@gusto/embedded-api/react-query/payrollsSkip'\nimport { usePayrollsDeleteMutation } from '@gusto/embedded-api/react-query/payrollsDelete'\nimport { usePayrollsGetBlockersSuspense } from '@gusto/embedded-api/react-query/payrollsGetBlockers'\nimport { useWireInRequestsListSuspense } from '@gusto/embedded-api/react-query/wireInRequestsList'\nimport { PayrollType } from '@gusto/embedded-api/models/operations/postcompaniespayrollskipcompanyuuid'\nimport {\n ProcessingStatuses,\n QueryParamPayrollTypes,\n} from '@gusto/embedded-api/models/operations/getv1companiescompanyidpayrolls'\nimport type { Payroll } from '@gusto/embedded-api/models/components/payrollshow'\nimport type { ApiPayrollBlocker } from '../PayrollBlocker/payrollHelpers'\nimport { useUnprocessedTransitionPayPeriods } from '../useUnprocessedTransitionPayPeriods'\nimport { PayrollListPresentation } from './PayrollListPresentation'\nimport type { BaseComponentInterface } from '@/components/Base'\nimport { BaseComponent, BaseLayout, useBase } from '@/components/Base'\nimport { componentEvents } from '@/shared/constants'\nimport { usePagination } from '@/hooks/usePagination/usePagination'\nimport { useDateRangeFilter } from '@/hooks/useDateRangeFilter/useDateRangeFilter'\n\n/**\n * Props for {@link PayrollList}.\n *\n * @public\n */\nexport interface PayrollListBlockProps extends BaseComponentInterface<never> {\n /** The associated company identifier. */\n companyId: string\n /** Whether to show the off-cycle payroll call-to-action. Defaults to `true`. */\n withOffcyclePayroll?: boolean\n}\n\n/**\n * Lists upcoming payrolls and lets users start running them.\n *\n * Displays available payrolls with pay period dates, payroll type, check date,\n * deadline, and status. Each row offers actions to run, submit a calculated\n * payroll, skip, or delete (for cancellable off-cycle payrolls). A separate\n * call-to-action starts an off-cycle payroll.\n *\n * @remarks\n * When the company has unprocessed transition pay periods within the next\n * 90 days, the Run Payroll action on Regular rows is disabled to prevent a\n * regular payroll from being run before the transition is resolved. Off-cycle\n * rows and the Run off-cycle action remain enabled, since off-cycle is the\n * path used to run a transition payroll. {@link PayrollLanding} pairs this\n * list with an alert that lets users run or skip the pending transition; when\n * using `PayrollList` directly, render an equivalent resolution surface\n * alongside it.\n *\n * @events\n * | Event | Description | Data |\n * | ----- | ----------- | ---- |\n * | `runPayroll/selected` | User selected a payroll to run | `{ payrollUuid, payPeriod }` |\n * | `payroll/review` | User selected a calculated payroll to review and submit | `{ payrollUuid, payPeriod }` |\n * | `payroll/skipped` | A payroll was successfully skipped | `{ payrollId }` |\n * | `payroll/deleted` | A cancellable off-cycle payroll was successfully deleted | `{ payrollId }` |\n * | `runPayroll/offCycle/start` | User clicked the Run off-cycle call-to-action | — |\n *\n * @param props - See {@link PayrollListBlockProps}.\n * @returns The rendered payroll list.\n * @public\n */\nexport function PayrollList(props: PayrollListBlockProps) {\n return (\n <BaseComponent {...props}>\n <Root {...props} />\n </BaseComponent>\n )\n}\n\nconst FUTURE_LOOKAHEAD_MONTHS = 3\n\nconst getDefaultStartDate = (): Date => new Date()\n\nconst getDefaultEndDate = (): Date => {\n const date = new Date()\n date.setMonth(date.getMonth() + FUTURE_LOOKAHEAD_MONTHS)\n return date\n}\n\nconst Root = ({\n companyId,\n onEvent,\n withOffcyclePayroll = true,\n LoaderComponent,\n}: PayrollListBlockProps) => {\n const { baseSubmitHandler } = useBase()\n const queryClient = useQueryClient()\n const [showSkipSuccessAlert, setShowSkipSuccessAlert] = useState(false)\n const [skippingPayrollId, setSkippingPayrollId] = useState<string | null>(null)\n const { currentPage, itemsPerPage, getPaginationProps, resetPage } = usePagination()\n const [showDeleteSuccessAlert, setShowDeleteSuccessAlert] = useState(false)\n const [deletingPayrollId, setDeletingPayrollId] = useState<string | null>(null)\n\n const dateRangeFilter = useDateRangeFilter({\n initialStartDate: getDefaultStartDate(),\n initialEndDate: getDefaultEndDate(),\n onFilterChange: useCallback(() => {\n resetPage()\n }, [resetPage]),\n })\n const dateFilterParams = dateRangeFilter.getApiDateParams()\n\n const { data: payrollsData, isFetching } = usePayrollsList(\n {\n companyId,\n processingStatuses: [ProcessingStatuses.Unprocessed],\n startDate: dateFilterParams.startDate,\n endDate: dateFilterParams.endDate,\n payrollTypes: [\n QueryParamPayrollTypes.Regular,\n QueryParamPayrollTypes.OffCycle,\n QueryParamPayrollTypes.External,\n ],\n includeOffCycle: true,\n page: currentPage,\n per: itemsPerPage,\n },\n { placeholderData: keepPreviousData, throwOnError: true },\n )\n const payrollList = payrollsData?.payrollList ?? []\n const { data: paySchedulesData } = usePaySchedulesGetAllSuspense({\n companyId,\n })\n const paySchedulesList = paySchedulesData.payScheduleShowResponse!\n\n const { data: blockersData } = usePayrollsGetBlockersSuspense({\n companyUuid: companyId,\n })\n\n const payrollBlockerList = blockersData.payrollBlockers ?? []\n\n const blockers: ApiPayrollBlocker[] = payrollBlockerList.map(\n (blocker: { key?: string; message?: string }) => ({\n key: blocker.key ?? 'unknown',\n message: blocker.message,\n }),\n )\n\n const { data: wireInRequestsData } = useWireInRequestsListSuspense({\n companyUuid: companyId,\n })\n\n const wireInRequests = wireInRequestsData.wireInRequestList ?? []\n\n const { hasUnprocessedTransitions } = useUnprocessedTransitionPayPeriods(companyId)\n\n const { mutateAsync: skipPayroll } = usePayrollsSkipMutation()\n const { mutateAsync: deletePayrollMutation } = usePayrollsDeleteMutation()\n\n const onRunPayroll = ({ payrollUuid, payPeriod }: Pick<Payroll, 'payrollUuid' | 'payPeriod'>) => {\n onEvent(componentEvents.RUN_PAYROLL_SELECTED, { payrollUuid, payPeriod })\n }\n const onRunOffCyclePayroll = () => {\n onEvent(componentEvents.RUN_OFF_CYCLE_PAYROLL)\n }\n const onSubmitPayroll = ({\n payrollUuid,\n payPeriod,\n }: Pick<Payroll, 'payrollUuid' | 'payPeriod'>) => {\n onEvent(componentEvents.REVIEW_PAYROLL, { payrollUuid, payPeriod })\n }\n const onSkipPayroll = async ({ payrollUuid }: Pick<Payroll, 'payrollUuid'>) => {\n const payroll = payrollList.find(payroll => payroll.payrollUuid === payrollUuid)\n\n if (payroll?.payPeriod) {\n setSkippingPayrollId(payrollUuid!)\n const payrollType =\n payroll.offCycleReason === 'Transition from old pay schedule'\n ? PayrollType.TransitionFromOldPaySchedule\n : PayrollType.Regular\n\n await baseSubmitHandler({}, async () => {\n await skipPayroll({\n request: {\n companyUuid: companyId,\n requestBody: {\n payrollType,\n startDate: payroll.payPeriod?.startDate,\n endDate: payroll.payPeriod?.endDate,\n payScheduleUuid: payroll.payPeriod?.payScheduleUuid ?? undefined,\n },\n },\n })\n\n setShowSkipSuccessAlert(true)\n onEvent(componentEvents.PAYROLL_SKIPPED, { payrollId: payrollUuid })\n })\n setSkippingPayrollId(null)\n }\n }\n\n const onDeletePayroll = async ({ payrollUuid }: Pick<Payroll, 'payrollUuid'>) => {\n if (payrollUuid) {\n setDeletingPayrollId(payrollUuid)\n await baseSubmitHandler({}, async () => {\n await deletePayrollMutation({\n request: { companyId, payrollId: payrollUuid },\n })\n await invalidateAllPayrollsList(queryClient)\n setShowDeleteSuccessAlert(true)\n onEvent(componentEvents.PAYROLL_DELETED, { payrollId: payrollUuid })\n })\n setDeletingPayrollId(null)\n }\n }\n\n if (!payrollsData) {\n return <BaseLayout isLoading LoaderComponent={LoaderComponent} />\n }\n\n const paginationProps = getPaginationProps(payrollsData.httpMeta.response.headers, isFetching)\n\n return (\n <PayrollListPresentation\n payrolls={payrollList}\n pagination={paginationProps}\n paySchedules={paySchedulesList}\n onRunPayroll={onRunPayroll}\n onSubmitPayroll={onSubmitPayroll}\n onSkipPayroll={onSkipPayroll}\n onDeletePayroll={onDeletePayroll}\n onRunOffCyclePayroll={onRunOffCyclePayroll}\n showSkipSuccessAlert={showSkipSuccessAlert}\n onDismissSkipSuccessAlert={() => {\n setShowSkipSuccessAlert(false)\n }}\n showDeleteSuccessAlert={showDeleteSuccessAlert}\n onDismissDeleteSuccessAlert={() => {\n setShowDeleteSuccessAlert(false)\n }}\n skippingPayrollId={skippingPayrollId}\n deletingPayrollId={deletingPayrollId}\n blockers={blockers}\n wireInRequests={wireInRequests}\n dateRangeFilter={dateRangeFilter}\n hasUnprocessedTransitions={hasUnprocessedTransitions}\n withOffcyclePayroll={withOffcyclePayroll}\n />\n )\n}\n"],"names":["PayrollList","props","jsx","BaseComponent","Root","FUTURE_LOOKAHEAD_MONTHS","getDefaultStartDate","getDefaultEndDate","date","companyId","onEvent","withOffcyclePayroll","LoaderComponent","baseSubmitHandler","useBase","queryClient","useQueryClient","showSkipSuccessAlert","setShowSkipSuccessAlert","useState","skippingPayrollId","setSkippingPayrollId","currentPage","itemsPerPage","getPaginationProps","resetPage","usePagination","showDeleteSuccessAlert","setShowDeleteSuccessAlert","deletingPayrollId","setDeletingPayrollId","dateRangeFilter","useDateRangeFilter","useCallback","dateFilterParams","payrollsData","isFetching","usePayrollsList","ProcessingStatuses","QueryParamPayrollTypes","keepPreviousData","payrollList","paySchedulesData","usePaySchedulesGetAllSuspense","paySchedulesList","blockersData","usePayrollsGetBlockersSuspense","blockers","blocker","wireInRequestsData","useWireInRequestsListSuspense","wireInRequests","hasUnprocessedTransitions","useUnprocessedTransitionPayPeriods","skipPayroll","usePayrollsSkipMutation","deletePayrollMutation","usePayrollsDeleteMutation","onRunPayroll","payrollUuid","payPeriod","componentEvents","onRunOffCyclePayroll","onSubmitPayroll","onSkipPayroll","payroll","payrollType","PayrollType","onDeletePayroll","invalidateAllPayrollsList","BaseLayout","paginationProps","PayrollListPresentation"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { jsx as a, jsxs as
|
|
1
|
+
import { jsx as a, jsxs as g } from "react/jsx-runtime";
|
|
2
2
|
import { OffCycleReasonType as m } from "@gusto/embedded-api/models/components/payrollshow";
|
|
3
3
|
import { useRef as fe, useMemo as q, useState as z } from "react";
|
|
4
4
|
import { useTranslation as pe } from "react-i18next";
|
|
@@ -20,19 +20,19 @@ const G = /* @__PURE__ */ new Set([
|
|
|
20
20
|
m.Correction,
|
|
21
21
|
m.DismissedEmployee
|
|
22
22
|
]);
|
|
23
|
-
function Oe(r,
|
|
23
|
+
function Oe(r, S, y) {
|
|
24
24
|
if (r.processed) return !1;
|
|
25
|
-
const f = r.payPeriod?.startDate ? new Date(r.payPeriod.startDate) : null,
|
|
26
|
-
return !!(c ||
|
|
25
|
+
const f = r.payPeriod?.startDate ? new Date(r.payPeriod.startDate) : null, k = !r.offCycle || r.offCycleReason === m.TransitionFromOldPaySchedule, c = S.length === 0 && k && y && f && y >= f, p = r.offCycle && !!r.offCycleReason && G.has(r.offCycleReason);
|
|
26
|
+
return !!(c || p);
|
|
27
27
|
}
|
|
28
28
|
const qe = ({
|
|
29
29
|
onRunPayroll: r,
|
|
30
|
-
onSubmitPayroll:
|
|
30
|
+
onSubmitPayroll: S,
|
|
31
31
|
onSkipPayroll: y,
|
|
32
32
|
onDeletePayroll: f,
|
|
33
|
-
onRunOffCyclePayroll:
|
|
33
|
+
onRunOffCyclePayroll: k,
|
|
34
34
|
payrolls: c,
|
|
35
|
-
pagination:
|
|
35
|
+
pagination: p,
|
|
36
36
|
paySchedules: I,
|
|
37
37
|
showSkipSuccessAlert: J,
|
|
38
38
|
onDismissSkipSuccessAlert: Q,
|
|
@@ -48,13 +48,13 @@ const qe = ({
|
|
|
48
48
|
}) => {
|
|
49
49
|
const { Box: le, BoxHeader: oe, Button: A, ButtonIcon: v, Dialog: N, Heading: re, Text: ne, Alert: E } = he();
|
|
50
50
|
be("Payroll.PayrollList");
|
|
51
|
-
const { t } = pe("Payroll.PayrollList"), d = Se(),
|
|
51
|
+
const { t } = pe("Payroll.PayrollList"), d = Se(), F = fe(null), B = ke({ ref: F }).includes("large"), D = q(() => {
|
|
52
52
|
const e = ge(/* @__PURE__ */ new Date());
|
|
53
53
|
return e ? new Date(e) : null;
|
|
54
|
-
}, []),
|
|
55
|
-
() => c.some((e) => Oe(e, L,
|
|
56
|
-
[c, L,
|
|
57
|
-
), [
|
|
54
|
+
}, []), T = q(
|
|
55
|
+
() => c.some((e) => Oe(e, L, D)),
|
|
56
|
+
[c, L, D]
|
|
57
|
+
), [P, H] = z({
|
|
58
58
|
isOpen: !1,
|
|
59
59
|
payrollId: null,
|
|
60
60
|
payPeriod: null
|
|
@@ -71,8 +71,8 @@ const qe = ({
|
|
|
71
71
|
payPeriod: null
|
|
72
72
|
});
|
|
73
73
|
}, se = () => {
|
|
74
|
-
|
|
75
|
-
}, [
|
|
74
|
+
P.payrollId && (y({ payrollUuid: P.payrollId }), M());
|
|
75
|
+
}, [C, w] = z({
|
|
76
76
|
isOpen: !1,
|
|
77
77
|
payrollId: null,
|
|
78
78
|
payPeriod: null
|
|
@@ -89,7 +89,7 @@ const qe = ({
|
|
|
89
89
|
payPeriod: null
|
|
90
90
|
});
|
|
91
91
|
}, de = () => {
|
|
92
|
-
|
|
92
|
+
C.payrollId && (f({ payrollUuid: C.payrollId }), R());
|
|
93
93
|
}, U = (e, l) => {
|
|
94
94
|
const n = d.formatShort(e), o = d.formatShortWithYear(l);
|
|
95
95
|
return {
|
|
@@ -98,17 +98,17 @@ const qe = ({
|
|
|
98
98
|
fullPeriod: d.formatPayPeriodRange(e, l, { useShortMonth: !0 })
|
|
99
99
|
};
|
|
100
100
|
}, W = (e) => {
|
|
101
|
-
const { payrollUuid: l, calculatedAt: n, processed: o, payPeriod:
|
|
101
|
+
const { payrollUuid: l, calculatedAt: n, processed: o, payPeriod: h } = e;
|
|
102
102
|
if (o)
|
|
103
103
|
return null;
|
|
104
|
-
const
|
|
104
|
+
const b = x === l, u = !e.offCycle && te;
|
|
105
105
|
return n ? /* @__PURE__ */ a(
|
|
106
106
|
A,
|
|
107
107
|
{
|
|
108
|
-
isLoading:
|
|
108
|
+
isLoading: b,
|
|
109
109
|
isDisabled: u,
|
|
110
110
|
onClick: () => {
|
|
111
|
-
|
|
111
|
+
S({ payrollUuid: l, payPeriod: h });
|
|
112
112
|
},
|
|
113
113
|
title: t("submitPayrollCta"),
|
|
114
114
|
variant: "secondary",
|
|
@@ -117,10 +117,10 @@ const qe = ({
|
|
|
117
117
|
) : /* @__PURE__ */ a(
|
|
118
118
|
A,
|
|
119
119
|
{
|
|
120
|
-
isLoading:
|
|
120
|
+
isLoading: b,
|
|
121
121
|
isDisabled: u,
|
|
122
122
|
onClick: () => {
|
|
123
|
-
r({ payrollUuid: l, payPeriod:
|
|
123
|
+
r({ payrollUuid: l, payPeriod: h });
|
|
124
124
|
},
|
|
125
125
|
title: t("runPayrollTitle"),
|
|
126
126
|
variant: "secondary",
|
|
@@ -128,7 +128,7 @@ const qe = ({
|
|
|
128
128
|
}
|
|
129
129
|
);
|
|
130
130
|
};
|
|
131
|
-
return /* @__PURE__ */ a("div", { ref:
|
|
131
|
+
return /* @__PURE__ */ a("div", { ref: F, className: i.container, children: /* @__PURE__ */ g(O, { flexDirection: "column", gap: 16, alignItems: "stretch", children: [
|
|
132
132
|
J && /* @__PURE__ */ a("div", { className: i.alertContainer, children: /* @__PURE__ */ a(
|
|
133
133
|
E,
|
|
134
134
|
{
|
|
@@ -145,7 +145,7 @@ const qe = ({
|
|
|
145
145
|
onDismiss: Z
|
|
146
146
|
}
|
|
147
147
|
) }),
|
|
148
|
-
/* @__PURE__ */
|
|
148
|
+
/* @__PURE__ */ g(O, { justifyContent: "space-between", alignItems: "center", children: [
|
|
149
149
|
/* @__PURE__ */ a(re, { as: "h2", children: t("title") }),
|
|
150
150
|
/* @__PURE__ */ a(
|
|
151
151
|
Ce,
|
|
@@ -171,7 +171,8 @@ const qe = ({
|
|
|
171
171
|
Ae,
|
|
172
172
|
{
|
|
173
173
|
breakAt: "large",
|
|
174
|
-
pagination:
|
|
174
|
+
pagination: p,
|
|
175
|
+
isFetching: p?.isFetching,
|
|
175
176
|
emptyState: () => s.isModified ? /* @__PURE__ */ a(
|
|
176
177
|
V,
|
|
177
178
|
{
|
|
@@ -187,7 +188,7 @@ const qe = ({
|
|
|
187
188
|
e?.startDate,
|
|
188
189
|
e?.endDate
|
|
189
190
|
);
|
|
190
|
-
return /* @__PURE__ */
|
|
191
|
+
return /* @__PURE__ */ g("div", { className: i.payPeriodCell, children: [
|
|
191
192
|
l,
|
|
192
193
|
" - ",
|
|
193
194
|
n,
|
|
@@ -217,7 +218,7 @@ const qe = ({
|
|
|
217
218
|
return /* @__PURE__ */ a(Le, { payroll: e, wireInRequest: l });
|
|
218
219
|
}
|
|
219
220
|
},
|
|
220
|
-
...
|
|
221
|
+
...B ? [] : [
|
|
221
222
|
{
|
|
222
223
|
title: "",
|
|
223
224
|
render: (e) => {
|
|
@@ -229,9 +230,9 @@ const qe = ({
|
|
|
229
230
|
],
|
|
230
231
|
label: t("payrollsListLabel"),
|
|
231
232
|
itemMenu: (e) => {
|
|
232
|
-
const { payrollUuid: l, processed: n, payPeriod: o } = e,
|
|
233
|
+
const { payrollUuid: l, processed: n, payPeriod: o } = e, h = x === l, b = $ === l, Y = B ? W(e) : null;
|
|
233
234
|
if (n)
|
|
234
|
-
return /* @__PURE__ */ a("div", { className: i.actionsContainer, children:
|
|
235
|
+
return /* @__PURE__ */ a("div", { className: i.actionsContainer, children: T && /* @__PURE__ */ a(
|
|
235
236
|
v,
|
|
236
237
|
{
|
|
237
238
|
"aria-label": "",
|
|
@@ -244,7 +245,7 @@ const qe = ({
|
|
|
244
245
|
const { fullPeriod: u } = U(
|
|
245
246
|
o?.startDate,
|
|
246
247
|
o?.endDate
|
|
247
|
-
), j = o?.startDate ? new Date(o.startDate) : null, ue = !e.offCycle || e.offCycleReason === m.TransitionFromOldPaySchedule, _ = L.length === 0 && ue &&
|
|
248
|
+
), j = o?.startDate ? new Date(o.startDate) : null, ue = !e.offCycle || e.offCycleReason === m.TransitionFromOldPaySchedule, _ = L.length === 0 && ue && D && j && D >= j, me = e.offCycle && !!e.offCycleReason && G.has(e.offCycleReason), K = _ ? [
|
|
248
249
|
{
|
|
249
250
|
label: t("skipPayrollCta"),
|
|
250
251
|
onClick: () => {
|
|
@@ -259,16 +260,16 @@ const qe = ({
|
|
|
259
260
|
}
|
|
260
261
|
}
|
|
261
262
|
] : null, ye = K !== null;
|
|
262
|
-
return /* @__PURE__ */
|
|
263
|
+
return /* @__PURE__ */ g("div", { className: i.actionsContainer, children: [
|
|
263
264
|
Y,
|
|
264
265
|
ye ? /* @__PURE__ */ a(
|
|
265
266
|
Pe,
|
|
266
267
|
{
|
|
267
|
-
isLoading: _ ?
|
|
268
|
+
isLoading: _ ? h : b,
|
|
268
269
|
menuLabel: t("payrollMenuLabel"),
|
|
269
270
|
items: K
|
|
270
271
|
}
|
|
271
|
-
) :
|
|
272
|
+
) : T && /* @__PURE__ */ a(
|
|
272
273
|
v,
|
|
273
274
|
{
|
|
274
275
|
"aria-label": "",
|
|
@@ -285,11 +286,11 @@ const qe = ({
|
|
|
285
286
|
/* @__PURE__ */ a(
|
|
286
287
|
N,
|
|
287
288
|
{
|
|
288
|
-
isOpen:
|
|
289
|
+
isOpen: P.isOpen,
|
|
289
290
|
onClose: M,
|
|
290
291
|
onPrimaryActionClick: se,
|
|
291
292
|
isDestructive: !0,
|
|
292
|
-
title: t("skipPayrollDialog.title", { payPeriod:
|
|
293
|
+
title: t("skipPayrollDialog.title", { payPeriod: P.payPeriod }),
|
|
293
294
|
primaryActionLabel: t("skipPayrollDialog.confirmCta"),
|
|
294
295
|
closeActionLabel: t("skipPayrollDialog.cancelCta"),
|
|
295
296
|
children: t("skipPayrollDialog.body")
|
|
@@ -298,12 +299,12 @@ const qe = ({
|
|
|
298
299
|
/* @__PURE__ */ a(
|
|
299
300
|
N,
|
|
300
301
|
{
|
|
301
|
-
isOpen:
|
|
302
|
+
isOpen: C.isOpen,
|
|
302
303
|
onClose: R,
|
|
303
304
|
onPrimaryActionClick: de,
|
|
304
305
|
isDestructive: !0,
|
|
305
306
|
title: t("deletePayrollDialog.title", {
|
|
306
|
-
payPeriod:
|
|
307
|
+
payPeriod: C.payPeriod
|
|
307
308
|
}),
|
|
308
309
|
primaryActionLabel: t("deletePayrollDialog.confirmCta"),
|
|
309
310
|
closeActionLabel: t("deletePayrollDialog.cancelCta"),
|
|
@@ -320,7 +321,7 @@ const qe = ({
|
|
|
320
321
|
description: t("offCycleCta.description")
|
|
321
322
|
}
|
|
322
323
|
),
|
|
323
|
-
footer: /* @__PURE__ */ a(A, { variant: "secondary", onClick:
|
|
324
|
+
footer: /* @__PURE__ */ a(A, { variant: "secondary", onClick: k, children: t("offCycleCta.button") })
|
|
324
325
|
}
|
|
325
326
|
) })
|
|
326
327
|
] }) });
|