wickes-css2 2.109.0-develop.6 → 2.109.0-develop.8

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 (57) hide show
  1. package/Readme.md +0 -1
  2. package/build/css/components/card-product-banner.css +1 -1
  3. package/build/css/components/special-opening-schedule-v2.css +1 -1
  4. package/build/css/components/special-opening-schedule.css +1 -1
  5. package/build/css/emulation.css +1 -1
  6. package/build/css/main.css +1 -1
  7. package/build/css/my-account-main-v2.css +1 -1
  8. package/build/css/my-account-main.css +1 -1
  9. package/build/css/pages/checkout-new.css +1 -1
  10. package/build/css/pages/page_merged-basket.css +1 -1
  11. package/build/css/pages/page_store-locator-details.css +1 -1
  12. package/build/css/pages/page_store-locator.css +1 -1
  13. package/build/css/plp-main.css +1 -1
  14. package/build/css/store-locator-main.css +1 -1
  15. package/build/js/basket.min.js +1 -1
  16. package/build/js/bundle.min.js +1 -1
  17. package/build/js/checkout.min.js +1 -1
  18. package/build/js/emulation.min.js +367 -111
  19. package/build/js/general.bundle.min.js +1 -1
  20. package/build/js/gift-cards.min.js +1 -1
  21. package/build/js/merged-checkout.min.js +1 -1
  22. package/build/js/page/checkout-payment-details.js +95 -11
  23. package/build/js/page/components/gift-cards.js +1 -1
  24. package/build/js/page/components/store-locator-cards.js +76 -0
  25. package/build/js/pdp.bundle.min.js +1 -1
  26. package/build/js/plp.bundle.min.js +1 -1
  27. package/build/js/project-list.min.js +1 -1
  28. package/build/js/store-locator-cards.min.js +1 -0
  29. package/build/js/toggle-password-visibility.min.js +1 -0
  30. package/package.json +1 -1
  31. package/src/components/card-store-locator.hbs +70 -33
  32. package/src/components/card_bloomreach_media_banner.hbs +10 -0
  33. package/src/components/card_sponsor_banner.hbs +1 -1
  34. package/src/components/checkout-payment-details-v2.hbs +4 -4
  35. package/src/components/checkout-payment-info-block.hbs +1 -1
  36. package/src/data/data_locators.json +441 -135
  37. package/src/data/data_search-results_v2.json +11 -0
  38. package/src/js/components/general/accordion.js +25 -2
  39. package/src/js/emulation/banner-placement-manager.js +235 -34
  40. package/src/js/emulation/checkout-payment-details.js +34 -1
  41. package/src/js/emulation/gift-cards.js +1 -1
  42. package/src/js/emulation/store-locator-load-more.js +69 -0
  43. package/src/js/page/checkout-payment-details.js +95 -11
  44. package/src/js/page/components/gift-cards.js +1 -1
  45. package/src/js/page/components/store-locator-cards.js +76 -0
  46. package/src/page_plp_bloomreach.html +81 -0
  47. package/src/page_plp_v2.html +5 -0
  48. package/src/page_store-locator-list.html +18 -28
  49. package/src/scss/components/_card-store-locator.scss +139 -32
  50. package/src/scss/components/card-product-banner.scss +35 -35
  51. package/src/scss/components/special-opening-schedule-v2.scss +2 -6
  52. package/src/scss/components/special-opening-schedule.scss +17 -4
  53. package/src/scss/emulation.scss +0 -6
  54. package/src/scss/pages/page_store-locator.scss +48 -26
  55. package/src/scss/store-locator-main.scss +15 -1
  56. package/src/sitemap.html +1 -0
  57. package/src/js/emulation/store-locator-list.js +0 -19
@@ -1,53 +1,254 @@
1
1
  // Simulate prompt for input
2
- function getInputs() {
3
- const productBannerPositions = prompt("Enter Product Banner Positions:", "2") || "";
4
- const sponsorProductPositions = prompt("Enter Sponsor Product Positions (comma-separated):", "6,7,8") || "";
5
- const sponsorBannerPositions = prompt("Enter Sponsor Banner Positions:", "10") || "";
6
2
 
7
- return {
8
- productBannerPositions: productBannerPositions ? productBannerPositions.split(",").map(Number) : [],
9
- sponsorProductPositions: sponsorProductPositions ? sponsorProductPositions.split(",").map(Number) : [],
10
- sponsorBannerPositions: sponsorBannerPositions ? sponsorBannerPositions.split(",").map(Number) : [],
11
- };
3
+ function parseSlots(value) {
4
+ if (!value) {
5
+ return [];
6
+ }
7
+
8
+ return String(value)
9
+ .split(',')
10
+ .map((item) => parseInt(item.trim(), 10))
11
+ .filter((item) => Number.isInteger(item) && item >= 0);
12
+ }
13
+
14
+ function isBloomreachDisabled(slots) {
15
+ return !slots.length || slots.every((s) => s === 0);
16
+ }
17
+
18
+ function toggleHybrisProductBanners(inputs) {
19
+ const banners = document.querySelectorAll('.card-product-banner');
20
+ const disabled = isBloomreachDisabled(inputs.bloomreachSlots);
21
+
22
+ banners.forEach((banner) => {
23
+ if (disabled) {
24
+ banner.classList.remove('d-none');
25
+ banner.classList.remove('card-product-banner--inactive');
26
+ } else {
27
+ banner.classList.add('d-none');
28
+ banner.classList.add('card-product-banner--inactive');
29
+ }
30
+ });
12
31
  }
13
32
 
14
33
  function getPositionAttr() {
15
- const isMobile = Wick.BannerPlacementManager.isMobileResolution();
16
- return isMobile
17
- ? 'data-mobile-position'
18
- : 'data-desktop-position';
34
+ const isMobile = Wick.BannerPlacementManager.isMobileResolution();
35
+
36
+ return isMobile ? 'data-mobile-position' : 'data-desktop-position';
37
+ }
38
+
39
+ function setUnifiedPosition(el, slot) {
40
+ el.setAttribute('data-desktop-position', String(slot));
41
+ el.setAttribute('data-mobile-position', String(slot));
42
+ }
43
+
44
+ function hasLegacyBanners() {
45
+ return Boolean(
46
+ document.querySelector('.card-product-banner') ||
47
+ document.querySelector('.card-sponsor-product') ||
48
+ document.querySelector('.card-sponsor-banner')
49
+ );
50
+ }
51
+
52
+ function getInputs() {
53
+ const hasLegacy = hasLegacyBanners();
54
+
55
+ const bloomreachSlots = parseSlots(
56
+ prompt('Enter Bloomreach Banner Slots (comma-separated):', '3') || ''
57
+ );
58
+
59
+ if (!hasLegacy) {
60
+ return {
61
+ bloomreachSlots,
62
+ sponsorProductPositions: [],
63
+ sponsorBannerPositions: [],
64
+ productBannerPositions: [],
65
+ };
66
+ }
67
+
68
+ const productBannerPositions =
69
+ prompt('Enter Product Banner Positions (comma-separated):', '2') || '';
70
+
71
+ const sponsorProductPositions =
72
+ prompt('Enter Sponsor Product Positions (comma-separated):', '6,7,8') || '';
73
+
74
+ const sponsorBannerPositions =
75
+ prompt('Enter Sponsor Banner Positions (comma-separated):', '10') || '';
76
+
77
+ return {
78
+ productBannerPositions: parseSlots(productBannerPositions),
79
+ sponsorProductPositions: parseSlots(sponsorProductPositions),
80
+ sponsorBannerPositions: parseSlots(sponsorBannerPositions),
81
+ bloomreachSlots,
82
+ };
83
+ }
84
+
85
+ function updateBannerPositions(selector, positions) {
86
+ if (!positions?.length) {
87
+ return;
88
+ }
89
+
90
+ const positionAttr = getPositionAttr();
91
+ const elements = document.querySelectorAll(selector);
92
+
93
+ elements.forEach((el, index) => {
94
+ if (positions[index] !== undefined) {
95
+ el.setAttribute(positionAttr, String(positions[index]));
96
+ }
97
+ });
19
98
  }
20
99
 
21
100
  function updatePositions(inputs) {
22
- const productBannerElements = document.querySelectorAll(".card-product-banner");
23
- productBannerElements.forEach((el, index) => {
24
- if (inputs.productBannerPositions[index] !== undefined) {
25
- el.setAttribute(getPositionAttr(), inputs.productBannerPositions[index]);
101
+ updateBannerPositions('.card-product-banner', inputs.productBannerPositions);
102
+ updateBannerPositions('.card-sponsor-product', inputs.sponsorProductPositions);
103
+ updateBannerPositions('.card-sponsor-banner', inputs.sponsorBannerPositions);
104
+ }
105
+
106
+ function patchBannerPlacementManagerForBloomreachEmulation(inputs) {
107
+ const manager = window.Wick?.BannerPlacementManager;
108
+
109
+ if (!manager || manager.__bloomreachEmulationPatched) {
110
+ return;
26
111
  }
27
- });
28
112
 
29
- const sponsorProductElements = document.querySelectorAll(".card-sponsor-product");
30
- sponsorProductElements.forEach((el, index) => {
31
- if (inputs.sponsorProductPositions[index] !== undefined) {
32
- el.setAttribute(getPositionAttr(), inputs.sponsorProductPositions[index]);
113
+ const shouldDisableProductBanners = Boolean(inputs.bloomreachSlots?.length);
114
+
115
+ manager.el.bloomreachBanners = '.card-bloomreach-media-banner';
116
+
117
+ manager.el.allBanners = shouldDisableProductBanners
118
+ ? '.card-bloomreach-media-banner, .card-sponsor-banner, .card-sponsor-product'
119
+ : '.card-product-banner, .card-bloomreach-media-banner, .card-sponsor-banner, .card-sponsor-product';
120
+
121
+ manager.el.allListSlots = shouldDisableProductBanners
122
+ ? '.product-card, .card-bloomreach-media-banner, .card-sponsor-banner, .card-sponsor-product'
123
+ : '.product-card, .card-product-banner, .card-bloomreach-media-banner, .card-sponsor-banner, .card-sponsor-product';
124
+
125
+ manager.classes.bloomreachBanners = 'card-bloomreach-media-banner';
126
+
127
+ manager.getListSlots = function () {
128
+ return $(manager.el.productsWrap)
129
+ .children(manager.el.allListSlots)
130
+ .filter(function () {
131
+ if (
132
+ $(this).hasClass(manager.classes.productBanners) ||
133
+ $(this).hasClass(manager.classes.bloomreachBanners)
134
+ ) {
135
+ const position = manager.getBannerPosition(this);
136
+ const productsCount = manager.getListLength();
137
+
138
+ return position <= productsCount;
139
+ }
140
+
141
+ return true;
142
+ });
143
+ };
144
+
145
+ manager.arrangeBannersInRightOrder = function () {
146
+ const $allBanners = $(manager.el.allBanners);
147
+
148
+ function getSameSlotInsertionOrder(el) {
149
+ if ($(el).hasClass(manager.classes.bloomreachBanners)) {
150
+ return 0;
151
+ }
152
+
153
+ if ($(el).hasClass(manager.classes.sponsorBanners)) {
154
+ return 1;
155
+ }
156
+
157
+ if ($(el).hasClass(manager.classes.sponsorProducts)) {
158
+ return 2;
159
+ }
160
+
161
+ if ($(el).hasClass(manager.classes.productBanners)) {
162
+ return 3;
163
+ }
164
+
165
+ return 4;
166
+ }
167
+
168
+ $allBanners
169
+ .sort((a, b) => {
170
+ const positionA = manager.getBannerPosition(a);
171
+ const positionB = manager.getBannerPosition(b);
172
+
173
+ if (positionA !== positionB) {
174
+ return positionA - positionB;
175
+ }
176
+
177
+ return getSameSlotInsertionOrder(a) - getSameSlotInsertionOrder(b);
178
+ })
179
+ .appendTo(manager.el.productsWrap);
180
+ };
181
+
182
+ manager.__bloomreachEmulationPatched = true;
183
+ }
184
+
185
+ function rebuildBloomreachBannersForEmulation(inputs) {
186
+ const slots = inputs.bloomreachSlots || [];
187
+ const productsWrap = document.querySelector('.products-list.products-list-v2');
188
+
189
+ if (!productsWrap) {
190
+ return;
191
+ }
192
+
193
+ const existingBanners = document.querySelectorAll('.card-bloomreach-media-banner');
194
+
195
+ if (isBloomreachDisabled(slots)) {
196
+ existingBanners.forEach((banner) => banner.remove());
197
+ return;
33
198
  }
34
- });
35
199
 
36
- const sponsorBannerElements = document.querySelectorAll(".card-sponsor-banner");
37
- sponsorBannerElements.forEach((el, index) => {
38
- if (inputs.sponsorBannerPositions[index] !== undefined) {
39
- el.setAttribute(getPositionAttr(), inputs.sponsorBannerPositions[index]);
200
+ if (!existingBanners.length) {
201
+ return;
40
202
  }
41
- });
203
+
204
+ const template = existingBanners[0].cloneNode(true);
205
+
206
+ existingBanners.forEach((banner) => banner.remove());
207
+
208
+ const fragment = document.createDocumentFragment();
209
+
210
+ slots.forEach((slot) => {
211
+ if (slot === 0) return;
212
+
213
+ const node = template.cloneNode(true);
214
+
215
+ node.removeAttribute('data-slots');
216
+ setUnifiedPosition(node, slot);
217
+
218
+ fragment.appendChild(node);
219
+ });
220
+
221
+ productsWrap.appendChild(fragment);
42
222
  }
43
223
 
44
- function init() {
45
- const inputs = getInputs();
46
- updatePositions(inputs);
224
+ function applyBloomreachEmulation() {
225
+ const inputs = getInputs();
226
+
227
+ updatePositions(inputs);
228
+
229
+ const isDisabled = isBloomreachDisabled(inputs.bloomreachSlots);
230
+
231
+ toggleHybrisProductBanners(inputs);
232
+
233
+ if (!isDisabled) {
234
+ patchBannerPlacementManagerForBloomreachEmulation(inputs);
235
+ }
236
+
237
+ rebuildBloomreachBannersForEmulation(inputs);
238
+
239
+ if (
240
+ window.Wick &&
241
+ Wick.BannerPlacementManager &&
242
+ typeof Wick.BannerPlacementManager.checkProductsInColumn === 'function'
243
+ ) {
244
+ Wick.BannerPlacementManager.checkProductsInColumn();
245
+ }
47
246
  }
48
247
 
49
248
  $(document).ready(function () {
50
- if ($('.retail-media .products-list.products-list-v2').length) {
51
- setTimeout(() => init(), 100)
52
- }
249
+ if ($('.products-list.products-list-v2').length) {
250
+ setTimeout(() => {
251
+ applyBloomreachEmulation();
252
+ }, 100);
253
+ }
53
254
  });
@@ -1,9 +1,16 @@
1
- var Wick = Wick || {};
1
+ window.Wick = window.Wick || {};
2
+ window.Wick.BillieData = window.Wick.BillieData || {};
3
+ window.Wick.BillieData.billiePaymentTerms = ['30', '60', '90'];
4
+ window.INIT_KLARNA_PAYMENT = window.INIT_KLARNA_PAYMENT || 'INIT_KLARNA_PAYMENT';
5
+ window.INIT_BILLIE_PAYMENT = window.INIT_BILLIE_PAYMENT || 'INIT_BILLIE_PAYMENT';
2
6
 
3
7
  Wick.PaymentDetails = (function () {
4
8
  var $btnEnterDetails = $('.btn-enter-details'),
5
9
  isGuestPage = $('.page_checkout-payment-details_guest').length;
6
10
 
11
+ const $billieInfo = $('.checkout-payment-details__billie .billie-info');
12
+ const $klarnaInfo = $('.checkout-payment-details__klarna .klarna-info');
13
+
7
14
  function bindEvents() {
8
15
  $btnEnterDetails.on('click', function (e) {
9
16
  e.preventDefault();
@@ -49,6 +56,32 @@ Wick.PaymentDetails = (function () {
49
56
  Wick.Forms.showValidationErrors(this);
50
57
  return false;
51
58
  });
59
+
60
+ $(window).on(window.INIT_BILLIE_PAYMENT, function (e) {
61
+ const detail = e.detail || (e.originalEvent && e.originalEvent.detail) || {};
62
+
63
+ if (detail && detail.resolve) {
64
+ $billieInfo.show();
65
+ detail.resolve();
66
+ }
67
+ });
68
+
69
+ $(window).on(window.INIT_KLARNA_PAYMENT, function (e) {
70
+ const detail = e.detail || (e.originalEvent && e.originalEvent.detail) || {};
71
+
72
+ if (detail && detail.resolve) {
73
+ $klarnaInfo.show();
74
+ detail.resolve();
75
+ }
76
+ });
77
+
78
+ $(document).on('change', 'input[name="repaymentTerms"]', function () {
79
+ const hasSelection = $('input[name="repaymentTerms"]:checked').length > 0;
80
+
81
+ if (hasSelection) {
82
+ $billieInfo.show();
83
+ }
84
+ });
52
85
  }
53
86
 
54
87
  bindEvents();
@@ -205,7 +205,7 @@
205
205
  mock.giftCards = [];
206
206
  recomputeTotalsAndOrder();
207
207
 
208
- Wick.GiftCard.init({
208
+ Wick.GiftCard?.init({
209
209
  giftCardsLimit: GIFT_CARDS_LIMIT,
210
210
  errorCode: PAY_ERROR_CODE,
211
211
  giftCards: mock.giftCards.slice(),
@@ -0,0 +1,69 @@
1
+ import { appendLoader, showLoader, hideLoader } from '../page/utils/loader';
2
+
3
+ function initStoreLocatorLoadMore() {
4
+ const PAGE_SIZE = 8;
5
+
6
+ const SELECTORS = {
7
+ cards: '.cards-store-list',
8
+ btnMore: '.store-locator__load-button_more',
9
+ loader: '.store-locator-loader',
10
+ };
11
+
12
+ const loaderPayload = {
13
+ wrapper: 'body',
14
+ hidden: true,
15
+ modifier: 'store-locator-loader',
16
+ };
17
+
18
+ const $cards = $(SELECTORS.cards);
19
+ const $btnMore = $(SELECTORS.btnMore);
20
+
21
+ let visibleCount = PAGE_SIZE;
22
+
23
+ function updateVisibility() {
24
+ $cards.each(function (index) {
25
+ $(this).toggle(index < visibleCount);
26
+ });
27
+
28
+ if (visibleCount >= $cards.length) {
29
+ $btnMore.hide();
30
+ } else {
31
+ $btnMore.show();
32
+ }
33
+
34
+ Wick.StoreCardsAlign?.align();
35
+ }
36
+
37
+ function loadMore() {
38
+ showLoader(SELECTORS.loader);
39
+ $btnMore.prop('disabled', true);
40
+
41
+ setTimeout(() => {
42
+ visibleCount += PAGE_SIZE;
43
+ updateVisibility();
44
+
45
+ hideLoader(SELECTORS.loader);
46
+ $btnMore.prop('disabled', false).blur();
47
+ }, 1000);
48
+ }
49
+
50
+ function init() {
51
+ if (!$cards.length || !$btnMore.length) {
52
+ return;
53
+ }
54
+
55
+ if (!$(SELECTORS.loader).length) {
56
+ appendLoader(loaderPayload);
57
+ }
58
+
59
+ updateVisibility();
60
+
61
+ $btnMore.on('click', loadMore);
62
+ }
63
+
64
+ init();
65
+ }
66
+
67
+ $(document).ready(function () {
68
+ initStoreLocatorLoadMore();
69
+ });
@@ -1,4 +1,6 @@
1
1
  var Wick = Wick || {};
2
+ window.INIT_KLARNA_PAYMENT = window.INIT_KLARNA_PAYMENT || 'INIT_KLARNA_PAYMENT';
3
+ window.INIT_BILLIE_PAYMENT = window.INIT_BILLIE_PAYMENT || 'INIT_BILLIE_PAYMENT';
2
4
  Wick.CheckoutPaymentDetails = (function () {
3
5
  const $modal = $('#modal-terms-and-conditions');
4
6
 
@@ -10,10 +12,11 @@ Wick.CheckoutPaymentDetails = (function () {
10
12
  buttonName: 'btn-enter-details',
11
13
  };
12
14
 
15
+ const toggleBillieRepaymentTermsClass = 'js-billie-repayment-terms--has-selection';
16
+
13
17
  const elements = {
14
18
  $billieRepaymentTerms: $('.js-billie-repayment-terms'),
15
- $billieInfoBlock: $('.checkout-payment-details__billie'),
16
- $billieInfo: $('.checkout-payment-details__billie .billie-info'),
19
+ $billieWidget: $('.checkout-payment-details__billie[data-billie]'),
17
20
  $wrapperPaymentInput: $('.checkout-payment-details__row'),
18
21
  paymentInputName: '[name=payment-method]',
19
22
  $cardDetails: $('.checkout-payment-details__card-details'),
@@ -27,6 +30,52 @@ Wick.CheckoutPaymentDetails = (function () {
27
30
  hiddenClass: 'd-none',
28
31
  };
29
32
 
33
+ let klarnaInited = false;
34
+ let billieInited = false;
35
+
36
+ function initKlarnaPayment() {
37
+ if (klarnaInited) return Promise.resolve({ ok: true, cached: true });
38
+
39
+ return new Promise((resolve, reject) => {
40
+ const payload = {};
41
+ const detail = {
42
+ resolve: (data) => {
43
+ klarnaInited = true;
44
+ resolve(data);
45
+ },
46
+ reject,
47
+ };
48
+
49
+ const evt = createEvent(window.INIT_KLARNA_PAYMENT, payload, detail);
50
+ window.dispatchEvent(evt);
51
+ });
52
+ }
53
+
54
+ function initBilliePayment() {
55
+ if (billieInited) return Promise.resolve({ ok: true, cached: true });
56
+
57
+ return new Promise((resolve, reject) => {
58
+ const payload = {};
59
+ const detail = {
60
+ resolve: (data) => {
61
+ billieInited = true;
62
+ resolve(data);
63
+ },
64
+ reject,
65
+ };
66
+
67
+ const evt = createEvent(window.INIT_BILLIE_PAYMENT, payload, detail);
68
+ window.dispatchEvent(evt);
69
+ });
70
+ }
71
+
72
+ function getBillieRepaymentTermsLength() {
73
+ const billieRepaymentTerms =
74
+ (window.Wick && window.Wick?.BillieData?.billiePaymentTerms) || [];
75
+
76
+ return Array.isArray(billieRepaymentTerms) ? billieRepaymentTerms.length : 0;
77
+ }
78
+
30
79
  function preparePage() {
31
80
  var modalOpened = $('.modal.show').length;
32
81
  if (!modalOpened) return;
@@ -55,10 +104,14 @@ Wick.CheckoutPaymentDetails = (function () {
55
104
 
56
105
  function togglePaymentBlocks(paymentMethods, checkedMethod) {
57
106
  paymentMethods.forEach((method) => {
58
- $(`[data-${method}]`).toggle(checkedMethod === method);
107
+ $(`[data-${method}]`).hide();
59
108
  });
60
- }
61
109
 
110
+ const $selected = $(`[data-${checkedMethod}]`);
111
+ if ($selected.length) {
112
+ $selected.show();
113
+ }
114
+ }
62
115
  function resetAllCheckoutForms(keepPaymentMethod) {
63
116
  const $container = elements.$wrapperPaymentInput.closest('.checkout-payment-details');
64
117
  if (!$container.length) return;
@@ -102,9 +155,18 @@ Wick.CheckoutPaymentDetails = (function () {
102
155
  $row.find(':input').prop('disabled', !isVisible);
103
156
  }
104
157
 
158
+ function _syncBillieUI(isReady) {
159
+ elements.$billieWidget.toggle(isReady);
160
+ elements.$billieRepaymentTerms.toggleClass(toggleBillieRepaymentTermsClass, isReady);
161
+ }
162
+
163
+ function resetBillieUi() {
164
+ _syncBillieUI(false);
165
+ }
166
+
105
167
  function setBillieStepVisibility(isReady) {
168
+ _syncBillieUI(isReady);
106
169
  setBillingDetailsRowVisibility(isReady);
107
- elements.$billieInfo.toggleClass(elements.hiddenClass, !isReady);
108
170
  }
109
171
 
110
172
  function resetBillieRepaymentSelection() {
@@ -130,13 +192,34 @@ Wick.CheckoutPaymentDetails = (function () {
130
192
  const isUnregistered = type === 'unregistered';
131
193
  const isRegistered = type === 'registered';
132
194
 
133
- elements.$unregisteredFields.toggleClass(elements.hiddenClass, !isUnregistered);
134
- elements.$registeredFields.toggleClass(elements.hiddenClass, !isRegistered);
195
+ elements.$unregisteredFields
196
+ .toggleClass(elements.hiddenClass, !isUnregistered)
197
+ .removeAttr('style');
198
+ elements.$registeredFields
199
+ .toggleClass(elements.hiddenClass, !isRegistered)
200
+ .removeAttr('style');
201
+ }
202
+
203
+ function showBillingAddressDataCardFields() {
204
+ const dataCardFields = elements.$billingAddress.find('[data-card]');
205
+ if (dataCardFields) {
206
+ dataCardFields.show();
207
+ }
135
208
  }
136
209
 
137
210
  function changeDetailsBlock(checkedMethod) {
138
211
  if (checkedMethod !== 'billie') {
212
+ resetBillieUi();
139
213
  setBillingDetailsRowVisibility(true);
214
+ hideBillieBusiness();
215
+ }
216
+
217
+ if (checkedMethod === 'klarna') {
218
+ initKlarnaPayment().catch(() => {});
219
+ }
220
+
221
+ if (checkedMethod === 'billie' && getBillieRepaymentTermsLength() === 1) {
222
+ initBilliePayment().catch(() => {});
140
223
  }
141
224
 
142
225
  switch (checkedMethod) {
@@ -158,7 +241,7 @@ Wick.CheckoutPaymentDetails = (function () {
158
241
  };
159
242
  changeLabelText(detailsLabel);
160
243
 
161
- setBillieStepVisibility(false);
244
+ setBillieStepVisibility(getBillieRepaymentTermsLength() === 1);
162
245
  resetBillieRepaymentSelection();
163
246
  showBillieBusiness();
164
247
  break;
@@ -172,15 +255,16 @@ Wick.CheckoutPaymentDetails = (function () {
172
255
  prevClearableMethod === 'card' && clearInputFields();
173
256
  changeLabelText(detailsLabel);
174
257
  prevClearableMethod = checkedMethod;
258
+ showBillingAddressDataCardFields();
175
259
  break;
176
260
 
177
- case 'apple':
261
+ case 'apple-pay':
178
262
  hideCardDetails();
179
263
  hidePlaceOrder();
180
264
  hideBillingAddres();
181
265
  break;
182
266
 
183
- case 'google':
267
+ case 'google-pay':
184
268
  hideCardDetails();
185
269
  hidePlaceOrder();
186
270
  hideBillingAddres();
@@ -256,7 +340,7 @@ Wick.CheckoutPaymentDetails = (function () {
256
340
  if (currentMethod !== 'billie') return;
257
341
 
258
342
  requestAnimationFrame(() => {
259
- forceReflow(elements.$billieInfoBlock);
343
+ forceReflow(elements.$billieWidget);
260
344
  });
261
345
 
262
346
  const hasSelection = $('input[name="repaymentTerms"]:checked').length > 0;
@@ -111,7 +111,7 @@ Wick.GiftCard = {
111
111
  klarnaInfo: '.checkout-payment-details__klarna',
112
112
  billingAddress: '.billing-address',
113
113
  altPaymentRowsAttr:
114
- '[data-apple],[data-google],[data-paypal],[data-klarna],[data-billie],[data-clearpay],[data-existing-card]',
114
+ '[data-apple-pay],[data-google-pay],[data-paypal],[data-klarna],[data-billie],[data-clearpay],[data-existing-card]',
115
115
  hiddenCard: 'checkout-payment-details__card-details_hidden',
116
116
  cardDetails: '.checkout-payment-details__card-details',
117
117
  },
@@ -0,0 +1,76 @@
1
+ var Wick = window.Wick || (window.Wick = {});
2
+
3
+ Wick.StoreCardsAlign = (function () {
4
+ const SELECTORS = {
5
+ card: '.card-store',
6
+ info: '.card-store__info',
7
+ accordionHeader: '.opening-times-accordion__header',
8
+ };
9
+
10
+ let resizeTimeout;
11
+
12
+ function alignCardInfoHeights() {
13
+ const rows = [];
14
+
15
+ $(SELECTORS.card).each(function () {
16
+ const $card = $(this);
17
+ const top = $card.offset().top;
18
+
19
+ let row = rows.find((r) => Math.abs(r.top - top) < 5);
20
+
21
+ if (!row) {
22
+ row = { top: top, items: [] };
23
+ rows.push(row);
24
+ }
25
+
26
+ row.items.push($card);
27
+ });
28
+
29
+ rows.forEach((row) => {
30
+ let maxHeight = 0;
31
+
32
+ // reset
33
+ row.items.forEach(($card) => {
34
+ $card.find(SELECTORS.info).css('min-height', '');
35
+ });
36
+
37
+ // find max
38
+ row.items.forEach(($card) => {
39
+ const h = $card.find(SELECTORS.info).outerHeight();
40
+ if (h > maxHeight) maxHeight = h;
41
+ });
42
+
43
+ // apply
44
+ row.items.forEach(($card) => {
45
+ $card.find(SELECTORS.info).css('min-height', maxHeight + 'px');
46
+ });
47
+ });
48
+ }
49
+
50
+ function bindEvents() {
51
+ // load
52
+ $(window).on('load', alignCardInfoHeights);
53
+
54
+ // resize
55
+ $(window).on('resize', () => {
56
+ clearTimeout(resizeTimeout);
57
+ resizeTimeout = setTimeout(alignCardInfoHeights, 100);
58
+ });
59
+
60
+ // accordion
61
+ $(document).on('click', SELECTORS.accordionHeader, () => {
62
+ setTimeout(alignCardInfoHeights, 0);
63
+ });
64
+ }
65
+
66
+ function init() {
67
+ bindEvents();
68
+ }
69
+
70
+ init();
71
+
72
+ return {
73
+ init: init,
74
+ align: alignCardInfoHeights,
75
+ };
76
+ })();