Просмотр исходного кода

fix: dataset can only choose first page data (#425)

Support infinite scroll loader data.
tags/0.3.5
Joel 2 лет назад
Родитель
Сommit
bea382f0dc
Аккаунт пользователя с таким Email не найден
1 измененных файлов: 30 добавлений и 10 удалений
  1. 30
    10
      web/app/components/app/configuration/dataset-config/select-dataset/index.tsx

+ 30
- 10
web/app/components/app/configuration/dataset-config/select-dataset/index.tsx Просмотреть файл

'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'
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 { data } = await fetchDatasets({ url: '/datasets', params: { page: 1 } })
setDataSets(data)
setLoaded(true)
setSelected(data.filter(item => selectedIds.includes(item.id)))
})()
}, [])

const listRef = useRef<HTMLDivElement>(null)
const [page, setPage, getPage] = useGetState(1)
const [isNoMore, setIsNoMore] = useState(false)

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) {


{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}

Загрузка…
Отмена
Сохранить