wickes-css2 2.103.0-develop.1 → 2.103.0-develop.10

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 (68) hide show
  1. package/Readme.md +5 -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/basket.min.js +2 -2
  14. package/build/js/bundle.min.js +1 -1
  15. package/build/js/checkout.min.js +2 -2
  16. package/build/js/emulation.min.js +994 -50
  17. package/build/js/general.bundle.min.js +1 -1
  18. package/build/js/merged-checkout.min.js +2 -2
  19. package/build/js/mini-basket-slider.min.js +1 -0
  20. package/build/js/page/basket/basket-update-cart-action.js +59 -0
  21. package/build/js/page/basket/basket-update-cart.js +29 -0
  22. package/build/js/page/basket/basket-utils.js +50 -0
  23. package/build/js/page/basket/mini-basket-total.js +97 -0
  24. package/build/js/page/basket/quantity-change-handler.js +64 -0
  25. package/build/js/page/basket/update-quantity-operation.js +37 -0
  26. package/build/js/page/basket/update-quantity.js +65 -0
  27. package/build/js/page/basket-v2.js +138 -244
  28. package/build/js/page/components/discounts.js +6 -6
  29. package/build/js/page/components/mini-basket-slider.js +569 -0
  30. package/build/js/pdp.bundle.min.js +1 -1
  31. package/build/js/plp.bundle.min.js +1 -1
  32. package/build/js/project-list.min.js +1 -1
  33. package/package.json +17 -2
  34. package/src/components/mini-basket/mini-basket-empty.hbs +3 -13
  35. package/src/components/mini-basket/mini-basket-order-item.hbs +73 -0
  36. package/src/components/mini-basket/mini-basket.hbs +32 -13
  37. package/src/components/mini-basket/product-item.hbs +37 -16
  38. package/src/components/srp-injected.hbs +3 -13
  39. package/src/data/data_confirmation-summary.json +4 -2
  40. package/src/data/data_mini-basket.json +4 -80
  41. package/src/js/components/banner-placement-manager.js +10 -1
  42. package/src/js/components/general/cart-slider.js +4 -0
  43. package/src/js/components/general/create-popup-slider.js +5 -2
  44. package/src/js/emulation/account-hub.js +40 -40
  45. package/src/js/emulation/custom-slider-emulation.js +4 -10
  46. package/src/js/emulation/mini-basket-data.js +949 -0
  47. package/src/js/page/basket/basket-update-cart-action.js +59 -0
  48. package/src/js/page/basket/basket-update-cart.js +29 -0
  49. package/src/js/page/basket/basket-utils.js +50 -0
  50. package/src/js/page/basket/mini-basket-total.js +97 -0
  51. package/src/js/page/basket/quantity-change-handler.js +64 -0
  52. package/src/js/page/basket/update-quantity-operation.js +37 -0
  53. package/src/js/page/basket/update-quantity.js +65 -0
  54. package/src/js/page/basket-v2.js +138 -244
  55. package/src/js/page/components/discounts.js +6 -6
  56. package/src/js/page/components/mini-basket-slider.js +569 -0
  57. package/src/layouts/base.hbs +0 -6
  58. package/src/page_plp_v2.html +2 -1
  59. package/src/partials/scripts.hbs +1 -0
  60. package/src/scss/category-main.scss +1 -0
  61. package/src/scss/components/_custom-slider.scss +131 -3
  62. package/src/scss/components/_popover-mini-basket.scss +0 -4
  63. package/src/scss/emulation.scss +3 -3
  64. package/src/scss/helpers/_colors-semantic.scss +120 -0
  65. package/src/scss/helpers/_variables.scss +2 -0
  66. package/src/scss/pages/_facets.scss +86 -0
  67. package/src/scss/plp-main.scss +1 -0
  68. package/src/js/components/general/mini-basket-slider.js +0 -8
@@ -0,0 +1,59 @@
1
+ export function updateCartActionBase(params) {
2
+ const {
3
+ response,
4
+ repaintData,
5
+ context,
6
+ charity,
7
+ initial,
8
+ updateOrderSummaryFn,
9
+ getEqualMapFn,
10
+ repaintOrderItemsFn,
11
+ addCharityEntryNumberFn,
12
+ updatePromotionFn,
13
+ addPotentialPromoFn,
14
+ cartEntries,
15
+ getCartEntriesFn,
16
+ checkProductArraysFn,
17
+ removeOrderItemFn,
18
+ elOrderItem,
19
+ updateKlarnaPlacementsFn,
20
+ updateClearpayPlacementsFn,
21
+ updateClearpayVisibilityFn,
22
+ addClassToSummaryAsideFn,
23
+ updateBasketSessionFn,
24
+ drawEnergyLabelsFn,
25
+ triggerCartUpdate = true,
26
+ extraActions = () => {},
27
+ extraActionsMiniBasket = () => {},
28
+ } = params;
29
+ if (initial) {
30
+ getCartEntriesFn(response);
31
+ } else {
32
+ updateOrderSummaryFn && updateOrderSummaryFn(response, getEqualMapFn(response));
33
+ if (repaintData) {
34
+ if (repaintData.isChangeDelivery) {
35
+ repaintData.cartEntry = cartEntries.filter(entry => entry.entryNumber === repaintData.cartEntryNumber)[0];
36
+ $(document).trigger("EEUpdateDeliveryMode", repaintData);
37
+ }
38
+ checkProductArraysFn(response)
39
+ ? repaintOrderItemsFn(response, repaintData)
40
+ : (() => {
41
+ $(elOrderItem).remove();
42
+ removeOrderItemFn && removeOrderItemFn(repaintData);
43
+ })();
44
+ }
45
+ charity && addCharityEntryNumberFn && addCharityEntryNumberFn(response);
46
+ context && context.length && updatePromotionFn && updatePromotionFn(response, context);
47
+ addPotentialPromoFn && addPotentialPromoFn(response);
48
+ updateKlarnaPlacementsFn && updateKlarnaPlacementsFn(response.totalPrice.formattedPriceWithoutCurrencySymbol);
49
+ updateClearpayPlacementsFn && updateClearpayPlacementsFn(response.totalPrice.value);
50
+ updateClearpayVisibilityFn && updateClearpayVisibilityFn(response.totalPrice.value);
51
+ addClassToSummaryAsideFn && addClassToSummaryAsideFn(response);
52
+ getCartEntriesFn && getCartEntriesFn(response);
53
+ updateBasketSessionFn && updateBasketSessionFn();
54
+ drawEnergyLabelsFn && drawEnergyLabelsFn();
55
+ triggerCartUpdate && $(document).trigger("cartUpdate");
56
+ extraActions && extraActions(response, repaintData, context, charity, initial);
57
+ extraActionsMiniBasket && extraActionsMiniBasket();
58
+ }
59
+ }
@@ -0,0 +1,29 @@
1
+ export function updateCartBase(params) {
2
+ const {
3
+ isLocalEnv,
4
+ apiUrl,
5
+ apiType,
6
+ hideLoader,
7
+ callActionFn,
8
+ actionCallback,
9
+ initial,
10
+ localUpdateFn,
11
+ repaintData,
12
+ context,
13
+ charity,
14
+ extraLocalActions = () => {},
15
+ extraApiActions = () => {},
16
+ } = params;
17
+ if (!isLocalEnv) {
18
+ const payload = {
19
+ url: apiUrl,
20
+ type: apiType,
21
+ complete: hideLoader,
22
+ };
23
+ callActionFn(payload, actionCallback, {repaintData, context, charity, initial});
24
+ extraApiActions();
25
+ } else {
26
+ localUpdateFn(initial, repaintData, context, charity, null);
27
+ extraLocalActions();
28
+ }
29
+ }
@@ -0,0 +1,50 @@
1
+ export function isMessageExist(data) {
2
+ return data.message && data.statusMessage;
3
+ }
4
+
5
+ export function getMessageInfo(data) {
6
+ return {
7
+ message: data.message,
8
+ status: data.statusMessage,
9
+ }
10
+ }
11
+
12
+ export function showNotification(data, containerSelector = '.notification-area') {
13
+ let notificationType;
14
+ switch (data.statusMessage) {
15
+ case 'accConfirmedMsgs':
16
+ notificationType = 'success'
17
+ break;
18
+ case 'accWarnMsgs':
19
+ notificationType = 'warning'
20
+ break;
21
+ case 'accErrorMsgs':
22
+ notificationType = 'error'
23
+ break;
24
+ }
25
+
26
+ Wick.Notification.show({
27
+ text: data.message,
28
+ container: containerSelector,
29
+ type: notificationType,
30
+ closeBtn: true
31
+ });
32
+ }
33
+
34
+ export function getCartEntries(data) {
35
+ return data?.deliveryOrderGroups.concat(data.pickupOrderGroups)
36
+ .map(orderGroup => orderGroup?.entries)
37
+ .flatMap(entries => entries);
38
+ }
39
+
40
+ export function checkProductArrays(cart) {
41
+ return cart.pickupUniqueItemsNumber || cart.deliveryUniqueItemsNumber;
42
+ }
43
+
44
+ export function updatePromotion(data, orderItemSelector, orderItemOffersSelector, orderItemInfoSelector, addPromotionsFn) {
45
+ $(orderItemSelector).each(function () {
46
+ let itemNumber = {entryNumber: +$(this).attr('data-id')}
47
+ $(this).find(orderItemOffersSelector).remove()
48
+ $(this).find(orderItemInfoSelector).append(addPromotionsFn(itemNumber, data));
49
+ })
50
+ }
@@ -0,0 +1,97 @@
1
+ import {updateDiscount} from "../components/discounts";
2
+
3
+ const osEl = {
4
+ $totalSection: $('.mini-basket__total'),
5
+ checkoutWidgetDetailsDiscount: '.checkout-widget__details-discount',
6
+ checkoutWidgetDetails: '.checkout-widget__details',
7
+ delivery: '.checkout-widget__item-delivery',
8
+ cc: '.checkout-widget__item-cc',
9
+ itemFree: '.checkout-widget__item-free',
10
+ itemDeficit: '.checkout-widget__item-deficit',
11
+ summaryDelivery: '.checkout-widget__item-delivery',
12
+ }
13
+
14
+ export function updateTotal(data, equalMap, isVoucher) {
15
+ equalMap.forEach((obj) => {
16
+ if ($(obj.item).length) {
17
+ $(obj.item).show();
18
+ } else {
19
+ if ($(osEl.checkoutWidgetDetailsDiscount).length) {
20
+ $(osEl.checkoutWidgetDetailsDiscount).before(createCheckoutWidgetItem(obj))
21
+ } else {
22
+ $(osEl.checkoutWidgetDetails).append(createCheckoutWidgetItem(obj))
23
+ }
24
+ }
25
+
26
+ $(obj.item).find(obj.itemValue).text(obj.dataValue);
27
+ if (isVoucher ? obj.dataValue : obj.value && obj.dataValue) {
28
+ $(obj.item).find(obj.itemValue).show();
29
+ } else {
30
+ $(obj.item).hide();
31
+ }
32
+ })
33
+
34
+ updateDiscount(data, isVoucher);
35
+ hideUnusedDeliveryTypeCost(data, isVoucher);
36
+ calculateFreeDelivery(data);
37
+ }
38
+
39
+ function createCheckoutWidgetItem(obj) {
40
+ return `
41
+ <li class="checkout-widget__item ${obj.item.substr(1)}">
42
+ <span>${obj.title}</span>
43
+ <span class="checkout-widget__item-value">${obj.dataValue}</span>
44
+ </li>
45
+ `
46
+ }
47
+
48
+ function hideUnusedDeliveryTypeCost(data, isVoucher) {
49
+ $(osEl.delivery).show()
50
+ $(osEl.cc).show()
51
+ if (isVoucher) {
52
+ if (!data.deliveryOrder) {
53
+ $(osEl.delivery).hide()
54
+ } else if (!data.clickAndCollectOrder) {
55
+ $(osEl.cc).hide()
56
+ }
57
+ } else {
58
+ if (data.clickAndCollectOnly) {
59
+ $(osEl.delivery).hide()
60
+ } else if (data.deliveryItemsQuantity > 0 && data.pickupItemsQuantity === 0) {
61
+ $(osEl.cc).hide()
62
+ }
63
+ }
64
+ }
65
+
66
+ function calculateFreeDelivery(data) {
67
+ osEl.$totalSection.each(function () {
68
+ let $free = $(this).find(osEl.itemFree);
69
+ let $deficit = $(this).find(osEl.itemDeficit);
70
+
71
+ !$free.length || $free.remove();
72
+ !$deficit.length || $deficit.remove()
73
+
74
+ if (!data.clickAndCollectOnly) {
75
+ if (data.freeDelivery && data.messageForFreeDelivery) {
76
+ $(this).find(osEl.summaryDelivery).before(function () {
77
+ return `
78
+ <div class="checkout-widget__item checkout-widget__item-free">
79
+ <span class="checkout-widget__text">
80
+ ${data.messageForFreeDelivery}
81
+ </span>
82
+ </div>
83
+ `
84
+ })
85
+ $(this).find(osEl.summaryDelivery).hide();
86
+ } else if (!data.freeDelivery && data.messageForFreeDelivery) {
87
+ $(this).find(osEl.summaryDelivery).before(function () {
88
+ return `
89
+ <div class="checkout-widget__item checkout-widget__item-deficit">
90
+ ${data.messageForFreeDelivery}
91
+ </div>
92
+ `
93
+ })
94
+ }
95
+ }
96
+ })
97
+ }
@@ -0,0 +1,64 @@
1
+ export function handleQuantityChange(params) {
2
+ const {
3
+ quantityInput,
4
+ action,
5
+ value,
6
+ context,
7
+ charity = false,
8
+ entryNumber,
9
+ onQuantityChange,
10
+ debounceQuantityChange,
11
+ onRemoveQuantityDisable,
12
+ parentWrap,
13
+ } = params
14
+
15
+ let newValue = value;
16
+
17
+ switch (action) {
18
+ case 'plus':
19
+ newValue = Number.parseInt(value, 10) + 1;
20
+ if (newValue) {
21
+ updateQuantity(quantityInput, newValue, parentWrap);
22
+ debounceQuantityChange(entryNumber, newValue, quantityInput, context, onQuantityChange);
23
+ }
24
+ break;
25
+ case 'minus':
26
+ newValue = Number.parseInt(value, 10) - 1;
27
+ if (newValue > 0) {
28
+ updateQuantity(quantityInput, newValue, parentWrap);
29
+ debounceQuantityChange(entryNumber, newValue, quantityInput, context, onQuantityChange);
30
+ } else {
31
+ if (typeof onRemoveQuantityDisable === 'function') {
32
+ onRemoveQuantityDisable();
33
+ }
34
+ }
35
+ break;
36
+ case 'remove':
37
+ newValue = 0;
38
+ if (!charity) updateQuantity(quantityInput, newValue, parentWrap);
39
+ debounceQuantityChange(entryNumber, newValue, quantityInput, context, onQuantityChange);
40
+ break;
41
+ default:
42
+ if (+newValue !== 0) {
43
+ updateQuantity(quantityInput, newValue, parentWrap);
44
+ debounceQuantityChange(entryNumber, newValue, quantityInput, context, onQuantityChange);
45
+ }
46
+ break;
47
+ }
48
+ }
49
+
50
+ export function updateQuantity(quantityInput, value, parentWrap) {
51
+ if (quantityInput.is('input')) {
52
+ quantityInput.val(value);
53
+ } else {
54
+ quantityInput.text(value);
55
+ }
56
+ quantityInput.attr('value', value);
57
+
58
+ if (parentWrap) {
59
+ const $card = quantityInput.closest(parentWrap);
60
+ if ($card.length) {
61
+ $card.attr('data-quantity', value);
62
+ }
63
+ }
64
+ }
@@ -0,0 +1,37 @@
1
+ export function updateQuantityOperation(quantityToUpdate, quantityInput, context, data, helpers = {}) {
2
+ const charity = context.hasClass && context.hasClass('charity-new');
3
+ const negativeStatus = data.statusMessage !== 'accConfirmedMsgs';
4
+ const messageInfo = helpers.isMessageExist ? helpers.isMessageExist(data) && helpers.getMessageInfo(data) : data.message && data.statusMessage && { message: data.message, status: data.statusMessage };
5
+ let maxValue, minValue;
6
+
7
+ if (!charity) {
8
+ maxValue = +quantityInput.attr('max');
9
+ minValue = +quantityInput.attr('min');
10
+ }
11
+
12
+ minValue === 0 ? minValue = 1 : minValue = minValue;
13
+
14
+ if (negativeStatus) {
15
+ helpers.updateCart && helpers.updateCart(messageInfo);
16
+ helpers.updateQuantity && helpers.updateQuantity(quantityInput, data.quantity);
17
+ helpers.showNotification && helpers.showNotification(data);
18
+ } else {
19
+ if (charity) {
20
+ helpers.updateCart && helpers.updateCart();
21
+ } else {
22
+ if (maxValue > 1 || minValue > 1) {
23
+ if (quantityToUpdate > maxValue || quantityToUpdate < minValue) {
24
+ helpers.showNotification && helpers.showNotification(data);
25
+ }
26
+ }
27
+
28
+ if (quantityToUpdate === 0) {
29
+ helpers.showNotification && helpers.showNotification(data);
30
+ helpers.updateCart && helpers.updateCart(messageInfo);
31
+ } else {
32
+ helpers.updateItemTotal && helpers.updateItemTotal(data, context);
33
+ helpers.updateCart && helpers.updateCart(null, context);
34
+ }
35
+ }
36
+ }
37
+ }
@@ -0,0 +1,65 @@
1
+ export function updateQuantityAction(params) {
2
+ const {
3
+ entryNumber,
4
+ quantityToUpdate,
5
+ quantityInput,
6
+ context,
7
+ addQuantityDisable,
8
+ removeQuantityDisable,
9
+ hideLoader,
10
+ loaderSelector,
11
+ updateAction,
12
+ updateQuantityOperation,
13
+ basketData,
14
+ isLocalEnv,
15
+ callActionFn,
16
+ routes,
17
+ basketSectionSelector
18
+ } = params;
19
+ console.log('case(api) to update quantity', entryNumber, quantityToUpdate);
20
+ if (!isLocalEnv) {
21
+ addQuantityDisable && addQuantityDisable(context);
22
+ const payload = {
23
+ url: `${routes.BASKET_ADD_STOCK}/${entryNumber}`,
24
+ queries: { quantity: quantityToUpdate },
25
+ type: 'PUT',
26
+ complete: () => {
27
+ removeQuantityDisable && removeQuantityDisable();
28
+ hideLoader(loaderSelector);
29
+ },
30
+ };
31
+
32
+ callActionFn(
33
+ payload,
34
+ updateAction,
35
+ quantityToUpdate,
36
+ quantityInput,
37
+ context,
38
+ (response) => {
39
+ if (response.statusMessage === 'accConfirmedMsgs') {
40
+ $(document).trigger("EEUpdateCart", {
41
+ cartEntryNumber: entryNumber,
42
+ initialCartQuantity: response.quantity - response.quantityAdded,
43
+ newCartQuantity: response.quantity,
44
+ fulfillment: context.hasClass('charity-new')
45
+ ? 'Delivery'
46
+ : context.closest(basketSectionSelector).attr('data-type'),
47
+ });
48
+ }
49
+ context.find('.order-item__action').removeClass('disabled');
50
+ }
51
+ );
52
+ } else {
53
+ updateQuantityOperation(
54
+ quantityToUpdate,
55
+ quantityInput,
56
+ context,
57
+ basketData.updateQuantity
58
+ );
59
+ addQuantityDisable && addQuantityDisable(context);
60
+ setTimeout(() => {
61
+ removeQuantityDisable && removeQuantityDisable();
62
+ hideLoader && hideLoader(loaderSelector);
63
+ }, 500);
64
+ }
65
+ }