mirror of
https://git.mirrors.martin98.com/https://github.com/langgenius/dify.git
synced 2025-08-12 21:39:05 +08:00
fix: choose dataset not selected after one page (#481)
This commit is contained in:
parent
df68a7c82b
commit
db4e6d81c5
@ -5,6 +5,7 @@ import { useTranslation } from 'react-i18next'
|
|||||||
import { useContext } from 'use-context-selector'
|
import { useContext } from 'use-context-selector'
|
||||||
import { useBoolean } from 'ahooks'
|
import { useBoolean } from 'ahooks'
|
||||||
import { isEqual } from 'lodash-es'
|
import { isEqual } from 'lodash-es'
|
||||||
|
import produce from 'immer'
|
||||||
import FeaturePanel from '../base/feature-panel'
|
import FeaturePanel from '../base/feature-panel'
|
||||||
import OperationBtn from '../base/operation-btn'
|
import OperationBtn from '../base/operation-btn'
|
||||||
import CardItem from './card-item'
|
import CardItem from './card-item'
|
||||||
@ -31,11 +32,27 @@ const DatasetConfig: FC = () => {
|
|||||||
const hasData = dataSet.length > 0
|
const hasData = dataSet.length > 0
|
||||||
const [isShowSelectDataSet, { setTrue: showSelectDataSet, setFalse: hideSelectDataSet }] = useBoolean(false)
|
const [isShowSelectDataSet, { setTrue: showSelectDataSet, setFalse: hideSelectDataSet }] = useBoolean(false)
|
||||||
const handleSelect = (data: DataSet[]) => {
|
const handleSelect = (data: DataSet[]) => {
|
||||||
if (isEqual(data, dataSet))
|
if (isEqual(data.map(item => item.id), dataSet.map(item => item.id))) {
|
||||||
hideSelectDataSet()
|
hideSelectDataSet()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
setFormattingChanged(true)
|
setFormattingChanged(true)
|
||||||
setDataSet(data)
|
if (data.find(item => !item.name)) { // has not loaded selected dataset
|
||||||
|
const newSelected = produce(data, (draft) => {
|
||||||
|
data.forEach((item, index) => {
|
||||||
|
if (!item.name) { // not fetched database
|
||||||
|
const newItem = dataSet.find(i => i.id === item.id)
|
||||||
|
if (newItem)
|
||||||
|
draft[index] = newItem
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
setDataSet(newSelected)
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
setDataSet(data)
|
||||||
|
}
|
||||||
hideSelectDataSet()
|
hideSelectDataSet()
|
||||||
}
|
}
|
||||||
const onRemove = (id: string) => {
|
const onRemove = (id: string) => {
|
||||||
|
@ -5,6 +5,7 @@ import { useGetState, useInfiniteScroll } from 'ahooks'
|
|||||||
import cn from 'classnames'
|
import cn from 'classnames'
|
||||||
import { useTranslation } from 'react-i18next'
|
import { useTranslation } from 'react-i18next'
|
||||||
import Link from 'next/link'
|
import Link from 'next/link'
|
||||||
|
import produce from 'immer'
|
||||||
import TypeIcon from '../type-icon'
|
import TypeIcon from '../type-icon'
|
||||||
import s from './style.module.css'
|
import s from './style.module.css'
|
||||||
import Modal from '@/app/components/base/modal'
|
import Modal from '@/app/components/base/modal'
|
||||||
@ -28,7 +29,7 @@ const SelectDataSet: FC<ISelectDataSetProps> = ({
|
|||||||
onSelect,
|
onSelect,
|
||||||
}) => {
|
}) => {
|
||||||
const { t } = useTranslation()
|
const { t } = useTranslation()
|
||||||
const [selected, setSelected] = React.useState<DataSet[]>([])
|
const [selected, setSelected] = React.useState<DataSet[]>(selectedIds.map(id => ({ id }) as any))
|
||||||
const [loaded, setLoaded] = React.useState(false)
|
const [loaded, setLoaded] = React.useState(false)
|
||||||
const [datasets, setDataSets] = React.useState<DataSet[] | null>(null)
|
const [datasets, setDataSets] = React.useState<DataSet[] | null>(null)
|
||||||
const hasNoData = !datasets || datasets?.length === 0
|
const hasNoData = !datasets || datasets?.length === 0
|
||||||
@ -47,7 +48,19 @@ const SelectDataSet: FC<ISelectDataSetProps> = ({
|
|||||||
const newList = [...(datasets || []), ...data]
|
const newList = [...(datasets || []), ...data]
|
||||||
setDataSets(newList)
|
setDataSets(newList)
|
||||||
setLoaded(true)
|
setLoaded(true)
|
||||||
setSelected(newList.filter(item => selectedIds.includes(item.id)))
|
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)
|
||||||
}
|
}
|
||||||
return { list: [] }
|
return { list: [] }
|
||||||
},
|
},
|
||||||
|
Loading…
x
Reference in New Issue
Block a user