1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- '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
|