wickes-css2 2.105.0-develop.2 → 2.105.0-develop.4

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 (168) hide show
  1. package/Readme.md +3 -2
  2. package/build/css/category-main.css +1 -1
  3. package/build/css/homepage-main.css +1 -1
  4. package/build/css/kitchen-plp-main.css +1 -1
  5. package/build/css/main.css +1 -1
  6. package/build/css/my-account-main-v2.css +1 -1
  7. package/build/css/my-account-main.css +1 -1
  8. package/build/css/pages/page_product_search.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/account-members.min.js +1 -1
  17. package/build/js/basket.min.js +2 -2
  18. package/build/js/bundle.min.js +1 -1
  19. package/build/js/checkout.min.js +2 -2
  20. package/build/js/emulation.min.js +12122 -11594
  21. package/build/js/general.bundle.min.js +1 -1
  22. package/build/js/kitchen/kitchen-plp.min.js +1 -9
  23. package/build/js/merged-checkout.min.js +2 -2
  24. package/build/js/mini-basket-slider.min.js +1 -1
  25. package/build/js/page/basket/basket-update-cart-action.js +59 -56
  26. package/build/js/page/basket/basket-update-cart.js +27 -27
  27. package/build/js/page/basket/basket-utils.js +40 -33
  28. package/build/js/page/basket/mini-basket-total.js +70 -66
  29. package/build/js/page/basket/quantity-change-handler.js +73 -55
  30. package/build/js/page/basket/update-quantity-operation.js +39 -30
  31. package/build/js/page/basket/update-quantity.js +62 -62
  32. package/build/js/page/basket-v2.js +362 -229
  33. package/build/js/page/billie-business-type.js +27 -27
  34. package/build/js/page/checkout-payment-details.js +301 -299
  35. package/build/js/page/components/discounts.js +39 -36
  36. package/build/js/page/components/mini-basket-slider.js +604 -545
  37. package/build/js/page/filters/desktop-nav.js +64 -0
  38. package/build/js/page/filters/mobile-nav.js +93 -0
  39. package/build/js/page/filters/plp-filters-chips.js +92 -0
  40. package/build/js/page/filters/plp-filters-mobile.js +150 -0
  41. package/build/js/page/filters/plp-filters-panel.js +123 -0
  42. package/build/js/page/filters/plp-filters-utils.js +66 -0
  43. package/build/js/page/filters/plp-filters.js +256 -0
  44. package/build/js/page/filters/sort-by.js +172 -0
  45. package/build/js/page/klarna-modal-scroll-disable.js +4 -4
  46. package/build/js/page/online-exclusive.js +28 -30
  47. package/build/js/page/search-filter.js +62 -0
  48. package/build/js/page/utils/helpers.js +14 -9
  49. package/build/js/page/utils/show-more-less.js +273 -0
  50. package/build/js/pdp.bundle.min.js +1 -1
  51. package/build/js/plp-filters.min.js +9 -0
  52. package/build/js/plp.bundle.min.js +1 -1
  53. package/build/js/project-list.min.js +1 -1
  54. package/build/js/search-filter.min.js +1 -0
  55. package/package.json +5 -3
  56. package/src/components/accordion.hbs +2 -2
  57. package/src/components/generate-project-id.hbs +1 -1
  58. package/src/components/kitchen/dropdown.hbs +6 -3
  59. package/src/components/kitchen/filter-modal-content-kitchen.hbs +10 -0
  60. package/src/components/kitchen/filter-modal.hbs +10 -13
  61. package/src/components/kitchen/plp-filters.hbs +3 -1
  62. package/src/components/kitchen/sort-by.hbs +1 -1
  63. package/src/components/search-filter-modal-content.hbs +102 -0
  64. package/src/components/search-filter.hbs +121 -112
  65. package/src/components/shopping-list-with-share-list-v2.hbs +28 -10
  66. package/src/components/shopping-list.hbs +5 -5
  67. package/src/data/data_plp_load-more.json +1 -1
  68. package/src/elements/btn.hbs +7 -0
  69. package/src/js/components/general/accordion.js +38 -29
  70. package/src/js/components/general/cart-slider.js +19 -16
  71. package/src/js/components/general/create-popup-slider.js +168 -173
  72. package/src/js/emulation/big-wins.js +1081 -904
  73. package/src/js/emulation/billie-modal.js +23 -19
  74. package/src/js/emulation/checkout-payment-details.js +47 -38
  75. package/src/js/emulation/custom-slider-emulation.js +17 -13
  76. package/src/js/emulation/filters-emulation.js +164 -0
  77. package/src/js/emulation/forms.js +360 -323
  78. package/src/js/emulation/mini-basket-data.js +1051 -923
  79. package/src/js/emulation/paymentLoader.js +17 -17
  80. package/src/js/emulation/pdf-file-loader.js +89 -91
  81. package/src/js/emulation/popover-mini-basket.js +246 -239
  82. package/src/js/emulation/product-counter.js +50 -0
  83. package/src/js/emulation/project-list-pdp.js +321 -316
  84. package/src/js/emulation/repayment-toggle.js +23 -24
  85. package/src/js/emulation/reset-filter-desktop.js +5 -0
  86. package/src/js/emulation/selectable.js +22 -18
  87. package/src/js/emulation/wismo-details.js +23 -31
  88. package/src/js/page/basket/basket-update-cart-action.js +59 -56
  89. package/src/js/page/basket/basket-update-cart.js +27 -27
  90. package/src/js/page/basket/basket-utils.js +40 -33
  91. package/src/js/page/basket/mini-basket-total.js +70 -66
  92. package/src/js/page/basket/quantity-change-handler.js +73 -55
  93. package/src/js/page/basket/update-quantity-operation.js +39 -30
  94. package/src/js/page/basket/update-quantity.js +62 -62
  95. package/src/js/page/basket-v2.js +362 -229
  96. package/src/js/page/billie-business-type.js +27 -27
  97. package/src/js/page/checkout-payment-details.js +301 -299
  98. package/src/js/page/components/discounts.js +39 -36
  99. package/src/js/page/components/mini-basket-slider.js +604 -545
  100. package/src/js/page/filters/desktop-nav.js +64 -0
  101. package/src/js/page/filters/mobile-nav.js +93 -0
  102. package/src/js/page/filters/plp-filters-chips.js +92 -0
  103. package/src/js/page/filters/plp-filters-mobile.js +150 -0
  104. package/src/js/page/filters/plp-filters-panel.js +123 -0
  105. package/src/js/page/filters/plp-filters-utils.js +66 -0
  106. package/src/js/page/filters/plp-filters.js +256 -0
  107. package/src/js/page/filters/sort-by.js +172 -0
  108. package/src/js/page/klarna-modal-scroll-disable.js +4 -4
  109. package/src/js/page/online-exclusive.js +28 -30
  110. package/src/js/page/search-filter.js +62 -0
  111. package/src/js/page/utils/helpers.js +14 -9
  112. package/src/js/page/utils/show-more-less.js +273 -0
  113. package/src/page_empty-shared-project-list-bicester-hub.html +3 -0
  114. package/src/page_kitchen-plp.html +2 -2
  115. package/src/page_my-shopping-list-hide-download.html +1 -1
  116. package/src/page_plp-with-paint.html +2 -7
  117. package/src/page_plp.html +2 -7
  118. package/src/page_plp_v2-energy-efficiency.html +1 -6
  119. package/src/page_plp_v2-favourite-products.html +6 -7
  120. package/src/page_plp_v2-vat.html +2 -7
  121. package/src/page_plp_v2.html +22 -9
  122. package/src/page_product_search-vat.html +2 -7
  123. package/src/page_product_search.html +2 -7
  124. package/src/page_project-list-with-new-share-popup-android.html +15 -0
  125. package/src/page_project-list-with-new-share-popup-ios.html +15 -0
  126. package/src/page_project-list-with-new-share-popup.html +1 -0
  127. package/src/page_search-results.html +2 -7
  128. package/src/page_shared-project-list-bicester-hub.html +1 -0
  129. package/src/scss/common/_common.scss +5 -4
  130. package/src/scss/components/_accordion.scss +1 -3
  131. package/src/scss/components/_custom-slider.scss +15 -14
  132. package/src/scss/components/_date-selection-add-new-styles.scss +6 -7
  133. package/src/scss/components/_date-selection.scss +1 -1
  134. package/src/scss/components/{kitchen/_filter-modal.scss → _filter-modal.scss} +55 -4
  135. package/src/scss/components/{kitchen/_plp-filters.scss → _plp-filters.scss} +31 -13
  136. package/src/scss/components/_popover-mini-basket.scss +3 -3
  137. package/src/scss/components/_search-filter.scss +95 -15
  138. package/src/scss/components/_shared-shopping-list.scss +22 -0
  139. package/src/scss/components/_shopping-list.scss +18 -8
  140. package/src/scss/components/_sort-by.scss +190 -0
  141. package/src/scss/components/checkout-chip.scss +2 -2
  142. package/src/scss/components/checkout-payment-repayment-terms.scss +1 -1
  143. package/src/scss/globals/_global-components.scss +3 -0
  144. package/src/scss/helpers/_colors-semantic.scss +68 -68
  145. package/src/scss/helpers/_variables.scss +242 -196
  146. package/src/scss/kitchen-plp-main.scss +0 -3
  147. package/src/scss/main.scss +65 -65
  148. package/src/scss/pages/page_product-details-v2.scss +1 -4
  149. package/src/scss/pages/page_product_search.scss +9 -1
  150. package/src/scss/pages/page_products-list-combined.scss +28 -24
  151. package/src/scss/pages/page_products-list.scss +8 -0
  152. package/src/scss/pages/tradePro-rewards.scss +2 -3
  153. package/src/sitemap.html +9 -1
  154. package/build/js/page/accordion.js +0 -35
  155. package/build/js/page/kitchen/plp-filters-chips.js +0 -90
  156. package/build/js/page/kitchen/plp-filters-mobile.js +0 -72
  157. package/build/js/page/kitchen/plp-filters-panel.js +0 -119
  158. package/build/js/page/kitchen/plp-filters-utils.js +0 -65
  159. package/build/js/page/kitchen/plp-filters.js +0 -205
  160. package/build/js/page/kitchen/sort-by.js +0 -157
  161. package/src/js/components/general/search-filter.js +0 -21
  162. package/src/js/page/accordion.js +0 -35
  163. package/src/js/page/kitchen/plp-filters-chips.js +0 -90
  164. package/src/js/page/kitchen/plp-filters-mobile.js +0 -72
  165. package/src/js/page/kitchen/plp-filters-panel.js +0 -119
  166. package/src/js/page/kitchen/plp-filters-utils.js +0 -65
  167. package/src/js/page/kitchen/plp-filters.js +0 -205
  168. package/src/js/page/kitchen/sort-by.js +0 -157
@@ -1,39 +1,39 @@
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";
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
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"
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
23
  Handlebars.registerHelper('eq', function (a, b) {
24
- return a === b;
24
+ return a === b;
25
25
  });
26
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;
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
33
  });
34
34
 
35
- Handlebars.registerHelper('isToggleVatAvailable', function() {
36
- return Wick.checkLocalEnv ? false : window.ACC?.app?.isVatToggleAvailable;
35
+ Handlebars.registerHelper('isToggleVatAvailable', function () {
36
+ return Wick.checkLocalEnv ? false : window.ACC?.app?.isVatToggleAvailable;
37
37
  });
38
38
 
39
39
  var Wick = window.Wick || {};
@@ -41,540 +41,599 @@ var Wick = window.Wick || {};
41
41
  const urlsToReload = ['/cart', '/merge-carts'];
42
42
 
43
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
- }
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')
156
+ Wick.MiniBasketSliderFE.actionEventType =
157
+ Wick.MiniBasketSliderFE.events.MINI_BASKET_QUANTITY_INCREASE;
158
+ if (action === 'minus')
159
+ Wick.MiniBasketSliderFE.actionEventType =
160
+ Wick.MiniBasketSliderFE.events.MINI_BASKET_QUANTITY_DECREASE;
161
+ if (action === 'remove')
162
+ Wick.MiniBasketSliderFE.actionEventType =
163
+ Wick.MiniBasketSliderFE.events.MINI_BASKET_ITEM_REMOVE;
164
+
165
+ handleQuantityChange({
166
+ quantityInput: quantityElement,
167
+ action,
168
+ value,
169
+ context: $item,
170
+ entryNumber,
171
+ onQuantityChange: Wick.MiniBasketSliderFE.updateQuantityAction,
172
+ debounceQuantityChange: Wick.MiniBasketSliderFE.debounceQuantityChange,
173
+ parentWrap: Wick.MiniBasketSliderFE.el.productsItem,
174
+ });
175
+ },
176
+ debounceQuantityChange: _.debounce(function (entryNumber, value, quantityInput, context) {
177
+ showLoader(Wick.MiniBasketSliderFE.el.customLoader);
178
+ Wick.MiniBasketSliderFE.updateQuantityAction(entryNumber, value, quantityInput, context);
179
+ }, 500),
180
+ updateQuantityAction: function (entryNumber, quantityToUpdate, quantityInput, context) {
181
+ updateQuantityAction({
182
+ entryNumber,
183
+ quantityToUpdate,
184
+ quantityInput,
185
+ context,
186
+ hideLoader: () =>
187
+ setTimeout(() => hideLoader(Wick.MiniBasketSliderFE.el.customLoader), 500),
188
+ updateAction: Wick.MiniBasketSliderFE.updateAction,
189
+ isLocalEnv: Wick.checkLocalEnv,
190
+ basketData: Wick.MiniBasketData,
191
+ updateQuantityOperation: Wick.MiniBasketSliderFE.updateQuantityOperation,
192
+ callActionFn: callAction,
193
+ routes: ROUTES,
194
+ isMiniBasket: true,
195
+ });
214
196
 
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);
197
+ Wick.MiniBasketSliderFE.toggleMinusButtonState(context, quantityToUpdate);
198
+ },
199
+ toggleMinusButtonState($item, value) {
200
+ const $minusBtn = $item.find(Wick.MiniBasketSliderFE.el.btnQuantityMinus);
201
+ if (value > 1) {
202
+ $minusBtn.prop('disabled', false);
240
203
  } 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);
204
+ $minusBtn.prop('disabled', true);
259
205
  }
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);
206
+ },
207
+ updateAction: function (response, quantityToUpdate, quantityInput, context, successCallback) {
208
+ Wick.MiniBasketSliderFE.updateQuantityOperation(
209
+ quantityToUpdate,
210
+ quantityInput,
211
+ context,
212
+ response
213
+ );
214
+ successCallback(response);
215
+ },
216
+ updateQuantityOperation: function (quantityToUpdate, quantityInput, context, data) {
217
+ const $notifications = $(Wick.MiniBasketSliderFE.el.notifications);
218
+ if ($notifications.children().length > 0) {
219
+ $notifications.empty();
287
220
  }
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 (deliveryGroup.length) {
317
- deliveryGroup.forEach((obj) => {
318
- obj.entries.forEach(item => {
319
- if (item.charity) return;
320
- itemDetails = { item, type: 'delivery', data, position };
321
- $(Wick.MiniBasketSliderFE.el.products).append(Wick.MiniBasketSliderFE.createOrderItem(itemDetails));
322
- position++;
323
- });
324
- })
325
- }
326
221
 
327
- if (ccGroup.length) {
328
- ccGroup.forEach((obj) => {
329
- obj.entries.forEach(item => {
330
- itemDetails = { item, type: 'cc', data, position };
331
- $(Wick.MiniBasketSliderFE.el.products).append(Wick.MiniBasketSliderFE.createOrderItem(itemDetails));
332
- position++;
222
+ updateQuantityOperation(quantityToUpdate, quantityInput, context, data, {
223
+ updateCart: Wick.MiniBasketSliderFE.updateCart,
224
+ showNotification: Wick.MiniBasketSliderFE.showNotification,
225
+ updateQuantity: Wick.MiniBasketSliderFE.updateQuantity,
226
+ updateItemTotal: null,
227
+ isMessageExist: Wick.MiniBasketSliderFE.isMessageExist,
228
+ getMessageInfo: Wick.MiniBasketSliderFE.getMessageInfo,
333
229
  });
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
- Wick.MiniBasketSliderFE.scrollToNotifications();
345
- },
346
- scrollToNotifications: function() {
347
- const $notifications = $(Wick.MiniBasketSliderFE.el.notifications);
348
- if (!$notifications.children().length) return;
349
-
350
- const $scrollContainer = $(Wick.MiniBasketSliderFE.el.customSliderWrap);
351
- if (!$scrollContainer.length) return;
352
-
353
- $scrollContainer.stop(true, true).animate({ scrollTop: 0 }, 200);
354
- },
355
- isMessageExist: isMessageExist,
356
- getMessageInfo: getMessageInfo,
357
- getCartEntries: function(data) {
358
- if (!data.deliveryOrderGroups) {
359
- data.deliveryOrderGroups = [];
360
- data.pickupOrderGroups = [];
361
- Wick.MiniBasketSliderFE.cartEntries = getCartEntries(data);
362
- return
363
- }
364
-
365
- Wick.MiniBasketSliderFE.cartEntries = getCartEntries(data);
366
- },
367
- checkProductArrays: checkProductArrays,
368
- createOrderItem(itemDetails) {
369
- let promotionsHtml = '';
370
- if (itemDetails.item.updateable) {
371
- promotionsHtml = Wick.MiniBasketSliderFE.addPromotions(itemDetails.item, itemDetails.data);
372
- }
373
-
374
- if (itemDetails.item.deliveryPointOfService && itemDetails.item.deliveryPointOfService.description) {
375
- itemDetails.item.deliveryPointOfService.description = Wick.MiniBasketSliderFE.capitalizeWords(itemDetails.item.deliveryPointOfService.description);
376
- }
230
+ },
231
+ updateCart: function (repaintData, context, charity, initial, callback) {
232
+ console.log('case(api) to update cart');
233
+ updateCartBase({
234
+ isLocalEnv: Wick.checkLocalEnv,
235
+ apiUrl: ROUTES.BASKET_GET_CART,
236
+ apiType: 'GET',
237
+ hideLoader: () =>
238
+ setTimeout(() => hideLoader(Wick.MiniBasketSliderFE.el.customLoader), 500),
239
+ callActionFn: callAction,
240
+ actionCallback: callback || Wick.MiniBasketSliderFE.updateCartAction,
241
+ repaintData,
242
+ context,
243
+ charity,
244
+ initial,
245
+ localUpdateFn: function (initial, repaintData, context, charity) {
246
+ if (initial) {
247
+ Wick.MiniBasketSliderFE.getCartEntries(Wick.MiniBasketData.initialCartState);
248
+ } else {
249
+ updateTotal(
250
+ Wick.MiniBasketData.updateCart,
251
+ Wick.MiniBasketSliderFE.getEqualMapForUpdateCart(
252
+ Wick.MiniBasketData.updateCart
253
+ )
254
+ );
255
+
256
+ if (repaintData) {
257
+ Wick.MiniBasketSliderFE.repaintOrderItems(
258
+ Wick.MiniBasketData.updateCart,
259
+ repaintData
260
+ );
261
+ } else {
262
+ Wick.MiniBasketSliderFE.updateItemsCount(Wick.MiniBasketData.updateCart);
263
+ }
264
+
265
+ !charity ||
266
+ Wick.MiniBasketSliderFE.addCharityEntryNumber(
267
+ Wick.MiniBasketData.updateCart
268
+ );
269
+ if (context && context.length) {
270
+ Wick.MiniBasketSliderFE.updatePromotion(
271
+ Wick.MiniBasketData.updateCart,
272
+ context
273
+ );
274
+ }
275
+ Wick.MiniBasketSliderFE.getCartEntries(Wick.MiniBasketData.updateCart);
276
+ Wick.MiniBasketSliderFE.checkProductArrays(Wick.MiniBasketData.updateCart) ||
277
+ Wick.MiniBasketSliderFE.removeOrderItem(repaintData);
278
+ setTimeout(() => hideLoader(Wick.MiniBasketSliderFE.el.customLoader), 1000);
279
+ }
280
+ },
281
+ });
282
+ },
283
+ updateCartAction: function (response, { repaintData, context, charity, initial }) {
284
+ updateCartActionBase({
285
+ response,
286
+ repaintData,
287
+ context,
288
+ charity,
289
+ initial,
290
+ updateOrderSummaryFn: updateTotal,
291
+ getEqualMapFn: Wick.MiniBasketSliderFE.getEqualMapForUpdateCart,
292
+ repaintOrderItemsFn: Wick.MiniBasketSliderFE.repaintOrderItems,
293
+ addCharityEntryNumberFn: Wick.MiniBasketSliderFE.addCharityEntryNumber,
294
+ updatePromotionFn: Wick.MiniBasketSliderFE.updatePromotion,
295
+ cartEntries: Wick.MiniBasketSliderFE.cartEntries,
296
+ getCartEntriesFn: () => Wick.MiniBasketSliderFE.getCartEntries(response),
297
+ checkProductArraysFn: Wick.MiniBasketSliderFE.checkProductArrays,
298
+ removeOrderItemFn: Wick.MiniBasketSliderFE.removeOrderItem,
299
+ elOrderItem: Wick.MiniBasketSliderFE.el.orderItem,
300
+ triggerCartUpdate: false,
301
+ extraActionsMiniBasket: () => {
302
+ Wick.MiniBasketSliderFE.toggleMiniBasketEmptyView();
303
+ Wick.MiniBasketSliderFE.updateItemsCount(response);
304
+
305
+ if (Wick.MiniBasketSliderFE.actionEventType) {
306
+ Wick.MiniBasketSliderFE.fireMiniBasketActionEvent(
307
+ Wick.MiniBasketSliderFE.actionEventType,
308
+ response
309
+ );
310
+ }
311
+ },
312
+ });
313
+ },
314
+ fireMiniBasketActionEvent(eventType, cartData) {
315
+ if (!eventType) return;
316
+ const payload = {
317
+ orderType: cartData.orderType || '',
318
+ deliveryOrderGroups: cartData.deliveryOrderGroups || [],
319
+ pickupOrderGroups: cartData.pickupOrderGroups || [],
320
+ };
321
+ const event = createEvent(eventType, payload, {});
322
+ window.dispatchEvent(event);
323
+ },
324
+ removeOrderItem(data) {
325
+ Wick.MiniBasketSliderFE.updateItemsCount(data);
326
+ },
327
+ repaintOrderItems: function (data) {
328
+ const ccGroup = data.pickupOrderGroups || [],
329
+ deliveryGroup = data.deliveryOrderGroups || [];
330
+ let itemDetails = {};
331
+ let position = 0;
332
+
333
+ $(Wick.MiniBasketSliderFE.el.orderItem).remove();
334
+
335
+ if (deliveryGroup.length) {
336
+ deliveryGroup.forEach((obj) => {
337
+ obj.entries.forEach((item) => {
338
+ if (item.charity) return;
339
+ itemDetails = { item, type: 'delivery', data, position };
340
+ $(Wick.MiniBasketSliderFE.el.products).append(
341
+ Wick.MiniBasketSliderFE.createOrderItem(itemDetails)
342
+ );
343
+ position++;
344
+ });
345
+ });
346
+ }
377
347
 
378
- return orderItemTemplate({
379
- item: itemDetails.item,
380
- type: itemDetails.type,
381
- promotionsHtml,
382
- position: itemDetails.position
383
- });
384
- },
385
- capitalizeWords(str) {
386
- return str
387
- .toLowerCase()
388
- .split(' ')
389
- .map(function(word) {
390
- return word.charAt(0).toUpperCase() + word.slice(1);
391
- })
392
- .join(' ');
393
- },
394
- updateItemsCount(data) {
395
- const totalCount = data.totalUnitCount || 0;
396
-
397
- $(Wick.MiniBasketSliderFE.el.miniBasketTotal).text(`Your basket (${totalCount})`);
398
- $(Wick.MiniBasketSliderFE.el.headerBasketCount).text(`${totalCount}`);
399
- $(Wick.MiniBasketSliderFE.el.basketTotalItem).html(`${totalCount}`);
400
- },
401
- updatePromotion: function(data) {
402
- updatePromotion(
403
- data,
404
- Wick.MiniBasketSliderFE.el.orderItem,
405
- Wick.MiniBasketSliderFE.el.orderItemOffers,
406
- Wick.MiniBasketSliderFE.el.orderItemInfo,
407
- Wick.MiniBasketSliderFE.addPromotions
408
- );
409
- },
410
- addPromotions: function (item, data) {
411
- let arr = [];
412
-
413
- data.potentialProductPromotions && data.potentialProductPromotions.forEach((entry) => {
414
- entry.consumedEntries.forEach((promo) => {
415
- if (promo.orderEntryNumber === item.entryNumber) {
416
- if (arr.length) {
417
- let duplicate = arr.every((el) => {
418
- return el !== `<div class="products__promo">${entry.description}</div>`
419
- })
348
+ if (ccGroup.length) {
349
+ ccGroup.forEach((obj) => {
350
+ obj.entries.forEach((item) => {
351
+ itemDetails = { item, type: 'cc', data, position };
352
+ $(Wick.MiniBasketSliderFE.el.products).append(
353
+ Wick.MiniBasketSliderFE.createOrderItem(itemDetails)
354
+ );
355
+ position++;
356
+ });
357
+ });
358
+ }
420
359
 
421
- !duplicate || arr.push(`<div class="products__promo">${entry.description}</div>`);
360
+ Wick.MiniBasketSliderFE.updateItemsCount(data);
361
+
362
+ $(document).trigger('cartRerender');
363
+ },
364
+ showNotification: function (data) {
365
+ showNotification(data, Wick.MiniBasketSliderFE.el.notifications);
366
+
367
+ Wick.MiniBasketSliderFE.scrollToNotifications();
368
+ },
369
+ scrollToNotifications: function () {
370
+ const $notifications = $(Wick.MiniBasketSliderFE.el.notifications);
371
+ if (!$notifications.children().length) return;
372
+
373
+ const $scrollContainer = $(Wick.MiniBasketSliderFE.el.customSliderWrap);
374
+ if (!$scrollContainer.length) return;
375
+
376
+ $scrollContainer.stop(true, true).animate({ scrollTop: 0 }, 200);
377
+ },
378
+ isMessageExist: isMessageExist,
379
+ getMessageInfo: getMessageInfo,
380
+ getCartEntries: function (data) {
381
+ if (!data.deliveryOrderGroups) {
382
+ data.deliveryOrderGroups = [];
383
+ data.pickupOrderGroups = [];
384
+ Wick.MiniBasketSliderFE.cartEntries = getCartEntries(data);
385
+ return;
386
+ }
422
387
 
423
- } else {
424
- arr.push(`<div class="products__promo">${entry.description}</div>`);
425
- }
388
+ Wick.MiniBasketSliderFE.cartEntries = getCartEntries(data);
389
+ },
390
+ checkProductArrays: checkProductArrays,
391
+ createOrderItem(itemDetails) {
392
+ let promotionsHtml = '';
393
+ if (itemDetails.item.updateable) {
394
+ promotionsHtml = Wick.MiniBasketSliderFE.addPromotions(
395
+ itemDetails.item,
396
+ itemDetails.data
397
+ );
426
398
  }
427
- })
428
399
 
429
- });
400
+ if (
401
+ itemDetails.item.deliveryPointOfService &&
402
+ itemDetails.item.deliveryPointOfService.description
403
+ ) {
404
+ itemDetails.item.deliveryPointOfService.description =
405
+ Wick.MiniBasketSliderFE.capitalizeWords(
406
+ itemDetails.item.deliveryPointOfService.description
407
+ );
408
+ }
430
409
 
431
- data.appliedProductPromotions && data.appliedProductPromotions.forEach((entry) => {
432
- entry.consumedEntries.forEach((promo) => {
433
- if (promo.orderEntryNumber === item.entryNumber && entry.description) {
434
- if (arr.length) {
435
- let duplicate = arr.every((el) => {
436
- return el !== `<div class="products__promo">${entry.description}</div>`
410
+ return orderItemTemplate({
411
+ item: itemDetails.item,
412
+ type: itemDetails.type,
413
+ promotionsHtml,
414
+ position: itemDetails.position,
415
+ });
416
+ },
417
+ capitalizeWords(str) {
418
+ return str
419
+ .toLowerCase()
420
+ .split(' ')
421
+ .map(function (word) {
422
+ return word.charAt(0).toUpperCase() + word.slice(1);
437
423
  })
438
-
439
- !duplicate || arr.push(`<div class="products__promo">${entry.description}</div>`);
440
-
441
- } else {
442
- arr.push(`<div class="products__promo">${entry.description}</div>`);
443
- }
424
+ .join(' ');
425
+ },
426
+ updateItemsCount(data) {
427
+ const totalCount = data.totalUnitCount || 0;
428
+
429
+ $(Wick.MiniBasketSliderFE.el.miniBasketTotal).text(`Your basket (${totalCount})`);
430
+ $(Wick.MiniBasketSliderFE.el.headerBasketCount).text(`${totalCount}`);
431
+ $(Wick.MiniBasketSliderFE.el.basketTotalItem).html(`${totalCount}`);
432
+ },
433
+ updatePromotion: function (data) {
434
+ updatePromotion(
435
+ data,
436
+ Wick.MiniBasketSliderFE.el.orderItem,
437
+ Wick.MiniBasketSliderFE.el.orderItemOffers,
438
+ Wick.MiniBasketSliderFE.el.orderItemInfo,
439
+ Wick.MiniBasketSliderFE.addPromotions
440
+ );
441
+ },
442
+ addPromotions: function (item, data) {
443
+ let arr = [];
444
+
445
+ data.potentialProductPromotions &&
446
+ data.potentialProductPromotions.forEach((entry) => {
447
+ entry.consumedEntries.forEach((promo) => {
448
+ if (promo.orderEntryNumber === item.entryNumber) {
449
+ if (arr.length) {
450
+ let duplicate = arr.every((el) => {
451
+ return (
452
+ el !== `<div class="products__promo">${entry.description}</div>`
453
+ );
454
+ });
455
+
456
+ !duplicate ||
457
+ arr.push(`<div class="products__promo">${entry.description}</div>`);
458
+ } else {
459
+ arr.push(`<div class="products__promo">${entry.description}</div>`);
460
+ }
461
+ }
462
+ });
463
+ });
464
+
465
+ data.appliedProductPromotions &&
466
+ data.appliedProductPromotions.forEach((entry) => {
467
+ entry.consumedEntries.forEach((promo) => {
468
+ if (promo.orderEntryNumber === item.entryNumber && entry.description) {
469
+ if (arr.length) {
470
+ let duplicate = arr.every((el) => {
471
+ return (
472
+ el !== `<div class="products__promo">${entry.description}</div>`
473
+ );
474
+ });
475
+
476
+ !duplicate ||
477
+ arr.push(`<div class="products__promo">${entry.description}</div>`);
478
+ } else {
479
+ arr.push(`<div class="products__promo">${entry.description}</div>`);
480
+ }
481
+ }
482
+ });
483
+ });
484
+
485
+ return arr.length ? `<div class="products__offers">${arr.join('')}</div>` : '';
486
+ },
487
+ initPopupSlider() {
488
+ createPopupSlider({
489
+ type: 'miniBasket',
490
+ sliderSelector: '.custom-slider.mini-basket',
491
+ onAppendEvent: Wick.MiniBasketSliderFE.events.SHOW_MINI_BASKET,
492
+ onAppend: function (event, { showSlider }) {
493
+ Wick.MiniBasketSliderFE.toggleMiniBasketEmptyView();
494
+ showSlider();
495
+ },
496
+ onClose: function () {
497
+ $(Wick.MiniBasketSliderFE.el.notifications).empty();
498
+ Wick.MiniBasketSliderFE.isMiniBasketOpened = false;
499
+ Wick.MiniBasketSliderFE.actionEventType = null;
500
+ },
501
+ });
502
+ },
503
+ toggleMiniBasketEmptyView() {
504
+ if (!Wick.MiniBasketSliderFE.cartEntries.length) {
505
+ if (!$(Wick.MiniBasketSliderFE.el.customSliderEmpty).length) {
506
+ $(Wick.MiniBasketSliderFE.el.customSliderWrap).append(miniBasketEmpty());
507
+ $(Wick.MiniBasketSliderFE.el.miniBasketFooter).addClass(
508
+ Wick.MiniBasketSliderFE.classes.HIDDEN_CLASS_NAME
509
+ );
510
+ }
511
+ } else {
512
+ $(Wick.MiniBasketSliderFE.el.customSliderWrap)
513
+ .find(Wick.MiniBasketSliderFE.el.customSliderEmpty)
514
+ .remove();
515
+ $(Wick.MiniBasketSliderFE.el.miniBasketFooter).removeClass(
516
+ Wick.MiniBasketSliderFE.classes.HIDDEN_CLASS_NAME
517
+ );
518
+
519
+ if (!$(Wick.MiniBasketSliderFE.el.products).length) {
520
+ $(Wick.MiniBasketSliderFE.el.customSliderWrap).append(
521
+ '<div class="products popover-mini-basket__cards-holder"></div>'
522
+ );
523
+ }
524
+ }
525
+ },
526
+ appendMiniBasketWrap() {
527
+ if (!$(Wick.MiniBasketSliderFE.el.miniBasket).length) {
528
+ $('body').append(miniBasketMainWrap());
529
+ }
530
+ },
531
+ isEmptyBasketLocal() {
532
+ return window.location.pathname.includes('page_product-details-saved-pl.html');
533
+ },
534
+ shouldReloadPage: function () {
535
+ return urlsToReload.includes(window.location.pathname);
536
+ },
537
+ openMiniBasket() {
538
+ if (Wick.MiniBasketSliderFE.isInitial && Wick.checkLocalEnv) {
539
+ const initialCartState = Wick.MiniBasketSliderFE.isEmptyBasketLocal()
540
+ ? Wick.MiniBasketData.initialCartEmptyState
541
+ : Wick.MiniBasketData.initialCartState;
542
+
543
+ Wick.MiniBasketSliderFE.getCartEntries(initialCartState);
544
+
545
+ updateTotal(
546
+ initialCartState,
547
+ Wick.MiniBasketSliderFE.getEqualMapForUpdateCart(initialCartState)
548
+ );
549
+ Wick.MiniBasketSliderFE.repaintOrderItems(initialCartState);
550
+ Wick.MiniBasketSliderFE.showMiniBasketEvent();
551
+ setTimeout(() => {
552
+ Wick.MiniBasketSliderFE.isInitial = false;
553
+ }, 100);
554
+ return;
444
555
  }
445
- })
446
- });
447
-
448
- return arr.length ? `<div class="products__offers">${arr.join('')}</div>` : ''
449
- },
450
- initPopupSlider() {
451
- createPopupSlider({
452
- type: 'miniBasket',
453
- sliderSelector: '.custom-slider.mini-basket',
454
- onAppendEvent: Wick.MiniBasketSliderFE.events.SHOW_MINI_BASKET,
455
- onAppend: function (event, { showSlider }) {
456
- Wick.MiniBasketSliderFE.toggleMiniBasketEmptyView();
457
- showSlider();
458
- },
459
- onClose: function () {
460
- $(Wick.MiniBasketSliderFE.el.notifications).empty();
461
- Wick.MiniBasketSliderFE.isMiniBasketOpened = false;
462
- Wick.MiniBasketSliderFE.actionEventType = null;
463
- }
464
- });
465
- },
466
- toggleMiniBasketEmptyView() {
467
- if (!Wick.MiniBasketSliderFE.cartEntries.length) {
468
- if (!$(Wick.MiniBasketSliderFE.el.customSliderEmpty).length) {
469
- $(Wick.MiniBasketSliderFE.el.customSliderWrap).append(miniBasketEmpty());
470
- $(Wick.MiniBasketSliderFE.el.miniBasketFooter).addClass(Wick.MiniBasketSliderFE.classes.HIDDEN_CLASS_NAME);
471
- }
472
- } else {
473
- $(Wick.MiniBasketSliderFE.el.customSliderWrap).find(Wick.MiniBasketSliderFE.el.customSliderEmpty).remove();
474
- $(Wick.MiniBasketSliderFE.el.miniBasketFooter).removeClass(Wick.MiniBasketSliderFE.classes.HIDDEN_CLASS_NAME);
475
-
476
- if (!$(Wick.MiniBasketSliderFE.el.products).length) {
477
- $(Wick.MiniBasketSliderFE.el.customSliderWrap).append('<div class="products popover-mini-basket__cards-holder"></div>');
478
- }
479
- }
480
- },
481
- appendMiniBasketWrap() {
482
- if(!$(Wick.MiniBasketSliderFE.el.miniBasket).length) {
483
- $('body').append(miniBasketMainWrap());
484
- }
485
- },
486
- isEmptyBasketLocal() {
487
- return window.location.pathname.includes('page_product-details-saved-pl.html');
488
- },
489
- shouldReloadPage: function() {
490
- return urlsToReload.includes(window.location.pathname);
491
- },
492
- openMiniBasket() {
493
- if (Wick.MiniBasketSliderFE.isInitial && Wick.checkLocalEnv) {
494
- const initialCartState = Wick.MiniBasketSliderFE.isEmptyBasketLocal()
495
- ? Wick.MiniBasketData.initialCartEmptyState
496
- : Wick.MiniBasketData.initialCartState;
497
-
498
- Wick.MiniBasketSliderFE.getCartEntries(initialCartState);
499
-
500
- updateTotal(
501
- initialCartState,
502
- Wick.MiniBasketSliderFE.getEqualMapForUpdateCart(initialCartState)
503
- );
504
- Wick.MiniBasketSliderFE.repaintOrderItems(initialCartState);
505
- Wick.MiniBasketSliderFE.showMiniBasketEvent();
506
- setTimeout(() => {
507
- Wick.MiniBasketSliderFE.isInitial = false;
508
- }, 100);
509
- return;
510
- }
511
556
 
512
- if (!Wick.MiniBasketSliderFE.isMiniBasketLoaded) {
513
- Wick.MiniBasketSliderFE.updateCart(true, undefined, undefined, false, function (response, params) {
514
- Wick.MiniBasketSliderFE.updateCartAction(response, params);
515
- Wick.MiniBasketSliderFE.isMiniBasketLoaded = true;
516
- Wick.MiniBasketSliderFE.isMiniBasketOpened = true;
517
- Wick.MiniBasketSliderFE.showMiniBasketEvent();
518
- });
519
- } else {
520
- Wick.MiniBasketSliderFE.showMiniBasketEvent();
521
- }
522
- },
523
- showMiniBasketEvent() {
524
- return new Promise((resolve, reject) => {
525
- const eventDetail = { resolve, reject };
526
- const event = createEvent(
527
- Wick.MiniBasketSliderFE.events.SHOW_MINI_BASKET,
528
- {},
529
- eventDetail
530
- );
531
- window.dispatchEvent(event);
532
- });
533
- },
534
- bindMiniBasketBtnHandler(selector, eventName) {
535
- $(document).on('click', selector, function(e) {
536
- e.preventDefault();
537
- return new Promise((resolve, reject) => {
538
- const eventDetail = { resolve, reject };
539
- const event = createEvent(eventName, {}, eventDetail);
540
- window.dispatchEvent(event);
541
- })
542
- .then(() => {
543
- window.location.href = $(selector).attr('href');
544
- })
545
- .catch((error) => {
546
- console.error(error);
557
+ if (!Wick.MiniBasketSliderFE.isMiniBasketLoaded) {
558
+ Wick.MiniBasketSliderFE.updateCart(
559
+ true,
560
+ undefined,
561
+ undefined,
562
+ false,
563
+ function (response, params) {
564
+ Wick.MiniBasketSliderFE.updateCartAction(response, params);
565
+ Wick.MiniBasketSliderFE.isMiniBasketLoaded = true;
566
+ Wick.MiniBasketSliderFE.isMiniBasketOpened = true;
567
+ Wick.MiniBasketSliderFE.showMiniBasketEvent();
568
+ }
569
+ );
570
+ } else {
571
+ Wick.MiniBasketSliderFE.showMiniBasketEvent();
572
+ }
573
+ },
574
+ showMiniBasketEvent() {
575
+ return new Promise((resolve, reject) => {
576
+ const eventDetail = { resolve, reject };
577
+ const event = createEvent(
578
+ Wick.MiniBasketSliderFE.events.SHOW_MINI_BASKET,
579
+ {},
580
+ eventDetail
581
+ );
582
+ window.dispatchEvent(event);
583
+ });
584
+ },
585
+ bindMiniBasketBtnHandler(selector, eventName) {
586
+ $(document).on('click', selector, function (e) {
587
+ e.preventDefault();
588
+ return new Promise((resolve, reject) => {
589
+ const eventDetail = { resolve, reject };
590
+ const event = createEvent(eventName, {}, eventDetail);
591
+ window.dispatchEvent(event);
592
+ })
593
+ .then(() => {
594
+ window.location.href = $(selector).attr('href');
595
+ })
596
+ .catch((error) => {
597
+ console.error(error);
598
+ });
547
599
  });
548
- });
549
- },
550
- init () {
551
- $(Wick.MiniBasketSliderFE.el.miniBasket).on('click', Wick.MiniBasketSliderFE.el.btnQuantity, Wick.MiniBasketSliderFE.miniBasketUpdateItemQuantity);
552
- $(Wick.MiniBasketSliderFE.el.miniBasket).on('click', Wick.MiniBasketSliderFE.el.btnRemove, Wick.MiniBasketSliderFE.miniBasketUpdateItemQuantity);
553
-
554
- Wick.MiniBasketSliderFE.bindMiniBasketBtnHandler(
555
- Wick.MiniBasketSliderFE.el.btnCheckout,
556
- Wick.MiniBasketSliderFE.events.MINI_BASKET_CHECKOUT
557
- );
558
-
559
- Wick.MiniBasketSliderFE.bindMiniBasketBtnHandler(
560
- Wick.MiniBasketSliderFE.el.btnViewBasket,
561
- Wick.MiniBasketSliderFE.events.MINI_BASKET_VIEW_BASKET
562
- );
563
- }
564
- }
600
+ },
601
+ init() {
602
+ $(Wick.MiniBasketSliderFE.el.miniBasket).on(
603
+ 'click',
604
+ Wick.MiniBasketSliderFE.el.btnQuantity,
605
+ Wick.MiniBasketSliderFE.miniBasketUpdateItemQuantity
606
+ );
607
+ $(Wick.MiniBasketSliderFE.el.miniBasket).on(
608
+ 'click',
609
+ Wick.MiniBasketSliderFE.el.btnRemove,
610
+ Wick.MiniBasketSliderFE.miniBasketUpdateItemQuantity
611
+ );
612
+
613
+ Wick.MiniBasketSliderFE.bindMiniBasketBtnHandler(
614
+ Wick.MiniBasketSliderFE.el.btnCheckout,
615
+ Wick.MiniBasketSliderFE.events.MINI_BASKET_CHECKOUT
616
+ );
617
+
618
+ Wick.MiniBasketSliderFE.bindMiniBasketBtnHandler(
619
+ Wick.MiniBasketSliderFE.el.btnViewBasket,
620
+ Wick.MiniBasketSliderFE.events.MINI_BASKET_VIEW_BASKET
621
+ );
622
+ },
623
+ };
565
624
 
566
625
  $(document).ready(function () {
567
- const $minicartBtn = $('.header-minicart .header-minicart__btn');
568
- if (!$minicartBtn.length) return;
626
+ const $minicartBtn = $('.header-minicart .header-minicart__btn');
627
+ if (!$minicartBtn.length) return;
569
628
 
570
- if (Wick.MiniBasketSliderFE.shouldReloadPage()) {
571
- $minicartBtn.on('click', () => window.location.reload());
572
- return;
573
- }
629
+ if (Wick.MiniBasketSliderFE.shouldReloadPage()) {
630
+ $minicartBtn.on('click', () => window.location.reload());
631
+ return;
632
+ }
574
633
 
575
- $minicartBtn.on('click', () => Wick.MiniBasketSliderFE.openMiniBasket());
634
+ $minicartBtn.on('click', () => Wick.MiniBasketSliderFE.openMiniBasket());
576
635
 
577
- Wick.MiniBasketSliderFE.appendMiniBasketWrap();
578
- Wick.MiniBasketSliderFE.initPopupSlider();
579
- Wick.MiniBasketSliderFE.init();
636
+ Wick.MiniBasketSliderFE.appendMiniBasketWrap();
637
+ Wick.MiniBasketSliderFE.initPopupSlider();
638
+ Wick.MiniBasketSliderFE.init();
580
639
  });