import { useEffect, useState } from "react"; import { ChevronDown, ChevronUp } from "lucide-react"; import { toast } from "sonner"; import { Button, Input } from "@termix/plugin-sdk/ui"; import { useTranslation, type LoginMethodUIProps, } from "@termix/plugin-sdk/frontend"; const labelClass = "text-[10px] font-bold uppercase tracking-widest text-muted-foreground"; /** A collapsible username and password form per enabled directory. */ export function LdapLoginForms({ instances, disabled, submit, }: LoginMethodUIProps) { const { t } = useTranslation(); const [expandedId, setExpandedId] = useState(null); const [username, setUsername] = useState(""); const [password, setPassword] = useState(""); const [loading, setLoading] = useState(false); useEffect(() => { setUsername(""); setPassword(""); }, [expandedId]); return ( <> {instances.map((instance) => { const expanded = expandedId === instance.id; return (
{expanded && (
{ event.preventDefault(); if (!username.trim() || !password) { toast.error(t("requiredField")); return; } setLoading(true); try { await submit( { username: username.trim(), password }, instance.id, ); } finally { setLoading(false); } }} className="flex flex-col gap-3 p-3 border-t border-border" >
)}
); })} ); }