"use client"; import { useState } from "react"; import { Button, ButtonVariants } from "./Button"; import { TextInput } from "./Input"; import { useForm } from "react-hook-form"; import { useRouter } from "next/navigation"; import { Spinner } from "./Spinner"; import { AuthenticationMethodType, LoginSettings } from "@zitadel/server"; type Inputs = { loginName: string; }; type Props = { loginSettings: LoginSettings | undefined; loginName: string | undefined; }; export default function UsernameForm({ loginSettings, loginName }: Props) { const { register, handleSubmit, formState } = useForm({ mode: "onBlur", defaultValues: { loginName: loginName ? loginName : "", }, }); const router = useRouter(); const [loading, setLoading] = useState(false); async function submitLoginName(values: Inputs) { setLoading(true); const res = await fetch("/api/loginname", { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify({ loginName: values.loginName, }), }); setLoading(false); if (!res.ok) { throw new Error("Failed to load authentication methods"); } return res.json(); } async function setLoginNameAndGetAuthMethods(values: Inputs) { return submitLoginName(values).then((response) => { console.log(response); if (response.authMethodTypes.length == 1) { const method = response.authMethodTypes[0]; switch (method) { case 1: //AuthenticationMethodType.AUTHENTICATION_METHOD_TYPE_PASSWORD: return router.push( "/password?" + new URLSearchParams({ loginName: values.loginName }) ); case 2: // AuthenticationMethodType.AUTHENTICATION_METHOD_TYPE_PASSKEY return router.push( "/passkey/login?" + new URLSearchParams({ loginName: values.loginName }) ); default: return router.push( "/password?" + new URLSearchParams({ loginName: values.loginName }) ); } } else { } }); } const { errors } = formState; return (
{/* */}
); }