import { Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger, } from '@/components/ui/dialog'; import { FormEvent, ReactNode, useState } from 'react'; import { Form, FormField, FormFields } from '@/components/ui/form'; import { Button } from '@/components/ui/button'; import { useForm } from '@inertiajs/react'; import { LoaderCircleIcon } 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, SelectGroup, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select'; import { Checkbox } from '@/components/ui/checkbox'; import { FirewallRule } from '@/types/firewall'; export default function RuleForm({ serverId, firewallRule, children }: { serverId: number; firewallRule?: FirewallRule; children: ReactNode }) { const [open, setOpen] = useState(false); const form = useForm<{ name: string; type: string; protocol: string; port: string; source_any: boolean; source: string; mask: string; }>({ name: firewallRule?.name || '', type: firewallRule?.type || '', protocol: firewallRule?.protocol || '', port: firewallRule?.port?.toString() || '', source_any: !firewallRule?.source, source: firewallRule?.source || '', mask: firewallRule?.mask?.toString() || '', }); const submit = (e: FormEvent) => { e.preventDefault(); if (firewallRule) { form.put(route('firewall.update', { server: serverId, firewallRule: firewallRule.id }), { onSuccess: () => { setOpen(false); form.reset(); }, }); return; } form.post(route('firewall.store', { server: serverId }), { onSuccess: () => { setOpen(false); form.reset(); }, }); }; return ( {children} {firewallRule ? 'Edit' : 'Create'} firewall rule {firewallRule ? 'Edit' : 'Create'} new firewall rule
form.setData('name', e.target.value)} /> form.setData('port', e.target.value)} />
form.setData('source_any', !form.data.source_any)} />
{!form.data.source_any && ( <> form.setData('source', e.target.value)} /> form.setData('mask', e.target.value)} /> )}
); }