diff --git a/src/frontend/src/forms/BuildForms.tsx b/src/frontend/src/forms/BuildForms.tsx index d9a03040cd..39fa22579e 100644 --- a/src/frontend/src/forms/BuildForms.tsx +++ b/src/frontend/src/forms/BuildForms.tsx @@ -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)) { diff --git a/src/frontend/src/forms/CommonFields.tsx b/src/frontend/src/forms/CommonFields.tsx index 07f16e0bb9..988fcb31a4 100644 --- a/src/frontend/src/forms/CommonFields.tsx +++ b/src/frontend/src/forms/CommonFields.tsx @@ -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; +}>): 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, diff --git a/src/frontend/src/forms/CompanyForms.tsx b/src/frontend/src/forms/CompanyForms.tsx index 2253d92305..bfd2ede4cc 100644 --- a/src/frontend/src/forms/CompanyForms.tsx +++ b/src/frontend/src/forms/CompanyForms.tsx @@ -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) { diff --git a/src/frontend/src/tables/part/PartTable.tsx b/src/frontend/src/tables/part/PartTable.tsx index 715529ddf0..bd207b1f1a 100644 --- a/src/frontend/src/tables/part/PartTable.tsx +++ b/src/frontend/src/tables/part/PartTable.tsx @@ -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]);