wickes-css2 2.103.0-RG-1742-billie-30-60-90-days.3 → 2.103.0-develop.10

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 (101) hide show
  1. package/Readme.md +5 -1
  2. package/build/css/category-main.css +1 -1
  3. package/build/css/components/card-product-banner.css +1 -1
  4. package/build/css/homepage-main.css +1 -1
  5. package/build/css/kitchen-plp-main.css +1 -1
  6. package/build/css/main.css +1 -1
  7. package/build/css/my-account-main-v2.css +1 -1
  8. package/build/css/my-account-main.css +1 -1
  9. package/build/css/pages/page_products-list-combined.css +1 -1
  10. package/build/css/pages/page_products-list.css +1 -1
  11. package/build/css/pdp-main-before-combine.css +1 -1
  12. package/build/css/pdp-main-non-critical.css +1 -1
  13. package/build/css/pdp-main.css +1 -1
  14. package/build/css/plp-main.css +1 -1
  15. package/build/css/store-locator-main.css +1 -1
  16. package/build/js/basket.min.js +2 -2
  17. package/build/js/bundle.min.js +1 -1
  18. package/build/js/checkout.min.js +2 -2
  19. package/build/js/emulation.min.js +1301 -369
  20. package/build/js/general.bundle.min.js +1 -1
  21. package/build/js/merged-checkout.min.js +2 -2
  22. package/build/js/mini-basket-slider.min.js +1 -0
  23. package/build/js/page/basket/basket-update-cart-action.js +59 -0
  24. package/build/js/page/basket/basket-update-cart.js +29 -0
  25. package/build/js/page/basket/basket-utils.js +50 -0
  26. package/build/js/page/basket/mini-basket-total.js +97 -0
  27. package/build/js/page/basket/quantity-change-handler.js +64 -0
  28. package/build/js/page/basket/update-quantity-operation.js +37 -0
  29. package/build/js/page/basket/update-quantity.js +65 -0
  30. package/build/js/page/basket-v2.js +138 -244
  31. package/build/js/page/checkout-payment-details.js +43 -96
  32. package/build/js/page/components/discounts.js +6 -6
  33. package/build/js/page/components/mini-basket-slider.js +569 -0
  34. package/build/js/page/plp-cards-v2.js +15 -6
  35. package/build/js/page/plp-load-more.js +1 -1
  36. package/build/js/pdp.bundle.min.js +1 -1
  37. package/build/js/plp.bundle.min.js +1 -1
  38. package/build/js/project-list.min.js +1 -1
  39. package/package.json +18 -3
  40. package/src/components/card_product_v2.hbs +10 -5
  41. package/src/components/card_sponsor_banner.hbs +8 -0
  42. package/src/components/card_sponsor_product.hbs +6 -0
  43. package/src/components/checkout-payment-details-v2.hbs +23 -35
  44. package/src/components/injected-content.hbs +1 -1
  45. package/src/components/mini-basket/mini-basket-empty.hbs +3 -13
  46. package/src/components/mini-basket/mini-basket-order-item.hbs +73 -0
  47. package/src/components/mini-basket/mini-basket.hbs +32 -13
  48. package/src/components/mini-basket/product-item.hbs +37 -16
  49. package/src/components/srp-injected.hbs +3 -13
  50. package/src/data/data_confirmation-summary.json +4 -2
  51. package/src/data/data_mini-basket.json +4 -80
  52. package/src/data/data_search-results_v2.json +56 -141
  53. package/src/js/components/banner-placement-manager.js +267 -0
  54. package/src/js/components/general/cart-slider.js +4 -0
  55. package/src/js/components/general/create-popup-slider.js +5 -2
  56. package/src/js/emulation/account-hub.js +40 -40
  57. package/src/js/emulation/banner-placement-manager.js +53 -0
  58. package/src/js/emulation/checkout-payment-details.js +8 -8
  59. package/src/js/emulation/custom-slider-emulation.js +4 -10
  60. package/src/js/emulation/forms.js +89 -118
  61. package/src/js/emulation/mini-basket-data.js +949 -0
  62. package/src/js/emulation/paymentLoader.js +3 -4
  63. package/src/js/page/basket/basket-update-cart-action.js +59 -0
  64. package/src/js/page/basket/basket-update-cart.js +29 -0
  65. package/src/js/page/basket/basket-utils.js +50 -0
  66. package/src/js/page/basket/mini-basket-total.js +97 -0
  67. package/src/js/page/basket/quantity-change-handler.js +64 -0
  68. package/src/js/page/basket/update-quantity-operation.js +37 -0
  69. package/src/js/page/basket/update-quantity.js +65 -0
  70. package/src/js/page/basket-v2.js +138 -244
  71. package/src/js/page/checkout-payment-details.js +43 -96
  72. package/src/js/page/components/discounts.js +6 -6
  73. package/src/js/page/components/mini-basket-slider.js +569 -0
  74. package/src/js/page/plp-cards-v2.js +15 -6
  75. package/src/js/page/plp-load-more.js +1 -1
  76. package/src/layouts/base.hbs +0 -6
  77. package/src/page_plp_v2.html +17 -6
  78. package/src/page_search-results.html +12 -2
  79. package/src/partials/scripts.hbs +1 -0
  80. package/src/scss/category-main.scss +1 -0
  81. package/src/scss/components/_custom-slider.scss +131 -3
  82. package/src/scss/components/_popover-mini-basket.scss +0 -4
  83. package/src/scss/components/card-product-banner.scss +91 -3
  84. package/src/scss/emulation.scss +3 -3
  85. package/src/scss/helpers/_colors-semantic.scss +120 -0
  86. package/src/scss/helpers/_variables.scss +2 -0
  87. package/src/scss/main.scss +0 -2
  88. package/src/scss/pages/_facets.scss +86 -0
  89. package/src/scss/pages/page_products-list-combined.scss +11 -0
  90. package/src/scss/pages/page_products-list.scss +8 -0
  91. package/src/scss/plp-main.scss +1 -0
  92. package/build/css/components/checkout-chip.css +0 -1
  93. package/build/css/components/checkout-payment-repayment-terms.css +0 -1
  94. package/src/components/checkout-chip.hbs +0 -15
  95. package/src/components/checkout-payment-repayment-terms.hbs +0 -12
  96. package/src/data/data_billie-terms.json +0 -7
  97. package/src/js/components/general/mini-basket-slider.js +0 -8
  98. package/src/js/components/product-banner.js +0 -148
  99. package/src/js/emulation/repayment-toggle.js +0 -35
  100. package/src/scss/components/checkout-chip.scss +0 -64
  101. package/src/scss/components/checkout-payment-repayment-terms.scss +0 -39
@@ -4,25 +4,70 @@
4
4
  {
5
5
  "src": "https://eu-images.contentstack.com/v3/assets/blt066259863543a0d2/bltf2fa907eeef56dc5/62161f9af3bcce42fe002786/PLP-DecoratingTools-230222.jpg",
6
6
  "href": "/sitemap.html",
7
- "desktop-position": 3,
8
- "mobile-position": 2,
7
+ "desktop-position": 8,
8
+ "mobile-position": 7,
9
9
  "show": false
10
+ }
11
+ ],
12
+ "sponsor-product": [
13
+ {
14
+ "isSponsor": true,
15
+ "desktop-position": 4,
16
+ "mobile-position": 3,
17
+ "title": "Rangemaster Classic Deluxe 90 Ceramic Range Cooker",
18
+ "code": "492747",
19
+ "src": "https://media.wickes.co.uk/is/image/wickes/normal/Footwear-Tough-Grit-Oak-Boot-7~GPID_1100568107_00",
20
+ "descr": "Offer is valid for the same product and size in a single purchase",
21
+ "reviews": "0",
22
+ "review-rating": "4.3",
23
+ "price": "<span class='product-card__price-value-text'>From</span> £99,009.00",
24
+ "perSQM": "£1,444.00",
25
+ "recommended": false,
26
+ "badge-text": "new",
27
+ "badge-color": "green",
28
+ "badge-text-color": "gray"
10
29
  },
11
30
  {
12
- "src": "https://eu-images.contentstack.com/v3/assets/blt066259863543a0d2/bltf2fa907eeef56dc5/62161f9af3bcce42fe002786/PLP-DecoratingTools-230222.jpg",
13
- "href": "/sitemap.html",
31
+ "isSponsor": true,
32
+ "desktop-position": 5,
33
+ "mobile-position": 4,
34
+ "title": "Rangemaster Classic Deluxe 90 Ceramic Range Cooker",
35
+ "code": "492747",
36
+ "src": "https://media.wickes.co.uk/is/image/wickes/normal/Footwear-Tough-Grit-Oak-Boot-7~GPID_1100568107_00",
37
+ "descr": "Offer is valid for the same product and size in a single purchase",
38
+ "reviews": "0",
39
+ "review-rating": "4.3",
40
+ "price": "<span class='product-card__price-value-text'>From</span> £99,009.00",
41
+ "perSQM": "£1,444.00",
42
+ "recommended": false,
43
+ "badge-text": "new",
44
+ "badge-color": "green",
45
+ "badge-text-color": "gray"
46
+ },
47
+ {
48
+ "isSponsor": true,
14
49
  "desktop-position": 7,
15
50
  "mobile-position": 5,
16
- "required-amount-desktop": 6,
17
- "required-amount-mobile": 4,
18
- "show": false
19
- },
51
+ "title": "Rangemaster Classic Deluxe 90 Ceramic Range Cooker Rangemaster Classic Deluxe 90 Ceramic Range Cooker",
52
+ "code": "721657",
53
+ "src": "https://media.wickes.co.uk/is/image/wickes/normal/Footwear-Tough-Grit-Oak-Boot-7~GPID_1100568107_00",
54
+ "descr": "Offer is valid for the same product and size in a single purchase",
55
+ "reviews": "21",
56
+ "review-rating": "4.4",
57
+ "price": "£2,009.00",
58
+ "SQM": "£1,555.00",
59
+ "click-collect-only": true,
60
+ "badge-text": "Clearance",
61
+ "badge-color": "yellow",
62
+ "badge-text-color": "white"
63
+ }
64
+ ],
65
+ "sponsor-banner": [
20
66
  {
21
67
  "src": "https://eu-images.contentstack.com/v3/assets/blt066259863543a0d2/bltf2fa907eeef56dc5/62161f9af3bcce42fe002786/PLP-DecoratingTools-230222.jpg",
22
68
  "href": "/sitemap.html",
23
- "required-amount-desktop": 11,
24
- "required-amount-mobile": 9,
25
- "show": false
69
+ "desktop-position": 6,
70
+ "mobile-position": 8
26
71
  }
27
72
  ],
28
73
  "products": [
@@ -196,136 +241,6 @@
196
241
  "recommended": false,
197
242
  "new": true,
198
243
  "new-range": true
199
- },
200
- {
201
- "title": "Rangemaster Classic Deluxe 90 Ceramic Range Cooker",
202
- "code": "737934",
203
- "src": "./img/placeholders/map-2.png",
204
- "descr": "Offer is valid for the same product and size in a single purchase",
205
- "reviews": "0",
206
- "price": "£2,009.00",
207
- "recommended": false
208
- },
209
- {
210
- "title": "Rangemaster Classic Deluxe 90 Ceramic Range Cooker - Black with Chrome Trim ",
211
- "code": "247767",
212
- "src": "./img/placeholders/map-2.png",
213
- "descr": "Offer is valid for the same product and size in a single purchase",
214
- "reviews": "0",
215
- "price": "£2,009.00",
216
- "recommended": false
217
- },
218
- {
219
- "title": "Rangemaster Classic Deluxe 90 Ceramic Range Cooker",
220
- "code": "978004",
221
- "src": "./img/placeholders/map-2.png",
222
- "descr": "Offer is valid for the same product and size in a single purchase",
223
- "reviews": "0",
224
- "price": "£2,009.00",
225
- "recommended": false
226
- },
227
- {
228
- "title": "Rangemaster Classic Deluxe 90 Ceramic Range Cooker",
229
- "code": "523586",
230
- "src": "https://media.wickes.co.uk/is/image/wickes/normal/Footwear-Tough-Grit-Alder-Trainer-7~GPID_1100568095_00",
231
- "descr": "Offer is valid for the same product and size in a single purchase",
232
- "reviews": "0",
233
- "perSQM": "£1,444.00",
234
- "recommended": false
235
- },
236
- {
237
- "title": "Rangemaster Classic Deluxe 90 Ceramic Range Cooker",
238
- "code": "729112",
239
- "src": "https://media.wickes.co.uk/is/image/wickes/normal/Footwear-Tough-Grit-Alder-Trainer-7~GPID_1100568095_00",
240
- "descr": "Offer is valid for the same product and size in a single purchase",
241
- "reviews": "0",
242
- "price": "£2,315.00",
243
- "recommended": false
244
- },
245
- {
246
- "sale": {
247
- "discount": "15% off",
248
- "price": "£2,315.00"
249
- },
250
- "title": "Rangemaster Classic Deluxe 90 Ceramic Range Cooker",
251
- "code": "279966",
252
- "src": "https://media.wickes.co.uk/is/image/wickes/normal/Footwear-Tough-Grit-Alder-Trainer-7~GPID_1100568095_00",
253
- "descr": "Offer is valid for the same product and size in a single purchase",
254
- "reviews": "0",
255
-
256
- "recommended": false
257
- },
258
- {
259
- "title": "Rangemaster Classic Deluxe 90 Ceramic Range Cooker",
260
- "code": "813053",
261
- "src": "https://media.wickes.co.uk/is/image/wickes/normal/Footwear-Tough-Grit-Oak-Boot-7~GPID_1100568107_00",
262
- "descr": "Offer is valid for the same product and size in a single purchase",
263
- "reviews": "0",
264
- "SQM": "£1,555.00",
265
- "recommended": false
266
- },
267
- {
268
- "title": "Rangemaster Classic Deluxe 90 Ceramic Range Cooker",
269
- "code": "655972",
270
- "src": "https://media.wickes.co.uk/is/image/wickes/normal/Footwear-Tough-Grit-Oak-Boot-7~GPID_1100568107_00",
271
- "descr": "Offer is valid for the same product and size in a single purchase",
272
- "reviews": "0",
273
-
274
- "recommended": false
275
- },
276
- {
277
- "title": "Rangemaster Classic Deluxe 90 Ceramic Range Cooker",
278
- "code": "757775",
279
- "src": "https://media.wickes.co.uk/is/image/wickes/normal/Footwear-Tough-Grit-Oak-Boot-7~GPID_1100568107_00",
280
- "descr": "Offer is valid for the same product and size in a single purchase",
281
- "reviews": "0",
282
-
283
- "recommended": false
284
- },
285
- {
286
- "title": "Rangemaster Classic Deluxe 90 Ceramic Range Cooker",
287
- "code": "276523",
288
- "src": "https://media.wickes.co.uk/is/image/wickes/normal/Footwear-Tough-Grit-Alder-Trainer-7~GPID_1100568095_00",
289
- "descr": "Offer is valid for the same product and size in a single purchase",
290
- "reviews": "0",
291
-
292
- "recommended": false
293
- },
294
- {
295
- "title": "Rangemaster Classic Deluxe 90 Ceramic Range Cooker",
296
- "code": "334333",
297
- "src": "https://media.wickes.co.uk/is/image/wickes/normal/Footwear-Tough-Grit-Alder-Trainer-7~GPID_1100568095_00",
298
- "descr": "Offer is valid for the same product and size in a single purchase",
299
- "reviews": "0",
300
-
301
- "recommended": false
302
- },
303
- {
304
- "title": "Rangemaster Classic Deluxe 90 Ceramic Range Cooker",
305
- "code": "597258",
306
- "src": "https://media.wickes.co.uk/is/image/wickes/normal/Footwear-Tough-Grit-Alder-Trainer-7~GPID_1100568095_00",
307
- "descr": "Offer is valid for the same product and size in a single purchase",
308
- "reviews": "0",
309
-
310
- "recommended": false
311
- },
312
- {
313
- "title": "Rangemaster Classic Deluxe 90 Ceramic Range Cooker",
314
- "code": "806538",
315
- "src": "https://media.wickes.co.uk/is/image/wickes/normal/Footwear-Tough-Grit-Oak-Boot-7~GPID_1100568107_00",
316
- "descr": "Offer is valid for the same product and size in a single purchase",
317
- "reviews": "0",
318
- "perSQM": "£1,444.00",
319
- "recommended": false
320
- },
321
- {
322
- "title": "Rangemaster Classic Deluxe 90 Ceramic Range Cooker",
323
- "code": "276521",
324
- "src": "https://media.wickes.co.uk/is/image/wickes/normal/Footwear-Tough-Grit-Oak-Boot-7~GPID_1100568107_00",
325
- "descr": "Offer is valid for the same product and size in a single purchase",
326
- "reviews": "0",
327
-
328
- "recommended": false
329
244
  }
330
245
  ]
331
246
  }
@@ -0,0 +1,267 @@
1
+ var Wick = Wick || {};
2
+ Wick.BannerPlacementManager = {
3
+ SPONSOR_BANNERS_DISPLAYED_EVENT: 'sponsorAdsDisplayedEvent',
4
+ el: {
5
+ banners: '.card-product-banner',
6
+ sponsorBanners: '.card-sponsor-banner',
7
+ sponsorProducts: '.card-sponsor-product',
8
+ allBanners: '.card-product-banner, .card-sponsor-banner, .card-sponsor-product',
9
+ productCard: '.product-card',
10
+ allListSlots: '.product-card, .card-product-banner, .card-sponsor-banner, .card-sponsor-product',
11
+ productsWrap: '.products-list-v2',
12
+ $products: $('.product-card'),
13
+ attrPositionDesktop: 'data-desktop-position',
14
+ attrPositionMobile: 'data-mobile-position',
15
+ attrRequiredAmountDesktop: 'data-required-amount-desktop',
16
+ attrRequiredAmountMobile: 'data-required-amount-mobile',
17
+ hide: 'd-none',
18
+ sponsoredAdvBanners: '.sponsored-ad'
19
+ },
20
+ classes: {
21
+ sponsorBanners: 'card-sponsor-banner',
22
+ sponsorProducts: 'card-sponsor-product',
23
+ productBanners: 'card-product-banner',
24
+ bannerInactiveClass: 'card-product-banner--inactive'
25
+ },
26
+ isEventSent: false,
27
+ currentBreakpoint: null,
28
+ checkProductsInColumn() {
29
+ Wick.BannerPlacementManager.addInactiveClasses();
30
+ Wick.BannerPlacementManager.arrangeBannersInRightOrder();
31
+ const $allBanners = $(Wick.BannerPlacementManager.el.allBanners);
32
+ const totalProducts = Wick.BannerPlacementManager.getListLength();
33
+ const totalSlots = totalProducts + $allBanners.length;
34
+ $allBanners.each((index, banner) => {
35
+ const bannerPosition = Wick.BannerPlacementManager.getBannerPosition(banner);
36
+
37
+ if ($(banner).hasClass('card-product-banner')) {
38
+ if (bannerPosition > totalSlots) {
39
+ Wick.BannerPlacementManager.hideBanner(banner);
40
+ $(Wick.BannerPlacementManager.el.productsWrap).append(banner);
41
+ return;
42
+ }
43
+ }
44
+
45
+ if ($(banner).hasClass(Wick.BannerPlacementManager.classes.sponsorBanners) || $(banner).hasClass(Wick.BannerPlacementManager.classes.sponsorProducts)) {
46
+ if (bannerPosition > totalProducts) {
47
+ Wick.BannerPlacementManager.showBanner(banner);
48
+ Wick.BannerPlacementManager.removeInactiveClass(banner);
49
+ $(Wick.BannerPlacementManager.el.productsWrap).append(banner);
50
+ return;
51
+ }
52
+ }
53
+
54
+ Wick.BannerPlacementManager.hideBannerDueLimit(banner, index);
55
+ Wick.BannerPlacementManager.moveBannerToSpecifiedPosition(banner);
56
+ });
57
+ },
58
+ moveBannerToSpecifiedPosition(banner) {
59
+ const $listSlots = Wick.BannerPlacementManager.getListSlots();
60
+ const bannerPosition = Wick.BannerPlacementManager.getBannerPosition(banner) - 2;
61
+ const listSlotsLength = $listSlots.length;
62
+
63
+ if (Wick.BannerPlacementManager.isBannerVisible(banner)) {
64
+ if (bannerPosition <= listSlotsLength) {
65
+ if ($listSlots[bannerPosition]) {
66
+ Wick.BannerPlacementManager.showBanner(banner);
67
+ Wick.BannerPlacementManager.removeInactiveClass(banner);
68
+ Wick.BannerPlacementManager.moveBanner(banner, $listSlots[bannerPosition]);
69
+ } else {
70
+ Wick.BannerPlacementManager.hideBanner(banner);
71
+ Wick.BannerPlacementManager.coverEdgeCases(banner);
72
+ }
73
+ } else {
74
+ if ($(banner).hasClass(Wick.BannerPlacementManager.classes.sponsorBanners) || $(banner).hasClass(Wick.BannerPlacementManager.classes.sponsorProducts)) {
75
+ Wick.BannerPlacementManager.showBanner(banner);
76
+ Wick.BannerPlacementManager.removeInactiveClass(banner);
77
+ $(Wick.BannerPlacementManager.el.productsWrap).append(banner);
78
+ } else {
79
+ Wick.BannerPlacementManager.hideBanner(banner);
80
+ }
81
+ }
82
+ }
83
+ },
84
+ moveBanner(banner, targetElement) {
85
+ $(banner).remove();
86
+ $(targetElement).after(banner);
87
+ },
88
+ hideBanner(banner) {
89
+ $(banner).addClass(Wick.BannerPlacementManager.el.hide);
90
+ },
91
+ showBanner(banner) {
92
+ $(banner).removeClass(Wick.BannerPlacementManager.el.hide);
93
+ },
94
+ isBannerVisible(banner) {
95
+ return !$(banner).hasClass(Wick.BannerPlacementManager.el.hide);
96
+ },
97
+ hideBannerDueLimit(banner) {
98
+ const bannerMinLimit = Wick.BannerPlacementManager.getBannerLimit(banner) - 1;
99
+ const $listSlots = Wick.BannerPlacementManager.getListSlots();
100
+ const listProductsLength = $listSlots.length;
101
+ Wick.BannerPlacementManager.showBanner(banner);
102
+
103
+ if (bannerMinLimit > listProductsLength) {
104
+ Wick.BannerPlacementManager.hideBanner(banner);
105
+ }
106
+ },
107
+ getBannerPosition(banner) {
108
+ const isMobile = Wick.BannerPlacementManager.isMobileResolution();
109
+ const positionAttribute = isMobile
110
+ ? Wick.BannerPlacementManager.el.attrPositionMobile
111
+ : Wick.BannerPlacementManager.el.attrPositionDesktop
112
+
113
+ return banner.hasAttribute(positionAttribute)
114
+ ? Number(banner.getAttribute(positionAttribute))
115
+ : Number(Wick.BannerPlacementManager.getListLength() + Wick.BannerPlacementManager.getBannersAmount());
116
+ },
117
+ getBannerLimit(banner) {
118
+ const isMobile = Wick.BannerPlacementManager.isMobileResolution();
119
+
120
+ const limitAttribute = isMobile
121
+ ? Wick.BannerPlacementManager.el.attrRequiredAmountMobile
122
+ : Wick.BannerPlacementManager.el.attrRequiredAmountDesktop;
123
+
124
+ return banner.hasAttribute(limitAttribute)
125
+ ? Number(banner.getAttribute(limitAttribute))
126
+ : 0;
127
+ },
128
+ isMobileResolution() {
129
+ return Wick.Responsive.getCurrentBreakpoint() !== 'up-lg';
130
+ },
131
+ getListLength() {
132
+ const $listItems = $(Wick.BannerPlacementManager.el.productsWrap).children(Wick.BannerPlacementManager.el.productCard);
133
+ return $listItems.length;
134
+ },
135
+ getBannersAmount() {
136
+ return $(Wick.BannerPlacementManager.el.allBanners).length;
137
+ },
138
+ getProductsAmount() {
139
+ return Wick.BannerPlacementManager.el.$products.length;
140
+ },
141
+ arrangeBannersInRightOrder() {
142
+ const $allBanners = $(Wick.BannerPlacementManager.el.allBanners);
143
+
144
+ const sponsorProducts = $allBanners.filter((i, el) =>
145
+ $(el).hasClass(Wick.BannerPlacementManager.classes.sponsorProducts)
146
+ );
147
+ const sponsorBanners = $allBanners.filter((i, el) =>
148
+ $(el).hasClass(Wick.BannerPlacementManager.classes.sponsorBanners)
149
+ );
150
+
151
+ const firstSponsorProductPos = sponsorProducts.length > 0
152
+ ? Math.min(...sponsorProducts.map((i, el) => Wick.BannerPlacementManager.getBannerPosition(el)).get())
153
+ : Infinity;
154
+ const firstSponsorBannerPos = sponsorBanners.length > 0
155
+ ? Math.min(...sponsorBanners.map((i, el) => Wick.BannerPlacementManager.getBannerPosition(el)).get())
156
+ : Infinity;
157
+
158
+ let groupOrder;
159
+ if (firstSponsorProductPos < firstSponsorBannerPos) {
160
+ groupOrder = [
161
+ Wick.BannerPlacementManager.classes.sponsorProducts,
162
+ Wick.BannerPlacementManager.classes.sponsorBanners,
163
+ Wick.BannerPlacementManager.classes.productBanners
164
+ ];
165
+ } else {
166
+ groupOrder = [
167
+ Wick.BannerPlacementManager.classes.sponsorBanners,
168
+ Wick.BannerPlacementManager.classes.sponsorProducts,
169
+ Wick.BannerPlacementManager.classes.productBanners
170
+ ];
171
+ }
172
+
173
+ $allBanners.sort((a, b) => {
174
+ function getGroupIndex(el) {
175
+ if ($(el).hasClass(groupOrder[0])) return 0;
176
+ if ($(el).hasClass(groupOrder[1])) return 1;
177
+ if ($(el).hasClass(groupOrder[2])) return 2;
178
+ return 3;
179
+ }
180
+
181
+ const groupA = getGroupIndex(a);
182
+ const groupB = getGroupIndex(b);
183
+
184
+ if (groupA !== groupB) {
185
+ return groupA - groupB;
186
+ }
187
+
188
+ const positionA = Wick.BannerPlacementManager.getBannerPosition(a);
189
+ const positionB = Wick.BannerPlacementManager.getBannerPosition(b);
190
+
191
+ return positionA - positionB;
192
+ }).appendTo(Wick.BannerPlacementManager.el.productsWrap);
193
+ },
194
+ addInactiveClasses() {
195
+ $(Wick.BannerPlacementManager.el.allBanners).addClass(Wick.BannerPlacementManager.el.hide);
196
+ },
197
+ removeInactiveClass(banner) {
198
+ $(banner).removeClass(Wick.BannerPlacementManager.classes.bannerInactiveClass)
199
+ },
200
+ insertFirstBanner(banner) {
201
+ const bannerPosition = Wick.BannerPlacementManager.getBannerPosition(banner);
202
+
203
+ if (bannerPosition === 1) {
204
+ Wick.BannerPlacementManager.showBanner(banner);
205
+ Wick.BannerPlacementManager.removeInactiveClass(banner);
206
+ $(banner).remove();
207
+ $(Wick.BannerPlacementManager.el.productsWrap).prepend(banner);
208
+ }
209
+ },
210
+ coverEdgeCases(banner) {
211
+ Wick.BannerPlacementManager.insertFirstBanner(banner);
212
+ },
213
+ getListSlots() {
214
+ return $(Wick.BannerPlacementManager.el.productsWrap)
215
+ .children(Wick.BannerPlacementManager.el.allListSlots)
216
+ .filter(function() {
217
+ if ($(this).hasClass(Wick.BannerPlacementManager.classes.productBanners)) {
218
+ const position = Wick.BannerPlacementManager.getBannerPosition(this);
219
+ const productsCount = Wick.BannerPlacementManager.getListLength();
220
+ return position <= productsCount;
221
+ }
222
+
223
+ return true;
224
+ });
225
+ },
226
+ getBannerPriority(banner) {
227
+ if ($(banner).hasClass(Wick.BannerPlacementManager.classes.sponsorProducts)) {
228
+ return 1;
229
+ }
230
+ if ($(banner).hasClass(Wick.BannerPlacementManager.classes.sponsorBanners)) {
231
+ return 2;
232
+ }
233
+ return 3;
234
+ },
235
+ dispatchSponsorAdsDisplayedEvent() {
236
+ return new Promise((resolve, reject) => {
237
+ const eventDetail = { resolve, reject };
238
+ const sponsorAdsEvent = createEvent(Wick.BannerPlacementManager.SPONSOR_BANNERS_DISPLAYED_EVENT, { displayed: true }, eventDetail);
239
+ window.dispatchEvent(sponsorAdsEvent);
240
+ });
241
+ },
242
+ init() {
243
+ Wick.Responsive.onResize(function () {
244
+ if(Wick.BannerPlacementManager.currentBreakpoint !== Wick.Responsive.getCurrentBreakpoint()) {
245
+ Wick.BannerPlacementManager.currentBreakpoint = Wick.Responsive.getCurrentBreakpoint()
246
+ Wick.BannerPlacementManager.checkProductsInColumn();
247
+
248
+ if (
249
+ !Wick.BannerPlacementManager.isEventSent && $(Wick.BannerPlacementManager.el.sponsoredAdvBanners).length
250
+ ) {
251
+ Wick.BannerPlacementManager.dispatchSponsorAdsDisplayedEvent();
252
+ Wick.BannerPlacementManager.isEventSent = true;
253
+ }
254
+
255
+ $(window).trigger('productBannerPositionChanged');
256
+ }
257
+ });
258
+ }
259
+ };
260
+
261
+ $(document).ready(function () {
262
+ if (!Wick.BannerPlacementManager.getBannersAmount() || !Wick.BannerPlacementManager.getProductsAmount()) {
263
+ return;
264
+ }
265
+
266
+ Wick.BannerPlacementManager.init();
267
+ })
@@ -11,6 +11,10 @@ createPopupSlider({
11
11
  const htmlContent = event.detail.html;
12
12
  $(el.slider).append(htmlContent);
13
13
  showSlider();
14
+ Wick.MiniBasketSliderFE.isMiniBasketLoaded = false;
14
15
  $(el.sliderWrap).on('scroll', _.debounce(() => handleScroll(el.sliderWrap), 100));
15
16
  },
17
+ onClose: function () {
18
+ Wick.MiniBasketSliderFE.cartEntries = [];
19
+ }
16
20
  });
@@ -8,7 +8,7 @@ function createEvent(eventName, payload, eventDetail) {
8
8
  });
9
9
  }
10
10
 
11
- function createPopupSlider({ type, sliderSelector, onAppendEvent, onAppend }) {
11
+ function createPopupSlider({ type, sliderSelector, onAppendEvent, onAppend, onClose }) {
12
12
  const events = {
13
13
  CLOSE_JUST_ADDED: 'CLOSE_JUST_ADDED',
14
14
  CLOSE_MINI_BASKET: 'CLOSE_MINI_BASKET'
@@ -119,6 +119,9 @@ function createPopupSlider({ type, sliderSelector, onAppendEvent, onAppend }) {
119
119
  .finally(() => {
120
120
  hideSlider();
121
121
  Wick.Backdrop.hide();
122
+ if (typeof onClose === 'function') {
123
+ onClose();
124
+ }
122
125
  })
123
126
  }
124
127
 
@@ -167,7 +170,7 @@ function createPopupSlider({ type, sliderSelector, onAppendEvent, onAppend }) {
167
170
  bindClosePopup();
168
171
 
169
172
  if (onAppendEvent && onAppend) {
170
- document.addEventListener(onAppendEvent, (event) => {
173
+ window.addEventListener(onAppendEvent, (event) => {
171
174
  onAppend(event, { showSlider, handleScroll, el });
172
175
  });
173
176
  }
@@ -1,49 +1,49 @@
1
1
  function returnMembers() {
2
- return {
3
- canLoadMore: true,
4
- members: [
5
- {
6
- 'id': 'john.doe@wickes.co.uk',
7
- 'name': 'John Doe',
8
- 'email': 'john.doe@wickes.co.uk',
9
- 'date': '24/02/2022',
10
- 'order-history-url': 'page_tradePro_order-history.html',
11
- "status": "PENDING",
12
- "card-label": "Pending"
13
- },
14
- {
15
- 'id': 'john.doe2@wickes.co.uk',
16
- 'name': 'John Doe2',
17
- 'email': 'john.doe2@wickes.co.uk',
18
- 'date': '24/02/2022',
19
- 'order-history-url': 'page_tradePro_order-history.html',
20
- 'card-label': 'Other label'
21
- },
22
- {
23
- 'id': 'john.doe3@wickes.co.uk',
24
- 'name': 'John Doe3',
25
- 'email': 'john.doe3@wickes.co.uk',
26
- 'date': '24/02/2022',
27
- 'order-history-url': 'page_tradePro_order-history.html',
28
- }
29
- ],
30
- };
2
+ return {
3
+ canLoadMore: true,
4
+ members: [
5
+ {
6
+ id: 'john.doe@wickes.co.uk',
7
+ name: 'John Doe',
8
+ email: 'john.doe@wickes.co.uk',
9
+ date: '24/02/2022',
10
+ 'order-history-url': 'page_tradePro_order-history.html',
11
+ status: 'PENDING',
12
+ 'card-label': 'Pending',
13
+ },
14
+ {
15
+ id: 'john.doe2@wickes.co.uk',
16
+ name: 'John Doe2',
17
+ email: 'john.doe2@wickes.co.uk',
18
+ date: '24/02/2022',
19
+ 'order-history-url': 'page_tradePro_order-history.html',
20
+ 'card-label': 'Other label',
21
+ },
22
+ {
23
+ id: 'john.doe3@wickes.co.uk',
24
+ name: 'John Doe3',
25
+ email: 'john.doe3@wickes.co.uk',
26
+ date: '24/02/2022',
27
+ 'order-history-url': 'page_tradePro_order-history.html',
28
+ },
29
+ ],
30
+ };
31
31
  }
32
32
 
33
33
  function initAccountHubFunctionality() {
34
- Wick.AccountHub.initAccountHub();
35
- Wick.AccountHub.initAccountHubRemove();
34
+ Wick.AccountHub.initAccountHub();
35
+ Wick.AccountHub.initAccountHubRemove();
36
36
 
37
- $(window).on(Wick.AccountHub.LOAD_MORE_EVENT, function (e) {
38
- setTimeout(() => {
39
- e.detail.resolve(returnMembers());
40
- }, 1000);
41
- });
37
+ $(window).on(Wick.AccountHub.LOAD_MORE_EVENT, function (e) {
38
+ setTimeout(() => {
39
+ e.detail.resolve(returnMembers());
40
+ }, 1000);
41
+ });
42
42
  }
43
43
 
44
44
  $(document).ready(function () {
45
- if (!$('.account-hub').length) {
46
- return;
47
- }
48
- initAccountHubFunctionality();
45
+ if (!$('.account-hub').length) {
46
+ return;
47
+ }
48
+ initAccountHubFunctionality();
49
49
  });
@@ -0,0 +1,53 @@
1
+ // Simulate prompt for input
2
+ function getInputs() {
3
+ const productBannerPositions = prompt("Enter Product Banner Positions:", "2") || "";
4
+ const sponsorProductPositions = prompt("Enter Sponsor Product Positions (comma-separated):", "6,7,8") || "";
5
+ const sponsorBannerPositions = prompt("Enter Sponsor Banner Positions:", "10") || "";
6
+
7
+ return {
8
+ productBannerPositions: productBannerPositions ? productBannerPositions.split(",").map(Number) : [],
9
+ sponsorProductPositions: sponsorProductPositions ? sponsorProductPositions.split(",").map(Number) : [],
10
+ sponsorBannerPositions: sponsorBannerPositions ? sponsorBannerPositions.split(",").map(Number) : [],
11
+ };
12
+ }
13
+
14
+ function getPositionAttr() {
15
+ const isMobile = Wick.BannerPlacementManager.isMobileResolution();
16
+ return isMobile
17
+ ? 'data-mobile-position'
18
+ : 'data-desktop-position';
19
+ }
20
+
21
+ function updatePositions(inputs) {
22
+ const productBannerElements = document.querySelectorAll(".card-product-banner");
23
+ productBannerElements.forEach((el, index) => {
24
+ if (inputs.productBannerPositions[index] !== undefined) {
25
+ el.setAttribute(getPositionAttr(), inputs.productBannerPositions[index]);
26
+ }
27
+ });
28
+
29
+ const sponsorProductElements = document.querySelectorAll(".card-sponsor-product");
30
+ sponsorProductElements.forEach((el, index) => {
31
+ if (inputs.sponsorProductPositions[index] !== undefined) {
32
+ el.setAttribute(getPositionAttr(), inputs.sponsorProductPositions[index]);
33
+ }
34
+ });
35
+
36
+ const sponsorBannerElements = document.querySelectorAll(".card-sponsor-banner");
37
+ sponsorBannerElements.forEach((el, index) => {
38
+ if (inputs.sponsorBannerPositions[index] !== undefined) {
39
+ el.setAttribute(getPositionAttr(), inputs.sponsorBannerPositions[index]);
40
+ }
41
+ });
42
+ }
43
+
44
+ function init() {
45
+ const inputs = getInputs();
46
+ updatePositions(inputs);
47
+ }
48
+
49
+ $(document).ready(function () {
50
+ if ($('.retail-media .products-list.products-list-v2').length) {
51
+ setTimeout(() => init(), 100)
52
+ }
53
+ });