/* eslint-disable no-mixed-operators */ 'use client' import type { FC } from 'react' import React, { useEffect, useState } from 'react' import { ArrowDownIcon, TrashIcon } from '@heroicons/react/24/outline' import { ExclamationCircleIcon } from '@heroicons/react/24/solid' import dayjs from 'dayjs' import { pick } from 'lodash-es' import { useContext } from 'use-context-selector' import { useRouter } from 'next/navigation' import { useTranslation } from 'react-i18next' import cn from 'classnames' import s from './style.module.css' import Switch from '@/app/components/base/switch' import Divider from '@/app/components/base/divider' import Popover from '@/app/components/base/popover' import Modal from '@/app/components/base/modal' import Button from '@/app/components/base/button' import Tooltip from '@/app/components/base/tooltip' import { ToastContext } from '@/app/components/base/toast' import type { IndicatorProps } from '@/app/components/header/indicator' import Indicator from '@/app/components/header/indicator' import { asyncRunSafe } from '@/utils' import { formatNumber } from '@/utils/format' import { archiveDocument, deleteDocument, disableDocument, enableDocument, syncDocument } from '@/service/datasets' import NotionIcon from '@/app/components/base/notion-icon' import ProgressBar from '@/app/components/base/progress-bar' import { DataSourceType, type DocumentDisplayStatus, type SimpleDocumentDetail } from '@/models/datasets' import type { CommonResponse } from '@/models/common' import { FilePlus02 } from '@/app/components/base/icons/src/vender/line/files' export const SettingsIcon: FC<{ className?: string }> = ({ className }) => { return } export const SyncIcon: FC<{ className?: string }> = () => { return } export const FilePlusIcon: FC<{ className?: string }> = ({ className }) => { return } export const ArchiveIcon: FC<{ className?: string }> = ({ className }) => { return } export const useIndexStatus = () => { const { t } = useTranslation() return { queuing: { color: 'orange', text: t('datasetDocuments.list.status.queuing') }, // waiting indexing: { color: 'blue', text: t('datasetDocuments.list.status.indexing') }, // indexing splitting parsing cleaning paused: { color: 'orange', text: t('datasetDocuments.list.status.paused') }, // paused error: { color: 'red', text: t('datasetDocuments.list.status.error') }, // error available: { color: 'green', text: t('datasetDocuments.list.status.available') }, // completed,archived = false,enabled = true enabled: { color: 'green', text: t('datasetDocuments.list.status.enabled') }, // completed,archived = false,enabled = true disabled: { color: 'gray', text: t('datasetDocuments.list.status.disabled') }, // completed,archived = false,enabled = false archived: { color: 'gray', text: t('datasetDocuments.list.status.archived') }, // completed,archived = true } } // status item for list export const StatusItem: FC<{ status: DocumentDisplayStatus reverse?: boolean scene?: 'list' | 'detail' textCls?: string }> = ({ status, reverse = false, scene = 'list', textCls = '' }) => { const DOC_INDEX_STATUS_MAP = useIndexStatus() const localStatus = status.toLowerCase() as keyof typeof DOC_INDEX_STATUS_MAP return
# | {t('datasetDocuments.list.table.header.fileName')} | {t('datasetDocuments.list.table.header.words')} | {t('datasetDocuments.list.table.header.hitCount')} |
{t('datasetDocuments.list.table.header.uploadTime')}
|
{t('datasetDocuments.list.table.header.status')} | {t('datasetDocuments.list.table.header.action')} |
{doc.position} |
{
doc?.data_source_type === DataSourceType.NOTION
? |
{renderCount(doc.word_count)} | {renderCount(doc.hit_count)} | {dayjs.unix(doc.created_at).format(t('datasetHitTesting.dateTimeFormat') as string)} |
{
(['indexing', 'splitting', 'parsing', 'cleaning'].includes(doc.indexing_status) && doc?.data_source_type === DataSourceType.NOTION)
? |
|