diff --git a/client/src/Pages/Auth/Login/hooks/useLoadingSubmit.jsx b/client/src/Pages/Auth/Login/hooks/useLoadingSubmit.jsx deleted file mode 100644 index a779165b6..000000000 --- a/client/src/Pages/Auth/Login/hooks/useLoadingSubmit.jsx +++ /dev/null @@ -1,22 +0,0 @@ -// Hook to avoid double submits and manage loading state -import { useState, useCallback } from "react"; - -const useLoadingSubmit = () => { - const [submitting, setSubmitting] = useState(false); - const executeSubmit = useCallback( - async (submitFunction) => { - if (submitting) return; - setSubmitting(true); - try { - return await submitFunction(); - } finally { - setSubmitting(false); - } - }, - [submitting] - ); - - return { submitting, executeSubmit }; -}; - -export default useLoadingSubmit; diff --git a/client/src/Pages/Auth/Login/hooks/useLoginForm.jsx b/client/src/Pages/Auth/Login/hooks/useLoginForm.jsx deleted file mode 100644 index 61814d723..000000000 --- a/client/src/Pages/Auth/Login/hooks/useLoginForm.jsx +++ /dev/null @@ -1,19 +0,0 @@ -import { useState } from "react"; - -const useLoginForm = () => { - const [form, setForm] = useState({ - email: "", - password: "", - }); - const onChange = (e) => { - let { name, value } = e.target; - if (name === "email") { - value = value.toLowerCase(); - } - const updatedForm = { ...form, [name]: value }; - setForm(updatedForm); - }; - return [form, onChange]; -}; - -export default useLoginForm; diff --git a/client/src/Pages/Auth/Login/hooks/useLoginSubmit.jsx b/client/src/Pages/Auth/Login/hooks/useLoginSubmit.jsx deleted file mode 100644 index b009793d5..000000000 --- a/client/src/Pages/Auth/Login/hooks/useLoginSubmit.jsx +++ /dev/null @@ -1,40 +0,0 @@ -import { useDispatch } from "react-redux"; -import { login } from "../../../../Features/Auth/authSlice.js"; -import { useNavigate } from "react-router-dom"; -import { createToast } from "../../../../Utils/toastUtils.jsx"; -import { useTranslation } from "react-i18next"; - -const useLoginSubmit = () => { - const dispatch = useDispatch(); - const navigate = useNavigate(); - const { t } = useTranslation(); - - const handleLoginSubmit = async (form, setErrors) => { - const action = await dispatch(login(form)); - if (action.payload.success) { - navigate("/uptime"); - createToast({ - body: t("auth.login.toasts.success"), - }); - } else { - if (action.payload) { - if (action.payload.msg === "Incorrect password") - setErrors({ - password: t("auth.login.errors.password.incorrect"), - }); - // dispatch errors - createToast({ - body: t("auth.login.toasts.incorrectPassword"), - }); - } else { - // unknown errors - createToast({ - body: t("common.toasts.unknownError"), - }); - } - } - }; - return [handleLoginSubmit]; -}; - -export default useLoginSubmit; diff --git a/client/src/Pages/Auth/Login/hooks/useValidateLoginForm.jsx b/client/src/Pages/Auth/Login/hooks/useValidateLoginForm.jsx deleted file mode 100644 index 0872213ad..000000000 --- a/client/src/Pages/Auth/Login/hooks/useValidateLoginForm.jsx +++ /dev/null @@ -1,31 +0,0 @@ -import { useState } from "react"; -import { loginCredentials } from "../../../../Validation/validation.js"; - -const useValidateLoginForm = () => { - const [errors, setErrors] = useState({ - email: "", - password: "", - }); - const validateField = (name, value) => { - const { error } = loginCredentials.validate({ [name]: value }); - setErrors((prev) => ({ - ...prev, - [name]: error?.details?.[0]?.message || "", - })); - }; - const validateForm = (form) => { - const { error } = loginCredentials.validate(form, { abortEarly: false }); - if (error) { - const formErrors = {}; - for (const err of error.details) { - formErrors[err.path[0]] = err.message; - } - setErrors(formErrors); - return false; - } - return true; - }; - return [errors, setErrors, validateField, validateForm]; -}; - -export default useValidateLoginForm; diff --git a/client/src/Pages/Auth/Login/index.tsx b/client/src/Pages/Auth/Login/index.tsx index 49c7bafa7..1e4b48aaf 100644 --- a/client/src/Pages/Auth/Login/index.tsx +++ b/client/src/Pages/Auth/Login/index.tsx @@ -19,7 +19,7 @@ const LoginPage = () => { const { schema, defaults } = useLoginForm(); - const { control, handleSubmit, setError } = useForm({ + const { control, handleSubmit } = useForm({ resolver: zodResolver(schema), defaultValues: defaults, }); @@ -30,13 +30,8 @@ const LoginPage = () => { const result = await post("/auth/login", data); if (result?.success) { - console.log(result); - // dispatch(setAuthState(result)); - // navigate("/uptime"); - } else if (result?.msg === "Incorrect password") { - setError("password", { - message: "auth.login.errors.password.incorrect", - }); + dispatch(setAuthState(result)); + navigate("/uptime"); } }; diff --git a/client/src/Pages/Auth/Login/old.jsx b/client/src/Pages/Auth/Login/old.jsx deleted file mode 100644 index 7f5dcb5e4..000000000 --- a/client/src/Pages/Auth/Login/old.jsx +++ /dev/null @@ -1,102 +0,0 @@ -// Components -import Stack from "@mui/material/Stack"; -import Button from "@mui/material/Button"; -import TextInput from "@/Components/v1/Inputs/TextInput/index.jsx"; -import { PasswordEndAdornment } from "@/Components/v1/Inputs/TextInput/Adornments/index.jsx"; -import TextLink from "@/Components/v1/TextLink/index.jsx"; -import AuthPageWrapper from "../components/AuthPageWrapper.jsx"; -// Utils -import { useTheme } from "@mui/material/styles"; -import { useTranslation } from "react-i18next"; -import useLoginForm from "./hooks/useLoginForm.jsx"; -import useValidateLoginForm from "./hooks/useValidateLoginForm.jsx"; -import useLoginSubmit from "./hooks/useLoginSubmit.jsx"; -import useLoadingSubmit from "./hooks/useLoadingSubmit.jsx"; - -const Login = () => { - // Hooks - const { t } = useTranslation(); - const theme = useTheme(); - const [form, onChange] = useLoginForm(); - const [errors, setErrors, validateField, validateForm] = useValidateLoginForm(); - const [handleLoginSubmit] = useLoginSubmit(); - const { submitting, executeSubmit } = useLoadingSubmit(); - - // Handlers - const handleChange = (e) => { - onChange(e); - validateField(e.target.name, e.target.value); - }; - const onSubmit = async (e) => { - e.preventDefault(); - const isValid = validateForm(form); - if (!isValid) return; - await executeSubmit(() => handleLoginSubmit(form, setErrors)); - }; - return ( - - - - } - /> - - - - - - ); -}; -export default Login;