import { useState } from "react"; import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogFooter, } from "@/components/ui/dialog"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@/components/ui/select"; import { useCreateDatabase, useRoles } from "@/hooks/use-management"; import { toast } from "sonner"; import { Loader2 } from "lucide-react"; interface Props { open: boolean; onOpenChange: (open: boolean) => void; connectionId: string; } export function CreateDatabaseDialog({ open, onOpenChange, connectionId }: Props) { const [name, setName] = useState(""); const [owner, setOwner] = useState("__default__"); const [template, setTemplate] = useState("__default__"); const [encoding, setEncoding] = useState("UTF8"); const [connectionLimit, setConnectionLimit] = useState(-1); const { data: roles } = useRoles(open ? connectionId : null); const createMutation = useCreateDatabase(); const [prevOpen, setPrevOpen] = useState(false); if (open !== prevOpen) { setPrevOpen(open); if (open) { setName(""); setOwner("__default__"); setTemplate("__default__"); setEncoding("UTF8"); setConnectionLimit(-1); } } const handleCreate = () => { if (!name.trim()) { toast.error("Database name is required"); return; } createMutation.mutate( { connectionId, params: { name: name.trim(), owner: owner === "__default__" ? undefined : owner, template: template === "__default__" ? undefined : template, encoding, connection_limit: connectionLimit, }, }, { onSuccess: () => { toast.success(`Database "${name}" created`); onOpenChange(false); }, onError: (err) => { toast.error("Failed to create database", { description: String(err) }); }, } ); }; return ( Create Database
setName(e.target.value)} placeholder="my_database" />
setConnectionLimit(parseInt(e.target.value) || -1)} />
); }