mekasu0124

Untitled

Jan 19th, 2025
41
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import { useState, useEffect } from 'react';
  2. import { useNavigate, Link } from 'react-router-dom';
  3.  
  4. import api from '../../hooks/api';
  5. import Navbar from '../../components/navbar';
  6.  
  7.  
  8. export default function VerifyEmail() {
  9.   const [cachedEmail, setCachedEmail] = useState(null);
  10.   const [cachedPhoneNumber, setCachedPhoneNumber] = useState(null);
  11.  
  12.   useEffect(() => {
  13.     function sendVerificationCode() {
  14.       api.post('send-email-verification-code');
  15.     };
  16.  
  17.     try {
  18.       const email = window.localStorage.getItem('emailAddress');
  19.       const phone = window.localStorage.getItem('phoneNumber');
  20.  
  21.       setCachedEmail(email);
  22.       setCachedPhoneNumber(phone);
  23.     } catch (err) {
  24.       console.error(err);
  25.     };
  26.  
  27.     document.getElementById('code-text').innerText = 'Sending a verification code to your email. Please Wait'
  28.  
  29.     setTimeout(() => {
  30.       sendVerificationCode();
  31.  
  32.       document.getElementById('code-text').innerText = 'A verification code was sent to your email. Enter that code below.';
  33.     }, 3000);
  34.   }, []);
  35.  
  36.   const [postData, setPostData] = useState({
  37.     code: ''
  38.   });
  39.  
  40.   const [step, setStep] = useState(0);
  41.  
  42.   const [isError, setIsError] = useState(false);
  43.   const [isSuccess, setIsSuccess] = useState(false);
  44.  
  45.   const [errorText, setErrorText] = useState('');
  46.   const [successText, setSuccessText] = useState('');
  47.  
  48.   const navigate = useNavigate('');
  49.  
  50.   const handleChange = async (e) => {
  51.     const { name, value } = e.target;
  52.  
  53.     setPostData({
  54.       ...postData,
  55.       [name]: value,
  56.     });
  57.   };
  58.  
  59.   const handleSubmit = async (e) => {
  60.     e.preventDefault();
  61.  
  62.     if (step === 0) {
  63.       const submitCodeResponse = await api.post('/auth/verify-email-code', postData);
  64.  
  65.       if (submitCodeResponse.status === 200) {
  66.         setSuccessText('Code Confirmed Successfully. Please Wait.');
  67.         setIsSuccess(true);
  68.  
  69.         setTimeout(() => {
  70.           setPostData('');
  71.           setStep(1);
  72.         }, 3000);
  73.       } else {
  74.         setErrorText(submitCodeResponse.data.message);
  75.         setIsError(true);
  76.  
  77.         setTimeout(() => {
  78.           setIsError(false);
  79.           return setErrorText('');
  80.         }, 5000);
  81.       }
  82.     } else {
  83.       const submitCodeResponse = await api.post('/auth/verify-phone-code', postData);
  84.  
  85.       if (submitCodeResponse.status === 200) {
  86.         setSuccessText('Code Confirmed Successfully. Please Wait.');
  87.         setIsSuccess(true);
  88.  
  89.         setTimeout(() => {
  90.           setPostData('');
  91.           return navigate('/auth/login');
  92.         }, 3000);
  93.       } else {
  94.         setErrorText(submitCodeResponse.data.message);
  95.         setIsError(true);
  96.  
  97.         setTimeout(() => {
  98.           setIsError(false);
  99.           return setErrorText('');
  100.         }, 5000);
  101.       };
  102.     };
  103.   };
  104.  
  105.   if (step === 0) {
  106.     return (
  107.       <div className="flex flex-row items-center justify-center w-full h-[850px]">
  108.         <Navbar props={{ loggedIn: false }} />
  109.  
  110.         <div className="flex flex-col items-center justify-start w-full h-full ml-5 mt-10">
  111.           <div className="flex flex-col items-center justify-center w-full p-2"></div>
  112.  
  113.           <form
  114.             onSubmit={handleSubmit}
  115.             className="flex flex-col items-center justify-start w-[70%] h-[700px]">
  116.  
  117.               <div className="flex flex-col items-center justify-evenly w-full h-full border-2 border-bdr rounded-xl boxShadow">
  118.                 <label
  119.                   htmlFor="code"
  120.                   id="code-text"
  121.                   className="font-inkfree italic text-xl text-fg text-center tracking-widest w-[35%]">
  122.                  
  123.                 </label>
  124.  
  125.                 <input
  126.                   type="text"
  127.                   id="code"
  128.                   name="code"
  129.                   value={postData.code}
  130.                   onChange={handleChange}
  131.                   required
  132.                   className="font-inkfree italic text-xl text-fg text-center tracking-widest w-[50%] h-[50px] bg-gray-600 border-2 border-bdr rounded-lg outline-none hover:outline-none hover:bg-hvr hover:text-black focus:bg-bg focus:text-fg transition-all-delay-150" />
  133.               </div>
  134.  
  135.               <div className="flex flex-col items-center justify-center w-[80%] m-5 p-2">
  136.                 {isError && (<div className="bg-red-600 text-black text-center border-2 border-black rounded-full p-2 w-[60%]">{errorText}</div>)}
  137.                 {isSuccess && (<div className="bg-green-600 text-black text-center border-2 border-black rounded-full p-2 w-[60%]">{successText}</div>)}
  138.               </div>
  139.  
  140.               <div className="flex flex-row items-center justify-evenly w-full">
  141.                 <Link
  142.                   to="/"
  143.                   className="font-inkfree italic text-xl text-fg text-center tracking-widest border-2 border-bdr rounded-full w-[300px] h-[40px] outline-none hover:outline-none hover:bg-hvr hover:text-black hover:text-bold hover:scale-110 hover:text-2xl focus:outline-none transition-all delay-150 pt-1">
  144.  
  145.                   Cancel
  146.                 </Link>
  147.  
  148.                 <button
  149.                   type="submit"
  150.                   className="font-inkfree italic text-xl text-fg text-center tracking-widest border-2 border-bdr rounded-full w-[300px] h-[40px] outline-none hover:outline-none hover:bg-hvr hover:text-black hover:text-bold hover:scale-110 hover:text-2xl focus:outline-none transition-all delay-150">
  151.  
  152.                   Verify Code
  153.                 </button>
  154.               </div>
  155.           </form>
  156.         </div>
  157.       </div>
  158.     );
  159.   } else {
  160.     return (
  161.       <div className="flex flex-row items-center justify-center w-full h-[850px]">
  162.         <Navbar props={{ loggedIn: false }} />
  163.  
  164.         <div className="flex flex-col items-center justify-start w-full h-full ml-5 mt-10">
  165.           <div className="flex flex-col items-center justify-center w-full p-2"></div>
  166.  
  167.           <form
  168.             className="flex flex-col items-center justify-start w-[70%] h-[700px]">
  169.  
  170.               <div className="flex flex-col items-center justify-evenly w-full h-full border-2 border-bdr rounded-xl boxShadow"></div>
  171.  
  172.               <div className="flex flex-col items-center justify-center w-[80%] m-5 p-2">
  173.                 {isError && (<div className="bg-red-600 text-black text-center border-2 border-black rounded-full p-2 w-[60%]">{errorText}</div>)}
  174.                 {isSuccess && (<div className="bg-green-600 text-black text-center border-2 border-black rounded-full p-2 w-[60%]">{successText}</div>)}
  175.               </div>
  176.  
  177.               <div className="flex flex-row items-center justify-evenly w-full">
  178.                 <Link
  179.                   to="/"
  180.                   className="font-inkfree italic text-xl text-fg text-center tracking-widest border-2 border-bdr rounded-full w-[300px] h-[40px] outline-none hover:outline-none hover:bg-hvr hover:text-black hover:text-bold hover:scale-110 hover:text-2xl focus:outline-none transition-all delay-150 pt-1">
  181.  
  182.                   Cancel
  183.                 </Link>
  184.  
  185.                 <button
  186.                   type="submit"
  187.                   className="font-inkfree italic text-xl text-fg text-center tracking-widest border-2 border-bdr rounded-full w-[300px] h-[40px] outline-none hover:outline-none hover:bg-hvr hover:text-black hover:text-bold hover:scale-110 hover:text-2xl focus:outline-none transition-all delay-150">
  188.  
  189.                   Sign Up
  190.                 </button>
  191.               </div>
  192.           </form>
  193.         </div>
  194.       </div>
  195.     );
  196.   };
  197.  
  198. };
  199.  
Advertisement
Add Comment
Please, Sign In to add comment