No Description
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 24KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686
  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. if (res.data.message == 'Password Updated Successfully') {
  113. loginUI();
  114. toasterHelper("success", "Password updated successfull");
  115. }
  116. });
  117. }
  118. function loadPasswordListener(){
  119. $('.passwordvalidui').off().on('keyup',function (e){
  120. debugger;
  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. let isClose = $(this).find(`.fa-eye-slash`).length;
  161. if(isClose){
  162. $(this).html(eyeOpen);
  163. $(this).parent().find('.passwordvalidui').attr('type','text');
  164. }else{
  165. $(this).html(eyeClose);
  166. $(this).parent().find('.passwordvalidui').attr('type','password');
  167. }
  168. });
  169. }
  170. async function resendOTP() {
  171. otpLoadingAction.addLoadingOTP();
  172. let payload = {
  173. "FirstName": "",
  174. "LastName": "",
  175. "ContactNumber": "",
  176. "Email": "",
  177. "TenantName": "",
  178. "ContactOrEmail": userDetails.email,
  179. "IsSignup": false,
  180. "IsRegisterUser": true,
  181. "IsForgotPswd": false,
  182. "UnibaseId": userDetails.unibaseid,
  183. "OtpId": parseInt(userDetails.otpid),
  184. "UserOtp": ""
  185. }
  186. let res = await postAPIService(AUTH_LOGIN_APIS_URL.resendOTP(), payload);
  187. res = res.data;
  188. if (res.code != '0' || res.message != 'OTP resent successfully') {
  189. return;
  190. }
  191. userDetails = { ...userDetails, otpid: res.result };
  192. otpLoadingAction.removeLoadingOTP();
  193. }
  194. function loadForpasswordsEvents() {
  195. $('.needs-validation').off('submit');
  196. $('.needs-validation').on('submit', async (event) => {
  197. event.preventDefault()
  198. let ele = document.querySelector('.needs-validation')
  199. if (!ele.checkValidity()) {
  200. ele.classList.add('was-validated')
  201. return;
  202. }
  203. const email = $('#forgotpassword').val();
  204. await sendOTPService(email,1,backOptions.forgotPassword);
  205. authloginLoadingBtnAction.removeLoading();
  206. });
  207. $('.btnForgotback').click(function (e) {
  208. loginUI();
  209. })
  210. }
  211. function forgotPasswordUIEmail() {
  212. formErrorAction.removeClass();
  213. 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>`;
  214. $('.authContainerUI').html(html);
  215. loadForpasswordsEvents();
  216. }
  217. function loginEvents() {
  218. // submit event
  219. $('.needs-validation').off('submit');
  220. $('.needs-validation').on('submit', async (event) => {
  221. event.preventDefault();
  222. let ele = document.querySelector('.needs-validation')
  223. if (!ele.checkValidity()) {
  224. ele.classList.add('was-validated')
  225. return;
  226. }
  227. const email = $('#User_Email').val();
  228. const isUserURL = AUTH_LOGIN_APIS_URL.isUser(email);
  229. authloginLoadingBtnAction.addLoading();
  230. const user = await getAPIService(isUserURL);
  231. const isUser = user.data.result === null && user.data.message === `Email/Phonenumber doesn't exist`;
  232. if (!isUser) {
  233. loginUser();
  234. } else {
  235. signUpUser();
  236. }
  237. });
  238. // forgot password
  239. $('.forgotpasswordBtn').click(function (e) {
  240. forgotPasswordUIEmail();
  241. });
  242. loadPasswordListener();
  243. }
  244. async function loginUserService(email, passord) {
  245. const loginPayload = {
  246. username: email,
  247. Password: passord,
  248. UnibaseId: "",
  249. RememberMe: false,
  250. };
  251. let res = await postAPIService(AUTH_LOGIN_APIS_URL.login(),
  252. loginPayload
  253. );
  254. return res;
  255. }
  256. async function loginUser() {
  257. formErrorAction.removeClass();
  258. let userEmail = $("#User_Email").val();
  259. let userPassword = $("#User_password").val();
  260. let res = await loginUserService(userEmail, userPassword);
  261. res = res.data;
  262. let isError = res.code != '0';
  263. userDetails['email'] = userEmail;
  264. userDetails['password'] = userPassword;
  265. debugger;
  266. if (isError) {
  267. if (res.message === 'Email is not verified') {
  268. formErrorAction.addError(`<span><span>${res.message}</span> <span class="validemail cursor-pointer"><u>Valid here</u></span></span>`);
  269. $('.validemail').off('click')
  270. $('.validemail').click(async function (e) {
  271. await sendOTPService(userEmail,2,backOptions.EmailnotV);
  272. formErrorAction.removeClass();
  273. authloginLoadingBtnAction.removeLoading();
  274. });
  275. authloginLoadingBtnAction.removeLoading();
  276. return;
  277. }
  278. formErrorAction.addError(`${res.message}`);
  279. authloginLoadingBtnAction.removeLoading();
  280. return;
  281. }
  282. COOKIE_HELPER_ACTIONS.setCookie({
  283. token: res.result.sessionId,
  284. userid: res.result.userId,
  285. ...res.result
  286. });
  287. const isCartAdded = localStorage.getItem(CART_ADD);
  288. if(isCartAdded){
  289. localStorage.removeItem(CART_ADD);
  290. window.location.href = `/selectdelivery.html`;
  291. return;
  292. }
  293. localStorage.setItem(USER_AUTH_OKAY,2);
  294. window.location.href = '/';
  295. //authloginLoadingBtnAction.removeLoading();
  296. }
  297. async function sendOTPService(userEmail,num=0,option) {
  298. const isUserURL = AUTH_LOGIN_APIS_URL.isUser(userEmail);
  299. authloginLoadingBtnAction.addLoading();
  300. const user = await getAPIService(isUserURL);
  301. const isUser = user.data.result === null || user.data.message === `Email/Phonenumber doesn't exist`;
  302. if (isUser) {
  303. formErrorAction.addError(user.data.message);
  304. authloginLoadingBtnAction.removeLoading();
  305. return;
  306. }
  307. const forgotpassPayload = {
  308. firstname: "",
  309. lastname: "",
  310. contactnumber: "",
  311. email: "",
  312. tenantname: "",
  313. contactoremail: user.data.result.email,
  314. IsSignup: false,
  315. IsRegisterUser: false,
  316. IsForgotPswd: true,
  317. UnibaseId: user.data.result.userName,
  318. OtpId: 0,
  319. UserOtp: "",
  320. };
  321. const forgetpassRes = await postAPIService(
  322. AUTH_LOGIN_APIS_URL.sendOTP(),
  323. forgotpassPayload
  324. );
  325. userDetails.email = userEmail;
  326. userDetails.otpid = forgetpassRes.data;
  327. userDetails.unibaseid = user.data.result.userName;
  328. backotp = option
  329. OTP_UI(num);
  330. }
  331. async function signUpUser() {
  332. formErrorAction.removeClass();
  333. let userEmail = $("#User_Email").val();
  334. let userPassword = $("#User_password").val();
  335. let checkPasswordValue = checkPassword(userPassword);
  336. if(!checkPasswordValue){
  337. authloginLoadingBtnAction.removeLoading();
  338. formErrorAction.addError('Password must contain one specail letter ,number,small letter, uppercase letter and 8 letters');
  339. return;
  340. }
  341. const userRegistratioNPayload = {
  342. organizationtypeid: "2",
  343. organizationid: "0",
  344. contactid: "0",
  345. userid: "0",
  346. username: "0",
  347. users_phonenumber: "0",
  348. password: userPassword,
  349. users_emailaddress: "0",
  350. emailaddress: userEmail,
  351. contactname: userEmail.split('@')[0],
  352. phonenumber: "0",
  353. branchid: "0",
  354. tenantname: "Anwi Systems",
  355. rolename: "Customer Admin",
  356. currencyid: "0",
  357. customerformuniqueid: "Bizgaze_Platform_Crm_RegisterCRMUser",
  358. };
  359. let res = await postAPIService(
  360. AUTH_LOGIN_APIS_URL.signUp(),
  361. userRegistratioNPayload
  362. );
  363. res = res.data;
  364. if (res.code != '0') {
  365. formErrorAction.addError(res.message);
  366. authloginLoadingBtnAction.removeLoading();
  367. return;
  368. }
  369. res = res.result;
  370. userDetails['otpid'] = res.OtpId;
  371. userDetails['email'] = userEmail;
  372. userDetails['password'] = userPassword;
  373. userDetails['unibaseid'] = res.UnibaseId;
  374. backotp = backOptions.signUp
  375. OTP_UI();
  376. }
  377. function loginUI() {
  378. formErrorAction.removeClass();
  379. let html = `<div class="text-center pb-4">
  380. <span class="font-weight-600">Login</span> / <span class="font-weight-600">Signup</span>
  381. </div>
  382. <form class="row g-3 needs-validation" novalidate>
  383. <div class="form-floating py-0">
  384. <input required type="email" class="form-control shadow-none h-50p" id="User_Email" placeholder="Enter Your Email" autocomplete="off">
  385. <label for="User_Email">Email address</label>
  386. <div class="invalid-feedback"> Please enter email. </div>
  387. </div>
  388. <div class="form-floating position-relative py-0">
  389. <input required type="password" class="form-control shadow-none h-50p passwordvalidui" id="User_password" placeholder="Enter Your Password" autocomplete="off">
  390. <span class="position-absolute eyePassword" style=" top: 50%; right: 3%; transform: translateY(-50%);">
  391. <i class="text-dark fa fa-eye-slash"></i>
  392. </span>
  393. <label for="User_password">Password </label>
  394. <div class="invalid-feedback"> Please enter password. </div>
  395. <div class="pswd_info" style="display: none;z-index: 1;">
  396. <p>Password must contain:</p>
  397. <ul>
  398. <li id="chck_capital" class="invalid">At least <strong>one capital letter</strong>
  399. </li>
  400. <li id="chck_small" class="invalid">At least <strong>one lowercase letter</strong>
  401. </li>
  402. <li id="chck_special" class="invalid">At least <strong>one special letter</strong>
  403. </li>
  404. <li id="chck_number" class="invalid">At least <strong>one number</strong>
  405. </li>
  406. <li id="chck_length" class="invalid">At least <strong>8 characters</strong>
  407. </li>
  408. </ul>
  409. </div>
  410. </div>
  411. <div class="fs-7 my-2 satoshi_font text-center"> By continuing, I agree to the Terms of Use & Privacy Policy </div>
  412. <div class="col-12 mt-0 px-0">
  413. <button class="btn bg-gradient-anwi text-white w-100 cursor-pointer h-50p" type="submit">
  414. <div class="spinner-border authloginLoadingBtn d-none" role="status">
  415. <span class="visually-hidden">Loading...</span>
  416. </div>
  417. <span class="authloginLoading h-50p">Continue</span>
  418. </button>
  419. </div>
  420. </form>
  421. <div class="pt-3 text-center">
  422. <span class="forgotpasswordBtn cursor-pointer">Forgot password?</span>
  423. </div>
  424. `;
  425. $('.authContainerUI').html(html);
  426. loginEvents();
  427. }
  428. function OTP_UI(forgot = 0) {
  429. formErrorAction.removeClass();
  430. let html = `<div class="d-flex justify-content-between border-bottom pb-1">
  431. <span></span>
  432. <span class="btnForgotback">
  433. <i class="fa-solid fa-arrow-left"></i>
  434. </span>
  435. </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> <div class="btn bg-gradient-anwi w-100 loader-btn" style="display: none;"> <span class="loader"></span> </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">
  436. </div><span class="otploadingtext">Verfiy OTP</span></a> </div> <div class="resendOTP cursor-pointer text-center pt-4 ">Resend OTP</div> </div></div>`;
  437. $('.authContainerUI').html(html);
  438. loadOTPEvents(forgot);
  439. }
  440. async function validOTP(email, id, otp) {
  441. const validateForgotpass = {
  442. email: email,
  443. otpid: id,
  444. userotp: otp,
  445. };
  446. const res = await postAPIService(
  447. `hyperfusion/validateotp`,
  448. validateForgotpass
  449. );
  450. return res;
  451. }
  452. function loadOTPEvents(forgot) {
  453. $('.resendOTP').click(function (e) {
  454. resendOTP();
  455. })
  456. $('.btnForgotback').off().click(function(e){
  457. debugger;
  458. if(backotp === backOptions.forgotPassword){
  459. forgotPasswordUIEmail();
  460. }else if(backotp === backOptions.EmailnotV){
  461. loginUI();
  462. }else if(backotp === backOptions.signUp){
  463. loginUI();
  464. }
  465. });
  466. $("#email_validate_proceed").click(async function () {
  467. debugger;
  468. otpLoadingAction.addLoadingOTP();
  469. let userotp = '';
  470. $(".otp-validation .otp-input-group input").each(function () {
  471. let presVal = $(this).val();
  472. userotp += presVal;
  473. });
  474. if (userotp.length == 6) {
  475. // const validateForgotpass = {
  476. // email: userDetails.email,
  477. // otpid: userDetails.otpid,
  478. // userotp: userotp,
  479. // };
  480. $('#email_validate_proceed').hide()
  481. $(".loader-btn").show();
  482. const validate_email_resopt = await validOTP(userDetails.email, userDetails.otpid, userotp);
  483. $(".loader-btn").hide();
  484. $('#email_validate_proceed').show()
  485. const Resotp = validate_email_resopt.data.result;
  486. if (Resotp == "Otp verified successfully") {
  487. if (forgot == 1) {
  488. updatePasswordUI();
  489. return;
  490. } else if (forgot == 2) {
  491. loginUI();
  492. toasterHelper("success", "Email has been verified");
  493. return;
  494. }
  495. const res = await loginUserService(userDetails.email, userDetails.password);
  496. COOKIE_HELPER_ACTIONS.setCookie({
  497. token: res.data.result.sessionId,
  498. userid: res.data.result.userId,
  499. ...res.data.result
  500. });
  501. const isCartAdded = localStorage.getItem(CART_ADD);
  502. if(isCartAdded){
  503. localStorage.removeItem(CART_ADD);
  504. window.location.href = `/selectdelivery.html`;
  505. return;
  506. }
  507. localStorage.setItem(USER_AUTH_OKAY,1);
  508. window.location.href = '/';
  509. otpLoadingAction.removeLoadingOTP();
  510. } else {
  511. // toasterOpts()
  512. // Command: toastr["error"]("Please enter Valid OTP");
  513. otpLoadingAction.removeLoadingOTP();
  514. formErrorAction.addError("Please enter Valid OTP")
  515. }
  516. }
  517. else {
  518. otpLoadingAction.removeLoadingOTP();
  519. formErrorAction.addError("Please enter Valid OTP")
  520. }
  521. });
  522. $(".otp-validation .otp-input-group").on("paste", function (p) {
  523. let data = p.originalEvent.clipboardData.getData("text");
  524. let dataLength = data.length;
  525. for (let i = 0; i < dataLength; i++) {
  526. let input = $(
  527. '.otp-validation .otp-input-group input[tabindex="' + (i + 1) + '"]'
  528. );
  529. input.val(data.charAt(i));
  530. if (input.val().length >= input.attr("maxlength")) {
  531. let nextInput = $(
  532. '.otp-validation .otp-input-group input[tabindex="' +
  533. (i + 2) +
  534. '"]'
  535. );
  536. if (nextInput) {
  537. nextInput.focus();
  538. }
  539. }
  540. }
  541. p.preventDefault();
  542. });
  543. $('.otp-validation .otp-input-group input[type="text"]').on(
  544. "keyup",
  545. function (e) {
  546. if ($(this).val().length >= $(this).attr("maxlength")) {
  547. if (e.keyCode !== 9 && e.keyCode !== 16) {
  548. let tabIndex = parseInt($(this).attr("tabindex")) + 1;
  549. $(
  550. '.otp-validation .otp-input-group input[tabindex="' +
  551. $(this).attr("tabindex") +
  552. '"]'
  553. ).val($(this).val());
  554. $(
  555. '.otp-validation .otp-input-group input[tabindex="' +
  556. tabIndex +
  557. '"]'
  558. ).focus();
  559. }
  560. } else {
  561. if (e.keyCode === 8) {
  562. let tabIndex = parseInt($(this).attr("tabindex")) - 1;
  563. $(
  564. '.otp-validation .otp-input-group input[tabindex="' +
  565. tabIndex +
  566. '"]'
  567. ).focus();
  568. }
  569. }
  570. }
  571. );
  572. }
  573. }