| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 | 'use client'import { useCallback } from 'react'import { useTranslation } from 'react-i18next'import { useParams, useRouter } from 'next/navigation'import useSWR from 'swr'import useSWRInfinite from 'swr/infinite'import { flatten } from 'lodash-es'import Nav from '../nav'import { Knowledge, KnowledgeActive } from '../../base/icons/src/public/header-nav/knowledge'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))  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={<Knowledge className='w-4 h-4' />}      activeIcon={<KnowledgeActive className='w-4 h-4' />}      text={t('common.menus.datasets')}      activeSegment='datasets'      link='/datasets'      curNav={currentDataset}      navs={datasetItems.map(dataset => ({        id: dataset.id,        name: dataset.name,        link: `/datasets/${dataset.id}/documents`,        icon: dataset.icon,        icon_background: dataset.icon_background,      }))}      createText={t('common.menus.newDataset')}      onCreate={() => router.push('/datasets/create')}      onLoadmore={handleLoadmore}    />  )}export default DatasetNav
 |