diff --git a/frontend/src/components/tools/changeMetadata/ChangeMetadataSingleStep.tsx b/frontend/src/components/tools/changeMetadata/ChangeMetadataSingleStep.tsx index c5804cf51..ef95718e9 100644 --- a/frontend/src/components/tools/changeMetadata/ChangeMetadataSingleStep.tsx +++ b/frontend/src/components/tools/changeMetadata/ChangeMetadataSingleStep.tsx @@ -1,6 +1,6 @@ import { Stack, Divider, Text } from "@mantine/core"; import { useTranslation } from "react-i18next"; -import { ChangeMetadataParameters } from "../../../hooks/tools/changeMetadata/useChangeMetadataParameters"; +import { ChangeMetadataParameters, createCustomMetadataFunctions } from "../../../hooks/tools/changeMetadata/useChangeMetadataParameters"; import { useMetadataExtraction } from "../../../hooks/tools/changeMetadata/useMetadataExtraction"; import DeleteAllStep from "./steps/DeleteAllStep"; import StandardMetadataStep from "./steps/StandardMetadataStep"; @@ -11,21 +11,21 @@ interface ChangeMetadataSingleStepProps { parameters: ChangeMetadataParameters; onParameterChange: (key: K, value: ChangeMetadataParameters[K]) => void; disabled?: boolean; - addCustomMetadata: (key?: string, value?: string) => void; - removeCustomMetadata: (id: string) => void; - updateCustomMetadata: (id: string, key: string, value: string) => void; } const ChangeMetadataSingleStep = ({ parameters, onParameterChange, - disabled = false, - addCustomMetadata, - removeCustomMetadata, - updateCustomMetadata + disabled = false }: ChangeMetadataSingleStepProps) => { const { t } = useTranslation(); + // Get custom metadata functions using the utility + const { addCustomMetadata, removeCustomMetadata, updateCustomMetadata } = createCustomMetadataFunctions( + parameters, + onParameterChange + ); + // Extract metadata from uploaded files const { isExtractingMetadata } = useMetadataExtraction({ updateParameter: onParameterChange, diff --git a/frontend/src/hooks/tools/changeMetadata/useChangeMetadataParameters.ts b/frontend/src/hooks/tools/changeMetadata/useChangeMetadataParameters.ts index c5a892d90..0523166de 100644 --- a/frontend/src/hooks/tools/changeMetadata/useChangeMetadataParameters.ts +++ b/frontend/src/hooks/tools/changeMetadata/useChangeMetadataParameters.ts @@ -42,6 +42,45 @@ export const defaultParameters: ChangeMetadataParameters = { // Global counter for custom metadata IDs let customMetadataIdCounter = 1; +// Utility functions that can work with external parameters +export const createCustomMetadataFunctions = ( + parameters: ChangeMetadataParameters, + onParameterChange: (key: K, value: ChangeMetadataParameters[K]) => void +) => { + const addCustomMetadata = (key: string = '', value: string = '') => { + const newEntry: CustomMetadataEntry = { + key, + value, + id: `custom${customMetadataIdCounter++}`, + }; + + onParameterChange('customMetadata', [ + ...parameters.customMetadata, + newEntry, + ]); + }; + + const removeCustomMetadata = (id: string) => { + onParameterChange('customMetadata', + parameters.customMetadata.filter(entry => entry.id !== id) + ); + }; + + const updateCustomMetadata = (id: string, key: string, value: string) => { + onParameterChange('customMetadata', + parameters.customMetadata.map(entry => + entry.id === id ? { ...entry, key, value } : entry + ) + ); + }; + + return { + addCustomMetadata, + removeCustomMetadata, + updateCustomMetadata + }; +}; + // Validation function const validateParameters = (params: ChangeMetadataParameters): boolean => { // If deleteAll is true, no other validation needed @@ -82,32 +121,11 @@ export const useChangeMetadataParameters = (): ChangeMetadataParametersHook => { validateFn: validateParameters, }); - const addCustomMetadata = (key: string = '', value: string = '') => { - const newEntry: CustomMetadataEntry = { - key, - value, - id: `custom${customMetadataIdCounter++}`, - }; - - base.updateParameter('customMetadata', [ - ...base.parameters.customMetadata, - newEntry, - ]); - }; - - const removeCustomMetadata = (id: string) => { - base.updateParameter('customMetadata', - base.parameters.customMetadata.filter(entry => entry.id !== id) - ); - }; - - const updateCustomMetadata = (id: string, key: string, value: string) => { - base.updateParameter('customMetadata', - base.parameters.customMetadata.map(entry => - entry.id === id ? { ...entry, key, value } : entry - ) - ); - }; + // Use the utility functions with the hook's parameters and updateParameter + const { addCustomMetadata, removeCustomMetadata, updateCustomMetadata } = createCustomMetadataFunctions( + base.parameters, + base.updateParameter, + ); return { ...base,