'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 { OperationAction, StatusItem } from '../list' import s from '../style.module.css' import Completed from './completed' import Embedding from './embedding' import Metadata from './metadata' import style from './style.module.css' import Divider from '@/app/components/base/divider' import Loading from '@/app/components/base/loading' import type { MetadataType } from '@/service/datasets' import { fetchDocumentDetail } from '@/service/datasets' export const BackCircleBtn: FC<{ onClick: () => void }> = ({ onClick }) => { return (
) } export const DocumentContext = createContext<{ datasetId?: string; documentId?: string; docForm: string }>({ docForm: '' }) 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 [showNewSegmentModal, setShowNewSegmentModal] = useState(false) 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()) const handleOperate = (operateName?: string) => { if (operateName === 'delete') backToPrev() else detailMutate() } return (
setShowNewSegmentModal(true)} />
{isDetailLoading ? :
{embedding ? : }
} {showMetadata && }
) } export default DocumentDetail