mirror of
https://github.com/inventree/InvenTree.git
synced 2025-07-18 10:46:31 +00:00
PartParameter updates (#10023)
* Add mixin for storing user who last updated an instance * Add mixin to "PartParameter" model * Fix typo * Fix strings * Refactor mixin class * Update part parameter table: - Add "user" filter - Add "updated_by" column - Add "update" column - Add "note" column * Fix for updating date * Add user information when saving parameter * small refactors * Bump API version * Add unit test for "updated" and "updated_by" fields * Check for 'note' field * Update docs image
This commit is contained in:
@@ -250,7 +250,8 @@ export function usePartParameterFields({
|
||||
// Coerce boolean value into a string (required by backend)
|
||||
return value.toString();
|
||||
}
|
||||
}
|
||||
},
|
||||
note: {}
|
||||
};
|
||||
}, [editTemplate, fieldType, choices]);
|
||||
}
|
||||
|
@@ -12,9 +12,11 @@ import { YesNoButton } from '@lib/components/YesNoButton';
|
||||
import { ApiEndpoints } from '@lib/enums/ApiEndpoints';
|
||||
import { UserRoles } from '@lib/enums/Roles';
|
||||
import { apiUrl } from '@lib/functions/Api';
|
||||
import type { TableFilter } from '@lib/types/Filters';
|
||||
import type { ApiFormFieldSet } from '@lib/types/Forms';
|
||||
import type { TableColumn } from '@lib/types/Tables';
|
||||
import { AddItemButton } from '../../components/buttons/AddItemButton';
|
||||
import { RenderUser } from '../../components/render/User';
|
||||
import { formatDecimal } from '../../defaults/formatters';
|
||||
import { usePartParameterFields } from '../../forms/PartForms';
|
||||
import {
|
||||
@@ -24,7 +26,13 @@ import {
|
||||
} from '../../hooks/UseForm';
|
||||
import { useTable } from '../../hooks/UseTable';
|
||||
import { useUserState } from '../../states/UserState';
|
||||
import { DescriptionColumn, PartColumn } from '../ColumnRenderers';
|
||||
import {
|
||||
DateColumn,
|
||||
DescriptionColumn,
|
||||
NoteColumn,
|
||||
PartColumn
|
||||
} from '../ColumnRenderers';
|
||||
import { UserFilter } from '../Filter';
|
||||
import { InvenTreeTable } from '../InvenTreeTable';
|
||||
import { TableHoverCard } from '../TableHoverCard';
|
||||
|
||||
@@ -108,10 +116,45 @@ export function PartParameterTable({
|
||||
accessor: 'template_detail.units',
|
||||
ordering: 'units',
|
||||
sortable: true
|
||||
},
|
||||
NoteColumn({}),
|
||||
DateColumn({
|
||||
accessor: 'updated',
|
||||
title: t`Last Updated`,
|
||||
sortable: true,
|
||||
switchable: true
|
||||
}),
|
||||
{
|
||||
accessor: 'updated_by',
|
||||
title: t`Updated By`,
|
||||
sortable: true,
|
||||
switchable: true,
|
||||
render: (record: any) => {
|
||||
return record.updated_by_detail ? (
|
||||
<RenderUser instance={record.updated_by_detail} />
|
||||
) : (
|
||||
'-'
|
||||
);
|
||||
}
|
||||
}
|
||||
];
|
||||
}, [partId]);
|
||||
|
||||
const tableFilters: TableFilter[] = useMemo(() => {
|
||||
return [
|
||||
{
|
||||
name: 'include_variants',
|
||||
label: t`Include Variants`,
|
||||
type: 'boolean'
|
||||
},
|
||||
UserFilter({
|
||||
name: 'updated_by',
|
||||
label: t`Updated By`,
|
||||
description: t`Filter by user who last updated the parameter`
|
||||
})
|
||||
];
|
||||
}, []);
|
||||
|
||||
const partParameterFields: ApiFormFieldSet = usePartParameterFields({});
|
||||
|
||||
const newParameter = useCreateApiFormModal({
|
||||
@@ -211,13 +254,7 @@ export function PartParameterTable({
|
||||
rowActions: rowActions,
|
||||
enableDownload: true,
|
||||
tableActions: tableActions,
|
||||
tableFilters: [
|
||||
{
|
||||
name: 'include_variants',
|
||||
label: t`Include Variants`,
|
||||
type: 'boolean'
|
||||
}
|
||||
],
|
||||
tableFilters: tableFilters,
|
||||
params: {
|
||||
part: partId,
|
||||
template_detail: true,
|
||||
|
@@ -419,6 +419,8 @@ test('Parts - Parameters', async ({ browser }) => {
|
||||
await page.getByLabel('choice-field-data').click();
|
||||
await page.getByRole('option', { name: 'Green' }).click();
|
||||
|
||||
await page.getByLabel('text-field-note').fill('A custom note field');
|
||||
|
||||
// Select the "polarized" parameter template (should create a "checkbox" field)
|
||||
await page.getByLabel('related-field-template').fill('Polarized');
|
||||
await page.getByText('Is this part polarized?').click();
|
||||
|
Reference in New Issue
Block a user