import { useAuthActions, useAuthToken } from "@convex-dev/auth/react";
import { Authenticated, AuthLoading, Unauthenticated } from "convex/react";
import { useState } from "react";
const SignIn = () => {
const { signIn, signOut } = useAuthActions();
const token = useAuthToken();
const [step, setStep] = useState<"signUp" | "signIn">("signIn");
return (
<>
<AuthLoading>
<h1>Loading...</h1>
</AuthLoading>
<Authenticated>
<h1>Authenticated</h1>
</Authenticated>
<Unauthenticated>
<h1>Unauthenticated</h1>
</Unauthenticated>
<p>{token}</p>
<form
onSubmit={(event) => {
event.preventDefault();
const formData = new FormData(event.currentTarget);
void signIn("password", formData);
}}
>
<input name="email" placeholder="Email" type="text" />
<input name="password" placeholder="Password" type="password" />
<input name="flow" type="hidden" value={step} />
<button type="submit">{step === "signIn" ? "Sign in" : "Sign up"}</button>
<button
type="button"
onClick={() => {
setStep(step === "signIn" ? "signUp" : "signIn");
}}
>
{step === "signIn" ? "Sign up instead" : "Sign in instead"}
</button>
</form>
<button onClick={() => void signOut()}>Sign out</button>
</>
);
};
export default SignIn;
import { useAuthActions, useAuthToken } from "@convex-dev/auth/react";
import { Authenticated, AuthLoading, Unauthenticated } from "convex/react";
import { useState } from "react";
const SignIn = () => {
const { signIn, signOut } = useAuthActions();
const token = useAuthToken();
const [step, setStep] = useState<"signUp" | "signIn">("signIn");
return (
<>
<AuthLoading>
<h1>Loading...</h1>
</AuthLoading>
<Authenticated>
<h1>Authenticated</h1>
</Authenticated>
<Unauthenticated>
<h1>Unauthenticated</h1>
</Unauthenticated>
<p>{token}</p>
<form
onSubmit={(event) => {
event.preventDefault();
const formData = new FormData(event.currentTarget);
void signIn("password", formData);
}}
>
<input name="email" placeholder="Email" type="text" />
<input name="password" placeholder="Password" type="password" />
<input name="flow" type="hidden" value={step} />
<button type="submit">{step === "signIn" ? "Sign in" : "Sign up"}</button>
<button
type="button"
onClick={() => {
setStep(step === "signIn" ? "signUp" : "signIn");
}}
>
{step === "signIn" ? "Sign up instead" : "Sign in instead"}
</button>
</form>
<button onClick={() => void signOut()}>Sign out</button>
</>
);
};
export default SignIn;