diff --git a/web/src/components/page-header.tsx b/web/src/components/page-header.tsx new file mode 100644 index 00000000000..cc52e379503 --- /dev/null +++ b/web/src/components/page-header.tsx @@ -0,0 +1,26 @@ +import { ArrowLeft } from 'lucide-react'; +import { PropsWithChildren, ReactNode } from 'react'; +import { Button } from './ui/button'; + +interface IPageHeaderProps extends PropsWithChildren { + back(): void; + title: ReactNode; +} + +export function PageHeader({ back, title, children }: IPageHeaderProps) { + return ( +
+
+
+ +
+
+

{title}

+
+
+ {children} +
+ ); +} diff --git a/web/src/hooks/logic-hooks/navigate-hooks.ts b/web/src/hooks/logic-hooks/navigate-hooks.ts index 51d2d51b4cf..2deae037d81 100644 --- a/web/src/hooks/logic-hooks/navigate-hooks.ts +++ b/web/src/hooks/logic-hooks/navigate-hooks.ts @@ -21,10 +21,20 @@ export const useNavigatePage = () => { navigate(Routes.ProfileSetting); }, [navigate]); + const navigateToChatList = useCallback(() => { + navigate(Routes.Chats); + }, [navigate]); + + const navigateToChat = useCallback(() => { + navigate(Routes.Chat); + }, [navigate]); + return { navigateToDatasetList, navigateToDataset, navigateToHome, navigateToProfile, + navigateToChatList, + navigateToChat, }; }; diff --git a/web/src/layouts/next-header.tsx b/web/src/layouts/next-header.tsx index bd7ad573020..fe0dc175bc4 100644 --- a/web/src/layouts/next-header.tsx +++ b/web/src/layouts/next-header.tsx @@ -31,7 +31,7 @@ export function Header() { const tagsData = useMemo( () => [ { path: Routes.Datasets, name: t('knowledgeBase'), icon: Library }, - { path: Routes.Chat, name: t('chat'), icon: MessageSquareText }, + { path: Routes.Chats, name: t('chat'), icon: MessageSquareText }, { path: Routes.Search, name: t('search'), icon: Search }, { path: Routes.Agent, name: t('flow'), icon: Cpu }, { path: Routes.Files, name: t('fileManager'), icon: File }, diff --git a/web/src/pages/next-chat/chat-card.tsx b/web/src/pages/next-chats/chat-card.tsx similarity index 89% rename from web/src/pages/next-chat/chat-card.tsx rename to web/src/pages/next-chats/chat-card.tsx index aea15f4b6bf..6d946f99a28 100644 --- a/web/src/pages/next-chat/chat-card.tsx +++ b/web/src/pages/next-chats/chat-card.tsx @@ -1,6 +1,7 @@ import { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar'; import { Button } from '@/components/ui/button'; import { Card, CardContent } from '@/components/ui/card'; +import { useNavigatePage } from '@/hooks/logic-hooks/navigate-hooks'; import { IDialog } from '@/interfaces/database/chat'; import { formatPureDate } from '@/utils/date'; import { ChevronRight, Trash2 } from 'lucide-react'; @@ -10,6 +11,8 @@ interface IProps { } export function ChatCard({ data }: IProps) { + const { navigateToChat } = useNavigatePage(); + return ( @@ -36,7 +39,7 @@ export function ChatCard({ data }: IProps) {

- + +
+ +
+ + + +
+ + ); +} diff --git a/web/src/pages/next-chats/chat/sessions.tsx b/web/src/pages/next-chats/chat/sessions.tsx new file mode 100644 index 00000000000..d996bb4d0a9 --- /dev/null +++ b/web/src/pages/next-chats/chat/sessions.tsx @@ -0,0 +1,38 @@ +import { Button } from '@/components/ui/button'; +import { Card, CardContent } from '@/components/ui/card'; +import { EllipsisVertical, Plus } from 'lucide-react'; + +function SessionCard() { + return ( + + + xxx + + + + ); +} + +export function Sessions() { + const sessionList = new Array(10).fill(1); + + return ( +
+
+ + Sessions + + +
+
+ {sessionList.map((x) => ( + + ))} +
+
+ ); +} diff --git a/web/src/pages/next-chat/index.tsx b/web/src/pages/next-chats/index.tsx similarity index 100% rename from web/src/pages/next-chat/index.tsx rename to web/src/pages/next-chats/index.tsx diff --git a/web/src/pages/profile-setting/index.tsx b/web/src/pages/profile-setting/index.tsx index 250b01dabba..3601e51963b 100644 --- a/web/src/pages/profile-setting/index.tsx +++ b/web/src/pages/profile-setting/index.tsx @@ -1,6 +1,5 @@ -import { Button } from '@/components/ui/button'; +import { PageHeader } from '@/components/page-header'; import { useNavigatePage } from '@/hooks/logic-hooks/navigate-hooks'; -import { ArrowLeft } from 'lucide-react'; import { Outlet } from 'umi'; import { SideBar } from './sidebar'; @@ -9,7 +8,7 @@ export default function ProfileSetting() { return (
-
+ {/*
-
+
*/} + +
diff --git a/web/src/routes.ts b/web/src/routes.ts index a5e3ac12a82..aa3eb9a3ad6 100644 --- a/web/src/routes.ts +++ b/web/src/routes.ts @@ -6,6 +6,7 @@ export enum Routes { Dataset = `${Routes.DatasetBase}${Routes.DatasetBase}`, Agent = '/agent', Search = '/next-search', + Chats = '/next-chats', Chat = '/next-chat', Files = '/files', ProfileSetting = '/profile-setting', @@ -162,16 +163,21 @@ const routes = [ ], }, { - path: Routes.Chat, + path: Routes.Chats, layout: false, component: '@/layouts/next', routes: [ { - path: Routes.Chat, - component: `@/pages${Routes.Chat}`, + path: Routes.Chats, + component: `@/pages${Routes.Chats}`, }, ], }, + { + path: Routes.Chat, + layout: false, + component: `@/pages${Routes.Chats}/chat`, + }, { path: Routes.Search, layout: false,