'use client' // Libraries import { useEffect, useMemo, useRef, useState } from 'react' import { useRouter } from 'next/navigation' import { useTranslation } from 'react-i18next' import { useDebounceFn } from 'ahooks' // Components import ExternalAPIPanel from '@/app/components/datasets/external-api/external-api-panel' import Datasets from './Datasets' import Database from './Database' import DatasetFooter from './DatasetFooter' import ApiServer from './ApiServer' import Doc from './Doc' import TabSliderNew from '@/app/components/base/tab-slider-new' import TagManagementModal from '@/app/components/base/tag-management' import TagFilter from '@/app/components/base/tag-management/filter' import Button from '@/app/components/base/button' import { ApiConnectionMod } from '@/app/components/base/icons/src/vender/solid/development' import SearchInput from '@/app/components/base/search-input' // Services import { fetchDatasetApiBaseUrl } from '@/service/datasets' // Hooks import { useTabSearchParams } from '@/hooks/use-tab-searchparams' import { useStore as useTagStore } from '@/app/components/base/tag-management/store' import { useAppContext } from '@/context/app-context' import { useExternalApiPanel } from '@/context/external-api-panel-context' // eslint-disable-next-line import/order import { useQuery } from '@tanstack/react-query' const Container = () => { const { t } = useTranslation() const router = useRouter() const { currentWorkspace } = useAppContext() const showTagManagementModal = useTagStore(s => s.showTagManagementModal) const { showExternalApiPanel, setShowExternalApiPanel } = useExternalApiPanel() const options = useMemo(() => { return [ { value: 'dataset', text: t('dataset.database') }, // ...(currentWorkspace.role === 'dataset_operator' ? [] : [{ value: 'api', text: t('dataset.datasetsApi') }]), ] }, [currentWorkspace.role, t]) const [activeTab, setActiveTab] = useTabSearchParams({ defaultTab: 'dataset', }) const containerRef = useRef(null) const { data } = useQuery( { queryKey: ['datasetApiBaseInfo'], queryFn: () => fetchDatasetApiBaseUrl('/datasets/api-base-info'), enabled: activeTab !== 'dataset', }, ) const [keywords, setKeywords] = useState('') const [searchKeywords, setSearchKeywords] = useState('') const { run: handleSearch } = useDebounceFn(() => { setSearchKeywords(keywords) }, { wait: 500 }) const handleKeywordsChange = (value: string) => { setKeywords(value) handleSearch() } const [tagFilterValue, setTagFilterValue] = useState([]) const [tagIDs, setTagIDs] = useState([]) const { run: handleTagsUpdate } = useDebounceFn(() => { setTagIDs(tagFilterValue) }, { wait: 500 }) const handleTagsChange = (value: string[]) => { setTagFilterValue(value) handleTagsUpdate() } useEffect(() => { if (currentWorkspace.role === 'normal') return router.replace('/apps') }, [currentWorkspace, router]) return ( // 数据库主页面
setActiveTab(newActiveTab)} options={options} /> {activeTab === 'dataset' && (
{/* */}
)} {/* {activeTab === 'api' && data && } */}
{activeTab === 'dataset' && ( <> {/* */} {showTagManagementModal && ( )} )} {/* {activeTab === 'api' && data && } */} {showExternalApiPanel && setShowExternalApiPanel(false)} />}
) } export default Container