2
0
mirror of https://github.com/inventree/InvenTree.git synced 2026-05-17 23:08:28 +00:00

Refactor part table filters (#11938)

- Expose extended filters to the parameteric table
This commit is contained in:
Oliver
2026-05-13 18:08:28 +10:00
committed by GitHub
parent d0acbf1191
commit 573c82f98d
3 changed files with 151 additions and 166 deletions
@@ -2,35 +2,17 @@ import { ApiEndpoints } from '@lib/enums/ApiEndpoints';
import { ModelType } from '@lib/enums/ModelType'; import { ModelType } from '@lib/enums/ModelType';
import type { TableFilter } from '@lib/types/Filters'; import type { TableFilter } from '@lib/types/Filters';
import type { TableColumn } from '@lib/types/Tables'; import type { TableColumn } from '@lib/types/Tables';
import { t } from '@lingui/core/macro';
import { useMemo } from 'react'; import { useMemo } from 'react';
import { DescriptionColumn, PartColumn } from '../ColumnRenderers'; import { DescriptionColumn, PartColumn } from '../ColumnRenderers';
import ParametricDataTable from '../general/ParametricDataTable'; import ParametricDataTable from '../general/ParametricDataTable';
import { PartTableFilters } from './PartTableFilters';
export default function ParametricPartTable({ export default function ParametricPartTable({
categoryId categoryId
}: Readonly<{ }: Readonly<{
categoryId?: any; categoryId?: any;
}>) { }>) {
const customFilters: TableFilter[] = useMemo(() => { const customFilters: TableFilter[] = useMemo(() => PartTableFilters(), []);
return [
{
name: 'active',
label: t`Active`,
description: t`Show active parts`
},
{
name: 'locked',
label: t`Locked`,
description: t`Show locked parts`
},
{
name: 'assembly',
label: t`Assembly`,
description: t`Show assembly parts`
}
];
}, []);
const customColumns: TableColumn[] = useMemo(() => { const customColumns: TableColumn[] = useMemo(() => {
return [ return [
+3 -146
View File
@@ -8,7 +8,6 @@ import { ModelType } from '@lib/enums/ModelType';
import { UserRoles } from '@lib/enums/Roles'; import { UserRoles } from '@lib/enums/Roles';
import { apiUrl } from '@lib/functions/Api'; import { apiUrl } from '@lib/functions/Api';
import useTable from '@lib/hooks/UseTable'; import useTable from '@lib/hooks/UseTable';
import type { TableFilter } from '@lib/types/Filters';
import type { ApiFormFieldSet } from '@lib/types/Forms'; import type { ApiFormFieldSet } from '@lib/types/Forms';
import type { TableColumn } from '@lib/types/Tables'; import type { TableColumn } from '@lib/types/Tables';
import type { InvenTreeTableProps } from '@lib/types/Tables'; import type { InvenTreeTableProps } from '@lib/types/Tables';
@@ -47,6 +46,7 @@ import {
} from '../ColumnRenderers'; } from '../ColumnRenderers';
import { InvenTreeTable } from '../InvenTreeTable'; import { InvenTreeTable } from '../InvenTreeTable';
import { TableHoverCard } from '../TableHoverCard'; import { TableHoverCard } from '../TableHoverCard';
import { PartTableFilters } from './PartTableFilters';
/** /**
* Construct a list of columns for the part table * Construct a list of columns for the part table
@@ -205,150 +205,6 @@ function partTableColumns(): TableColumn[] {
]; ];
} }
/**
* Construct a set of filters for the part table
*/
function partTableFilters(): TableFilter[] {
return [
{
name: 'active',
label: t`Active`,
description: t`Filter by part active status`,
type: 'boolean'
},
{
name: 'locked',
label: t`Locked`,
description: t`Filter by part locked status`,
type: 'boolean'
},
{
name: 'assembly',
label: t`Assembly`,
description: t`Filter by assembly attribute`,
type: 'boolean'
},
{
name: 'bom_valid',
label: t`BOM Valid`,
description: t`Filter by parts with a valid BOM`,
type: 'boolean'
},
{
name: 'cascade',
label: t`Include Subcategories`,
description: t`Include parts in subcategories`,
type: 'boolean'
},
{
name: 'component',
label: t`Component`,
description: t`Filter by component attribute`,
type: 'boolean'
},
{
name: 'testable',
label: t`Testable`,
description: t`Filter by testable attribute`,
type: 'boolean'
},
{
name: 'trackable',
label: t`Trackable`,
description: t`Filter by trackable attribute`,
type: 'boolean'
},
{
name: 'has_units',
label: t`Has Units`,
description: t`Filter by parts which have units`,
type: 'boolean'
},
{
name: 'has_ipn',
label: t`Has IPN`,
description: t`Filter by parts which have an internal part number`,
type: 'boolean'
},
{
name: 'has_stock',
label: t`Has Stock`,
description: t`Filter by parts which have stock`,
type: 'boolean'
},
{
name: 'low_stock',
label: t`Low Stock`,
description: t`Filter by parts which have low stock`,
type: 'boolean'
},
{
name: 'high_stock',
label: t`High Stock`,
description: t`Filter by parts which have high stock`,
type: 'boolean'
},
{
name: 'purchaseable',
label: t`Purchaseable`,
description: t`Filter by parts which are purchaseable`,
type: 'boolean'
},
{
name: 'salable',
label: t`Salable`,
description: t`Filter by parts which are salable`,
type: 'boolean'
},
{
name: 'virtual',
label: t`Virtual`,
description: t`Filter by parts which are virtual`,
type: 'boolean'
},
{
name: 'is_template',
label: t`Is Template`,
description: t`Filter by parts which are templates`,
type: 'boolean'
},
{
name: 'is_variant',
label: t`Is Variant`,
description: t`Filter by parts which are variants`,
type: 'boolean'
},
{
name: 'is_revision',
label: t`Is Revision`,
description: t`Filter by parts which are revisions`
},
{
name: 'has_revisions',
label: t`Has Revisions`,
description: t`Filter by parts which have revisions`
},
{
name: 'has_pricing',
label: t`Has Pricing`,
description: t`Filter by parts which have pricing information`,
type: 'boolean'
},
{
name: 'unallocated_stock',
label: t`Available Stock`,
description: t`Filter by parts which have available stock`,
type: 'boolean'
},
{
name: 'starred',
label: t`Subscribed`,
description: t`Filter by parts to which the user is subscribed`,
type: 'boolean'
}
];
}
/** /**
* PartListTable - Displays a list of parts, based on the provided parameters * PartListTable - Displays a list of parts, based on the provided parameters
* @param {Object} params - The query parameters to pass to the API * @param {Object} params - The query parameters to pass to the API
@@ -368,7 +224,8 @@ export function PartListTable({
defaultPartData?: any; defaultPartData?: any;
}>) { }>) {
const tableColumns = useMemo(() => partTableColumns(), []); const tableColumns = useMemo(() => partTableColumns(), []);
const tableFilters = useMemo(() => partTableFilters(), []);
const tableFilters = useMemo(() => PartTableFilters(), []);
const table = useTable(tableName ?? 'part-list', { const table = useTable(tableName ?? 'part-list', {
initialFilters: [ initialFilters: [
@@ -0,0 +1,146 @@
import type { TableFilter } from '@lib/types/Filters';
import { t } from '@lingui/core/macro';
/**
* Construct a set of filters for the part table
*/
export function PartTableFilters(): TableFilter[] {
return [
{
name: 'active',
label: t`Active`,
description: t`Filter by part active status`,
type: 'boolean'
},
{
name: 'locked',
label: t`Locked`,
description: t`Filter by part locked status`,
type: 'boolean'
},
{
name: 'assembly',
label: t`Assembly`,
description: t`Filter by assembly attribute`,
type: 'boolean'
},
{
name: 'bom_valid',
label: t`BOM Valid`,
description: t`Filter by parts with a valid BOM`,
type: 'boolean'
},
{
name: 'cascade',
label: t`Include Subcategories`,
description: t`Include parts in subcategories`,
type: 'boolean'
},
{
name: 'component',
label: t`Component`,
description: t`Filter by component attribute`,
type: 'boolean'
},
{
name: 'testable',
label: t`Testable`,
description: t`Filter by testable attribute`,
type: 'boolean'
},
{
name: 'trackable',
label: t`Trackable`,
description: t`Filter by trackable attribute`,
type: 'boolean'
},
{
name: 'has_units',
label: t`Has Units`,
description: t`Filter by parts which have units`,
type: 'boolean'
},
{
name: 'has_ipn',
label: t`Has IPN`,
description: t`Filter by parts which have an internal part number`,
type: 'boolean'
},
{
name: 'has_stock',
label: t`Has Stock`,
description: t`Filter by parts which have stock`,
type: 'boolean'
},
{
name: 'low_stock',
label: t`Low Stock`,
description: t`Filter by parts which have low stock`,
type: 'boolean'
},
{
name: 'high_stock',
label: t`High Stock`,
description: t`Filter by parts which have high stock`,
type: 'boolean'
},
{
name: 'purchaseable',
label: t`Purchaseable`,
description: t`Filter by parts which are purchaseable`,
type: 'boolean'
},
{
name: 'salable',
label: t`Salable`,
description: t`Filter by parts which are salable`,
type: 'boolean'
},
{
name: 'virtual',
label: t`Virtual`,
description: t`Filter by parts which are virtual`,
type: 'boolean'
},
{
name: 'is_template',
label: t`Is Template`,
description: t`Filter by parts which are templates`,
type: 'boolean'
},
{
name: 'is_variant',
label: t`Is Variant`,
description: t`Filter by parts which are variants`,
type: 'boolean'
},
{
name: 'is_revision',
label: t`Is Revision`,
description: t`Filter by parts which are revisions`
},
{
name: 'has_revisions',
label: t`Has Revisions`,
description: t`Filter by parts which have revisions`
},
{
name: 'has_pricing',
label: t`Has Pricing`,
description: t`Filter by parts which have pricing information`,
type: 'boolean'
},
{
name: 'unallocated_stock',
label: t`Available Stock`,
description: t`Filter by parts which have available stock`,
type: 'boolean'
},
{
name: 'starred',
label: t`Subscribed`,
description: t`Filter by parts to which the user is subscribed`,
type: 'boolean'
}
];
}