2
0
mirror of https://github.com/inventree/InvenTree.git synced 2025-12-17 01:38:19 +00:00

Add data import for parameter table

This commit is contained in:
Oliver Walters
2025-11-24 11:41:45 +00:00
parent 71511bab3a
commit d25696c4b0
2 changed files with 69 additions and 8 deletions

View File

@@ -17,6 +17,7 @@ export enum ModelType {
buildline = 'buildline', buildline = 'buildline',
builditem = 'builditem', builditem = 'builditem',
company = 'company', company = 'company',
parameter = 'parameter',
parametertemplate = 'parametertemplate', parametertemplate = 'parametertemplate',
purchaseorder = 'purchaseorder', purchaseorder = 'purchaseorder',
purchaseorderlineitem = 'purchaseorderlineitem', purchaseorderlineitem = 'purchaseorderlineitem',

View File

@@ -1,7 +1,6 @@
import { import {
AddItemButton,
ApiEndpoints, ApiEndpoints,
type ModelType, ModelType,
RowDeleteAction, RowDeleteAction,
RowEditAction, RowEditAction,
YesNoButton, YesNoButton,
@@ -11,8 +10,12 @@ import {
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 { t } from '@lingui/core/macro';
import { IconFileUpload, IconPlus } from '@tabler/icons-react';
import { useCallback, useMemo, useState } from 'react'; import { useCallback, useMemo, useState } from 'react';
import ImporterDrawer from '../../components/importer/ImporterDrawer';
import { ActionDropdown } from '../../components/items/ActionDropdown';
import { useParameterFields } from '../../forms/CommonForms'; import { useParameterFields } from '../../forms/CommonForms';
import { dataImporterSessionFields } from '../../forms/ImporterForms';
import { import {
useCreateApiFormModal, useCreateApiFormModal,
useDeleteApiFormModal, useDeleteApiFormModal,
@@ -125,6 +128,35 @@ export function ParameterTable({
undefined undefined
); );
const [importOpened, setImportOpened] = useState<boolean>(false);
const [selectedSession, setSelectedSession] = useState<number | undefined>(
undefined
);
const importSessionFields = useMemo(() => {
const fields = dataImporterSessionFields({
modelType: ModelType.parameter
});
fields.field_overrides.value = {
model_type: modelType,
model_id: modelId
};
return fields;
}, [modelType, modelId]);
const importParameters = useCreateApiFormModal({
url: ApiEndpoints.import_session_list,
title: t`Import Parameters`,
fields: importSessionFields,
onFormSuccess: (response: any) => {
setSelectedSession(response.pk);
setImportOpened(true);
}
});
const newParameter = useCreateApiFormModal({ const newParameter = useCreateApiFormModal({
url: ApiEndpoints.parameter_list, url: ApiEndpoints.parameter_list,
title: t`Add Parameter`, title: t`Add Parameter`,
@@ -149,13 +181,31 @@ export function ParameterTable({
const tableActions = useMemo(() => { const tableActions = useMemo(() => {
return [ return [
<AddItemButton <ActionDropdown
key='add-parameter' key='add-parameter-actions'
tooltip={t`Add Parameters`}
position='bottom-start'
icon={<IconPlus />}
hidden={!user.hasAddPermission(modelType)} hidden={!user.hasAddPermission(modelType)}
onClick={() => { actions={[
setSelectedParameter(undefined); {
newParameter.open(); name: t`Create Parameter`,
}} icon: <IconPlus />,
tooltip: t`Create a new parameter`,
onClick: () => {
setSelectedParameter(undefined);
newParameter.open();
}
},
{
name: t`Import from File`,
icon: <IconFileUpload />,
tooltip: t`Import parameters from a file`,
onClick: () => {
importParameters.open();
}
}
]}
/> />
]; ];
}, [user]); }, [user]);
@@ -189,6 +239,7 @@ export function ParameterTable({
{newParameter.modal} {newParameter.modal}
{editParameter.modal} {editParameter.modal}
{deleteParameter.modal} {deleteParameter.modal}
{importParameters.modal}
<InvenTreeTable <InvenTreeTable
url={apiUrl(ApiEndpoints.parameter_list)} url={apiUrl(ApiEndpoints.parameter_list)}
tableState={table} tableState={table}
@@ -206,6 +257,15 @@ export function ParameterTable({
} }
}} }}
/> />
<ImporterDrawer
sessionId={selectedSession ?? -1}
opened={selectedSession !== undefined && importOpened}
onClose={() => {
setSelectedSession(undefined);
setImportOpened(false);
table.refreshTable();
}}
/>
</> </>
); );
} }