import { Formik, FormikHelpers } from 'formik'; import React, { useContext, useEffect, useRef, useState } from 'react'; import { Button, Col, Form, FormControl } from 'react-bootstrap'; import * as Yup from 'yup'; import constants from 'utils/strings/constants'; import SubmitButton from 'components/SubmitButton'; import router from 'next/router'; import { changeEmail, getOTTForEmailChange } from 'services/userService'; import styled from 'styled-components'; import { AppContext } from 'pages/_app'; import { getData, LS_KEYS, setData } from 'utils/storage/localStorage'; interface formValues { email: string; ott?:string; } const EmailRow =styled.div` display: flex; flex-wrap: wrap; border: 1px solid grey; margin-bottom: 19px; align-items: center; text-align: left; color: #fff; `; interface Props{ showMessage:(value:boolean)=>void; setEmail:(email:string)=>void; } function ChangeEmailForm(props:Props) { const [loading, setLoading]=useState(false); const [ottInputVisible, setShowOttInputVisibility]=useState(false); const emailInputElement = useRef(null); const ottInputRef=useRef(null); const appContext = useContext(AppContext); useEffect(() => { setTimeout(() => { emailInputElement.current?.focus(); }, 250); }, []); useEffect(()=>{ if (!ottInputVisible) { props.showMessage(false); } }, [ottInputVisible]); const requestOTT= async( { email }: formValues, { setFieldError }: FormikHelpers)=>{ try { setLoading(true); await getOTTForEmailChange(email); props.setEmail(email); setShowOttInputVisibility(true); props.showMessage(true); setTimeout(() => { ottInputRef.current?.focus(); }, 250); } catch (e) { setFieldError('email', `${constants.EMAIl_ALREADY_OWNED}`); } setLoading(false); }; const requestEmailChange= async( { email, ott }: formValues, { setFieldError }: FormikHelpers)=>{ try { setLoading(true); await changeEmail(email, ott); setData(LS_KEYS.USER, { ...getData(LS_KEYS.USER), email }); appContext.setDisappearingFlashMessage({ message: constants.EMAIL_UDPATE_SUCCESSFUL, severity: 'success' }); router.push('/gallery'); } catch (e) { setFieldError('ott', `${constants.INCORRECT_CODE}`); } setLoading(false); }; return ( initialValues={{ email: '' }} validationSchema={Yup.object().shape({ email: Yup.string() .email(constants.EMAIL_ERROR) .required(constants.REQUIRED), })} validateOnChange={false} validateOnBlur={false} onSubmit={!ottInputVisible?requestOTT:requestEmailChange} > {({ values, errors, touched, handleChange, handleSubmit, }) => (
{!ottInputVisible ? {errors.email} : <> {values.email} {errors.ott} }
)} ); } export default ChangeEmailForm;