"use client" import { useChatHandler } from "@/components/chat/chat-hooks/use-chat-handler" import { Popover, PopoverContent, PopoverTrigger } from "@/components/ui/popover" import { ChatbotUIContext } from "@/context/context" import { createWorkspace } from "@/db/workspaces" import useHotkey from "@/lib/hooks/use-hotkey" import { IconBuilding, IconHome, IconPlus } from "@tabler/icons-react" import { ChevronsUpDown } from "lucide-react" import Image from "next/image" import { useRouter } from "next/navigation" import { FC, useContext, useEffect, useState } from "react" import { Button } from "../ui/button" import { Input } from "../ui/input" import { useTranslation } from 'react-i18next' import { usePathname } from "next/navigation" import i18nConfig from "@/i18nConfig" interface WorkspaceSwitcherProps {} export const WorkspaceSwitcher: FC = ({}) => { const { t } = useTranslation() // const pathname = usePathname() // 获取当前路径 // const locale = pathname.split("/")[1] || "en" const pathname = usePathname() // 获取当前路径 const pathSegments = pathname.split("/").filter(Boolean) const locales = i18nConfig.locales const defaultLocale = i18nConfig.defaultLocale let locale: (typeof locales)[number] = defaultLocale const segment = pathSegments[0] as (typeof locales)[number] if (locales.includes(segment)) { locale = segment } const homePath = locale === defaultLocale ? "/" : `/${locale}` useHotkey(";", () => setOpen(prevState => !prevState)) const { workspaces, workspaceImages, selectedWorkspace, setSelectedWorkspace, setWorkspaces } = useContext(ChatbotUIContext) const { handleNewChat } = useChatHandler() const router = useRouter() const [open, setOpen] = useState(false) const [value, setValue] = useState("") const [search, setSearch] = useState("") useEffect(() => { if (!selectedWorkspace) return setValue(selectedWorkspace.id) }, [selectedWorkspace]) const handleCreateWorkspace = async () => { if (!selectedWorkspace) return const createdWorkspace = await createWorkspace({ user_id: selectedWorkspace.user_id, default_context_length: selectedWorkspace.default_context_length, default_model: selectedWorkspace.default_model, default_prompt: selectedWorkspace.default_prompt, default_temperature: selectedWorkspace.default_temperature, description: "", embeddings_provider: "openai", include_profile_context: selectedWorkspace.include_profile_context, include_workspace_instructions: selectedWorkspace.include_workspace_instructions, instructions: selectedWorkspace.instructions, is_home: false, name: t("side.newWorkspace") }) setWorkspaces([...workspaces, createdWorkspace]) setSelectedWorkspace(createdWorkspace) setOpen(false) return router.push(`${homePath}/${createdWorkspace.id}/chat`) // return router.push(`/${locale}/${createdWorkspace.id}/chat`) } const getWorkspaceName = (workspaceId: string) => { const workspace = workspaces.find(workspace => workspace.id === workspaceId) if (!workspace) return return workspace.name } const handleSelect = (workspaceId: string) => { const workspace = workspaces.find(workspace => workspace.id === workspaceId) if (!workspace) return setSelectedWorkspace(workspace) setOpen(false) console.log("............选中了Home workspace?????") return router.push(`/${locale}/${workspace.id}/chat`) } const workspaceImage = workspaceImages.find( image => image.workspaceId === selectedWorkspace?.id ) const imageSrc = workspaceImage ? workspaceImage.url : selectedWorkspace?.is_home ? "" : "" const IconComponent = selectedWorkspace?.is_home ? IconHome : IconBuilding return (
{selectedWorkspace && (
{workspaceImage ? ( {selectedWorkspace.name} ) : ( )}
)} {getWorkspaceName(value) || t("side.selectWorkspace")}
setSearch(e.target.value)} />
{workspaces .filter(workspace => workspace.is_home) .map(workspace => { const image = workspaceImages.find( image => image.workspaceId === workspace.id ) return ( ) })} {workspaces .filter( workspace => !workspace.is_home && workspace.name.toLowerCase().includes(search.toLowerCase()) ) .sort((a, b) => a.name.localeCompare(b.name)) .map(workspace => { const image = workspaceImages.find( image => image.workspaceId === workspace.id ) return ( ) })}
) }