Spaces:
Build error
Build error
'use client' | |
import { useCallback } from 'react' | |
import { useTranslation } from 'react-i18next' | |
import { useParams, useRouter } from 'next/navigation' | |
import { | |
RiBook2Fill, | |
RiBook2Line, | |
} from '@remixicon/react' | |
import useSWR from 'swr' | |
import useSWRInfinite from 'swr/infinite' | |
import { flatten } from 'lodash-es' | |
import Nav from '../nav' | |
import type { NavItem } from '../nav/nav-selector' | |
import { fetchDatasetDetail, fetchDatasets } from '@/service/datasets' | |
import type { DataSetListResponse } from '@/models/datasets' | |
const getKey = (pageIndex: number, previousPageData: DataSetListResponse) => { | |
if (!pageIndex || previousPageData.has_more) | |
return { url: 'datasets', params: { page: pageIndex + 1, limit: 30 } } | |
return null | |
} | |
const DatasetNav = () => { | |
const { t } = useTranslation() | |
const router = useRouter() | |
const { datasetId } = useParams() | |
const { data: currentDataset } = useSWR( | |
datasetId | |
? { | |
url: 'fetchDatasetDetail', | |
datasetId, | |
} | |
: null, | |
apiParams => fetchDatasetDetail(apiParams.datasetId as string)) | |
const { data: datasetsData, setSize } = useSWRInfinite(datasetId ? getKey : () => null, fetchDatasets, { revalidateFirstPage: false, revalidateAll: true }) | |
const datasetItems = flatten(datasetsData?.map(datasetData => datasetData.data)) | |
const handleLoadmore = useCallback(() => { | |
setSize(size => size + 1) | |
}, [setSize]) | |
return ( | |
<Nav | |
icon={<RiBook2Line className='w-4 h-4' />} | |
activeIcon={<RiBook2Fill className='w-4 h-4' />} | |
text={t('common.menus.datasets')} | |
activeSegment='datasets' | |
link='/datasets' | |
curNav={currentDataset as Omit<NavItem, 'link'>} | |
navs={datasetItems.map(dataset => ({ | |
id: dataset.id, | |
name: dataset.name, | |
link: dataset.provider === 'external' ? `/datasets/${dataset.id}/hitTesting` : `/datasets/${dataset.id}/documents`, | |
icon: dataset.icon, | |
icon_background: dataset.icon_background, | |
})) as NavItem[]} | |
createText={t('common.menus.newDataset')} | |
onCreate={() => router.push('/datasets/create')} | |
onLoadmore={handleLoadmore} | |
/> | |
) | |
} | |
export default DatasetNav | |