import { useSessionStore } from "../../lib/store/sessionStore"; import { LstCard } from "../extendedUI/LstCard"; import { CardHeader } from "../ui/card"; import { toast } from "sonner"; import { z } from "zod"; import { useRouter, useSearch } from "@tanstack/react-router"; import { Controller, useForm } from "react-hook-form"; import { zodResolver } from "@hookform/resolvers/zod"; import { Label } from "../ui/label"; import { Input } from "../ui/input"; import { Checkbox } from "../ui/checkbox"; import { Button } from "../ui/button"; const FormSchema = z.object({ username: z.string().min(1, "You must enter a valid username"), password: z.string().min(4, "You must enter a valid password"), rememberMe: z.boolean(), }); const LoginForm = () => { const { setSession } = useSessionStore(); const rememeberMe = localStorage.getItem("rememberMe") === "true"; const username = localStorage.getItem("username") || ""; const router = useRouter(); const search = useSearch({ from: "/login" }); const { register, handleSubmit, control, formState: { errors }, } = useForm>({ resolver: zodResolver(FormSchema), defaultValues: { username: username || "", password: "", rememberMe: rememeberMe, }, }); const onSubmitLogin = async (value: z.infer) => { // Do something with form data // first update the rememberMe incase it was selected if (value.rememberMe) { localStorage.setItem("rememberMe", value.rememberMe.toString()); localStorage.setItem("username", value.username); } else { localStorage.removeItem("rememberMe"); localStorage.removeItem("username"); } try { const response = await fetch("/api/auth/login", { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify({ username: value.username, password: value.password, }), }); const data = await response.json(); // Store token in localStorage // localStorage.setItem("auth_token", data.data.token); if (data.success) { const prod = btoa( `${value.username.toLowerCase()}:${value.password}` ); const prodUser = { ...data.user, prod: prod }; setSession(prodUser, data.token); toast.success(`You are logged in as ${data.user.username}`); console.log(search.redirect ? search.redirect : "oops"); router.history.push(search.redirect ? search.redirect : "/"); } if (!data.success) { toast.error(`${data.message}`); } //console.log(data); } catch (err) { toast.error("Invalid credentials"); } }; return (

Login to LST


{errors.username && (

{errors.username.message}

)}
<> {errors.password && (

{errors.password.message}

)}
( <> )} control={control} name="rememberMe" defaultValue={rememeberMe} />
); }; export default LoginForm;