import { Alert, AlertDescription } from "@/components/ui/alert"; import { Input } from "@/components/ui/input"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select"; import { Textarea } from "@/components/ui/textarea"; import { useFormState } from "react-dom"; import { useEffect } from "react"; import { createProxyHostAction, deleteProxyHostAction, updateProxyHostAction } from "@/app/(dashboard)/proxy-hosts/actions"; import { INITIAL_ACTION_STATE } from "@/lib/actions"; import { AccessList } from "@/lib/models/access-lists"; import { Certificate } from "@/lib/models/certificates"; import { ProxyHost } from "@/lib/models/proxy-hosts"; import { AuthentikSettings } from "@/lib/settings"; import { AppDialog } from "@/components/ui/AppDialog"; import { AuthentikFields } from "./AuthentikFields"; import { DnsResolverFields } from "./DnsResolverFields"; import { LoadBalancerFields } from "./LoadBalancerFields"; import { SettingsToggles } from "./SettingsToggles"; import { UpstreamDnsResolutionFields } from "./UpstreamDnsResolutionFields"; import { UpstreamInput } from "./UpstreamInput"; import { GeoBlockFields } from "./GeoBlockFields"; import { WafFields } from "./WafFields"; import { MtlsFields } from "./MtlsConfig"; import { CpmForwardAuthFields } from "./CpmForwardAuthFields"; import { RedirectsFields } from "./RedirectsFields"; import { LocationRulesFields } from "./LocationRulesFields"; import { RewriteFields } from "./RewriteFields"; import type { CaCertificate } from "@/lib/models/ca-certificates"; import type { MtlsRole } from "@/lib/models/mtls-roles"; import type { IssuedClientCertificate } from "@/lib/models/issued-client-certificates"; type ForwardAuthUser = { id: number; email: string; name: string | null; role: string }; type ForwardAuthGroup = { id: number; name: string; description: string | null; member_count: number }; type ForwardAuthAccessData = { userIds: number[]; groupIds: number[] }; export function CreateHostDialog({ open, onClose, certificates, accessLists, authentikDefaults, initialData, caCertificates = [], mtlsRoles = [], issuedClientCerts = [], forwardAuthUsers = [], forwardAuthGroups = [], }: { open: boolean; onClose: () => void; certificates: Certificate[]; accessLists: AccessList[]; authentikDefaults: AuthentikSettings | null; initialData?: ProxyHost | null; caCertificates?: CaCertificate[]; mtlsRoles?: MtlsRole[]; issuedClientCerts?: IssuedClientCertificate[]; forwardAuthUsers?: ForwardAuthUser[]; forwardAuthGroups?: ForwardAuthGroup[]; }) { const [state, formAction] = useFormState(createProxyHostAction, INITIAL_ACTION_STATE); useEffect(() => { if (state.status === "success") { setTimeout(onClose, 1000); } }, [state.status, onClose]); return ( { (document.getElementById("create-host-form") as HTMLFormElement)?.requestSubmit(); }} >
{state.status !== "idle" && state.message && ( {state.message} )}