From d25696c4b0e9983f5081689a8ba525a08df76bc2 Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Mon, 24 Nov 2025 11:41:45 +0000 Subject: [PATCH] Add data import for parameter table --- src/frontend/lib/enums/ModelType.tsx | 1 + .../src/tables/general/ParameterTable.tsx | 76 +++++++++++++++++-- 2 files changed, 69 insertions(+), 8 deletions(-) diff --git a/src/frontend/lib/enums/ModelType.tsx b/src/frontend/lib/enums/ModelType.tsx index c3ea04893d..0b4b1fdf19 100644 --- a/src/frontend/lib/enums/ModelType.tsx +++ b/src/frontend/lib/enums/ModelType.tsx @@ -17,6 +17,7 @@ export enum ModelType { buildline = 'buildline', builditem = 'builditem', company = 'company', + parameter = 'parameter', parametertemplate = 'parametertemplate', purchaseorder = 'purchaseorder', purchaseorderlineitem = 'purchaseorderlineitem', diff --git a/src/frontend/src/tables/general/ParameterTable.tsx b/src/frontend/src/tables/general/ParameterTable.tsx index 728633a17b..0f043c4071 100644 --- a/src/frontend/src/tables/general/ParameterTable.tsx +++ b/src/frontend/src/tables/general/ParameterTable.tsx @@ -1,7 +1,6 @@ import { - AddItemButton, ApiEndpoints, - type ModelType, + ModelType, RowDeleteAction, RowEditAction, YesNoButton, @@ -11,8 +10,12 @@ import { import type { TableFilter } from '@lib/types/Filters'; import type { TableColumn } from '@lib/types/Tables'; import { t } from '@lingui/core/macro'; +import { IconFileUpload, IconPlus } from '@tabler/icons-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 { dataImporterSessionFields } from '../../forms/ImporterForms'; import { useCreateApiFormModal, useDeleteApiFormModal, @@ -125,6 +128,35 @@ export function ParameterTable({ undefined ); + const [importOpened, setImportOpened] = useState(false); + + const [selectedSession, setSelectedSession] = useState( + 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({ url: ApiEndpoints.parameter_list, title: t`Add Parameter`, @@ -149,13 +181,31 @@ export function ParameterTable({ const tableActions = useMemo(() => { return [ - } hidden={!user.hasAddPermission(modelType)} - onClick={() => { - setSelectedParameter(undefined); - newParameter.open(); - }} + actions={[ + { + name: t`Create Parameter`, + icon: , + tooltip: t`Create a new parameter`, + onClick: () => { + setSelectedParameter(undefined); + newParameter.open(); + } + }, + { + name: t`Import from File`, + icon: , + tooltip: t`Import parameters from a file`, + onClick: () => { + importParameters.open(); + } + } + ]} /> ]; }, [user]); @@ -189,6 +239,7 @@ export function ParameterTable({ {newParameter.modal} {editParameter.modal} {deleteParameter.modal} + {importParameters.modal} + { + setSelectedSession(undefined); + setImportOpened(false); + table.refreshTable(); + }} + /> ); }