import { useChatHandler } from "@/components/chat/chat-hooks/use-chat-handler" import { ChatbotUIContext } from "@/context/context" import { createFolder } from "@/db/folders" import { ContentType } from "@/types" import { IconFolderPlus, IconPlus } from "@tabler/icons-react" import { FC, useContext, useState } from "react" import { Button } from "../ui/button" import { CreateAssistant } from "./items/assistants/create-assistant" import { CreateCollection } from "./items/collections/create-collection" import { CreateFile } from "./items/files/create-file" import { CreateModel } from "./items/models/create-model" import { CreatePreset } from "./items/presets/create-preset" import { CreatePrompt } from "./items/prompts/create-prompt" import { CreateTool } from "./items/tools/create-tool" import { useTranslation } from "react-i18next"; interface SidebarCreateButtonsProps { contentType: ContentType hasData: boolean } export const SidebarCreateButtons: FC = ({ contentType, hasData }) => { const { t, i18n } = useTranslation(); const { profile, selectedWorkspace, folders, setFolders } = useContext(ChatbotUIContext) const { handleNewChat } = useChatHandler() const [isCreatingPrompt, setIsCreatingPrompt] = useState(false) const [isCreatingPreset, setIsCreatingPreset] = useState(false) const [isCreatingFile, setIsCreatingFile] = useState(false) const [isCreatingCollection, setIsCreatingCollection] = useState(false) const [isCreatingAssistant, setIsCreatingAssistant] = useState(false) const [isCreatingTool, setIsCreatingTool] = useState(false) const [isCreatingModel, setIsCreatingModel] = useState(false) const handleCreateFolder = async () => { if (!profile) return if (!selectedWorkspace) return const createdFolder = await createFolder({ user_id: profile.user_id, workspace_id: selectedWorkspace.id, name: "New Folder", description: "", type: contentType }) setFolders([...folders, createdFolder]) } const getCreateFunction = () => { switch (contentType) { case "chats": return async () => { handleNewChat() } case "presets": return async () => { setIsCreatingPreset(true) } case "prompts": return async () => { setIsCreatingPrompt(true) } case "files": return async () => { setIsCreatingFile(true) } case "collections": return async () => { setIsCreatingCollection(true) } case "assistants": return async () => { setIsCreatingAssistant(true) } case "tools": return async () => { setIsCreatingTool(true) } case "models": return async () => { setIsCreatingModel(true) } default: break } } // 获取当前语言 const language = i18n.language; // 判断需要大写首字母的语言 const needsUpperCaseFirstLetter = (language: string) => { const languagesRequiringUpperCase = ['en', 'de', 'fr', 'es', 'it']; // 其他需要大写首字母的语言 return languagesRequiringUpperCase.includes(language); }; // 对动态内容进行首字母大写的处理 const getCapitalizedContentType = (contentType: string, language: string) => { if (needsUpperCaseFirstLetter(language)) { return contentType.charAt(0).toUpperCase() + contentType.slice(1, contentType.length - 1); // 保留去掉最后一个字符 } return contentType; // 不需要大写的语言返回原始值 }; return (
{hasData && ( )} {isCreatingPrompt && ( )} {isCreatingPreset && ( )} {isCreatingFile && ( )} {isCreatingCollection && ( )} {isCreatingAssistant && ( )} {isCreatingTool && ( )} {isCreatingModel && ( )}
) }