2
0
mirror of https://github.com/inventree/InvenTree.git synced 2025-04-29 20:16:44 +00:00

[PUI] Task table enhancements (#8369)

* Refresh task counts when updating tables

* Handle case where error is null
This commit is contained in:
Oliver 2024-10-26 12:40:24 +11:00 committed by GitHub
parent 3253a4a93c
commit 9fd882f95e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 32 additions and 15 deletions

View File

@ -7,21 +7,15 @@ import { FactCollection } from '../../../../components/settings/FactCollection';
import { ApiEndpoints } from '../../../../enums/ApiEndpoints'; import { ApiEndpoints } from '../../../../enums/ApiEndpoints';
import { Loadable } from '../../../../functions/loading'; import { Loadable } from '../../../../functions/loading';
import { useInstance } from '../../../../hooks/UseInstance'; import { useInstance } from '../../../../hooks/UseInstance';
import FailedTasksTable from '../../../../tables/settings/FailedTasksTable';
const PendingTasksTable = Loadable( import PendingTasksTable from '../../../../tables/settings/PendingTasksTable';
lazy(() => import('../../../../tables/settings/PendingTasksTable'))
);
const ScheduledTasksTable = Loadable( const ScheduledTasksTable = Loadable(
lazy(() => import('../../../../tables/settings/ScheduledTasksTable')) lazy(() => import('../../../../tables/settings/ScheduledTasksTable'))
); );
const FailedTasksTable = Loadable(
lazy(() => import('../../../../tables/settings/FailedTasksTable'))
);
export default function TaskManagementPanel() { export default function TaskManagementPanel() {
const { instance: taskInfo } = useInstance({ const { instance: taskInfo, refreshInstance: refreshTaskInfo } = useInstance({
endpoint: ApiEndpoints.task_overview, endpoint: ApiEndpoints.task_overview,
hasPrimaryKey: false, hasPrimaryKey: false,
refetchOnMount: true, refetchOnMount: true,
@ -51,7 +45,7 @@ export default function TaskManagementPanel() {
<StylishText size="lg">{t`Pending Tasks`}</StylishText> <StylishText size="lg">{t`Pending Tasks`}</StylishText>
</Accordion.Control> </Accordion.Control>
<Accordion.Panel> <Accordion.Panel>
<PendingTasksTable /> <PendingTasksTable onRecordsUpdated={refreshTaskInfo} />
</Accordion.Panel> </Accordion.Panel>
</Accordion.Item> </Accordion.Item>
<Accordion.Item value="scheduled" key="scheduled-tasks"> <Accordion.Item value="scheduled" key="scheduled-tasks">
@ -67,7 +61,7 @@ export default function TaskManagementPanel() {
<StylishText size="lg">{t`Failed Tasks`}</StylishText> <StylishText size="lg">{t`Failed Tasks`}</StylishText>
</Accordion.Control> </Accordion.Control>
<Accordion.Panel> <Accordion.Panel>
<FailedTasksTable /> <FailedTasksTable onRecordsUpdated={refreshTaskInfo} />
</Accordion.Panel> </Accordion.Panel>
</Accordion.Item> </Accordion.Item>
</Accordion> </Accordion>

View File

@ -1,6 +1,8 @@
import { t } from '@lingui/macro'; import { t } from '@lingui/macro';
import { Drawer, Text } from '@mantine/core'; import { Drawer, Text } from '@mantine/core';
import { useDisclosure } from '@mantine/hooks'; import { useDisclosure } from '@mantine/hooks';
import { hideNotification, showNotification } from '@mantine/notifications';
import { IconExclamationCircle } from '@tabler/icons-react';
import { useMemo, useState } from 'react'; import { useMemo, useState } from 'react';
import { StylishText } from '../../components/items/StylishText'; import { StylishText } from '../../components/items/StylishText';
@ -11,7 +13,11 @@ import { useUserState } from '../../states/UserState';
import { TableColumn } from '../Column'; import { TableColumn } from '../Column';
import { InvenTreeTable } from '../InvenTreeTable'; import { InvenTreeTable } from '../InvenTreeTable';
export default function FailedTasksTable() { export default function FailedTasksTable({
onRecordsUpdated
}: {
onRecordsUpdated: () => void;
}) {
const table = useTable('tasks-failed'); const table = useTable('tasks-failed');
const user = useUserState(); const user = useUserState();
@ -73,10 +79,22 @@ export default function FailedTasksTable() {
columns={columns} columns={columns}
props={{ props={{
enableBulkDelete: user.isStaff(), enableBulkDelete: user.isStaff(),
afterBulkDelete: onRecordsUpdated,
enableSelection: true, enableSelection: true,
onRowClick: (row: any) => { onRowClick: (row: any) => {
setError(row.result); if (row.result) {
open(); setError(row.result);
open();
} else {
hideNotification('failed-task');
showNotification({
id: 'failed-task',
title: t`No Information`,
message: t`No error details are available for this task`,
color: 'red',
icon: <IconExclamationCircle />
});
}
} }
}} }}
/> />

View File

@ -8,7 +8,11 @@ import { useUserState } from '../../states/UserState';
import { TableColumn } from '../Column'; import { TableColumn } from '../Column';
import { InvenTreeTable } from '../InvenTreeTable'; import { InvenTreeTable } from '../InvenTreeTable';
export default function PendingTasksTable() { export default function PendingTasksTable({
onRecordsUpdated
}: {
onRecordsUpdated: () => void;
}) {
const table = useTable('tasks-pending'); const table = useTable('tasks-pending');
const user = useUserState(); const user = useUserState();
@ -50,6 +54,7 @@ export default function PendingTasksTable() {
tableState={table} tableState={table}
columns={columns} columns={columns}
props={{ props={{
afterBulkDelete: onRecordsUpdated,
enableBulkDelete: user.isStaff(), enableBulkDelete: user.isStaff(),
enableSelection: true enableSelection: true
}} }}