Nessuna descrizione
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

login.js 25KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720
  1. let AUTH_LOGIN_APIS_URL = {
  2. isUser(user) {
  3. return `account/getuserbyphoneormail/${user}/${user}`;
  4. },
  5. login() {
  6. return `bizgaze/crm/webapi/crmuserlogin`
  7. },
  8. signUp() {
  9. return `bizgaze/crm/webapi/registercrmuser`;
  10. },
  11. resendOTP() {
  12. return `bizgaze/crm/webapi/ReSendOtp`;
  13. },
  14. sendOTP() {
  15. return `account/sendotp`;
  16. },
  17. updatePassword() {
  18. return `account/UpdatePassword`;
  19. }
  20. }
  21. initLogin();
  22. function initLogin() {
  23. let userDetails = {
  24. otpid: null,
  25. email: null,
  26. password: null,
  27. unibaseid: null
  28. }
  29. let backotp = null;
  30. let backOptions = {
  31. forgotPassword:'forgotPassword',
  32. EmailnotV:'EmailnotV',
  33. signUp:'signUp'
  34. }
  35. let authloginLoadingBtnAction = {
  36. addLoading() {
  37. $('.authloginLoading').addClass('d-none');
  38. $('.authloginLoadingBtn').removeClass('d-none');
  39. },
  40. removeLoading() {
  41. $('.authloginLoading').removeClass('d-none');
  42. $('.authloginLoadingBtn').addClass('d-none');
  43. }
  44. }
  45. let otpLoadingAction = {
  46. addLoadingOTP() {
  47. $('.otploading').removeClass('d-none');
  48. $('.otploadingtext').addClass('d-none');
  49. },
  50. removeLoadingOTP() {
  51. $('.otploading').addClass('d-none');
  52. $('.otploadingtext').removeClass('d-none');
  53. }
  54. }
  55. let formErrorAction = {
  56. addError(message) {
  57. $('.error_msg').removeClass('d-none');
  58. $('.error_msg_res').html(message);
  59. },
  60. removeClass() {
  61. $('.error_msg').addClass('d-none');
  62. $('.error_msg_res').html('');
  63. }
  64. }
  65. function init() {
  66. const logoauth = $('.logoauth');
  67. logoauth.removeClass('d-none');
  68. loginUI();
  69. //updatePasswordUI();
  70. //OTP_UI()
  71. }
  72. function checkPassword(value){
  73. const specailHelper = containsSpecialCharsHelper(value);
  74. const isUpperCase = isUpperCaseHelper(value);
  75. const isLowerCase = isLowerCaseHelper(value);
  76. const isNumber = isNumberContainsHelper(value);
  77. const len = value.length>=8;
  78. return specailHelper && isUpperCase && isLowerCase && isNumber && len;
  79. }
  80. init();
  81. function updatePasswordUI() {
  82. formErrorAction.removeClass();
  83. let html = ` <form class="row g-3 needs-validation" novalidate> <div class="form-floating position-relative py-0"> <input required type="password" class="form-control shadow-none h-50p passwordvalidui" id="updatepassword" placeholder="Enter Your Password" autocomplete="off"> <span class="position-absolute eyePassword" style=" top: 50%; right: 3%; transform: translateY(-50%);"> <i class="text-dark fa fa-eye-slash"></i> </span> <label for="updatepassword">Password </label> <div class="invalid-feedback"> Please enter password. </div> <div class="pswd_info" style="display: none;z-index: 1;"> <p>Password must contain:</p> <ul> <li id="chck_capital" class="invalid">At least <strong>one capital letter</strong> </li> <li id="chck_small" class="invalid">At least <strong>one lowercase letter</strong> </li> <li id="chck_special" class="invalid">At least <strong>one special letter</strong> </li> <li id="chck_number" class="invalid">At least <strong>one number</strong> </li> <li id="chck_length" class="invalid">At least <strong>8 characters</strong> </li> </ul> </div> </div> <div class="form-floating position-relative py-0"> <input required type="password" class="form-control shadow-none h-50p passwordvalidui" id="updateconfirmpassword" placeholder="Enter Your Password" autocomplete="off"> <span class="position-absolute eyePassword" style=" top: 50%; right: 3%; transform: translateY(-50%);"> <i class="text-dark fa fa-eye-slash"></i> </span> <label for="updateconfirmpassword">Password </label> <div class="invalid-feedback"> Please enter password. </div> <div class="pswd_info" style="display: none;z-index: 1;"> <p>Password must contain:</p> <ul> <li id="chck_capital" class="invalid">At least <strong>one capital letter</strong> </li> <li id="chck_small" class="invalid">At least <strong>one lowercase letter</strong> </li> <li id="chck_special" class="invalid">At least <strong>one special letter</strong> </li> <li id="chck_number" class="invalid">At least <strong>one number</strong> </li> <li id="chck_length" class="invalid">At least <strong>8 characters</strong> </li> </ul> </div> </div> <div class="col-12 pt-3 mt-0 px-0"> <button class="btn bg-gradient-anwi text-white w-100 cursor-pointer h-50p btnupdatepassword" type="submit"> <div class="spinner-border authloginLoadingBtn d-none" role="status"> <span class="visually-hidden">Loading...</span> </div> <span class="authloginLoading">Update Password</span> </button> </div> </form>`;
  84. $('.authContainerUI').html(html);
  85. updatepasswordEvents();
  86. }
  87. function updatepasswordEvents() {
  88. $('.needs-validation').off('submit');
  89. loadPasswordListener();
  90. $('.needs-validation').on('submit', async (event) => {
  91. event.preventDefault();
  92. let ele = document.querySelector('.needs-validation')
  93. if (!ele.checkValidity()) {
  94. ele.classList.add('was-validated')
  95. return;
  96. }
  97. let newPassword = $('#updatepassword').val();
  98. let passwordConfirm = $('#updateconfirmpassword').val();
  99. if (newPassword != passwordConfirm) {
  100. formErrorAction.addError("Password doesn't match");
  101. return;
  102. }
  103. if(!checkPassword(newPassword)){
  104. formErrorAction.addError("Password doesn't match");
  105. return;
  106. }
  107. const forgotpassPayload = {
  108. username: userDetails.unibaseid,
  109. password: passwordConfirm,
  110. };
  111. const res = await postAPIService(AUTH_LOGIN_APIS_URL.updatePassword(), forgotpassPayload);
  112. console.log(res);
  113. if (res.data.message == 'Password Updated Successfully') {
  114. loginUI();
  115. toasterHelper("success", "Password updated successfull");
  116. }
  117. });
  118. }
  119. function loadPasswordListener(){
  120. $('.passwordvalidui').off().on('keyup',function (e){
  121. $(this).parent().find('.pswd_info').css('display','block');
  122. let value = $(this).val();
  123. const specailHelper = containsSpecialCharsHelper(value);
  124. const isUpperCase = isUpperCaseHelper(value);
  125. const isLowerCase = isLowerCaseHelper(value);
  126. const isNumber = isNumberContainsHelper(value);
  127. if(isLowerCase){
  128. $(this).parent().find('#chck_small').addClass('text-decoration-line-through');
  129. }else{
  130. $(this).parent().find('#chck_small').removeClass('text-decoration-line-through');
  131. }
  132. if(specailHelper){
  133. $(this).parent().find('#chck_special').addClass('text-decoration-line-through');
  134. }else{
  135. $(this).parent().find('#chck_special').removeClass('text-decoration-line-through');
  136. }
  137. if(isUpperCase){
  138. $(this).parent().find('#chck_capital').addClass('text-decoration-line-through');
  139. }else{
  140. $(this).parent().find('#chck_capital').removeClass('text-decoration-line-through');
  141. }
  142. if(value.length>=8){
  143. $(this).parent().find('#chck_length').addClass('text-decoration-line-through');
  144. }else{
  145. $(this).parent().find('#chck_length').removeClass('text-decoration-line-through');
  146. }
  147. if(isNumber){
  148. $(this).parent().find('#chck_number').addClass('text-decoration-line-through');
  149. }else{
  150. $(this).parent().find('#chck_number').removeClass('text-decoration-line-through');
  151. }
  152. }).blur(function (e){
  153. $(this).parent().find('.pswd_info').css('display','none');
  154. })
  155. $('.eyePassword').off();
  156. $('.eyePassword').click(function (e){
  157. e.stopPropagation();
  158. let eyeOpen = '<i class="text-dark fa fa-eye"></i>';
  159. let eyeClose = '<i class="text-dark fa fa-eye-slash"></i>';
  160. console.log(this);
  161. let isClose = $(this).find(`.fa-eye-slash`).length;
  162. if(isClose){
  163. $(this).html(eyeOpen);
  164. $(this).parent().find('.passwordvalidui').attr('type','text');
  165. }else{
  166. $(this).html(eyeClose);
  167. $(this).parent().find('.passwordvalidui').attr('type','password');
  168. }
  169. });
  170. }
  171. async function resendOTP() {
  172. otpLoadingAction.addLoadingOTP();
  173. let payload = {
  174. "FirstName": "",
  175. "LastName": "",
  176. "ContactNumber": "",
  177. "Email": "",
  178. "TenantName": "",
  179. "ContactOrEmail": userDetails.email,
  180. "IsSignup": false,
  181. "IsRegisterUser": true,
  182. "IsForgotPswd": false,
  183. "UnibaseId": userDetails.unibaseid,
  184. "OtpId": parseInt(userDetails.otpid),
  185. "UserOtp": ""
  186. }
  187. let res = await postAPIService(AUTH_LOGIN_APIS_URL.resendOTP(), payload);
  188. res = res.data;
  189. if (res.code != '0' || res.message != 'OTP resent successfully') {
  190. return;
  191. }
  192. userDetails = { ...userDetails, otpid: res.result };
  193. otpLoadingAction.removeLoadingOTP();
  194. }
  195. function loadForpasswordsEvents() {
  196. $('.needs-validation').off('submit');
  197. $('.needs-validation').on('submit', async (event) => {
  198. event.preventDefault()
  199. let ele = document.querySelector('.needs-validation')
  200. if (!ele.checkValidity()) {
  201. ele.classList.add('was-validated')
  202. return;
  203. }
  204. debugger;
  205. const email = $('#forgotpassword').val();
  206. await sendOTPService(email,1,backOptions.forgotPassword);
  207. authloginLoadingBtnAction.removeLoading();
  208. });
  209. $('.btnForgotback').click(function (e) {
  210. loginUI();
  211. })
  212. }
  213. function forgotPasswordUIEmail() {
  214. formErrorAction.removeClass();
  215. let html = `<div> <div class="d-flex justify-content-between border-bottom pb-1"><span>Forgot Password?</span><span class="btnForgotback cursor-pointer"><i class="fa-solid fa-arrow-left"></i></span></div> <div class="py-3">Enter the email associated with your account and we'll send an email with instructions to reset your password.</div> <div> <form class="row g-3 needs-validation" novalidate> <div class="pb-3 form-floating py-0"> <input required type="email" class="form-control shadow-none h-50p" id="forgotpassword" placeholder="Enter Your Email" autocomplete="off"> <label for="forgotpassword">Email address</label> <div class="invalid-feedback"> Please enter email. </div> </div> <div class="col-12 mt-0 px-0"> <button class="btn h-50p forgotpasswordbtn bg-gradient-anwi text-white w-100 cursor-pointer" type="submit"> <div class="spinner-border authloginLoadingBtn d-none" role="status"> <span class="visually-hidden">Loading...</span> </div> <span class="authloginLoading ">Password Reset</span> </button> </div> </form> </div></div>`;
  216. $('.authContainerUI').html(html);
  217. loadForpasswordsEvents();
  218. }
  219. function loginEvents() {
  220. // submit event
  221. $('.needs-validation').off('submit');
  222. $('.needs-validation').on('submit', async (event) => {
  223. event.preventDefault();
  224. let ele = document.querySelector('.needs-validation')
  225. if (!ele.checkValidity()) {
  226. ele.classList.add('was-validated')
  227. return;
  228. }
  229. debugger;
  230. const email = $('#User_Email').val();
  231. const isUserURL = AUTH_LOGIN_APIS_URL.isUser(email);
  232. authloginLoadingBtnAction.addLoading();
  233. const user = await getAPIService(isUserURL);
  234. const isUser = user.data.result === null && user.data.message === `Email/Phonenumber doesn't exist`;
  235. if (!isUser) {
  236. loginUser();
  237. } else {
  238. debugger;
  239. signUpUser();
  240. }
  241. });
  242. // forgot password
  243. $('.forgotpasswordBtn').click(function (e) {
  244. forgotPasswordUIEmail();
  245. });
  246. loadPasswordListener();
  247. }
  248. async function loginUserService(email, passord) {
  249. const loginPayload = {
  250. username: email,
  251. Password: passord,
  252. UnibaseId: "",
  253. RememberMe: false,
  254. };
  255. let res = await postAPIService(AUTH_LOGIN_APIS_URL.login(),
  256. loginPayload
  257. );
  258. return res;
  259. }
  260. async function loginUser() {
  261. formErrorAction.removeClass();
  262. let userEmail = $("#User_Email").val();
  263. let userPassword = $("#User_password").val();
  264. let res = await loginUserService(userEmail, userPassword);
  265. res = res.data;
  266. let isError = res.code != '0';
  267. userDetails['email'] = userEmail;
  268. userDetails['password'] = userPassword;
  269. debugger;
  270. if (isError) {
  271. if (res.message === 'Email is not verified') {
  272. formErrorAction.addError(`<span><span>${res.message}</span> <span class="validemail cursor-pointer"><u>Valid here</u></span></span>`);
  273. $('.validemail').off('click')
  274. $('.validemail').click(async function (e) {
  275. await sendOTPService(userEmail,2,backOptions.EmailnotV);
  276. formErrorAction.removeClass();
  277. authloginLoadingBtnAction.removeLoading();
  278. });
  279. authloginLoadingBtnAction.removeLoading();
  280. return;
  281. }
  282. formErrorAction.addError(`${res.message}`);
  283. authloginLoadingBtnAction.removeLoading();
  284. return;
  285. }
  286. let authObj = {
  287. token: res.result.sessionId,
  288. userId: res.result.userId,
  289. unibaseId:res.result.unibaseId,
  290. sessionId:res.result.sessionId,
  291. tenantId:res.result.tenantId,
  292. name:res.result.name,
  293. assetUrl:res.result.assetUrl
  294. };
  295. COOKIE_HELPER_ACTIONS.setCookie(authObj);
  296. localStorage.setItem("userdata",JSON.stringify(res.result));
  297. const isCartAdded = localStorage.getItem(CART_ADD);
  298. if(isCartAdded){
  299. localStorage.removeItem(CART_ADD);
  300. window.location.href = `/selectdelivery.html`;
  301. return;
  302. }
  303. localStorage.setItem(USER_AUTH_OKAY,2);
  304. window.location.href = '/';
  305. //authloginLoadingBtnAction.removeLoading();
  306. console.log(res);
  307. }
  308. async function sendOTPService(userEmail,num=0,option) {
  309. const isUserURL = AUTH_LOGIN_APIS_URL.isUser(userEmail);
  310. authloginLoadingBtnAction.addLoading();
  311. const user = await getAPIService(isUserURL);
  312. const isUser = user.data.result === null || user.data.message === `Email/Phonenumber doesn't exist`;
  313. if (isUser) {
  314. formErrorAction.addError(user.data.message);
  315. authloginLoadingBtnAction.removeLoading();
  316. return;
  317. }
  318. const forgotpassPayload = {
  319. firstname: "",
  320. lastname: "",
  321. contactnumber: "",
  322. email: "",
  323. tenantname: "",
  324. contactoremail: user.data.result.email,
  325. IsSignup: false,
  326. IsRegisterUser: false,
  327. IsForgotPswd: true,
  328. UnibaseId: user.data.result.userName,
  329. OtpId: 0,
  330. UserOtp: "",
  331. };
  332. const forgetpassRes = await postAPIService(
  333. AUTH_LOGIN_APIS_URL.sendOTP(),
  334. forgotpassPayload
  335. );
  336. userDetails.email = userEmail;
  337. userDetails.otpid = forgetpassRes.data;
  338. userDetails.unibaseid = user.data.result.userName;
  339. console.log(forgetpassRes, userDetails);
  340. backotp = option
  341. OTP_UI(num);
  342. }
  343. async function signUpUser() {
  344. formErrorAction.removeClass();
  345. let userEmail = $("#User_Email").val();
  346. let userPassword = $("#User_password").val();
  347. let checkPasswordValue = checkPassword(userPassword);
  348. if(!checkPasswordValue){
  349. authloginLoadingBtnAction.removeLoading();
  350. formErrorAction.addError('Password must contain one specail letter ,number,small letter, uppercase letter and 8 letters');
  351. return;
  352. }
  353. const userRegistratioNPayload = {
  354. organizationtypeid: "2",
  355. organizationid: "0",
  356. contactid: "0",
  357. userid: "0",
  358. username: "0",
  359. users_phonenumber: "0",
  360. password: userPassword,
  361. users_emailaddress: "0",
  362. emailaddress: userEmail,
  363. contactname: userEmail.split('@')[0],
  364. phonenumber: "0",
  365. branchid: "0",
  366. tenantname: "Anwi Systems",
  367. rolename: "Customer Admin",
  368. currencyid: "0",
  369. customerformuniqueid: "Bizgaze_Platform_Crm_RegisterCRMUser",
  370. };
  371. let res = await postAPIService(
  372. AUTH_LOGIN_APIS_URL.signUp(),
  373. userRegistratioNPayload
  374. );
  375. console.log(res);
  376. res = res.data;
  377. if (res.code != '0') {
  378. formErrorAction.addError(res.message);
  379. authloginLoadingBtnAction.removeLoading();
  380. return;
  381. }
  382. res = res.result;
  383. userDetails['otpid'] = res.OtpId;
  384. userDetails['email'] = userEmail;
  385. userDetails['password'] = userPassword;
  386. userDetails['unibaseid'] = res.UnibaseId;
  387. backotp = backOptions.signUp
  388. OTP_UI();
  389. }
  390. function loginUI() {
  391. formErrorAction.removeClass();
  392. let html = ` <div class="text-center pb-4">
  393. <span class="font-weight-600">Login</span> / <span class="font-weight-600">Signup</span>
  394. </div>
  395. <form class="row g-3 needs-validation" novalidate>
  396. <div class="form-floating py-0">
  397. <input required type="email" class="form-control shadow-none h-50p" id="User_Email" placeholder="Enter Your Email" autocomplete="off">
  398. <label for="User_Email">Email address</label>
  399. <div class="invalid-feedback"> Please enter email. </div>
  400. </div>
  401. <div class="form-floating position-relative py-0">
  402. <input required type="password" class="form-control shadow-none h-50p passwordvalidui" id="User_password" placeholder="Enter Your Password" autocomplete="off">
  403. <span class="position-absolute eyePassword" style=" top: 50%; right: 3%; transform: translateY(-50%);">
  404. <i class="text-dark fa fa-eye-slash"></i>
  405. </span>
  406. <label for="User_password">Password </label>
  407. <div class="invalid-feedback"> Please enter password. </div>
  408. <div class="pswd_info" style="display: none;z-index: 1;">
  409. <p>Password must contain:</p>
  410. <ul>
  411. <li id="chck_capital" class="invalid">At least <strong>one capital letter</strong>
  412. </li>
  413. <li id="chck_small" class="invalid">At least <strong>one lowercase letter</strong>
  414. </li>
  415. <li id="chck_special" class="invalid">At least <strong>one special letter</strong>
  416. </li>
  417. <li id="chck_number" class="invalid">At least <strong>one number</strong>
  418. </li>
  419. <li id="chck_length" class="invalid">At least <strong>8 characters</strong>
  420. </li>
  421. </ul>
  422. </div>
  423. </div>
  424. <div class="fs-7 my-2 satoshi_font text-center"> By continuing, I agree to the Terms of Use & Privacy Policy </div>
  425. <div class="col-12 mt-0 px-0">
  426. <button class="btn bg-gradient-anwi text-white w-100 cursor-pointer h-50p" type="submit">
  427. <div class="spinner-border authloginLoadingBtn d-none" role="status">
  428. <span class="visually-hidden">Loading...</span>
  429. </div>
  430. <span class="authloginLoading h-50p">Continue</span>
  431. </button>
  432. </div>
  433. </form>
  434. <div class="pt-3 text-center">
  435. <span class="forgotpasswordBtn cursor-pointer">Forgot password?</span>
  436. </div>
  437. `;
  438. $('.authContainerUI').html(html);
  439. loginEvents();
  440. }
  441. function OTP_UI(forgot = 0) {
  442. formErrorAction.removeClass();
  443. let html = `<div class="d-flex justify-content-between border-bottom pb-1">
  444. <span></span>
  445. <span class="btnForgotback">
  446. <i class="fa-solid fa-arrow-left"></i>
  447. </span>
  448. </div> <div class="otp-validation"> <div class="otp-input-group mt-3"> <div> <h4 class="text-center">Enter OTP</h4> <div class="text-center">We have send OTP to your email </div> <p class="user_email text-center"></p> <div class="otp-sent-email fw-600 text-center"></div> </div> <div class="d-flex my-4"> <div class="col"> <div class="form-group"> <input type="text" class="press form-control" name="code" maxlength="1" tabindex="1" autocomplete="off"> </div> </div> <div class="col"> <div class="form-group"> <input type="text" class="press form-control" name="code" maxlength="1" tabindex="2" autocomplete="off"> </div> </div> <div class="col"> <div class="form-group"> <input type="text" class="press form-control" name="code" maxlength="1" tabindex="3" autocomplete="off"> </div> </div> <div class="col"> <div class="form-group"> <input type="text" class="press form-control" name="code" maxlength="1" tabindex="4" autocomplete="off"> </div> </div> <div class="col"> <div class="form-group"> <input type="text" class="press form-control" name="code" maxlength="1" tabindex="5" autocomplete="off"> </div> </div> <div class="col"> <div class="form-group"> <input type="text" class="press form-control" name="code" maxlength="1" tabindex="6" autocomplete="off"> </div> </div> </div> <div> <a href="#" class=" h-50p d-flex align-items-center justify-content-center bg-gradient-anwi btn fw-500 text-white w-100" id="email_validate_proceed" type="submit"><div class="spinner-border otploading d-none" role="status">
  449. </div><span class="otploadingtext">Verfiy OTP</span></a> </div> <div class="resendOTP cursor-pointer text-center pt-4 ">Resend OTP</div> </div></div>`;
  450. $('.authContainerUI').html(html);
  451. loadOTPEvents(forgot);
  452. }
  453. async function validOTP(email, id, otp) {
  454. const validateForgotpass = {
  455. email: email,
  456. otpid: id,
  457. userotp: otp,
  458. };
  459. const res = await postAPIService(
  460. `hyperfusion/validateotp`,
  461. validateForgotpass
  462. );
  463. return res;
  464. }
  465. function loadOTPEvents(forgot) {
  466. $('.resendOTP').click(function (e) {
  467. resendOTP();
  468. })
  469. $('.btnForgotback').off().click(function(e){
  470. debugger;
  471. if(backotp === backOptions.forgotPassword){
  472. forgotPasswordUIEmail();
  473. }else if(backotp === backOptions.EmailnotV){
  474. loginUI();
  475. }else if(backotp === backOptions.signUp){
  476. loginUI();
  477. }
  478. });
  479. $("#email_validate_proceed").click(async function () {
  480. debugger;
  481. otpLoadingAction.addLoadingOTP();
  482. let userotp = '';
  483. $(".otp-validation .otp-input-group input").each(function () {
  484. let presVal = $(this).val();
  485. userotp += presVal;
  486. });
  487. debugger;
  488. if (userotp.length == 6) {
  489. // const validateForgotpass = {
  490. // email: userDetails.email,
  491. // otpid: userDetails.otpid,
  492. // userotp: userotp,
  493. // };
  494. $('#email_validate_proceed').hide()
  495. $(".loader-btn").show();
  496. const validate_email_resopt = await validOTP(userDetails.email, userDetails.otpid, userotp);
  497. $(".loader-btn").hide();
  498. $('#email_validate_proceed').show()
  499. const Resotp = validate_email_resopt.data.result;
  500. if (Resotp == "Otp verified successfully") {
  501. if (forgot == 1) {
  502. updatePasswordUI();
  503. return;
  504. } else if (forgot == 2) {
  505. loginUI();
  506. toasterHelper("success", "Email has been verified");
  507. return;
  508. }
  509. let res = await loginUserService(userDetails.email, userDetails.password);
  510. res = res.data;
  511. let authObj = {
  512. token: res.result.sessionId,
  513. userId: res.result.userId,
  514. unibaseId:res.result.unibaseId,
  515. sessionId:res.result.sessionId,
  516. tenantId:res.result.tenantId,
  517. name:res.result.name,
  518. assetUrl:res.result.assetUrl
  519. };
  520. COOKIE_HELPER_ACTIONS.setCookie(authObj);
  521. localStorage.setItem("userdata",JSON.stringify(res.result));
  522. const isCartAdded = localStorage.getItem(CART_ADD);
  523. if(isCartAdded){
  524. localStorage.removeItem(CART_ADD);
  525. window.location.href = `/selectdelivery.html`;
  526. return;
  527. }
  528. localStorage.setItem(USER_AUTH_OKAY,1);
  529. window.location.href = '/';
  530. otpLoadingAction.removeLoadingOTP();
  531. } else {
  532. // toasterOpts()
  533. // Command: toastr["error"]("Please enter Valid OTP");
  534. otpLoadingAction.removeLoadingOTP();
  535. formErrorAction.addError("Please enter Valid OTP")
  536. }
  537. }
  538. else {
  539. otpLoadingAction.removeLoadingOTP();
  540. formErrorAction.addError("Please enter Valid OTP")
  541. }
  542. });
  543. $(".otp-validation .otp-input-group").on("paste", function (p) {
  544. let data = p.originalEvent.clipboardData.getData("text");
  545. let dataLength = data.length;
  546. for (let i = 0; i < dataLength; i++) {
  547. let input = $(
  548. '.otp-validation .otp-input-group input[tabindex="' + (i + 1) + '"]'
  549. );
  550. input.val(data.charAt(i));
  551. if (input.val().length >= input.attr("maxlength")) {
  552. let nextInput = $(
  553. '.otp-validation .otp-input-group input[tabindex="' +
  554. (i + 2) +
  555. '"]'
  556. );
  557. if (nextInput) {
  558. nextInput.focus();
  559. }
  560. }
  561. }
  562. p.preventDefault();
  563. });
  564. $('.otp-validation .otp-input-group input[type="text"]').on(
  565. "keyup",
  566. function (e) {
  567. if ($(this).val().length >= $(this).attr("maxlength")) {
  568. if (e.keyCode !== 9 && e.keyCode !== 16) {
  569. let tabIndex = parseInt($(this).attr("tabindex")) + 1;
  570. $(
  571. '.otp-validation .otp-input-group input[tabindex="' +
  572. $(this).attr("tabindex") +
  573. '"]'
  574. ).val($(this).val());
  575. $(
  576. '.otp-validation .otp-input-group input[tabindex="' +
  577. tabIndex +
  578. '"]'
  579. ).focus();
  580. }
  581. } else {
  582. if (e.keyCode === 8) {
  583. let tabIndex = parseInt($(this).attr("tabindex")) - 1;
  584. $(
  585. '.otp-validation .otp-input-group input[tabindex="' +
  586. tabIndex +
  587. '"]'
  588. ).focus();
  589. }
  590. }
  591. }
  592. );
  593. }
  594. }