"use client"; import { BookText, Bot, Brain, CircleUser, Earth, ImageIcon, ListChecks, ScanEye, UserKey, } from "lucide-react"; import dynamic from "next/dynamic"; import { useRouter } from "next/navigation"; import { useTranslations } from "next-intl"; import type React from "react"; import { useCallback, useEffect, useMemo, useState } from "react"; import { Button } from "@/components/ui/button"; import { Separator } from "@/components/ui/separator"; import { cn } from "@/lib/utils"; const GeneralSettingsManager = dynamic( () => import("@/components/settings/general-settings-manager").then((m) => ({ default: m.GeneralSettingsManager, })), { ssr: false } ); const AgentModelManager = dynamic( () => import("@/components/settings/agent-model-manager").then((m) => ({ default: m.AgentModelManager, })), { ssr: false } ); const LLMRoleManager = dynamic( () => import("@/components/settings/llm-role-manager").then((m) => ({ default: m.LLMRoleManager })), { ssr: false } ); const ImageModelManager = dynamic( () => import("@/components/settings/image-model-manager").then((m) => ({ default: m.ImageModelManager, })), { ssr: false } ); const VisionModelManager = dynamic( () => import("@/components/settings/vision-model-manager").then((m) => ({ default: m.VisionModelManager, })), { ssr: false } ); const RolesManager = dynamic( () => import("@/components/settings/roles-manager").then((m) => ({ default: m.RolesManager })), { ssr: false } ); const PromptConfigManager = dynamic( () => import("@/components/settings/prompt-config-manager").then((m) => ({ default: m.PromptConfigManager, })), { ssr: false } ); const PublicChatSnapshotsManager = dynamic( () => import("@/components/public-chat-snapshots/public-chat-snapshots-manager").then((m) => ({ default: m.PublicChatSnapshotsManager, })), { ssr: false } ); const TeamMemoryManager = dynamic( () => import("@/components/settings/team-memory-manager").then((m) => ({ default: m.TeamMemoryManager, })), { ssr: false } ); export type SearchSpaceSettingsTab = | "general" | "roles" | "models" | "image-models" | "vision-models" | "team-roles" | "prompts" | "team-memory" | "public-links"; interface SearchSpaceSettingsPanelProps { searchSpaceId: string; initialTab?: SearchSpaceSettingsTab; } export function SearchSpaceSettingsPanel({ searchSpaceId, initialTab = "general", }: SearchSpaceSettingsPanelProps) { const t = useTranslations("searchSpaceSettings"); const router = useRouter(); const numericSearchSpaceId = Number(searchSpaceId); const [activeTab, setActiveTab] = useState(initialTab); const [tabScrollPos, setTabScrollPos] = useState<"start" | "middle" | "end">("start"); useEffect(() => { setActiveTab(initialTab); }, [initialTab]); const handleTabScroll = useCallback((e: React.UIEvent) => { const el = e.currentTarget; const atStart = el.scrollLeft <= 2; const atEnd = el.scrollWidth - el.scrollLeft - el.clientWidth <= 2; setTabScrollPos(atStart ? "start" : atEnd ? "end" : "middle"); }, []); const navItems = useMemo( () => [ { value: "general", label: t("nav_general"), icon: }, { value: "roles", label: t("nav_role_assignments"), icon: }, { value: "models", label: t("nav_agent_models"), icon: }, { value: "image-models", label: t("nav_image_models"), icon: , }, { value: "vision-models", label: t("nav_vision_models"), icon: , }, { value: "team-roles", label: t("nav_team_roles"), icon: }, { value: "prompts", label: t("nav_system_instructions"), icon: , }, { value: "team-memory", label: "Team Memory", icon: , }, { value: "public-links", label: t("nav_public_links"), icon: }, ], [t] ); const selectedTab = navItems.some((item) => item.value === activeTab) ? activeTab : "general"; const selectedLabel = navItems.find((item) => item.value === selectedTab)?.label ?? t("title"); const handleItemChange = (tab: SearchSpaceSettingsTab) => { setActiveTab(tab); const suffix = tab === "general" ? "" : `?tab=${tab}`; router.replace(`/dashboard/${searchSpaceId}/search-space-settings${suffix}`, { scroll: false }); }; return (

{t("title")}

{navItems.map((item) => ( ))}

{selectedLabel}

{selectedTab === "general" && ( )} {selectedTab === "models" && } {selectedTab === "roles" && ( )} {selectedTab === "image-models" && ( )} {selectedTab === "vision-models" && ( )} {selectedTab === "team-roles" && } {selectedTab === "prompts" && ( )} {selectedTab === "team-memory" && ( )} {selectedTab === "public-links" && ( )}
); }