Co-authored-by: crazywoola <427733928@qq.com>tags/1.7.1
| @@ -164,7 +164,6 @@ const Documents: FC<IDocumentsProps> = ({ datasetId }) => { | |||
| if (totalPages < currPage + 1) | |||
| setCurrPage(totalPages === 0 ? 0 : totalPages - 1) | |||
| } | |||
| // eslint-disable-next-line react-hooks/exhaustive-deps | |||
| }, [documentsRes]) | |||
| const invalidDocumentDetail = useInvalidDocumentDetailKey() | |||
| @@ -178,7 +177,6 @@ const Documents: FC<IDocumentsProps> = ({ datasetId }) => { | |||
| invalidChunkList() | |||
| invalidChildChunkList() | |||
| }, 5000) | |||
| // eslint-disable-next-line react-hooks/exhaustive-deps | |||
| }, []) | |||
| const documentsWithProgress = useMemo(() => { | |||
| @@ -273,6 +271,13 @@ const Documents: FC<IDocumentsProps> = ({ datasetId }) => { | |||
| const documentsList = isDataSourceNotion ? documentsWithProgress?.data : documentsRes?.data | |||
| 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(() => { | |||
| setSearchValue(inputValue) | |||
| }, { wait: 500 }) | |||
| @@ -458,7 +458,8 @@ const DocumentList: FC<IDocumentListProps> = ({ | |||
| handleSave, | |||
| } = useBatchEditDocumentMetadata({ | |||
| 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, | |||
| }) | |||
| @@ -9,12 +9,14 @@ import { t } from 'i18next' | |||
| type Props = { | |||
| datasetId: string | |||
| docList: SimpleDocumentDetail[] | |||
| selectedDocumentIds?: string[] | |||
| onUpdate: () => void | |||
| } | |||
| const useBatchEditDocumentMetadata = ({ | |||
| datasetId, | |||
| docList, | |||
| selectedDocumentIds, | |||
| onUpdate, | |||
| }: Props) => { | |||
| const [isShowEditModal, { | |||
| @@ -79,9 +81,12 @@ const useBatchEditDocumentMetadata = ({ | |||
| return false | |||
| }) | |||
| const res: MetadataBatchEditToServer = docList.map((item, i) => { | |||
| // the new metadata will override the old one | |||
| const oldMetadataList = metaDataList[i] | |||
| // Use selectedDocumentIds if available, otherwise fall back to docList | |||
| const documentIds = selectedDocumentIds || docList.map(doc => doc.id) | |||
| 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] | |||
| .filter((item) => { | |||
| return !removedList.find(removedItem => removedItem.id === item.id) | |||
| @@ -108,7 +113,7 @@ const useBatchEditDocumentMetadata = ({ | |||
| }) | |||
| return { | |||
| document_id: item.id, | |||
| document_id: documentId, | |||
| metadata_list: newMetadataList, | |||
| } | |||
| }) | |||