import React, { FormEvent, ReactNode, useState } from 'react'; import { useForm } from '@inertiajs/react'; import { useQuery } from '@tanstack/react-query'; import axios from 'axios'; import { Editor, useMonaco } from '@monaco-editor/react'; import { Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, SheetTrigger } from '@/components/ui/sheet'; import { Form } from '@/components/ui/form'; import { Skeleton } from '@/components/ui/skeleton'; import { Button } from '@/components/ui/button'; import { LoaderCircleIcon } from 'lucide-react'; import { registerCaddyLanguage, registerNginxLanguage } from '@/lib/editor'; import { useAppearance } from '@/hooks/use-appearance'; import { Site } from '@/types/site'; import { Alert, AlertDescription } from '@/components/ui/alert'; import { StatusRipple } from '@/components/status-ripple'; export default function VHost({ site, children }: { site: Site; children: ReactNode }) { const { getActualAppearance } = useAppearance(); const [open, setOpen] = useState(false); const form = useForm<{ vhost: string; }>({ vhost: '', }); const submit = (e: FormEvent) => { e.preventDefault(); form.patch(route('site-settings.update-vhost', { server: site.server_id, site: site.id }), { onSuccess: () => { setOpen(false); }, }); }; const query = useQuery({ queryKey: ['site-settings.vhost', site.server_id, site.id], queryFn: async () => { const response = await axios.get( route('site-settings.vhost', { server: site.server_id, site: site.id, }), ); if (response.data?.vhost) { form.setData('vhost', response.data.vhost); } return response.data; }, retry: false, enabled: open, }); const monaco = useMonaco(); registerNginxLanguage(monaco); registerCaddyLanguage(monaco); return ( {children} Edit virtual host file Edit virtual host file.
{query.isSuccess ? ( form.setData('vhost', value ?? '')} options={{ fontSize: 15, }} /> ) : ( )} {/*make alert center with absolute position*/}

Nginx vhost file will get reset if you generate or modify SSLs, Aliases, or create/delete site redirects.

); }