Autoría | Ultima modificación | Ver Log |
import React, { useEffect, useState, useRef } from 'react'import { useForm } from 'react-hook-form'import Recaptcha from 'react-recaptcha'import { axios } from '../../../utils'import FormErrorFeedback from '../../../../shared/form-error-feedback/FormErrorFeedback'import CryptoJSAesJson from '../../../utils/crypto-js/cryptojs-aes-format'import { useSelector } from 'react-redux'const ResetPassword = () => {const { site_key, aes } = useSelector(({ auth }) => auth)const { register, handleSubmit, errors, setError, watch } = useForm({mode: 'all',})const reCaptchaToken = useRef('')const [isVerified, setIsVerified] = useState(false)const reCaptchaInstance = useRef()const loginVerifyCallbackHandler = (response) => {reCaptchaToken.current = responsesetIsVerified(true)}const loginExpiredCallbackHandler = () => {reCaptchaToken.current = ''setIsVerified(false)}const handleOnRecaptchaLoad = () => {reCaptchaToken.current = ''}const resetCaptcha = () => {reCaptchaInstance.current?.reset()}useEffect(() => {resetCaptcha()}, [])const submit = (data) => {const formData = new FormData()Object.entries(data).map(([key, value]) =>(key === 'confirmation' || key === 'password') && value? formData.append(key, CryptoJSAesJson.encrypt(value, aes)): formData.append(key, value))formData.append('captcha', reCaptchaToken.current)axios.post(window.location.href, formData).then(({ data: response }) => {const { data, success } = responseif (!success) {setError('password', {type: 'manual',message: typeof data === 'string' ? data : data.confirmation[0],})return}window.location.href = '/'}).catch((err) => {console.log('Error: ', err)throw new Error(err)}).finally(() => {formData.append('captcha', reCaptchaToken.current)resetCaptcha()})}return (<div className="sign_in_sec current"><div className="row"><div className="col-lg-12"><div className="login-sec"><div className="sign_in_sec current" id="tab-1"><h3>Reiniciar clave</h3><form onSubmit={handleSubmit(submit)}><div className="row"><div className="col-lg-12 no-pdd"><div className="inputContainer"><div className="sn-field"><inputtype="password"name="password"ref={register({required: 'Este campo es requerido',pattern: {value:/^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@$^x%x*-]).{6,16}$/i,message:'Debe contener entre 6 y 16 caracteres, incluida una letra mayúscula, un número y un carácter especial #?!@$^%*-',},})}title="La clave debe contener entre 6 y 16 caracteres, incluida una letra mayúscula, un número y un carácter especial #?!@$^%*-"placeholder="Nueva clave"/><i className="la la-lock" /></div>{errors.password && (<FormErrorFeedback>{errors.password.message}</FormErrorFeedback>)}</div></div><div className="col-lg-12 no-pdd"><div className="inputContainer"><div className="sn-field"><inputtype="password"name="confirmation"ref={register({required: 'Este campo es requerido',validate: (v) =>v === watch('password') ||'Disculpe, las claves tienen que coincidir',})}title="La clave debe contener entre 6 y 16 caracteres, incluida una letra mayúscula, un número y un carácter especial #?!@$^%*-"placeholder="Repita nueva clave"/><i className="la la-lock" /></div>{errors.confirmation && (<FormErrorFeedback>{errors.confirmation.message}</FormErrorFeedback>)}</div></div><div className="col-lg-12 no-pdd"><div className="sn-field"><Recaptchasitekey={site_key}verifyCallback={loginVerifyCallbackHandler}verifyCallbackName="loginVerifyCallbackHandler"expiredCallback={loginExpiredCallbackHandler}expiredCallbackName="loginExpiredCallbackHandler"ref={reCaptchaInstance}render="explicit"onloadCallback={handleOnRecaptchaLoad}hl="es"/></div></div><div className="col-lg-12 no-pdd"><buttontype="submit"value="submit"id="btn-submit"disabled={!isVerified}>Guardar</button></div></div></form></div></div></div></div></div>)}export default ResetPassword