Advertisement
orenchuck

loccitane prize array

Feb 24th, 2023 (edited)
46
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.51 KB | None | 0 0
  1. (function() {
  2. let wait = 0;
  3. var timeToLaunch = 3000;
  4.  
  5. var arrayList = [{
  6. GIVE_PRISE_BY_TOTAL_CART_LIMIT: false,
  7. whiteListPrizeProductId: 15136,
  8. whiteProductList: [14642, 14577, 14522, 14385, 12741, 12720],
  9. blackListIds: [14582, 13658, 13659, 13660, 13661, 13662, 13663, 13664, 14951],
  10. totalCartLimitPrizeProductId: 14902,
  11. PRIZE_PRODUCT_CART_LIMIT: 300,
  12. prizeProductId: 14530,
  13. turnList: true,
  14. }];
  15.  
  16. function isUserLogeedIn() {
  17. var adoricUserStorageKey = localStorage.getItem('adoric_firstName');
  18. if (!adoricUserStorageKey) {
  19. return false;
  20. }
  21. if (adoricUserStorageKey && adoricUserStorageKey.includes('undefined')) {
  22. return false;
  23. }
  24. return true;
  25. }
  26.  
  27. function customerDataReload() {
  28. require(['Magento_Customer/js/customer-data'], function(customerData) {
  29. var sections = ['cart'];
  30. customerData.invalidate(sections);
  31. customerData.reload(sections, true);
  32. });
  33. }
  34.  
  35. function isPrizeProduct(product) {
  36. return parseInt(product.product_id) === totalCartLimitPrizeProductId;
  37. }
  38.  
  39. function isProductInTheCart(productId) {
  40. const productItems = getCurrentProductList();
  41. return productItems.some(item => parseInt(item.product_id) === productId);
  42. }
  43.  
  44. function getCurrentProductList() {
  45. var cartData = JSON.parse(window.localStorage.getItem('mage-cache-storage'));
  46. if (!cartData || !cartData.cart || !cartData.cart.items) {
  47. return [];
  48. }
  49. return cartData.cart.items;
  50. }
  51.  
  52. function updateMiniCart() {
  53. var timeToLaunch = 3500;
  54. setTimeout(function() {
  55. require(['Magento_Customer/js/customer-data'], function(customerData) {
  56. var sections = ['cart'];
  57. customerData.invalidate(sections);
  58. customerData.reload(sections, true);
  59. });
  60. }, timeToLaunch);
  61. }
  62.  
  63. function checkProductInCartList(productIdList) {
  64. let addProductToCartFlag = false;
  65. var productItems = getCurrentProductList();
  66. productIdList.forEach(item => {
  67. productItems.forEach(productItem => {
  68. if (item === parseInt(productItem.product_id)) {
  69. addProductToCartFlag = true;
  70. }
  71. });
  72. });
  73. return addProductToCartFlag;
  74. }
  75.  
  76. function addPrizeToCart(productId, whiteListPrizeProductId, totalCartLimitPrizeProductId) {
  77. /*ADD PRIZE*/
  78. if (isProductInTheCart(whiteListPrizeProductId)) {
  79. console.info('whiteListPrizeProductId in the cart!');
  80. return null;
  81. }
  82. if (isProductInTheCart(isPrizeProduct)) {
  83. console.info('isPrizeProduct in the cart!');
  84. return null;
  85. }
  86. if (isProductInTheCart(totalCartLimitPrizeProductId)) {
  87. console.info('totalCartLimitPrizeProductId in the cart!');
  88. return null;
  89. }
  90. var PRIZE_PRODUCT_CART_LIMIT = 300;
  91. var productItems = getCurrentProductList();
  92. try {
  93. var formData = new FormData();
  94. formData.append('product', productId);
  95. formData.append('selected_configurable_option', '');
  96. formData.append('related_product', '');
  97. formData.append('item', productId);
  98. formData.append('qty', 1);
  99. var formKey = document.querySelector('INPUT[name="form_key"]');
  100. if (formKey) {
  101. formData.append('form_key', formKey.value);
  102. }
  103. var xhr = new XMLHttpRequest();
  104. xhr.addEventListener('readystatechange', function() {
  105. if (this.readyState === 4) {
  106. updateMiniCart();
  107. window.location.reload();
  108. }
  109. });
  110. xhr.open('POST', 'https://il.loccitane.com/checkout/cart/add/uenc//product/' + productId + '/', true);
  111. xhr.send(formData);
  112. } catch (error) {
  113. console.log(error);
  114. }
  115. }
  116.  
  117. function removePrizeProduct(productId) {
  118. /*REMOVE PRIZE*/
  119. var timeToLaunch = 3000;
  120. var item_id, formKey, formKeyInput = document.querySelector('INPUT[name="form_key"]');
  121. if (formKeyInput) {
  122. formKey = formKeyInput.getAttribute('value');
  123. }
  124. var productItems = getCurrentProductList();
  125. if (!isProductInTheCart(productId)) {
  126. return;
  127. }
  128. productItems.forEach(function(item) {
  129. if (parseInt(item.product_id) === productId) {
  130. item_id = item.item_id;
  131. }
  132. });
  133. try {
  134. var productData = {
  135. id: item_id,
  136. form_key: formKey,
  137. product: productId,
  138. related_product: '',
  139. qty: 1
  140. };
  141. var data = '';
  142. for (key in productData) {
  143. data += key + '=' + productData[key] + '&';
  144. }
  145. var xhr = new XMLHttpRequest();
  146. xhr.withCredentials = true;
  147. xhr.addEventListener('readystatechange', function() {
  148. if (this.readyState === 4) {
  149. updateMiniCart();
  150. window.location.reload();
  151. }
  152. });
  153. xhr.open('POST', 'https://il.loccitane.com/checkout/cart/delete/');
  154. xhr.setRequestHeader('content-type', 'application/x-www-form-urlencoded; charset=UTF-8');
  155. xhr.setRequestHeader('cache-control', 'no-cache');
  156. xhr.send(data);
  157. } catch (error) {
  158. console.log(error);
  159. }
  160. }
  161.  
  162. function customerDataReload() {
  163. require(['Magento_Customer/js/customer-data'], function(customerData) {
  164. var sections = ['cart'];
  165. customerData.invalidate(sections);
  166. customerData.reload(sections, true);
  167. });
  168. }
  169.  
  170. function checkProductAndPrice(dataFromList) {
  171. var cartData = JSON.parse(window.localStorage.getItem('mage-cache-storage'));
  172. if (wait < 100 && (!cartData || !cartData.cart)) {
  173. wait++;
  174. setTimeout(function() {
  175. checkProductAndPrice(dataFromList);
  176. }, 200);
  177. return;
  178. }
  179. var productItems = getCurrentProductList();
  180. var checkbox = document.querySelector('#loyalty-birthday');
  181. if (isUserLogeedIn() && checkProductInCartList(dataFromList.whiteProductList) && (!checkbox || (checkbox && !(checkbox.checked)))) {
  182. addPrizeToCart(dataFromList.whiteListPrizeProductId, dataFromList.whiteListPrizeProductId, dataFromList.totalCartLimitPrizeProductId);
  183. } else {
  184. isProductInTheCart(dataFromList.whiteListPrizeProductId) && removePrizeProduct(dataFromList.whiteListPrizeProductId);
  185. isProductInTheCart(dataFromList.prizeProductId) && removePrizeProduct(dataFromList.prizeProductId);
  186. }
  187. if (dataFromList.GIVE_PRISE_BY_TOTAL_CART_LIMIT && cartData && cartData.cart && cartData.cart.subtotalWithDiscount && cartData.cart.items && cartData.cart.summary_count) {
  188. var productItems = cartData.cart.items;
  189. var checkbox = document.querySelector('#loyalty-birthday');
  190. var currentTotalPrice = parseFloat(cartData.cart.subtotalWithDiscount).toFixed(0);
  191. if (parseInt(currentTotalPrice) >= dataFromList.PRIZE_PRODUCT_CART_LIMIT && !productItems.some(isPrizeProduct) && !checkProductInCartList(dataFromList.blackListIds)) {
  192. console.info('log 300+ case in progress!');
  193. console.info('!isProductInTheCart(totalCartLimitPrizeProductId) - ', !isProductInTheCart(dataFromList.totalCartLimitPrizeProductId));
  194. !isProductInTheCart(dataFromList.totalCartLimitPrizeProductId) && addPrizeToCart(dataFromList.totalCartLimitPrizeProductId, dataFromList.whiteListPrizeProductId, dataFromList.totalCartLimitPrizeProductId);
  195. }
  196. if ((parseInt(currentTotalPrice) < dataFromList.PRIZE_PRODUCT_CART_LIMIT && productItems.some(isPrizeProduct)) || (checkbox && checkbox.checked)) {
  197. console.info('log -300 case in progress!');
  198. console.info('isProductInTheCart(totalCartLimitPrizeProductId) - ', isProductInTheCart(dataFromList.totalCartLimitPrizeProductId));
  199. isProductInTheCart(dataFromList.totalCartLimitPrizeProductId) && removePrizeProduct(dataFromList.totalCartLimitPrizeProductId);
  200. }
  201. }
  202. }
  203.  
  204. function countProductsCheck(event) {
  205. var carouselBtn = event.target.closest('.dai-carousel-btn');
  206. var homeBtn = event.target.closest('.tocart');
  207. var moreBtn = event.target.closest('.qty-more');
  208. var lessBtn = event.target.closest('.qty-less');
  209. var actionPrimary = event.target.closest('.action-primary');
  210. if (homeBtn || carouselBtn || moreBtn || lessBtn || actionPrimary) {
  211. setTimeout(function() {
  212. checkListAndRunLogik();
  213. }, timeToLaunch);
  214. }
  215. }
  216.  
  217. function updateByCheckboxToggle() {
  218. var checkbox = document.querySelector('#loyalty-birthday');
  219. checkbox && checkbox.addEventListener('change', checkListAndRunLogik);
  220. }
  221.  
  222. function stateCheck(callback) {
  223. if (document.readyState === 'complete') {
  224. callback();
  225. } else {
  226. setTimeout(stateCheck, 500, callback);
  227. }
  228. }
  229.  
  230. function checkListAndRunLogik() {
  231. arrayList.forEach(function(item) {
  232. if (item.turnList) checkProductAndPrice(item);
  233. });
  234. }
  235.  
  236. if (document.readyState !== 'complete') {
  237. stateCheck(function() {
  238. setTimeout(function() {
  239. customerDataReload();
  240. updateByCheckboxToggle();
  241. document.querySelector('body').addEventListener('click', countProductsCheck);
  242. document.querySelector('body').addEventListener('touchend', countProductsCheck);
  243. checkListAndRunLogik();
  244.  
  245. }, timeToLaunch);
  246. });
  247. } else {
  248. setTimeout(function() {
  249. customerDataReload();
  250. updateByCheckboxToggle();
  251. document.querySelector('body').addEventListener('click', countProductsCheck);
  252. document.querySelector('body').addEventListener('touchend', countProductsCheck);
  253. checkListAndRunLogik();
  254. }, timeToLaunch);
  255. }
  256. })();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement