import type { FC } from 'react' import type { IndexingStatusResponse } from '@/models/datasets' import { RiCheckboxCircleFill, RiErrorWarningFill, } from '@remixicon/react' import NotionIcon from '@/app/components/base/notion-icon' import Tooltip from '@/app/components/base/tooltip' import PriorityLabel from '@/app/components/billing/priority-label' import { DataSourceType } from '@/models/datasets' import { cn } from '@/utils/classnames' import DocumentFileIcon from '../../common/document-file-icon' import { getFileType, getSourcePercent, isSourceEmbedding } from './utils' type IndexingProgressItemProps = { detail: IndexingStatusResponse name?: string sourceType?: DataSourceType notionIcon?: string enableBilling?: boolean } // Status icon component for completed/error states const StatusIcon: FC<{ status: string, error?: string }> = ({ status, error }) => { if (status === 'completed') return if (status === 'error') { return ( ) } return null } // Source type icon component const SourceTypeIcon: FC<{ sourceType?: DataSourceType name?: string notionIcon?: string }> = ({ sourceType, name, notionIcon }) => { if (sourceType === DataSourceType.FILE) { return ( ) } if (sourceType === DataSourceType.NOTION) { return ( ) } return null } const IndexingProgressItem: FC = ({ detail, name, sourceType, notionIcon, enableBilling, }) => { const isEmbedding = isSourceEmbedding(detail) const percent = getSourcePercent(detail) const isError = detail.indexing_status === 'error' return (
{isEmbedding && (
)}
{name}
{enableBilling && }
{isEmbedding && (
{`${percent}%`}
)}
) } export default IndexingProgressItem