'use client' import type { FC } from 'react' import React from 'react' import { useTranslation } from 'react-i18next' import { RiArrowDownSLine, RiArrowRightSLine } from '@remixicon/react' import { useBoolean } from 'ahooks' import ChildChunkItem from './child-chunks-item' import ChunkDetailModal from './chunk-detail-modal' import ResultItemMeta from './result-item-meta' import ResultItemFooter from './result-item-footer' import type { HitTesting } from '@/models/datasets' import cn from '@/utils/classnames' import type { FileAppearanceTypeEnum } from '@/app/components/base/file-uploader/types' import Tag from '@/app/components/datasets/documents/detail/completed/common/tag' import { extensionToFileType } from '@/app/components/datasets/hit-testing/utils/extension-to-file-type' import { Markdown } from '@/app/components/base/markdown' const i18nPrefix = 'datasetHitTesting' type Props = { payload: HitTesting } const ResultItem: FC = ({ payload, }) => { const { t } = useTranslation() const { segment, score, child_chunks } = payload const data = segment const { position, word_count, content, sign_content, keywords, document } = data const isParentChildRetrieval = !!(child_chunks && child_chunks.length > 0) const extension = document.name.split('.').slice(-1)[0] as FileAppearanceTypeEnum const fileType = extensionToFileType(extension) const [isFold, { toggle: toggleFold, }] = useBoolean(false) const Icon = isFold ? RiArrowRightSLine : RiArrowDownSLine const [isShowDetailModal, { setTrue: showDetailModal, setFalse: hideDetailModal, }] = useBoolean(false) return (
{/* Meta info */} {/* Main */}
{isParentChildRetrieval && (
{ e.stopPropagation() toggleFold() }} >
{t(`${i18nPrefix}.hitChunks`, { num: child_chunks.length })}
{!isFold && (
{child_chunks.map(item => (
))}
)}
)} {!isParentChildRetrieval && keywords && keywords.length > 0 && (
{keywords.map(keyword => ( ))}
)}
{/* Foot */} { isShowDetailModal && ( ) }
) } export default React.memo(ResultItem)