From c222eedf4a92513a6377a8e95012a858a0f165a6 Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Sun, 24 Nov 2024 05:35:06 +0000 Subject: [PATCH] Enable filtering by reference status type --- src/backend/InvenTree/generic/states/api.py | 1 + src/frontend/src/states/StatusState.tsx | 2 +- .../src/tables/settings/CustomStateTable.tsx | 20 ++++++++++++++++++- 3 files changed, 21 insertions(+), 2 deletions(-) diff --git a/src/backend/InvenTree/generic/states/api.py b/src/backend/InvenTree/generic/states/api.py index 5589e9b3b6..8c600e515f 100644 --- a/src/backend/InvenTree/generic/states/api.py +++ b/src/backend/InvenTree/generic/states/api.py @@ -137,6 +137,7 @@ class CustomStateList(DataExportViewMixin, ListCreateAPI): filter_backends = SEARCH_ORDER_FILTER ordering_fields = ['key'] search_fields = ['key', 'name', 'label', 'reference_status'] + filterset_fields = ['model', 'reference_status'] class CustomStateDetail(RetrieveUpdateDestroyAPI): diff --git a/src/frontend/src/states/StatusState.tsx b/src/frontend/src/states/StatusState.tsx index d011711f26..30a17a109c 100644 --- a/src/frontend/src/states/StatusState.tsx +++ b/src/frontend/src/states/StatusState.tsx @@ -36,7 +36,7 @@ export const useGlobalStatusState = create()( const newStatusLookup: StatusLookup = {} as StatusLookup; for (const key in response.data) { newStatusLookup[statusCodeList[key] || key] = { - statusClass: key, + status_class: key, values: response.data[key].values }; } diff --git a/src/frontend/src/tables/settings/CustomStateTable.tsx b/src/frontend/src/tables/settings/CustomStateTable.tsx index 4025053f04..a60706c389 100644 --- a/src/frontend/src/tables/settings/CustomStateTable.tsx +++ b/src/frontend/src/tables/settings/CustomStateTable.tsx @@ -21,6 +21,7 @@ import { apiUrl } from '../../states/ApiState'; import { useGlobalStatusState } from '../../states/StatusState'; import { useUserState } from '../../states/UserState'; import type { TableColumn } from '../Column'; +import type { TableFilter } from '../Filter'; import { InvenTreeTable } from '../InvenTreeTable'; import { type RowAction, RowDeleteAction, RowEditAction } from '../RowActions'; @@ -43,13 +44,29 @@ export default function CustomStateTable() { (value: StatusCodeInterface) => value.key === key ); - return value?.label ?? ''; + return value?.label ?? value?.name ?? ''; }, [statusCodes] ); const user = useUserState(); + const tableFilters: TableFilter[] = useMemo(() => { + return [ + { + name: 'reference_status', + label: t`Status Group`, + field_type: 'choice', + choices: Object.values(statusCodes.status ?? {}).map( + (value: StatusCodeListInterface) => ({ + label: value.status_class, + value: value.status_class + }) + ) + } + ]; + }, [statusCodes]); + const columns: TableColumn[] = useMemo(() => { return [ { @@ -173,6 +190,7 @@ export default function CustomStateTable() { props={{ rowActions: rowActions, tableActions: tableActions, + tableFilters: tableFilters, enableDownload: true }} />