Fix: Metadata bugs. (#12111)

### What problem does this PR solve?

Fix: Metadata bugs.

### Type of change

- [x] Bug Fix (non-breaking change which fixes an issue)

---------

Co-authored-by: Kevin Hu <kevinhu.sh@gmail.com>
This commit is contained in:
chanx
2025-12-23 14:16:57 +08:00
committed by GitHub
parent d1bc7ad2ee
commit 8e6ddd7c1b
20 changed files with 184 additions and 63 deletions

View File

@ -198,20 +198,24 @@ export const useManageMetaDataModal = (
const { setDocumentMeta } = useSetDocumentMeta();
useEffect(() => {
if (data) {
setTableData(data);
} else {
setTableData([]);
if (type === MetadataType.Manage) {
if (data) {
setTableData(data);
} else {
setTableData([]);
}
}
}, [data]);
}, [data, type]);
useEffect(() => {
if (metaData) {
setTableData(metaData);
} else {
setTableData([]);
if (type !== MetadataType.Manage) {
if (metaData) {
setTableData(metaData);
} else {
setTableData([]);
}
}
}, [metaData]);
}, [metaData, type]);
const handleDeleteSingleValue = useCallback(
(field: string, value: string) => {

View File

@ -54,7 +54,6 @@ export const ManageMetadataModal = (props: IManageModalProps) => {
values: [],
});
const [currentValueIndex, setCurrentValueIndex] = useState<number>(0);
const [deleteDialogContent, setDeleteDialogContent] = useState({
visible: false,
title: '',
@ -95,12 +94,12 @@ export const ManageMetadataModal = (props: IManageModalProps) => {
description: '',
values: [],
});
setCurrentValueIndex(tableData.length || 0);
// setCurrentValueIndex(tableData.length || 0);
showManageValuesModal();
};
const handleEditValueRow = useCallback(
(data: IMetaDataTableData, index: number) => {
setCurrentValueIndex(index);
(data: IMetaDataTableData) => {
// setCurrentValueIndex(index);
setValueData(data);
showManageValuesModal();
},
@ -186,7 +185,7 @@ export const ManageMetadataModal = (props: IManageModalProps) => {
variant={'ghost'}
className="bg-transparent px-1 py-0"
onClick={() => {
handleEditValueRow(row.original, row.index);
handleEditValueRow(row.original);
}}
>
<Settings />
@ -244,16 +243,32 @@ export const ManageMetadataModal = (props: IManageModalProps) => {
const handleSaveValues = (data: IMetaDataTableData) => {
setTableData((prev) => {
if (currentValueIndex >= prev.length) {
return [...prev, data];
//If the keys are the same, they need to be merged.
const fieldMap = new Map<string, any>();
prev.forEach((item) => {
if (fieldMap.has(item.field)) {
const existingItem = fieldMap.get(item.field);
const mergedValues = [
...new Set([...existingItem.values, ...item.values]),
];
fieldMap.set(item.field, { ...existingItem, values: mergedValues });
} else {
fieldMap.set(item.field, item);
}
});
if (fieldMap.has(data.field)) {
const existingItem = fieldMap.get(data.field);
const mergedValues = [
...new Set([...existingItem.values, ...data.values]),
];
fieldMap.set(data.field, { ...existingItem, values: mergedValues });
} else {
return prev.map((item, index) => {
if (index === currentValueIndex) {
return data;
}
return item;
});
fieldMap.set(data.field, data);
}
return Array.from(fieldMap.values());
});
};

View File

@ -110,8 +110,8 @@ export const ManageValuesModal = (props: IManageValuesProps) => {
// Handle blur event, synchronize to main state
const handleValueBlur = useCallback(() => {
addUpdateValue(metaData.field, [...tempValues]);
handleChange('values', [...tempValues]);
addUpdateValue(metaData.field, [...new Set([...tempValues])]);
handleChange('values', [...new Set([...tempValues])]);
}, [handleChange, tempValues, metaData, addUpdateValue]);
// Handle delete operation
@ -139,12 +139,12 @@ export const ManageValuesModal = (props: IManageValuesProps) => {
// Handle adding new value
const handleAddValue = useCallback(() => {
setTempValues((prev) => [...prev, '']);
setTempValues((prev) => [...new Set([...prev, ''])]);
// Synchronize to main state
setMetaData((prev) => ({
...prev,
values: [...prev.values, ''],
values: [...new Set([...prev.values, ''])],
}));
}, []);