import { type FC, useEffect, useState } from 'react' import { useTranslation } from 'react-i18next' import { useParams } from 'react-router-dom' import { Skeleton, Space, Tooltip, Image } from 'antd'; import RbCard from '@/components/RbCard/Card' import { getPerceptualLastVisual, getPerceptualLastListen, getPerceptualLastText, } from '@/api/memory' interface PerceptualLastInfoItem { id: string; file_name: string; file_ext: string; file_path: string; storage_type: number; summary: string; keywords: string[]; topic: string; domain: string; created_time: number | string; scene: string[] speaker_count: number; section_count: number; } const KEYS = { last_visual: ['summary', 'keywords', 'topic', 'domain', 'scene'], last_listen: ['summary', 'keywords', 'topic', 'domain', 'speaker_count'], last_text: ['summary', 'keywords', 'topic', 'domain', 'section_count'], } const PerceptualLastInfo: FC<{ type: 'last_visual' | 'last_listen' | 'last_text' }> = ({ type }) => { const { t } = useTranslation() const { id } = useParams() const [loading, setLoading] = useState(false) const [data, setData] = useState({} as PerceptualLastInfoItem) useEffect(() => { if (!id) return getData() }, [id, type]) const getData = () => { if (!id || !type) return setLoading(true) const request = type === 'last_visual' ? getPerceptualLastVisual(id) : type === 'last_listen' ? getPerceptualLastListen(id) : getPerceptualLastText(id) request.then((res) => { const response = res as PerceptualLastInfoItem setData(response) setLoading(false) }) .finally(() => { setLoading(false) }) } return ( {loading ? :
{data.file_path ? ( type === 'last_visual' ? ( /\.(mp4|webm|ogg|mov)$/i.test(data.file_name) ? ( ) : /\.(jpg|jpeg|png|gif|webp|svg)$/i.test(data.file_name) ? ( {data.file_name} // {data.file_name} ) : (
{data.file_name}
) ) : type === 'last_listen' && /\.(mp3|wav|ogg|m4a|aac)$/i.test(data.file_name) ? ( ) : (
{data.file_name}
) ) : (
No file
)}
{KEYS[type].map(key => { const value = (data as any)[key] return (
{t(`perceptualDetail.${key}`)}
{key === 'summary' ? (
{typeof value === 'string' ? value : Array.isArray(value) ? value.join('、') : '-'}
) :
{typeof value === 'string' ? value : Array.isArray(value) ? value.join('、') : '-'}
}
) })}
}
) } export default PerceptualLastInfo