Files
bishengWeb/src/components/bs-comp/chatComponent/SourceEntry.tsx
zhangkai b825dcd4d5 1
2024-06-05 14:27:06 +08:00

47 lines
1.7 KiB
TypeScript

import { Badge } from "@/components/bs-ui/badge";
import { InfoCircledIcon } from "@radix-ui/react-icons";
import { useTranslation } from "react-i18next";
const enum SourceType {
/** 无溯源 */
NONE = 0,
/** 文件 */
FILE = 1,
/** 无权限 */
NO_PERMISSION = 2,
/** 链接s */
LINK = 3,
/** 已命中的QA */
HAS_QA = 4,
}
export default function SourceEntry({ extra, end, source, className = '', onSource }) {
const { t } = useTranslation()
if (source === SourceType.NONE || !end) return <div className={className}></div>
const extraObj = extra ? JSON.parse(extra) : null
return <div className={className}>
{(() => {
switch (source) {
case SourceType.FILE:
return <Badge className="cursor-pointer" onClick={onSource}>{t('chat.source')}</Badge>;
case SourceType.NO_PERMISSION:
return <p className="flex text-xs text-gray-400 gap-1 items-center"><InfoCircledIcon className="text-red-300" />{t('chat.noAccess')}</p>;
case SourceType.LINK:
return (
<div className="flex flex-col text-blue-500 text-xs">
{
extraObj.doc?.map(el => <a key={el.url} href={el.url} target="_blank">{el.title}</a>)
}
</div>
);
case SourceType.HAS_QA:
return <a href={extraObj.url} target="_blank" className="text-blue-500 text-xs">{extraObj.qa}</a>;
default:
return null;
}
})()}
</div>
};