thm-p3-configurator 0.0.460 → 0.0.463

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 (202) hide show
  1. package/dist/public/assets/images/logo-th-icon.png +0 -0
  2. package/dist/public/assets/images/logo-th-primary.png +0 -0
  3. package/dist/public/assets/images/logo-thl-icon.png +0 -0
  4. package/dist/public/assets/images/logo-thl-primary.png +0 -0
  5. package/dist/public/assets/images/logo-wb-icon.png +0 -0
  6. package/dist/public/assets/images/logo-wb-primary.png +0 -0
  7. package/dist/src/shared/__pages__/internal/InternalSingleOrderPage.js +21 -8
  8. package/dist/src/shared/__style__/_variables-external.scss +6 -0
  9. package/dist/src/shared/__style__/_variables.scss +6 -0
  10. package/dist/src/shared/__style__/components/card/_card-horizontal.scss +1 -1
  11. package/dist/src/shared/__style__/components/cart/_cart-table.scss +1 -1
  12. package/dist/src/shared/__style__/configurator/_configurator.scss +100 -0
  13. package/package.json +1 -1
  14. package/dist/src/shared/App.js +0 -116
  15. package/dist/src/shared/__api__/__tests__/queryKeyFactory.test.js +0 -150
  16. package/dist/src/shared/__api__/_dummyApi.js +0 -110
  17. package/dist/src/shared/__api__/authenticatedProxyApi.js +0 -338
  18. package/dist/src/shared/__api__/businessBranches.js +0 -18
  19. package/dist/src/shared/__api__/mutations.js +0 -881
  20. package/dist/src/shared/__api__/orderApi.js +0 -29
  21. package/dist/src/shared/__api__/publicProxyApi.js +0 -71
  22. package/dist/src/shared/__api__/queries.js +0 -1037
  23. package/dist/src/shared/__api__/queryKeyFactory.js +0 -161
  24. package/dist/src/shared/__components__/Buttons/LinkButton.js +0 -56
  25. package/dist/src/shared/__components__/Buttons/NavigationButton.js +0 -40
  26. package/dist/src/shared/__components__/Buttons/OutlinedButton.js +0 -63
  27. package/dist/src/shared/__components__/Buttons/PrimaryButton.js +0 -55
  28. package/dist/src/shared/__components__/Cards/Card.js +0 -38
  29. package/dist/src/shared/__components__/Cards/CardWide.js +0 -27
  30. package/dist/src/shared/__components__/Cards/ExpandableCard.js +0 -87
  31. package/dist/src/shared/__components__/Cards/TogglableCard.js +0 -68
  32. package/dist/src/shared/__components__/DangerAlert.js +0 -23
  33. package/dist/src/shared/__components__/EmptyState.js +0 -30
  34. package/dist/src/shared/__components__/Error.js +0 -66
  35. package/dist/src/shared/__components__/Form/CheckboxInput.js +0 -87
  36. package/dist/src/shared/__components__/Form/DatePickerInput.js +0 -127
  37. package/dist/src/shared/__components__/Form/DecimalInput.js +0 -106
  38. package/dist/src/shared/__components__/Form/DropdownInput.js +0 -219
  39. package/dist/src/shared/__components__/Form/ErrorMessage.js +0 -23
  40. package/dist/src/shared/__components__/Form/FormSteps.js +0 -64
  41. package/dist/src/shared/__components__/Form/LicensePlateInput.js +0 -117
  42. package/dist/src/shared/__components__/Form/MenuListWithSearchHint.js +0 -25
  43. package/dist/src/shared/__components__/Form/NumericInput.js +0 -182
  44. package/dist/src/shared/__components__/Form/RadioButtons.js +0 -93
  45. package/dist/src/shared/__components__/Form/RadioInput.js +0 -83
  46. package/dist/src/shared/__components__/Form/SearchableDropdownInput.js +0 -257
  47. package/dist/src/shared/__components__/Form/TextAreaInput.js +0 -91
  48. package/dist/src/shared/__components__/Form/TextInput.js +0 -97
  49. package/dist/src/shared/__components__/Form/TimePickerInput.js +0 -239
  50. package/dist/src/shared/__components__/Header.js +0 -44
  51. package/dist/src/shared/__components__/LocationsSelector/LocationAutoComplete.js +0 -229
  52. package/dist/src/shared/__components__/LocationsSelector/LocationClusteredMap.js +0 -127
  53. package/dist/src/shared/__components__/LocationsSelector/LocationClusteredTreeMarkers.js +0 -247
  54. package/dist/src/shared/__components__/LocationsSelector/LocationDetails.js +0 -295
  55. package/dist/src/shared/__components__/LocationsSelector/LocationInfo.js +0 -140
  56. package/dist/src/shared/__components__/LocationsSelector/LocationList.js +0 -190
  57. package/dist/src/shared/__components__/LocationsSelector/LocationListItem.js +0 -116
  58. package/dist/src/shared/__components__/LocationsSelector/LocationTreeMarker.js +0 -97
  59. package/dist/src/shared/__components__/LocationsSelector/index.js +0 -156
  60. package/dist/src/shared/__components__/Modal.js +0 -78
  61. package/dist/src/shared/__components__/Navbar.js +0 -82
  62. package/dist/src/shared/__components__/NavigationSteps.js +0 -143
  63. package/dist/src/shared/__components__/Pagination.js +0 -53
  64. package/dist/src/shared/__components__/ProductCard/ProductCardCheckbox.js +0 -38
  65. package/dist/src/shared/__components__/ProductCard/ProductCardDescription.js +0 -84
  66. package/dist/src/shared/__components__/ProductCard/ProductCardDiscountAlert.js +0 -57
  67. package/dist/src/shared/__components__/ProductCard/ProductCardImage.js +0 -28
  68. package/dist/src/shared/__components__/ProductCard/ProductCardPrice.js +0 -37
  69. package/dist/src/shared/__components__/ProductCard/ProductCardRibbon.js +0 -28
  70. package/dist/src/shared/__components__/ProductCard/ProductCardSpecifications.js +0 -77
  71. package/dist/src/shared/__components__/ProductCard/ProductCardUsps.js +0 -82
  72. package/dist/src/shared/__components__/ProductCard/index.js +0 -246
  73. package/dist/src/shared/__components__/ProductTable/ProductTableEditableRow.js +0 -66
  74. package/dist/src/shared/__components__/ProductTable/ProductTableHead.js +0 -32
  75. package/dist/src/shared/__components__/ProductTable/ProductTableSection.js +0 -25
  76. package/dist/src/shared/__components__/ProductTable/ProductTableSectionTotal.js +0 -46
  77. package/dist/src/shared/__components__/ProductTable/ProductTableStaticRow.js +0 -47
  78. package/dist/src/shared/__components__/ProductTable/ProductTableTotal.js +0 -41
  79. package/dist/src/shared/__components__/ProductTable/index.js +0 -127
  80. package/dist/src/shared/__components__/SingleOrderCartCard.js +0 -85
  81. package/dist/src/shared/__components__/SingleOrderProductCard.js +0 -387
  82. package/dist/src/shared/__components__/Spinners/FullPageSpinner.js +0 -73
  83. package/dist/src/shared/__components__/Spinners/InlineSpinner.js +0 -26
  84. package/dist/src/shared/__components__/Spinners/TextSpinner.js +0 -31
  85. package/dist/src/shared/__components__/UspsList.js +0 -27
  86. package/dist/src/shared/__components__/internal/InternalCustomerDetailsForm.js +0 -1090
  87. package/dist/src/shared/__constants__/__tests__/index.test.js +0 -38
  88. package/dist/src/shared/__constants__/cartTable.js +0 -35
  89. package/dist/src/shared/__constants__/cookiebot.js +0 -7
  90. package/dist/src/shared/__constants__/index.js +0 -410
  91. package/dist/src/shared/__constants__/sentry.js +0 -20
  92. package/dist/src/shared/__containers__/ANWBMembershipInput.js +0 -170
  93. package/dist/src/shared/__containers__/AppointmentForm.js +0 -551
  94. package/dist/src/shared/__containers__/BoardComputerCard.js +0 -140
  95. package/dist/src/shared/__containers__/BottomNavigationBar.js +0 -185
  96. package/dist/src/shared/__containers__/DiscountProductsSelector.js +0 -164
  97. package/dist/src/shared/__containers__/ExitIntentModal.js +0 -428
  98. package/dist/src/shared/__containers__/ExtraProductsOverview.js +0 -219
  99. package/dist/src/shared/__containers__/LicensePlateForm.js +0 -177
  100. package/dist/src/shared/__containers__/ManualSelectionForm.js +0 -277
  101. package/dist/src/shared/__containers__/ProductCartSide.js +0 -380
  102. package/dist/src/shared/__containers__/ProductDiscountCard.js +0 -169
  103. package/dist/src/shared/__containers__/ProductsCartOverview.js +0 -942
  104. package/dist/src/shared/__containers__/ProductsOverview.js +0 -515
  105. package/dist/src/shared/__containers__/QuestionsForm.js +0 -508
  106. package/dist/src/shared/__containers__/QuotationForm.js +0 -653
  107. package/dist/src/shared/__containers__/QuotationSuccessModal.js +0 -34
  108. package/dist/src/shared/__containers__/SentryWrapper.js +0 -60
  109. package/dist/src/shared/__containers__/StyleWrapper.js +0 -83
  110. package/dist/src/shared/__containers__/VehicleData.js +0 -218
  111. package/dist/src/shared/__containers__/internal/DirectVehicleSelectorModal.js +0 -125
  112. package/dist/src/shared/__containers__/internal/InternalAppointmentForm.js +0 -1791
  113. package/dist/src/shared/__containers__/internal/InternalAppointmentSuccessModal.js +0 -116
  114. package/dist/src/shared/__containers__/internal/InternalBranchSelectorModal.js +0 -449
  115. package/dist/src/shared/__containers__/internal/InternalCancelDossierEdit.js +0 -73
  116. package/dist/src/shared/__containers__/internal/InternalDiscountCodeSelector.js +0 -78
  117. package/dist/src/shared/__containers__/internal/InternalDiscountForm.js +0 -156
  118. package/dist/src/shared/__containers__/internal/InternalExtraPriceForm.js +0 -143
  119. package/dist/src/shared/__containers__/internal/InternalLicenseplateModal.js +0 -131
  120. package/dist/src/shared/__containers__/internal/InternalPriceCalculationSelector.js +0 -52
  121. package/dist/src/shared/__containers__/internal/InternalQuotationForm.js +0 -1078
  122. package/dist/src/shared/__containers__/internal/InternalQuotationSuccessModal.js +0 -114
  123. package/dist/src/shared/__containers__/internal/InternalSingleOrderCart.js +0 -110
  124. package/dist/src/shared/__containers__/internal/InternalSingleOrderFilters.js +0 -318
  125. package/dist/src/shared/__containers__/internal/InternalSingleOrderProductOverview.js +0 -198
  126. package/dist/src/shared/__containers__/internal/InternalSingleOrderSidebar.js +0 -21
  127. package/dist/src/shared/__containers__/internal/InternalSingleOrderSuccessModal.js +0 -57
  128. package/dist/src/shared/__containers__/internal/OrderTypeSelectorModal.js +0 -136
  129. package/dist/src/shared/__containers__/internal/index.js +0 -73
  130. package/dist/src/shared/__context__/ActiveMarkerContext.js +0 -44
  131. package/dist/src/shared/__context__/AuthRuntimeContext.js +0 -63
  132. package/dist/src/shared/__context__/AuthSessionContext.js +0 -187
  133. package/dist/src/shared/__context__/CountryContext.js +0 -63
  134. package/dist/src/shared/__context__/FormulaContext.js +0 -77
  135. package/dist/src/shared/__context__/OrderSessionContext.js +0 -1562
  136. package/dist/src/shared/__context__/ThemeContext.js +0 -57
  137. package/dist/src/shared/__helpers__/__tests__/articleSubgroup.test.js +0 -14
  138. package/dist/src/shared/__helpers__/__tests__/dossier.test.js +0 -82
  139. package/dist/src/shared/__helpers__/__tests__/product.test.js +0 -60
  140. package/dist/src/shared/__helpers__/__tests__/quotationFormSchema.test.js +0 -88
  141. package/dist/src/shared/__helpers__/__tests__/singleOrderArticleRules.test.js +0 -82
  142. package/dist/src/shared/__helpers__/__tests__/singleOrderCustomerDetails.test.js +0 -170
  143. package/dist/src/shared/__helpers__/__tests__/wijzigbaarGeplandeAfspraak.test.js +0 -30
  144. package/dist/src/shared/__helpers__/belgianConfiguratorInfo.js +0 -16
  145. package/dist/src/shared/__helpers__/cartTable.js +0 -449
  146. package/dist/src/shared/__helpers__/cookieManager.js +0 -44
  147. package/dist/src/shared/__helpers__/cookiebot.js +0 -30
  148. package/dist/src/shared/__helpers__/countryOptions.js +0 -89
  149. package/dist/src/shared/__helpers__/dossier.js +0 -374
  150. package/dist/src/shared/__helpers__/geolocation.js +0 -70
  151. package/dist/src/shared/__helpers__/image.js +0 -115
  152. package/dist/src/shared/__helpers__/index.js +0 -391
  153. package/dist/src/shared/__helpers__/makeAppointmentRoute.js +0 -10
  154. package/dist/src/shared/__helpers__/montageRate.js +0 -71
  155. package/dist/src/shared/__helpers__/openingHours.js +0 -211
  156. package/dist/src/shared/__helpers__/product.js +0 -290
  157. package/dist/src/shared/__helpers__/prospectTracking.js +0 -39
  158. package/dist/src/shared/__helpers__/queryClient.js +0 -23
  159. package/dist/src/shared/__helpers__/quotationFormSchema.js +0 -33
  160. package/dist/src/shared/__helpers__/singleOrderArticleRules.js +0 -54
  161. package/dist/src/shared/__helpers__/singleOrderArticles.js +0 -460
  162. package/dist/src/shared/__helpers__/singleOrderBranchSelector.js +0 -14
  163. package/dist/src/shared/__helpers__/singleOrderCartArticles.js +0 -79
  164. package/dist/src/shared/__helpers__/singleOrderCustomerDetails.js +0 -198
  165. package/dist/src/shared/__helpers__/singleOrderVehicleReceipt.js +0 -158
  166. package/dist/src/shared/__helpers__/ui.js +0 -39
  167. package/dist/src/shared/__helpers__/wijzigbaarGeplandeAfspraak.js +0 -15
  168. package/dist/src/shared/__hooks__/useAddressLookup.js +0 -62
  169. package/dist/src/shared/__hooks__/useArticleTypes.js +0 -23
  170. package/dist/src/shared/__hooks__/useAuthSession.js +0 -12
  171. package/dist/src/shared/__hooks__/useBranchTheme.js +0 -80
  172. package/dist/src/shared/__hooks__/useBreakpoint.js +0 -68
  173. package/dist/src/shared/__hooks__/useCheckEmailExists.js +0 -90
  174. package/dist/src/shared/__hooks__/useDebouncedPush.js +0 -23
  175. package/dist/src/shared/__hooks__/useIsSingleOrder.js +0 -15
  176. package/dist/src/shared/__hooks__/useIsTmg.js +0 -25
  177. package/dist/src/shared/__hooks__/useIsTowmotive.js +0 -23
  178. package/dist/src/shared/__hooks__/usePricingFormula.js +0 -30
  179. package/dist/src/shared/__hooks__/useSearchParam.js +0 -29
  180. package/dist/src/shared/__hooks__/useSessionContextReady.js +0 -20
  181. package/dist/src/shared/__hooks__/useUserLocation.js +0 -51
  182. package/dist/src/shared/__pages__/AppointmentPage.js +0 -42
  183. package/dist/src/shared/__pages__/AppointmentThanksPage.js +0 -59
  184. package/dist/src/shared/__pages__/ExtraProductsPage.js +0 -41
  185. package/dist/src/shared/__pages__/LicensePlatePage.js +0 -183
  186. package/dist/src/shared/__pages__/LocationsPage.js +0 -32
  187. package/dist/src/shared/__pages__/ManualSelectionPage.js +0 -168
  188. package/dist/src/shared/__pages__/NoProductsPage.js +0 -124
  189. package/dist/src/shared/__pages__/NotFoundPage.js +0 -27
  190. package/dist/src/shared/__pages__/OverviewPage.js +0 -79
  191. package/dist/src/shared/__pages__/ProductsPage.js +0 -48
  192. package/dist/src/shared/__pages__/QuotationPage.js +0 -38
  193. package/dist/src/shared/__pages__/QuotationThanksPage.js +0 -95
  194. package/dist/src/shared/__pages__/index.js +0 -222
  195. package/dist/src/shared/__pages__/internal/InternalAppointmentPage.js +0 -300
  196. package/dist/src/shared/__pages__/internal/InternalExtraProductsPage.js +0 -48
  197. package/dist/src/shared/__pages__/internal/InternalLicensePlatePage.js +0 -147
  198. package/dist/src/shared/__pages__/internal/InternalLocationsPage.js +0 -106
  199. package/dist/src/shared/__pages__/internal/InternalManualSelectionPage.js +0 -157
  200. package/dist/src/shared/__pages__/internal/InternalNoDossierPage.js +0 -96
  201. package/dist/src/shared/__pages__/internal/InternalNoProductsPage.js +0 -103
  202. package/dist/src/shared/__pages__/internal/InternalOverviewPage.js +0 -67
@@ -36,7 +36,9 @@ var _VehicleData = _interopRequireDefault(require("../../__containers__/VehicleD
36
36
  var _FormulaContext = require("../../__context__/FormulaContext");
37
37
  var _OrderSessionContext = require("../../__context__/OrderSessionContext");
38
38
  var _helpers__ = require("../../__helpers__");
39
+ var _singleOrderBranchSelector = require("../../__helpers__/singleOrderBranchSelector");
39
40
  var _singleOrderArticles = require("../../__helpers__/singleOrderArticles");
41
+ var _singleOrderWebshop = require("../../__helpers__/singleOrderWebshop");
40
42
  var _singleOrderVehicleReceipt = require("../../__helpers__/singleOrderVehicleReceipt");
41
43
  function _interopRequireDefault(e) {
42
44
  return e && e.__esModule ? e : {
@@ -169,8 +171,8 @@ const InternalSingleOrderPage = () => {
169
171
  if (singleOrderFormulaCode) {
170
172
  formula = singleOrderFormulaCode;
171
173
  }
172
- const webshopFormula = (0, _singleOrderArticles.getSingleOrderFormulaForWebshop)(webshop);
173
- const singleOrderCreationFormula = webshopFormula || (sessionFormula === _constants__.CONFIGURATOR_FORMULAS.TMG ? _constants__.CONFIGURATOR_FORMULAS.TMG : formula === _constants__.CONFIGURATOR_FORMULAS.THM ? _constants__.CONFIGURATOR_FORMULAS.TM : formula);
174
+ const webshopFormula = (0, _singleOrderWebshop.getSingleOrderFormulaForWebshop)(webshop);
175
+ const singleOrderCreationFormula = webshopFormula || (0, _constants__.normalizeFormulaForOrderApi)(formula);
174
176
  const themeClass = (0, _helpers__.getConfiguratorThemeClassByFormula)(formula);
175
177
  const wrapperClass = "thm-configurator-wrapper thm-configurator-wrapper--offset ".concat(themeClass);
176
178
  const {
@@ -206,8 +208,16 @@ const InternalSingleOrderPage = () => {
206
208
 
207
209
  // Don't open modal if order was just successfully created
208
210
  const orderJustCompleted = isCreateSingleOrderSuccess || isCreateShopifyOrderSuccess;
209
- const canOpenWithCurrentSession = Boolean(webshop || selectedBranch && !isLoadingBranchById);
210
- if (showProductOverview && canOpenWithCurrentSession && !licensePlate && !model && !hasActiveFilters && !hasUserDismissedModal && !orderJustCompleted) {
211
+ if ((0, _singleOrderBranchSelector.shouldOpenSingleOrderVehicleSelector)({
212
+ selectedBranch,
213
+ isLoadingBranchById,
214
+ licensePlate,
215
+ model,
216
+ hasActiveFilters,
217
+ hasUserDismissedModal,
218
+ orderJustCompleted,
219
+ showProductOverview
220
+ })) {
211
221
  setIsDirectSelectorModalOpen(true);
212
222
  } else {
213
223
  // Close modal if filters become active or we're on details page
@@ -215,7 +225,7 @@ const InternalSingleOrderPage = () => {
215
225
  setIsDirectSelectorModalOpen(false);
216
226
  }
217
227
  }
218
- }, [selectedBranch, webshop, licensePlate, model, filters, isLoadingBranchById, isDirectSelectorModalOpen, hasUserDismissedModal, isCreateSingleOrderSuccess, isCreateShopifyOrderSuccess, showProductOverview]);
228
+ }, [selectedBranch, licensePlate, model, filters, isLoadingBranchById, isDirectSelectorModalOpen, hasUserDismissedModal, isCreateSingleOrderSuccess, isCreateShopifyOrderSuccess, showProductOverview]);
219
229
  const resetOrderSession = (0, _react.useCallback)(() => {
220
230
  dispatch({
221
231
  type: _OrderSessionContext.orderSessionActions.RESET_SINGLE_ORDER
@@ -382,7 +392,7 @@ const InternalSingleOrderPage = () => {
382
392
  anderAfleveradres: customerPayload.anderAfleveradres
383
393
  });
384
394
  const apiCart = (0, _singleOrderArticles.buildSingleOrderApiCart)(singleOrderCart);
385
- if (webshop) {
395
+ if ((0, _singleOrderWebshop.isShopifyWebshop)(webshop)) {
386
396
  var _response$data;
387
397
  const response = await createShopifyOrder(_objectSpread({
388
398
  cart: apiCart,
@@ -399,7 +409,7 @@ const InternalSingleOrderPage = () => {
399
409
  }
400
410
  return;
401
411
  }
402
- const preferredDateTime = appointment !== null && appointment !== void 0 && appointment.date && appointment !== null && appointment !== void 0 && appointment.time ? (0, _helpers__.parseDateAndTimeToTimestamp)(appointment === null || appointment === void 0 ? void 0 : appointment.date, appointment === null || appointment === void 0 ? void 0 : appointment.time) : null;
412
+ const preferredDateTime = !(0, _constants__.isLooseOrderOnlyFormula)(formula) && appointment !== null && appointment !== void 0 && appointment.date && appointment !== null && appointment !== void 0 && appointment.time ? (0, _helpers__.parseDateAndTimeToTimestamp)(appointment === null || appointment === void 0 ? void 0 : appointment.date, appointment === null || appointment === void 0 ? void 0 : appointment.time) : null;
403
413
  const response = await createSingleOrder(_objectSpread({
404
414
  cart: apiCart,
405
415
  vehicle: vehiclePayload,
@@ -420,7 +430,10 @@ const InternalSingleOrderPage = () => {
420
430
  entityId: createdEntityId
421
431
  }), /*#__PURE__*/_react.default.createElement(_Header.default, {
422
432
  title: "Losse producten bestellen",
423
- subtitle: branchById !== null && branchById !== void 0 && branchById.name ? "Vestiging: ".concat(branchById === null || branchById === void 0 ? void 0 : branchById.name) : ''
433
+ subtitle: branchById !== null && branchById !== void 0 && branchById.name ? "".concat((0, _singleOrderBranchSelector.getSingleOrderCustomerSelectorCopy)({
434
+ formula,
435
+ isSingleOrderPage: true
436
+ }).selectedPrefix, ": ").concat(branchById.name) : ''
424
437
  }), showProductOverview && !isCreateSingleOrderSuccess && !isCreateShopifyOrderSuccess && /*#__PURE__*/_react.default.createElement(_DirectVehicleSelectorModal.default, {
425
438
  isOpen: isDirectSelectorModalOpen,
426
439
  onSubmit: filterModelOrLicenseplate,
@@ -19,6 +19,9 @@ $custom-secondary: #f8be2c87;
19
19
  $custom-primary: #f8bd2c;
20
20
  $tm-primary: #e30613;
21
21
  $tm-secondary: #2d0104;
22
+ $wb-primary: #006cb7;
23
+ $thl-primary: #e30613;
24
+ $th-primary: #e4132c;
22
25
  // TMG theme colors
23
26
  $tmg-primary: #bba07a;
24
27
  $tmg-secondary: #241f18;
@@ -43,6 +46,9 @@ $theme-colors: (
43
46
  'custom-secondary': $custom-secondary,
44
47
  'tm-primary': $tm-primary,
45
48
  'tm-secondary': $tm-secondary,
49
+ 'wb-primary': $wb-primary,
50
+ 'thl-primary': $thl-primary,
51
+ 'th-primary': $th-primary,
46
52
  'tmg-primary': $tmg-primary,
47
53
  'tmg-secondary': $tmg-secondary,
48
54
  'secondary': $secondary,
@@ -19,6 +19,9 @@ $custom-secondary: #f8be2c87;
19
19
  $custom-primary: #f8bd2c;
20
20
  $tm-primary: #e30613;
21
21
  $tm-secondary: #2d0104;
22
+ $wb-primary: #006cb7;
23
+ $thl-primary: #e30613;
24
+ $th-primary: #e4132c;
22
25
  // TMG theme colors
23
26
  $tmg-primary: #bba07a;
24
27
  $tmg-secondary: #241f18;
@@ -43,6 +46,9 @@ $theme-colors: (
43
46
  'custom-secondary': $custom-secondary,
44
47
  'tm-primary': $tm-primary,
45
48
  'tm-secondary': $tm-secondary,
49
+ 'wb-primary': $wb-primary,
50
+ 'thl-primary': $thl-primary,
51
+ 'th-primary': $th-primary,
46
52
  'tmg-primary': $tmg-primary,
47
53
  'tmg-secondary': $tmg-secondary,
48
54
  'secondary': $secondary,
@@ -9,7 +9,7 @@ Card Horizontal
9
9
  .card-body {
10
10
  @extend .w-100;
11
11
 
12
- font-size: 0.9rem;
12
+ font-size: 1rem;
13
13
  }
14
14
 
15
15
  &.boardcomputer {
@@ -6,7 +6,7 @@ Cart Table
6
6
 
7
7
  td,
8
8
  th {
9
- @include font-size($font-size-sm);
9
+ @include font-size($font-size-base);
10
10
 
11
11
  line-height: 1;
12
12
  }
@@ -3,6 +3,70 @@
3
3
  @import './configurator-wrapper-steps';
4
4
  @import './configurator-thc';
5
5
 
6
+ @mixin single-order-formula-theme($theme-color) {
7
+ .btn-primary {
8
+ background-color: $theme-color !important;
9
+ border-color: $theme-color !important;
10
+ }
11
+
12
+ .btn-outline-primary,
13
+ .btn-outline-theme-primary {
14
+ border-color: $theme-color;
15
+ color: $theme-color;
16
+
17
+ &:hover,
18
+ &.active {
19
+ background-color: $theme-color;
20
+ border-color: $theme-color;
21
+ color: $white;
22
+ }
23
+ }
24
+
25
+ .form-dots__item.active,
26
+ .form__radio-item.active,
27
+ .steps .btn.active,
28
+ .form__radio-default-item span::after,
29
+ .pagination .page-item.active .page-link,
30
+ .pagination .page-item:hover .page-link {
31
+ background-color: $theme-color;
32
+ }
33
+
34
+ .card-footer .btn-check,
35
+ .form__radio-item.active,
36
+ .form__radio-default-item span::before,
37
+ .dealer-item.active,
38
+ .card__link.card__horizontal.active,
39
+ .card__link.card__horizontal:hover,
40
+ .pagination .page-link,
41
+ .pagination .page-item.active .page-link,
42
+ .pagination .page-item:hover .page-link {
43
+ border-color: $theme-color !important;
44
+ }
45
+
46
+ .form-check--sm,
47
+ .form-check,
48
+ .form-label span,
49
+ .pagination .page-link,
50
+ .text-primary {
51
+ color: $theme-color !important;
52
+ }
53
+
54
+ .bg-primary {
55
+ background-color: $theme-color !important;
56
+ }
57
+
58
+ .navbar {
59
+ background-color: $theme-color !important;
60
+ }
61
+
62
+ .form-select {
63
+ &[class*='is-focused'] {
64
+ border-color: $theme-color !important;
65
+ box-shadow: 0 0 0 0.2rem rgba($theme-color, 0.25) !important;
66
+ }
67
+ }
68
+ }
69
+
6
70
  /* ==========================================================================
7
71
  Configurator
8
72
  ========================================================================== */
@@ -327,6 +391,27 @@ Configurator TMG theme
327
391
  }
328
392
  }
329
393
 
394
+ @each $theme-name,
395
+ $theme-color in ('wb': $wb-primary, 'thl': $thl-primary, 'th': $th-primary)
396
+ {
397
+ .thm-configurator.#{$theme-name} {
398
+ @include single-order-formula-theme($theme-color);
399
+
400
+ .loader,
401
+ .hero {
402
+ background-color: $theme-color !important;
403
+ }
404
+ }
405
+
406
+ .thm-configurator-wrapper.#{$theme-name} {
407
+ @include single-order-formula-theme($theme-color);
408
+ }
409
+
410
+ .thm-configurator-home.#{$theme-name} {
411
+ background-color: $theme-color !important;
412
+ }
413
+ }
414
+
330
415
  /* ==========================================================================
331
416
  Configurator Home
332
417
  ========================================================================== */
@@ -443,3 +528,18 @@ Configurator Form
443
528
  @extend .my-3;
444
529
  }
445
530
  }
531
+
532
+ .thm-configurator.wb,
533
+ .thm-configurator.thl,
534
+ .thm-configurator.th {
535
+ .loader,
536
+ .hero,
537
+ .navbar {
538
+ background-color: #111 !important;
539
+ }
540
+
541
+ .hero__logo--webshop {
542
+ max-height: 4.5rem;
543
+ width: auto;
544
+ }
545
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "thm-p3-configurator",
3
- "version": "0.0.460",
3
+ "version": "0.0.463",
4
4
  "main": "dist/index.js",
5
5
  "module": "dist/index.js",
6
6
  "author": "EnoRm.",
@@ -1,116 +0,0 @@
1
- "use strict";
2
-
3
- require("core-js/modules/es.string.starts-with.js");
4
- require("core-js/modules/es.weak-map.js");
5
- require("core-js/modules/web.dom-collections.iterator.js");
6
- require("core-js/modules/es.weak-map.js");
7
- require("core-js/modules/web.dom-collections.iterator.js");
8
- Object.defineProperty(exports, "__esModule", {
9
- value: true
10
- });
11
- exports.default = void 0;
12
- require("core-js/modules/es.string.starts-with.js");
13
- var _react = _interopRequireWildcard(require("react"));
14
- require("react-datepicker/src/stylesheets/datepicker-cssmodules.scss");
15
- var _reactGtmModule = _interopRequireDefault(require("react-gtm-module"));
16
- var _reactHotLoader = require("react-hot-loader");
17
- var _reactQuery = require("react-query");
18
- var _reactRouterDom = require("react-router-dom");
19
- var _Navbar = _interopRequireDefault(require("./__components__/Navbar"));
20
- var _constants__ = require("./__constants__");
21
- var _SentryWrapper = _interopRequireDefault(require("./__containers__/SentryWrapper"));
22
- var _pages__ = _interopRequireDefault(require("./__pages__"));
23
- var _TEST_ONLY_INTERNAL_ROUTES = _interopRequireDefault(require("./__pages__/internal/__TEST_ONLY_INTERNAL_ROUTES"));
24
- var _StyleWrapper = _interopRequireDefault(require("./__containers__/StyleWrapper"));
25
- var _InternalBranchSelectorModal = _interopRequireDefault(require("./__containers__/internal/InternalBranchSelectorModal"));
26
- var _ActiveMarkerContext = require("./__context__/ActiveMarkerContext");
27
- var _CountryContext = require("./__context__/CountryContext");
28
- var _FormulaContext = require("./__context__/FormulaContext");
29
- var _OrderSessionContext = require("./__context__/OrderSessionContext");
30
- var _cookiebot = require("./__helpers__/cookiebot");
31
- var _queryClient = _interopRequireDefault(require("./__helpers__/queryClient"));
32
- var _Datalayer = require("./__services__/Datalayer");
33
- var _Experiments = _interopRequireDefault(require("./__services__/Experiments"));
34
- var _mainExternal = _interopRequireDefault(require("./__style__/main-external.scss"));
35
- var _main = _interopRequireDefault(require("./__style__/main.scss"));
36
- function _interopRequireDefault(e) {
37
- return e && e.__esModule ? e : {
38
- default: e
39
- };
40
- }
41
- function _getRequireWildcardCache(e) {
42
- if ("function" != typeof WeakMap) return null;
43
- var r = new WeakMap(),
44
- t = new WeakMap();
45
- return (_getRequireWildcardCache = function _getRequireWildcardCache(e) {
46
- return e ? t : r;
47
- })(e);
48
- }
49
- function _interopRequireWildcard(e, r) {
50
- if (!r && e && e.__esModule) return e;
51
- if (null === e || "object" != typeof e && "function" != typeof e) return {
52
- default: e
53
- };
54
- var t = _getRequireWildcardCache(r);
55
- if (t && t.has(e)) return t.get(e);
56
- var n = {
57
- __proto__: null
58
- },
59
- a = Object.defineProperty && Object.getOwnPropertyDescriptor;
60
- for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) {
61
- var i = a ? Object.getOwnPropertyDescriptor(e, u) : null;
62
- i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u];
63
- }
64
- return n.default = e, t && t.set(e, n), n;
65
- }
66
- _reactGtmModule.default.initialize({
67
- gtmId: APP_CONFIG.googleTagManagerId || 'GTM-TC67SZ4'
68
- });
69
- window.styles = APP_CONFIG.internal ? _main.default : _mainExternal.default;
70
- const ROUTE_PROGRESS_EVENTS = {
71
- '/configurator/trekhaakpakket': 'configurator_step_trekhaakpakket',
72
- '/configurator/toebehoren': 'configurator_step_toebehoren',
73
- '/configurator/overzicht': 'configurator_step_overzicht',
74
- '/configurator/montagelocatie': 'configurator_step_montagelocatie',
75
- '/configurator/gegevens': 'configurator_step_afspraak_maken',
76
- '/configurator/offerte': 'configurator_step_offerte'
77
- };
78
- const ConfiguratorProgressTracker = () => {
79
- const location = (0, _reactRouterDom.useLocation)();
80
- const hasTrackedStartRef = (0, _react.useRef)(false);
81
- const lastTrackedPathRef = (0, _react.useRef)('');
82
- (0, _react.useEffect)(() => {
83
- const {
84
- pathname
85
- } = location;
86
- if (!hasTrackedStartRef.current && (pathname === '/' || pathname.startsWith('/configurator'))) {
87
- hasTrackedStartRef.current = true;
88
- (0, _Datalayer.pushToDataLayer)({
89
- event: 'start_configurator'
90
- });
91
- }
92
- const routeEvent = ROUTE_PROGRESS_EVENTS[pathname];
93
- if (!routeEvent || lastTrackedPathRef.current === pathname) {
94
- return;
95
- }
96
- lastTrackedPathRef.current = pathname;
97
- (0, _Datalayer.pushToDataLayer)({
98
- event: routeEvent
99
- });
100
- }, [location]);
101
- return null;
102
- };
103
- const App = () => {
104
- (0, _cookiebot.listenToCookiebotEvents)();
105
- (0, _react.useEffect)(() => {
106
- (0, _Experiments.default)();
107
- });
108
- return /*#__PURE__*/_react.default.createElement(_SentryWrapper.default, null, /*#__PURE__*/_react.default.createElement(_FormulaContext.FormulaController, {
109
- defaultFormula: APP_CONFIG.internal ? null : _constants__.CONFIGURATOR_FORMULAS.THM
110
- }, /*#__PURE__*/_react.default.createElement(_CountryContext.CountryController, {
111
- defaultCountry: APP_CONFIG.country
112
- }, /*#__PURE__*/_react.default.createElement(_OrderSessionContext.OrderSessionController, null, /*#__PURE__*/_react.default.createElement(_reactQuery.QueryClientProvider, {
113
- client: _queryClient.default
114
- }, /*#__PURE__*/_react.default.createElement(_reactRouterDom.BrowserRouter, null, /*#__PURE__*/_react.default.createElement(_reactHotLoader.AppContainer, null, /*#__PURE__*/_react.default.createElement(_ActiveMarkerContext.ActiveMarkerProvider, null, /*#__PURE__*/_react.default.createElement(_StyleWrapper.default, null, !APP_CONFIG.internal && /*#__PURE__*/_react.default.createElement(_Navbar.default, null), APP_CONFIG.internal && /*#__PURE__*/_react.default.createElement(_InternalBranchSelectorModal.default, null), !APP_CONFIG.internal && /*#__PURE__*/_react.default.createElement(ConfiguratorProgressTracker, null), /*#__PURE__*/_react.default.createElement(_pages__.default, null))))))))));
115
- };
116
- var _default = exports.default = App;
@@ -1,150 +0,0 @@
1
- "use strict";
2
-
3
- require("core-js/modules/es.json.stringify.js");
4
- require("core-js/modules/es.json.stringify.js");
5
- var _queryKeyFactory = require("../queryKeyFactory");
6
- describe('queryKeyFactory', () => {
7
- beforeEach(() => {
8
- global.APP_CONFIG = {
9
- internal: true
10
- };
11
- });
12
- it('normalizes buildYear into constructionYear without mutating input', () => {
13
- const params = {
14
- buildYear: '2024',
15
- formula: 'THC',
16
- skipFilters: false,
17
- discountAmount: 0,
18
- priceCalculationDate: '2026-03-09'
19
- };
20
- const normalized = (0, _queryKeyFactory.normalizeOrderParams)(params);
21
- expect(normalized).toEqual({
22
- constructionYear: '2024',
23
- formula: 'THC',
24
- skipFilters: false,
25
- discountAmount: 0,
26
- priceCalculationDate: '2026-03-09'
27
- });
28
- expect(params).toEqual({
29
- buildYear: '2024',
30
- formula: 'THC',
31
- skipFilters: false,
32
- discountAmount: 0,
33
- priceCalculationDate: '2026-03-09'
34
- });
35
- });
36
- it('preserves constructionYear when buildYear is absent', () => {
37
- expect((0, _queryKeyFactory.normalizeOrderParams)({
38
- formula: 'THC',
39
- constructionYear: '02/2020 tot heden'
40
- })).toEqual({
41
- formula: 'THC',
42
- constructionYear: '02/2020 tot heden'
43
- });
44
- });
45
- it('drops priceCalculationDate for external mode', () => {
46
- global.APP_CONFIG = {
47
- internal: false
48
- };
49
- expect((0, _queryKeyFactory.normalizeOrderParams)({
50
- formula: 'THC',
51
- priceCalculationDate: '2026-03-09'
52
- })).toEqual({
53
- formula: 'THC'
54
- });
55
- });
56
- it('serializes order params in stable priority order', () => {
57
- const first = (0, _queryKeyFactory.serializeOrderParams)({
58
- cart: '[]',
59
- formula: 'THC',
60
- buildYear: '2024',
61
- licensePlate: '12AB34',
62
- extraPriceAmount: 10,
63
- durationAnswer: 'Lang'
64
- });
65
- const second = (0, _queryKeyFactory.serializeOrderParams)({
66
- extraPriceAmount: 10,
67
- durationAnswer: 'Lang',
68
- licensePlate: '12AB34',
69
- formula: 'THC',
70
- cart: '[]',
71
- buildYear: '2024'
72
- });
73
- expect(first).toBe('licensePlate=12AB34&formula=THC&constructionYear=2024&durationAnswer=Lang&extraPriceAmount=10');
74
- expect(second).toBe(first);
75
- });
76
- it('preserves legacy getOrder request semantics by omitting falsy values', () => {
77
- expect((0, _queryKeyFactory.serializeOrderParams)({
78
- licensePlate: '12AB34',
79
- formula: 'THC',
80
- discountAmount: 0,
81
- skipFilters: false,
82
- extraPriceAmount: null
83
- })).toBe('licensePlate=12AB34&formula=THC');
84
- });
85
-
86
- // Hyper adds the board-computer update when selectBoardComputerUpdate is
87
- // absent, so an opt-out only survives when the false is serialized
88
- it('keeps selectBoardComputerUpdate for both true and false', () => {
89
- expect((0, _queryKeyFactory.serializeOrderParams)({
90
- licensePlate: '12AB34',
91
- formula: 'THC',
92
- selectBoardComputerUpdate: false
93
- })).toBe('licensePlate=12AB34&formula=THC&selectBoardComputerUpdate=false');
94
- expect((0, _queryKeyFactory.serializeOrderParams)({
95
- licensePlate: '12AB34',
96
- formula: 'THC',
97
- selectBoardComputerUpdate: true
98
- })).toBe('licensePlate=12AB34&formula=THC&selectBoardComputerUpdate=true');
99
- });
100
- it('gives opting in and opting out of the board computer distinct query keys', () => {
101
- expect((0, _queryKeyFactory.getOrderQueryKey)({
102
- licensePlate: '12AB34',
103
- formula: 'THC',
104
- selectBoardComputerUpdate: true
105
- })).not.toEqual((0, _queryKeyFactory.getOrderQueryKey)({
106
- licensePlate: '12AB34',
107
- formula: 'THC',
108
- selectBoardComputerUpdate: false
109
- }));
110
- });
111
- it('builds order query keys from serialized order params', () => {
112
- expect((0, _queryKeyFactory.getOrderQueryKey)({
113
- licensePlate: '12AB34',
114
- formula: 'THC'
115
- })).toEqual(['order', 'licensePlate=12AB34&formula=THC']);
116
- });
117
- it('includes formula in brands and build-years keys', () => {
118
- expect((0, _queryKeyFactory.getBrandsQueryKey)('TMG')).toEqual(['brands', 'TMG']);
119
- expect((0, _queryKeyFactory.getBrandsQueryKey)('TBE')).toEqual(['brands', 'TBE']);
120
- expect((0, _queryKeyFactory.getBuildYearsQueryKey)({
121
- brand: 'Volvo',
122
- formula: 'TMG'
123
- })).toEqual(['buildYears', 'Volvo', 'TMG']);
124
- });
125
- it('includes formula in single-order-articles keys', () => {
126
- const first = (0, _queryKeyFactory.getSingleOrderArticlesKey)({
127
- filters: {
128
- brand: 'Volvo',
129
- articleNumber: '123'
130
- },
131
- formula: 'TMG',
132
- branchId: 'branch-1',
133
- webshop: false
134
- });
135
- const second = (0, _queryKeyFactory.getSingleOrderArticlesKey)({
136
- filters: {
137
- articleNumber: '123',
138
- brand: 'Volvo'
139
- },
140
- formula: 'TMG',
141
- branchId: 'branch-1',
142
- webshop: false
143
- });
144
- expect(first).toEqual(['singleOrderArticles', JSON.stringify({
145
- articleNumber: '123',
146
- brand: 'Volvo'
147
- }), 'TMG', 'branch-1', false]);
148
- expect(second).toEqual(first);
149
- });
150
- });
@@ -1,110 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.dummyApi = void 0;
7
- var _bikeCarrier = _interopRequireDefault(require("../../../public/assets/images/dummy/bike-carrier.jpg"));
8
- var _extra = _interopRequireDefault(require("../../../public/assets/images/dummy/extra.png"));
9
- var _licensePlateWhite = _interopRequireDefault(require("../../../public/assets/images/dummy/license-plate-white.png"));
10
- var _towbar = _interopRequireDefault(require("../../../public/assets/images/dummy/towbar-1.jpg"));
11
- var _towbar2 = _interopRequireDefault(require("../../../public/assets/images/dummy/towbar-2.jpg"));
12
- function _interopRequireDefault(e) {
13
- return e && e.__esModule ? e : {
14
- default: e
15
- };
16
- }
17
- const dummyApi = exports.dummyApi = {
18
- getCart: () => ({
19
- data: {
20
- editable: [{
21
- id: 'onetwothree',
22
- title: 'Trekhaken verticaal afneembaar',
23
- price: 50,
24
- image: _towbar.default,
25
- amount: 50
26
- }],
27
- static: [{
28
- id: 'onetwothree',
29
- title: 'Trekhaken verticaal afneembaar',
30
- price: 100,
31
- image: _towbar2.default
32
- }]
33
- }
34
- }),
35
- getExtraProducts: () => ({
36
- data: [{
37
- isRecommended: false,
38
- productId: 10,
39
- productTitle: 'Witte kentekenplaat',
40
- productDescription: "Witte kentekenplaat voor fietsendragers en aanhangwagens/caravans tot 750 kg.",
41
- productImage: _licensePlateWhite.default,
42
- productPrice: 249.99,
43
- productDiscountedPrice: 199.99,
44
- productCategory: 'Handige Accessoires'
45
- }, {
46
- isRecommended: false,
47
- productId: 50,
48
- productTitle: 'Verloopstekker 13- naar 7-polig',
49
- productDescription: "D.m.v een verloopstekker kunnen ook oudere types\naanhangers, boot- of paardentrailers en fietsendragers\nworden aangesloten op uw 13-polige kabelset.",
50
- productImage: _extra.default,
51
- productPrice: 249.99,
52
- productDiscountedPrice: 199.99,
53
- productCategory: 'Handige Accessoires'
54
- }, {
55
- productId: 20,
56
- isRecommended: false,
57
- productTitle: 'Yakima Foldclick 2',
58
- productDescription: "D.m.v een verloopstekker kunnen ook oudere types\naanhangers, boot- of paardentrailers en\nfietsendragers worden aangesloten op uw\n13-polige kabelset",
59
- productImage: _bikeCarrier.default,
60
- productPrice: 299.99,
61
- productDiscountedPrice: 249.99,
62
- productCategory: 'Fietsendragers'
63
- }, {
64
- productId: 30,
65
- isRecommended: false,
66
- productTitle: 'Yakima Foldclick 3',
67
- productDescription: "D.m.v een verloopstekker kunnen ook oudere types\n aanhangers, boot- of paardentrailers en\n fietsendragers worden aangesloten op uw\n 13-polige kabelset",
68
- productImage: _bikeCarrier.default,
69
- productPrice: 500.99,
70
- productDiscountedPrice: 400.99,
71
- productCategory: 'Fietsendragers'
72
- }]
73
- }),
74
- getLocations: () => {
75
- return {
76
- data: [{
77
- description: 'Garagebedrijf Peter Peeters is het adres voor trekhaakmontages in Zuiderhout. \r\rBij ons kunt u rekenen op deskundige montage van trekhaak en kabelset. \r\rTevens kunnen wij u uitstekend adviseren over de producten en toepassingen. \r\rKom snel langs of plan een afspraak in.',
78
- title: 'Trekhaak Montage vestiging',
79
- postCode: '4921PJ',
80
- street: 'Brieltjenspolder',
81
- city: 'Made',
82
- telephoneNumber: '085-0004122',
83
- latitude: 51.67353,
84
- longitude: 4.81503,
85
- id: 165522,
86
- image: 'https://trekhaak-labels-api-production.s3.eu-central-1.amazonaws.com/6a88a0b9-5885-4f2a-9243-1dd2e9773fa5'
87
- }, {
88
- description: 'Garagebedrijf Peter Peeters is het adres voor trekhaakmontages in Zuiderhout. \r\rBij ons kunt u rekenen op deskundige montage van trekhaak en kabelset. \r\rTevens kunnen wij u uitstekend adviseren over de producten en toepassingen. \r\rKom snel langs of plan een afspraak in.',
89
- title: 'Misker Hardenberg B.V. (JAMES)',
90
- postCode: '7772SG',
91
- street: 'J.C. Kellerlaan',
92
- city: 'Hardenberg',
93
- telephoneNumber: '0523 - 262 777',
94
- latitude: 52.56026,
95
- longitude: 6.62978,
96
- id: 1666
97
- }]
98
- };
99
- },
100
- createQuotation: quotationInput => ({
101
- data: {
102
- success: true
103
- }
104
- }),
105
- createAppointment: appointmentInput => ({
106
- data: {
107
- success: true
108
- }
109
- })
110
- };