wickes-css2 2.94.0-develop.1 → 2.94.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 (68) 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/main.css +1 -1
  5. package/build/css/my-account-main-v2.css +1 -1
  6. package/build/css/my-account-main.css +1 -1
  7. package/build/css/pages/my-account.css +1 -1
  8. package/build/css/pages/page_default-store.css +1 -0
  9. package/build/css/pages/page_personal-details.css +1 -1
  10. package/build/css/pages/page_product-details-v2-critical.css +1 -1
  11. package/build/css/pages/page_product-details-v2.css +1 -1
  12. package/build/css/pages/page_shopping-cart-v2.css +1 -1
  13. package/build/css/pdp-main-before-combine.css +1 -1
  14. package/build/css/pdp-main-critical.css +1 -1
  15. package/build/css/pdp-main-non-critical.css +1 -1
  16. package/build/css/pdp-main.css +1 -1
  17. package/build/css/plp-main.css +1 -1
  18. package/build/css/store-locator-main.css +1 -1
  19. package/build/js/account-members.min.js +1 -1
  20. package/build/js/basket.min.js +1 -1
  21. package/build/js/bundle.min.js +1 -1
  22. package/build/js/checkout.min.js +1 -1
  23. package/build/js/default-store.min.js +1 -0
  24. package/build/js/emulation.min.js +99 -3
  25. package/build/js/general.bundle.min.js +1 -1
  26. package/build/js/merged-checkout.min.js +1 -1
  27. package/build/js/page/default-store.js +44 -0
  28. package/build/js/page/personal-details.js +105 -36
  29. package/build/js/page/plp-load-more.js +1 -0
  30. package/build/js/pdp.bundle.min.js +1 -1
  31. package/build/js/personal-details.min.js +1 -1
  32. package/build/js/plp.bundle.min.js +1 -1
  33. package/build/js/project-list.min.js +1 -1
  34. package/package.json +1 -1
  35. package/src/components/account-families/actions-bar.hbs +3 -3
  36. package/src/components/default-store/current-store.hbs +60 -0
  37. package/src/components/default-store/list-of-store.hbs +39 -0
  38. package/src/components/default-store/store-form.hbs +29 -0
  39. package/src/components/default-store/store-unavailable.hbs +4 -0
  40. package/src/components/my-account/personal-details-form.hbs +5 -0
  41. package/src/components/store-details.hbs +22 -20
  42. package/src/components/store-preview.hbs +0 -11
  43. package/src/components/user-information-field.hbs +1 -1
  44. package/src/data/data_big-wins-stores.json +0 -22
  45. package/src/data/my-account/data_personal-details.json +36 -11
  46. package/src/data/my-account/page_default-store.json +158 -0
  47. package/src/elements/input.hbs +2 -2
  48. package/src/js/components/general/switchVat.js +27 -1
  49. package/src/js/components/leave-event.js +41 -2
  50. package/src/js/emulation/big-wins.js +0 -2
  51. package/src/js/emulation/default-store.js +97 -0
  52. package/src/js/emulation/forms.js +1 -1
  53. package/src/js/page/default-store.js +44 -0
  54. package/src/js/page/personal-details.js +105 -36
  55. package/src/js/page/plp-load-more.js +1 -0
  56. package/src/page_default-store-page-empty.html +48 -0
  57. package/src/page_default-store-page.html +55 -0
  58. package/src/page_personal-details-installer.html +17 -7
  59. package/src/page_personal-details.html +15 -7
  60. package/src/page_wismo-order-history-loadmore.html +3 -3
  61. package/src/scss/components/_big-wins-critical.scss +0 -1
  62. package/src/scss/components/_big-wins.scss +1 -8
  63. package/src/scss/components/_order-item-cc.scss +0 -6
  64. package/src/scss/pages/_my-account_new.scss +1 -12
  65. package/src/scss/pages/page_default-store.scss +633 -0
  66. package/src/scss/pages/page_personal-details.scss +37 -5
  67. package/src/scss/partials/_header.scss +5 -0
  68. package/src/sitemap.html +3 -1
@@ -0,0 +1,44 @@
1
+ var Wick = window.Wick || {};
2
+
3
+ Wick.DefaultStore = {
4
+ HIDDEN_CLASS_NAME: 'd-none',
5
+ el: {
6
+ searchForm: '.search-store',
7
+ $searchInput: $('.search-store #postcode'),
8
+ $btnClear: $('.search-store .btn--clear'),
9
+ $btnSubmit: $('.search-store .btn-search'),
10
+ },
11
+ getPostCode () {
12
+ return Wick.DefaultStore.el.$searchInput.val();
13
+ },
14
+ checkVisibilityOfClearButton () {
15
+ Wick.DefaultStore.el.$btnClear.toggleClass('d-block', Wick.DefaultStore.getPostCode().length > 0);
16
+ },
17
+ updateCollapseState() {
18
+ const dropdowns = $("#openingTimes, #specialTimes, #facilities");
19
+ const btn = $('[data-toggle="collapse"]');
20
+
21
+ if ($(window).width() >= 768) {
22
+ dropdowns.addClass("show");
23
+ if (btn.length) {
24
+ btn.attr("aria-expanded", "true");
25
+ }
26
+ } else {
27
+ dropdowns.removeClass("show");
28
+ if (btn.length) {
29
+ btn.attr("aria-expanded", "false");
30
+ }
31
+ }
32
+ },
33
+ init () {
34
+ Wick.DefaultStore.updateCollapseState();
35
+ $(window).resize( _.debounce(function () {
36
+ Wick.DefaultStore.updateCollapseState();
37
+ }, 200));
38
+ Wick.DefaultStore.el.$searchInput.on('input', Wick.DefaultStore.checkVisibilityOfClearButton);
39
+ }
40
+ }
41
+
42
+ $(document).ready(function () {
43
+ Wick.DefaultStore.init();
44
+ });
@@ -24,25 +24,40 @@ Wick.PersonalDetails = {
24
24
  formInvalidClass: 'form_invalid',
25
25
  notification: '.notification',
26
26
  fieldError: '.form-row.form-row_validation-error',
27
+ changePasswordPopup: '#change-password-popup',
28
+ globalMessage: '.globalMessages',
27
29
  },
28
- initialFormState: {},
29
30
  errorMessages: {
30
31
  errorFirstName: 'Please enter your first name',
31
32
  errorSurname: 'Please enter your surname',
32
- errorEmail: 'Please enter you email',
33
- },
34
- fieldToLabelMap: {
35
- titleCode: 'Title',
36
- firstName: 'First name',
37
- lastName: 'Surname',
38
- email: 'Email',
39
- tradeType: 'How would you describe yourself or your main trade',
33
+ errorEmail: 'Please enter your email address',
40
34
  },
41
35
  defaultNotificationConfig: {
42
- container: '.globalMessages .col-12',
36
+ container: '.personal-details .globalMessages',
43
37
  closeBtn: true,
44
38
  noScrolling: true,
45
39
  },
40
+ isTradeTypeLabel() {
41
+ return $(Wick.PersonalDetails.el.userForm).find('label:contains("Trade type")').length;
42
+ },
43
+ fieldToLabelMap(name) {
44
+ let currentTradeType = ''
45
+ if (name === 'tradeType') {
46
+ currentTradeType = Wick.PersonalDetails.isTradeTypeLabel()
47
+ ? 'Trade type'
48
+ : 'How would you describe yourself or your main trade';
49
+ }
50
+
51
+ const fieldMap = {
52
+ titleCode: 'Title',
53
+ firstName: 'First name',
54
+ lastName: 'Surname',
55
+ email: 'Email address',
56
+ tradeType: currentTradeType,
57
+ };
58
+
59
+ return fieldMap[name] || name;
60
+ },
46
61
  getFieldsConfigurations: function () {
47
62
  return [
48
63
  {
@@ -111,11 +126,11 @@ Wick.PersonalDetails = {
111
126
  text: response.globalMessage.message,
112
127
  type: 'success',
113
128
  });
114
- Wick.PersonalDetails.initialFormState = Wick.LeaveEvent.getState(Wick.PersonalDetails.el.userForm);
115
- Wick.PersonalDetails.updateUserInformationSection(Wick.PersonalDetails.initialFormState);
116
- Wick.PersonalDetails.updateFormFields(Wick.PersonalDetails.initialFormState);
129
+ Wick.LeaveEvent.initialFormState = Wick.LeaveEvent.getState(Wick.PersonalDetails.el.userForm);
130
+ Wick.PersonalDetails.updateUserInformationSection(Wick.LeaveEvent.initialFormState);
131
+ Wick.PersonalDetails.updateFormFields(Wick.LeaveEvent.initialFormState);
117
132
  Wick.PersonalDetails.hideForm();
118
- Wick.LeaveEvent.removeLeaveEvent();
133
+ Wick.PersonalDetails.scrollToElement(Wick.PersonalDetails.el.globalMessage);
119
134
  })
120
135
  .catch((error) => {
121
136
  Wick.Notification.show({
@@ -124,11 +139,12 @@ Wick.PersonalDetails = {
124
139
  type: 'error',
125
140
  });
126
141
  Wick.PersonalDetails.handleFieldErrors(error);
142
+ Wick.PersonalDetails.scrollToElement(Wick.PersonalDetails.el.globalMessage);
127
143
  });
128
144
  },
129
- handleFieldErrors(fieldErrors) {
130
- if (fieldErrors && fieldErrors.length) {
131
- fieldErrors.forEach((fieldError) => {
145
+ handleFieldErrors(error) {
146
+ if (error.fieldErrors && error.fieldErrors.length) {
147
+ error.fieldErrors.forEach((fieldError) => {
132
148
  const field = `#${fieldError.field}`;
133
149
  updateStylingError(field, false, fieldError.message);
134
150
  });
@@ -136,6 +152,15 @@ Wick.PersonalDetails = {
136
152
  },
137
153
  submitForm(event) {
138
154
  event.preventDefault();
155
+ Wick.PersonalDetails.trimAndRewriteInputs(Wick.PersonalDetails.el.userForm);
156
+
157
+ if (!Wick.PersonalDetails.hasUnsavedChanges()) {
158
+ Wick.PersonalDetails.hideForm();
159
+ $(Wick.PersonalDetails.el.notification).remove();
160
+ Wick.PersonalDetails.scrollToElement(Wick.PersonalDetails.el.globalMessage);
161
+ return;
162
+ }
163
+
139
164
  if (Wick.PersonalDetails.validateForm()) {
140
165
  Wick.PersonalDetails.requestToUpdateForm();
141
166
  } else {
@@ -144,6 +169,7 @@ Wick.PersonalDetails = {
144
169
  text: 'Please correct the errors below.',
145
170
  type: 'error',
146
171
  });
172
+ Wick.PersonalDetails.scrollToElement(Wick.PersonalDetails.el.globalMessage);
147
173
  }
148
174
  },
149
175
  updateUserInformationSection(personalDetails) {
@@ -153,27 +179,36 @@ Wick.PersonalDetails = {
153
179
 
154
180
  $userInformationList.empty();
155
181
 
156
- personalDetails.forEach(({ name, value }) => {
157
- const label = Wick.PersonalDetails.fieldToLabelMap[name] || name;
158
-
182
+ personalDetails.forEach(({ name, value, text }) => {
183
+ const label = Wick.PersonalDetails.fieldToLabelMap(name);
184
+ const textField = text || value
159
185
  $userInformationList.append(
160
186
  userInformationField({
161
187
  label,
162
- value,
188
+ textField,
163
189
  })
164
190
  );
165
191
  });
192
+
193
+ Wick.PersonalDetails.hideParentListItemIfLabelExists('CSRFToken');
166
194
  },
167
195
  updateFormFields(personalDetails) {
168
- personalDetails.forEach(({ name, value }) => {
196
+ personalDetails.forEach(({ name, value, text }) => {
169
197
  const field = document.querySelector(`#${name}`);
170
198
  if (field) {
171
- field.value = value || '';
172
- field.setAttribute('value', value || '');
173
-
174
- if (field.tagName === 'SELECT' || field.tagName === 'INPUT') {
175
- field.value = value || '';
176
- field.setAttribute('value', value || '');
199
+ if (field.tagName === 'INPUT') {
200
+ field.value = text || value || '';
201
+ field.setAttribute('value', text || value || '');
202
+ } else {
203
+ const options = field.querySelectorAll('option');
204
+ options.forEach(option => {
205
+ if (option.textContent.trim() === value || option.value === value) {
206
+ option.setAttribute('selected', 'selected');
207
+ field.value = option.value;
208
+ } else {
209
+ option.removeAttribute('selected');
210
+ }
211
+ });
177
212
  }
178
213
  }
179
214
  });
@@ -182,18 +217,21 @@ Wick.PersonalDetails = {
182
217
  Wick.PersonalDetails.hideForm();
183
218
  $(Wick.PersonalDetails.el.notification).remove();
184
219
  $(Wick.LeaveEvent.el.leavePopup).modal('hide');
185
- Wick.PersonalDetails.updateFormFields(Wick.PersonalDetails.initialFormState);
220
+ Wick.PersonalDetails.updateFormFields(Wick.LeaveEvent.initialFormState);
221
+ },
222
+ hasUnsavedChanges() {
223
+ const currentState = Wick.LeaveEvent.getState(Wick.PersonalDetails.el.userForm);
224
+
225
+ return !_.isEqual(currentState, Wick.LeaveEvent.initialFormState);
186
226
  },
187
227
  changePasswordHandler(event) {
188
228
  const changePasswordUrl = $(Wick.PersonalDetails.el.btnChangePassword).attr('href');
189
- const currentState = Wick.LeaveEvent.getState(Wick.PersonalDetails.el.userForm);
190
- const isDifferent = !_.isEqual(currentState, Wick.PersonalDetails.initialFormState);
191
229
 
192
- if (isDifferent) {
230
+ if (Wick.PersonalDetails.hasUnsavedChanges()) {
193
231
  event.preventDefault();
194
- $(Wick.LeaveEvent.el.leavePopup).modal('show');
232
+ $(Wick.PersonalDetails.el.changePasswordPopup).modal('show');
195
233
  Wick.LeaveEvent.proceedBrowserLeave = true;
196
- $(Wick.LeaveEvent.el.leavePopup).find(Wick.PersonalDetails.el.btnContinue).off('click').on('click', function () {
234
+ $(Wick.PersonalDetails.el.changePasswordPopup).find(Wick.PersonalDetails.el.btnContinue).off('click').on('click', function () {
197
235
  Wick.LeaveEvent.removeLeaveEvent();
198
236
  $(Wick.LeaveEvent.el.leavePopup).modal('hide');
199
237
  window.location.href = changePasswordUrl;
@@ -202,9 +240,40 @@ Wick.PersonalDetails = {
202
240
  window.location.href = changePasswordUrl;
203
241
  }
204
242
  },
243
+ hideParentListItemIfLabelExists(labelText) {
244
+ const label = $(Wick.PersonalDetails.el.userInformationList).find(`label:contains("${labelText}")`);
245
+
246
+ if (label.length > 0) {
247
+ label.closest('li').hide();
248
+ }
249
+ },
250
+ scrollToElement(element) {
251
+ const globalMessage = $(element);
252
+
253
+ if (globalMessage.length > 0) {
254
+ $('html, body').animate({
255
+ scrollTop: globalMessage.offset().top - 20
256
+ }, 300);
257
+ }
258
+ },
259
+ trimAndRewriteInputs(formSelector) {
260
+ const $form = $(formSelector);
261
+
262
+ if (!$form.length) {
263
+ return;
264
+ }
265
+
266
+ $form.find('input[type="text"], input[type="email"]').each(function () {
267
+ $(this).val($.trim($(this).val()));
268
+ });
269
+ },
205
270
  init: function () {
206
- Wick.LeaveEvent.bindEvent(Wick.PersonalDetails.el.userForm, Wick.PersonalDetails.el.btnCancel, Wick.PersonalDetails.el.btnContinue, Wick.PersonalDetails.resetFormToInitialState);
207
- Wick.PersonalDetails.initialFormState = Wick.LeaveEvent.getState(Wick.PersonalDetails.el.userForm)
271
+ Wick.LeaveEvent.bindEvent(
272
+ Wick.PersonalDetails.el.userForm,
273
+ Wick.PersonalDetails.el.btnCancel,
274
+ Wick.PersonalDetails.el.btnContinue,
275
+ Wick.PersonalDetails.resetFormToInitialState
276
+ );
208
277
 
209
278
  $(Wick.PersonalDetails.el.btnEdit).on('click', Wick.PersonalDetails.showForm);
210
279
  $(Wick.PersonalDetails.el.btnSave).on('click', Wick.PersonalDetails.submitForm);
@@ -38,6 +38,7 @@ Wick.PLPLoadMore = {
38
38
 
39
39
  Wick.PLPLoadMore.showNewCards(response);
40
40
  Wick.PLPLoadMore.toggleLoadMoreBtn();
41
+ Wick.VatToggle.reapplyDisplayClass();
41
42
  })
42
43
  .finally(() => {
43
44
  hideLoader(Wick.PLPLoadMore.el.loader);