fix: resolve cross-page document selection issue in metadata batch edit (#23000)
Co-authored-by: crazywoola <427733928@qq.com>
This commit is contained in:
@@ -164,7 +164,6 @@ const Documents: FC<IDocumentsProps> = ({ datasetId }) => {
|
|||||||
if (totalPages < currPage + 1)
|
if (totalPages < currPage + 1)
|
||||||
setCurrPage(totalPages === 0 ? 0 : totalPages - 1)
|
setCurrPage(totalPages === 0 ? 0 : totalPages - 1)
|
||||||
}
|
}
|
||||||
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
||||||
}, [documentsRes])
|
}, [documentsRes])
|
||||||
|
|
||||||
const invalidDocumentDetail = useInvalidDocumentDetailKey()
|
const invalidDocumentDetail = useInvalidDocumentDetailKey()
|
||||||
@@ -178,7 +177,6 @@ const Documents: FC<IDocumentsProps> = ({ datasetId }) => {
|
|||||||
invalidChunkList()
|
invalidChunkList()
|
||||||
invalidChildChunkList()
|
invalidChildChunkList()
|
||||||
}, 5000)
|
}, 5000)
|
||||||
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
||||||
}, [])
|
}, [])
|
||||||
|
|
||||||
const documentsWithProgress = useMemo(() => {
|
const documentsWithProgress = useMemo(() => {
|
||||||
@@ -273,6 +271,13 @@ const Documents: FC<IDocumentsProps> = ({ datasetId }) => {
|
|||||||
|
|
||||||
const documentsList = isDataSourceNotion ? documentsWithProgress?.data : documentsRes?.data
|
const documentsList = isDataSourceNotion ? documentsWithProgress?.data : documentsRes?.data
|
||||||
const [selectedIds, setSelectedIds] = useState<string[]>([])
|
const [selectedIds, setSelectedIds] = useState<string[]>([])
|
||||||
|
|
||||||
|
// Clear selection when search changes to avoid confusion
|
||||||
|
useEffect(() => {
|
||||||
|
if (searchValue !== query.keyword)
|
||||||
|
setSelectedIds([])
|
||||||
|
}, [searchValue, query.keyword])
|
||||||
|
|
||||||
const { run: handleSearch } = useDebounceFn(() => {
|
const { run: handleSearch } = useDebounceFn(() => {
|
||||||
setSearchValue(inputValue)
|
setSearchValue(inputValue)
|
||||||
}, { wait: 500 })
|
}, { wait: 500 })
|
||||||
|
@@ -458,7 +458,8 @@ const DocumentList: FC<IDocumentListProps> = ({
|
|||||||
handleSave,
|
handleSave,
|
||||||
} = useBatchEditDocumentMetadata({
|
} = useBatchEditDocumentMetadata({
|
||||||
datasetId,
|
datasetId,
|
||||||
docList: documents.filter(item => selectedIds.includes(item.id)),
|
docList: documents.filter(doc => selectedIds.includes(doc.id)),
|
||||||
|
selectedDocumentIds: selectedIds, // Pass all selected IDs separately
|
||||||
onUpdate,
|
onUpdate,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@@ -9,12 +9,14 @@ import { t } from 'i18next'
|
|||||||
type Props = {
|
type Props = {
|
||||||
datasetId: string
|
datasetId: string
|
||||||
docList: SimpleDocumentDetail[]
|
docList: SimpleDocumentDetail[]
|
||||||
|
selectedDocumentIds?: string[]
|
||||||
onUpdate: () => void
|
onUpdate: () => void
|
||||||
}
|
}
|
||||||
|
|
||||||
const useBatchEditDocumentMetadata = ({
|
const useBatchEditDocumentMetadata = ({
|
||||||
datasetId,
|
datasetId,
|
||||||
docList,
|
docList,
|
||||||
|
selectedDocumentIds,
|
||||||
onUpdate,
|
onUpdate,
|
||||||
}: Props) => {
|
}: Props) => {
|
||||||
const [isShowEditModal, {
|
const [isShowEditModal, {
|
||||||
@@ -79,9 +81,12 @@ const useBatchEditDocumentMetadata = ({
|
|||||||
return false
|
return false
|
||||||
})
|
})
|
||||||
|
|
||||||
const res: MetadataBatchEditToServer = docList.map((item, i) => {
|
// Use selectedDocumentIds if available, otherwise fall back to docList
|
||||||
// the new metadata will override the old one
|
const documentIds = selectedDocumentIds || docList.map(doc => doc.id)
|
||||||
const oldMetadataList = metaDataList[i]
|
const res: MetadataBatchEditToServer = documentIds.map((documentId) => {
|
||||||
|
// Find the document in docList to get its metadata
|
||||||
|
const docIndex = docList.findIndex(doc => doc.id === documentId)
|
||||||
|
const oldMetadataList = docIndex >= 0 ? metaDataList[docIndex] : []
|
||||||
let newMetadataList: MetadataItemWithValue[] = [...oldMetadataList, ...addedList]
|
let newMetadataList: MetadataItemWithValue[] = [...oldMetadataList, ...addedList]
|
||||||
.filter((item) => {
|
.filter((item) => {
|
||||||
return !removedList.find(removedItem => removedItem.id === item.id)
|
return !removedList.find(removedItem => removedItem.id === item.id)
|
||||||
@@ -108,7 +113,7 @@ const useBatchEditDocumentMetadata = ({
|
|||||||
})
|
})
|
||||||
|
|
||||||
return {
|
return {
|
||||||
document_id: item.id,
|
document_id: documentId,
|
||||||
metadata_list: newMetadataList,
|
metadata_list: newMetadataList,
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
Reference in New Issue
Block a user