'use client' import type { FC } from 'react' import React, { useState } from 'react' import useSWR from 'swr' import { ArrowLeftIcon } from '@heroicons/react/24/solid' import { createContext } from 'use-context-selector' import { useTranslation } from 'react-i18next' import { useRouter } from 'next/navigation' import { omit } from 'lodash-es' import cn from 'classnames' import Divider from '@/app/components/base/divider' import Loading from '@/app/components/base/loading' import { fetchDocumentDetail, MetadataType } from '@/service/datasets' import { OperationAction, StatusItem } from '../list' import Completed from './completed' import Embedding from './embedding' import Metadata from './metadata' import s from '../style.module.css' import style from './style.module.css' export const BackCircleBtn: FC<{ onClick: () => void }> = ({ onClick }) => { return (
) } export const DocumentContext = createContext<{ datasetId?: string; documentId?: string }>({}) type DocumentTitleProps = { extension?: string; name?: string; iconCls?: string; textCls?: string; wrapperCls?: string; } export const DocumentTitle: FC = ({ extension, name, iconCls, textCls, wrapperCls }) => { const localExtension = extension?.toLowerCase() || name?.split('.')?.pop()?.toLowerCase() return
{name || '--'}
} type Props = { datasetId: string documentId: string } const DocumentDetail: FC = ({ datasetId, documentId }) => { const { t } = useTranslation() const router = useRouter() const [showMetadata, setShowMetadata] = useState(true) const { data: documentDetail, error, mutate: detailMutate } = useSWR({ action: 'fetchDocumentDetail', datasetId, documentId, params: { metadata: 'without' as MetadataType } }, apiParams => fetchDocumentDetail(omit(apiParams, 'action'))) const { data: documentMetadata, error: metadataErr, mutate: metadataMutate } = useSWR({ action: 'fetchDocumentDetail', datasetId, documentId, params: { metadata: 'only' as MetadataType } }, apiParams => fetchDocumentDetail(omit(apiParams, 'action'))) const backToPrev = () => { router.push(`/datasets/${datasetId}/documents`) } const isDetailLoading = !documentDetail && !error const isMetadataLoading = !documentMetadata && !metadataErr const embedding = ['queuing', 'indexing', 'paused'].includes((documentDetail?.display_status || '').toLowerCase()) return (
{isDetailLoading ? :
{embedding ? : }
} {showMetadata && }
) } export default DocumentDetail