diff --git a/web/src/global.less b/web/src/global.less
index 82e6989cd..0aa074927 100644
--- a/web/src/global.less
+++ b/web/src/global.less
@@ -20,6 +20,10 @@ body {
width: 100%;
}
+.vue-office-excel {
+ height: 100%;
+}
+
/* Scroll bar stylings */
::-webkit-scrollbar {
width: 10px;
diff --git a/web/src/locales/zh.ts b/web/src/locales/zh.ts
index edeae5366..42db2ffe1 100644
--- a/web/src/locales/zh.ts
+++ b/web/src/locales/zh.ts
@@ -440,6 +440,7 @@ General:实体和关系提取提示来自 GitHub - microsoft/graphrag:基于
delete: '删除',
},
chat: {
+ createChat: '创建聊天',
newConversation: '新会话',
createAssistant: '新建助理',
assistantSetting: '助理设置',
@@ -1436,7 +1437,7 @@ General:实体和关系提取提示来自 GitHub - microsoft/graphrag:基于
cancelText: '取消',
},
search: {
- createSearch: '新建查询',
+ createSearch: '创建查询',
searchGreeting: '今天我能为你做些什么?',
profile: '隐藏个人资料',
locale: '语言',
diff --git a/web/src/pages/agents/index.tsx b/web/src/pages/agents/index.tsx
index 1fd77647a..3779290ee 100644
--- a/web/src/pages/agents/index.tsx
+++ b/web/src/pages/agents/index.tsx
@@ -48,7 +48,7 @@ export default function Agents() {
-
+
{data.map((x) => {
return (
-
+
{kbs.map((dataset) => {
return (
{
);
diff --git a/web/src/pages/home/search-list.tsx b/web/src/pages/home/search-list.tsx
index b44272454..b1e7c8955 100644
--- a/web/src/pages/home/search-list.tsx
+++ b/web/src/pages/home/search-list.tsx
@@ -1,20 +1,57 @@
+import { IconFont } from '@/components/icon-font';
+import { MoreButton } from '@/components/more-button';
+import { RenameDialog } from '@/components/rename-dialog';
import { useNavigatePage } from '@/hooks/logic-hooks/navigate-hooks';
-import { useFetchSearchList } from '../next-searches/hooks';
+import { useFetchSearchList, useRenameSearch } from '../next-searches/hooks';
+import { SearchDropdown } from '../next-searches/search-dropdown';
import { ApplicationCard } from './application-card';
export function SearchList() {
- const { data } = useFetchSearchList();
+ const { data, refetch: refetchList } = useFetchSearchList();
const { navigateToSearch } = useNavigatePage();
-
- return data?.data.search_apps.slice(0, 10).map((x) => (
-
- ));
+ const {
+ openCreateModal,
+ showSearchRenameModal,
+ hideSearchRenameModal,
+ searchRenameLoading,
+ onSearchRenameOk,
+ initialSearchName,
+ } = useRenameSearch();
+ const onSearchRenameConfirm = (name: string) => {
+ onSearchRenameOk(name, () => {
+ refetchList();
+ });
+ };
+ return (
+ <>
+ {data?.data.search_apps.slice(0, 10).map((x) => (
+
+
+
+ }
+ >
+ ))}
+ {openCreateModal && (
+ }
+ >
+ )}
+ >
+ );
}
diff --git a/web/src/pages/next-chats/index.tsx b/web/src/pages/next-chats/index.tsx
index 95ee6b763..446a28677 100644
--- a/web/src/pages/next-chats/index.tsx
+++ b/web/src/pages/next-chats/index.tsx
@@ -50,7 +50,7 @@ export default function ChatList() {
-
+
{data.dialogs.map((x) => {
return (
{
return { data, isError, updateSearch };
};
+
+export const useRenameSearch = () => {
+ const [search, setSearch] = useState({} as ISearchAppProps);
+ const { navigateToSearch } = useNavigatePage();
+ const {
+ visible: openCreateModal,
+ hideModal: hideChatRenameModal,
+ showModal: showChatRenameModal,
+ } = useSetModalState();
+ const { updateSearch } = useUpdateSearch();
+ const { createSearch } = useCreateSearch();
+ const [loading, setLoading] = useState(false);
+
+ const handleShowChatRenameModal = useCallback(
+ (record?: ISearchAppProps) => {
+ if (record) {
+ setSearch(record);
+ }
+ showChatRenameModal();
+ },
+ [showChatRenameModal],
+ );
+
+ const handleHideModal = useCallback(() => {
+ hideChatRenameModal();
+ setSearch({} as ISearchAppProps);
+ }, [hideChatRenameModal]);
+
+ const onSearchRenameOk = useCallback(
+ async (name: string, callBack?: () => void) => {
+ let res;
+ setLoading(true);
+ if (search?.id) {
+ try {
+ const reponse = await searchService.getSearchDetail({
+ search_id: search?.id,
+ });
+ const detail = reponse.data?.data;
+ console.log('detail-->', detail);
+ const { id, created_by, update_time, ...searchDataTemp } = detail;
+ res = await updateSearch({
+ ...searchDataTemp,
+ name: name,
+ search_id: search?.id,
+ } as unknown as IUpdateSearchProps);
+ } catch (e) {
+ console.error('error', e);
+ }
+ } else {
+ res = await createSearch({ name: name });
+ }
+ if (res && !search?.id) {
+ navigateToSearch(res?.search_id)();
+ }
+ callBack?.();
+ setLoading(false);
+ handleHideModal();
+ },
+ [search, createSearch, handleHideModal, navigateToSearch, updateSearch],
+ );
+ return {
+ searchRenameLoading: loading,
+ initialSearchName: search?.name,
+ onSearchRenameOk,
+ openCreateModal,
+ hideSearchRenameModal: handleHideModal,
+ showSearchRenameModal: handleShowChatRenameModal,
+ };
+};
diff --git a/web/src/pages/next-searches/index.tsx b/web/src/pages/next-searches/index.tsx
index 380740dd1..935fcee7c 100644
--- a/web/src/pages/next-searches/index.tsx
+++ b/web/src/pages/next-searches/index.tsx
@@ -1,114 +1,49 @@
+import { IconFont } from '@/components/icon-font';
import ListFilterBar from '@/components/list-filter-bar';
-import { Input } from '@/components/originui/input';
+import { RenameDialog } from '@/components/rename-dialog';
import { Button } from '@/components/ui/button';
-import {
- Form,
- FormControl,
- FormField,
- FormItem,
- FormLabel,
- FormMessage,
-} from '@/components/ui/form';
-import { Modal } from '@/components/ui/modal/modal';
import { RAGFlowPagination } from '@/components/ui/ragflow-pagination';
import { useTranslate } from '@/hooks/common-hooks';
-import { useNavigatePage } from '@/hooks/logic-hooks/navigate-hooks';
-import searchService from '@/services/search-service';
-import { zodResolver } from '@hookform/resolvers/zod';
-import { Plus, Search } from 'lucide-react';
+import { Plus } from 'lucide-react';
import { useState } from 'react';
-import { useForm } from 'react-hook-form';
-import { z } from 'zod';
-import {
- ISearchAppProps,
- IUpdateSearchProps,
- useCreateSearch,
- useFetchSearchList,
- useUpdateSearch,
-} from './hooks';
+import { useFetchSearchList, useRenameSearch } from './hooks';
import { SearchCard } from './search-card';
-const searchFormSchema = z.object({
- name: z.string().min(1, {
- message: 'Name is required',
- }),
-});
-
-type SearchFormValues = z.infer & {
- search_id?: string;
-};
export default function SearchList() {
// const { data } = useFetchFlowList();
const { t } = useTranslate('search');
- const { navigateToSearch } = useNavigatePage();
- const { isLoading, createSearch } = useCreateSearch();
const [isEdit, setIsEdit] = useState(false);
- const [searchData, setSearchData] = useState(null);
const {
data: list,
searchParams,
setSearchListParams,
refetch: refetchList,
} = useFetchSearchList();
- const [openCreateModal, setOpenCreateModal] = useState(false);
- const form = useForm({
- resolver: zodResolver(searchFormSchema),
- defaultValues: {
- name: '',
- },
- });
+ const {
+ openCreateModal,
+ showSearchRenameModal,
+ hideSearchRenameModal,
+ searchRenameLoading,
+ onSearchRenameOk,
+ initialSearchName,
+ } = useRenameSearch();
const handleSearchChange = (value: string) => {
console.log(value);
};
- const { updateSearch } = useUpdateSearch();
- const onSubmit = async (values: SearchFormValues) => {
- let res;
- if (isEdit) {
- try {
- const reponse = await searchService.getSearchDetail({
- search_id: searchData?.id,
- });
- const detail = reponse.data?.data;
- console.log('detail-->', detail);
- const { id, created_by, update_time, ...searchDataTemp } = detail;
- res = await updateSearch({
- ...searchDataTemp,
- name: values.name,
- search_id: searchData?.id,
- } as unknown as IUpdateSearchProps);
- refetchList();
- } catch (e) {
- console.error('error', e);
- }
- } else {
- res = await createSearch({ name: values.name });
- }
- if (res && !searchData?.id) {
- navigateToSearch(res?.search_id)();
- }
- if (!isLoading) {
- setOpenCreateModal(false);
- }
- form.reset({ name: '' });
+ const onSearchRenameConfirm = (name: string) => {
+ onSearchRenameOk(name, () => {
+ refetchList();
+ });
};
const openCreateModalFun = () => {
setIsEdit(false);
- setOpenCreateModal(true);
+ showSearchRenameModal();
};
const handlePageChange = (page: number, pageSize: number) => {
setIsEdit(false);
setSearchListParams({ ...searchParams, page, page_size: pageSize });
};
- const showSearchRenameModal = (data: ISearchAppProps) => {
- form.setValue('name', data.name);
- if (data.id) {
- setIsEdit(true);
- }
-
- setSearchData(data);
- setOpenCreateModal(true);
- };
return (
@@ -130,13 +65,15 @@ export default function SearchList() {
-
+
{list?.data.search_apps.map((x) => {
return (
{
+ showSearchRenameModal(x);
+ }}
>
);
})}
@@ -153,57 +90,15 @@ export default function SearchList() {
)}
-
{
- setOpenCreateModal(open);
- }}
- title={
-
-
-
- }
- className="!w-[480px] rounded-xl"
- titleClassName="border-none"
- footerClassName="border-none"
- showfooter={false}
- maskClosable={false}
- >
-
-
-
+ {openCreateModal && (
+
}
+ >
+ )}
);
}