import { ReactNode, useState, FormEventHandler } from 'react'; import { Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, SheetTrigger } from '@/components/ui/sheet'; import { Form, FormField, FormFields } from '@/components/ui/form'; import { Button } from '@/components/ui/button'; import { Label } from '@/components/ui/label'; import { Input } from '@/components/ui/input'; import { LoaderCircle } from 'lucide-react'; import { useForm, usePage } from '@inertiajs/react'; import { Select, SelectContent, SelectGroup, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select'; import InputError from '@/components/ui/input-error'; import type { SharedData } from '@/types'; import SourceControlSelect from '@/pages/source-controls/components/source-control-select'; import { Server } from '@/types/server'; import ServerSelect from '@/pages/servers/components/server-select'; import ServiceVersionSelect from '@/pages/services/components/service-version-select'; import { DynamicFieldConfig } from '@/types/dynamic-field-config'; import DynamicField from '@/components/ui/dynamic-field'; import { TagsInput } from '@/components/ui/tags-input'; type CreateSiteForm = { server: string; type: string; domain: string; aliases: string[]; php_version: string; source_control: string; user: string; }; export default function CreateSite({ server, children }: { server?: Server; children: ReactNode }) { const page = usePage(); const [open, setOpen] = useState(false); const form = useForm({ server: server?.id.toString() || '', type: 'php', domain: '', aliases: [], php_version: '', source_control: '', user: '', }); const submit: FormEventHandler = (e) => { e.preventDefault(); form.post(route('sites.store', { server: form.data.server })); }; const getFormField = (field: DynamicFieldConfig) => { if (field.name === 'source_control') { return ( form.setData('source_control', value)} /> ); } if (field.name === 'php_version') { return ( form.setData('php_version', value)} /> ); } return ( form.setData(field.name, value)} config={field} /*@ts-expect-error dynamic types*/ error={form.errors[field.name]} /> ); }; return ( {children} Create site Fill in the details to create a new site.
{server === undefined && ( form.setData('server', value ? value.id.toString() : '')} /> )} {form.data.server && ( <> form.setData('domain', e.target.value)} placeholder="vitodeploy.com" /> form.setData('aliases', value)} /> {page.props.configs.site_types_custom_fields[form.data.type].map((config) => getFormField(config))} form.setData('user', e.target.value)} placeholder="Leave empty for using server's default user" /> )}
); }