pantry-tracker / app / components / Auth / Login.tsx
Login.tsx
Raw
"use client";
import Link from "next/link"; 
import { useState } from 'react';
import {useSignInWithEmailAndPassword} from 'react-firebase-hooks/auth'
import {auth} from '@/app/firebase/config';
import { useRouter } from 'next/navigation';

const SignIn = () => {
  const [email, setEmail] = useState('');
  const [password, setPassword] = useState('');
  const [signInWithEmailAndPassword] = useSignInWithEmailAndPassword(auth);
  const [error, setError] = useState('');


  const router = useRouter()

  const handleSignIn = async () => {
    try {
        const res = await signInWithEmailAndPassword(email, password);
        if(res && res.user){
            if(res.user.emailVerified){
            console.log({res});
            sessionStorage.setItem('user', 'true');
            setEmail('');
            setPassword('');
            return router.push('/pantry');
            }else{
                setError('Please verify your email address');
            }}
    }catch(e){
        console.error(e)
        setError("An error occurred during login");
    }
  };
  return (
    <div className="container mx-auto p-4">
      <div className="box bg-gray-100 p-4 rounded-lg shadow-md">
      {error && <p className="text-red-500 text-sm mb-3">{error}</p>}
      <div className="mb-4">
            <label className="block text-gray-700 text-sm font-bold mb-2" htmlFor="email">
              Email
            </label>
            <input
              type="email"
              id="email"
              value={email}
              onChange={(e) => setEmail(e.target.value)}
              className="shadow appearance-none border rounded w-full py-2 px-3 text-gray-700 leading-tight focus:outline-none focus:shadow-outline"
              required
            />
            </div>
            <div className="mb-2">
            <label className="block text-gray-700 text-sm font-bold mb-2" htmlFor="password">
              Password
            </label>
            <input
              type="password"
              id="password"
              value={password}
              onChange={(e) => setPassword(e.target.value)}
              className="shadow appearance-none border rounded w-full py-2 px-3 text-gray-700 mb-3 leading-tight focus:outline-none focus:shadow-outline"
              required
            />
          </div>
          <div className="fitems-center justify-between pb-2">
            <p className="text-gray-700 text-sm">
              Don't have an account?{" "}
              <Link href="/signup" className="text-[#63b2fc] hover:underline">
                Sign Up
              </Link>
            </p>
            </div>
        <button 
          onClick={handleSignIn}
          className="bg-[#63b2fc] hover:bg-blue-700 text-white font-bold py-2 px-4 rounded focus:outline-none focus:shadow-outline w-full"
          >
          Sign In
        </button>
      </div>
    </div>
  );
};

export default SignIn;

/* export default function LogIn() {
  const [email, setEmail] = useState("");
  const [password, setPassword] = useState("");
  const [errors, setErrors] = useState({ email: "", password: "" });

  const handleSubmit = (event: React.FormEvent) => {
    event.preventDefault();
    let valid = true;
    let errors = { email: "", password: "" };

    // Validate email
    if (!/\S+@\S+\.\S+/.test(email)) {
      errors.email = "Email is invalid.";
      valid = false;
    }

    // Validate password
    if (password.length < 8) {
      errors.password = "Password must be at least 8 characters long.";
      valid = false;
    }

    setErrors(errors);

    if (valid) {
      // Handle form submission logic here
      console.log("Email:", email);
      console.log("Password:", password);
    }
  };

  return (
    <div className="container mx-auto p-4">
      <div className="box bg-gray-100 p-4 rounded-lg shadow-md">
        <form onSubmit={handleSubmit}>
          <div className="mb-4">
            <label className="block text-gray-700 text-sm font-bold mb-2" htmlFor="email">
              Email
            </label>
            <input
              type="email"
              id="email"
              value={email}
              onChange={(e) => setEmail(e.target.value)}
              className="shadow appearance-none border rounded w-full py-2 px-3 text-gray-700 leading-tight focus:outline-none focus:shadow-outline"
              required
            />
            {errors.email && <p className="text-red-500 text-xs italic">{errors.email}</p>}
          </div>
          <div className="mb-2">
            <label className="block text-gray-700 text-sm font-bold mb-2" htmlFor="password">
              Password
            </label>
            <input
              type="password"
              id="password"
              value={password}
              onChange={(e) => setPassword(e.target.value)}
              className="shadow appearance-none border rounded w-full py-2 px-3 text-gray-700 mb-3 leading-tight focus:outline-none focus:shadow-outline"
              required
            />
            {errors.password && <p className="text-red-500 text-xs italic">{errors.password}</p>}
          </div>
          <div className="fitems-center justify-between pb-2">
            <p className="text-gray-700 text-sm">
              Don't have an account?{" "}
              <Link href="/signup" className="text-[#63b2fc] hover:underline">
                Sign Up
              </Link>
            </p>
            </div>
            <div>
            <button
              type="submit"
              className="bg-[#63b2fc] hover:bg-blue-700 text-white font-bold py-2 px-4 rounded focus:outline-none focus:shadow-outline w-full"
            >
              Log In
            </button>
          </div>
        </form>
      </div>
    </div>
  );
} */