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'; } from '../hooks/UseGenerator';
import { useGlobalSettingsState } from '../states/SettingsStates'; import { useGlobalSettingsState } from '../states/SettingsStates';
import { RenderPartColumn } from '../tables/ColumnRenderers'; import { RenderPartColumn } from '../tables/ColumnRenderers';
import { ProjectCodeField, TagsField } from './CommonFields'; import { DuplicateField, ProjectCodeField, TagsField } from './CommonFields';
/** /**
* Field set for BuildOrder forms * Field set for BuildOrder forms
@ -136,15 +136,12 @@ export function useBuildOrderFields({
} }
}, },
external: {}, external: {},
duplicate: { duplicate: DuplicateField({
children: { originalId: duplicateBuildId,
original: { extraFields: {
value: duplicateBuildId,
hidden: true
},
copy_parameters: {} copy_parameters: {}
} }
} })
}; };
if (!globalSettings.isSet('PROJECT_CODES_ENABLED', true)) { 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 { t } from '@lingui/core/macro';
import { IconList } from '@tabler/icons-react'; 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({ export function TagsField({
label, label,
description, description,

View File

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

View File

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