thm-p3-configurator 0.0.395 → 0.0.397

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.
@@ -0,0 +1,535 @@
1
+ "use strict";
2
+
3
+ require("core-js/modules/es.array.includes.js");
4
+ require("core-js/modules/es.promise.js");
5
+ require("core-js/modules/es.regexp.exec.js");
6
+ require("core-js/modules/es.string.includes.js");
7
+ require("core-js/modules/es.string.replace.js");
8
+ require("core-js/modules/es.weak-map.js");
9
+ require("core-js/modules/esnext.iterator.constructor.js");
10
+ require("core-js/modules/esnext.iterator.filter.js");
11
+ require("core-js/modules/esnext.iterator.for-each.js");
12
+ require("core-js/modules/web.dom-collections.iterator.js");
13
+ require("core-js/modules/es.weak-map.js");
14
+ require("core-js/modules/esnext.iterator.filter.js");
15
+ Object.defineProperty(exports, "__esModule", {
16
+ value: true
17
+ });
18
+ exports.default = void 0;
19
+ require("core-js/modules/es.array.includes.js");
20
+ require("core-js/modules/es.promise.js");
21
+ require("core-js/modules/es.regexp.exec.js");
22
+ require("core-js/modules/es.string.includes.js");
23
+ require("core-js/modules/es.string.replace.js");
24
+ require("core-js/modules/esnext.iterator.constructor.js");
25
+ require("core-js/modules/esnext.iterator.for-each.js");
26
+ require("core-js/modules/web.dom-collections.iterator.js");
27
+ var _react = _interopRequireWildcard(require("react"));
28
+ var _reactRouter = require("react-router");
29
+ var _yup = require("yup");
30
+ var _mutations = require("../__api__/mutations");
31
+ var _NavigationButton = _interopRequireDefault(require("../__components__/Buttons/NavigationButton"));
32
+ var _PrimaryButton = _interopRequireDefault(require("../__components__/Buttons/PrimaryButton"));
33
+ var _CardWide = _interopRequireDefault(require("../__components__/Cards/CardWide"));
34
+ var _CheckboxInput = _interopRequireDefault(require("../__components__/Form/CheckboxInput"));
35
+ var _ErrorMessage = _interopRequireDefault(require("../__components__/Form/ErrorMessage"));
36
+ var _RadioButtons = _interopRequireDefault(require("../__components__/Form/RadioButtons"));
37
+ var _TextAreaInput = _interopRequireDefault(require("../__components__/Form/TextAreaInput"));
38
+ var _TextInput = _interopRequireDefault(require("../__components__/Form/TextInput"));
39
+ var _constants__ = require("../__constants__");
40
+ var _FormulaContext = require("../__context__/FormulaContext");
41
+ var _OrderSessionContext = require("../__context__/OrderSessionContext");
42
+ var _helpers__ = require("../__helpers__");
43
+ var _Datalayer = require("../__services__/Datalayer");
44
+ var _product = require("../__helpers__/product");
45
+ var _useDebouncedPush = _interopRequireDefault(require("../__hooks__/useDebouncedPush"));
46
+ var _useIsTowmotive = require("../__hooks__/useIsTowmotive");
47
+ function _interopRequireDefault(e) {
48
+ return e && e.__esModule ? e : {
49
+ default: e
50
+ };
51
+ }
52
+ function _getRequireWildcardCache(e) {
53
+ if ("function" != typeof WeakMap) return null;
54
+ var r = new WeakMap(),
55
+ t = new WeakMap();
56
+ return (_getRequireWildcardCache = function _getRequireWildcardCache(e) {
57
+ return e ? t : r;
58
+ })(e);
59
+ }
60
+ function _interopRequireWildcard(e, r) {
61
+ if (!r && e && e.__esModule) return e;
62
+ if (null === e || "object" != typeof e && "function" != typeof e) return {
63
+ default: e
64
+ };
65
+ var t = _getRequireWildcardCache(r);
66
+ if (t && t.has(e)) return t.get(e);
67
+ var n = {
68
+ __proto__: null
69
+ },
70
+ a = Object.defineProperty && Object.getOwnPropertyDescriptor;
71
+ for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) {
72
+ var i = a ? Object.getOwnPropertyDescriptor(e, u) : null;
73
+ i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u];
74
+ }
75
+ return n.default = e, t && t.set(e, n), n;
76
+ }
77
+ function ownKeys(e, r) {
78
+ var t = Object.keys(e);
79
+ if (Object.getOwnPropertySymbols) {
80
+ var o = Object.getOwnPropertySymbols(e);
81
+ r && (o = o.filter(function (r) {
82
+ return Object.getOwnPropertyDescriptor(e, r).enumerable;
83
+ })), t.push.apply(t, o);
84
+ }
85
+ return t;
86
+ }
87
+ function _objectSpread(e) {
88
+ for (var r = 1; r < arguments.length; r++) {
89
+ var t = null != arguments[r] ? arguments[r] : {};
90
+ r % 2 ? ownKeys(Object(t), !0).forEach(function (r) {
91
+ _defineProperty(e, r, t[r]);
92
+ }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) {
93
+ Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r));
94
+ });
95
+ }
96
+ return e;
97
+ }
98
+ function _defineProperty(e, r, t) {
99
+ return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, {
100
+ value: t,
101
+ enumerable: !0,
102
+ configurable: !0,
103
+ writable: !0
104
+ }) : e[r] = t, e;
105
+ }
106
+ function _toPropertyKey(t) {
107
+ var i = _toPrimitive(t, "string");
108
+ return "symbol" == typeof i ? i : i + "";
109
+ }
110
+ function _toPrimitive(t, r) {
111
+ if ("object" != typeof t || !t) return t;
112
+ var e = t[Symbol.toPrimitive];
113
+ if (void 0 !== e) {
114
+ var i = e.call(t, r || "default");
115
+ if ("object" != typeof i) return i;
116
+ throw new TypeError("@@toPrimitive must return a primitive value.");
117
+ }
118
+ return ("string" === r ? String : Number)(t);
119
+ }
120
+ const appointmentFormSchema = (0, _yup.object)({
121
+ firstName: (0, _yup.string)().required(_constants__.FORM_ERROR_MESSAGES.required),
122
+ infix: (0, _yup.string)().nullable(),
123
+ lastName: (0, _yup.string)().required(_constants__.FORM_ERROR_MESSAGES.required),
124
+ email: (0, _yup.string)().email(_constants__.FORM_ERROR_MESSAGES.email).required(_constants__.FORM_ERROR_MESSAGES.required),
125
+ phoneNumber: (0, _yup.string)().required(_constants__.FORM_ERROR_MESSAGES.required),
126
+ ownershipType: (0, _yup.string)().required(_constants__.FORM_ERROR_MESSAGES.required),
127
+ companyName: (0, _yup.string)().when('ownershipType', {
128
+ is: _constants__.VEHICLE_OWNERSHIP_TYPE.Zakelijk,
129
+ then: schema => schema.required(_constants__.FORM_ERROR_MESSAGES.required),
130
+ otherwise: schema => schema.nullable()
131
+ }),
132
+ termsAndConditions: (0, _yup.boolean)().isTrue(_constants__.FORM_ERROR_MESSAGES.required).required(_constants__.FORM_ERROR_MESSAGES.required)
133
+ });
134
+ const trackFormField = (fieldName, action, value) => (0, _Datalayer.pushToDataLayer)({
135
+ event: 'form',
136
+ component: 'afspraak',
137
+ element: action === 'error' ? 'form_field' : 'text_field',
138
+ field: fieldName,
139
+ action,
140
+ action_value: value !== null && value !== void 0 ? value : ''
141
+ });
142
+ const AppointmentForm = () => {
143
+ const [{
144
+ customer,
145
+ vehicle,
146
+ licensePlate,
147
+ model,
148
+ buildYear,
149
+ durationAnswer,
150
+ selectedBoardComputer,
151
+ selectedCableset,
152
+ selectedCombiset,
153
+ selectedTowbar,
154
+ selectedBranch,
155
+ discountCode,
156
+ anwbDiscountValidated,
157
+ executionAnswer1,
158
+ executionAnswer2,
159
+ priceCalculationDate,
160
+ selectedDiscountedProducts = [],
161
+ selectedExtras,
162
+ vehicleCodingDiscountPercentage
163
+ }, dispatch] = (0, _OrderSessionContext.useOrderSession)();
164
+ const [errors, setErrors] = (0, _react.useState)({});
165
+ const [isTermsAccepted, setIsTermsAccepted] = (0, _react.useState)(false);
166
+ const trackInput = (0, _useDebouncedPush.default)();
167
+ const APPOINTMENT_REQUEST_ERROR_FALLBACK = 'Er is een fout opgetreden bij het maken van de afspraak, probeer het opnieuw.';
168
+ const {
169
+ isCreateAppointmentRequestSuccess,
170
+ isCreatingAppointmentRequest,
171
+ isCreateAppointmentRequestError,
172
+ createAppointmentRequest,
173
+ createAppointmentRequestError
174
+ } = (0, _mutations.useCreateAppointmentRequestMutation)();
175
+ const formula = (0, _FormulaContext.useFormula)();
176
+ const isTowmotive = (0, _useIsTowmotive.useIsTowmotive)();
177
+ const history = (0, _reactRouter.useHistory)();
178
+ const handleSubmit = async () => {
179
+ (0, _Datalayer.pushToDataLayer)({
180
+ event: 'form',
181
+ component: 'afspraak',
182
+ element: 'button',
183
+ action: 'submit',
184
+ action_value: 'Afspraak maken'
185
+ });
186
+ try {
187
+ var _customer$firstName, _customer$lastName;
188
+ setErrors(null);
189
+ appointmentFormSchema.validateSync(_objectSpread(_objectSpread({}, customer), {}, {
190
+ ownershipType: vehicle === null || vehicle === void 0 ? void 0 : vehicle.ownershipType,
191
+ termsAndConditions: isTermsAccepted
192
+ }), {
193
+ strict: false,
194
+ abortEarly: false
195
+ });
196
+ const appointmentRequestPayload = (0, _helpers__.removeNullishProps)({
197
+ licensePlate: licensePlate === null || licensePlate === void 0 ? void 0 : licensePlate.replace(/-/g, ''),
198
+ model,
199
+ constructionYear: buildYear !== null && buildYear !== void 0 ? buildYear : undefined,
200
+ answers: (0, _helpers__.removeNullishProps)({
201
+ duration: durationAnswer,
202
+ execution1: executionAnswer1,
203
+ execution2: executionAnswer2
204
+ }),
205
+ vehicle: (0, _helpers__.removeNullishProps)({
206
+ ownershipType: vehicle === null || vehicle === void 0 ? void 0 : vehicle.ownershipType
207
+ }),
208
+ customer: (0, _helpers__.removeNullishProps)(_objectSpread(_objectSpread({}, customer), {}, {
209
+ firstName: (_customer$firstName = customer === null || customer === void 0 ? void 0 : customer.firstName) !== null && _customer$firstName !== void 0 ? _customer$firstName : undefined,
210
+ lastName: (_customer$lastName = customer === null || customer === void 0 ? void 0 : customer.lastName) !== null && _customer$lastName !== void 0 ? _customer$lastName : undefined
211
+ })),
212
+ formula,
213
+ branchId: selectedBranch,
214
+ selectBoardComputerUpdate: selectedBoardComputer != null,
215
+ discount: (() => {
216
+ if (!(discountCode !== null && discountCode !== void 0 && discountCode.length)) return null;
217
+ if (discountCode.toLocaleLowerCase().includes('anwb') && !anwbDiscountValidated) return null;
218
+ return {
219
+ code: discountCode
220
+ };
221
+ })(),
222
+ cart: (0, _product.buildCartInput)({
223
+ selectedCableset,
224
+ selectedCombiset,
225
+ selectedTowbar,
226
+ selectedBoardComputer,
227
+ selectedExtras,
228
+ selectedDiscountedProducts,
229
+ isTowmotiveFormula: isTowmotive,
230
+ vehicleCodingDiscountPercentage
231
+ })
232
+ });
233
+ await createAppointmentRequest(appointmentRequestPayload);
234
+ (0, _Datalayer.pushToDataLayer)({
235
+ event: 'form',
236
+ component: 'afspraak',
237
+ element: 'button',
238
+ action: 'submit',
239
+ action_value: 'valid'
240
+ });
241
+ (0, _Datalayer.pushToDataLayer)({
242
+ event: 'form_submit',
243
+ form_name: 'config_afspraak'
244
+ });
245
+ } catch (ex) {
246
+ (0, _Datalayer.pushToDataLayer)({
247
+ event: 'form',
248
+ component: 'afspraak',
249
+ element: 'button',
250
+ action: 'submit',
251
+ action_value: 'invalid'
252
+ });
253
+ console.error("handleSubmit(): ".concat(ex));
254
+ const errorsObj = (0, _helpers__.reduceYupErrorsToObject)(ex.inner);
255
+ Object.entries(errorsObj).forEach(_ref => {
256
+ let [fieldName, errorMsg] = _ref;
257
+ return trackFormField(fieldName, 'error', errorMsg);
258
+ });
259
+ setErrors(errorsObj);
260
+ }
261
+ };
262
+ if (isCreateAppointmentRequestSuccess) {
263
+ return /*#__PURE__*/_react.default.createElement(_reactRouter.Redirect, {
264
+ to: {
265
+ pathname: "/configurator/gegevens/bedankt",
266
+ state: {
267
+ email: customer.email
268
+ }
269
+ }
270
+ });
271
+ }
272
+ return /*#__PURE__*/_react.default.createElement("div", {
273
+ className: (0, _helpers__.withStyle)('row gx-5 mt-3 mt-lg-5')
274
+ }, /*#__PURE__*/_react.default.createElement("div", {
275
+ className: (0, _helpers__.withStyle)('col-12')
276
+ }, /*#__PURE__*/_react.default.createElement(_CardWide.default, null, /*#__PURE__*/_react.default.createElement("div", {
277
+ className: (0, _helpers__.withStyle)('row')
278
+ }, /*#__PURE__*/_react.default.createElement("h6", {
279
+ className: (0, _helpers__.withStyle)('modal-title col-12 mb-2')
280
+ }, "Gegevens"), /*#__PURE__*/_react.default.createElement("div", {
281
+ className: (0, _helpers__.withStyle)('col-12 mb-3')
282
+ }, /*#__PURE__*/_react.default.createElement(_RadioButtons.default, {
283
+ name: "ownershipType",
284
+ label: "Type:",
285
+ initialValue: vehicle === null || vehicle === void 0 ? void 0 : vehicle.ownershipType,
286
+ onChange: val => {
287
+ (0, _Datalayer.pushToDataLayer)({
288
+ event: 'form',
289
+ component: 'afspraak',
290
+ element: 'radio_button',
291
+ field: 'Type klant',
292
+ action: 'click',
293
+ action_value: val
294
+ });
295
+ dispatch({
296
+ type: _OrderSessionContext.orderSessionActions.SET_VEHICLE_OWNERSHIP_TYPE,
297
+ payload: {
298
+ ownershipType: val
299
+ }
300
+ });
301
+ },
302
+ options: Object.values(_constants__.VEHICLE_OWNERSHIP_TYPE),
303
+ isRequired: true,
304
+ errorMessage: errors === null || errors === void 0 ? void 0 : errors['ownershipType']
305
+ })), /*#__PURE__*/_react.default.createElement("div", {
306
+ className: (0, _helpers__.withStyle)('col-12 col-md-6')
307
+ }, /*#__PURE__*/_react.default.createElement(_TextInput.default, {
308
+ placeholder: "",
309
+ initialValue: customer.firstName,
310
+ name: "firstName",
311
+ onFocus: () => trackFormField('voornaam', 'focus'),
312
+ onChange: value => {
313
+ trackInput({
314
+ event: 'form',
315
+ component: 'afspraak',
316
+ element: 'text_field',
317
+ field: 'voornaam',
318
+ action: 'input'
319
+ });
320
+ dispatch({
321
+ type: _OrderSessionContext.orderSessionActions.SET_CUSTOMER_FIRST_NAME,
322
+ payload: {
323
+ firstName: value
324
+ }
325
+ });
326
+ },
327
+ isRequired: true,
328
+ form: "appointment",
329
+ label: "Voornaam:",
330
+ errorMessage: errors === null || errors === void 0 ? void 0 : errors['firstName']
331
+ }), /*#__PURE__*/_react.default.createElement(_TextInput.default, {
332
+ placeholder: "",
333
+ initialValue: customer.infix,
334
+ name: "infix",
335
+ onFocus: () => trackFormField('tussenvoegsel', 'focus'),
336
+ onChange: value => {
337
+ trackInput({
338
+ event: 'form',
339
+ component: 'afspraak',
340
+ element: 'text_field',
341
+ field: 'tussenvoegsel',
342
+ action: 'input'
343
+ });
344
+ dispatch({
345
+ type: _OrderSessionContext.orderSessionActions.SET_CUSTOMER_INFIX,
346
+ payload: {
347
+ infix: value
348
+ }
349
+ });
350
+ },
351
+ isRequired: false,
352
+ form: "appointment",
353
+ label: "Tussenvoegsel:",
354
+ errorMessage: errors === null || errors === void 0 ? void 0 : errors['infix']
355
+ }), /*#__PURE__*/_react.default.createElement(_TextInput.default, {
356
+ placeholder: "",
357
+ initialValue: customer.lastName,
358
+ name: "lastName",
359
+ onFocus: () => trackFormField('achternaam', 'focus'),
360
+ onChange: value => {
361
+ trackInput({
362
+ event: 'form',
363
+ component: 'afspraak',
364
+ element: 'text_field',
365
+ field: 'achternaam',
366
+ action: 'input'
367
+ });
368
+ dispatch({
369
+ type: _OrderSessionContext.orderSessionActions.SET_CUSTOMER_LAST_NAME,
370
+ payload: {
371
+ lastName: value
372
+ }
373
+ });
374
+ },
375
+ isRequired: true,
376
+ form: "appointment",
377
+ label: "Achternaam:",
378
+ errorMessage: errors === null || errors === void 0 ? void 0 : errors['lastName']
379
+ }), /*#__PURE__*/_react.default.createElement(_TextInput.default, {
380
+ placeholder: "",
381
+ initialValue: customer.email,
382
+ name: "email",
383
+ onFocus: () => trackFormField('e-mailadres', 'focus'),
384
+ onChange: value => {
385
+ trackInput({
386
+ event: 'form',
387
+ component: 'afspraak',
388
+ element: 'text_field',
389
+ field: 'e-mailadres',
390
+ action: 'input'
391
+ });
392
+ dispatch({
393
+ type: _OrderSessionContext.orderSessionActions.SET_CUSTOMER_EMAIL,
394
+ payload: {
395
+ email: value
396
+ }
397
+ });
398
+ },
399
+ isRequired: true,
400
+ form: "appointment",
401
+ label: "E-mailadres:",
402
+ errorMessage: errors === null || errors === void 0 ? void 0 : errors['email']
403
+ }), /*#__PURE__*/_react.default.createElement(_TextInput.default, {
404
+ placeholder: "",
405
+ initialValue: customer.phoneNumber,
406
+ name: "phoneNumber",
407
+ onFocus: () => trackFormField('telefoonnummer', 'focus'),
408
+ onChange: value => {
409
+ trackInput({
410
+ event: 'form',
411
+ component: 'afspraak',
412
+ element: 'text_field',
413
+ field: 'telefoonnummer',
414
+ action: 'input'
415
+ });
416
+ dispatch({
417
+ type: _OrderSessionContext.orderSessionActions.SET_CUSTOMER_PHONE_NUMBER,
418
+ payload: {
419
+ phoneNumber: value
420
+ }
421
+ });
422
+ },
423
+ isRequired: true,
424
+ form: "appointment",
425
+ label: "Telefoonnummer:",
426
+ errorMessage: errors === null || errors === void 0 ? void 0 : errors['phoneNumber']
427
+ })), /*#__PURE__*/_react.default.createElement("div", {
428
+ className: (0, _helpers__.withStyle)('col-12 col-md-6')
429
+ }, (vehicle === null || vehicle === void 0 ? void 0 : vehicle.ownershipType) === _constants__.VEHICLE_OWNERSHIP_TYPE.Zakelijk && /*#__PURE__*/_react.default.createElement("div", {
430
+ className: (0, _helpers__.withStyle)('mb-3')
431
+ }, /*#__PURE__*/_react.default.createElement("h6", {
432
+ className: (0, _helpers__.withStyle)('mb-2')
433
+ }, "Gegevens bedrijf"), /*#__PURE__*/_react.default.createElement(_TextInput.default, {
434
+ placeholder: "",
435
+ initialValue: customer.companyName,
436
+ name: "companyName",
437
+ onFocus: () => trackFormField('bedrijfsnaam', 'focus'),
438
+ onChange: value => {
439
+ trackInput({
440
+ event: 'form',
441
+ component: 'afspraak',
442
+ element: 'text_field',
443
+ field: 'bedrijfsnaam',
444
+ action: 'input'
445
+ });
446
+ dispatch({
447
+ type: _OrderSessionContext.orderSessionActions.SET_CUSTOMER_COMPANY_NAME,
448
+ payload: {
449
+ companyName: value
450
+ }
451
+ });
452
+ },
453
+ isRequired: true,
454
+ form: "appointment",
455
+ label: "Bedrijfsnaam:",
456
+ errorMessage: errors === null || errors === void 0 ? void 0 : errors['companyName']
457
+ })), /*#__PURE__*/_react.default.createElement(_TextAreaInput.default, {
458
+ placeholder: "",
459
+ initialValue: "",
460
+ name: "note",
461
+ onChange: value => {
462
+ trackInput({
463
+ event: 'form',
464
+ component: 'afspraak',
465
+ element: 'text_field',
466
+ field: 'opmerkingen',
467
+ action: 'input'
468
+ });
469
+ dispatch({
470
+ type: _OrderSessionContext.orderSessionActions.SET_CUSTOMER_NOTE,
471
+ payload: {
472
+ note: value
473
+ }
474
+ });
475
+ },
476
+ isRequired: false,
477
+ form: "appointment",
478
+ label: "Eventuele vragen of opmerkingen:",
479
+ errorMessage: errors === null || errors === void 0 ? void 0 : errors['note']
480
+ }), /*#__PURE__*/_react.default.createElement(_CheckboxInput.default, {
481
+ isRequired: true,
482
+ name: 'termsAndConditions',
483
+ initialValue: false,
484
+ onChange: value => {
485
+ (0, _Datalayer.pushToDataLayer)({
486
+ event: 'form',
487
+ component: 'afspraak',
488
+ element: 'checkbox',
489
+ field: 'algemene voorwaarden',
490
+ action: value ? 'on' : 'off',
491
+ action_value: String(value)
492
+ });
493
+ setIsTermsAccepted(value);
494
+ },
495
+ errorMessage: errors === null || errors === void 0 ? void 0 : errors['termsAndConditions'],
496
+ label: /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, "Ik ga akkoord met de", ' ', /*#__PURE__*/_react.default.createElement("a", {
497
+ href: "".concat(APP_CONFIG.websiteHost, "/algemene-voorwaarden"),
498
+ target: "_blank",
499
+ rel: "noopener noreferrer",
500
+ onClick: () => (0, _Datalayer.pushToDataLayer)({
501
+ event: 'form',
502
+ component: 'afspraak',
503
+ element: 'link',
504
+ action: 'click',
505
+ link_text: 'algemene voorwaarden',
506
+ link_url: "".concat(APP_CONFIG.websiteHost, "/algemene-voorwaarden")
507
+ })
508
+ }, "algemene voorwaarden"), ' '),
509
+ form: "appointment"
510
+ }), isCreateAppointmentRequestError && /*#__PURE__*/_react.default.createElement(_ErrorMessage.default, {
511
+ message: (0, _helpers__.getProxyApiErrorMessage)(createAppointmentRequestError, APPOINTMENT_REQUEST_ERROR_FALLBACK)
512
+ })))), /*#__PURE__*/_react.default.createElement("div", {
513
+ className: (0, _helpers__.withStyle)('d-flex align-items-center justify-content-end mt-4')
514
+ }, /*#__PURE__*/_react.default.createElement(_NavigationButton.default, {
515
+ variant: "link",
516
+ to: '/configurator/montagelocatie',
517
+ label: 'Vorige',
518
+ state: {
519
+ prevPathName: history.location.pathname
520
+ },
521
+ onClick: () => (0, _Datalayer.pushToDataLayer)({
522
+ event: 'configurator',
523
+ component: 'afspraak',
524
+ element: 'button',
525
+ action: 'click',
526
+ action_value: 'Vorige',
527
+ link_url: '/configurator/montagelocatie'
528
+ })
529
+ }), /*#__PURE__*/_react.default.createElement(_PrimaryButton.default, {
530
+ onClick: handleSubmit,
531
+ isDisabled: isCreatingAppointmentRequest,
532
+ label: 'Afspraak maken'
533
+ }))));
534
+ };
535
+ var _default = exports.default = AppointmentForm;
@@ -0,0 +1,139 @@
1
+ "use strict";
2
+
3
+ require("core-js/modules/es.symbol.description.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
+ Object.defineProperty(exports, "__esModule", {
8
+ value: true
9
+ });
10
+ exports.default = void 0;
11
+ require("core-js/modules/es.symbol.description.js");
12
+ require("core-js/modules/web.dom-collections.iterator.js");
13
+ var _react = _interopRequireWildcard(require("react"));
14
+ var _reactDom = require("react-dom");
15
+ var _Modal = _interopRequireDefault(require("../__components__/Modal"));
16
+ var _ProductCard = _interopRequireDefault(require("../__components__/ProductCard"));
17
+ var _OrderSessionContext = require("../__context__/OrderSessionContext");
18
+ function _interopRequireDefault(e) {
19
+ return e && e.__esModule ? e : {
20
+ default: e
21
+ };
22
+ }
23
+ function _getRequireWildcardCache(e) {
24
+ if ("function" != typeof WeakMap) return null;
25
+ var r = new WeakMap(),
26
+ t = new WeakMap();
27
+ return (_getRequireWildcardCache = function _getRequireWildcardCache(e) {
28
+ return e ? t : r;
29
+ })(e);
30
+ }
31
+ function _interopRequireWildcard(e, r) {
32
+ if (!r && e && e.__esModule) return e;
33
+ if (null === e || "object" != typeof e && "function" != typeof e) return {
34
+ default: e
35
+ };
36
+ var t = _getRequireWildcardCache(r);
37
+ if (t && t.has(e)) return t.get(e);
38
+ var n = {
39
+ __proto__: null
40
+ },
41
+ a = Object.defineProperty && Object.getOwnPropertyDescriptor;
42
+ for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) {
43
+ var i = a ? Object.getOwnPropertyDescriptor(e, u) : null;
44
+ i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u];
45
+ }
46
+ return n.default = e, t && t.set(e, n), n;
47
+ }
48
+ const BoardComputerCard = _ref => {
49
+ let {
50
+ id,
51
+ description,
52
+ title,
53
+ price,
54
+ productImage,
55
+ onSelect = _ref2 => {
56
+ let {
57
+ isSelected,
58
+ productId
59
+ } = _ref2;
60
+ },
61
+ onDescriptionToggle = () => {},
62
+ defaultSelected
63
+ } = _ref;
64
+ const [{
65
+ isBoardComputerDeselected
66
+ }] = (0, _OrderSessionContext.useOrderSession)();
67
+ const [anchorEl, setAnchorEl] = (0, _react.useState)();
68
+ const [isModalOpen, setIsModalOpen] = (0, _react.useState)();
69
+ const [canUnselect, setCanUnselect] = (0, _react.useState)(isBoardComputerDeselected);
70
+ const [isSelected, setIsSelected] = (0, _react.useState)(defaultSelected);
71
+ const handleSelect = _ref3 => {
72
+ let {
73
+ productId,
74
+ isSelected
75
+ } = _ref3;
76
+ if (!isSelected && !isBoardComputerDeselected) {
77
+ setIsModalOpen(true);
78
+ setCanUnselect(false);
79
+ onSelect({
80
+ productId,
81
+ isSelected
82
+ });
83
+ return;
84
+ }
85
+ setIsSelected(isSelected);
86
+ onSelect({
87
+ productId,
88
+ isSelected
89
+ });
90
+ };
91
+ (0, _react.useEffect)(() => {
92
+ if (typeof window !== 'undefined') {
93
+ const appEl = window.document.getElementsByTagName('main');
94
+ setAnchorEl(appEl === null || appEl === void 0 ? void 0 : appEl[0]);
95
+ }
96
+ }, []);
97
+ (0, _react.useEffect)(() => {
98
+ setIsSelected(defaultSelected);
99
+ }, [defaultSelected]);
100
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_ProductCard.default, {
101
+ hasCheckbox: true,
102
+ isRecommended: false,
103
+ productId: id,
104
+ productTitle: title,
105
+ productDescription: description,
106
+ productUsps: [],
107
+ productImage: productImage,
108
+ isDisabled: false,
109
+ defaultSelected: isSelected,
110
+ onSelect: handleSelect,
111
+ productPrice: price,
112
+ productDiscountedPrice: null,
113
+ productSpecifications: [],
114
+ showPrice: APP_CONFIG.internal,
115
+ canUnselect: canUnselect,
116
+ isOnlyProductInCategory: isSelected,
117
+ isBoardComputer: true,
118
+ onDescriptionToggle: onDescriptionToggle
119
+ }), anchorEl && /*#__PURE__*/(0, _reactDom.createPortal)(/*#__PURE__*/_react.default.createElement(_Modal.default, {
120
+ isOpen: isModalOpen,
121
+ size: "large",
122
+ title: "Let op!",
123
+ onPrimaryButtonClicked: () => {
124
+ setCanUnselect(true);
125
+ setIsModalOpen(false);
126
+ },
127
+ onSecondaryButtonClicked: () => {
128
+ setCanUnselect(true);
129
+ setIsModalOpen(false);
130
+ handleSelect({
131
+ isSelected: false,
132
+ productId: id
133
+ });
134
+ },
135
+ primaryButtonText: "Niet verwijderen",
136
+ secondaryButtonText: "Verwijder"
137
+ }, /*#__PURE__*/_react.default.createElement("p", null, "Het updaten van de boordcomputer zorgt ervoor dat alle opties zoals parkeersensoren en een handsfree achterklap op de juiste manier blijven werken."), /*#__PURE__*/_react.default.createElement("p", null, /*#__PURE__*/_react.default.createElement("strong", null, "Weet je zeker dat je het updaten van de boordcomputer wilt verwijderen?"))), anchorEl));
138
+ };
139
+ var _default = exports.default = BoardComputerCard;