import { Controller } from 'stimulus'; import Cookies from 'js-cookie'; const loader = require("./../components/loader.js"); const validator = require("./../components/validator.js"); const helper = require("./../components/helper.js"); export default class extends Controller { connect() { loader.loadSDK('registration') var registerWrap = this.element; var licenseLink = helper.getLicenseLink(Cookies.get('region')); helper.renderCapcha(registerWrap.querySelector('.d-capcha-start')); registerWrap.querySelectorAll('.license').forEach(function(el) { /* политика */ var div = document.createElement('div'); div.classList = 'form-group'; var formCheck = document.createElement('div'); formCheck.classList = 'form-check'; div.append(formCheck); var accept = document.createElement('input'); accept.classList = "form-check-input"; accept.id = "accept"; accept.checked = false; accept.type = "checkbox"; formCheck.append(accept); var license = helper.getLicenseLink(Cookies.get('region')); var label = document.createElement('label'); label.setAttribute('for' , 'accept'); label.innerHTML = `ознакомлен(а) с условиями политики в отношении обработки персональных данных`; formCheck.append(label); var validAccept = document.createElement('div'); validAccept.classList = 'msg-valid valid-accept'; div.append(validAccept); el.append(div) /* согласие */ var formCheck = document.createElement('div'); formCheck.classList = 'form-check'; div.append(formCheck); var acceptPerson = document.createElement('input'); acceptPerson.classList = "form-check-input"; acceptPerson.id = "acceptPerson"; acceptPerson.checked = false; acceptPerson.type = "checkbox"; formCheck.append(acceptPerson); var licensePerson = helper.getLicensePersonLink(); var labelPerson = document.createElement('label'); labelPerson.setAttribute('for' , 'acceptPerson'); labelPerson.innerHTML = `даю согласие на обработку персональных данных`; formCheck.append(labelPerson); var validAcceptPerson = document.createElement('div'); validAcceptPerson.classList = 'msg-valid valid-acceptPerson'; div.append(validAcceptPerson); el.append(div) }); } btnBack() { var registerWrap = this.element; registerWrap.querySelector('.register-start').classList.remove('d-none'); registerWrap.querySelector('.register-init').classList.add('d-none'); registerWrap.querySelector('.register-complete').classList.add('d-none'); registerWrap.querySelector('.register-complete').dataset.rToken = null; registerWrap.querySelector('.register-complete').dataset.pwdToken = null; registerWrap.querySelector('.alert.msg').classList.add('d-none'); registerWrap.querySelector('.alert.msg').innerHTML = 'Поля, обозначенные звездочкой (*), обязательны для заполнения'; var capchaStart = helper.renderCapcha(registerWrap.querySelector('.d-capcha-start')); setTimeout(() => { window.smartCaptcha.reset(capchaStart.dataset.id) }, 100); } btnStart() { var captchaId = this.element.querySelector('#smart-captcha')?.dataset?.id; var valid, invalid = false; var registerWrap = this.element; valid = validator.checkPhone( registerWrap.querySelector('#phone'), registerWrap.querySelector(`.valid-phone`) ); if (valid) { invalid = valid } valid = validator.checkSmartCaptcha( window.smartCaptcha.getResponse(captchaId), registerWrap.querySelector('.valid-captcha') ); if (valid) { invalid = valid } if (validator.checkAccept(registerWrap.querySelector('#accept'),registerWrap.querySelector('.valid-accept'))) { invalid = true; } if (validator.checkAccept(registerWrap.querySelector('#acceptPerson'),registerWrap.querySelector('.valid-acceptPerson'))) { invalid = true; } if (invalid) { return false; } window.webSDK.recoveryInit({ 'login': registerWrap.querySelector('#phone').value.replace(/[^\w\s!?]/g,''), 'captcha': window.smartCaptcha.getResponse(captchaId) }).then(function (resolve) { registerWrap.querySelector('.register-start').classList.add('d-none'); registerWrap.querySelector('.register-complete').classList.remove('d-none'); registerWrap.querySelector('.register-complete').dataset.pwdToken = resolve.data.pwdToken; if (resolve.data.message.indexOf('почтовый ящик') != '-1') { registerWrap.querySelector('.emailCode').classList.remove('d-none'); registerWrap.querySelector('.alertEmailView').innerHTML = resolve.data.message; registerWrap.querySelector('.register-complete').dataset.type = 'email'; } else { registerWrap.querySelector('.smsCode').classList.remove('d-none'); registerWrap.querySelector('.alertSmsCode').innerHTML = resolve.data.message; registerWrap.querySelector('.register-complete').dataset.type = 'sms'; } }).catch(function (e) { if (e.data?.errors?.captcha) { registerWrap.querySelector('.valid-captcha').innerText = e.data?.errors?.captcha?.[0]; window.smartCaptcha.reset(captchaId); } if (e.data?.message?.includes("не найден в базе данных")) { registerWrap.querySelector('.register-start').classList.add('d-none'); registerWrap.querySelector('.register-init').classList.remove('d-none'); helper.renderCapcha(registerWrap.querySelector('.d-capcha-init')); } }); } btnReg() { var captchaId = this.element.querySelector('#smart-captcha')?.dataset?.id; var valid, invalid = false; var registerWrap = this.element; registerWrap.querySelectorAll('.alert.alert-danger.alert-dismissible').forEach(function(e) { e.remove(); }); var options = { firstName: registerWrap.querySelector('#firstName').value, lastName: registerWrap.querySelector('#lastName').value, middleName: registerWrap.querySelector('#middleName').value }; for (var key of Object.keys(options)) { valid = validator.checkTextRu( registerWrap.querySelector(`#${key}`), registerWrap.querySelector(`.valid-${key}`) ); if (valid) { invalid = valid } } options.email = registerWrap.querySelector('#email').value; valid = validator.checkEmail( registerWrap.querySelector('#email'), registerWrap.querySelector(`.valid-email`) ); if (valid) { invalid = valid } options.phone = registerWrap.querySelector('#phone').value; valid = validator.checkPhone( registerWrap.querySelector('#phone'), registerWrap.querySelector(`.valid-phone`) ); if (valid) { invalid = valid } valid = validator.checkSmartCaptcha( window.smartCaptcha.getResponse(captchaId), registerWrap.querySelector('.valid-captcha') ); if (valid) { invalid = valid } var validGender = false; registerWrap.querySelectorAll('.gender').forEach(function (el) { if (el.checked) { registerWrap.querySelector('.valid-gender').innerHTML = ''; validGender = true; options.gender = el.value; } }); if (!validGender) { registerWrap.querySelector('.valid-gender').innerHTML = 'укажите Ваш пол'; invalid = true; } registerWrap.querySelectorAll('.msg-valid').forEach(function (el) { el.innerHTML = ''; }); window.webSDK.registerInit({ firstName: options.firstName, lastName: options.lastName, middleName: options.middleName, birthDate: registerWrap.querySelector('#birthDate').value, email: options.email, phone: options.phone, gender: options.gender, captcha: window.smartCaptcha.getResponse(captchaId) }).then(function(resolve) { registerWrap.querySelector('.register-init').classList.add('d-none'); registerWrap.querySelector('.register-complete').classList.remove('d-none'); registerWrap.querySelector('.register-complete').dataset.rToken = resolve.data.rToken; if (resolve.data && resolve.data.email == 'true') { registerWrap.querySelector('.emailCode').classList.remove('d-none'); registerWrap.querySelector('.emailView').innerHTML = options.email; } else { registerWrap.querySelector('.smsCode').classList.remove('d-none'); registerWrap.querySelector('.smsView').innerHTML = options.phone; } }).catch(function(error) { window.smartCaptcha.reset(captchaId); helper.sendRequest({ data: {'error': error, method: 'registerInit'} }, helper.getHostname() + '/api/log', "POST", "json", true, "application/json"); var registerAlert = document.getElementById('register-alert'); if (! registerAlert) { var registerAlert = document.createElement('div'); registerAlert.classList = 'alert alert-danger alert-dismissible fade'; registerAlert.setAttribute('role', 'alert'); var divMsg = document.createElement('div'); divMsg.classList = 'alert-msg'; registerAlert.append(divMsg); var buttonClose = document.createElement('button'); buttonClose.classList = 'close'; buttonClose.dataset.dismiss ='alert'; buttonClose.setAttribute('aria-label', 'Close'); buttonClose.innerHTML = ''; registerAlert.append(buttonClose); registerWrap.prepend(registerAlert); } if (error.data.message) { registerAlert.classList = 'alert alert-danger alert-dismissible fade show'; registerAlert.querySelector('.alert-msg').innerHTML = error.data.message; } else { for (var prop in error.data) { if (error.data[prop]) { var el = registerWrap.querySelector('.valid-' + prop) el.innerHTML = error.data[prop]; } } } }); } btnComplite() { var registerWrap = this.element; if (registerWrap.querySelector('.register-complete').dataset.pwdToken !== "null") { var type = registerWrap.querySelector('.register-complete').dataset.type; var code = registerWrap.querySelector('#emailCode'); if (type == 'sms') { var code = registerWrap.querySelector('#smsCode'); } this.recoveryComplite(code, type); } else { this.registerComplete(); } } registerComplete() { var registerWrap = this.element; window.webSDK.registerComplete({ rToken: registerWrap.querySelector('.register-complete').dataset.rToken, emailCode: registerWrap.querySelector('#emailCode').value, smsCode: registerWrap.querySelector('#smsCode').value, password: registerWrap.querySelector('#password').value }).then(function(response) { registerWrap.querySelector('.alert.filter').classList.add('d-none'); var successAlert = document.createElement('div'); successAlert.classList = 'alert alert-success alert-dismissible fade show'; successAlert.setAttribute('role', 'alert'); var divMsg = document.createElement('div'); divMsg.classList = 'alert-msg'; divMsg.innerHTML = '
Регистрация завершена.
' + '' + response.data.text + '
'; successAlert.append(divMsg); var buttonClose = document.createElement('button'); buttonClose.classList = 'close'; buttonClose.dataset.dismiss ='alert'; buttonClose.setAttribute('aria-label', 'Close'); buttonClose.innerHTML = ''; successAlert.append(buttonClose); document.getElementById('alert-system').prepend(successAlert); registerWrap.querySelector('.register-complete').classList.add('d-none'); }).catch(function(error) { helper.sendRequest({ data: {'error': error, method: 'registerComplete'} }, helper.getHostname() + '/api/log', "POST", "json", true, "application/json"); for (var prop in error.data) { if (error.data[prop]) { var classValid = prop.split('.')[1]; if (classValid) { var el = registerWrap.querySelector('.valid-' + prop.split('.')[1]); } else { var el = registerWrap.querySelector('.valid-' + prop); } el.innerHTML = error.data[prop]; } } $('html, body').animate({scrollTop:0}, '300'); }); } recoveryComplite(inputCode, type) { var registerWrap = this.element; var valid, invalid = false; valid = validator.checkNotEmpty( inputCode, registerWrap.querySelector('.valid-' + type + 'Code') ); if (valid) { invalid = valid } valid = validator.checkNotEmpty( registerWrap.querySelector('#password'), registerWrap.querySelector('.valid-password') ); if (valid) { invalid = valid } if (invalid) { return false; } window.webSDK.recoveryComplete({ 'pwdToken': registerWrap.querySelector('.register-complete').dataset.pwdToken, 'password': registerWrap.querySelector('#password').value, 'code': inputCode.value }).then(function (result) { registerWrap.querySelector('.alert.msg').classList.add('d-none'); var successAlert = document.createElement('div'); successAlert.classList = 'alert alert-success alert-dismissible fade show'; successAlert.setAttribute('role', 'alert'); var divMsg = document.createElement('div'); divMsg.classList = 'alert-msg'; divMsg.innerHTML = result.data.message; successAlert.append(divMsg); var buttonClose = document.createElement('button'); buttonClose.classList = 'close'; buttonClose.dataset.dismiss ='alert'; buttonClose.setAttribute('aria-label', 'Close'); buttonClose.innerHTML = ''; successAlert.append(buttonClose); document.getElementById('alert-system').prepend(successAlert); registerWrap.querySelector('.register-complete').classList.add('d-none'); $.ajax({ method: "POST", crossDomain: false, url: "/forget", contentType: "application/x-www-form-urlencoded", dataType: "json", data: { token: popupBody.dataset.csrf, uid: forget.data.uid, password: forgetPasswd } }); }).catch(function (e) { helper.sendRequest({ data: {'error': e, method: 'recoveryComplete'} }, helper.getHostname() + '/api/log', "POST", "json", true, "application/json"); var msg = registerWrap.querySelector('.msg'); msg.classList.add('alert-danger'); msg.classList.remove('filter'); if (e.data && e.data.error) { msg.innerHTML = e.data.error } }); } }