wickes-css2 2.111.0-develop.4 → 2.111.0-dont-forget-widget.1

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 (37) hide show
  1. package/Readme.md +2 -1
  2. package/build/css/pdp-main-before-combine.css +1 -1
  3. package/build/css/pdp-main-non-critical.css +1 -1
  4. package/build/css/pdp-main.css +1 -1
  5. package/build/js/bloomreach-widget.min.js +1 -1
  6. package/build/js/emulation.min.js +334 -8
  7. package/build/js/page/bloomreach-widget/bloomreach-widget.js +241 -0
  8. package/build/js/page/{bloomreach-widget.js → bloomreach-widget/complete-your-project-widget.js} +205 -359
  9. package/build/js/page/bloomreach-widget/why-not-add-widget.js +196 -0
  10. package/package.json +1 -1
  11. package/src/components/bloomreach/complete-card.hbs +4 -32
  12. package/src/components/bloomreach/why-not-add-card-skeleton.hbs +14 -0
  13. package/src/components/bloomreach/why-not-add-card.hbs +73 -0
  14. package/src/components/bloomreach/why-not-add-content.hbs +41 -0
  15. package/src/components/bloomreach/why-not-add-skeleton.hbs +9 -0
  16. package/src/components/bloomreach/why-not-add.hbs +6 -0
  17. package/src/components/pdp-price-actions.hbs +2 -2
  18. package/src/components/price-block-v2.hbs +2 -0
  19. package/src/components/reviews-rating.hbs +22 -0
  20. package/src/js/emulation/bloomreach-widget-loading.js +2 -2
  21. package/src/js/emulation/mock.js +309 -0
  22. package/src/js/emulation/why-not-add-loading.js +11 -0
  23. package/src/js/emulation/why-not-add.js +28 -0
  24. package/src/js/page/bloomreach-widget/bloomreach-widget.js +241 -0
  25. package/src/js/page/{bloomreach-widget.js → bloomreach-widget/complete-your-project-widget.js} +205 -359
  26. package/src/js/page/bloomreach-widget/why-not-add-widget.js +196 -0
  27. package/src/page_product-details-bloomreach.html +1 -1
  28. package/src/page_product-details-with-global-search-v2.html +2 -1
  29. package/src/page_product-details-with-why-not-add-single.html +131 -0
  30. package/src/scss/components/bloomreach/_bloomreach.scss +3 -0
  31. package/src/scss/components/bloomreach/_complete-card.scss +0 -38
  32. package/src/scss/components/bloomreach/_reviews.scss +60 -0
  33. package/src/scss/components/bloomreach/_why-not-add-card.scss +212 -0
  34. package/src/scss/components/bloomreach/_why-not-add.scss +143 -0
  35. package/src/sitemap.html +10 -4
  36. package/src/components/.DS_Store +0 -0
  37. package/src/js/page/.DS_Store +0 -0
@@ -0,0 +1,196 @@
1
+ var Wick = window.Wick || {};
2
+
3
+ import { createLoadingButton } from '../utils/create-loading-button';
4
+
5
+ const Handlebars = require('hbsfy/runtime');
6
+
7
+ Handlebars.registerPartial('loader', require('../../../elements/loader.hbs'));
8
+ Handlebars.registerPartial('button', require('../../../components/base/button.hbs'));
9
+ Handlebars.registerPartial(
10
+ 'bloomreach/why-not-add',
11
+ require('../../../components/bloomreach/why-not-add.hbs')
12
+ );
13
+ Handlebars.registerPartial(
14
+ 'bloomreach/why-not-add-skeleton',
15
+ require('../../../components/bloomreach/why-not-add-skeleton.hbs')
16
+ );
17
+ Handlebars.registerPartial(
18
+ 'bloomreach/why-not-add-card-skeleton',
19
+ require('../../../components/bloomreach/why-not-add-card-skeleton.hbs')
20
+ );
21
+ Handlebars.registerPartial(
22
+ 'bloomreach/why-not-add-card',
23
+ require('../../../components/bloomreach/why-not-add-card.hbs')
24
+ );
25
+ Handlebars.registerPartial('reviews-rating', require('../../../components/reviews-rating.hbs'));
26
+
27
+ const whyNotAddTemplate = require('../../../components/bloomreach/why-not-add-content.hbs');
28
+
29
+ const WhyNotAddWidget = {
30
+ ADD_TO_CART_EVENT: 'addToCart',
31
+
32
+ products: [],
33
+ sliders: [],
34
+ loadingButton: null,
35
+
36
+ el: {
37
+ cta: '.why-not-add-card__cta',
38
+ next: '[data-why-not-add-next]',
39
+ pagination: '[data-why-not-add-pagination]',
40
+ prev: '[data-why-not-add-prev]',
41
+ root: '[data-why-not-add]',
42
+ slider: '[data-why-not-add-slider]',
43
+ widgetContainer: '[data-why-not-add-widget]',
44
+ },
45
+
46
+ normalizeProducts(payloadData) {
47
+ return Wick.BloomreachWidget.normalizePayload(payloadData)
48
+ .map(function (item) {
49
+ return item.baseProduct || item;
50
+ })
51
+ .slice(0, 5);
52
+ },
53
+
54
+ renderWidget($container, payloadData) {
55
+ const products = WhyNotAddWidget.normalizeProducts(payloadData);
56
+
57
+ if (!products.length) {
58
+ $container.empty().hide();
59
+ return;
60
+ }
61
+
62
+ WhyNotAddWidget.products = products;
63
+
64
+ $container
65
+ .html(
66
+ whyNotAddTemplate({
67
+ products: products.map(Wick.BloomreachWidget.getProductRenderData),
68
+ isSingleProduct: products.length === 1,
69
+ })
70
+ )
71
+ .show();
72
+ },
73
+
74
+ destroySliders() {
75
+ WhyNotAddWidget.sliders.forEach(function (slider) {
76
+ if (slider && slider.destroy) {
77
+ slider.destroy(true, true);
78
+ }
79
+ });
80
+
81
+ WhyNotAddWidget.sliders = [];
82
+ },
83
+
84
+ initSliders($root) {
85
+ WhyNotAddWidget.destroySliders();
86
+
87
+ $root.find(WhyNotAddWidget.el.slider).each(function () {
88
+ const $slider = $(this);
89
+ const $widget = $slider.closest(WhyNotAddWidget.el.root);
90
+ const slidesCount = $slider.find('.swiper-slide').length;
91
+
92
+ if (slidesCount <= 1) {
93
+ return;
94
+ }
95
+
96
+ const slider = new Swiper(this, {
97
+ roundLengths: true,
98
+ slidesPerView: 1,
99
+ spaceBetween: 12,
100
+ watchOverflow: true,
101
+ navigation: {
102
+ nextEl: $widget.find(WhyNotAddWidget.el.next)[0],
103
+ prevEl: $widget.find(WhyNotAddWidget.el.prev)[0],
104
+ disabledClass: 'why-not-add__arrow--disabled',
105
+ },
106
+ pagination: {
107
+ el: $widget.find(WhyNotAddWidget.el.pagination)[0],
108
+ clickable: true,
109
+ renderBullet(index, className) {
110
+ return `<button class="${className}" type="button" aria-label="Go to slide ${
111
+ index + 1
112
+ }"></button>`;
113
+ },
114
+ bulletClass: 'why-not-add__pagination-item',
115
+ bulletActiveClass: 'why-not-add__pagination-item--active',
116
+ },
117
+ });
118
+
119
+ WhyNotAddWidget.sliders.push(slider);
120
+ });
121
+ },
122
+ bindAddToCart($root) {
123
+ $root.off('click.whyNotAdd', WhyNotAddWidget.el.cta);
124
+ $root.on('click.whyNotAdd', WhyNotAddWidget.el.cta, function (event) {
125
+ event.preventDefault();
126
+
127
+ const $button = $(this);
128
+ const $card = $button.closest('.why-not-add-card');
129
+ const productCode = $card.attr('data-product-code');
130
+
131
+ if (!productCode || WhyNotAddWidget.loadingButton.isLoading($button)) {
132
+ return;
133
+ }
134
+
135
+ const payload = {
136
+ productCode,
137
+ };
138
+
139
+ WhyNotAddWidget.loadingButton.start($button);
140
+
141
+ Wick.BloomreachWidget.dispatchWidgetEvent(WhyNotAddWidget.ADD_TO_CART_EVENT, payload)
142
+ .then(function () {
143
+ WhyNotAddWidget.loadingButton.stop($button);
144
+ Wick.MiniBasketSliderFE.isMiniBasketLoaded = false;
145
+ })
146
+ .catch(function () {
147
+ WhyNotAddWidget.loadingButton.stop($button);
148
+ });
149
+ });
150
+ },
151
+
152
+ bindVatToggle() {
153
+ if (Wick.BloomreachWidget.bindVatToggle) {
154
+ Wick.BloomreachWidget.bindVatToggle('whyNotAddVatToggle');
155
+ }
156
+ },
157
+
158
+ initRenderedWidget($container) {
159
+ const $root = $container.find(WhyNotAddWidget.el.root);
160
+
161
+ if (!$root.length) {
162
+ return;
163
+ }
164
+
165
+ if (!WhyNotAddWidget.loadingButton) {
166
+ WhyNotAddWidget.loadingButton = createLoadingButton({
167
+ text: Wick.BloomreachWidget.el.loadingButtonText,
168
+ loader: Wick.BloomreachWidget.el.loadingButtonLoader,
169
+ });
170
+ }
171
+
172
+ Wick.BloomreachWidget.drawRating($root);
173
+ WhyNotAddWidget.initSliders($root);
174
+ WhyNotAddWidget.bindAddToCart($root);
175
+ WhyNotAddWidget.bindVatToggle();
176
+ Wick.BloomreachWidget.reapplyVatDisplay();
177
+ },
178
+
179
+ init(payloadData) {
180
+ const $containers = $(WhyNotAddWidget.el.widgetContainer);
181
+
182
+ if (!payloadData) {
183
+ $containers.empty().hide();
184
+ return;
185
+ }
186
+
187
+ $containers.each(function () {
188
+ const $container = $(this);
189
+
190
+ WhyNotAddWidget.renderWidget($container, payloadData);
191
+ WhyNotAddWidget.initRenderedWidget($container);
192
+ });
193
+ },
194
+ };
195
+
196
+ export default WhyNotAddWidget;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "wickes-css2",
3
- "version": "2.111.0-develop.4",
3
+ "version": "2.111.0-dont-forget-widget.1",
4
4
  "description": "CSS and JS and page templates in use by Wickes",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -25,38 +25,10 @@
25
25
  {{name}}
26
26
  </a>
27
27
 
28
- <div class="complete-card__reviews">
29
- <div class="rating-bg">
30
- <i class="fa fa-star star-in" aria-hidden="true"></i>
31
- <i class="fa fa-star star-in" aria-hidden="true"></i>
32
- <i class="fa fa-star star-in" aria-hidden="true"></i>
33
- <i class="fa fa-star star-in" aria-hidden="true"></i>
34
- <i class="fa fa-star star-in" aria-hidden="true"></i>
35
-
36
- <div class="rating-overlay"
37
- data-rating="{{#if externalAverageRating}}{{externalAverageRating}}{{else}}0{{/if}}">
38
- <span class="star-overlay">
39
- <i class="fa fa-star" aria-hidden="true"></i>
40
- </span>
41
- <span class="star-overlay">
42
- <i class="fa fa-star" aria-hidden="true"></i>
43
- </span>
44
- <span class="star-overlay">
45
- <i class="fa fa-star" aria-hidden="true"></i>
46
- </span>
47
- <span class="star-overlay">
48
- <i class="fa fa-star" aria-hidden="true"></i>
49
- </span>
50
- <span class="star-overlay">
51
- <i class="fa fa-star" aria-hidden="true"></i>
52
- </span>
53
- </div>
54
-
55
- <span class="complete-card__reviews-count">
56
- (<span class="complete-card__reviews-count-value">{{externalReviewCount}}</span>)
57
- </span>
58
- </div>
59
- </div>
28
+ {{> reviews-rating
29
+ externalAverageRating=externalAverageRating
30
+ externalReviewCount=externalReviewCount
31
+ }}
60
32
  </div>
61
33
  <div class="complete-card__options">
62
34
  {{#if dropdownOptions.length}}
@@ -0,0 +1,14 @@
1
+ <div class="why-not-add-card why-not-add-card--skeleton ssc">
2
+ <div class="ssc-square why-not-add-card__image"></div>
3
+
4
+ <div class="ssc-line why-not-add-card__skeleton-title"></div>
5
+ <div class="ssc-line why-not-add-card__skeleton-title-short"></div>
6
+
7
+ <div class="ssc-line why-not-add-card__skeleton-reviews"></div>
8
+
9
+ <div class="ssc-line why-not-add-card__skeleton-price"></div>
10
+
11
+ <div class="ssc-line why-not-add-card__skeleton-delivery"></div>
12
+
13
+ <div class="ssc-square why-not-add-card__skeleton-cta"></div>
14
+ </div>
@@ -0,0 +1,73 @@
1
+ <div class="why-not-add-card" data-product-code="{{code}}">
2
+ {{#if image.url}}
3
+ <img
4
+ class="why-not-add-card__image"
5
+ src="{{image.url}}"
6
+ alt="{{image.altText}}"
7
+ >
8
+ {{/if}}
9
+
10
+ <div class="why-not-add-card__content">
11
+ <a href="{{url}}" target="_blank" class="why-not-add-card__title">
12
+ {{name}}
13
+ </a>
14
+
15
+ {{> reviews-rating
16
+ externalAverageRating=externalAverageRating
17
+ externalReviewCount=externalReviewCount
18
+ }}
19
+
20
+ <div class="why-not-add-card__bottom">
21
+ <div class="why-not-add-card__price-wrap">
22
+ <div class="why-not-add-card__price {{#if wasPriceFormatted}}why-not-add-card__price--sale{{/if}}">
23
+ {{#if wasPriceFormatted}}
24
+ <span class="why-not-add-card__was-price">
25
+ {{#if switch-vat}}
26
+ <span class="including-vat-inherit">{{incVatWasPriceFormatted}}</span>
27
+ <span class="excluding-vat-inherit">{{excVatWasPriceFormatted}}</span>
28
+ {{else}}
29
+ {{wasPriceFormatted}}
30
+ {{/if}}
31
+ </span>
32
+
33
+ <span class="why-not-add-card__sale-price">
34
+ {{#if switch-vat}}
35
+ <span class="including-vat-inherit">{{incVatFormattedValue}}</span>
36
+ <span class="excluding-vat-inherit">{{excVatFormattedValue}}</span>
37
+ {{else}}
38
+ {{price.formattedValue}}
39
+ {{/if}}
40
+ </span>
41
+ {{else}}
42
+ <span class="why-not-add-card__regular-price">
43
+ {{#if switch-vat}}
44
+ <span class="including-vat-inherit">{{incVatFormattedValue}}</span>
45
+ <span class="excluding-vat-inherit">{{excVatFormattedValue}}</span>
46
+ {{else}}
47
+ {{price.formattedValue}}
48
+ {{/if}}
49
+ </span>
50
+ {{/if}}
51
+ </div>
52
+
53
+ {{#if switch-vat}}
54
+ <div class="why-not-add-card__vat-label">
55
+ <span class="including-vat-inherit">Inc.VAT</span>
56
+ <span class="excluding-vat-inherit">Exc.VAT</span>
57
+ </div>
58
+ {{/if}}
59
+
60
+ <div class="why-not-add-card__delivery">Excluding delivery</div>
61
+ </div>
62
+
63
+ {{> button
64
+ type="button"
65
+ action=true
66
+ icon="fas fa-shopping-basket"
67
+ showLoader=true
68
+ loaderModifier="why-not-add-card__loader"
69
+ modification="why-not-add-card__cta"
70
+ }}
71
+ </div>
72
+ </div>
73
+ </div>
@@ -0,0 +1,41 @@
1
+ <div class="why-not-add {{#if isSingleProduct}}why-not-add--single{{/if}}" data-why-not-add>
2
+ <div class="why-not-add__header">
3
+ <h3 class="why-not-add__title">Why not add</h3>
4
+
5
+ {{#unless isSingleProduct}}
6
+ <div class="why-not-add__arrows">
7
+ <button
8
+ class="why-not-add__arrow why-not-add__arrow-prev"
9
+ type="button"
10
+ aria-label="Previous slide"
11
+ data-why-not-add-prev
12
+ >
13
+ <i class="fas fa-chevron-left"></i>
14
+ </button>
15
+
16
+ <button
17
+ class="why-not-add__arrow why-not-add__arrow-next"
18
+ type="button"
19
+ aria-label="Next slide"
20
+ data-why-not-add-next
21
+ >
22
+ <i class="fas fa-chevron-right"></i>
23
+ </button>
24
+ </div>
25
+ {{/unless}}
26
+ </div>
27
+
28
+ <div class="swiper-container why-not-add__slider" data-why-not-add-slider>
29
+ <div class="swiper-wrapper">
30
+ {{#each products}}
31
+ <div class="swiper-slide why-not-add__slide">
32
+ {{> bloomreach/why-not-add-card this}}
33
+ </div>
34
+ {{/each}}
35
+ </div>
36
+ </div>
37
+
38
+ {{#unless isSingleProduct}}
39
+ <div class="why-not-add__pagination" data-why-not-add-pagination></div>
40
+ {{/unless}}
41
+ </div>
@@ -0,0 +1,9 @@
1
+ <div class="why-not-add why-not-add--skeleton ssc">
2
+ <div class="why-not-add__header">
3
+ <div class="ssc-line why-not-add__skeleton-title"></div>
4
+ </div>
5
+
6
+ <div class="why-not-add__skeleton-cards">
7
+ {{> bloomreach/why-not-add-card-skeleton}}
8
+ </div>
9
+ </div>
@@ -0,0 +1,6 @@
1
+ <div
2
+ data-why-not-add-widget
3
+ data-mock-key="{{context}}"
4
+ >
5
+ {{> bloomreach/why-not-add-skeleton}}
6
+ </div>
@@ -1,7 +1,7 @@
1
1
  {{#if c-and-c}}
2
2
  <div class="{{#if tile-measurement}}ti__total{{else}}pdp-price{{/if}}__control-holder">
3
- <button class="btn btn-primary btn_full" data-toggle="modal" data-target="#modal-click-and-collect">
4
- <span class="btn__text">FREE Click & Collect within 30 minutes</span>
3
+ <button class="btn btn-action btn_full" data-toggle="modal" data-target="#modal-click-and-collect">
4
+ <span class="btn__text">Click & Collect</span>
5
5
  </button>
6
6
  </div>
7
7
  {{/if}}
@@ -196,6 +196,8 @@
196
196
  </div>
197
197
  {{/if}}
198
198
 
199
+ {{> bloomreach/why-not-add context=mockDataKey}}
200
+
199
201
  {{#if mfeProductCalculator}}
200
202
  <div class="pdp-price__quantity-calculator">MFE Calculator Placeholder</div>
201
203
  {{/if}}
@@ -0,0 +1,22 @@
1
+ <div class="reviews">
2
+ <div class="rating-bg">
3
+ <i class="fa fa-star star-in" aria-hidden="true"></i>
4
+ <i class="fa fa-star star-in" aria-hidden="true"></i>
5
+ <i class="fa fa-star star-in" aria-hidden="true"></i>
6
+ <i class="fa fa-star star-in" aria-hidden="true"></i>
7
+ <i class="fa fa-star star-in" aria-hidden="true"></i>
8
+
9
+ <div
10
+ class="rating-overlay"
11
+ data-rating="{{#if externalAverageRating}}{{externalAverageRating}}{{else}}0{{/if}}"
12
+ >
13
+ <span class="star-overlay"><i class="fa fa-star" aria-hidden="true"></i></span>
14
+ <span class="star-overlay"><i class="fa fa-star" aria-hidden="true"></i></span>
15
+ <span class="star-overlay"><i class="fa fa-star" aria-hidden="true"></i></span>
16
+ <span class="star-overlay"><i class="fa fa-star" aria-hidden="true"></i></span>
17
+ <span class="star-overlay"><i class="fa fa-star" aria-hidden="true"></i></span>
18
+ </div>
19
+
20
+ <span class="{{#if countClass}}{{countClass}}{{else}}reviews-count{{/if}}">(<span class="{{#if countValueClass}}{{countValueClass}}{{else}}reviews-count-value{{/if}}">{{#if externalReviewCount}}{{externalReviewCount}}{{else}}0{{/if}}</span>)</span>
21
+ </div>
22
+ </div>
@@ -3,9 +3,9 @@ var Wick = window.Wick || {};
3
3
  $(document).ready(function () {
4
4
  window.setTimeout(function () {
5
5
  const $container = $('[data-complete-widget]');
6
- const contextKey = $container.data('context-key');
6
+ const contextKey = $container.data('mock-key');
7
7
  const payloadData = Wick.FEMock.dataBloomreach[contextKey];
8
8
 
9
- Wick.BloomreachWidget.init(payloadData);
9
+ Wick.BloomreachWidget.init('completeYourProject', payloadData);
10
10
  }, 3000);
11
11
  });