Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

Rev 2760 | Rev 3681 | Ir a la última revisión | | Comparar con el anterior | Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1 www 1
import React from 'react'
2
import { useForm } from 'react-hook-form';
3
import Recaptcha from "react-recaptcha";
2573 stevensc 4
import { axios } from '../../../../utils';
1 www 5
import FormErrorFeedback from "../../../../shared/form-error-feedback/FormErrorFeedback";
662 steven 6
import CryptoJSAesJson from '../../../../utils/crypto-js/cryptojs-aes-format';
1 www 7
 
8
export default (props) => {
9
    const {
10
        captchaKey,
11
        aes,
12
    } = props.backendVars;
13
 
14
    const {
15
        register,
16
        handleSubmit,
17
        errors,
18
        setError,
19
        clearErrors,
20
        getValues,
21
        setValue,
2760 stevensc 22
        watch
1 www 23
    } = useForm();
24
 
2573 stevensc 25
    // Recaptcha
1 www 26
    const reCaptchaToken = React.useRef("");
27
    const [isVerified, setIsVerified] = React.useState(false);
28
    const reCaptchaInstance = React.useRef();
2573 stevensc 29
 
1 www 30
    // states
31
    const [rememberChecked, setRememberChecked] = React.useState(false);
32
    const [isLoading, setIsLoading] = React.useState(false);
2760 stevensc 33
    const [isErrorConfirmation, setIsErrorConfirmation] = React.useState(false);
1 www 34
    // const [password, setPassword ] = React.useState('')
35
    // const [confirmation, setConfirmation] = React.useState('')
2573 stevensc 36
 
1 www 37
    const loginVerifyCallbackHandler = (response) => {
38
        reCaptchaToken.current = response;
39
        setIsVerified(true);
40
    };
41
    const loginExpiredCallbackHandler = () => {
42
        reCaptchaToken.current = "";
43
        setIsVerified(false);
44
    };
45
    const handleOnRecaptchaLoad = () => {
46
        reCaptchaToken.current = "";
47
    };
48
 
49
    const resetCaptcha = () => {
50
        reCaptchaInstance.current.reset();
51
    }
52
    React.useEffect(() => {
53
        resetCaptcha()
54
    }, []);
2760 stevensc 55
 
1 www 56
    const submit = (data, event) => {
57
        const formData = new FormData();
58
        Object.entries(data).map(([key, value]) => {
59
            if (key === "confirmation" && value)
60
                return formData.append(key, CryptoJSAesJson.encrypt(value, aes));
61
            if (key === "password" && value)
62
                return formData.append(key, CryptoJSAesJson.encrypt(value, aes));
63
        });
64
        formData.append("captcha", reCaptchaToken.current);
2573 stevensc 65
        axios.post(window.location.href, formData)
66
            .then(res => {
67
                if (res.data.success) {
68
                    window.location.href = "/"
69
                } else {
70
                    setError('password', {
71
                        type: "manual",
72
                        message: typeof res.data.data === 'string' ? res.data.data : res.data.data.confirmation[0],
73
                    });
74
                }
75
            }).catch(err => {
76
                ('>>: err > ', err)
77
            }).finally(() => {
78
                resetCaptcha()
79
            })
1 www 80
        formData.append("captcha", reCaptchaToken.current);
81
    }
2268 steven 82
 
2760 stevensc 83
    const validatePassword = (e) => {
84
        if (e.target.value !== watch('password')) {
2761 stevensc 85
            return setIsErrorConfirmation(true)
2760 stevensc 86
        }
2761 stevensc 87
 
88
        return setIsErrorConfirmation(false)
2760 stevensc 89
    }
90
 
1 www 91
    return (
2715 stevensc 92
        <div className="sign_in_sec current">
93
            <div className="row">
94
                <div className="col-lg-12">
95
                    <div className="login-sec">
96
                        <div className="sign_in_sec current" id="tab-1">
97
                            <h3>Reiniciar clave</h3>
98
                            <form
99
                                onSubmit={handleSubmit(submit)}
100
                            >
101
                                <div className="row">
102
                                    <div className="col-lg-12 no-pdd">
103
                                        <div className="inputContainer">
104
                                            <div className="sn-field">
105
                                                <input
106
                                                    type="password"
107
                                                    name="password"
108
                                                    ref={register({
109
                                                        required: "Este campo es requerido",
110
                                                    })}
111
                                                    pattern="^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@$^x%x*-]).{6,16}$"
112
                                                    title="La clave debe contener entre 6 y 16 caracteres, incluida una letra mayúscula, un número y un carácter especial #?!@$^%*-"
113
                                                    placeholder="Nueva clave"
114
                                                    maxLength="16"
115
                                                />
116
                                                <i className="la la-lock"></i>
1 www 117
                                            </div>
2715 stevensc 118
                                            {errors.password && (
119
                                                <FormErrorFeedback>{errors.password.message}</FormErrorFeedback>
120
                                            )}
1 www 121
                                        </div>
2715 stevensc 122
                                    </div>
123
                                    <div className="col-lg-12 no-pdd">
124
                                        <div className="inputContainer">
1 www 125
                                            <div className="sn-field">
2715 stevensc 126
                                                <input
127
                                                    type="password"
128
                                                    name="confirmation"
129
                                                    ref={register({
130
                                                        required: "Este campo es requerido",
131
                                                    })}
132
                                                    pattern="^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@$^x%x*-]).{6,16}$"
133
                                                    title="La clave debe contener entre 6 y 16 caracteres, incluida una letra mayúscula, un número y un carácter especial #?!@$^%*-"
134
                                                    placeholder="Repita nueva clave"
135
                                                    maxLength="16"
2760 stevensc 136
                                                    onChange={validatePassword}
1 www 137
                                                />
2715 stevensc 138
                                                <i className="la la-lock"></i>
1 www 139
                                            </div>
2760 stevensc 140
                                            {isErrorConfirmation && <FormErrorFeedback>Disculpe, las claves tienen que coincidir</FormErrorFeedback>}
1 www 141
                                        </div>
2715 stevensc 142
                                    </div>
143
                                    <div className="col-lg-12 no-pdd">
144
                                        <div className="sn-field">
145
                                            <Recaptcha
146
                                                sitekey={captchaKey}
147
                                                verifyCallback={loginVerifyCallbackHandler}
148
                                                verifyCallbackName="loginVerifyCallbackHandler"
149
                                                expiredCallback={loginExpiredCallbackHandler}
150
                                                expiredCallbackName="loginExpiredCallbackHandler"
151
                                                ref={reCaptchaInstance}
152
                                                render="explicit"
153
                                                onloadCallback={handleOnRecaptchaLoad}
154
                                                hl="es"
155
                                            />
1 www 156
                                        </div>
157
                                    </div>
2715 stevensc 158
                                    <div className="col-lg-12 no-pdd">
159
                                        <button type="submit" value="submit" id="btn-submit" disabled={!isVerified} >Guardar</button>
160
                                    </div>
161
                                </div>
162
                            </form>
1 www 163
                        </div>
2573 stevensc 164
                    </div>
1 www 165
                </div>
166
            </div>
167
        </div>
168
    )
169
}