wickes-css2 2.103.0-develop.7 → 2.103.0-develop.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. package/build/css/category-main.css +1 -1
  2. package/build/css/homepage-main.css +1 -1
  3. package/build/css/kitchen-plp-main.css +1 -1
  4. package/build/css/main.css +1 -1
  5. package/build/css/my-account-main-v2.css +1 -1
  6. package/build/css/my-account-main.css +1 -1
  7. package/build/css/pdp-main-before-combine.css +1 -1
  8. package/build/css/pdp-main-non-critical.css +1 -1
  9. package/build/css/pdp-main.css +1 -1
  10. package/build/css/plp-main.css +1 -1
  11. package/build/css/store-locator-main.css +1 -1
  12. package/build/js/basket.min.js +2 -2
  13. package/build/js/bundle.min.js +1 -1
  14. package/build/js/checkout.min.js +2 -2
  15. package/build/js/emulation.min.js +954 -10
  16. package/build/js/general.bundle.min.js +1 -1
  17. package/build/js/merged-checkout.min.js +2 -2
  18. package/build/js/mini-basket-slider.min.js +1 -0
  19. package/build/js/page/basket/basket-update-cart-action.js +59 -0
  20. package/build/js/page/basket/basket-update-cart.js +29 -0
  21. package/build/js/page/basket/basket-utils.js +50 -0
  22. package/build/js/page/basket/mini-basket-total.js +97 -0
  23. package/build/js/page/basket/quantity-change-handler.js +64 -0
  24. package/build/js/page/basket/update-quantity-operation.js +37 -0
  25. package/build/js/page/basket/update-quantity.js +65 -0
  26. package/build/js/page/basket-v2.js +138 -244
  27. package/build/js/page/components/discounts.js +6 -6
  28. package/build/js/page/components/mini-basket-slider.js +569 -0
  29. package/build/js/pdp.bundle.min.js +1 -1
  30. package/build/js/plp.bundle.min.js +1 -1
  31. package/build/js/project-list.min.js +1 -1
  32. package/package.json +1 -1
  33. package/src/components/mini-basket/mini-basket-empty.hbs +3 -13
  34. package/src/components/mini-basket/mini-basket-order-item.hbs +73 -0
  35. package/src/components/mini-basket/mini-basket.hbs +32 -13
  36. package/src/components/mini-basket/product-item.hbs +37 -16
  37. package/src/data/data_confirmation-summary.json +4 -2
  38. package/src/data/data_mini-basket.json +4 -80
  39. package/src/js/components/general/cart-slider.js +4 -0
  40. package/src/js/components/general/create-popup-slider.js +5 -2
  41. package/src/js/emulation/custom-slider-emulation.js +4 -10
  42. package/src/js/emulation/mini-basket-data.js +949 -0
  43. package/src/js/page/basket/basket-update-cart-action.js +59 -0
  44. package/src/js/page/basket/basket-update-cart.js +29 -0
  45. package/src/js/page/basket/basket-utils.js +50 -0
  46. package/src/js/page/basket/mini-basket-total.js +97 -0
  47. package/src/js/page/basket/quantity-change-handler.js +64 -0
  48. package/src/js/page/basket/update-quantity-operation.js +37 -0
  49. package/src/js/page/basket/update-quantity.js +65 -0
  50. package/src/js/page/basket-v2.js +138 -244
  51. package/src/js/page/components/discounts.js +6 -6
  52. package/src/js/page/components/mini-basket-slider.js +569 -0
  53. package/src/layouts/base.hbs +0 -6
  54. package/src/partials/scripts.hbs +1 -0
  55. package/src/scss/components/_custom-slider.scss +131 -3
  56. package/src/scss/components/_popover-mini-basket.scss +0 -4
  57. package/src/js/components/general/mini-basket-slider.js +0 -8
@@ -0,0 +1,569 @@
1
+ import {handleQuantityChange} from "../basket/quantity-change-handler";
2
+ import {updateQuantityAction} from "../basket/update-quantity";
3
+ import {ROUTES} from "../utils/routes";
4
+ import {callAction} from "../utils/http-action";
5
+ import {updateTotal} from "../basket/mini-basket-total";
6
+ import {updateQuantityOperation} from "../basket/update-quantity-operation";
7
+ import {
8
+ checkProductArrays,
9
+ getCartEntries,
10
+ getMessageInfo,
11
+ isMessageExist,
12
+ updatePromotion,
13
+ showNotification
14
+ } from "../basket/basket-utils";
15
+ import {updateCartBase} from "../basket/basket-update-cart";
16
+ import {updateCartActionBase} from "../basket/basket-update-cart-action";
17
+ import {hideLoader, showLoader} from "../utils/loader";
18
+
19
+ const Handlebars = require("hbsfy/runtime");
20
+ import orderItemTemplate from "../../../components/mini-basket/mini-basket-order-item.hbs";
21
+ import miniBasketMainWrap from "../../../components/mini-basket/mini-basket.hbs"
22
+ import miniBasketEmpty from "../../../components/mini-basket/mini-basket-empty.hbs"
23
+ Handlebars.registerHelper('eq', function (a, b) {
24
+ return a === b;
25
+ });
26
+
27
+ Handlebars.registerHelper('removeFirst', function(str, remove) {
28
+ if (typeof str !== 'string' || typeof remove !== 'string') return str;
29
+ if (str.startsWith(remove)) {
30
+ return str.slice(remove.length);
31
+ }
32
+ return str;
33
+ });
34
+
35
+ Handlebars.registerHelper('isToggleVatAvailable', function() {
36
+ return Wick.checkLocalEnv ? false : window.ACC?.app?.isVatToggleAvailable;
37
+ });
38
+
39
+ var Wick = window.Wick || {};
40
+
41
+ const urlsToReload = ['/cart', '/merge-carts'];
42
+
43
+ Wick.MiniBasketSliderFE = {
44
+ events: {
45
+ MINI_BASKET_CHECKOUT: 'MINI_BASKET_CHECKOUT',
46
+ MINI_BASKET_VIEW_BASKET: 'MINI_BASKET_VIEW_BASKET',
47
+ SHOW_MINI_BASKET: 'SHOW_MINI_BASKET',
48
+ MINI_BASKET_QUANTITY_INCREASE: 'MINI_BASKET_QUANTITY_INCREASE',
49
+ MINI_BASKET_QUANTITY_DECREASE: 'MINI_BASKET_QUANTITY_DECREASE',
50
+ MINI_BASKET_ITEM_REMOVE: 'MINI_BASKET_ITEM_REMOVE'
51
+ },
52
+ el: {
53
+ miniBasket: '.custom-slider.mini-basket',
54
+ customLoader: '.mini-basket .basket-loader',
55
+ subtotal: '.checkout-widget__item-bold',
56
+ value: '.checkout-widget__item-value',
57
+ vat: '.checkout-widget__item-vat',
58
+ delivery: '.checkout-widget__item-delivery',
59
+ charity: '.checkout-widget__item-charity',
60
+ cc: '.checkout-widget__item-cc',
61
+ discountItem: '.checkout-widget__details-discount',
62
+ totalToggle: '.mini-basket__total-toggle',
63
+ totalToggleValue: '.mini-basket__total-toggle-value',
64
+ orderItem: '.mini-basket .card.product-card-preview',
65
+ products: '.mini-basket .products',
66
+ miniBasketSection: '.mini-basket .products',
67
+ miniBasketTotal: '.custom-slider__count',
68
+ headerBasketCount: '.header-minicart .header-minicart__counter',
69
+ itemTotalIncVat: '.price .including-vat-inherit .value',
70
+ itemTotalExcVat: '.price excluding-vat-inherit .value',
71
+ itemTotal: '.price',
72
+ orderItemOffers: '.products__offers',
73
+ orderItemInfo: '.products__details-body',
74
+ productCardPreview: '.card.product-card-preview',
75
+ notifications: '.custom-slider__notifications',
76
+ btnQuantity: '.card .btn--quantity',
77
+ btnQuantityMinus: '.btn--quantity[data-action="minus"]',
78
+ btnRemove: '.card .btn--remove',
79
+ customSliderWrap: '.custom-slider__wrap',
80
+ miniBasketFooter: '.custom-slider__footer',
81
+ customSliderEmpty: '.custom-slider__empty',
82
+ quantityValue: '.product-card__quantity-value',
83
+ productsItem: '.products__item',
84
+ totalHide: 'order-item__total-hide',
85
+ btnCheckout: '#addToCartPopupCheckoutButton',
86
+ btnViewBasket: '.mini-basket a.btn-view-basket-cta',
87
+ basketTotalItem: '.basket-total-items'
88
+ },
89
+ classes: {
90
+ HIDDEN_CLASS_NAME: 'd-none',
91
+ },
92
+ cartEntries: [],
93
+ getEqualMapForUpdateCart: function (data) {
94
+ return [
95
+ {
96
+ item: Wick.MiniBasketSliderFE.el.subtotal,
97
+ itemValue: Wick.MiniBasketSliderFE.el.value,
98
+ dataValue: data.subtotalWithoutCharity?.formattedValue,
99
+ value: data.subTotal?.value,
100
+ title: 'Items subtotal:'
101
+ },
102
+ {
103
+ item: Wick.MiniBasketSliderFE.el.vat,
104
+ itemValue: Wick.MiniBasketSliderFE.el.value,
105
+ dataValue: data.totalTax?.formattedValue,
106
+ value: data.totalTax?.value,
107
+ title: 'VAT:'
108
+ },
109
+ {
110
+ item: Wick.MiniBasketSliderFE.el.cc,
111
+ itemValue: Wick.MiniBasketSliderFE.el.value,
112
+ dataValue: 'Free',
113
+ title: 'Click & Collect:'
114
+ },
115
+ {
116
+ item: Wick.MiniBasketSliderFE.el.delivery,
117
+ itemValue: Wick.MiniBasketSliderFE.el.value,
118
+ dataValue: data.deliveryCost?.formattedValue,
119
+ value: data.deliveryCost?.value,
120
+ title: 'Delivery:'
121
+ },
122
+ {
123
+ item: Wick.MiniBasketSliderFE.el.charity,
124
+ itemValue: Wick.MiniBasketSliderFE.el.value,
125
+ dataValue: data.charityPrice?.formattedValue,
126
+ value: data.charityPrice?.value,
127
+ title: 'Charity donation:'
128
+ },
129
+ {
130
+ item: Wick.MiniBasketSliderFE.el.discountItem,
131
+ itemValue: Wick.MiniBasketSliderFE.el.value,
132
+ dataValue: data.totalDiscounts ? data.totalDiscounts?.formattedValue : '',
133
+ value: data.totalDiscounts ? data.totalDiscounts?.value : '',
134
+ title: 'Discount(s):'
135
+ },
136
+ {
137
+ item: Wick.MiniBasketSliderFE.el.totalToggle,
138
+ itemValue: Wick.MiniBasketSliderFE.el.totalToggleValue,
139
+ dataValue: data.totalPrice?.formattedValue,
140
+ value: data.totalPrice?.value,
141
+ },
142
+ ];
143
+ },
144
+ isInitial: true,
145
+ isMiniBasketOpened: false,
146
+ actionEventType: null,
147
+ isMiniBasketLoaded: false,
148
+ miniBasketUpdateItemQuantity(e) {
149
+ const $item = $(e.currentTarget).closest(Wick.MiniBasketSliderFE.el.productCardPreview);
150
+ const quantityElement = $item.find(Wick.MiniBasketSliderFE.el.quantityValue)
151
+ const value = quantityElement.text();
152
+ const action = $(e.currentTarget).attr('data-action');
153
+ const entryNumber = +$item.attr('data-id');
154
+
155
+ if (action === 'plus') Wick.MiniBasketSliderFE.actionEventType = Wick.MiniBasketSliderFE.events.MINI_BASKET_QUANTITY_INCREASE;
156
+ if (action === 'minus') Wick.MiniBasketSliderFE.actionEventType = Wick.MiniBasketSliderFE.events.MINI_BASKET_QUANTITY_DECREASE;
157
+ if (action === 'remove') Wick.MiniBasketSliderFE.actionEventType = Wick.MiniBasketSliderFE.events.MINI_BASKET_ITEM_REMOVE;
158
+
159
+ handleQuantityChange({
160
+ quantityInput: quantityElement,
161
+ action,
162
+ value,
163
+ context: $item,
164
+ entryNumber,
165
+ onQuantityChange: Wick.MiniBasketSliderFE.updateQuantityAction,
166
+ debounceQuantityChange: Wick.MiniBasketSliderFE.debounceQuantityChange,
167
+ parentWrap: Wick.MiniBasketSliderFE.el.productsItem
168
+ });
169
+ },
170
+ debounceQuantityChange: _.debounce(function (entryNumber, value, quantityInput, context) {
171
+ showLoader(Wick.MiniBasketSliderFE.el.customLoader);
172
+ Wick.MiniBasketSliderFE.updateQuantityAction(entryNumber, value, quantityInput, context)
173
+ }, 500),
174
+ updateQuantityAction: function (entryNumber, quantityToUpdate, quantityInput, context) {
175
+ updateQuantityAction({
176
+ entryNumber,
177
+ quantityToUpdate,
178
+ quantityInput,
179
+ context,
180
+ hideLoader: () => setTimeout(() => hideLoader(Wick.MiniBasketSliderFE.el.customLoader), 500),
181
+ updateAction: Wick.MiniBasketSliderFE.updateAction,
182
+ isLocalEnv: Wick.checkLocalEnv,
183
+ basketData: Wick.MiniBasketData,
184
+ updateQuantityOperation: Wick.MiniBasketSliderFE.updateQuantityOperation,
185
+ callActionFn: callAction,
186
+ routes: ROUTES,
187
+ isMiniBasket: true,
188
+ });
189
+
190
+ Wick.MiniBasketSliderFE.toggleMinusButtonState(context, quantityToUpdate);
191
+ },
192
+ toggleMinusButtonState($item, value) {
193
+ const $minusBtn = $item.find(Wick.MiniBasketSliderFE.el.btnQuantityMinus);
194
+ if (value > 1) {
195
+ $minusBtn.prop('disabled', false);
196
+ } else {
197
+ $minusBtn.prop('disabled', true);
198
+ }
199
+ },
200
+ updateAction: function (response, quantityToUpdate, quantityInput, context, successCallback) {
201
+ Wick.MiniBasketSliderFE.updateQuantityOperation(
202
+ quantityToUpdate,
203
+ quantityInput,
204
+ context,
205
+ response
206
+ );
207
+ successCallback(response);
208
+ },
209
+ updateQuantityOperation: function (quantityToUpdate, quantityInput, context, data) {
210
+ const $notifications = $(Wick.MiniBasketSliderFE.el.notifications);
211
+ if ($notifications.children().length > 0) {
212
+ $notifications.empty();
213
+ }
214
+
215
+ updateQuantityOperation(quantityToUpdate, quantityInput, context, data, {
216
+ updateCart: Wick.MiniBasketSliderFE.updateCart,
217
+ showNotification: Wick.MiniBasketSliderFE.showNotification,
218
+ updateQuantity: Wick.MiniBasketSliderFE.updateQuantity,
219
+ updateItemTotal: null,
220
+ isMessageExist: Wick.MiniBasketSliderFE.isMessageExist,
221
+ getMessageInfo: Wick.MiniBasketSliderFE.getMessageInfo
222
+ });
223
+ },
224
+ updateCart: function (repaintData, context, charity, initial, callback) {
225
+ console.log('case(api) to update cart');
226
+ updateCartBase({
227
+ isLocalEnv: Wick.checkLocalEnv,
228
+ apiUrl: ROUTES.BASKET_GET_CART,
229
+ apiType: 'GET',
230
+ hideLoader: () => setTimeout(() => hideLoader(Wick.MiniBasketSliderFE.el.customLoader), 500),
231
+ callActionFn: callAction,
232
+ actionCallback: callback || Wick.MiniBasketSliderFE.updateCartAction,
233
+ repaintData,
234
+ context,
235
+ charity,
236
+ initial,
237
+ localUpdateFn: function(initial, repaintData, context, charity) {
238
+ if (initial) {
239
+ Wick.MiniBasketSliderFE.getCartEntries(Wick.MiniBasketData.initialCartState);
240
+ } else {
241
+ updateTotal(
242
+ Wick.MiniBasketData.updateCart,
243
+ Wick.MiniBasketSliderFE.getEqualMapForUpdateCart(Wick.MiniBasketData.updateCart)
244
+ );
245
+
246
+ if (repaintData) {
247
+ Wick.MiniBasketSliderFE.repaintOrderItems(Wick.MiniBasketData.updateCart, repaintData);
248
+ } else {
249
+ Wick.MiniBasketSliderFE.updateItemsCount(Wick.MiniBasketData.updateCart);
250
+ }
251
+
252
+ !charity || Wick.MiniBasketSliderFE.addCharityEntryNumber(Wick.MiniBasketData.updateCart);
253
+ if (context && context.length) {
254
+ Wick.MiniBasketSliderFE.updatePromotion(Wick.MiniBasketData.updateCart, context);
255
+ }
256
+ Wick.MiniBasketSliderFE.getCartEntries(Wick.MiniBasketData.updateCart);
257
+ Wick.MiniBasketSliderFE.checkProductArrays(Wick.MiniBasketData.updateCart) || Wick.MiniBasketSliderFE.removeOrderItem(repaintData);
258
+ setTimeout(() => hideLoader(Wick.MiniBasketSliderFE.el.customLoader), 1000);
259
+ }
260
+ }
261
+ });
262
+ },
263
+ updateCartAction: function (response, {repaintData, context, charity, initial}) {
264
+ updateCartActionBase({
265
+ response,
266
+ repaintData,
267
+ context,
268
+ charity,
269
+ initial,
270
+ updateOrderSummaryFn: updateTotal,
271
+ getEqualMapFn: Wick.MiniBasketSliderFE.getEqualMapForUpdateCart,
272
+ repaintOrderItemsFn: Wick.MiniBasketSliderFE.repaintOrderItems,
273
+ addCharityEntryNumberFn: Wick.MiniBasketSliderFE.addCharityEntryNumber,
274
+ updatePromotionFn: Wick.MiniBasketSliderFE.updatePromotion,
275
+ cartEntries: Wick.MiniBasketSliderFE.cartEntries,
276
+ getCartEntriesFn: () => Wick.MiniBasketSliderFE.getCartEntries(response),
277
+ checkProductArraysFn: Wick.MiniBasketSliderFE.checkProductArrays,
278
+ removeOrderItemFn: Wick.MiniBasketSliderFE.removeOrderItem,
279
+ elOrderItem: Wick.MiniBasketSliderFE.el.orderItem,
280
+ triggerCartUpdate: false,
281
+ extraActionsMiniBasket: () => {
282
+ Wick.MiniBasketSliderFE.toggleMiniBasketEmptyView();
283
+ Wick.MiniBasketSliderFE.updateItemsCount(response);
284
+
285
+ if (Wick.MiniBasketSliderFE.actionEventType) {
286
+ Wick.MiniBasketSliderFE.fireMiniBasketActionEvent(Wick.MiniBasketSliderFE.actionEventType, response);
287
+ }
288
+ }
289
+ });
290
+ },
291
+ fireMiniBasketActionEvent(eventType, cartData) {
292
+ if (!eventType) return;
293
+ const payload = {
294
+ orderType: cartData.orderType || '',
295
+ deliveryOrderGroups: cartData.deliveryOrderGroups || [],
296
+ pickupOrderGroups: cartData.pickupOrderGroups || []
297
+ };
298
+ const event = createEvent(
299
+ eventType,
300
+ payload,
301
+ {}
302
+ );
303
+ window.dispatchEvent(event);
304
+ },
305
+ removeOrderItem(data) {
306
+ Wick.MiniBasketSliderFE.updateItemsCount(data);
307
+ },
308
+ repaintOrderItems: function (data) {
309
+ const ccGroup = data.pickupOrderGroups || [],
310
+ deliveryGroup = data.deliveryOrderGroups || [];
311
+ let itemDetails = {};
312
+ let position = 0;
313
+
314
+ $(Wick.MiniBasketSliderFE.el.orderItem).remove();
315
+
316
+ if (ccGroup.length) {
317
+ ccGroup.forEach((obj) => {
318
+ obj.entries.forEach(item => {
319
+ itemDetails = { item, type: 'cc', data, position };
320
+ $(Wick.MiniBasketSliderFE.el.products).append(Wick.MiniBasketSliderFE.createOrderItem(itemDetails));
321
+ position++;
322
+ });
323
+ })
324
+ }
325
+
326
+ if (deliveryGroup.length) {
327
+ deliveryGroup.forEach((obj) => {
328
+ obj.entries.forEach(item => {
329
+ if (item.charity) return;
330
+ itemDetails = { item, type: 'delivery', data, position };
331
+ $(Wick.MiniBasketSliderFE.el.products).append(Wick.MiniBasketSliderFE.createOrderItem(itemDetails));
332
+ position++;
333
+ });
334
+ })
335
+ }
336
+
337
+ Wick.MiniBasketSliderFE.updateItemsCount(data);
338
+
339
+ $(document).trigger("cartRerender");
340
+ },
341
+ showNotification: function(data) {
342
+ showNotification(data, Wick.MiniBasketSliderFE.el.notifications);
343
+ },
344
+ isMessageExist: isMessageExist,
345
+ getMessageInfo: getMessageInfo,
346
+ getCartEntries: function(data) {
347
+ if (!data.deliveryOrderGroups) {
348
+ data.deliveryOrderGroups = [];
349
+ data.pickupOrderGroups = [];
350
+ Wick.MiniBasketSliderFE.cartEntries = getCartEntries(data);
351
+ return
352
+ }
353
+
354
+ Wick.MiniBasketSliderFE.cartEntries = getCartEntries(data);
355
+ },
356
+ checkProductArrays: checkProductArrays,
357
+ createOrderItem(itemDetails) {
358
+ let promotionsHtml = '';
359
+ if (itemDetails.item.updateable) {
360
+ promotionsHtml = Wick.MiniBasketSliderFE.addPromotions(itemDetails.item, itemDetails.data);
361
+ }
362
+
363
+ if (itemDetails.item.deliveryPointOfService && itemDetails.item.deliveryPointOfService.description) {
364
+ itemDetails.item.deliveryPointOfService.description = Wick.MiniBasketSliderFE.capitalizeWords(itemDetails.item.deliveryPointOfService.description);
365
+ }
366
+
367
+ return orderItemTemplate({
368
+ item: itemDetails.item,
369
+ type: itemDetails.type,
370
+ promotionsHtml,
371
+ position: itemDetails.position
372
+ });
373
+ },
374
+ capitalizeWords(str) {
375
+ return str
376
+ .toLowerCase()
377
+ .split(' ')
378
+ .map(function(word) {
379
+ return word.charAt(0).toUpperCase() + word.slice(1);
380
+ })
381
+ .join(' ');
382
+ },
383
+ updateItemsCount(data) {
384
+ const totalCount = data.totalUnitCount || 0;
385
+
386
+ $(Wick.MiniBasketSliderFE.el.miniBasketTotal).text(`Your basket (${totalCount})`);
387
+ $(Wick.MiniBasketSliderFE.el.headerBasketCount).text(`${totalCount}`);
388
+ $(Wick.MiniBasketSliderFE.el.basketTotalItem).html(`${totalCount}`);
389
+ },
390
+ updatePromotion: function(data) {
391
+ updatePromotion(
392
+ data,
393
+ Wick.MiniBasketSliderFE.el.orderItem,
394
+ Wick.MiniBasketSliderFE.el.orderItemOffers,
395
+ Wick.MiniBasketSliderFE.el.orderItemInfo,
396
+ Wick.MiniBasketSliderFE.addPromotions
397
+ );
398
+ },
399
+ addPromotions: function (item, data) {
400
+ let arr = [];
401
+
402
+ data.potentialProductPromotions && data.potentialProductPromotions.forEach((entry) => {
403
+ entry.consumedEntries.forEach((promo) => {
404
+ if (promo.orderEntryNumber === item.entryNumber) {
405
+ if (arr.length) {
406
+ let duplicate = arr.every((el) => {
407
+ return el !== `<div class="products__promo">${entry.description}</div>`
408
+ })
409
+
410
+ !duplicate || arr.push(`<div class="products__promo">${entry.description}</div>`);
411
+
412
+ } else {
413
+ arr.push(`<div class="products__promo">${entry.description}</div>`);
414
+ }
415
+ }
416
+ })
417
+
418
+ });
419
+
420
+ data.appliedProductPromotions && data.appliedProductPromotions.forEach((entry) => {
421
+ entry.consumedEntries.forEach((promo) => {
422
+ if (promo.orderEntryNumber === item.entryNumber && entry.description) {
423
+ if (arr.length) {
424
+ let duplicate = arr.every((el) => {
425
+ return el !== `<div class="products__promo">${entry.description}</div>`
426
+ })
427
+
428
+ !duplicate || arr.push(`<div class="products__promo">${entry.description}</div>`);
429
+
430
+ } else {
431
+ arr.push(`<div class="products__promo">${entry.description}</div>`);
432
+ }
433
+ }
434
+ })
435
+ });
436
+
437
+ return arr.length ? `<div class="products__offers">${arr.join('')}</div>` : ''
438
+ },
439
+ initPopupSlider() {
440
+ createPopupSlider({
441
+ type: 'miniBasket',
442
+ sliderSelector: '.custom-slider.mini-basket',
443
+ onAppendEvent: Wick.MiniBasketSliderFE.events.SHOW_MINI_BASKET,
444
+ onAppend: function (event, { showSlider }) {
445
+ Wick.MiniBasketSliderFE.toggleMiniBasketEmptyView();
446
+ showSlider();
447
+ },
448
+ onClose: function () {
449
+ $(Wick.MiniBasketSliderFE.el.notifications).empty();
450
+ Wick.MiniBasketSliderFE.isMiniBasketOpened = false;
451
+ Wick.MiniBasketSliderFE.actionEventType = null;
452
+ }
453
+ });
454
+ },
455
+ toggleMiniBasketEmptyView() {
456
+ if (!Wick.MiniBasketSliderFE.cartEntries.length) {
457
+ if (!$(Wick.MiniBasketSliderFE.el.customSliderEmpty).length) {
458
+ $(Wick.MiniBasketSliderFE.el.customSliderWrap).append(miniBasketEmpty());
459
+ $(Wick.MiniBasketSliderFE.el.miniBasketFooter).addClass(Wick.MiniBasketSliderFE.classes.HIDDEN_CLASS_NAME);
460
+ }
461
+ } else {
462
+ $(Wick.MiniBasketSliderFE.el.customSliderWrap).find(Wick.MiniBasketSliderFE.el.customSliderEmpty).remove();
463
+ $(Wick.MiniBasketSliderFE.el.miniBasketFooter).removeClass(Wick.MiniBasketSliderFE.classes.HIDDEN_CLASS_NAME);
464
+
465
+ if (!$(Wick.MiniBasketSliderFE.el.products).length) {
466
+ $(Wick.MiniBasketSliderFE.el.customSliderWrap).append('<div class="products popover-mini-basket__cards-holder"></div>');
467
+ }
468
+ }
469
+ },
470
+ appendMiniBasketWrap() {
471
+ if(!$(Wick.MiniBasketSliderFE.el.miniBasket).length) {
472
+ $('body').append(miniBasketMainWrap());
473
+ }
474
+ },
475
+ isEmptyBasketLocal() {
476
+ return window.location.pathname.includes('page_product-details-saved-pl.html');
477
+ },
478
+ shouldReloadPage: function() {
479
+ return urlsToReload.includes(window.location.pathname);
480
+ },
481
+ openMiniBasket() {
482
+ if (Wick.MiniBasketSliderFE.isInitial && Wick.checkLocalEnv) {
483
+ const initialCartState = Wick.MiniBasketSliderFE.isEmptyBasketLocal()
484
+ ? Wick.MiniBasketData.initialCartEmptyState
485
+ : Wick.MiniBasketData.initialCartState;
486
+
487
+ Wick.MiniBasketSliderFE.getCartEntries(initialCartState);
488
+
489
+ updateTotal(
490
+ initialCartState,
491
+ Wick.MiniBasketSliderFE.getEqualMapForUpdateCart(initialCartState)
492
+ );
493
+ Wick.MiniBasketSliderFE.repaintOrderItems(initialCartState);
494
+ Wick.MiniBasketSliderFE.showMiniBasketEvent();
495
+ setTimeout(() => {
496
+ Wick.MiniBasketSliderFE.isInitial = false;
497
+ }, 100);
498
+ return;
499
+ }
500
+
501
+ if (!Wick.MiniBasketSliderFE.isMiniBasketLoaded) {
502
+ Wick.MiniBasketSliderFE.updateCart(true, undefined, undefined, false, function (response, params) {
503
+ Wick.MiniBasketSliderFE.updateCartAction(response, params);
504
+ Wick.MiniBasketSliderFE.isMiniBasketLoaded = true;
505
+ Wick.MiniBasketSliderFE.isMiniBasketOpened = true;
506
+ Wick.MiniBasketSliderFE.showMiniBasketEvent();
507
+ });
508
+ } else {
509
+ Wick.MiniBasketSliderFE.showMiniBasketEvent();
510
+ }
511
+ },
512
+ showMiniBasketEvent() {
513
+ return new Promise((resolve, reject) => {
514
+ const eventDetail = { resolve, reject };
515
+ const event = createEvent(
516
+ Wick.MiniBasketSliderFE.events.SHOW_MINI_BASKET,
517
+ {},
518
+ eventDetail
519
+ );
520
+ window.dispatchEvent(event);
521
+ });
522
+ },
523
+ bindMiniBasketBtnHandler(selector, eventName) {
524
+ $(document).on('click', selector, function(e) {
525
+ e.preventDefault();
526
+ return new Promise((resolve, reject) => {
527
+ const eventDetail = { resolve, reject };
528
+ const event = createEvent(eventName, {}, eventDetail);
529
+ window.dispatchEvent(event);
530
+ })
531
+ .then(() => {
532
+ window.location.href = $(selector).attr('href');
533
+ })
534
+ .catch((error) => {
535
+ console.error(error);
536
+ });
537
+ });
538
+ },
539
+ init () {
540
+ $(Wick.MiniBasketSliderFE.el.miniBasket).on('click', Wick.MiniBasketSliderFE.el.btnQuantity, Wick.MiniBasketSliderFE.miniBasketUpdateItemQuantity);
541
+ $(Wick.MiniBasketSliderFE.el.miniBasket).on('click', Wick.MiniBasketSliderFE.el.btnRemove, Wick.MiniBasketSliderFE.miniBasketUpdateItemQuantity);
542
+
543
+ Wick.MiniBasketSliderFE.bindMiniBasketBtnHandler(
544
+ Wick.MiniBasketSliderFE.el.btnCheckout,
545
+ Wick.MiniBasketSliderFE.events.MINI_BASKET_CHECKOUT
546
+ );
547
+
548
+ Wick.MiniBasketSliderFE.bindMiniBasketBtnHandler(
549
+ Wick.MiniBasketSliderFE.el.btnViewBasket,
550
+ Wick.MiniBasketSliderFE.events.MINI_BASKET_VIEW_BASKET
551
+ );
552
+ }
553
+ }
554
+
555
+ $(document).ready(function () {
556
+ const $minicartBtn = $('.header-minicart .header-minicart__btn');
557
+ if (!$minicartBtn.length) return;
558
+
559
+ if (Wick.MiniBasketSliderFE.shouldReloadPage()) {
560
+ $minicartBtn.on('click', () => window.location.reload());
561
+ return;
562
+ }
563
+
564
+ $minicartBtn.on('click', () => Wick.MiniBasketSliderFE.openMiniBasket());
565
+
566
+ Wick.MiniBasketSliderFE.appendMiniBasketWrap();
567
+ Wick.MiniBasketSliderFE.initPopupSlider();
568
+ Wick.MiniBasketSliderFE.init();
569
+ });