Geen omschrijving
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.

shoppingcart.js 9.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228
  1. shoppingCartInit();
  2. debugger;
  3. function shoppingCartInit() {
  4. shoppingCartAppend();
  5. function shoppingCartAppend() {
  6. let data = getCartData();
  7. if (!data) {
  8. $('.emptyShow').removeClass('d-none');
  9. $('.checkoutbtn').addClass('d-none');
  10. return;
  11. };
  12. let html = '';
  13. let products = data;
  14. // for(let i=0;i<products.length;i++){
  15. // const {img,name,price,quantity,total} = products[i];
  16. // debugger;
  17. // html += shoppingCartDesktopHTML(products[i]);
  18. // }
  19. if(Object.keys(data).length === 0) {
  20. $('.checkoutbtn').addClass('d-none');
  21. $('.emptyShow').removeClass('d-none');
  22. }
  23. setLengthCart();
  24. for (let product in products) {
  25. html += shoppingCartDesktopHTML({ ...products[product], total: products[product].quantity * products[product].price, id: product });
  26. }
  27. $('.appendItems').html(html);
  28. addEventListenerCart();
  29. }
  30. // event listeners
  31. function addEventListenerCart() {
  32. $('.quantitySelect').each(function (i, element) {
  33. if (!$(element).hasClass('d-none')) {
  34. $(element).off().change(function (e) {
  35. let num = e.target.value;
  36. if (num == 5) {
  37. $(e.target).parents('.mainselectcontainer').find('.inputcartaddmore').removeClass('d-none');
  38. $(e.target).addClass('d-none');
  39. $(e.target).parents('.mainselectcontainer').find('.inputcartaddmore button').off().click(function (item) {
  40. const val = $(item.target).parent().find('input').val()
  41. let id = $(item.target).parents('.mainselectcontainer').data('id');
  42. updateCartQuantity(id, val);
  43. // $(item.target).parents('.mainselectcontainer').find('.inputcartaddmore').addClass('d-none');
  44. // $(e.target).removeClass('d-none');
  45. setLengthCart();
  46. shoppingCartAppend();
  47. })
  48. } else {
  49. let id = $(e.target).parents('.mainselectcontainer').data('id');
  50. updateCartQuantity(id, num);
  51. setLengthCart();
  52. shoppingCartAppend();
  53. }
  54. });
  55. } else {
  56. $(element).parents('.mainselectcontainer').find('.inputcartaddmore button').off().click(function (item) {
  57. const val = $(item.target).parent().find('input').val()
  58. let id = $(item.target).parents('.mainselectcontainer').data('id');
  59. updateCartQuantity(id, val);
  60. // $(item.target).parents('.mainselectcontainer').find('.inputcartaddmore').addClass('d-none');
  61. // $(e.target).removeClass('d-none');
  62. setLengthCart();
  63. shoppingCartAppend();
  64. })
  65. }
  66. });
  67. $('.btndeletecart').each(function (i, element) {
  68. $(element).click(function (e) {
  69. const cardId = $(e.target).data('cartid');
  70. let data = getCartData();
  71. console.log(data, 'cardId', cardId);
  72. if (!data) return;
  73. debugger;
  74. const products = data;
  75. const productsFilter = {};
  76. for (let product in products) {
  77. if (product != cardId) productsFilter[product] = products[product];
  78. }
  79. data = productsFilter;
  80. let len = Object.keys(data).length
  81. if(!len){
  82. $('.checkoutbtn').addClass('d-none');
  83. $('.emptyShow').removeClass('d-none');
  84. }else{
  85. $('.checkoutbtn').removeClass('d-none');
  86. $('.emptyShow').addClass('d-none');
  87. }
  88. setCartData(data);
  89. setLengthCart();
  90. shoppingCartAppend();
  91. });
  92. });
  93. $('.checkoutbtn').click(async function (e){
  94. $('.checkoutbtn').find('span').addClass('d-none');
  95. $('.checkoutbtn').find('div').removeClass('d-none');
  96. const res = await COOKIE_HELPER.validateToken();
  97. if(!res.response){
  98. localStorage.setItem(CART_ADD,true);
  99. window.location.href = '/login.html';
  100. $('.checkoutbtn').find('span').removeClass('d-none');
  101. $('.checkoutbtn').find('div').addClass('d-none');
  102. return;
  103. }
  104. window.location.href = '/selectdelivery.html';
  105. $('.checkoutbtn').find('span').removeClass('d-none');
  106. $('.checkoutbtn').find('div').addClass('d-none');
  107. });
  108. }
  109. function getQuantityHTML(value, id) {
  110. return `<div data-id="${id}" class="mainselectcontainer w-100">
  111. <div class="w-100">
  112. <label>Qty</label>
  113. <select class="quantitySelect form-select ${value >= 5 ? 'd-none' : ''}" value="${value}">
  114. <option ${value == 1 ? 'selected="selected"' : null} value="1">
  115. 1
  116. </option>
  117. <option ${value == 2 ? 'selected="selected"' : null} value="2">
  118. 2
  119. </option>
  120. <option ${value == 3 ? 'selected="selected"' : null} value="3">
  121. 3
  122. </option>
  123. <option ${value == 4 ? 'selected="selected"' : null} value="4">
  124. 4
  125. </option>
  126. <option ${value == 5 ? 'selected="selected"' : null} value="5">
  127. 5+
  128. </option>
  129. </select>
  130. </div>
  131. <div class=" inputcartaddmore d-flex gap-2 ${value >= 5 ? '' : 'd-none'}">
  132. <input min="1" class="form-control" style="max-width:100px" value="${value <= 5 ? '5' : value}" type="number" />
  133. <button class="btn border-none bg-info">Add</button>
  134. </div>
  135. </div>`
  136. }
  137. function shoppingCartDesktopHTML({ id, img, name, price, description, quantity, total }) {
  138. const [currencySymbol,amt] = getCurrencySymbol(price);
  139. return `
  140. <div class="row bg-white mt-3 rounded py-3 d-flex ">
  141. <div class="col-md-2 text-center"><img src="${img}" alt="${name}" class="img-fluid"></div>
  142. <div class="col-md-4 d-flex justify-content-center align-items-center">
  143. <a class="text-decoration-none text-dark cursor-pointer" href="/productdetails.html?productId=${id}">${name}</a>
  144. <small>${description||''}</small>
  145. <span class="badge d-none text-bg-warning">8 Offers ></span>
  146. </div>
  147. <div class="col-md-2 d-flex justify-content-center align-items-center">
  148. <p class="text-right"><span>${currencySymbol}</span> ${amt}</p>
  149. </div>
  150. <div class="col-md-2 d-flex justify-content-center align-items-center">
  151. ${getQuantityHTML(quantity, id)}
  152. </div>
  153. <div class="col-md-2 d-flex justify-content-center align-items-center">
  154. <div class="d-flex justify-content-between w-100">
  155. <p class="fw-bold"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-currency-rupee" viewBox="0 0 16 16">
  156. <path d="M4 3.06h2.726c1.22 0 2.12.575 2.325 1.724H4v1.051h5.051C8.855 7.001 8 7.558 6.788 7.558H4v1.317L8.437 14h2.11L6.095 8.884h.855c2.316-.018 3.465-1.476 3.688-3.049H12V4.784h-1.345c-.08-.778-.357-1.335-.793-1.732H12V2H4v1.06Z"/>
  157. </svg>${total}</p>
  158. <span class="btndeletecart cursor-pointer" data-cartid="${id}">x</span>
  159. </div>
  160. </div>
  161. <div class="warrenty-sec px-3 sec-space-4 d-none">
  162. <div class="row align-items-center border
  163. py-2 mx-4">
  164. <div class="col-md-8">
  165. <p class="mb-0"> <img src="./dist/assets/imgs/Home/Anwi-cart-logo.png" alt="shopping-cart-item-img"> Anwi Extended Warranty 2 Year: Protect your Laptop for another 2 years Learn more </p>
  166. </div>
  167. <div class="col-md-3">
  168. <p class="text-end mb-0"> ₹3,200 (2 year)
  169. </p>
  170. </div>
  171. </div>
  172. <div class="row align-items-center border
  173. py-2 mx-4 mt-3">
  174. <div class="col-md-8">
  175. <p class="mb-0"> <img src="./dist/assets/imgs/Home/Anwi-cart-logo-2.png" alt="shopping-cart-item-img"> Anwi Extended Warranty 2 Year: Protect your Laptop for another 2 years Learn more </p>
  176. </div>
  177. <div class="col-md-3">
  178. <p class="text-end mb-0"> ₹2,900 (2 year)
  179. </p>
  180. </div>
  181. </div>
  182. </div>
  183. </div>
  184. <div class=" bg-white mt-3 rounded py-3 d-block d-sm-none ">
  185. <div class="row">
  186. <div class=""></div>
  187. </div>
  188. <div>
  189. </div>
  190. </div>
  191. `;
  192. }
  193. }