thm-p3-configurator 0.0.381 → 0.0.382
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/dist/src/shared/__components__/LocationsSelector/index.js +7 -1
- package/dist/src/shared/__containers__/ManualSelectionForm.js +2 -1
- package/dist/src/shared/__containers__/ProductCartSide.js +3 -1
- package/dist/src/shared/__containers__/ProductsCartOverview.js +3 -1
- package/dist/src/shared/__helpers__/__tests__/product.test.js +13 -0
- package/dist/src/shared/__helpers__/belgianConfiguratorInfo.js +16 -0
- package/dist/src/shared/__helpers__/index.js +14 -2
- package/dist/src/shared/__helpers__/product.js +13 -1
- package/dist/src/shared/__pages__/OverviewPage.js +7 -1
- package/dist/src/shared/__pages__/index.js +15 -2
- package/package.json +1 -1
|
@@ -12,8 +12,10 @@ var _reactGoogleMaps = require("@vis.gl/react-google-maps");
|
|
|
12
12
|
var _react = _interopRequireWildcard(require("react"));
|
|
13
13
|
var _queries = require("../../__api__/queries");
|
|
14
14
|
var _ActiveMarkerContext = require("../../__context__/ActiveMarkerContext");
|
|
15
|
+
var _CountryContext = require("../../__context__/CountryContext");
|
|
15
16
|
var _FormulaContext = require("../../__context__/FormulaContext");
|
|
16
17
|
var _OrderSessionContext = require("../../__context__/OrderSessionContext");
|
|
18
|
+
var _belgianConfiguratorInfo = require("../../__helpers__/belgianConfiguratorInfo");
|
|
17
19
|
var _helpers__ = require("../../__helpers__");
|
|
18
20
|
var _useBreakpoint = _interopRequireDefault(require("../../__hooks__/useBreakpoint"));
|
|
19
21
|
var _useUserLocation = _interopRequireDefault(require("../../__hooks__/useUserLocation"));
|
|
@@ -68,6 +70,8 @@ const LocationsSelector = /*#__PURE__*/_react.default.memo(() => {
|
|
|
68
70
|
const screen = (0, _useBreakpoint.default)();
|
|
69
71
|
const isDesktop = screen.size >= 1200;
|
|
70
72
|
const formula = (0, _FormulaContext.useFormula)();
|
|
73
|
+
const country = (0, _CountryContext.useCountry)();
|
|
74
|
+
const showBelgianLocationNotice = !APP_CONFIG.internal && (0, _belgianConfiguratorInfo.isBelgianConfigurator)(country);
|
|
71
75
|
const [{
|
|
72
76
|
franchiseName
|
|
73
77
|
}] = (0, _OrderSessionContext.useOrderSession)();
|
|
@@ -137,7 +141,9 @@ const LocationsSelector = /*#__PURE__*/_react.default.memo(() => {
|
|
|
137
141
|
className: (0, _helpers__.withStyle)('dealer-sidebar col-xl-4 mt-3 mt-xl-0')
|
|
138
142
|
}, /*#__PURE__*/_react.default.createElement(_LocationAutoComplete.default, {
|
|
139
143
|
onLocationUpdate: handleLocationUpdate
|
|
140
|
-
}),
|
|
144
|
+
}), showBelgianLocationNotice && /*#__PURE__*/_react.default.createElement("p", {
|
|
145
|
+
className: (0, _helpers__.withStyle)('small text-muted mb-3')
|
|
146
|
+
}, _belgianConfiguratorInfo.BELGIAN_LOCATION_SEARCH_NOTICE), franchiseName && /*#__PURE__*/_react.default.createElement("h6", {
|
|
141
147
|
className: (0, _helpers__.withStyle)('my-2')
|
|
142
148
|
}, "Keten: ", franchiseName), /*#__PURE__*/_react.default.createElement(_LocationList.default, {
|
|
143
149
|
locationIds: allIds,
|
|
@@ -120,6 +120,7 @@ const ManualSelectionForm = _ref => {
|
|
|
120
120
|
} = (0, _reactRouter.useLocation)();
|
|
121
121
|
const searchParams = new URLSearchParams(search);
|
|
122
122
|
const history = (0, _reactRouter.useHistory)();
|
|
123
|
+
const canSwitchToLicenseplate = canSearchLicenseplate && !(0, _helpers__.isBelgianDomain)();
|
|
123
124
|
const handleLicenseSwitch = () => {
|
|
124
125
|
(0, _Datalayer.pushToDataLayer)({
|
|
125
126
|
event: 'configurator',
|
|
@@ -251,7 +252,7 @@ const ManualSelectionForm = _ref => {
|
|
|
251
252
|
value: model,
|
|
252
253
|
label: model
|
|
253
254
|
}
|
|
254
|
-
}),
|
|
255
|
+
}), canSwitchToLicenseplate && /*#__PURE__*/_react.default.createElement("div", {
|
|
255
256
|
className: (0, _helpers__.withStyle)('row mt-3')
|
|
256
257
|
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
257
258
|
className: (0, _helpers__.withStyle)('d-grid gap-2')
|
|
@@ -121,6 +121,7 @@ const ProductCartSide = () => {
|
|
|
121
121
|
consumerDiscounts,
|
|
122
122
|
touchedConsumerDiscounts
|
|
123
123
|
});
|
|
124
|
+
const shouldRequestUnfilteredProducts = (0, _product.shouldRequestUnfilteredProductsForCart)(cartInput);
|
|
124
125
|
const {
|
|
125
126
|
cart,
|
|
126
127
|
totals,
|
|
@@ -143,7 +144,8 @@ const ProductCartSide = () => {
|
|
|
143
144
|
montageRate: (0, _montageRate.toApiMontageRate)(montageRate),
|
|
144
145
|
extraPriceAmount,
|
|
145
146
|
discountCode,
|
|
146
|
-
priceCalculationDate
|
|
147
|
+
priceCalculationDate,
|
|
148
|
+
skipFilters: shouldRequestUnfilteredProducts
|
|
147
149
|
});
|
|
148
150
|
const marketCorrection = cart === null || cart === void 0 ? void 0 : cart.find(item => item.articleNumber === 'MC');
|
|
149
151
|
const extraPriceItem = cart === null || cart === void 0 ? void 0 : cart.find(item => item.articleNumber === _cartTable.EXTRA_PRICE_ARTICLE_NUMBER);
|
|
@@ -347,6 +347,7 @@ const ProductCartTable = () => {
|
|
|
347
347
|
consumerDiscounts,
|
|
348
348
|
touchedConsumerDiscounts
|
|
349
349
|
});
|
|
350
|
+
const shouldRequestUnfilteredProducts = (0, _product.shouldRequestUnfilteredProductsForCart)(cartInput);
|
|
350
351
|
const durationAnswerForQuery = durationAnswerIsPrefilled ? undefined : durationAnswer;
|
|
351
352
|
const {
|
|
352
353
|
cart,
|
|
@@ -368,7 +369,8 @@ const ProductCartTable = () => {
|
|
|
368
369
|
discountPercentage,
|
|
369
370
|
formula,
|
|
370
371
|
montageRate: (0, _montageRate.toApiMontageRate)(montageRate),
|
|
371
|
-
extraPriceAmount
|
|
372
|
+
extraPriceAmount,
|
|
373
|
+
skipFilters: shouldRequestUnfilteredProducts
|
|
372
374
|
});
|
|
373
375
|
const montageHours = Number(totals === null || totals === void 0 ? void 0 : totals.montageTime) || 0;
|
|
374
376
|
const montageTotalExcl = Number((totals === null || totals === void 0 ? void 0 : totals.totalMontageExclVat) || 0);
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _product = require("../product");
|
|
4
|
+
describe('product helpers', () => {
|
|
5
|
+
it('requests unfiltered products when cart-selected articles need to be resolved', () => {
|
|
6
|
+
expect((0, _product.shouldRequestUnfilteredProductsForCart)()).toBe(false);
|
|
7
|
+
expect((0, _product.shouldRequestUnfilteredProductsForCart)([])).toBe(false);
|
|
8
|
+
expect((0, _product.shouldRequestUnfilteredProductsForCart)([{
|
|
9
|
+
articleNumber: 'TOWBAR-HIDDEN',
|
|
10
|
+
quantity: 1
|
|
11
|
+
}])).toBe(true);
|
|
12
|
+
});
|
|
13
|
+
});
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
require("core-js/modules/es.regexp.to-string.js");
|
|
4
|
+
require("core-js/modules/es.string.trim.js");
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.isBelgianConfigurator = exports.BELGIAN_PRICE_OVERVIEW_NOTICE = exports.BELGIAN_LOCATION_SEARCH_NOTICE = void 0;
|
|
9
|
+
require("core-js/modules/es.regexp.to-string.js");
|
|
10
|
+
require("core-js/modules/es.string.trim.js");
|
|
11
|
+
const BELGIAN_PRICE_OVERVIEW_NOTICE = exports.BELGIAN_PRICE_OVERVIEW_NOTICE = 'De prijs uit de offerte geldt alleen voor montage op een Belgische locatie.';
|
|
12
|
+
const BELGIAN_LOCATION_SEARCH_NOTICE = exports.BELGIAN_LOCATION_SEARCH_NOTICE = 'Montagetarieven kunnen per land verschillen.';
|
|
13
|
+
const isBelgianConfigurator = country => {
|
|
14
|
+
return (country === null || country === void 0 ? void 0 : country.toString().trim().toUpperCase()) === 'BE';
|
|
15
|
+
};
|
|
16
|
+
exports.isBelgianConfigurator = isBelgianConfigurator;
|
|
@@ -4,6 +4,7 @@ require("core-js/modules/es.array.reduce.js");
|
|
|
4
4
|
require("core-js/modules/es.object.from-entries.js");
|
|
5
5
|
require("core-js/modules/es.regexp.exec.js");
|
|
6
6
|
require("core-js/modules/es.regexp.to-string.js");
|
|
7
|
+
require("core-js/modules/es.string.ends-with.js");
|
|
7
8
|
require("core-js/modules/es.string.replace.js");
|
|
8
9
|
require("core-js/modules/es.string.trim.js");
|
|
9
10
|
require("core-js/modules/esnext.iterator.constructor.js");
|
|
@@ -30,16 +31,18 @@ var _exportNames = {
|
|
|
30
31
|
parseArrayToInputOptions: true,
|
|
31
32
|
truncateAtPipe: true,
|
|
32
33
|
parseJson: true,
|
|
34
|
+
isBelgianDomain: true,
|
|
33
35
|
removeNullishProps: true,
|
|
34
36
|
createSlug: true,
|
|
35
37
|
getProxyApiErrorMessage: true,
|
|
36
38
|
formatMontageTime: true
|
|
37
39
|
};
|
|
38
|
-
exports.withStyle = exports.truncateAtPipe = exports.removeNullishProps = exports.reduceYupErrorsToObject = exports.pushToDataLayer = exports.parseJson = exports.parseDateAndTimeToTimestamp = exports.parseArrayToInputOptions = exports.normalizeArray = exports.groupByKey = exports.getProxyApiErrorMessage = exports.getConfiguratorThemeClassByFormula = exports.getConfiguratorThemeClass = exports.getConfiguratorButtonVariant = exports.formatPrice = exports.formatMontageTime = exports.createSlug = void 0;
|
|
40
|
+
exports.withStyle = exports.truncateAtPipe = exports.removeNullishProps = exports.reduceYupErrorsToObject = exports.pushToDataLayer = exports.parseJson = exports.parseDateAndTimeToTimestamp = exports.parseArrayToInputOptions = exports.normalizeArray = exports.isBelgianDomain = exports.groupByKey = exports.getProxyApiErrorMessage = exports.getConfiguratorThemeClassByFormula = exports.getConfiguratorThemeClass = exports.getConfiguratorButtonVariant = exports.formatPrice = exports.formatMontageTime = exports.createSlug = void 0;
|
|
39
41
|
require("core-js/modules/es.array.reduce.js");
|
|
40
42
|
require("core-js/modules/es.object.from-entries.js");
|
|
41
43
|
require("core-js/modules/es.regexp.exec.js");
|
|
42
44
|
require("core-js/modules/es.regexp.to-string.js");
|
|
45
|
+
require("core-js/modules/es.string.ends-with.js");
|
|
43
46
|
require("core-js/modules/es.string.replace.js");
|
|
44
47
|
require("core-js/modules/es.string.trim.js");
|
|
45
48
|
require("core-js/modules/esnext.iterator.constructor.js");
|
|
@@ -280,11 +283,20 @@ const parseJson = string => {
|
|
|
280
283
|
return null;
|
|
281
284
|
}
|
|
282
285
|
};
|
|
286
|
+
exports.parseJson = parseJson;
|
|
287
|
+
const isBelgianDomain = () => {
|
|
288
|
+
var _window$location;
|
|
289
|
+
if (typeof window === 'undefined') {
|
|
290
|
+
return false;
|
|
291
|
+
}
|
|
292
|
+
const hostname = (_window$location = window.location) === null || _window$location === void 0 || (_window$location = _window$location.hostname) === null || _window$location === void 0 ? void 0 : _window$location.toLowerCase();
|
|
293
|
+
return Boolean(hostname && (hostname === 'be' || hostname.endsWith('.be')));
|
|
294
|
+
};
|
|
283
295
|
|
|
284
296
|
/**
|
|
285
297
|
* @description Removes nullish properties from a passed object
|
|
286
298
|
*/
|
|
287
|
-
exports.
|
|
299
|
+
exports.isBelgianDomain = isBelgianDomain;
|
|
288
300
|
const removeNullishProps = exports.removeNullishProps = function removeNullishProps() {
|
|
289
301
|
let object = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
290
302
|
return Object.fromEntries(Object.entries(object).filter(_ref3 => {
|
|
@@ -9,11 +9,12 @@ require("core-js/modules/esnext.iterator.filter.js");
|
|
|
9
9
|
require("core-js/modules/esnext.iterator.flat-map.js");
|
|
10
10
|
require("core-js/modules/esnext.iterator.for-each.js");
|
|
11
11
|
require("core-js/modules/esnext.iterator.map.js");
|
|
12
|
+
require("core-js/modules/esnext.iterator.some.js");
|
|
12
13
|
require("core-js/modules/web.dom-collections.iterator.js");
|
|
13
14
|
Object.defineProperty(exports, "__esModule", {
|
|
14
15
|
value: true
|
|
15
16
|
});
|
|
16
|
-
exports.validateCartInput = exports.parseProductSpecifications = exports.formatHyperDescription = exports.extractProductSpecsArray = exports.checkIfTowbarIsRecommended = exports.buildCartInput = void 0;
|
|
17
|
+
exports.validateCartInput = exports.shouldRequestUnfilteredProductsForCart = exports.parseProductSpecifications = exports.formatHyperDescription = exports.extractProductSpecsArray = exports.checkIfTowbarIsRecommended = exports.buildCartInput = void 0;
|
|
17
18
|
require("core-js/modules/es.array.flat-map.js");
|
|
18
19
|
require("core-js/modules/es.array.includes.js");
|
|
19
20
|
require("core-js/modules/es.array.unscopables.flat-map.js");
|
|
@@ -23,6 +24,7 @@ require("core-js/modules/esnext.iterator.filter.js");
|
|
|
23
24
|
require("core-js/modules/esnext.iterator.flat-map.js");
|
|
24
25
|
require("core-js/modules/esnext.iterator.for-each.js");
|
|
25
26
|
require("core-js/modules/esnext.iterator.map.js");
|
|
27
|
+
require("core-js/modules/esnext.iterator.some.js");
|
|
26
28
|
require("core-js/modules/web.dom-collections.iterator.js");
|
|
27
29
|
var _constants__ = require("../__constants__");
|
|
28
30
|
function ownKeys(e, r) {
|
|
@@ -97,6 +99,16 @@ const validateCartInput = exports.validateCartInput = function validateCartInput
|
|
|
97
99
|
return;
|
|
98
100
|
};
|
|
99
101
|
|
|
102
|
+
/**
|
|
103
|
+
* @description Cart overviews resolve selected articles from the order article lists.
|
|
104
|
+
* If the user selected an article that only appears with skipFilters enabled,
|
|
105
|
+
* those read-only lookups must request the unfiltered product list too.
|
|
106
|
+
*/
|
|
107
|
+
const shouldRequestUnfilteredProductsForCart = exports.shouldRequestUnfilteredProductsForCart = function shouldRequestUnfilteredProductsForCart() {
|
|
108
|
+
let cart = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
|
|
109
|
+
return Array.isArray(cart) && cart.some(lineItem => (lineItem === null || lineItem === void 0 ? void 0 : lineItem.articleNumber) != null);
|
|
110
|
+
};
|
|
111
|
+
|
|
100
112
|
/**
|
|
101
113
|
* @description Builds the cart input including optional TowMotive vehicle coding discount
|
|
102
114
|
*/
|
|
@@ -13,6 +13,8 @@ var _BottomNavigationBar = _interopRequireDefault(require("../__containers__/Bot
|
|
|
13
13
|
var _ExitIntentModal = _interopRequireDefault(require("../__containers__/ExitIntentModal"));
|
|
14
14
|
var _ProductDiscountCard = _interopRequireDefault(require("../__containers__/ProductDiscountCard"));
|
|
15
15
|
var _ProductsCartOverview = _interopRequireDefault(require("../__containers__/ProductsCartOverview"));
|
|
16
|
+
var _CountryContext = require("../__context__/CountryContext");
|
|
17
|
+
var _belgianConfiguratorInfo = require("../__helpers__/belgianConfiguratorInfo");
|
|
16
18
|
var _helpers__ = require("../__helpers__");
|
|
17
19
|
var _Datalayer = require("../__services__/Datalayer");
|
|
18
20
|
var _useBranchTheme = require("../__hooks__/useBranchTheme");
|
|
@@ -22,7 +24,9 @@ function _interopRequireDefault(e) {
|
|
|
22
24
|
};
|
|
23
25
|
}
|
|
24
26
|
const OverviewPage = () => {
|
|
27
|
+
const country = (0, _CountryContext.useCountry)();
|
|
25
28
|
const themeClass = (0, _helpers__.getConfiguratorThemeClass)((0, _useBranchTheme.useBranchTheme)());
|
|
29
|
+
const showBelgianPriceNotice = !APP_CONFIG.internal && (0, _belgianConfiguratorInfo.isBelgianConfigurator)(country);
|
|
26
30
|
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("section", {
|
|
27
31
|
className: (0, _helpers__.withStyle)("thm-configurator-wrapper ".concat(themeClass))
|
|
28
32
|
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
@@ -36,7 +40,9 @@ const OverviewPage = () => {
|
|
|
36
40
|
className: (0, _helpers__.withStyle)('row gx-5 mt-3 mt-lg-5')
|
|
37
41
|
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
38
42
|
className: (0, _helpers__.withStyle)('col-lg')
|
|
39
|
-
}, /*#__PURE__*/_react.default.createElement(_ProductsCartOverview.default, null),
|
|
43
|
+
}, /*#__PURE__*/_react.default.createElement(_ProductsCartOverview.default, null), showBelgianPriceNotice && /*#__PURE__*/_react.default.createElement("p", {
|
|
44
|
+
className: (0, _helpers__.withStyle)('small text-muted mt-2 mb-0')
|
|
45
|
+
}, _belgianConfiguratorInfo.BELGIAN_PRICE_OVERVIEW_NOTICE), /*#__PURE__*/_react.default.createElement(_ProductDiscountCard.default, null)), /*#__PURE__*/_react.default.createElement("div", {
|
|
40
46
|
className: (0, _helpers__.withStyle)("sidebar col-xxl-auto col-lg-4")
|
|
41
47
|
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
42
48
|
className: (0, _helpers__.withStyle)('d-grid gap-2 mt-3')
|
|
@@ -2,7 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
require("core-js/modules/es.array.includes.js");
|
|
4
4
|
require("core-js/modules/es.object.assign.js");
|
|
5
|
+
require("core-js/modules/es.regexp.exec.js");
|
|
5
6
|
require("core-js/modules/es.string.includes.js");
|
|
7
|
+
require("core-js/modules/es.string.search.js");
|
|
6
8
|
require("core-js/modules/web.dom-collections.iterator.js");
|
|
7
9
|
require("core-js/modules/es.array.includes.js");
|
|
8
10
|
require("core-js/modules/es.object.assign.js");
|
|
@@ -83,10 +85,13 @@ Object.defineProperty(exports, "QuotationThanksPage", {
|
|
|
83
85
|
}
|
|
84
86
|
});
|
|
85
87
|
exports.default = void 0;
|
|
88
|
+
require("core-js/modules/es.regexp.exec.js");
|
|
89
|
+
require("core-js/modules/es.string.search.js");
|
|
86
90
|
require("core-js/modules/web.dom-collections.iterator.js");
|
|
87
91
|
var _react = _interopRequireDefault(require("react"));
|
|
88
92
|
var _reactRouterDom = require("react-router-dom");
|
|
89
93
|
var _OrderSessionContext = require("../__context__/OrderSessionContext");
|
|
94
|
+
var _helpers__ = require("../__helpers__");
|
|
90
95
|
var _AppointmentPage = _interopRequireDefault(require("./AppointmentPage"));
|
|
91
96
|
var _AppointmentThanksPage = _interopRequireDefault(require("./AppointmentThanksPage"));
|
|
92
97
|
var _ExtraProductsPage = _interopRequireDefault(require("./ExtraProductsPage"));
|
|
@@ -150,11 +155,19 @@ const ProtectedConfiguratorRoute = _ref => {
|
|
|
150
155
|
})
|
|
151
156
|
}));
|
|
152
157
|
};
|
|
158
|
+
const LicensePlateRoute = props => {
|
|
159
|
+
if ((0, _helpers__.isBelgianDomain)()) {
|
|
160
|
+
return /*#__PURE__*/_react.default.createElement(_reactRouterDom.Redirect, {
|
|
161
|
+
to: "/configurator/manual".concat(props.location.search)
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
return /*#__PURE__*/_react.default.createElement(_LicensePlatePage.default, props);
|
|
165
|
+
};
|
|
153
166
|
const Routes = () => {
|
|
154
167
|
return /*#__PURE__*/_react.default.createElement(_reactRouterDom.Switch, null, /*#__PURE__*/_react.default.createElement(_reactRouterDom.Route, {
|
|
155
168
|
exact: true,
|
|
156
169
|
path: "/",
|
|
157
|
-
render: props => /*#__PURE__*/_react.default.createElement(
|
|
170
|
+
render: props => /*#__PURE__*/_react.default.createElement(LicensePlateRoute, props)
|
|
158
171
|
}), /*#__PURE__*/_react.default.createElement(_reactRouterDom.Route, {
|
|
159
172
|
exact: true,
|
|
160
173
|
path: "/configurator/geen-producten",
|
|
@@ -195,7 +208,7 @@ const Routes = () => {
|
|
|
195
208
|
render: props => /*#__PURE__*/_react.default.createElement(_ExtraProductsPage.default, null)
|
|
196
209
|
}), /*#__PURE__*/_react.default.createElement(_reactRouterDom.Route, {
|
|
197
210
|
path: "/configurator",
|
|
198
|
-
render: props => /*#__PURE__*/_react.default.createElement(
|
|
211
|
+
render: props => /*#__PURE__*/_react.default.createElement(LicensePlateRoute, props)
|
|
199
212
|
}), /*#__PURE__*/_react.default.createElement(_reactRouterDom.Route, {
|
|
200
213
|
path: "/niet-gevonden",
|
|
201
214
|
render: () => /*#__PURE__*/_react.default.createElement(_NotFoundPage.default, null)
|