### What problem does this PR solve? #9869 ### Type of change - [x] New Feature (non-breaking change which adds functionality) --------- Signed-off-by: dependabot[bot] <support@github.com> Signed-off-by: jinhai <haijin.chn@gmail.com> Signed-off-by: Jin Hai <haijin.chn@gmail.com> Co-authored-by: chanx <1243304602@qq.com> Co-authored-by: balibabu <cike8899@users.noreply.github.com> Co-authored-by: Lynn <lynn_inf@hotmail.com> Co-authored-by: 纷繁下的无奈 <zhileihuang@126.com> Co-authored-by: huangzl <huangzl@shinemo.com> Co-authored-by: writinwaters <93570324+writinwaters@users.noreply.github.com> Co-authored-by: Wilmer <33392318@qq.com> Co-authored-by: Adrian Weidig <adrianweidig@gmx.net> Co-authored-by: Zhichang Yu <yuzhichang@gmail.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: Yongteng Lei <yongtengrey@outlook.com> Co-authored-by: Liu An <asiro@qq.com> Co-authored-by: buua436 <66937541+buua436@users.noreply.github.com> Co-authored-by: BadwomanCraZY <511528396@qq.com> Co-authored-by: cucusenok <31804608+cucusenok@users.noreply.github.com> Co-authored-by: Russell Valentine <russ@coldstonelabs.org> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Billy Bao <newyorkupperbay@gmail.com> Co-authored-by: Zhedong Cen <cenzhedong2@126.com> Co-authored-by: TensorNull <129579691+TensorNull@users.noreply.github.com> Co-authored-by: TensorNull <tensor.null@gmail.com> Co-authored-by: TeslaZY <TeslaZY@outlook.com> Co-authored-by: Ajay <160579663+aybanda@users.noreply.github.com> Co-authored-by: AB <aj@Ajays-MacBook-Air.local> Co-authored-by: 天海蒼灆 <huangaoqin@tecpie.com> Co-authored-by: He Wang <wanghechn@qq.com> Co-authored-by: Atsushi Hatakeyama <atu729@icloud.com> Co-authored-by: Jin Hai <haijin.chn@gmail.com> Co-authored-by: Mohamed Mathari <155896313+melmathari@users.noreply.github.com> Co-authored-by: Mohamed Mathari <nocodeventure@Mac-mini-van-Mohamed.fritz.box> Co-authored-by: Stephen Hu <stephenhu@seismic.com> Co-authored-by: Shaun Zhang <zhangwfjh@users.noreply.github.com> Co-authored-by: zhimeng123 <60221886+zhimeng123@users.noreply.github.com> Co-authored-by: mxc <mxc@example.com> Co-authored-by: Dominik Novotný <50611433+SgtMarmite@users.noreply.github.com> Co-authored-by: EVGENY M <168018528+rjohny55@users.noreply.github.com> Co-authored-by: mcoder6425 <mcoder64@gmail.com> Co-authored-by: lemsn <lemsn@msn.com> Co-authored-by: lemsn <lemsn@126.com> Co-authored-by: Adrian Gora <47756404+adagora@users.noreply.github.com> Co-authored-by: Womsxd <45663319+Womsxd@users.noreply.github.com> Co-authored-by: FatMii <39074672+FatMii@users.noreply.github.com>
110 lines
3.5 KiB
TypeScript
110 lines
3.5 KiB
TypeScript
import { RAGFlowAvatar } from '@/components/ragflow-avatar';
|
|
import { Button } from '@/components/ui/button';
|
|
import { useSecondPathName } from '@/hooks/route-hook';
|
|
import {
|
|
useFetchKnowledgeBaseConfiguration,
|
|
useFetchKnowledgeGraph,
|
|
} from '@/hooks/use-knowledge-request';
|
|
import { cn, formatBytes } from '@/lib/utils';
|
|
import { Routes } from '@/routes';
|
|
import { formatPureDate } from '@/utils/date';
|
|
import { isEmpty } from 'lodash';
|
|
import { Banknote, DatabaseZap, FileSearch2, FolderOpen } from 'lucide-react';
|
|
import { useMemo } from 'react';
|
|
import { useTranslation } from 'react-i18next';
|
|
import { useHandleMenuClick } from './hooks';
|
|
|
|
type PropType = {
|
|
refreshCount?: number;
|
|
};
|
|
|
|
export function SideBar({ refreshCount }: PropType) {
|
|
const pathName = useSecondPathName();
|
|
const { handleMenuClick } = useHandleMenuClick();
|
|
// refreshCount: be for avatar img sync update on top left
|
|
const { data } = useFetchKnowledgeBaseConfiguration({ refreshCount });
|
|
const { data: routerData } = useFetchKnowledgeGraph();
|
|
const { t } = useTranslation();
|
|
|
|
const items = useMemo(() => {
|
|
const list = [
|
|
{
|
|
icon: <DatabaseZap className="size-4" />,
|
|
label: t(`knowledgeDetails.overview`),
|
|
key: Routes.DataSetOverview,
|
|
},
|
|
{
|
|
icon: <FolderOpen className="size-4" />,
|
|
label: t(`knowledgeDetails.subbarFiles`),
|
|
key: Routes.DatasetBase,
|
|
},
|
|
{
|
|
icon: <FileSearch2 className="size-4" />,
|
|
label: t(`knowledgeDetails.testing`),
|
|
key: Routes.DatasetTesting,
|
|
},
|
|
{
|
|
icon: <Banknote className="size-4" />,
|
|
label: t(`knowledgeDetails.configuration`),
|
|
key: Routes.DataSetSetting,
|
|
},
|
|
];
|
|
if (!isEmpty(routerData?.graph)) {
|
|
list.push({
|
|
icon: <IconFontFill name="knowledgegraph" className="size-4" />,
|
|
label: t(`knowledgeDetails.knowledgeGraph`),
|
|
key: Routes.KnowledgeGraph,
|
|
});
|
|
}
|
|
return list;
|
|
}, [t, routerData]);
|
|
|
|
return (
|
|
<aside className="relative p-5 space-y-8">
|
|
<div className="flex gap-2.5 max-w-[200px] items-center">
|
|
<RAGFlowAvatar
|
|
avatar={data.avatar}
|
|
name={data.name}
|
|
className="size-16"
|
|
></RAGFlowAvatar>
|
|
<div className=" text-text-secondary text-xs space-y-1 overflow-hidden">
|
|
<h3 className="text-lg font-semibold line-clamp-1 text-text-primary text-ellipsis overflow-hidden">
|
|
{data.name}
|
|
</h3>
|
|
<div className="flex justify-between">
|
|
<span>
|
|
{data.doc_num} {t('knowledgeDetails.files')}
|
|
</span>
|
|
<span>{formatBytes(data.size)}</span>
|
|
</div>
|
|
<div>
|
|
{t('knowledgeDetails.created')} {formatPureDate(data.create_time)}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div className="w-[200px] flex flex-col gap-5">
|
|
{items.map((item, itemIdx) => {
|
|
const active = '/' + pathName === item.key;
|
|
return (
|
|
<Button
|
|
key={itemIdx}
|
|
variant={active ? 'secondary' : 'ghost'}
|
|
className={cn(
|
|
'w-full justify-start gap-2.5 px-3 relative h-10 text-text-sub-title-invert',
|
|
{
|
|
'bg-bg-card': active,
|
|
'text-text-primary': active,
|
|
},
|
|
)}
|
|
onClick={handleMenuClick(item.key)}
|
|
>
|
|
{item.icon}
|
|
<span>{item.label}</span>
|
|
</Button>
|
|
);
|
|
})}
|
|
</div>
|
|
</aside>
|
|
);
|
|
}
|