Ei kuvausta
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

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