login.tsx 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. import { NextPage } from "next";
  2. import { useEffect } from "react";
  3. import Layout from "../components/Layout";
  4. import { useAuth } from "../context/UserContext";
  5. import useForm from "../hooks/useForm";
  6. import { useRouter } from "next/router";
  7. import api from "../utils/api";
  8. const Login: NextPage = () => {
  9. const { login } = useAuth();
  10. const router = useRouter();
  11. const { error, submitHandler, success } = useForm(api.login);
  12. useEffect(() => {
  13. if (success) {
  14. login(success.result);
  15. setTimeout(() => {
  16. router.push("/");
  17. }, 1000);
  18. }
  19. }, [success, login, router]);
  20. return (
  21. <Layout>
  22. <form className="form" onSubmit={submitHandler}>
  23. <div className="form-group">
  24. <label htmlFor="email" className="form-label">
  25. Email
  26. </label>
  27. <input
  28. type="email"
  29. name="email"
  30. id="email"
  31. className="form-input"
  32. placeholder="monkey@gmail.com"
  33. required
  34. />
  35. </div>
  36. <div className="form-group">
  37. <label htmlFor="password" className="form-label">
  38. Password
  39. </label>
  40. <input
  41. type="password"
  42. name="password"
  43. id="password"
  44. minLength={6}
  45. className="form-input"
  46. placeholder="••••••"
  47. required
  48. />
  49. </div>
  50. <button type="submit" className="form-button">
  51. Log in
  52. </button>
  53. {error && !success && (
  54. <div role="alert" className="form-alert-msg">
  55. {error.message}
  56. </div>
  57. )}
  58. {success && (
  59. <div role="alert" className="form-success-msg">{`${
  60. success.message || "Logged in successfully!"
  61. } Redirecting to home`}</div>
  62. )}
  63. </form>
  64. </Layout>
  65. );
  66. };
  67. export default Login;