diff options
| author | Rafi Zadanly <zadanlyr@gmail.com> | 2023-02-20 14:20:44 +0700 |
|---|---|---|
| committer | Rafi Zadanly <zadanlyr@gmail.com> | 2023-02-20 14:20:44 +0700 |
| commit | e33a330786ffbfcd774de00dc697c6dff47faf27 (patch) | |
| tree | cd35ce2a36c37cd8c6e991862f929d83dcd45464 /src/lib/auth/components | |
| parent | fdefe7cfe899125a9bd553b542976eed0de919c1 (diff) | |
fix
Diffstat (limited to 'src/lib/auth/components')
| -rw-r--r-- | src/lib/auth/components/Login.jsx | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/src/lib/auth/components/Login.jsx b/src/lib/auth/components/Login.jsx new file mode 100644 index 00000000..e598fe48 --- /dev/null +++ b/src/lib/auth/components/Login.jsx @@ -0,0 +1,99 @@ +import Image from "next/image" +import IndoteknikLogo from "@/images/logo.png" +import Link from "@/core/components/elements/Link/Link" +import { useState } from "react" +import loginApi from "../api/loginApi" +import { useRouter } from "next/router" +import Alert from "@/core/components/elements/Alert/Alert" +import { setAuth } from "@/core/utils/auth" + +const Login = () => { + const router = useRouter() + const [ email, setEmail ] = useState('') + const [ password, setPassword ] = useState('') + const [ isLoading, setIsLoading ] = useState(false) + const [ alert, setAlert ] = useState(null) + + const handleSubmit = async (e) => { + e.preventDefault() + setIsLoading(true) + const login = await loginApi({ email, password }) + setIsLoading(false) + + if (login.isAuth) { + setAuth(login.user) + router.push('/') + return + } + switch (login.reason) { + case 'NOT_FOUND': + setAlert({ + children: 'Email atau password tidak cocok', + type: 'info' + }) + break + case 'NOT_ACTIVE': + setAlert({ + children: ( + <> + Email belum diaktivasi, + <Link className="text-gray-900" href={`/activate?email=${email}`}>aktivasi sekarang</Link> + </> + ), + type: 'info' + }) + break + } + } + + return ( + <div className="p-6 pt-10 flex flex-col items-center"> + <Link href="/"> + <Image src={IndoteknikLogo} alt="Logo Indoteknik" width={150} height={50} /> + </Link> + <h1 className="text-2xl mt-4 font-semibold">Mulai Belanja Sekarang</h1> + <h2 className="text-gray_r-11 font-normal mt-1 mb-4">Masuk ke akun kamu untuk belanja</h2> + + { alert && ( + <Alert className="text-center" type={alert.type}> + { alert.children } + </Alert> + ) } + + <form className="w-full mt-6 flex flex-col gap-y-4" onSubmit={handleSubmit}> + <div> + <label htmlFor="email">Alamat Email</label> + <input + type="text" + id="email" + className="form-input w-full mt-3" + value={email} + onChange={(e) => setEmail(e.target.value)} + placeholder="contoh@email.com" + /> + </div> + <div> + <label htmlFor="password">Kata Sandi</label> + <input + type="password" + id="password" + className="form-input w-full mt-3" + value={password} + onChange={(e) => setPassword(e.target.value)} + placeholder="••••••••••••" + /> + </div> + <button + type="submit" + className="btn-solid-red w-full mt-2" + disabled={!email || !password || isLoading} + > + { !isLoading ? 'Masuk' : 'Loading...'} + </button> + </form> + <p className="text-gray_r-11 mt-4">Belum punya akun Indoteknik? <Link href="/register" className="inline">Daftar</Link></p> + </div> + ) +} + +export default Login
\ No newline at end of file |
