diff --git a/src/frontend/src/components/panels/ParametersPanel.tsx b/src/frontend/src/components/panels/ParametersPanel.tsx
index 14a0afa593..03450e2aa8 100644
--- a/src/frontend/src/components/panels/ParametersPanel.tsx
+++ b/src/frontend/src/components/panels/ParametersPanel.tsx
@@ -7,10 +7,12 @@ import type { PanelType } from './Panel';
export default function ParametersPanel({
model_type,
- model_id
+ model_id,
+ allowEdit = true
}: {
model_type: ModelType;
model_id: number | undefined;
+ allowEdit?: boolean;
}): PanelType {
return {
name: 'parameters',
@@ -18,7 +20,11 @@ export default function ParametersPanel({
icon: ,
content:
model_type && model_id ? (
-
+
) : (
)
diff --git a/src/frontend/src/pages/part/PartDetail.tsx b/src/frontend/src/pages/part/PartDetail.tsx
index 8f0f20d822..23b9350fce 100644
--- a/src/frontend/src/pages/part/PartDetail.tsx
+++ b/src/frontend/src/pages/part/PartDetail.tsx
@@ -23,6 +23,7 @@ import {
IconInfoCircle,
IconLayersLinked,
IconListCheck,
+ IconListDetails,
IconListTree,
IconLock,
IconPackages,
@@ -73,7 +74,6 @@ import AttachmentPanel from '../../components/panels/AttachmentPanel';
import NotesPanel from '../../components/panels/NotesPanel';
import type { PanelType } from '../../components/panels/Panel';
import { PanelGroup } from '../../components/panels/PanelGroup';
-import ParametersPanel from '../../components/panels/ParametersPanel';
import { RenderPart } from '../../components/render/Part';
import { RenderUser } from '../../components/render/User';
import OrderPartsWizard from '../../components/wizards/OrderPartsWizard';
@@ -97,6 +97,7 @@ import { useUserState } from '../../states/UserState';
import { BomTable } from '../../tables/bom/BomTable';
import { UsedInTable } from '../../tables/bom/UsedInTable';
import { BuildOrderTable } from '../../tables/build/BuildOrderTable';
+import { ParameterTable } from '../../tables/general/ParameterTable';
import PartPurchaseOrdersTable from '../../tables/part/PartPurchaseOrdersTable';
import PartTestResultTable from '../../tables/part/PartTestResultTable';
import PartTestTemplateTable from '../../tables/part/PartTestTemplateTable';
@@ -937,10 +938,30 @@ export default function PartDetail() {
icon: ,
content:
},
- ParametersPanel({
- model_type: ModelType.part,
- model_id: part?.pk
- }),
+ {
+ name: 'parameters',
+ label: t`Parameters`,
+ icon: ,
+ content: (
+ <>
+ {part.locked && (
+ }
+ p='xs'
+ >
+ {t`Part parameters cannot be edited, as the part is locked`}
+
+ )}
+
+ >
+ )
+ },
AttachmentPanel({
model_type: ModelType.part,
model_id: part?.pk
diff --git a/src/frontend/src/tables/general/ParameterTable.tsx b/src/frontend/src/tables/general/ParameterTable.tsx
index eb995c5a4f..d7654e878a 100644
--- a/src/frontend/src/tables/general/ParameterTable.tsx
+++ b/src/frontend/src/tables/general/ParameterTable.tsx
@@ -38,10 +38,12 @@ import { TableHoverCard } from '../TableHoverCard';
*/
export function ParameterTable({
modelType,
- modelId
+ modelId,
+ allowEdit = true
}: {
modelType: ModelType;
modelId: number;
+ allowEdit?: boolean;
}) {
const table = useTable('parameters');
const user = useUserState();
@@ -211,7 +213,7 @@ export function ParameterTable({
]}
/>
];
- }, [user]);
+ }, [allowEdit, user]);
const rowActions = useCallback(
(record: any) => {
@@ -249,10 +251,10 @@ export function ParameterTable({
columns={tableColumns}
props={{
enableDownload: true,
- enableBulkDelete: true,
- enableSelection: true,
- rowActions: rowActions,
- tableActions: tableActions,
+ enableBulkDelete: allowEdit != false,
+ enableSelection: allowEdit != false,
+ rowActions: allowEdit == false ? undefined : rowActions,
+ tableActions: allowEdit == false ? undefined : tableActions,
tableFilters: tableFilters,
params: {
model_type: modelType,