import { SidebarCreateItem } from "@/components/sidebar/items/all/sidebar-create-item" import { Input } from "@/components/ui/input" import { Label } from "@/components/ui/label" import { TextareaAutosize } from "@/components/ui/textarea-autosize" import { ChatbotUIContext } from "@/context/context" import { TOOL_DESCRIPTION_MAX, TOOL_NAME_MAX } from "@/db/limits" import { validateOpenAPI } from "@/lib/openapi-conversion" import { TablesInsert } from "@/supabase/types" import { FC, useContext, useState } from "react" interface CreateToolProps { isOpen: boolean onOpenChange: (isOpen: boolean) => void } export const CreateTool: FC = ({ isOpen, onOpenChange }) => { const { profile, selectedWorkspace } = useContext(ChatbotUIContext) const [name, setName] = useState("") const [isTyping, setIsTyping] = useState(false) const [description, setDescription] = useState("") const [url, setUrl] = useState("") const [customHeaders, setCustomHeaders] = useState("") const [schema, setSchema] = useState("") const [schemaError, setSchemaError] = useState("") if (!profile || !selectedWorkspace) return null return ( } isOpen={isOpen} isTyping={isTyping} renderInputs={() => ( <>
setName(e.target.value)} maxLength={TOOL_NAME_MAX} />
setDescription(e.target.value)} maxLength={TOOL_DESCRIPTION_MAX} />
{/*
setUrl(e.target.value)} />
*/} {/*
*/}
{ setSchema(value) try { const parsedSchema = JSON.parse(value) validateOpenAPI(parsedSchema) .then(() => setSchemaError("")) // Clear error if validation is successful .catch(error => setSchemaError(error.message)) // Set specific validation error message } catch (error) { setSchemaError("Invalid JSON format") // Set error for invalid JSON format } }} minRows={15} />
{schemaError}
)} onOpenChange={onOpenChange} /> ) }