diff --git a/surfsense_web/app/dashboard/[search_space_id]/settings/page.tsx b/surfsense_web/app/dashboard/[search_space_id]/settings/page.tsx index fb2f49317..6d5787ed9 100644 --- a/surfsense_web/app/dashboard/[search_space_id]/settings/page.tsx +++ b/surfsense_web/app/dashboard/[search_space_id]/settings/page.tsx @@ -10,11 +10,13 @@ import { MessageSquare, Settings, X, + FileText, } from "lucide-react"; import { AnimatePresence, motion } from "motion/react"; import { useParams, useRouter } from "next/navigation"; import { useTranslations } from "next-intl"; import { useCallback, useEffect, useState } from "react"; +import { GeneralSettingsManager } from "@/components/settings/general-settings-manager"; import { LLMRoleManager } from "@/components/settings/llm-role-manager"; import { ModelConfigManager } from "@/components/settings/model-config-manager"; import { PromptConfigManager } from "@/components/settings/prompt-config-manager"; @@ -30,6 +32,12 @@ interface SettingsNavItem { } const settingsNavItems: SettingsNavItem[] = [ + { + id: "general", + labelKey: "nav_general", + descriptionKey: "nav_general_desc", + icon: FileText, + }, { id: "models", labelKey: "nav_agent_configs", @@ -262,6 +270,9 @@ function SettingsContent({ ease: [0.4, 0, 0.2, 1], }} > + {activeSection === "general" && ( + + )} {activeSection === "models" && } {activeSection === "roles" && } {activeSection === "prompts" && } @@ -277,7 +288,7 @@ export default function SettingsPage() { const router = useRouter(); const params = useParams(); const searchSpaceId = Number(params.search_space_id); - const [activeSection, setActiveSection] = useState("models"); + const [activeSection, setActiveSection] = useState("general"); const [isSidebarOpen, setIsSidebarOpen] = useState(false); // Track settings section view diff --git a/surfsense_web/components/layout/ui/dialogs/CreateSearchSpaceDialog.tsx b/surfsense_web/components/layout/ui/dialogs/CreateSearchSpaceDialog.tsx index 7e962536f..427cbd31b 100644 --- a/surfsense_web/components/layout/ui/dialogs/CreateSearchSpaceDialog.tsx +++ b/surfsense_web/components/layout/ui/dialogs/CreateSearchSpaceDialog.tsx @@ -82,29 +82,31 @@ export function CreateSearchSpaceDialog({ open, onOpenChange }: CreateSearchSpac return ( - - -
-
- + + +
+
+
-
- {t("create_title")} - {t("create_description")} +
+ {t("create_title")} + + {t("create_description")} +
- + ( - {t("name_label")} + {t("name_label")} - + @@ -116,38 +118,39 @@ export function CreateSearchSpaceDialog({ open, onOpenChange }: CreateSearchSpac name="description" render={({ field }) => ( - + {t("description_label")}{" "} ({tCommon("optional")}) - + )} /> - + - + +
+ + {hasChanges && ( + + + + {t("general_unsaved_changes")} + + + )} +
+ ); +} + diff --git a/surfsense_web/messages/en.json b/surfsense_web/messages/en.json index 8ca382669..108d93262 100644 --- a/surfsense_web/messages/en.json +++ b/surfsense_web/messages/en.json @@ -723,12 +723,24 @@ "searchSpaceSettings": { "title": "Search Space Settings", "back_to_app": "Back to app", + "nav_general": "General", + "nav_general_desc": "Name, description & basic info", "nav_agent_configs": "Agent Configs", "nav_agent_configs_desc": "LLM models with prompts & citations", "nav_role_assignments": "Role Assignments", "nav_role_assignments_desc": "Assign configs to agent roles", "nav_system_instructions": "System Instructions", - "nav_system_instructions_desc": "SearchSpace-wide AI instructions" + "nav_system_instructions_desc": "SearchSpace-wide AI instructions", + "general_name_label": "Name", + "general_name_placeholder": "Enter search space name", + "general_name_description": "A unique name for your search space.", + "general_description_label": "Description", + "general_description_placeholder": "Enter search space description", + "general_description_description": "A brief description of what this search space will be used for.", + "general_reset": "Reset Changes", + "general_save": "Save Changes", + "general_saving": "Saving", + "general_unsaved_changes": "You have unsaved changes. Click \"Save Changes\" to apply them." }, "homepage": { "hero_title_part1": "The AI Workspace", diff --git a/surfsense_web/messages/zh.json b/surfsense_web/messages/zh.json index 3769d9dfc..51e378bb2 100644 --- a/surfsense_web/messages/zh.json +++ b/surfsense_web/messages/zh.json @@ -708,12 +708,24 @@ "searchSpaceSettings": { "title": "搜索空间设置", "back_to_app": "返回应用", + "nav_general": "常规", + "nav_general_desc": "名称、描述和基本信息", "nav_agent_configs": "代理配置", "nav_agent_configs_desc": "LLM 模型配置提示词和引用", "nav_role_assignments": "角色分配", "nav_role_assignments_desc": "为代理角色分配配置", "nav_system_instructions": "系统指令", - "nav_system_instructions_desc": "搜索空间级别的 AI 指令" + "nav_system_instructions_desc": "搜索空间级别的 AI 指令", + "general_name_label": "名称", + "general_name_placeholder": "输入搜索空间名称", + "general_name_description": "您的搜索空间的唯一名称。", + "general_description_label": "描述", + "general_description_placeholder": "输入搜索空间描述", + "general_description_description": "此搜索空间用途的简要描述。", + "general_reset": "重置更改", + "general_save": "保存更改", + "general_saving": "保存中...", + "general_unsaved_changes": "您有未保存的更改。点击\"保存更改\"以应用它们。" }, "homepage": { "hero_title_part1": "AI 工作空间",