mirror of
https://github.com/inventree/InvenTree.git
synced 2025-05-03 22:08:49 +00:00
feat: add action to remove all pending tasks (#9600)
This commit is contained in:
parent
bd1fd9305d
commit
22b6dcd6cc
@ -422,10 +422,11 @@ class BulkOperationMixin:
|
||||
|
||||
items = request.data.pop('items', None)
|
||||
filters = request.data.pop('filters', None)
|
||||
all_filter = request.GET.get('all', None)
|
||||
|
||||
queryset = model.objects.all()
|
||||
|
||||
if not items and not filters:
|
||||
if not items and not filters and all_filter is None:
|
||||
raise ValidationError({
|
||||
'non_field_errors': _(
|
||||
'List of items or filters must be provided for bulk operation'
|
||||
@ -459,6 +460,11 @@ class BulkOperationMixin:
|
||||
'non_field_errors': _('Invalid filters provided')
|
||||
})
|
||||
|
||||
if all_filter and not helpers.str2bool(all_filter):
|
||||
raise ValidationError({
|
||||
'non_field_errors': _('All filter must only be used with true')
|
||||
})
|
||||
|
||||
if queryset.count() == 0:
|
||||
raise ValidationError({
|
||||
'non_field_errors': _('No items match the provided criteria')
|
||||
|
@ -3,6 +3,11 @@ import { useMemo } from 'react';
|
||||
|
||||
import { ApiEndpoints } from '@lib/enums/ApiEndpoints';
|
||||
import { apiUrl } from '@lib/functions/Api';
|
||||
import { UserRoles } from '@lib/index';
|
||||
import { notifications, showNotification } from '@mantine/notifications';
|
||||
import { IconTrashXFilled, IconX } from '@tabler/icons-react';
|
||||
import { api } from '../../App';
|
||||
import { ActionButton } from '../../components/buttons/ActionButton';
|
||||
import { useTable } from '../../hooks/UseTable';
|
||||
import { useUserState } from '../../states/UserState';
|
||||
import type { TableColumn } from '../Column';
|
||||
@ -48,6 +53,41 @@ export default function PendingTasksTable({
|
||||
];
|
||||
}, []);
|
||||
|
||||
const tableActions = useMemo(() => {
|
||||
return [
|
||||
<ActionButton
|
||||
key='remove-all'
|
||||
icon={<IconTrashXFilled />}
|
||||
tooltip={t`Remove all pending tasks`}
|
||||
onClick={() => {
|
||||
api
|
||||
.delete(`${apiUrl(ApiEndpoints.task_pending_list)}?all=true`)
|
||||
.then(() => {
|
||||
notifications.show({
|
||||
id: 'notes',
|
||||
title: t`Success`,
|
||||
message: t`All pending tasks deleted`,
|
||||
color: 'green'
|
||||
});
|
||||
table.refreshTable();
|
||||
})
|
||||
.catch((err) => {
|
||||
showNotification({
|
||||
title: t`Error while deleting all pending tasks`,
|
||||
message:
|
||||
err.response.data?.non_field_errors ??
|
||||
err.message ??
|
||||
t`Unknown error`,
|
||||
color: 'red',
|
||||
icon: <IconX />
|
||||
});
|
||||
});
|
||||
}}
|
||||
hidden={!user.hasAddRole(UserRoles.admin)}
|
||||
/>
|
||||
];
|
||||
}, [user]);
|
||||
|
||||
return (
|
||||
<InvenTreeTable
|
||||
url={apiUrl(ApiEndpoints.task_pending_list)}
|
||||
@ -56,7 +96,8 @@ export default function PendingTasksTable({
|
||||
props={{
|
||||
afterBulkDelete: onRecordsUpdated,
|
||||
enableBulkDelete: user.isStaff(),
|
||||
enableSelection: true
|
||||
enableSelection: true,
|
||||
tableActions: tableActions
|
||||
}}
|
||||
/>
|
||||
);
|
||||
|
Loading…
x
Reference in New Issue
Block a user