From 07ddb8fcff8caec3bad2210d14620885ecbd2aa0 Mon Sep 17 00:00:00 2001 From: balibabu Date: Thu, 20 Feb 2025 15:37:53 +0800 Subject: [PATCH] Feat: Add SearchPage component. #3221 (#5184) ### What problem does this PR solve? Feat: Add SearchPage component. #3221 ### Type of change - [x] New Feature (non-breaking change which adds functionality) --- web/src/hooks/logic-hooks/navigate-hooks.ts | 10 ++++ web/src/layouts/next-header.tsx | 2 +- web/src/pages/next-search/index.tsx | 24 +++++++++- web/src/pages/next-searches/index.tsx | 24 ++++++++++ web/src/pages/next-searches/search-card.tsx | 53 +++++++++++++++++++++ web/src/routes.ts | 12 +++-- 6 files changed, 119 insertions(+), 6 deletions(-) create mode 100644 web/src/pages/next-searches/index.tsx create mode 100644 web/src/pages/next-searches/search-card.tsx diff --git a/web/src/hooks/logic-hooks/navigate-hooks.ts b/web/src/hooks/logic-hooks/navigate-hooks.ts index 785b5add7..3951ca5e6 100644 --- a/web/src/hooks/logic-hooks/navigate-hooks.ts +++ b/web/src/hooks/logic-hooks/navigate-hooks.ts @@ -46,6 +46,14 @@ export const useNavigatePage = () => { navigate(Routes.Agent); }, [navigate]); + const navigateToSearchList = useCallback(() => { + navigate(Routes.Searches); + }, [navigate]); + + const navigateToSearch = useCallback(() => { + navigate(Routes.Search); + }, [navigate]); + const navigateToChunkParsedResult = useCallback( (id: string, knowledgeId?: string) => () => { navigate( @@ -91,5 +99,7 @@ export const useNavigatePage = () => { navigateToChunk, navigateToAgentList, navigateToAgent, + navigateToSearchList, + navigateToSearch, }; }; diff --git a/web/src/layouts/next-header.tsx b/web/src/layouts/next-header.tsx index ec7d08080..a2e6ff8a2 100644 --- a/web/src/layouts/next-header.tsx +++ b/web/src/layouts/next-header.tsx @@ -32,7 +32,7 @@ export function Header() { () => [ { path: Routes.Datasets, name: t('knowledgeBase'), icon: Library }, { path: Routes.Chats, name: t('chat'), icon: MessageSquareText }, - { path: Routes.Search, name: t('search'), icon: Search }, + { path: Routes.Searches, name: t('search'), icon: Search }, { path: Routes.Agents, name: t('flow'), icon: Cpu }, { path: Routes.Files, name: t('fileManager'), icon: File }, ], diff --git a/web/src/pages/next-search/index.tsx b/web/src/pages/next-search/index.tsx index 0d4f3a3f3..489067ee8 100644 --- a/web/src/pages/next-search/index.tsx +++ b/web/src/pages/next-search/index.tsx @@ -1,3 +1,23 @@ -export default function Search() { - return
Search
; +import { PageHeader } from '@/components/page-header'; +import { Button } from '@/components/ui/button'; +import { useNavigatePage } from '@/hooks/logic-hooks/navigate-hooks'; +import { EllipsisVertical } from 'lucide-react'; + +export default function SearchPage() { + const { navigateToSearchList } = useNavigatePage(); + + return ( +
+ +
+ + +
+
+
+ ); } diff --git a/web/src/pages/next-searches/index.tsx b/web/src/pages/next-searches/index.tsx new file mode 100644 index 000000000..a9ea4907e --- /dev/null +++ b/web/src/pages/next-searches/index.tsx @@ -0,0 +1,24 @@ +import ListFilterBar from '@/components/list-filter-bar'; +import { useFetchFlowList } from '@/hooks/flow-hooks'; +import { Plus } from 'lucide-react'; +import { SearchCard } from './search-card'; + +export default function SearchList() { + const { data } = useFetchFlowList(); + + return ( +
+
+ + + Create app + +
+
+ {data.map((x) => { + return ; + })} +
+
+ ); +} diff --git a/web/src/pages/next-searches/search-card.tsx b/web/src/pages/next-searches/search-card.tsx new file mode 100644 index 000000000..e09adba1d --- /dev/null +++ b/web/src/pages/next-searches/search-card.tsx @@ -0,0 +1,53 @@ +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 { IFlow } from '@/interfaces/database/flow'; +import { formatPureDate } from '@/utils/date'; +import { ChevronRight, Trash2 } from 'lucide-react'; + +interface IProps { + data: IFlow; +} + +export function SearchCard({ data }: IProps) { + const { navigateToSearch } = useNavigatePage(); + + return ( + + +
+ {data.avatar ? ( +
+ ) : ( + + + CN + + )} +
+

{data.title}

+

An app that does things An app that does things

+
+
+ Search app +

+ {formatPureDate(data.update_time)} +

+
+
+ + +
+
+ + + ); +} diff --git a/web/src/routes.ts b/web/src/routes.ts index 88bbf9858..754e82ed4 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', Agents = '/agents', + Searches = '/next-searches', Search = '/next-search', Chats = '/next-chats', Chat = '/next-chat', @@ -186,16 +187,21 @@ const routes = [ component: `@/pages${Routes.Chats}/chat`, }, { - path: Routes.Search, + path: Routes.Searches, layout: false, component: '@/layouts/next', routes: [ { - path: Routes.Search, - component: `@/pages${Routes.Search}`, + path: Routes.Searches, + component: `@/pages${Routes.Searches}`, }, ], }, + { + path: Routes.Search, + layout: false, + component: `@/pages${Routes.Search}`, + }, { path: Routes.Agents, layout: false,