mirror of
https://git.mirrors.martin98.com/https://github.com/langgenius/dify.git
synced 2025-08-12 03:29:01 +08:00
fix: dataset can only choose first page data (#425)
Support infinite scroll loader data.
This commit is contained in:
parent
8b39e48957
commit
bea382f0dc
@ -1,6 +1,7 @@
|
|||||||
'use client'
|
'use client'
|
||||||
import type { FC } from 'react'
|
import type { FC } from 'react'
|
||||||
import React, { useEffect } from 'react'
|
import React, { useRef, useState } from 'react'
|
||||||
|
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'
|
||||||
@ -32,14 +33,33 @@ const SelectDataSet: FC<ISelectDataSetProps> = ({
|
|||||||
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
|
||||||
const canSelectMulti = true
|
const canSelectMulti = true
|
||||||
useEffect(() => {
|
|
||||||
(async () => {
|
const listRef = useRef<HTMLDivElement>(null)
|
||||||
const { data } = await fetchDatasets({ url: '/datasets', params: { page: 1 } })
|
const [page, setPage, getPage] = useGetState(1)
|
||||||
setDataSets(data)
|
const [isNoMore, setIsNoMore] = useState(false)
|
||||||
setLoaded(true)
|
|
||||||
setSelected(data.filter(item => selectedIds.includes(item.id)))
|
useInfiniteScroll(
|
||||||
})()
|
async () => {
|
||||||
}, [])
|
if (!isNoMore) {
|
||||||
|
const { data, has_more } = await fetchDatasets({ url: '/datasets', params: { page } })
|
||||||
|
setPage(getPage() + 1)
|
||||||
|
setIsNoMore(!has_more)
|
||||||
|
const newList = [...(datasets || []), ...data]
|
||||||
|
setDataSets(newList)
|
||||||
|
setLoaded(true)
|
||||||
|
setSelected(newList.filter(item => selectedIds.includes(item.id)))
|
||||||
|
}
|
||||||
|
return { list: [] }
|
||||||
|
},
|
||||||
|
{
|
||||||
|
target: listRef,
|
||||||
|
isNoMore: () => {
|
||||||
|
return isNoMore
|
||||||
|
},
|
||||||
|
reloadDeps: [isNoMore],
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
const toggleSelect = (dataSet: DataSet) => {
|
const toggleSelect = (dataSet: DataSet) => {
|
||||||
const isSelected = selected.some(item => item.id === dataSet.id)
|
const isSelected = selected.some(item => item.id === dataSet.id)
|
||||||
if (isSelected) {
|
if (isSelected) {
|
||||||
@ -83,7 +103,7 @@ const SelectDataSet: FC<ISelectDataSetProps> = ({
|
|||||||
|
|
||||||
{datasets && datasets?.length > 0 && (
|
{datasets && datasets?.length > 0 && (
|
||||||
<>
|
<>
|
||||||
<div className='mt-7 space-y-1 max-h-[286px] overflow-y-auto'>
|
<div ref={listRef} className='mt-7 space-y-1 max-h-[286px] overflow-y-auto'>
|
||||||
{datasets.map(item => (
|
{datasets.map(item => (
|
||||||
<div
|
<div
|
||||||
key={item.id}
|
key={item.id}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user