import { Button } from "@kobalte/core/button";
import { action, query, redirect } from "@solidjs/router";
import { createEffect } from "solid-js";
import Logo from "../assets/logo_login.svg";
import { TextInput } from "../components/TextInput";
import { authClient } from "../lib/auth-client";
import { convertToRecord } from "../lib/utils";
type SignInForm = {
readonly username: string;
readonly password: string;
};
export const getUserSession = query(() => authClient.getSession(), "userSession");
const signIn = action(async (data: FormData) => {
authClient.signIn.username(convertToRecord<SignInForm>(data), {
onSuccess: () => {
console.log("ON SUCCESS >>>>") // this logs correctly
throw redirect("/home", { revalidate: getUserSession.key }); // <--- this does not redirect
},
onError: (ctx) => {
alert(ctx.error.message);
},
});
});
export default function SignIn() {
return (
<div class="h-full flex flex-col items-center justify-center gap-2">
<img src={Logo} width="200" />
<form action={signIn} method="post" class="flex flex-col gap-4">
<TextInput name="username" label="Username" />
<TextInput name="password" label="Password" type="password" />
<Button class="button" type="submit">
Login
</Button>
</form>
</div>
);
}
import { Button } from "@kobalte/core/button";
import { action, query, redirect } from "@solidjs/router";
import { createEffect } from "solid-js";
import Logo from "../assets/logo_login.svg";
import { TextInput } from "../components/TextInput";
import { authClient } from "../lib/auth-client";
import { convertToRecord } from "../lib/utils";
type SignInForm = {
readonly username: string;
readonly password: string;
};
export const getUserSession = query(() => authClient.getSession(), "userSession");
const signIn = action(async (data: FormData) => {
authClient.signIn.username(convertToRecord<SignInForm>(data), {
onSuccess: () => {
console.log("ON SUCCESS >>>>") // this logs correctly
throw redirect("/home", { revalidate: getUserSession.key }); // <--- this does not redirect
},
onError: (ctx) => {
alert(ctx.error.message);
},
});
});
export default function SignIn() {
return (
<div class="h-full flex flex-col items-center justify-center gap-2">
<img src={Logo} width="200" />
<form action={signIn} method="post" class="flex flex-col gap-4">
<TextInput name="username" label="Username" />
<TextInput name="password" label="Password" type="password" />
<Button class="button" type="submit">
Login
</Button>
</form>
</div>
);
}