wickes-css2 2.106.0-develop.1 → 2.106.0-develop.3

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 (45) hide show
  1. package/Readme.md +1 -1
  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/pdp-main-before-combine.css +1 -1
  9. package/build/css/pdp-main-non-critical.css +1 -1
  10. package/build/css/pdp-main.css +1 -1
  11. package/build/css/plp-main.css +1 -1
  12. package/build/css/store-locator-main.css +1 -1
  13. package/build/js/emulation.min.js +61 -20
  14. package/build/js/page/basket-v2.js +5 -5
  15. package/build/js/page/components/billie-modal.js +20 -20
  16. package/build/js/page/count-stepper/pdp-count-stepper.js +29 -0
  17. package/build/js/page/filters/plp-filters.js +2 -2
  18. package/build/js/page/kitchen/colour-swatches.js +152 -152
  19. package/build/js/page/quick-filter.js +106 -103
  20. package/build/js/page/utils/create-count-stepper.js +141 -0
  21. package/build/js/pdp-count-stepper.min.js +1 -0
  22. package/build/js/plp-filters.min.js +1 -1
  23. package/package.json +1 -1
  24. package/src/components/home-movers/form.hbs +1 -1
  25. package/src/components/price-block-v2.hbs +1 -1
  26. package/src/elements/count-button.hbs +10 -0
  27. package/src/js/components/pdp-billie-modal-scroll-reset.js +46 -42
  28. package/src/js/emulation/billie-modal.js +6 -6
  29. package/src/js/emulation/mock.js +88 -21
  30. package/src/js/emulation/validity-emulation.js +33 -0
  31. package/src/js/page/basket-v2.js +5 -5
  32. package/src/js/page/components/billie-modal.js +20 -20
  33. package/src/js/page/count-stepper/pdp-count-stepper.js +29 -0
  34. package/src/js/page/filters/plp-filters.js +2 -2
  35. package/src/js/page/kitchen/colour-swatches.js +152 -152
  36. package/src/js/page/quick-filter.js +106 -103
  37. package/src/js/page/utils/create-count-stepper.js +141 -0
  38. package/src/partials/scripts.hbs +1 -0
  39. package/src/scss/components/_custom-slider.scss +5 -4
  40. package/src/scss/components/_input-counter.scss +65 -0
  41. package/src/scss/components/_quick-filter.scss +32 -10
  42. package/src/scss/components/kitchen/_price-tooltip.scss +3 -2
  43. package/src/scss/components/kitchen/_price.scss +2 -2
  44. package/src/scss/helpers/_variables.scss +1 -1
  45. package/src/scss/pdp-main.scss +1 -0
@@ -0,0 +1,33 @@
1
+ let suppressQuantityReportValidityOnBlur = false;
2
+
3
+ $(document)
4
+ .off('blur.quantityValidation', '#quantity-field')
5
+ .on('blur.quantityValidation', '#quantity-field', function () {
6
+ if (suppressQuantityReportValidityOnBlur) {
7
+ suppressQuantityReportValidityOnBlur = false;
8
+ return;
9
+ }
10
+
11
+ this.reportValidity();
12
+ });
13
+
14
+ $(document)
15
+ .off('keydown.quantityValidation', '#quantity-field')
16
+ .on('keydown.quantityValidation', '#quantity-field', function (e) {
17
+ if (e.key !== 'Enter') return;
18
+
19
+ e.preventDefault();
20
+ e.stopPropagation();
21
+
22
+ const isValid = this.checkValidity();
23
+
24
+ Wick.FEMock.dispatchProductAddedToCart(Wick.FEMock.getCartPdpHtml({ hasError: !isValid }));
25
+
26
+ suppressQuantityReportValidityOnBlur = true;
27
+ this.blur();
28
+
29
+ setTimeout(() => {
30
+ const $focusTarget = $('.custom-slider.just-added .close-popup').first();
31
+ if ($focusTarget.length) $focusTarget.trigger('focus');
32
+ }, 150);
33
+ });
@@ -40,11 +40,11 @@ import {
40
40
  getMessageInfo,
41
41
  isMessageExist,
42
42
  updatePromotion,
43
- showNotification
44
- } from "./basket/basket-utils";
45
- import {updateCartBase} from "./basket/basket-update-cart";
46
- import {updateCartActionBase} from "./basket/basket-update-cart-action";
47
- import {initBillieModal} from "./components/billie-modal";
43
+ showNotification,
44
+ } from './basket/basket-utils';
45
+ import { updateCartBase } from './basket/basket-update-cart';
46
+ import { updateCartActionBase } from './basket/basket-update-cart-action';
47
+ import { initBillieModal } from './components/billie-modal';
48
48
 
49
49
  var Wick = window.Wick || {};
50
50
  Wick.BasketPage = {
@@ -1,31 +1,31 @@
1
1
  const billieEl = {
2
- modalId: '#billieLearnMoreModal',
3
- openLink: '.billie__link[data-target="#billieLearnMoreModal"]',
4
- scrollBody: '.modal-body.modal-box__body',
5
- content: '.modal-content.modal-box__content',
2
+ modalId: '#billieLearnMoreModal',
3
+ openLink: '.billie__link[data-target="#billieLearnMoreModal"]',
4
+ scrollBody: '.modal-body.modal-box__body',
5
+ content: '.modal-content.modal-box__content',
6
6
  };
7
7
 
8
8
  function resetBillieModalScroll($modal) {
9
- const bodyEl = $modal.find(billieEl.scrollBody)[0];
10
- if (bodyEl) bodyEl.scrollTop = 0;
11
- $modal.find(billieEl.content).attr('data-scroll-state', 'top');
9
+ const bodyEl = $modal.find(billieEl.scrollBody)[0];
10
+ if (bodyEl) bodyEl.scrollTop = 0;
11
+ $modal.find(billieEl.content).attr('data-scroll-state', 'top');
12
12
  }
13
13
 
14
14
  export function initBillieModal() {
15
- const $modal = $(billieEl.modalId);
16
- if (!$modal.length) return;
15
+ const $modal = $(billieEl.modalId);
16
+ if (!$modal.length) return;
17
17
 
18
- $(document).on('click', billieEl.openLink, function () {
19
- resetBillieModalScroll($modal);
20
- });
18
+ $(document).on('click', billieEl.openLink, function () {
19
+ resetBillieModalScroll($modal);
20
+ });
21
21
 
22
- $(document).on('shown.bs.modal', billieEl.modalId, function () {
23
- resetBillieModalScroll($modal);
24
- requestAnimationFrame(() => resetBillieModalScroll($modal));
25
- setTimeout(() => resetBillieModalScroll($modal), 30);
26
- });
22
+ $(document).on('shown.bs.modal', billieEl.modalId, function () {
23
+ resetBillieModalScroll($modal);
24
+ requestAnimationFrame(() => resetBillieModalScroll($modal));
25
+ setTimeout(() => resetBillieModalScroll($modal), 30);
26
+ });
27
27
 
28
- $(document).on('hidden.bs.modal', billieEl.modalId, function () {
29
- resetBillieModalScroll($modal);
30
- });
28
+ $(document).on('hidden.bs.modal', billieEl.modalId, function () {
29
+ resetBillieModalScroll($modal);
30
+ });
31
31
  }
@@ -0,0 +1,29 @@
1
+ import { createCountStepper } from '../utils/create-count-stepper';
2
+
3
+ var Wick = window.Wick || {};
4
+
5
+ Wick.PDPCountStepper = {
6
+ el: {
7
+ input: '#quantity-field',
8
+ },
9
+
10
+ stepper: null,
11
+
12
+ init() {
13
+ Wick.PDPCountStepper.stepper = createCountStepper({
14
+ inputSel: Wick.PDPCountStepper.el.input,
15
+ min: 1,
16
+ max: 99,
17
+ onChange(qty, inputEl) {
18
+ $(inputEl).trigger('change');
19
+ },
20
+ });
21
+
22
+ Wick.PDPCountStepper.stepper.init($(document));
23
+ },
24
+ };
25
+
26
+ $(document).ready(function () {
27
+ if (!$(Wick.PDPCountStepper.el.input).length) return;
28
+ Wick.PDPCountStepper.init();
29
+ });
@@ -34,14 +34,14 @@ Wick.PLPFilters = {
34
34
 
35
35
  // 5) primary render
36
36
  Wick.PLPFilters.updateSelectedUI(rootWrapper);
37
-
37
+
38
38
  // 6) handle browser back/forward navigation
39
39
  Wick.PLPFilters.handlePageShow();
40
40
  },
41
41
 
42
42
  // Handle bfcache (back/forward cache)
43
43
  handlePageShow() {
44
- window.addEventListener('pageshow', function(event) {
44
+ window.addEventListener('pageshow', function () {
45
45
  const rootWrapper = $(Wick.PLPFilters.ROOT_WRAPPER);
46
46
  Wick.PLPFilters.appliedState = Wick.PLPFilters.readStateFromURL(rootWrapper);
47
47
  Wick.PLPFilters.setDOMFromState(rootWrapper, Wick.PLPFilters.appliedState);
@@ -1,6 +1,6 @@
1
- const Handlebars = require("hbsfy/runtime");
1
+ const Handlebars = require('hbsfy/runtime');
2
2
  const markdown = require('helper-markdown');
3
-
3
+
4
4
  import { arrayToObjectByIndex } from '../utils/array-utils';
5
5
 
6
6
  import price from '../../../components/kitchen/price.hbs';
@@ -8,156 +8,156 @@ import stripStickers from '../../../components/kitchen/strip-stickers.hbs';
8
8
  import slide from '../../../components/kitchen/slide.hbs';
9
9
  import infoIcon from '../../../components/info-icon.hbs';
10
10
 
11
- (function() {
12
- const CLASSES = {
13
- activeSwatch: 'colour-swatch--active',
14
- hiddenSwatch: 'colour-swatch--hidden',
15
- };
16
-
17
- const SELECTORS = {
18
- kitchenCardsContainer: '.kitchen-cards',
19
- cardContainer: '.kitchen-card',
20
- colourSwatch: '.colour-swatch',
21
- moreSwatchesButton: '.swatch-more',
22
- hiddenSwatch: '.colour-swatch--hidden',
23
- activeSwatch: '.colour-swatch--active',
24
- swatchesText: '.colour-swatches__text',
25
- designText: '.kitchen-card__design',
26
- finishesText: '.kitchen-card__finishes',
27
- ctaLink: '.kitchen-card__cta a',
28
- stripsContainer: '.kitchen-card__strips',
29
- priceContainer: '.kitchen-card__price',
30
- tooltip: '[data-toggle="tooltip"]',
31
- };
32
-
33
- let kitchenData = [];
34
-
35
- Handlebars.registerPartial('info-icon', infoIcon);
36
-
37
- Handlebars.registerHelper('markdown', markdown());
38
- Handlebars.registerHelper('ifCond', function (v1, operator, v2, options) {
39
- if (operator === '||') {
40
- return (v1 || v2) ? options.fn(this) : options.inverse(this);
11
+ (function () {
12
+ const CLASSES = {
13
+ activeSwatch: 'colour-swatch--active',
14
+ hiddenSwatch: 'colour-swatch--hidden',
15
+ };
16
+
17
+ const SELECTORS = {
18
+ kitchenCardsContainer: '.kitchen-cards',
19
+ cardContainer: '.kitchen-card',
20
+ colourSwatch: '.colour-swatch',
21
+ moreSwatchesButton: '.swatch-more',
22
+ hiddenSwatch: '.colour-swatch--hidden',
23
+ activeSwatch: '.colour-swatch--active',
24
+ swatchesText: '.colour-swatches__text',
25
+ designText: '.kitchen-card__design',
26
+ finishesText: '.kitchen-card__finishes',
27
+ ctaLink: '.kitchen-card__cta a',
28
+ stripsContainer: '.kitchen-card__strips',
29
+ priceContainer: '.kitchen-card__price',
30
+ tooltip: '[data-toggle="tooltip"]',
31
+ };
32
+
33
+ let kitchenData = [];
34
+
35
+ Handlebars.registerPartial('info-icon', infoIcon);
36
+
37
+ Handlebars.registerHelper('markdown', markdown());
38
+ Handlebars.registerHelper('ifCond', function (v1, operator, v2, options) {
39
+ if (operator === '||') {
40
+ return v1 || v2 ? options.fn(this) : options.inverse(this);
41
+ }
42
+ });
43
+ Handlebars.registerHelper('optimizeImageUrl', function (url, width) {
44
+ const queryParameters = `format=pjpg&auto=webp&quality=90&width=${width}`;
45
+ const connectSymbol = url.includes('?') ? '&' : '?';
46
+
47
+ return `${url}${connectSymbol}${queryParameters}`;
48
+ });
49
+ Handlebars.registerHelper('formatPrice', function (value) {
50
+ if (typeof value === 'number') {
51
+ return value.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',');
52
+ }
53
+
54
+ return value;
55
+ });
56
+
57
+ function normalizeKitchenData(kitchens) {
58
+ const transformedKitchens = kitchens.map((kitchen) => ({
59
+ ...kitchen,
60
+ colourDatas: arrayToObjectByIndex(kitchen.colourDatas),
61
+ }));
62
+
63
+ return arrayToObjectByIndex(transformedKitchens);
41
64
  }
42
- });
43
- Handlebars.registerHelper('optimizeImageUrl', function(url, width) {
44
- const queryParameters = `format=pjpg&auto=webp&quality=90&width=${width}`
45
- const connectSymbol = url.includes('?') ? '&' : '?'
46
-
47
- return `${url}${connectSymbol}${queryParameters}`;
48
- });
49
- Handlebars.registerHelper('formatPrice', function (value) {
50
- if (typeof value === 'number') {
51
- return value.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',');
65
+
66
+ function transformStripStickerDataForHbs(stickers) {
67
+ return stickers.map((sticker) => ({
68
+ text: sticker.text,
69
+ background: sticker.backgroundColour,
70
+ text_colour: sticker.textColour,
71
+ }));
52
72
  }
53
73
 
54
- return value;
55
- });
56
-
57
- function normalizeKitchenData(kitchens) {
58
- const transformedKitchens = kitchens.map((kitchen) => ({
59
- ...kitchen,
60
- colourDatas: arrayToObjectByIndex(kitchen.colourDatas),
61
- }));
62
-
63
- return arrayToObjectByIndex(transformedKitchens);
64
- };
65
-
66
- function transformStripStickerDataForHbs(stickers) {
67
- return stickers.map(sticker=> ({
68
- text: sticker.text,
69
- background: sticker.backgroundColour,
70
- text_colour: sticker.textColour,
71
- }));
72
- }
73
-
74
- function transformPriceDataForHbs(priceData) {
75
- return {
76
- price: priceData.price,
77
- was_price: priceData.wasPrice,
78
- finance_price: priceData.financePrice,
79
- tooltip_text: priceData.tooltipText,
80
- additional_text: priceData.additionalText,
81
- price_offer: priceData.isPriceOffer
82
- };
83
- }
84
-
85
- function updateSwiperView($cardSwiper, images, sticker) {
86
- $cardSwiper.removeAllSlides();
87
- const newSlidesHtml = slide({images, sticker});
88
- $cardSwiper.appendSlide(newSlidesHtml);
89
- $cardSwiper.slideTo(0, 0);
90
- }
91
- function updateSwatchesTextView($cardContainer, colourName) {
92
- $cardContainer.find(SELECTORS.swatchesText).text(`in ${colourName}`)
93
- }
94
- function updateParametersView($cardContainer, design, finishes) {
95
- const finishesText = finishes.join(', ');
96
- const finishesLabel = (finishes.length > 1) ? 'finishes' : 'finish';
97
-
98
- $cardContainer.find(SELECTORS.designText).text(`${design} design`)
99
- $cardContainer.find(SELECTORS.finishesText).text(`${finishesText} ${finishesLabel}`)
100
- }
101
- function updateCTALink($cardContainer, url) {
102
- $cardContainer.find(SELECTORS.ctaLink).attr('href', url)
103
- }
104
- function updateStickersView($cardContainer, stickersData) {
105
- const updatedStickersData = transformStripStickerDataForHbs(stickersData);
106
- const newStripStickersHtml = stripStickers({strip_stickers: updatedStickersData});
107
-
108
- $cardContainer.find(SELECTORS.stripsContainer).html(newStripStickersHtml);
109
- }
110
-
111
- function updatePriceView($cardContainer, priceData) {
112
- const updatedPriceData = transformPriceDataForHbs(priceData);
113
- const newPriceHtml = price({price: updatedPriceData, small: true});
114
-
115
- $cardContainer.find(SELECTORS.priceContainer).html(newPriceHtml);
116
- $cardContainer.find(SELECTORS.tooltip).tooltip();
117
- }
118
-
119
- function handleMoreSwatchesClick() {
120
- const $button = $(this);
121
- $button.siblings(SELECTORS.hiddenSwatch).removeClass(CLASSES.hiddenSwatch);
122
- $button.hide();
123
- $(window).trigger('kitchenCardChanged');
124
- }
125
-
126
- function handleColourSwatchClick() {
127
- const $swatch = $(this);
128
- const $cardContainer = $swatch.closest(SELECTORS.cardContainer);
129
- const $currentSwatchActive = $swatch.siblings(SELECTORS.activeSwatch);
130
-
131
- const colourId = $swatch.data('id');
132
- const kitchenId = $cardContainer.data('id');
133
-
134
- const currentKitchenData = kitchenData[kitchenId];
135
- const colourData = currentKitchenData.colourDatas[colourId];
136
-
137
- const $cardSwiper = Wick.PLPCardSwiper[kitchenId];
138
-
139
- updatePriceView($cardContainer, colourData.priceData);
140
- updateStickersView($cardContainer, colourData.stickers);
141
- updateSwatchesTextView($cardContainer, colourData.colourSwatch.colourName);
142
- updateSwiperView($cardSwiper, colourData.images, currentKitchenData.rangeStickers[0]);
143
- updateParametersView($cardContainer, colourData.design, colourData.finishes);
144
- updateCTALink($cardContainer, colourData.pdpUrl);
145
-
146
- $currentSwatchActive.removeClass(CLASSES.activeSwatch);
147
- $swatch.addClass(CLASSES.activeSwatch);
148
- $(window).trigger('kitchenCardChanged');
149
- }
150
-
151
- function initKitchenPLP(_, PLPKitchenData) {
152
- const $kitchenCardsContainer = $(SELECTORS.kitchenCardsContainer);
153
-
154
- kitchenData = normalizeKitchenData(PLPKitchenData);
155
-
156
- $kitchenCardsContainer.on('click', SELECTORS.colourSwatch, handleColourSwatchClick);
157
- $kitchenCardsContainer.on('click', SELECTORS.moreSwatchesButton, handleMoreSwatchesClick);
158
- }
159
-
160
- $(document).ready(function() {
161
- $(document).on('initKitchenPLP', initKitchenPLP);
162
- });
163
- })()
74
+ function transformPriceDataForHbs(priceData) {
75
+ return {
76
+ price: priceData.price,
77
+ was_price: priceData.wasPrice,
78
+ finance_price: priceData.financePrice,
79
+ tooltip_text: priceData.tooltipText,
80
+ additional_text: priceData.additionalText,
81
+ price_offer: priceData.isPriceOffer,
82
+ };
83
+ }
84
+
85
+ function updateSwiperView($cardSwiper, images, sticker) {
86
+ $cardSwiper.removeAllSlides();
87
+ const newSlidesHtml = slide({ images, sticker });
88
+ $cardSwiper.appendSlide(newSlidesHtml);
89
+ $cardSwiper.slideTo(0, 0);
90
+ }
91
+ function updateSwatchesTextView($cardContainer, colourName) {
92
+ $cardContainer.find(SELECTORS.swatchesText).text(`in ${colourName}`);
93
+ }
94
+ function updateParametersView($cardContainer, design, finishes) {
95
+ const finishesText = finishes.join(', ');
96
+ const finishesLabel = finishes.length > 1 ? 'finishes' : 'finish';
97
+
98
+ $cardContainer.find(SELECTORS.designText).text(`${design} design`);
99
+ $cardContainer.find(SELECTORS.finishesText).text(`${finishesText} ${finishesLabel}`);
100
+ }
101
+ function updateCTALink($cardContainer, url) {
102
+ $cardContainer.find(SELECTORS.ctaLink).attr('href', url);
103
+ }
104
+ function updateStickersView($cardContainer, stickersData) {
105
+ const updatedStickersData = transformStripStickerDataForHbs(stickersData);
106
+ const newStripStickersHtml = stripStickers({ strip_stickers: updatedStickersData });
107
+
108
+ $cardContainer.find(SELECTORS.stripsContainer).html(newStripStickersHtml);
109
+ }
110
+
111
+ function updatePriceView($cardContainer, priceData) {
112
+ const updatedPriceData = transformPriceDataForHbs(priceData);
113
+ const newPriceHtml = price({ price: updatedPriceData, small: true });
114
+
115
+ $cardContainer.find(SELECTORS.priceContainer).html(newPriceHtml);
116
+ $cardContainer.find(SELECTORS.tooltip).tooltip();
117
+ }
118
+
119
+ function handleMoreSwatchesClick() {
120
+ const $button = $(this);
121
+ $button.siblings(SELECTORS.hiddenSwatch).removeClass(CLASSES.hiddenSwatch);
122
+ $button.hide();
123
+ $(window).trigger('kitchenCardChanged');
124
+ }
125
+
126
+ function handleColourSwatchClick() {
127
+ const $swatch = $(this);
128
+ const $cardContainer = $swatch.closest(SELECTORS.cardContainer);
129
+ const $currentSwatchActive = $swatch.siblings(SELECTORS.activeSwatch);
130
+
131
+ const colourId = $swatch.data('id');
132
+ const kitchenId = $cardContainer.data('id');
133
+
134
+ const currentKitchenData = kitchenData[kitchenId];
135
+ const colourData = currentKitchenData.colourDatas[colourId];
136
+
137
+ const $cardSwiper = Wick.PLPCardSwiper[kitchenId];
138
+
139
+ updatePriceView($cardContainer, colourData.priceData);
140
+ updateStickersView($cardContainer, colourData.stickers);
141
+ updateSwatchesTextView($cardContainer, colourData.colourSwatch.colourName);
142
+ updateSwiperView($cardSwiper, colourData.images, currentKitchenData.rangeStickers[0]);
143
+ updateParametersView($cardContainer, colourData.design, colourData.finishes);
144
+ updateCTALink($cardContainer, colourData.pdpUrl);
145
+
146
+ $currentSwatchActive.removeClass(CLASSES.activeSwatch);
147
+ $swatch.addClass(CLASSES.activeSwatch);
148
+ $(window).trigger('kitchenCardChanged');
149
+ }
150
+
151
+ function initKitchenPLP(_, PLPKitchenData) {
152
+ const $kitchenCardsContainer = $(SELECTORS.kitchenCardsContainer);
153
+
154
+ kitchenData = normalizeKitchenData(PLPKitchenData);
155
+
156
+ $kitchenCardsContainer.on('click', SELECTORS.colourSwatch, handleColourSwatchClick);
157
+ $kitchenCardsContainer.on('click', SELECTORS.moreSwatchesButton, handleMoreSwatchesClick);
158
+ }
159
+
160
+ $(document).ready(function () {
161
+ $(document).on('initKitchenPLP', initKitchenPLP);
162
+ });
163
+ })();