This commit is contained in:
Oliver Walters 2026-07-02 12:50:51 +00:00
parent 669ca7ef82
commit 9a2ed789c1
4 changed files with 43 additions and 37 deletions

View File

@ -36,7 +36,7 @@ import {
} from '../hooks/UseGenerator';
import { useGlobalSettingsState } from '../states/SettingsStates';
import { RenderPartColumn } from '../tables/ColumnRenderers';
import { ProjectCodeField, TagsField } from './CommonFields';
import { DuplicateField, ProjectCodeField, TagsField } from './CommonFields';
/**
* Field set for BuildOrder forms
@ -136,15 +136,12 @@ export function useBuildOrderFields({
}
},
external: {},
duplicate: {
children: {
original: {
value: duplicateBuildId,
hidden: true
},
duplicate: DuplicateField({
originalId: duplicateBuildId,
extraFields: {
copy_parameters: {}
}
}
})
};
if (!globalSettings.isSet('PROJECT_CODES_ENABLED', true)) {

View File

@ -2,6 +2,26 @@ import type { ApiFormFieldType } from '@lib/types/Forms';
import { t } from '@lingui/core/macro';
import { IconList } from '@tabler/icons-react';
// Generic field for implementing a "duplication options" form field
export function DuplicateField({
originalId,
extraFields
}: Readonly<{
originalId?: number | null;
extraFields?: Record<string, any>;
}>): ApiFormFieldType {
return {
children: {
original: {
value: originalId,
hidden: true
},
...extraFields
}
};
}
// Generic field for rendering a list of tags within a form
export function TagsField({
label,
description,

View File

@ -13,7 +13,7 @@ import {
IconPhone
} from '@tabler/icons-react';
import { useMemo, useState } from 'react';
import { TagsField } from './CommonFields';
import { DuplicateField, TagsField } from './CommonFields';
/**
* Field set for SupplierPart instance
@ -98,15 +98,12 @@ export function useSupplierPartFields({
},
primary: {},
active: {},
duplicate: {
children: {
original: {
value: duplicateSupplierPartId,
hidden: true
},
duplicate: DuplicateField({
originalId: duplicateSupplierPartId,
extraFields: {
copy_parameters: {}
}
}
})
};
if (!duplicateSupplierPartId) {
@ -146,15 +143,12 @@ export function useManufacturerPartFields({
description: {},
tags: TagsField({}),
link: {},
duplicate: {
children: {
original: {
value: duplicateManufacturerPartId,
hidden: true
},
duplicate: DuplicateField({
originalId: duplicateManufacturerPartId,
extraFields: {
copy_parameters: {}
}
}
})
};
if (!duplicateManufacturerPartId) {
@ -194,15 +188,12 @@ export function companyFields({
is_manufacturer: {},
is_customer: {},
active: {},
duplicate: {
children: {
original: {
value: duplicateCompanyId,
hidden: true
},
duplicate: DuplicateField({
originalId: duplicateCompanyId,
extraFields: {
copy_parameters: {}
}
}
})
};
if (!duplicateCompanyId) {

View File

@ -24,6 +24,7 @@ import { ActionDropdown } from '../../components/items/ActionDropdown';
import ImportPartWizard from '../../components/wizards/ImportPartWizard';
import OrderPartsWizard from '../../components/wizards/OrderPartsWizard';
import { formatDecimal, formatPriceRange } from '../../defaults/formatters';
import { DuplicateField } from '../../forms/CommonFields';
import { dataImporterSessionFields } from '../../forms/ImporterForms';
import { usePartFields } from '../../forms/PartForms';
import { InvenTreeIcon } from '../../functions/icons';
@ -312,12 +313,9 @@ export function PartListTable({
const duplicatePartFields: ApiFormFieldSet = useMemo(() => {
return {
...createPartFields,
duplicate: {
children: {
part: {
value: selectedPart.pk,
hidden: true
},
duplicate: DuplicateField({
originalId: selectedPart.pk,
extraFields: {
copy_image: {
value: true
},
@ -337,7 +335,7 @@ export function PartListTable({
hidden: !selectedPart.testable
}
}
}
})
};
}, [createPartFields, globalSettings, selectedPart]);