import { Alert, Box, MenuItem, Stack, TextField, Typography } from "@mui/material"; import { useFormState } from "react-dom"; import { useEffect } from "react"; import { createProxyHostAction, deleteProxyHostAction, updateProxyHostAction } from "@/app/(dashboard)/proxy-hosts/actions"; import { INITIAL_ACTION_STATE } from "@/src/lib/actions"; import { AccessList } from "@/src/lib/models/access-lists"; import { Certificate } from "@/src/lib/models/certificates"; import { ProxyHost } from "@/src/lib/models/proxy-hosts"; import { AuthentikSettings } from "@/src/lib/settings"; import { AppDialog } from "@/src/components/ui/AppDialog"; import { AuthentikFields } from "./AuthentikFields"; import { LoadBalancerFields } from "./LoadBalancerFields"; import { SettingsToggles } from "./SettingsToggles"; import { UpstreamInput } from "./UpstreamInput"; export function CreateHostDialog({ open, onClose, certificates, accessLists, authentikDefaults, initialData }: { open: boolean; onClose: () => void; certificates: Certificate[]; accessLists: AccessList[]; authentikDefaults: AuthentikSettings | null; initialData?: ProxyHost | null; }) { const [state, formAction] = useFormState(createProxyHostAction, INITIAL_ACTION_STATE); useEffect(() => { if (state.status === "success") { setTimeout(onClose, 1000); } }, [state.status, onClose]); return ( { // Trigger generic form submit (document.getElementById("create-host-form") as HTMLFormElement)?.requestSubmit(); }} > {state.status !== "idle" && state.message && ( {state.message} )} Managed by Caddy (Auto) {certificates.map((cert) => ( {cert.name} ))} None {accessLists.map((list) => ( {list.name} ))} ); } export function EditHostDialog({ open, host, onClose, certificates, accessLists }: { open: boolean; host: ProxyHost; onClose: () => void; certificates: Certificate[]; accessLists: AccessList[]; }) { const [state, formAction] = useFormState(updateProxyHostAction.bind(null, host.id), INITIAL_ACTION_STATE); useEffect(() => { if (state.status === "success") { setTimeout(onClose, 1000); } }, [state.status, onClose]); return ( { (document.getElementById("edit-host-form") as HTMLFormElement)?.requestSubmit(); }} > {state.status !== "idle" && state.message && ( {state.message} )} Managed by Caddy (Auto) {certificates.map((cert) => ( {cert.name} ))} None {accessLists.map((list) => ( {list.name} ))} ); } export function DeleteHostDialog({ open, host, onClose }: { open: boolean; host: ProxyHost; onClose: () => void; }) { const [state, formAction] = useFormState(deleteProxyHostAction.bind(null, host.id), INITIAL_ACTION_STATE); useEffect(() => { if (state.status === "success") { setTimeout(onClose, 1000); } }, [state.status, onClose]); return ( { (document.getElementById("delete-host-form") as HTMLFormElement)?.requestSubmit(); }} > {state.status !== "idle" && state.message && ( {state.message} )} Are you sure you want to delete the proxy host {host.name}? This will remove the configuration for: • Domains: {host.domains.join(", ")} • Upstreams: {host.upstreams.join(", ")} This action cannot be undone. ); }