"use client"; import React, { useMemo, useState } from "react"; import { useRouter } from "next/navigation"; import { useMutation } from "@tanstack/react-query"; import { ShieldPlus, User } from "lucide-react"; import { useSelector } from "react-redux"; import { RootState, store } from "@/redux/store"; import { setDataLoginStorage, setStateLogin, setToken, } from "@/redux/reducer/auth"; import { setRememberPassword } from "@/redux/reducer/site"; import { setInfoUser } from "@/redux/reducer/user"; import authServices, { LoginResponse } from "@/services/authServices"; import { httpRequest } from "@/services"; import { PATH } from "@/constant/config"; import FormCustom from "@/components/utils/FormCustom"; import InputForm from "@/components/utils/FormCustom/components/InputForm"; import CustomLoading from "@/components/customs/custom-loading"; import CustomButton from "@/components/customs/custom-button"; import { ContextFormCustom } from "@/components/utils/FormCustom/contexts"; export default function MainLogin() { const router = useRouter(); const { dataLoginStorage } = useSelector((state: RootState) => state.auth); const { isRememberPassword } = useSelector((state: RootState) => state.site); // Khởi tạo state form từ data lưu trữ const [form, setForm] = useState(() => ({ username: isRememberPassword ? dataLoginStorage?.usernameStorage || "" : "", password: isRememberPassword ? dataLoginStorage?.passwordStorage || "" : "", })); const loginMutation = useMutation({ mutationFn: async () => { return (await httpRequest({ http: authServices.login({ username: form.username, password: form.password, deviceId: "Browser-Chrome-Windowns", }), })) as LoginResponse; }, onSuccess(data) { if (data) { store.dispatch(setToken(data?.token)); store.dispatch( setInfoUser({ accessToken: data?.token || "", refreshToken: data?.refreshToken || "", userId: data?.userId || "", }), ); store.dispatch(setStateLogin(true)); if (isRememberPassword) { store.dispatch( setDataLoginStorage({ usernameStorage: form.username, passwordStorage: form.password, }), ); } else { store.dispatch(setDataLoginStorage(null)); } router.replace(PATH.HOME, undefined); } }, }); const handleLogin = () => { // Kiểm tra nhanh điều kiện dữ liệu trước khi trigger API if (!form.username || !form.password) return; if (isRememberPassword) { store.dispatch( setDataLoginStorage({ usernameStorage: form.username, passwordStorage: form.password, }), ); } else { store.dispatch(setDataLoginStorage(null)); } loginMutation.mutate(); }; return (
{/* TITLE */}

Đăng nhập

Chào mừng bạn đến với hệ thống quản lý

{/* FORM */}
{/* USERNAME */} Tài khoản * } placeholder="Tài khoản" type="text" name="username" onClean isRequired isBlur showDone icon={} /> {/* PASSWORD */}
Mật khẩu * } placeholder="Mật khẩu" type="password" name="password" onClean isRequired isBlur showDone icon={} />
{/* REMEMBER PASSWORD */}
store.dispatch(setRememberPassword(!isRememberPassword)) } className="h-5 w-5 cursor-pointer accent-[#0011AB]" />
{/* BUTTONS */}
{/* LOGIN BUTTON */} {({ isDone }) => { // Tự kiểm tra xem form hiện tại đã có sẵn dữ liệu hợp lệ chưa const hasRememberedData = !!(form.username && form.password); // Sáng nút nếu FormCustom báo Done HOẶC form đã có sẵn dữ liệu từ Redux const canSubmit = isDone || hasRememberedData; return ( Đăng nhập ); }} {/* REGISTER BUTTON */} router.push(PATH.REGISTER)} > Đăng ký
); }