wickes-css2 2.117.0-develop.3 → 2.117.0-gift-cards.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.
- package/Readme.md +0 -1
- package/build/css/category-main.css +1 -1
- package/build/css/components/checkout-payment-details-v2.css +1 -1
- package/build/css/homepage-main.css +1 -1
- package/build/css/kitchen-plp-main.css +1 -1
- package/build/css/main.css +1 -1
- package/build/css/my-account-main-v2.css +1 -1
- package/build/css/my-account-main.css +1 -1
- package/build/css/pages/checkout-new.css +1 -1
- package/build/css/pages/checkout.css +1 -1
- package/build/css/pages/page_my-order.css +1 -1
- package/build/css/pages/page_wismo-details.css +1 -1
- package/build/css/pdp-main-before-combine.css +1 -1
- package/build/css/pdp-main-critical.css +1 -1
- package/build/css/pdp-main-non-critical.css +1 -1
- package/build/css/pdp-main.css +1 -1
- package/build/css/plp-main.css +1 -1
- package/build/css/store-locator-main.css +1 -1
- package/build/img/payment/checkout/giftcard.svg +28 -0
- package/build/img/payment/footer/giftcard.svg +28 -0
- package/build/js/account-members.min.js +1 -1
- package/build/js/add-project-list-id.min.js +1 -1
- package/build/js/address-book.min.js +1 -1
- package/build/js/basket.min.js +2 -2
- package/build/js/bundle.min.js +1 -1
- package/build/js/change-password.min.js +1 -1
- package/build/js/checkout.min.js +2 -2
- package/build/js/emulation.min.js +424 -82
- package/build/js/general.bundle.min.js +1 -1
- package/build/js/gift-cards.min.js +1 -1
- package/build/js/merged-checkout.min.js +2 -2
- package/build/js/page/bloomreach-widget/bloomreach-widget-core.js +1 -3
- package/build/js/page/checkout-payment-details.js +114 -10
- package/build/js/page/components/gift-cards.js +524 -115
- package/build/js/page/components/postcode-lookup/postcode-lookup-api.js +56 -0
- package/build/js/page/components/postcode-lookup/postcode-lookup-render.js +98 -0
- package/build/js/page/components/postcode-lookup/postcode-lookup-validation.js +81 -0
- package/build/js/page/components/postcode-lookup.js +503 -0
- package/build/js/page/ripple/bulk-add.js +2 -2
- package/build/js/page/ripple/thumb-gallery.js +14 -8
- package/build/js/page/utils/address-utils.js +32 -0
- package/build/js/page/utils/validation.js +54 -1
- package/build/js/pdp.bundle.min.js +2 -2
- package/build/js/personal-details.min.js +1 -1
- package/build/js/plp.bundle.min.js +1 -1
- package/build/js/postcode-checker.min.js +1 -1
- package/build/js/project-list.min.js +57 -2
- package/build/js/quiz.min.js +1 -1
- package/build/js/track-my-order.min.js +1 -1
- package/package.json +5 -1
- package/src/components/checkout-payment-details-v2.hbs +1 -0
- package/src/components/checkout_order-summary-new.hbs +6 -0
- package/src/components/checkout_payment-new.hbs +35 -8
- package/src/components/gift-cards.hbs +8 -15
- package/src/components/order-address.hbs +28 -0
- package/src/components/payments.hbs +7 -6
- package/src/components/postcode-lookup-v2.hbs +85 -0
- package/src/components/wismo-giftcard-payment-item.hbs +29 -0
- package/src/components/wismo-payment.hbs +10 -0
- package/src/data/data_checkout-giftcards.json +7 -0
- package/src/data/data_delivery-address-v2.json +4 -0
- package/src/data/data_payments-checkout.json +4 -0
- package/src/data/data_postcode-lookup.json +200 -0
- package/src/data/data_wismo.json +46 -1
- package/src/data/footer_menu.json +4 -0
- package/src/elements/input.hbs +3 -1
- package/src/img/payment/checkout/giftcard.svg +28 -0
- package/src/img/payment/footer/giftcard.svg +28 -0
- package/src/js/components/general/footer.js +63 -56
- package/src/js/emulation/checkout-payment-details.js +2 -0
- package/src/js/emulation/gift-cards.js +22 -0
- package/src/js/emulation/mock.js +21 -20
- package/src/js/emulation/postcode-checker.js +1 -1
- package/src/js/emulation/postcode-lookup.js +122 -0
- package/src/js/page/bloomreach-widget/bloomreach-widget-core.js +1 -3
- package/src/js/page/checkout-payment-details.js +114 -10
- package/src/js/page/components/gift-cards.js +524 -115
- package/src/js/page/components/postcode-lookup/postcode-lookup-api.js +56 -0
- package/src/js/page/components/postcode-lookup/postcode-lookup-render.js +98 -0
- package/src/js/page/components/postcode-lookup/postcode-lookup-validation.js +81 -0
- package/src/js/page/components/postcode-lookup.js +503 -0
- package/src/js/page/ripple/bulk-add.js +2 -2
- package/src/js/page/ripple/thumb-gallery.js +14 -8
- package/src/js/page/utils/address-utils.js +32 -0
- package/src/js/page/utils/validation.js +54 -1
- package/src/page_checkout_confirmation-gift-card-split-payment.html +339 -0
- package/src/page_checkout_confirmation-gift-card.html +339 -0
- package/src/page_my_account_payment_info_gift_cards.html +96 -0
- package/src/page_my_account_payment_info_gift_cards_split_payment.html +96 -0
- package/src/page_product-details-billie.html +2 -0
- package/src/page_product-details-clearpay.html +1 -0
- package/src/scss/common/_CTAs.scss +4 -0
- package/src/scss/components/_gift-cards.scss +66 -9
- package/src/scss/components/_payments-checkout.scss +2 -2
- package/src/scss/components/_payments-v2.scss +5 -7
- package/src/scss/components/_postcode-lookup-v2.scss +164 -0
- package/src/scss/components/checkout-payment-details-v2.scss +1 -0
- package/src/scss/helpers/_CTAs.scss +26 -0
- package/src/scss/helpers/_variables.scss +2 -0
- package/src/scss/pages/_checkout-confirmation-new.scss +96 -3
- package/src/scss/pages/page_wismo-details.scss +29 -0
- package/src/sitemap.html +24 -0
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import data from '../../data/data_postcode-lookup.json';
|
|
2
|
+
|
|
3
|
+
const { autocompleteResponse, addresses } = data['postcode-lookup'];
|
|
4
|
+
|
|
5
|
+
window.Wick = window.Wick || {};
|
|
6
|
+
|
|
7
|
+
const MOCK_DELAY_MS = 300;
|
|
8
|
+
const MAX_HITS = 10;
|
|
9
|
+
const API_MODES = ['real', 'mock', 'block'];
|
|
10
|
+
const CHECK_KEY_UNAVAILABLE = 'unavailable';
|
|
11
|
+
const EMPTY_RESULT_ID = 'mock-empty';
|
|
12
|
+
|
|
13
|
+
const DEFAULT_MODES = {
|
|
14
|
+
checkKey: 'mock',
|
|
15
|
+
autocomplete: 'mock',
|
|
16
|
+
resolve: 'mock',
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
const EMPTY_RESULT_HIT = {
|
|
20
|
+
id: EMPTY_RESULT_ID,
|
|
21
|
+
suggestion: 'Empty result (resolve returns no address)',
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
function delay(value) {
|
|
25
|
+
return new Promise((resolve) => setTimeout(() => resolve(value), MOCK_DELAY_MS));
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
function matchesQuery(suggestion, query) {
|
|
29
|
+
const text = suggestion.toLowerCase();
|
|
30
|
+
return query
|
|
31
|
+
.toLowerCase()
|
|
32
|
+
.split(/[\s,]+/)
|
|
33
|
+
.filter(Boolean)
|
|
34
|
+
.every((word) => text.includes(word));
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
function addressFromSuggestionText(text) {
|
|
38
|
+
const parts = String(text || '')
|
|
39
|
+
.split(',')
|
|
40
|
+
.map((part) => part.trim())
|
|
41
|
+
.filter(Boolean);
|
|
42
|
+
const postcode = parts.length > 2 ? parts.pop() : '';
|
|
43
|
+
const town = parts.length > 1 ? parts.pop() : '';
|
|
44
|
+
|
|
45
|
+
return {
|
|
46
|
+
line_1: parts[0] || '',
|
|
47
|
+
line_2: parts[1] || '',
|
|
48
|
+
line_3: parts.slice(2).join(', '),
|
|
49
|
+
post_town: town,
|
|
50
|
+
postcode,
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
const mocks = {
|
|
55
|
+
checkKey() {
|
|
56
|
+
return delay({ available: true });
|
|
57
|
+
},
|
|
58
|
+
|
|
59
|
+
autocomplete(query) {
|
|
60
|
+
const hits = autocompleteResponse.result.hits
|
|
61
|
+
.concat(/empty/i.test(query) ? [EMPTY_RESULT_HIT] : [])
|
|
62
|
+
.filter((hit) => matchesQuery(hit.suggestion, query))
|
|
63
|
+
.slice(0, MAX_HITS);
|
|
64
|
+
|
|
65
|
+
return delay(hits);
|
|
66
|
+
},
|
|
67
|
+
|
|
68
|
+
resolve(suggestion) {
|
|
69
|
+
if (suggestion.id === EMPTY_RESULT_ID) return delay(null);
|
|
70
|
+
|
|
71
|
+
const found = addresses[suggestion.id];
|
|
72
|
+
const address = found
|
|
73
|
+
? Object.assign({ id: suggestion.id }, found)
|
|
74
|
+
: addressFromSuggestionText(suggestion.suggestion);
|
|
75
|
+
|
|
76
|
+
return delay(address);
|
|
77
|
+
},
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
function blocked(name) {
|
|
81
|
+
return function () {
|
|
82
|
+
return Promise.reject(new Error(`[PostcodeLookup emulation] ${name} blocked`));
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
function readModes() {
|
|
87
|
+
const modes = Object.assign({}, DEFAULT_MODES);
|
|
88
|
+
const param = new URLSearchParams(window.location.search).get('postcodeLookup');
|
|
89
|
+
if (!param) return modes;
|
|
90
|
+
|
|
91
|
+
if (API_MODES.includes(param)) {
|
|
92
|
+
Object.keys(modes).forEach((name) => {
|
|
93
|
+
modes[name] = param;
|
|
94
|
+
});
|
|
95
|
+
return modes;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
param.split(',').forEach((pair) => {
|
|
99
|
+
const [name, mode] = pair.split(':').map((part) => part.trim());
|
|
100
|
+
const isValid =
|
|
101
|
+
API_MODES.includes(mode) || (name === 'checkKey' && mode === CHECK_KEY_UNAVAILABLE);
|
|
102
|
+
if (Object.prototype.hasOwnProperty.call(modes, name) && isValid) modes[name] = mode;
|
|
103
|
+
});
|
|
104
|
+
|
|
105
|
+
return modes;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
function buildOverrides(modes) {
|
|
109
|
+
const overrides = {};
|
|
110
|
+
|
|
111
|
+
Object.keys(modes).forEach((name) => {
|
|
112
|
+
const mode = modes[name];
|
|
113
|
+
|
|
114
|
+
if (mode === 'mock') overrides[name] = mocks[name];
|
|
115
|
+
if (mode === 'block') overrides[name] = blocked(name);
|
|
116
|
+
if (mode === CHECK_KEY_UNAVAILABLE) overrides[name] = () => delay({ available: false });
|
|
117
|
+
});
|
|
118
|
+
|
|
119
|
+
return overrides;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
window.Wick.PostcodeLookupApi = buildOverrides(readModes());
|
|
@@ -363,9 +363,7 @@ Wick.BloomreachWidget = {
|
|
|
363
363
|
}
|
|
364
364
|
|
|
365
365
|
const value =
|
|
366
|
-
typeof rawValue === 'number'
|
|
367
|
-
? rawValue
|
|
368
|
-
: Number(`${rawValue}`.replace(/[,£\s]/g, ''));
|
|
366
|
+
typeof rawValue === 'number' ? rawValue : Number(`${rawValue}`.replace(/[,£\s]/g, ''));
|
|
369
367
|
|
|
370
368
|
if (!Number.isFinite(value)) {
|
|
371
369
|
return typeof rawValue === 'string' ? rawValue : '';
|
|
@@ -13,7 +13,6 @@ Wick.CheckoutPaymentDetails = (function () {
|
|
|
13
13
|
};
|
|
14
14
|
|
|
15
15
|
const toggleBillieRepaymentTermsClass = 'js-billie-repayment-terms--has-selection';
|
|
16
|
-
|
|
17
16
|
const elements = {
|
|
18
17
|
$billieRepaymentTerms: $('.js-billie-repayment-terms'),
|
|
19
18
|
$billieWidget: $('.checkout-payment-details__billie[data-billie]'),
|
|
@@ -28,8 +27,95 @@ Wick.CheckoutPaymentDetails = (function () {
|
|
|
28
27
|
$unregisteredFields: $('#unregistered-fields'),
|
|
29
28
|
$registeredFields: $('#registered-fields'),
|
|
30
29
|
hiddenClass: 'd-none',
|
|
30
|
+
$giftcardToggle: $('#giftcard-toggle'),
|
|
31
|
+
$giftcardPanel: $('#giftcard-inline'),
|
|
32
|
+
giftcardDisabledClass: 'giftcard-toggle--disabled',
|
|
33
|
+
giftcardRoot: '.giftcard',
|
|
34
|
+
giftcardHint: '.giftcard-hint',
|
|
35
|
+
giftcardNumber: 'input[name="giftcard-number"]',
|
|
36
|
+
giftcardPin: 'input[name="giftcard-pin"]',
|
|
37
|
+
orderAddress: '[data-order-address]',
|
|
31
38
|
};
|
|
32
39
|
|
|
40
|
+
const isOutsideOrderAddress = (_, el) => !$(el).closest(elements.orderAddress).length;
|
|
41
|
+
function setGiftcardToggleEnabled(isEnabled) {
|
|
42
|
+
const $toggle = elements.$giftcardToggle;
|
|
43
|
+
const $panel = elements.$giftcardPanel;
|
|
44
|
+
const $giftcard = $toggle.closest('.giftcard');
|
|
45
|
+
|
|
46
|
+
if (!$toggle.length) {
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
$giftcard.toggleClass('giftcard--disabled', !isEnabled);
|
|
51
|
+
|
|
52
|
+
if (isEnabled) {
|
|
53
|
+
$toggle.attr('aria-disabled', 'false').attr('tabindex', '0').css('pointer-events', '');
|
|
54
|
+
} else {
|
|
55
|
+
if ($panel && $panel.length) $panel.prop('hidden', true);
|
|
56
|
+
|
|
57
|
+
$toggle
|
|
58
|
+
.attr('aria-disabled', 'true')
|
|
59
|
+
.attr('tabindex', '-1')
|
|
60
|
+
.css('pointer-events', 'none')
|
|
61
|
+
.attr('aria-expanded', 'false')
|
|
62
|
+
.show();
|
|
63
|
+
|
|
64
|
+
$giftcard.find('.giftcard-hint').show();
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
// function resetGiftcardToDefault() {
|
|
69
|
+
// const {
|
|
70
|
+
// $giftcardToggle: $toggle,
|
|
71
|
+
// $giftcardPanel: $panel,
|
|
72
|
+
// giftcardRoot,
|
|
73
|
+
// giftcardHint,
|
|
74
|
+
// giftcardNumber,
|
|
75
|
+
// giftcardPin,
|
|
76
|
+
// } = elements;
|
|
77
|
+
|
|
78
|
+
// if (!$toggle.length) {
|
|
79
|
+
// return;
|
|
80
|
+
// }
|
|
81
|
+
|
|
82
|
+
// const $giftcard = $toggle.closest(giftcardRoot);
|
|
83
|
+
|
|
84
|
+
// const $hint = $giftcard.find(giftcardHint);
|
|
85
|
+
// const $number = $giftcard.find(giftcardNumber);
|
|
86
|
+
// const $pin = $giftcard.find(giftcardPin);
|
|
87
|
+
|
|
88
|
+
// if ($panel.length) $panel.prop('hidden', true);
|
|
89
|
+
|
|
90
|
+
// $toggle.attr('aria-expanded', 'false').show();
|
|
91
|
+
// $hint.show();
|
|
92
|
+
|
|
93
|
+
// if (window.Wick?.GiftCard?.resetForm) {
|
|
94
|
+
// Wick.GiftCard.resetForm($giftcard);
|
|
95
|
+
// return;
|
|
96
|
+
// }
|
|
97
|
+
|
|
98
|
+
// $number.val('');
|
|
99
|
+
// $pin.val('');
|
|
100
|
+
// }
|
|
101
|
+
|
|
102
|
+
function syncGiftcardAvailability(checkedMethod) {
|
|
103
|
+
const enable = checkedMethod === 'card';
|
|
104
|
+
|
|
105
|
+
if (!enable) {
|
|
106
|
+
const $giftcard = elements.$giftcardToggle.closest(elements.giftcardRoot);
|
|
107
|
+
if (window.Wick?.GiftCard?.collapsePreserveState) {
|
|
108
|
+
Wick.GiftCard.collapsePreserveState($giftcard);
|
|
109
|
+
} else {
|
|
110
|
+
if (elements.$giftcardPanel.length) elements.$giftcardPanel.prop('hidden', true);
|
|
111
|
+
elements.$giftcardToggle.attr('aria-expanded', 'false').show();
|
|
112
|
+
$giftcard.find(elements.giftcardHint).show();
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
setGiftcardToggleEnabled(enable);
|
|
117
|
+
}
|
|
118
|
+
|
|
33
119
|
let klarnaInited = false;
|
|
34
120
|
let billieInited = false;
|
|
35
121
|
|
|
@@ -106,17 +192,21 @@ Wick.CheckoutPaymentDetails = (function () {
|
|
|
106
192
|
paymentMethods.forEach((method) => {
|
|
107
193
|
$(`[data-${method}]`).hide();
|
|
108
194
|
});
|
|
109
|
-
|
|
110
195
|
const $selected = $(`[data-${checkedMethod}]`);
|
|
111
196
|
if ($selected.length) {
|
|
112
197
|
$selected.show();
|
|
113
198
|
}
|
|
114
199
|
}
|
|
200
|
+
|
|
115
201
|
function resetAllCheckoutForms(keepPaymentMethod) {
|
|
116
202
|
const $container = elements.$wrapperPaymentInput.closest('.checkout-payment-details');
|
|
117
203
|
if (!$container.length) return;
|
|
204
|
+
const $giftcardScope = $container.find(elements.giftcardRoot);
|
|
205
|
+
const $exclude = $giftcardScope.find(':input');
|
|
118
206
|
|
|
119
207
|
$container.find('form').each(function () {
|
|
208
|
+
if ($(this).closest(elements.giftcardRoot).length) return;
|
|
209
|
+
|
|
120
210
|
if (Wick.Forms && typeof Wick.Forms.clearValidationErrors === 'function') {
|
|
121
211
|
Wick.Forms.clearValidationErrors(this);
|
|
122
212
|
}
|
|
@@ -126,13 +216,22 @@ Wick.CheckoutPaymentDetails = (function () {
|
|
|
126
216
|
.find(
|
|
127
217
|
'input[type="text"], input[type="email"], input[type="tel"], input[type="number"], input[type="password"], textarea'
|
|
128
218
|
)
|
|
219
|
+
.filter(isOutsideOrderAddress)
|
|
220
|
+
.not($exclude)
|
|
129
221
|
.val('');
|
|
130
222
|
|
|
131
|
-
$container
|
|
132
|
-
|
|
133
|
-
|
|
223
|
+
$container
|
|
224
|
+
.find('select')
|
|
225
|
+
.not($exclude)
|
|
226
|
+
.each(function () {
|
|
227
|
+
this.selectedIndex = 0;
|
|
228
|
+
});
|
|
134
229
|
|
|
135
|
-
$container
|
|
230
|
+
$container
|
|
231
|
+
.find('input[type="checkbox"]')
|
|
232
|
+
.filter(isOutsideOrderAddress)
|
|
233
|
+
.not($exclude)
|
|
234
|
+
.prop('checked', false);
|
|
136
235
|
|
|
137
236
|
$container.find('input[type="radio"]').each(function () {
|
|
138
237
|
const $radio = $(this);
|
|
@@ -308,7 +407,7 @@ Wick.CheckoutPaymentDetails = (function () {
|
|
|
308
407
|
}
|
|
309
408
|
|
|
310
409
|
function clearInputFields() {
|
|
311
|
-
elements.$billingAddress.find('input.tbx').val('');
|
|
410
|
+
elements.$billingAddress.find('input.tbx').filter(isOutsideOrderAddress).val('');
|
|
312
411
|
}
|
|
313
412
|
|
|
314
413
|
function showPlaceOrder() {
|
|
@@ -341,6 +440,8 @@ Wick.CheckoutPaymentDetails = (function () {
|
|
|
341
440
|
|
|
342
441
|
function init() {
|
|
343
442
|
const paymentMethods = getPaymentMethods();
|
|
443
|
+
const initialMethod = $(elements.paymentInputName + ':checked').val() || 'card';
|
|
444
|
+
syncGiftcardAvailability(initialMethod);
|
|
344
445
|
initBillieBusinessTypeToggle();
|
|
345
446
|
hideBillieBusiness();
|
|
346
447
|
|
|
@@ -363,6 +464,10 @@ Wick.CheckoutPaymentDetails = (function () {
|
|
|
363
464
|
elements.$wrapperPaymentInput.on('change', elements.paymentInputName, function () {
|
|
364
465
|
const checkedMethod = $(this).val();
|
|
365
466
|
|
|
467
|
+
togglePaymentBlocks(paymentMethods, checkedMethod);
|
|
468
|
+
changeDetailsBlock(checkedMethod);
|
|
469
|
+
syncGiftcardAvailability(checkedMethod);
|
|
470
|
+
|
|
366
471
|
if (prevPaymentMethod && prevPaymentMethod !== checkedMethod) {
|
|
367
472
|
resetAllCheckoutForms(checkedMethod);
|
|
368
473
|
} else {
|
|
@@ -373,13 +478,12 @@ Wick.CheckoutPaymentDetails = (function () {
|
|
|
373
478
|
Wick.Forms.clearValidationErrors(form);
|
|
374
479
|
}
|
|
375
480
|
|
|
376
|
-
togglePaymentBlocks(paymentMethods, checkedMethod);
|
|
377
|
-
changeDetailsBlock(checkedMethod);
|
|
378
|
-
|
|
379
481
|
prevPaymentMethod = checkedMethod;
|
|
380
482
|
});
|
|
381
483
|
|
|
382
484
|
$('.btn-new-card').on('click', function () {
|
|
485
|
+
elements.$cardDetails.removeClass(elements.hiddenCardDetailsClass);
|
|
486
|
+
|
|
383
487
|
$('[data-new-card]').show();
|
|
384
488
|
$('[data-existing-card]').hide();
|
|
385
489
|
return false;
|