181 lines
5.0 KiB
TypeScript
181 lines
5.0 KiB
TypeScript
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<SidebarCreateButtonsProps> = ({
|
|
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 (
|
|
<div className="flex w-full space-x-2">
|
|
<Button className="flex h-[36px] grow" onClick={getCreateFunction()}>
|
|
<IconPlus className="mr-1" size={20} />
|
|
|
|
{t('sidebarCreateNew')}{" "}
|
|
{getCapitalizedContentType(contentType, language)}
|
|
|
|
</Button>
|
|
|
|
{hasData && (
|
|
<Button className="size-[36px] p-1" onClick={handleCreateFolder}>
|
|
<IconFolderPlus size={20} />
|
|
</Button>
|
|
)}
|
|
|
|
{isCreatingPrompt && (
|
|
<CreatePrompt
|
|
isOpen={isCreatingPrompt}
|
|
onOpenChange={setIsCreatingPrompt}
|
|
/>
|
|
)}
|
|
|
|
{isCreatingPreset && (
|
|
<CreatePreset
|
|
isOpen={isCreatingPreset}
|
|
onOpenChange={setIsCreatingPreset}
|
|
/>
|
|
)}
|
|
|
|
{isCreatingFile && (
|
|
<CreateFile isOpen={isCreatingFile} onOpenChange={setIsCreatingFile} />
|
|
)}
|
|
|
|
{isCreatingCollection && (
|
|
<CreateCollection
|
|
isOpen={isCreatingCollection}
|
|
onOpenChange={setIsCreatingCollection}
|
|
/>
|
|
)}
|
|
|
|
{isCreatingAssistant && (
|
|
<CreateAssistant
|
|
isOpen={isCreatingAssistant}
|
|
onOpenChange={setIsCreatingAssistant}
|
|
/>
|
|
)}
|
|
|
|
{isCreatingTool && (
|
|
<CreateTool isOpen={isCreatingTool} onOpenChange={setIsCreatingTool} />
|
|
)}
|
|
|
|
{isCreatingModel && (
|
|
<CreateModel
|
|
isOpen={isCreatingModel}
|
|
onOpenChange={setIsCreatingModel}
|
|
/>
|
|
)}
|
|
</div>
|
|
)
|
|
}
|