diff --git a/web/app/(commonLayout)/datasets/DatasetCard.tsx b/web/app/(commonLayout)/datasets/DatasetCard.tsx index 4b40be2c7f..3e59e2c9a1 100644 --- a/web/app/(commonLayout)/datasets/DatasetCard.tsx +++ b/web/app/(commonLayout)/datasets/DatasetCard.tsx @@ -5,6 +5,7 @@ import { useRouter } from 'next/navigation' import { useCallback, useEffect, useState } from 'react' import { useTranslation } from 'react-i18next' import { RiMoreFill } from '@remixicon/react' +import { mutate } from 'swr' import cn from '@/utils/classnames' import Confirm from '@/app/components/base/confirm' import { ToastContext } from '@/app/components/base/toast' @@ -57,6 +58,14 @@ const DatasetCard = ({ const onConfirmDelete = useCallback(async () => { try { await deleteDataset(dataset.id) + + // Clear SWR cache to prevent stale data in knowledge retrieval nodes + mutate( + key => typeof key === 'string' && key.includes('/datasets'), + undefined, + { revalidate: true } + ) + notify({ type: 'success', message: t('dataset.datasetDeleted') }) if (onSuccess) onSuccess() diff --git a/web/app/components/app/configuration/dataset-config/select-dataset/index.tsx b/web/app/components/app/configuration/dataset-config/select-dataset/index.tsx index ffdb714f08..9c2fcd9a98 100644 --- a/web/app/components/app/configuration/dataset-config/select-dataset/index.tsx +++ b/web/app/components/app/configuration/dataset-config/select-dataset/index.tsx @@ -30,7 +30,7 @@ const SelectDataSet: FC = ({ onSelect, }) => { const { t } = useTranslation() - const [selected, setSelected] = React.useState(selectedIds.map(id => ({ id }) as any)) + const [selected, setSelected] = React.useState([]) const [loaded, setLoaded] = React.useState(false) const [datasets, setDataSets] = React.useState(null) const hasNoData = !datasets || datasets?.length === 0 @@ -50,19 +50,14 @@ const SelectDataSet: FC = ({ const newList = [...(datasets || []), ...data.filter(item => item.indexing_technique || item.provider === 'external')] setDataSets(newList) setLoaded(true) - if (!selected.find(item => !item.name)) - return { list: [] } - - const newSelected = produce(selected, (draft) => { - selected.forEach((item, index) => { - if (!item.name) { // not fetched database - const newItem = newList.find(i => i.id === item.id) - if (newItem) - draft[index] = newItem - } - }) - }) - setSelected(newSelected) + + // Initialize selected datasets based on selectedIds and available datasets + if (selected.length === 0 && selectedIds.length > 0) { + const validSelectedDatasets = selectedIds + .map(id => newList.find(item => item.id === id)) + .filter(Boolean) as DataSet[] + setSelected(validSelectedDatasets) + } } return { list: [] } },