import React, { type FC, useMemo, useState } from 'react' import { useTranslation } from 'react-i18next' import { RiCloseLine, RiCollapseDiagonalLine, RiExpandDiagonalLine, } from '@remixicon/react' import ActionButtons from './common/action-buttons' import ChunkContent from './common/chunk-content' import Dot from './common/dot' import { SegmentIndexTag } from './common/segment-index-tag' import { useSegmentListContext } from './index' import type { ChildChunkDetail, ChunkingMode } from '@/models/datasets' import { useEventEmitterContextContext } from '@/context/event-emitter' import { formatNumber } from '@/utils/format' import classNames from '@/utils/classnames' import Divider from '@/app/components/base/divider' import { formatTime } from '@/utils/time' type IChildSegmentDetailProps = { chunkId: string childChunkInfo?: Partial & { id: string } onUpdate: (segmentId: string, childChunkId: string, content: string) => void onCancel: () => void docForm: ChunkingMode } /** * Show all the contents of the segment */ const ChildSegmentDetail: FC = ({ chunkId, childChunkInfo, onUpdate, onCancel, docForm, }) => { const { t } = useTranslation() const [content, setContent] = useState(childChunkInfo?.content || '') const { eventEmitter } = useEventEmitterContextContext() const [loading, setLoading] = useState(false) const fullScreen = useSegmentListContext(s => s.fullScreen) const toggleFullScreen = useSegmentListContext(s => s.toggleFullScreen) eventEmitter?.useSubscription((v) => { if (v === 'update-child-segment') setLoading(true) if (v === 'update-child-segment-done') setLoading(false) }) const handleCancel = () => { onCancel() } const handleSave = () => { onUpdate(chunkId, childChunkInfo?.id || '', content) } const wordCountText = useMemo(() => { const count = content.length return `${formatNumber(count)} ${t('datasetDocuments.segment.characters', { count })}` // eslint-disable-next-line react-hooks/exhaustive-deps }, [content.length]) const EditTimeText = useMemo(() => { const timeText = formatTime({ date: (childChunkInfo?.updated_at ?? 0) * 1000, dateFormat: 'MM/DD/YYYY h:mm:ss', }) return `${t('datasetDocuments.segment.editedAt')} ${timeText}` // eslint-disable-next-line react-hooks/exhaustive-deps }, [childChunkInfo?.updated_at]) return (
{t('datasetDocuments.segment.editChildChunk')}
{wordCountText} {EditTimeText}
{fullScreen && ( <> )}
{fullScreen ? : }
setContent(content)} isEditMode={true} />
{!fullScreen && (
)}
) } export default React.memo(ChildSegmentDetail)