wickes-css2 2.107.0-ripple.2 → 2.107.0-ripple.21

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 (307) hide show
  1. package/build/css/category-main.css +1 -1
  2. package/build/css/components/card-product-banner.css +1 -1
  3. package/build/css/components/checkout-chip.css +1 -1
  4. package/build/css/components/checkout-payment-details-v2.css +1 -1
  5. package/build/css/components/price-block-v2-critical.css +1 -1
  6. package/build/css/components/price-block-v2.css +1 -1
  7. package/build/css/components/special-opening-schedule-v2.css +1 -1
  8. package/build/css/components/special-opening-schedule.css +1 -1
  9. package/build/css/emulation.css +1 -1
  10. package/build/css/homepage-main.css +1 -1
  11. package/build/css/kitchen-plp-main.css +1 -1
  12. package/build/css/main.css +1 -1
  13. package/build/css/my-account-main-v2.css +1 -1
  14. package/build/css/my-account-main.css +1 -1
  15. package/build/css/pages/checkout-new.css +1 -1
  16. package/build/css/pages/my-account-v2.css +1 -1
  17. package/build/css/pages/page_checkout_delivery-new.css +1 -1
  18. package/build/css/pages/page_merged-basket.css +1 -1
  19. package/build/css/pages/page_personal-details.css +1 -1
  20. package/build/css/pages/page_product-details-v2-critical.css +1 -1
  21. package/build/css/pages/page_product-details-v2.css +1 -1
  22. package/build/css/pages/page_product-details.css +1 -1
  23. package/build/css/pages/page_products-list-combined.css +1 -1
  24. package/build/css/pages/page_products-list.css +1 -1
  25. package/build/css/pages/page_shopping-cart-v2.css +1 -1
  26. package/build/css/pages/page_store-locator-details.css +1 -1
  27. package/build/css/pages/page_store-locator.css +1 -1
  28. package/build/css/pdp-main-before-combine.css +1 -1
  29. package/build/css/pdp-main-critical.css +1 -1
  30. package/build/css/pdp-main-non-critical.css +1 -1
  31. package/build/css/pdp-main.css +1 -1
  32. package/build/css/plp-main.css +1 -1
  33. package/build/css/store-locator-main.css +1 -1
  34. package/build/js/account-hub.min.js +1 -1
  35. package/build/js/basket.min.js +2 -2
  36. package/build/js/bloomreach-widget.min.js +1 -0
  37. package/build/js/bundle.min.js +1 -1
  38. package/build/js/checkout.min.js +2 -2
  39. package/build/js/components/general/accordion.js +69 -0
  40. package/build/js/components/general/back-to-top.js +45 -0
  41. package/build/js/components/general/backdrop.js +23 -0
  42. package/build/js/components/general/cart-slider.js +36 -0
  43. package/build/js/components/general/clamp-content.js +95 -0
  44. package/build/js/components/general/clamp.js +216 -0
  45. package/build/js/components/general/clear-input.js +33 -0
  46. package/build/js/components/general/cookie-chat-back.js +51 -0
  47. package/build/js/components/general/cookies-policy.js +9 -0
  48. package/build/js/components/general/create-popup-slider.js +194 -0
  49. package/build/js/components/general/device-type.js +6 -0
  50. package/build/js/components/general/footer.js +67 -0
  51. package/build/js/components/general/handleAccordion.js +35 -0
  52. package/build/js/components/general/image-accordion.js +54 -0
  53. package/build/js/components/general/is-trade-pro.js +38 -0
  54. package/build/js/components/general/main-nav.js +16 -0
  55. package/build/js/components/general/main-navigation.js +275 -0
  56. package/build/js/components/general/notification.js +70 -0
  57. package/build/js/components/general/offer-banner.js +74 -0
  58. package/build/js/components/general/scroll-disable.js +54 -0
  59. package/build/js/components/general/search.js +43 -0
  60. package/build/js/components/general/snack-bar.js +160 -0
  61. package/build/js/components/general/sticky_header.js +62 -0
  62. package/build/js/components/general/switchVat.js +161 -0
  63. package/build/js/components/general/text-clamp.js +102 -0
  64. package/build/js/components/general/tooltips.js +8 -0
  65. package/build/js/components/general/validation.js +48 -0
  66. package/build/js/emulation.min.js +3377 -164
  67. package/build/js/general.bundle.min.js +1 -1
  68. package/build/js/gift-cards.min.js +1 -1
  69. package/build/js/kitchen/kitchen-plp.min.js +1 -1
  70. package/build/js/merged-checkout.min.js +2 -2
  71. package/build/js/mini-basket-slider.min.js +1 -1
  72. package/build/js/package-bulk-add.min.js +1 -0
  73. package/build/js/page/basket/mini-basket-total.js +17 -2
  74. package/build/js/page/bloomreach-widget.js +1148 -0
  75. package/build/js/page/checkout-payment-details.js +12 -1
  76. package/build/js/page/checkout.js +1 -1
  77. package/build/js/page/components/notify-me.js +99 -0
  78. package/build/js/page/components/order-summary.js +35 -0
  79. package/build/js/page/plp-load-more.js +81 -66
  80. package/build/js/page/ripple/bulk-add.js +63 -0
  81. package/build/js/page/ripple/package-bulk-add.js +43 -0
  82. package/build/js/page/ripple/postcode-checker.js +83 -0
  83. package/build/js/page/ripple/thumb-gallery.js +168 -0
  84. package/build/js/page/utils/create-count-stepper.js +30 -9
  85. package/build/js/page/utils/create-loading-button.js +37 -0
  86. package/build/js/page/utils/create-toast.js +79 -0
  87. package/build/js/page/utils/custom-dropdown.js +80 -0
  88. package/build/js/pdp-count-stepper.min.js +1 -1
  89. package/build/js/pdp.bundle.min.js +2 -1
  90. package/build/js/plp.bundle.min.js +1 -1
  91. package/build/js/postcode-checker.min.js +1 -0
  92. package/build/js/project-list.min.js +1 -1
  93. package/build/js/saving-shopping-list.min.js +1 -1
  94. package/build/js/wickes-dc.js +1 -0
  95. package/package.json +1 -4
  96. package/src/badges-ripple.html +120 -0
  97. package/src/badges.html +9 -18
  98. package/src/components/base/button.hbs +23 -5
  99. package/src/components/bloomreach/complete-card-dropdown.hbs +47 -0
  100. package/src/components/bloomreach/complete-card-skeleton.hbs +19 -0
  101. package/src/components/bloomreach/complete-card.hbs +138 -0
  102. package/src/components/bloomreach/complete-divider.hbs +3 -0
  103. package/src/components/bloomreach/complete-summary-skeleton.hbs +12 -0
  104. package/src/components/bloomreach/complete-summary.hbs +43 -0
  105. package/src/components/bloomreach/complete-wrapper.hbs +1 -0
  106. package/src/components/bloomreach/complete-your-project.hbs +21 -0
  107. package/src/components/card-store-locator.hbs +70 -33
  108. package/src/components/card_bloomreach_media_banner.hbs +10 -0
  109. package/src/components/card_product_banner_v2.hbs +4 -1
  110. package/src/components/card_sponsor_banner.hbs +4 -1
  111. package/src/components/cart-voucher.hbs +10 -1
  112. package/src/components/checkout_order-summary-new.hbs +11 -2
  113. package/src/components/click-and-collect-modal.hbs +0 -14
  114. package/src/components/date-selection.hbs +1 -1
  115. package/src/components/delivery-types.hbs +11 -3
  116. package/src/components/fulfilment-accordions.hbs +1 -1
  117. package/src/components/gift-cards.hbs +1 -1
  118. package/src/components/injected-content.hbs +6 -1
  119. package/src/components/kitchen/price.hbs +49 -29
  120. package/src/components/kitchen/strip-stickers.hbs +9 -3
  121. package/src/components/modal.hbs +1 -1
  122. package/src/components/modals/notify-me-modal.hbs +76 -0
  123. package/src/components/order-item.hbs +18 -5
  124. package/src/components/order-summary.hbs +2 -2
  125. package/src/components/package-card.hbs +30 -0
  126. package/src/components/pdp-price-actions.hbs +17 -0
  127. package/src/components/postcode-checker.hbs +24 -0
  128. package/src/components/potential-promotion.hbs +12 -3
  129. package/src/components/price-badges.hbs +14 -0
  130. package/src/components/price-block-v2.hbs +91 -31
  131. package/src/components/product-main-info-v2.hbs +2 -0
  132. package/src/components/sponsor-top-banner.hbs +10 -0
  133. package/src/components/suite-includes.hbs +43 -12
  134. package/src/components/suite-product-card.hbs +37 -15
  135. package/src/components/thumb-gallery.hbs +23 -0
  136. package/src/data/data_badges.json +143 -0
  137. package/src/data/data_bathroom-plp.json +814 -0
  138. package/src/data/data_delivery-address-v2.json +1 -1
  139. package/src/data/data_locators.json +441 -135
  140. package/src/data/data_search-results_v2.json +20 -2
  141. package/src/data/data_shopping-cart-v2.json +23 -5
  142. package/src/data/data_spr_injected_content.json +4 -0
  143. package/src/data/data_suite-includes-products.json +73 -2
  144. package/src/elements/checkbox.hbs +8 -1
  145. package/src/js/components/banner-placement-manager.js +25 -9
  146. package/src/js/components/general/accordion.js +25 -2
  147. package/src/js/components/general/cart-slider.js +19 -6
  148. package/src/js/components/package-card.js +69 -0
  149. package/src/js/components/store-locator-cards.js +76 -0
  150. package/src/js/emulation/banner-placement-manager.js +285 -53
  151. package/src/js/emulation/bloomreach-widget-calculations.js +132 -0
  152. package/src/js/emulation/bloomreach-widget-loading.js +11 -0
  153. package/src/js/emulation/checkout-delivery-details.js +28 -25
  154. package/src/js/emulation/custom-slider-emulation.js +1 -1
  155. package/src/js/emulation/date-selection.js +136 -24
  156. package/src/js/emulation/forms.js +12 -0
  157. package/src/js/emulation/gift-cards.js +1 -1
  158. package/src/js/emulation/mini-basket-data.js +3 -3
  159. package/src/js/emulation/mock.js +3112 -4
  160. package/src/js/emulation/notify-me.js +9 -0
  161. package/src/js/emulation/plp-load-more.js +13 -4
  162. package/src/js/emulation/postcode-checker.js +11 -0
  163. package/src/js/emulation/store-locator-load-more.js +69 -0
  164. package/src/js/emulation/switchCalendar.js +12 -8
  165. package/src/js/page/basket/mini-basket-total.js +17 -2
  166. package/src/js/page/bloomreach-widget.js +1148 -0
  167. package/src/js/page/checkout-payment-details.js +12 -1
  168. package/src/js/page/checkout.js +1 -1
  169. package/src/js/page/components/notify-me.js +99 -0
  170. package/src/js/page/components/order-summary.js +35 -0
  171. package/src/js/page/plp-load-more.js +81 -66
  172. package/src/js/page/ripple/bulk-add.js +63 -0
  173. package/src/js/page/ripple/package-bulk-add.js +43 -0
  174. package/src/js/page/ripple/postcode-checker.js +83 -0
  175. package/src/js/page/ripple/thumb-gallery.js +168 -0
  176. package/src/js/page/utils/create-count-stepper.js +30 -9
  177. package/src/js/page/utils/create-loading-button.js +37 -0
  178. package/src/js/page/utils/create-toast.js +79 -0
  179. package/src/js/page/utils/custom-dropdown.js +80 -0
  180. package/src/page_bathroom-plp-vat.html +81 -0
  181. package/src/page_bathroom-plp-without-load-more.html +83 -0
  182. package/src/page_bathroom-plp.html +98 -0
  183. package/src/page_checkout_next-day-delivery-details.html +2 -2
  184. package/src/page_checkout_payment-details-v2-asm.html +1 -1
  185. package/src/page_checkout_payment-details-v2.html +1 -1
  186. package/src/page_checkout_payment-details_with-card-loader.html +1 -1
  187. package/src/page_checkout_payment-details_with-klarna-loader.html +1 -1
  188. package/src/page_checkout_payment-details_with-loader-v2.html +1 -1
  189. package/src/page_checkout_rapid-delivery-details.html +7 -5
  190. package/src/page_klarna_payment-details_with-klarna.html +1 -1
  191. package/src/page_my-account-installer-carousel.html +131 -0
  192. package/src/page_payment-details-with-billie.html +1 -1
  193. package/src/page_payment-details-with-clearpay.html +1 -1
  194. package/src/page_payment-details-with-gift-card.html +1 -1
  195. package/src/page_payment-details_with_apple-pay.html +1 -1
  196. package/src/page_payment-details_with_google-pay.html +1 -1
  197. package/src/page_plp_bloomreach.html +81 -0
  198. package/src/page_plp_v2.html +6 -0
  199. package/src/page_product-details-banner.html +1 -4
  200. package/src/page_product-details-big-wins-disabled-delivery.html +1 -4
  201. package/src/page_product-details-big-wins-non-registered.html +1 -4
  202. package/src/page_product-details-big-wins-out-nearest.html +1 -4
  203. package/src/page_product-details-big-wins-unhappy.html +1 -4
  204. package/src/page_product-details-big-wins.html +1 -4
  205. package/src/page_product-details-billie.html +1 -4
  206. package/src/page_product-details-bloomreach.html +130 -0
  207. package/src/page_product-details-calculator.html +1 -4
  208. package/src/page_product-details-cashback-v2.html +1 -4
  209. package/src/page_product-details-clearpay.html +1 -4
  210. package/src/page_product-details-cnc-error-notification.html +1 -4
  211. package/src/page_product-details-cnc-success-notification-vat.html +1 -5
  212. package/src/page_product-details-cnc-success-notification.html +1 -4
  213. package/src/page_product-details-default-store.html +1 -4
  214. package/src/page_product-details-energy-efficiency.html +1 -4
  215. package/src/page_product-details-flooring-with-pr-placeholder.html +1 -4
  216. package/src/page_product-details-flooring.html +1 -4
  217. package/src/page_product-details-gallery-actual.html +1 -4
  218. package/src/page_product-details-mfe-calculator.html +10 -7
  219. package/src/page_product-details-minimum-v2.html +0 -1
  220. package/src/page_product-details-mtm-doors.html +1 -4
  221. package/src/page_product-details-only-clearpay.html +1 -4
  222. package/src/page_product-details-paint-mixing.html +1 -4
  223. package/src/page_product-details-ripple-gallery.html +119 -0
  224. package/src/page_product-details-saved-pl.html +1 -4
  225. package/src/page_product-details-suite-includes-banners.html +139 -0
  226. package/src/page_product-details-suite-includes-vat.html +126 -0
  227. package/src/page_product-details-suite-includes.html +32 -20
  228. package/src/page_product-details-tile-steps-klarna-widget-with-method-ids.html +1 -4
  229. package/src/page_product-details-tile-steps-logout.html +1 -4
  230. package/src/page_product-details-tile-steps-no-new-project-list.html +1 -4
  231. package/src/page_product-details-tile-steps-with-klarna.html +1 -4
  232. package/src/page_product-details-tile-steps.html +1 -4
  233. package/src/page_product-details-v2.html +1 -4
  234. package/src/page_product-details-vat.html +1 -4
  235. package/src/page_product-details-wisdom-mcfc-registered.html +1 -4
  236. package/src/page_product-details-wisdom-mcfc.html +1 -4
  237. package/src/page_product-details-wisdom-oos-registered.html +1 -4
  238. package/src/page_product-details-wisdom-oos.html +1 -4
  239. package/src/page_product-details-wisdom-registered.html +1 -4
  240. package/src/page_product-details-wisdom.html +1 -4
  241. package/src/page_product-details-with-favourite.html +1 -4
  242. package/src/page_product-details-with-global-search-v2.html +8 -4
  243. package/src/page_product-details_no-previous-default.html +1 -4
  244. package/src/page_shopping-cart-v2-vat.html +2 -1
  245. package/src/page_store-locator-list.html +17 -28
  246. package/src/page_track-my-order-result.html +1 -0
  247. package/src/partials/scripts.hbs +1 -0
  248. package/src/scss/common/_CTAs.scss +7 -3
  249. package/src/scss/common/_common.scss +1 -0
  250. package/src/scss/common/_elements.scss +13 -1
  251. package/src/scss/common/_loading-button.scss +49 -0
  252. package/src/scss/components/_card-store-locator.scss +139 -32
  253. package/src/scss/components/_custom-slider.scss +18 -0
  254. package/src/scss/components/_date-selection-add-new-styles.scss +43 -1
  255. package/src/scss/components/_image-accordion.scss +5 -2
  256. package/src/scss/components/_kitchen-card.scss +5 -4
  257. package/src/scss/components/_notifications.scss +86 -5
  258. package/src/scss/components/_notify-me-modal.scss +139 -0
  259. package/src/scss/components/_order-summary.scss +25 -12
  260. package/src/scss/components/_package-card.scss +63 -0
  261. package/src/scss/components/_package-plp.scss +88 -0
  262. package/src/scss/components/_pdp-action-v2-critical.scss +12 -0
  263. package/src/scss/components/_pdp-action-v2.scss +12 -0
  264. package/src/scss/components/_postcode-checker.scss +115 -0
  265. package/src/scss/components/_price-badges-critical.scss +10 -1
  266. package/src/scss/components/_price-badges.scss +10 -2
  267. package/src/scss/components/_price-block-critical.scss +11 -3
  268. package/src/scss/components/_price-block.scss +15 -4
  269. package/src/scss/components/_suite-includes.scss +29 -26
  270. package/src/scss/components/_suite-product-card.scss +33 -23
  271. package/src/scss/components/_thumb-gallery-critical.scss +34 -0
  272. package/src/scss/components/_thumb-gallery.scss +192 -0
  273. package/src/scss/components/bloomreach/_bloomreach.scss +3 -0
  274. package/src/scss/components/bloomreach/_complete-card-dropdown.scss +174 -0
  275. package/src/scss/components/bloomreach/_complete-card.scss +402 -0
  276. package/src/scss/components/bloomreach/_complete-your-project.scss +207 -0
  277. package/src/scss/components/card-product-banner.scss +35 -27
  278. package/src/scss/components/checkout-chip.scss +1 -0
  279. package/src/scss/components/checkout-payment-details-v2.scss +12 -0
  280. package/src/scss/components/kitchen/_price.scss +10 -0
  281. package/src/scss/components/kitchen/_strip-stickers.scss +46 -0
  282. package/src/scss/components/my-account/_clipboard-code.scss +4 -0
  283. package/src/scss/components/price-block-v2-critical.scss +54 -1
  284. package/src/scss/components/price-block-v2.scss +54 -3
  285. package/src/scss/components/special-opening-schedule-v2.scss +2 -6
  286. package/src/scss/components/special-opening-schedule.scss +17 -4
  287. package/src/scss/emulation.scss +0 -6
  288. package/src/scss/helpers/_CTAs.scss +15 -5
  289. package/src/scss/helpers/_variables.scss +1 -0
  290. package/src/scss/pages/page_checkout_delivery-new.scss +36 -0
  291. package/src/scss/pages/page_product-details-v2-critical.scss +217 -111
  292. package/src/scss/pages/page_product-details-v2.scss +200 -109
  293. package/src/scss/pages/page_product-details.scss +0 -2
  294. package/src/scss/pages/page_products-list-combined.scss +8 -1
  295. package/src/scss/pages/page_products-list.scss +8 -1
  296. package/src/scss/pages/page_shopping-cart-v2.scss +34 -10
  297. package/src/scss/pages/page_store-locator.scss +48 -26
  298. package/src/scss/pdp-main-critical.scss +1 -1
  299. package/src/scss/pdp-main.scss +5 -1
  300. package/src/scss/plp-main.scss +5 -0
  301. package/src/scss/store-locator-main.scss +15 -1
  302. package/src/sitemap.html +15 -0
  303. package/build/css/components/kitchen/strip-stickers.css +0 -1
  304. package/build/css/components/strip-stickers.css +0 -1
  305. package/src/js/emulation/store-locator-list.js +0 -19
  306. package/src/scss/components/kitchen/strip-stickers.scss +0 -18
  307. package/src/scss/components/strip-stickers.scss +0 -18
@@ -13,6 +13,7 @@ Wick.CheckoutPaymentDetails = (function () {
13
13
  const elements = {
14
14
  $billieRepaymentTerms: $('.js-billie-repayment-terms'),
15
15
  $billieInfoBlock: $('.checkout-payment-details__billie'),
16
+ $billieInfo: $('.checkout-payment-details__billie .billie-info'),
16
17
  $wrapperPaymentInput: $('.checkout-payment-details__row'),
17
18
  paymentInputName: '[name=payment-method]',
18
19
  $cardDetails: $('.checkout-payment-details__card-details'),
@@ -103,7 +104,7 @@ Wick.CheckoutPaymentDetails = (function () {
103
104
 
104
105
  function setBillieStepVisibility(isReady) {
105
106
  setBillingDetailsRowVisibility(isReady);
106
- elements.$billieInfoBlock.toggle(isReady);
107
+ elements.$billieInfo.toggleClass(elements.hiddenClass, !isReady);
107
108
  }
108
109
 
109
110
  function resetBillieRepaymentSelection() {
@@ -239,6 +240,12 @@ Wick.CheckoutPaymentDetails = (function () {
239
240
  });
240
241
  }
241
242
 
243
+ function forceReflow($element) {
244
+ if (!$element.length) return;
245
+ void $element[0].offsetHeight;
246
+ $(window).trigger('resize');
247
+ }
248
+
242
249
  function init() {
243
250
  const paymentMethods = getPaymentMethods();
244
251
  initBillieBusinessTypeToggle();
@@ -248,6 +255,10 @@ Wick.CheckoutPaymentDetails = (function () {
248
255
  const currentMethod = $(elements.paymentInputName + ':checked').val();
249
256
  if (currentMethod !== 'billie') return;
250
257
 
258
+ requestAnimationFrame(() => {
259
+ forceReflow(elements.$billieInfoBlock);
260
+ });
261
+
251
262
  const hasSelection = $('input[name="repaymentTerms"]:checked').length > 0;
252
263
  setBillieStepVisibility(hasSelection);
253
264
 
@@ -1,4 +1,4 @@
1
- import {checkVoucherCode, voucherRemove} from './components/voucher';
1
+ import { checkVoucherCode, voucherRemove } from './components/voucher';
2
2
 
3
3
  var Wick = window.Wick || {};
4
4
  Wick.Checkout = {
@@ -0,0 +1,99 @@
1
+ import { showValidationErrors, clearValidationErrors, isValidEmail } from '../utils/validation';
2
+
3
+ var Wick = window.Wick || {};
4
+
5
+ Wick.NotifyMeSubscription = {
6
+ NOTIFY_ME_EVENT: 'NOTIFY_ME',
7
+ HIDDEN_CLASS_NAME: 'd-none',
8
+ el: {
9
+ notifyMePopup: '#modal-notify-me',
10
+ notifyMeBtn: '.btn--notify-open',
11
+
12
+ form: '#modal-notify-me .notify-me-form',
13
+ emailInput: '#modal-notify-me #notify-me-email',
14
+ stateForm: '#modal-notify-me [data-notify-state="form"]',
15
+ stateSuccess: '#modal-notify-me [data-notify-state="success"]',
16
+ headerForm: '#modal-notify-me [data-notify-header="form"]',
17
+ headerSuccess: '#modal-notify-me [data-notify-header="success"]',
18
+ productId: '#product-code-val',
19
+ },
20
+ defaultErrorMessage: 'Something went wrong',
21
+ invalidEmailMessage: 'Please enter a valid email address',
22
+ showCustomModal() {
23
+ $(Wick.NotifyMeSubscription.el.notifyMePopup).modal('show');
24
+ },
25
+ getEmail() {
26
+ return ($(Wick.NotifyMeSubscription.el.emailInput).val() || '').toString().trim();
27
+ },
28
+ isEmailValid() {
29
+ const email = Wick.NotifyMeSubscription.getEmail();
30
+
31
+ return isValidEmail(email);
32
+ },
33
+ showFormState() {
34
+ $(Wick.NotifyMeSubscription.el.stateSuccess).addClass(
35
+ Wick.NotifyMeSubscription.HIDDEN_CLASS_NAME
36
+ );
37
+ $(Wick.NotifyMeSubscription.el.stateForm).removeClass(
38
+ Wick.NotifyMeSubscription.HIDDEN_CLASS_NAME
39
+ );
40
+
41
+ $(Wick.NotifyMeSubscription.el.headerSuccess).addClass(
42
+ Wick.NotifyMeSubscription.HIDDEN_CLASS_NAME
43
+ );
44
+ $(Wick.NotifyMeSubscription.el.headerForm).removeClass(
45
+ Wick.NotifyMeSubscription.HIDDEN_CLASS_NAME
46
+ );
47
+ },
48
+ showSuccessState() {
49
+ $(Wick.NotifyMeSubscription.el.stateForm).addClass(
50
+ Wick.NotifyMeSubscription.HIDDEN_CLASS_NAME
51
+ );
52
+ $(Wick.NotifyMeSubscription.el.stateSuccess).removeClass(
53
+ Wick.NotifyMeSubscription.HIDDEN_CLASS_NAME
54
+ );
55
+
56
+ $(Wick.NotifyMeSubscription.el.headerForm).addClass(
57
+ Wick.NotifyMeSubscription.HIDDEN_CLASS_NAME
58
+ );
59
+ $(Wick.NotifyMeSubscription.el.headerSuccess).removeClass(
60
+ Wick.NotifyMeSubscription.HIDDEN_CLASS_NAME
61
+ );
62
+ },
63
+ resetValidation() {
64
+ clearValidationErrors(Wick.NotifyMeSubscription.el.form);
65
+ },
66
+ validateForm() {
67
+ Wick.NotifyMeSubscription.resetValidation();
68
+
69
+ if (!Wick.NotifyMeSubscription.isEmailValid()) {
70
+ showValidationErrors(
71
+ Wick.NotifyMeSubscription.el.form,
72
+ Wick.NotifyMeSubscription.invalidEmailMessage
73
+ );
74
+ return false;
75
+ }
76
+
77
+ return true;
78
+ },
79
+ showError(err = {}) {
80
+ const msg = err.errMsg || err.errorMessage || Wick.NotifyMeSubscription.defaultErrorMessage;
81
+
82
+ showValidationErrors(Wick.NotifyMeSubscription.el.form, msg);
83
+ },
84
+ init() {
85
+ $(document).on('click', Wick.NotifyMeSubscription.el.notifyMeBtn, function (e) {
86
+ e.preventDefault();
87
+ Wick.NotifyMeSubscription.showCustomModal();
88
+ });
89
+
90
+ $(Wick.NotifyMeSubscription.el.notifyMePopup).on('hidden.bs.modal', function () {
91
+ Wick.NotifyMeSubscription.showFormState();
92
+ clearValidationErrors(Wick.NotifyMeSubscription.el.form);
93
+ });
94
+ },
95
+ };
96
+
97
+ $(document).ready(function () {
98
+ Wick.NotifyMeSubscription.init();
99
+ });
@@ -5,6 +5,7 @@ const osEl = {
5
5
  checkoutWidgetDetailsDiscount: '.checkout-widget__details-discount',
6
6
  checkoutWidgetDetails: '.checkout-widget__details',
7
7
  delivery: '.checkout-widget__item-delivery',
8
+ deliveryCostMessage: '.checkout-widget__item-delivery-cost-message',
8
9
  cc: '.checkout-widget__item-cc',
9
10
  itemFree: '.checkout-widget__item-free',
10
11
  itemDeficit: '.checkout-widget__item-deficit',
@@ -26,6 +27,22 @@ export function updateOrderSummary(data, equalMap, isVoucher) {
26
27
  }
27
28
  }
28
29
 
30
+ if (obj.item === osEl.delivery) {
31
+ $(osEl.delivery).each(function () {
32
+ if (
33
+ !$(this).siblings(osEl.deliveryCostMessage).length &&
34
+ !$(this).closest('[data-hide-delivery-cost-message]').length
35
+ ) {
36
+ $(this).after(`
37
+ <li class="checkout-widget__item checkout-widget__item-delivery-cost-message">
38
+ <span class="checkout-widget__item-value" id="order-delivery-cost-message">
39
+ Final delivery cost confirmed at checkout
40
+ </span>
41
+ </li>`);
42
+ }
43
+ });
44
+ }
45
+
29
46
  $(obj.item).find(obj.itemValue).text(obj.dataValue);
30
47
  if (isVoucher ? obj.dataValue : obj.value && obj.dataValue) {
31
48
  $(obj.item).find(obj.itemValue).show();
@@ -64,20 +81,37 @@ export function updateOrderSummary(data, equalMap, isVoucher) {
64
81
  }
65
82
 
66
83
  function createCheckoutWidgetItem(obj) {
84
+ const isDelivery = obj.item === osEl.delivery;
85
+ const hideMessage = $(osEl.checkoutWidgetDetails).closest(
86
+ '[data-hide-delivery-cost-message]'
87
+ ).length;
88
+ const costMessageExists = $(osEl.deliveryCostMessage).length > 0;
67
89
  return `
68
90
  <li class="checkout-widget__item ${obj.item.substr(1)}">
69
91
  <span>${obj.title}</span>
70
92
  <span class="checkout-widget__item-value">${obj.dataValue}</span>
71
93
  </li>
94
+ ${
95
+ isDelivery && !hideMessage && !costMessageExists
96
+ ? `
97
+ <li class="checkout-widget__item checkout-widget__item-delivery-cost-message">
98
+ <span class="checkout-widget__item-value" id="order-delivery-cost-message">
99
+ Final delivery cost confirmed at checkout
100
+ </span>
101
+ </li>`
102
+ : ''
103
+ }
72
104
  `;
73
105
  }
74
106
 
75
107
  function hideUnusedDeliveryTypeCost(data, isVoucher) {
76
108
  $(osEl.delivery).show();
109
+ $(osEl.deliveryCostMessage).show();
77
110
  $(osEl.cc).show();
78
111
  if (isVoucher) {
79
112
  if ('deliveryOrder' in data && data.deliveryOrder === false) {
80
113
  $(osEl.delivery).hide();
114
+ $(osEl.deliveryCostMessage).hide();
81
115
  }
82
116
 
83
117
  if ('clickAndCollectOrder' in data && data.clickAndCollectOrder === false) {
@@ -86,6 +120,7 @@ function hideUnusedDeliveryTypeCost(data, isVoucher) {
86
120
  } else {
87
121
  if (data.clickAndCollectOnly) {
88
122
  $(osEl.delivery).hide();
123
+ $(osEl.deliveryCostMessage).hide();
89
124
  } else if (data.deliveryItemsQuantity > 0 && data.pickupItemsQuantity === 0) {
90
125
  $(osEl.cc).hide();
91
126
  }
@@ -1,77 +1,92 @@
1
- import {createEvent} from "./utils/create-event";
2
- import {appendLoader, showLoader, hideLoader} from "./utils/loader";
1
+ import { createEvent } from './utils/create-event';
2
+ import { appendLoader, showLoader, hideLoader } from './utils/loader';
3
3
 
4
4
  var Wick = window.Wick || {};
5
5
 
6
6
  Wick.PLPLoadMore = {
7
- PLP_LOAD_MORE_EVENT: 'loadMore',
8
- HIDDEN_CLASS_NAME: 'd-none',
9
- initialPageNumber: 0,
10
- el: {
11
- $loadMoreBtn: $('.btn-load-more'),
12
- loader: '.loader-wrapper',
13
- $sortOptions: $('#sort_form1'),
14
- productsList: '.products-list'
15
- },
16
- numberOfPagesPLP: $('#numberOfPagesPLP').val(),
17
- loaderPayload: {
18
- wrapper: 'body',
19
- hidden: true,
20
- modifier: 'basket-loader',
21
- },
22
- loadMore () {
23
- showLoader(Wick.PLPLoadMore.el.loader);
7
+ PLP_LOAD_MORE_EVENT: 'loadMore',
8
+ HIDDEN_CLASS_NAME: 'd-none',
9
+ MAX_PRODUCTS_PER_PAGE: 32,
10
+ initialPageNumber: 0,
11
+ el: {
12
+ $loadMoreBtn: $('.btn-load-more'),
13
+ loader: '.loader-wrapper',
14
+ $sortOptions: $('#sort_form1'),
15
+ productsList: $('.package-plp__cards').length ? '.package-plp__cards' : '.products-list',
16
+ $packageContent: $('.package-plp__content'),
17
+ },
18
+ numberOfPagesPLP: $('#numberOfPagesPLP').val(),
19
+ loaderPayload: {
20
+ wrapper: 'body',
21
+ hidden: true,
22
+ modifier: 'basket-loader',
23
+ },
24
+ loadMore() {
25
+ showLoader(Wick.PLPLoadMore.el.loader);
24
26
 
25
- return new Promise((resolve, reject) => {
26
- const eventDetail = {resolve, reject};
27
- const payload = {
28
- currentPage: ++Wick.PLPLoadMore.initialPageNumber,
29
- sort: Wick.PLPLoadMore.el.$sortOptions.val() || '',
30
- };
31
- const event = createEvent(Wick.PLPLoadMore.PLP_LOAD_MORE_EVENT, payload, eventDetail);
32
- window.dispatchEvent(event);
33
- })
34
- .then((response) => {
35
- if (!response.length) {
36
- return;
27
+ return new Promise((resolve, reject) => {
28
+ const eventDetail = { resolve, reject };
29
+ const payload = {
30
+ currentPage: ++Wick.PLPLoadMore.initialPageNumber,
31
+ sort: Wick.PLPLoadMore.el.$sortOptions.val() || '',
32
+ isRippleData: Wick.PLPLoadMore.el.$packageContent.length,
33
+ };
34
+ const event = createEvent(Wick.PLPLoadMore.PLP_LOAD_MORE_EVENT, payload, eventDetail);
35
+ window.dispatchEvent(event);
36
+ })
37
+ .then((response) => {
38
+ if (!response.length) {
39
+ return;
40
+ }
41
+
42
+ Wick.PLPLoadMore.showNewCards(response);
43
+ Wick.PLPLoadMore.toggleLoadMoreBtn();
44
+ Wick.VatToggle.reapplyDisplayClass();
45
+ })
46
+ .finally(() => {
47
+ hideLoader(Wick.PLPLoadMore.el.loader);
48
+ Wick.PLPLoadMore.el.$loadMoreBtn.blur();
49
+ Wick.BannerPlacementManager.checkProductsInColumn();
50
+ $(window).trigger('productBannerPositionChanged');
51
+ Wick.EnergyEfficiency.drawEnergyLabels();
52
+ Wick.PLP?.bindEvents();
53
+ });
54
+ },
55
+ showNewCards(newProductsHtml) {
56
+ const $newProductsHtml = $(newProductsHtml);
57
+ $(Wick.PLPLoadMore.el.productsList).append($newProductsHtml);
58
+ Wick.PackageCards.alignGridRows();
59
+ },
60
+ toggleLoadMoreBtn(checkCardsAmount = false) {
61
+ const isLastPage =
62
+ Wick.PLPLoadMore.initialPageNumber + 1 >= +Wick.PLPLoadMore.numberOfPagesPLP;
63
+ let shouldHide = isLastPage;
64
+
65
+ if (checkCardsAmount) {
66
+ const cardsCount = $(Wick.PLPLoadMore.el.productsList).children().length;
67
+ shouldHide = cardsCount <= Wick.PLPLoadMore.MAX_PRODUCTS_PER_PAGE && isLastPage;
37
68
  }
38
69
 
39
- Wick.PLPLoadMore.showNewCards(response);
40
- Wick.PLPLoadMore.toggleLoadMoreBtn();
41
- Wick.VatToggle.reapplyDisplayClass();
42
- })
43
- .finally(() => {
44
- hideLoader(Wick.PLPLoadMore.el.loader);
45
- Wick.PLPLoadMore.el.$loadMoreBtn.blur();
46
- Wick.BannerPlacementManager.checkProductsInColumn();
47
- $(window).trigger('productBannerPositionChanged');
48
- Wick.EnergyEfficiency.drawEnergyLabels();
49
- Wick.PLP?.bindEvents();
50
- })
51
- },
52
- showNewCards (newProductsHtml) {
53
- const $newProductsHtml = $(newProductsHtml);
54
- $(Wick.PLPLoadMore.el.productsList).append($newProductsHtml);
55
- },
56
- toggleLoadMoreBtn() {
57
- if (Wick.PLPLoadMore.initialPageNumber + 1 >= +Wick.PLPLoadMore.numberOfPagesPLP) {
58
- Wick.PLPLoadMore.el.$loadMoreBtn.addClass(Wick.PLPLoadMore.HIDDEN_CLASS_NAME);
59
- }
60
- },
61
- init () {
62
- if (!Wick.PLPLoadMore.el.$loadMoreBtn.length) {
63
- return;
64
- }
65
- appendLoader(Wick.PLPLoadMore.loaderPayload);
70
+ Wick.PLPLoadMore.el.$loadMoreBtn.toggleClass(
71
+ Wick.PLPLoadMore.HIDDEN_CLASS_NAME,
72
+ shouldHide
73
+ );
74
+ },
75
+ init() {
76
+ if (!Wick.PLPLoadMore.el.$loadMoreBtn.length) {
77
+ return;
78
+ }
66
79
 
67
- Wick.PLPLoadMore.el.$loadMoreBtn.on('click', Wick.PLPLoadMore.loadMore);
68
- }
69
- }
80
+ if (Wick.PLPLoadMore.el.$packageContent.length) {
81
+ Wick.PLPLoadMore.toggleLoadMoreBtn(true);
82
+ }
70
83
 
71
- $(document).ready(function () {
72
- if (!Wick.PLPLoadMore.el.$loadMoreBtn.length) {
73
- return;
74
- }
84
+ appendLoader(Wick.PLPLoadMore.loaderPayload);
85
+
86
+ Wick.PLPLoadMore.el.$loadMoreBtn.on('click', Wick.PLPLoadMore.loadMore);
87
+ },
88
+ };
75
89
 
76
- Wick.PLPLoadMore.init();
90
+ $(document).ready(function () {
91
+ Wick.PLPLoadMore.init();
77
92
  });
@@ -0,0 +1,63 @@
1
+ import { createToast } from '../utils/create-toast';
2
+ import { createLoadingButton } from '../utils/create-loading-button';
3
+ import { createEvent } from '../utils/create-event';
4
+ const notificationTemplate = require('../../../elements/notifications.hbs');
5
+
6
+ const BULK_ADD_EVENT = 'bulkAddToCart';
7
+ const QUANTITY = 1;
8
+
9
+ const bulkAddFailedResponse = {
10
+ bulkAddToCartData: {
11
+ messageType: 'error',
12
+ messageText: 'Product was not added to basket',
13
+ },
14
+ };
15
+
16
+ export function dispatchWindowEvent(eventName, payload) {
17
+ return new Promise(function (resolve, reject) {
18
+ window.dispatchEvent(createEvent(eventName, payload, { resolve, reject }));
19
+ });
20
+ }
21
+
22
+ export function createBulkAddHelper({ productCodeSelector }) {
23
+ let toast = null;
24
+ let loadingButton = null;
25
+
26
+ function getProductCode() {
27
+ return $(productCodeSelector).val();
28
+ }
29
+
30
+ function addProductToCart() {
31
+ const payload = [{ productCode: getProductCode(), quantity: QUANTITY }];
32
+
33
+ return dispatchWindowEvent(BULK_ADD_EVENT, payload);
34
+ }
35
+
36
+ function showBulkAddResult(response) {
37
+ const bulkData = response && response.bulkAddToCartData;
38
+
39
+ if (bulkData) {
40
+ toast.show({ type: bulkData.messageType, text: bulkData.messageText });
41
+ }
42
+ }
43
+
44
+ function init() {
45
+ if (!toast) {
46
+ toast = createToast({ template: notificationTemplate });
47
+ }
48
+ if (!loadingButton) {
49
+ loadingButton = createLoadingButton();
50
+ }
51
+ }
52
+
53
+ return {
54
+ init,
55
+ getProductCode,
56
+ addProductToCart,
57
+ showBulkAddResult,
58
+ showBulkAddFailed: () => showBulkAddResult(bulkAddFailedResponse),
59
+ get loadingButton() {
60
+ return loadingButton;
61
+ },
62
+ };
63
+ }
@@ -0,0 +1,43 @@
1
+ import { createBulkAddHelper } from './bulk-add';
2
+
3
+ var Wick = window.Wick || {};
4
+
5
+ Wick.PackageBulkAdd = (function () {
6
+ const selectors = {
7
+ button: '.package-bulk-add',
8
+ productCodeInput: '.pdp-price input[name=productCodePost]',
9
+ };
10
+
11
+ const bulkAdd = createBulkAddHelper({ productCodeSelector: selectors.productCodeInput });
12
+
13
+ async function handleButtonClick(e) {
14
+ e.preventDefault();
15
+
16
+ const $buttons = $(selectors.button);
17
+
18
+ if (bulkAdd.loadingButton.isLoading($buttons)) {
19
+ return;
20
+ }
21
+
22
+ bulkAdd.loadingButton.start($buttons);
23
+
24
+ try {
25
+ bulkAdd.showBulkAddResult(await bulkAdd.addProductToCart());
26
+ Wick.MiniBasketSliderFE.isMiniBasketLoaded = false;
27
+ } catch {
28
+ bulkAdd.showBulkAddFailed();
29
+ } finally {
30
+ bulkAdd.loadingButton.stop($buttons);
31
+ }
32
+ }
33
+
34
+ function init() {
35
+ bulkAdd.init();
36
+
37
+ $(selectors.button).on('click', handleButtonClick);
38
+ }
39
+
40
+ return { init };
41
+ })();
42
+
43
+ $(document).ready(Wick.PackageBulkAdd.init);
@@ -0,0 +1,83 @@
1
+ import { isValidPostcodeField } from '../utils/validation';
2
+ import { createBulkAddHelper, dispatchWindowEvent } from './bulk-add';
3
+
4
+ var Wick = window.Wick || {};
5
+
6
+ Wick.PostcodeChecker = (function () {
7
+ const POSTCODE_CHECK_AVAILABILITY_EVENT = 'postcodeCheckAviability';
8
+ const QUANTITY = 1;
9
+
10
+ const selectors = {
11
+ root: '.postcode-checker',
12
+ input: '.postcode-checker__input',
13
+ button: '.postcode-checker__button',
14
+ productCodeInput: '.pdp-price input[name=productCodePost]',
15
+ };
16
+
17
+ const modifiers = {
18
+ hasError: 'postcode-checker--error',
19
+ };
20
+
21
+ const bulkAdd = createBulkAddHelper({ productCodeSelector: selectors.productCodeInput });
22
+
23
+ function checkPostcodeAvailability(postcode) {
24
+ const payload = { postcode, productCode: bulkAdd.getProductCode(), quantity: QUANTITY };
25
+
26
+ return dispatchWindowEvent(POSTCODE_CHECK_AVAILABILITY_EVENT, payload);
27
+ }
28
+
29
+ async function bulkAddForPostcode(postcode) {
30
+ try {
31
+ await checkPostcodeAvailability(postcode);
32
+ bulkAdd.showBulkAddResult(await bulkAdd.addProductToCart());
33
+ Wick.MiniBasketSliderFE.isMiniBasketLoaded = false;
34
+ } catch {
35
+ bulkAdd.showBulkAddFailed();
36
+ }
37
+ }
38
+
39
+ function isPostcodeValid($component, $postcodeInput) {
40
+ const isValid = isValidPostcodeField($postcodeInput.val());
41
+ $component.toggleClass(modifiers.hasError, !isValid);
42
+
43
+ return isValid;
44
+ }
45
+
46
+ function handleSubmitClick($component, $postcodeInput, $submitButton) {
47
+ if (
48
+ bulkAdd.loadingButton.isLoading($submitButton) ||
49
+ !isPostcodeValid($component, $postcodeInput)
50
+ ) {
51
+ return;
52
+ }
53
+
54
+ bulkAdd.loadingButton.start($submitButton);
55
+
56
+ const postcode = $postcodeInput.val();
57
+
58
+ bulkAddForPostcode(postcode).finally(function () {
59
+ bulkAdd.loadingButton.stop($submitButton);
60
+ });
61
+ }
62
+
63
+ function init() {
64
+ bulkAdd.init();
65
+
66
+ $(selectors.root).each(function () {
67
+ const $component = $(this);
68
+ const $postcodeInput = $component.find(selectors.input);
69
+ const $submitButton = $component.find(selectors.button);
70
+
71
+ $component.removeClass(modifiers.hasError);
72
+
73
+ $submitButton.on('click', function (e) {
74
+ e.preventDefault();
75
+ handleSubmitClick($component, $postcodeInput, $submitButton);
76
+ });
77
+ });
78
+ }
79
+
80
+ return { init };
81
+ })();
82
+
83
+ $(document).ready(Wick.PostcodeChecker.init);