2
0
mirror of https://github.com/inventree/InvenTree.git synced 2025-07-09 15:10:54 +00:00

Data output table (#9984)

* Allow DataOutput to be deleted individually via API

* Add row actoins for data-export table

* Filter table by user

* Bump API version
This commit is contained in:
Oliver
2025-07-09 11:18:51 +10:00
committed by GitHub
parent c96d2200dc
commit b6c8db56fb
3 changed files with 41 additions and 5 deletions

View File

@ -1,12 +1,16 @@
"""InvenTree API version information."""
# InvenTree API version
INVENTREE_API_VERSION = 364
INVENTREE_API_VERSION = 365
"""Increment this API version number whenever there is a significant change to the API that any clients need to know about."""
INVENTREE_API_TEXT = """
v365 -> 2025-07-09 : https://github.com/inventree/InvenTree/pull/9984
- Allow filtering of DataOutput API by "user" field
- Allow individual deletion of DataOutput objects via the API
v364 -> 2025-07-06 : https://github.com/inventree/InvenTree/pull/9962
- Fix permissions for the DataImportSession API endpoints

View File

@ -20,7 +20,7 @@ from djmoney.contrib.exchange.models import ExchangeBackend, Rate
from drf_spectacular.utils import OpenApiResponse, extend_schema
from error_report.models import Error
from pint._typing import UnitLike
from rest_framework import serializers
from rest_framework import generics, serializers
from rest_framework.exceptions import NotAcceptable, NotFound, PermissionDenied
from rest_framework.permissions import IsAdminUser, IsAuthenticated
from rest_framework.response import Response
@ -852,9 +852,10 @@ class DataOutputList(DataOutputEndpointMixin, BulkDeleteMixin, ListAPI):
filter_backends = SEARCH_ORDER_FILTER
ordering_fields = ['pk', 'user', 'plugin', 'output_type', 'created']
filterset_fields = ['user']
class DataOutputDetail(DataOutputEndpointMixin, RetrieveAPI):
class DataOutputDetail(DataOutputEndpointMixin, generics.DestroyAPIView, RetrieveAPI):
"""Detail view for a DataOutput object."""

View File

@ -1,13 +1,17 @@
import { ApiEndpoints } from '@lib/enums/ApiEndpoints';
import { apiUrl } from '@lib/functions/Api';
import type { TableFilter } from '@lib/types/Filters';
import { t } from '@lingui/core/macro';
import { useMemo } from 'react';
import { useCallback, useMemo, useState } from 'react';
import { AttachmentLink } from '../../components/items/AttachmentLink';
import { RenderUser } from '../../components/render/User';
import { useDeleteApiFormModal } from '../../hooks/UseForm';
import { useTable } from '../../hooks/UseTable';
import type { TableColumn } from '../Column';
import { DateColumn } from '../ColumnRenderers';
import { UserFilter } from '../Filter';
import { InvenTreeTable } from '../InvenTreeTable';
import { type RowAction, RowDeleteAction } from '../RowActions';
export default function ExportSessionTable() {
const table = useTable('exportsession');
@ -43,8 +47,33 @@ export default function ExportSessionTable() {
];
}, []);
const tableFilters: TableFilter[] = useMemo(() => {
return [UserFilter({})];
}, []);
const [selectedRow, setSeletectedRow] = useState<any>({});
const deleteRow = useDeleteApiFormModal({
url: ApiEndpoints.data_output,
pk: selectedRow.pk,
title: t`Delete Output`,
onFormSuccess: () => table.refreshTable()
});
const rowActions = useCallback((record: any): RowAction[] => {
return [
RowDeleteAction({
onClick: () => {
setSeletectedRow(record);
deleteRow.open();
}
})
];
}, []);
return (
<>
{deleteRow.modal}
<InvenTreeTable
url={apiUrl(ApiEndpoints.data_output)}
tableState={table}
@ -52,7 +81,9 @@ export default function ExportSessionTable() {
props={{
enableBulkDelete: true,
enableSelection: true,
enableSearch: false
enableSearch: false,
rowActions: rowActions,
tableFilters: tableFilters
}}
/>
</>