feat: fixed login

This commit is contained in:
2025-04-23 13:47:16 +03:00
parent c629f0dcf8
commit eb12afe763
2 changed files with 23 additions and 17 deletions

View File

@@ -1,4 +1,5 @@
import { FunctionComponent } from "preact"; import { FunctionComponent } from "preact";
import { HTMLProps } from "preact/compat";
import { tv } from "tailwind-variants"; import { tv } from "tailwind-variants";
import classes from "./Button.module.scss"; import classes from "./Button.module.scss";
const button = tv({ const button = tv({
@@ -12,11 +13,9 @@ const button = tv({
}, },
}); });
interface ButtonProps { interface ButtonProps extends HTMLProps<HTMLButtonElement> {
color?: "primary" | "secondary" | "red"; color?: "primary" | "secondary" | "red";
onClick?: () => void;
className?: string; className?: string;
type?: "button" | "submit";
} }
const Button: FunctionComponent<ButtonProps> = ({ const Button: FunctionComponent<ButtonProps> = ({
@@ -33,4 +32,6 @@ const Button: FunctionComponent<ButtonProps> = ({
); );
}; };
Button.displayName = "AHButton";
export default Button; export default Button;

View File

@@ -6,7 +6,6 @@ import { useAppContext } from "@/providers/AuthProvider";
import { FunctionComponent } from "preact"; import { FunctionComponent } from "preact";
import { useLocation } from "preact-iso"; import { useLocation } from "preact-iso";
import "preact/debug"; import "preact/debug";
import { useState } from "preact/hooks";
import { Controller, SubmitHandler, useForm } from "react-hook-form"; import { Controller, SubmitHandler, useForm } from "react-hook-form";
import { ILoginForm } from "./login.dto"; import { ILoginForm } from "./login.dto";
import classes from "./login.module.scss"; import classes from "./login.module.scss";
@@ -18,17 +17,6 @@ const testUser = {
const LoginPage: FunctionComponent = () => { const LoginPage: FunctionComponent = () => {
const { isLoggedIn } = useAppContext(); const { isLoggedIn } = useAppContext();
const { route } = useLocation(); const { route } = useLocation();
const [passwordError, setPasswordError] = useState("");
const login: SubmitHandler<ILoginForm> = async (data) => {
console.log(data);
if (data.login !== testUser.login || data.password !== testUser.password) {
setError("login", { message: "Неверный" }); //TODO: не показывает ошибку
return;
}
isLoggedIn.value = true;
localStorage.setItem("loggedIn", "true");
route("/profile/tasks", true);
};
const { control, handleSubmit, formState, setError } = useForm({ const { control, handleSubmit, formState, setError } = useForm({
defaultValues: { defaultValues: {
login: "", login: "",
@@ -36,12 +24,23 @@ const LoginPage: FunctionComponent = () => {
}, },
mode: "onChange", mode: "onChange",
}); });
const login: SubmitHandler<ILoginForm> = async (data) => {
console.log(data);
if (data.login !== testUser.login || data.password !== testUser.password) {
setError("login", { message: "Неверный логин или пароль" });
setError("password", { message: "Неверный логин или пароль" });
return;
}
isLoggedIn.value = true;
localStorage.setItem("loggedIn", "true");
route("/profile/tasks", true);
};
if (isLoggedIn.value) route("/profile/tasks", true); if (isLoggedIn.value) route("/profile/tasks", true);
return !isLoggedIn.value ? ( return !isLoggedIn.value ? (
<div class={classes.login_container}> <div class={classes.login_container}>
<div class={classes.login_card}> <div class={classes.login_card}>
<p class={classes.login_card_name}>Антихвост</p> <p class={classes.login_card_name}>Антихвост</p>
<form onSubmit={handleSubmit((data) => login(data))}> <form onSubmit={handleSubmit(login)}>
<Controller <Controller
name="login" name="login"
control={control} control={control}
@@ -59,7 +58,13 @@ const LoginPage: FunctionComponent = () => {
required: "Введите пароль", required: "Введите пароль",
}} }}
render={({ field }) => ( render={({ field }) => (
<Input placeholder="Пароль" textAlign="center" type="password" error={passwordError} {...field} /> <Input
placeholder="Пароль"
textAlign="center"
type="password"
error={formState.errors.password?.message}
{...field}
/>
)} )}
/> />
<Button type="submit" color="secondary" className="w-full"> <Button type="submit" color="secondary" className="w-full">