import { Server } from '@/types/server'; import React, { FormEvent, ReactNode, useState } from 'react'; import { Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger, } from '@/components/ui/dialog'; import { Form, FormField, FormFields } from '@/components/ui/form'; import { useForm } from '@inertiajs/react'; import { Button } from '@/components/ui/button'; import { LoaderCircle } from 'lucide-react'; import { Label } from '@/components/ui/label'; import { Input } from '@/components/ui/input'; import InputError from '@/components/ui/input-error'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select'; import axios from 'axios'; import { Checkbox } from '@/components/ui/checkbox'; type CreateForm = { name: string; charset: string; collation: string; user: boolean; username: string; password: string; remote: boolean; host: string; }; export default function CreateDatabase({ server, children }: { server: Server; children: ReactNode }) { const [open, setOpen] = useState(false); const [charsets, setCharsets] = useState([]); const [collations, setCollations] = useState([]); const fetchCharsets = async () => { axios.get(route('databases.charsets', server.id)).then((response) => { setCharsets(response.data); }); }; const form = useForm({ name: '', charset: '', collation: '', user: false, username: '', password: '', remote: false, host: '', }); const submit = (e: FormEvent) => { e.preventDefault(); form.post(route('databases.store', server.id), { onSuccess: () => { form.reset(); setOpen(false); }, }); }; const handleOpenChange = (open: boolean) => { setOpen(open); if (open && charsets.length === 0) { fetchCharsets(); } }; const handleCharsetChange = (value: string) => { form.setData('collation', ''); form.setData('charset', value); axios.get(route('databases.collations', { server: server.id, charset: value })).then((response) => { setCollations(response.data); }); }; return ( {children} Create database Create new database
form.setData('name', e.target.value)} />
form.setData('user', !form.data.user)} />
{form.data.user && ( <> form.setData('username', e.target.value)} /> form.setData('password', e.target.value)} />
form.setData('remote', !form.data.remote)} />
{form.data.remote && ( form.setData('host', e.target.value)} /> )} )}
); }