thm-p3-configurator 0.0.372 → 0.0.375

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 (53) hide show
  1. package/dist/src/shared/__components__/LocationsSelector/LocationDetails.js +320 -0
  2. package/dist/src/shared/__components__/LocationsSelector/LocationInfo.js +140 -0
  3. package/dist/src/shared/__components__/LocationsSelector/LocationList.js +180 -0
  4. package/dist/src/shared/__components__/LocationsSelector/LocationListItem.js +115 -0
  5. package/dist/src/shared/__components__/LocationsSelector/LocationTreeMarker.js +97 -0
  6. package/dist/src/shared/__components__/LocationsSelector/index.js +162 -0
  7. package/dist/src/shared/__components__/Modal.js +78 -0
  8. package/dist/src/shared/__components__/Navbar.js +82 -0
  9. package/dist/src/shared/__components__/NavigationSteps.js +126 -0
  10. package/dist/src/shared/__components__/Pagination.js +53 -0
  11. package/dist/src/shared/__components__/ProductCard/ProductCardCheckbox.js +38 -0
  12. package/dist/src/shared/__components__/ProductCard/ProductCardDescription.js +84 -0
  13. package/dist/src/shared/__components__/ProductCard/ProductCardDiscountAlert.js +57 -0
  14. package/dist/src/shared/__components__/ProductCard/ProductCardImage.js +28 -0
  15. package/dist/src/shared/__components__/ProductCard/ProductCardPrice.js +37 -0
  16. package/dist/src/shared/__components__/ProductCard/ProductCardRibbon.js +28 -0
  17. package/dist/src/shared/__components__/ProductCard/ProductCardSpecifications.js +77 -0
  18. package/dist/src/shared/__components__/ProductCard/ProductCardUsps.js +82 -0
  19. package/dist/src/shared/__components__/ProductCard/index.js +228 -0
  20. package/dist/src/shared/__components__/ProductTable/ProductTableEditableRow.js +66 -0
  21. package/dist/src/shared/__components__/ProductTable/ProductTableHead.js +32 -0
  22. package/dist/src/shared/__components__/ProductTable/ProductTableSection.js +25 -0
  23. package/dist/src/shared/__components__/ProductTable/ProductTableSectionTotal.js +46 -0
  24. package/dist/src/shared/__components__/ProductTable/ProductTableStaticRow.js +47 -0
  25. package/dist/src/shared/__components__/ProductTable/ProductTableTotal.js +41 -0
  26. package/dist/src/shared/__components__/ProductTable/index.js +127 -0
  27. package/dist/src/shared/__components__/SingleOrderCartCard.js +78 -0
  28. package/dist/src/shared/__components__/SingleOrderProductCard.js +352 -0
  29. package/dist/src/shared/__components__/Spinners/FullPageSpinner.js +73 -0
  30. package/dist/src/shared/__components__/Spinners/InlineSpinner.js +26 -0
  31. package/dist/src/shared/__components__/Spinners/TextSpinner.js +31 -0
  32. package/dist/src/shared/__components__/UspsList.js +27 -0
  33. package/dist/src/shared/__components__/internal/InternalCustomerDetailsForm.js +995 -0
  34. package/dist/src/shared/__constants__/__tests__/index.test.js +20 -0
  35. package/dist/src/shared/__constants__/cartTable.js +32 -0
  36. package/dist/src/shared/__constants__/cookiebot.js +7 -0
  37. package/dist/src/shared/__constants__/index.js +379 -0
  38. package/dist/src/shared/__constants__/sentry.js +20 -0
  39. package/dist/src/shared/__containers__/ANWBMembershipInput.js +170 -0
  40. package/dist/src/shared/__containers__/AppointmentForm.js +535 -0
  41. package/dist/src/shared/__containers__/BoardComputerCard.js +139 -0
  42. package/dist/src/shared/__containers__/BottomNavigationBar.js +182 -0
  43. package/dist/src/shared/__containers__/DiscountProductsSelector.js +149 -0
  44. package/dist/src/shared/__containers__/ExitIntentModal.js +403 -0
  45. package/dist/src/shared/__containers__/ExtraProductsOverview.js +251 -0
  46. package/dist/src/shared/__containers__/LicensePlateForm.js +187 -0
  47. package/dist/src/shared/__containers__/ManualSelectionForm.js +284 -0
  48. package/dist/src/shared/__containers__/ProductCartSide.js +356 -0
  49. package/dist/src/shared/__containers__/ProductDiscountCard.js +167 -0
  50. package/dist/src/shared/__containers__/ProductsCartOverview.js +903 -0
  51. package/dist/src/shared/__containers__/ProductsOverview.js +436 -0
  52. package/dist/src/shared/__containers__/QuestionsForm.js +540 -0
  53. package/package.json +1 -1
@@ -0,0 +1,320 @@
1
+ "use strict";
2
+
3
+ require("core-js/modules/es.number.to-fixed.js");
4
+ require("core-js/modules/es.weak-map.js");
5
+ require("core-js/modules/esnext.iterator.constructor.js");
6
+ require("core-js/modules/esnext.iterator.filter.js");
7
+ require("core-js/modules/esnext.iterator.map.js");
8
+ require("core-js/modules/web.dom-collections.iterator.js");
9
+ require("core-js/modules/es.weak-map.js");
10
+ require("core-js/modules/web.dom-collections.iterator.js");
11
+ Object.defineProperty(exports, "__esModule", {
12
+ value: true
13
+ });
14
+ exports.default = void 0;
15
+ require("core-js/modules/es.number.to-fixed.js");
16
+ require("core-js/modules/esnext.iterator.constructor.js");
17
+ require("core-js/modules/esnext.iterator.filter.js");
18
+ require("core-js/modules/esnext.iterator.map.js");
19
+ var _react = _interopRequireWildcard(require("react"));
20
+ var _queries = require("../../__api__/queries");
21
+ var _helpers__ = require("../../__helpers__");
22
+ function _getRequireWildcardCache(e) {
23
+ if ("function" != typeof WeakMap) return null;
24
+ var r = new WeakMap(),
25
+ t = new WeakMap();
26
+ return (_getRequireWildcardCache = function _getRequireWildcardCache(e) {
27
+ return e ? t : r;
28
+ })(e);
29
+ }
30
+ function _interopRequireWildcard(e, r) {
31
+ if (!r && e && e.__esModule) return e;
32
+ if (null === e || "object" != typeof e && "function" != typeof e) return {
33
+ default: e
34
+ };
35
+ var t = _getRequireWildcardCache(r);
36
+ if (t && t.has(e)) return t.get(e);
37
+ var n = {
38
+ __proto__: null
39
+ },
40
+ a = Object.defineProperty && Object.getOwnPropertyDescriptor;
41
+ for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) {
42
+ var i = a ? Object.getOwnPropertyDescriptor(e, u) : null;
43
+ i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u];
44
+ }
45
+ return n.default = e, t && t.set(e, n), n;
46
+ }
47
+ const isStatusPositive = status => status === true || status === 1 || status === 'ja' || status === 'Ja';
48
+ const StatusDot = _ref => {
49
+ let {
50
+ status
51
+ } = _ref;
52
+ const positive = isStatusPositive(status);
53
+ return /*#__PURE__*/_react.default.createElement("span", {
54
+ className: (0, _helpers__.withStyle)('d-flex align-items-center gap-1')
55
+ }, /*#__PURE__*/_react.default.createElement("span", {
56
+ style: {
57
+ width: 7,
58
+ height: 7,
59
+ borderRadius: '50%',
60
+ flexShrink: 0,
61
+ background: positive ? '#038808' : '#adb5bd',
62
+ display: 'inline-block'
63
+ }
64
+ }), /*#__PURE__*/_react.default.createElement("span", {
65
+ style: {
66
+ fontSize: 11,
67
+ fontWeight: 600,
68
+ color: positive ? '#038808' : '#6c757d'
69
+ }
70
+ }, positive ? 'Ja' : 'Nee'));
71
+ };
72
+ const ServiceRow = _ref2 => {
73
+ let {
74
+ icon,
75
+ label,
76
+ status,
77
+ bedrag,
78
+ voorwaarden
79
+ } = _ref2;
80
+ return /*#__PURE__*/_react.default.createElement("div", {
81
+ style: {
82
+ marginBottom: 6
83
+ }
84
+ }, /*#__PURE__*/_react.default.createElement("div", {
85
+ className: (0, _helpers__.withStyle)('d-flex align-items-center justify-content-between')
86
+ }, /*#__PURE__*/_react.default.createElement("span", {
87
+ className: (0, _helpers__.withStyle)('d-flex align-items-center gap-1')
88
+ }, /*#__PURE__*/_react.default.createElement("i", {
89
+ className: icon,
90
+ style: {
91
+ width: 14,
92
+ textAlign: 'center',
93
+ fontSize: 11,
94
+ color: '#6c757d'
95
+ }
96
+ }), /*#__PURE__*/_react.default.createElement("span", {
97
+ style: {
98
+ fontSize: 12,
99
+ fontWeight: 600,
100
+ color: '#343a40'
101
+ }
102
+ }, label)), /*#__PURE__*/_react.default.createElement("span", {
103
+ className: (0, _helpers__.withStyle)('d-flex align-items-center gap-2')
104
+ }, bedrag != null && bedrag !== '' && /*#__PURE__*/_react.default.createElement("span", {
105
+ style: {
106
+ fontSize: 11,
107
+ color: '#6c757d'
108
+ }
109
+ }, typeof bedrag === 'number' ? "\u20AC\xA0".concat(bedrag.toFixed(2)) : bedrag), /*#__PURE__*/_react.default.createElement(StatusDot, {
110
+ status: status
111
+ }))), voorwaarden && /*#__PURE__*/_react.default.createElement("p", {
112
+ style: {
113
+ margin: '2px 0 0 18px',
114
+ fontSize: 10,
115
+ color: '#6c757d',
116
+ fontStyle: 'italic',
117
+ lineHeight: 1.4
118
+ }
119
+ }, voorwaarden));
120
+ };
121
+ const SectionLabel = _ref3 => {
122
+ let {
123
+ icon,
124
+ label
125
+ } = _ref3;
126
+ return /*#__PURE__*/_react.default.createElement("p", {
127
+ className: (0, _helpers__.withStyle)('d-flex align-items-center gap-1 mb-1'),
128
+ style: {
129
+ fontSize: 11,
130
+ fontWeight: 700,
131
+ color: '#495057',
132
+ textTransform: 'uppercase',
133
+ letterSpacing: '0.04em'
134
+ }
135
+ }, /*#__PURE__*/_react.default.createElement("i", {
136
+ className: icon,
137
+ style: {
138
+ width: 14,
139
+ textAlign: 'center',
140
+ fontSize: 10,
141
+ color: '#6c757d'
142
+ }
143
+ }), label);
144
+ };
145
+ const formatDate = dateStr => {
146
+ if (!dateStr) return '';
147
+ const date = new Date(dateStr);
148
+ if (isNaN(date.getTime())) return dateStr;
149
+ return date.toLocaleDateString('nl-NL', {
150
+ day: '2-digit',
151
+ month: '2-digit',
152
+ year: 'numeric'
153
+ });
154
+ };
155
+
156
+ /**
157
+ * Normalises a raw branch object (from GET /branches/:id) into display props.
158
+ */
159
+ const buildDetailProps = branch => {
160
+ if (!branch) return null;
161
+ return {
162
+ leenauto: {
163
+ status: branch.leenautoJaNee,
164
+ voorwaarden: branch.leenautoVoorwaarden,
165
+ bedrag: branch.leenautoBedrag
166
+ },
167
+ leenfiets: {
168
+ status: branch.leenfietsJaNee,
169
+ voorwaarden: branch.leenfietsVoorwaarden
170
+ },
171
+ haalEnBrengservice: {
172
+ status: branch.haalEnBrengServiceJaNee,
173
+ voorwaarden: branch.haalEnBrengServiceVoorwaarden
174
+ },
175
+ betaalmethoden: Array.isArray(branch.betaalmethoden) ? branch.betaalmethoden.map(m => m && typeof m === 'object' ? m.title : m).filter(Boolean) : branch.betaalmethoden,
176
+ extraGeslotenDagen: branch.extraGeslotenDagen
177
+ };
178
+ };
179
+
180
+ /**
181
+ * Fetches and displays extra location-specific details in the Partner Portal configurator.
182
+ * Only rendered when APP_CONFIG.internal is true — never on the public website.
183
+ */
184
+ const LocationDetails = _ref4 => {
185
+ let {
186
+ id
187
+ } = _ref4;
188
+ const {
189
+ branchById,
190
+ isLoadingBranchById
191
+ } = (0, _queries.useBranchByIdOrWidgetId)(id || '');
192
+ const today = (0, _react.useMemo)(() => {
193
+ const d = new Date();
194
+ d.setHours(0, 0, 0, 0);
195
+ return d;
196
+ }, []);
197
+ if (isLoadingBranchById && !branchById) {
198
+ return /*#__PURE__*/_react.default.createElement("div", {
199
+ className: (0, _helpers__.withStyle)('d-flex align-items-center gap-1 mt-2 pt-2'),
200
+ style: {
201
+ borderTop: '1px solid #e9ecef'
202
+ }
203
+ }, /*#__PURE__*/_react.default.createElement("div", {
204
+ className: (0, _helpers__.withStyle)('spinner-border spinner-border-sm text-primary'),
205
+ role: "status",
206
+ style: {
207
+ width: 12,
208
+ height: 12,
209
+ borderWidth: 2
210
+ }
211
+ }), /*#__PURE__*/_react.default.createElement("small", {
212
+ className: (0, _helpers__.withStyle)('text-muted'),
213
+ style: {
214
+ fontSize: 11
215
+ }
216
+ }, "Vestigingsdetails laden\u2026"));
217
+ }
218
+ const props = buildDetailProps(branchById);
219
+ if (!props) return null;
220
+ const {
221
+ leenauto,
222
+ leenfiets,
223
+ haalEnBrengservice,
224
+ betaalmethoden,
225
+ extraGeslotenDagen
226
+ } = props;
227
+ const upcomingGeslotenDagen = Array.isArray(extraGeslotenDagen) ? extraGeslotenDagen.filter(dag => {
228
+ if (!(dag !== null && dag !== void 0 && dag.einddatum)) return false;
229
+ const eindDatum = new Date(dag.einddatum);
230
+ eindDatum.setHours(0, 0, 0, 0);
231
+ return eindDatum >= today;
232
+ }) : [];
233
+ const hasLeenauto = leenauto != null;
234
+ const hasLeenfiets = leenfiets != null;
235
+ const hasHaalEnBreng = haalEnBrengservice != null;
236
+ const hasBetaalmethoden = Array.isArray(betaalmethoden) && betaalmethoden.length > 0;
237
+ const hasGeslotenDagen = upcomingGeslotenDagen.length > 0;
238
+ return /*#__PURE__*/_react.default.createElement("div", {
239
+ style: {
240
+ marginTop: 10,
241
+ paddingTop: 10,
242
+ borderTop: '1px solid #e9ecef'
243
+ }
244
+ }, (hasLeenauto || hasLeenfiets || hasHaalEnBreng) && /*#__PURE__*/_react.default.createElement("div", {
245
+ style: {
246
+ marginBottom: hasBetaalmethoden || hasGeslotenDagen ? 8 : 0
247
+ }
248
+ }, hasLeenauto && /*#__PURE__*/_react.default.createElement(ServiceRow, {
249
+ icon: "fas fa-car",
250
+ label: "Leenauto",
251
+ status: leenauto.status,
252
+ bedrag: leenauto.bedrag,
253
+ voorwaarden: leenauto.voorwaarden
254
+ }), hasLeenfiets && /*#__PURE__*/_react.default.createElement(ServiceRow, {
255
+ icon: "fas fa-bicycle",
256
+ label: "Leenfiets",
257
+ status: leenfiets.status,
258
+ voorwaarden: leenfiets.voorwaarden
259
+ }), hasHaalEnBreng && /*#__PURE__*/_react.default.createElement(ServiceRow, {
260
+ icon: "fas fa-truck",
261
+ label: "Haal- en brengservice",
262
+ status: haalEnBrengservice.status,
263
+ voorwaarden: haalEnBrengservice.voorwaarden
264
+ })), hasBetaalmethoden && /*#__PURE__*/_react.default.createElement("div", {
265
+ style: {
266
+ marginBottom: hasGeslotenDagen ? 8 : 0,
267
+ paddingTop: hasLeenauto || hasLeenfiets || hasHaalEnBreng ? 8 : 0,
268
+ borderTop: hasLeenauto || hasLeenfiets || hasHaalEnBreng ? '1px solid #f1f3f5' : 'none'
269
+ }
270
+ }, /*#__PURE__*/_react.default.createElement(SectionLabel, {
271
+ icon: "fas fa-credit-card",
272
+ label: "Betaalmethoden"
273
+ }), /*#__PURE__*/_react.default.createElement("div", {
274
+ className: (0, _helpers__.withStyle)('d-flex flex-wrap gap-1')
275
+ }, betaalmethoden.map((method, i) => /*#__PURE__*/_react.default.createElement("span", {
276
+ key: i,
277
+ style: {
278
+ fontSize: 10,
279
+ fontWeight: 600,
280
+ padding: '2px 7px',
281
+ borderRadius: 4,
282
+ border: '1px solid #dee2e6',
283
+ color: '#495057',
284
+ background: '#f8f9fa'
285
+ }
286
+ }, method)))), hasGeslotenDagen && /*#__PURE__*/_react.default.createElement("div", {
287
+ style: {
288
+ paddingTop: hasBetaalmethoden || hasLeenauto || hasLeenfiets || hasHaalEnBreng ? 8 : 0,
289
+ borderTop: hasBetaalmethoden || hasLeenauto || hasLeenfiets || hasHaalEnBreng ? '1px solid #f1f3f5' : 'none'
290
+ }
291
+ }, /*#__PURE__*/_react.default.createElement(SectionLabel, {
292
+ icon: "fas fa-calendar-times",
293
+ label: "Extra gesloten"
294
+ }), /*#__PURE__*/_react.default.createElement("ul", {
295
+ className: (0, _helpers__.withStyle)('list-unstyled mb-0')
296
+ }, upcomingGeslotenDagen.map((dag, i) => {
297
+ const heeftBereik = dag.startdatum && dag.einddatum && dag.startdatum !== dag.einddatum;
298
+ const datumLabel = heeftBereik ? "".concat(formatDate(dag.startdatum), " \u2013 ").concat(formatDate(dag.einddatum)) : formatDate(dag.einddatum || dag.startdatum);
299
+ return /*#__PURE__*/_react.default.createElement("li", {
300
+ key: i,
301
+ className: (0, _helpers__.withStyle)('d-flex justify-content-between align-items-baseline'),
302
+ style: {
303
+ marginBottom: 2
304
+ }
305
+ }, /*#__PURE__*/_react.default.createElement("span", {
306
+ style: {
307
+ fontSize: 11,
308
+ color: '#495057'
309
+ }
310
+ }, dag.omschrijving || '—'), /*#__PURE__*/_react.default.createElement("span", {
311
+ style: {
312
+ fontSize: 10,
313
+ color: '#6c757d',
314
+ marginLeft: 8,
315
+ whiteSpace: 'nowrap'
316
+ }
317
+ }, datumLabel));
318
+ }))));
319
+ };
320
+ var _default = exports.default = LocationDetails;
@@ -0,0 +1,140 @@
1
+ "use strict";
2
+
3
+ require("core-js/modules/esnext.iterator.constructor.js");
4
+ require("core-js/modules/esnext.iterator.filter.js");
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.default = void 0;
9
+ require("core-js/modules/esnext.iterator.constructor.js");
10
+ require("core-js/modules/esnext.iterator.filter.js");
11
+ var _react = _interopRequireDefault(require("react"));
12
+ var _logoThcWhite = _interopRequireDefault(require("../../../../public/assets/images/logo-thc-white.svg"));
13
+ var _thLogoBlack = _interopRequireDefault(require("../../../../public/assets/images/th-logo-black.png"));
14
+ var _constants__ = require("../../__constants__");
15
+ var _helpers__ = require("../../__helpers__");
16
+ var _image = require("../../__helpers__/image");
17
+ function _interopRequireDefault(e) {
18
+ return e && e.__esModule ? e : {
19
+ default: e
20
+ };
21
+ }
22
+ const FORMULAS = {
23
+ mZHgPhfuStmqHfHqSOhWY: _thLogoBlack.default,
24
+ nFbSnWdtLZBmEhhpHFGVO: _logoThcWhite.default
25
+ };
26
+ const LocationInfo = _ref => {
27
+ var _FORMULAS$formula;
28
+ let {
29
+ street,
30
+ houseNumber,
31
+ houseNumberExtra,
32
+ postCode,
33
+ city,
34
+ telephoneNumber,
35
+ locationImage,
36
+ title,
37
+ email,
38
+ website,
39
+ openingHours,
40
+ province,
41
+ formula
42
+ } = _ref;
43
+ const fallbackLogo = (0, _constants__.getThemeFormulaForConfiguratorFormula)(formula) === _constants__.CONFIGURATOR_FORMULAS.THC ? _logoThcWhite.default : (_FORMULAS$formula = FORMULAS[formula]) !== null && _FORMULAS$formula !== void 0 ? _FORMULAS$formula : _thLogoBlack.default;
44
+
45
+ // Function to format opening hours display text
46
+ const formatOpeningHours = dayData => {
47
+ if (!dayData) return {
48
+ text: 'Onbekend',
49
+ isUnknown: true
50
+ };
51
+ if (!dayData.isOpen) return {
52
+ text: 'Gesloten',
53
+ isUnknown: false
54
+ };
55
+ if (dayData.opensAt && dayData.closesAt) {
56
+ return {
57
+ text: "".concat(dayData.opensAt, " - ").concat(dayData.closesAt),
58
+ isUnknown: false
59
+ };
60
+ } else if (dayData.opensAt) {
61
+ return {
62
+ text: "".concat(dayData.opensAt),
63
+ isUnknown: false
64
+ };
65
+ } else if (dayData.closesAt) {
66
+ return {
67
+ text: "".concat(dayData.closesAt),
68
+ isUnknown: false
69
+ };
70
+ }
71
+ return {
72
+ text: 'Onbekend',
73
+ isUnknown: true
74
+ };
75
+ };
76
+ // Order of days to display
77
+ const daysOrder = ['monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday', 'sunday'];
78
+ return /*#__PURE__*/_react.default.createElement("div", {
79
+ className: (0, _helpers__.withStyle)('dealer-map__infowindow p-0 shadow-none')
80
+ }, /*#__PURE__*/_react.default.createElement("h4", {
81
+ className: (0, _helpers__.withStyle)('text-primary')
82
+ }, title), /*#__PURE__*/_react.default.createElement("div", {
83
+ className: (0, _helpers__.withStyle)('row row__body no-gutters flex-md-nowrap justify-content-between align-items-start')
84
+ }, /*#__PURE__*/_react.default.createElement("div", {
85
+ className: (0, _helpers__.withStyle)('col-12 col-md-6 px-0')
86
+ }, /*#__PURE__*/_react.default.createElement("ul", {
87
+ className: (0, _helpers__.withStyle)('mb-2')
88
+ }, /*#__PURE__*/_react.default.createElement("li", null, /*#__PURE__*/_react.default.createElement("i", {
89
+ className: "fas fa-map-marker-alt ".concat((0, _helpers__.withStyle)('me-1'))
90
+ }), ["".concat(street).concat(houseNumber ? " ".concat(houseNumber) : '').concat(houseNumberExtra ? " ".concat(houseNumberExtra) : ''), postCode, city].filter(item => item).join(', ')), telephoneNumber && /*#__PURE__*/_react.default.createElement("li", {
91
+ className: (0, _helpers__.withStyle)('mt-1')
92
+ }, /*#__PURE__*/_react.default.createElement("i", {
93
+ className: "fas fa-phone-alt ".concat((0, _helpers__.withStyle)('mx-1'))
94
+ }), /*#__PURE__*/_react.default.createElement("a", {
95
+ href: "tel:".concat(telephoneNumber)
96
+ }, /*#__PURE__*/_react.default.createElement("u", null, telephoneNumber))), email && /*#__PURE__*/_react.default.createElement("li", {
97
+ className: (0, _helpers__.withStyle)('mt-1')
98
+ }, /*#__PURE__*/_react.default.createElement("i", {
99
+ className: "fas fa-envelope ".concat((0, _helpers__.withStyle)('mx-1'))
100
+ }), /*#__PURE__*/_react.default.createElement("a", {
101
+ href: "mailto:".concat(email)
102
+ }, /*#__PURE__*/_react.default.createElement("u", null, email))), website && /*#__PURE__*/_react.default.createElement("li", {
103
+ className: (0, _helpers__.withStyle)('mt-1')
104
+ }, /*#__PURE__*/_react.default.createElement("i", {
105
+ className: "fas fa-globe ".concat((0, _helpers__.withStyle)('mx-1'))
106
+ }), /*#__PURE__*/_react.default.createElement("a", {
107
+ href: website
108
+ }, /*#__PURE__*/_react.default.createElement("u", null, website)))), /*#__PURE__*/_react.default.createElement("p", {
109
+ className: (0, _helpers__.withStyle)('font-weight-bold mb-1 d-none d-md-block')
110
+ }, /*#__PURE__*/_react.default.createElement("i", {
111
+ className: "fas fa-clock ".concat((0, _helpers__.withStyle)('mx-1'))
112
+ }), "Openingstijden"), /*#__PURE__*/_react.default.createElement("ul", {
113
+ className: (0, _helpers__.withStyle)('ml-3 p-0 d-none d-md-block'),
114
+ style: {
115
+ lineHeight: '1.2'
116
+ }
117
+ }, daysOrder.map(day => {
118
+ const hoursInfo = openingHours && formatOpeningHours(openingHours[day]);
119
+ return /*#__PURE__*/_react.default.createElement("li", {
120
+ key: day,
121
+ className: (0, _helpers__.withStyle)('d-flex align-content-center justify-content-between mb-0'),
122
+ style: {
123
+ marginBottom: '2px'
124
+ }
125
+ }, /*#__PURE__*/_react.default.createElement("p", {
126
+ className: (0, _helpers__.withStyle)('mb-0')
127
+ }, _constants__.DAY_NAMES[day]), /*#__PURE__*/_react.default.createElement("p", {
128
+ className: "".concat(hoursInfo !== null && hoursInfo !== void 0 && hoursInfo.isUnknown ? (0, _helpers__.withStyle)('text-muted fst-italic') : '', " ").concat((0, _helpers__.withStyle)('mb-0'))
129
+ }, (hoursInfo === null || hoursInfo === void 0 ? void 0 : hoursInfo.text) || 'Onbekend'));
130
+ }))), /*#__PURE__*/_react.default.createElement("div", {
131
+ className: (0, _helpers__.withStyle)('col-12 col-md-6 d-flex flex-column justify-content-evenly align-items-center')
132
+ }, /*#__PURE__*/_react.default.createElement("img", {
133
+ className: (0, _helpers__.withStyle)('mb-1'),
134
+ src: locationImage !== null && locationImage !== void 0 && locationImage.length ? (0, _image.getImageFromHyper)({
135
+ imageId: locationImage
136
+ }) : fallbackLogo,
137
+ alt: title
138
+ }))));
139
+ };
140
+ var _default = exports.default = LocationInfo;
@@ -0,0 +1,180 @@
1
+ "use strict";
2
+
3
+ require("core-js/modules/es.array.sort.js");
4
+ require("core-js/modules/es.number.to-fixed.js");
5
+ require("core-js/modules/es.parse-float.js");
6
+ require("core-js/modules/es.weak-map.js");
7
+ require("core-js/modules/esnext.iterator.constructor.js");
8
+ require("core-js/modules/esnext.iterator.filter.js");
9
+ require("core-js/modules/esnext.iterator.for-each.js");
10
+ require("core-js/modules/esnext.iterator.map.js");
11
+ require("core-js/modules/web.dom-collections.iterator.js");
12
+ require("core-js/modules/es.weak-map.js");
13
+ require("core-js/modules/esnext.iterator.for-each.js");
14
+ Object.defineProperty(exports, "__esModule", {
15
+ value: true
16
+ });
17
+ exports.default = void 0;
18
+ require("core-js/modules/es.array.sort.js");
19
+ require("core-js/modules/es.number.to-fixed.js");
20
+ require("core-js/modules/es.parse-float.js");
21
+ require("core-js/modules/esnext.iterator.constructor.js");
22
+ require("core-js/modules/esnext.iterator.filter.js");
23
+ require("core-js/modules/esnext.iterator.map.js");
24
+ require("core-js/modules/web.dom-collections.iterator.js");
25
+ var _react = _interopRequireWildcard(require("react"));
26
+ var _ActiveMarkerContext = require("../../__context__/ActiveMarkerContext");
27
+ var _OrderSessionContext = require("../../__context__/OrderSessionContext");
28
+ var _helpers__ = require("../../__helpers__");
29
+ var _geolocation = require("../../__helpers__/geolocation");
30
+ var _LocationListItem = _interopRequireDefault(require("./LocationListItem"));
31
+ function _interopRequireDefault(e) {
32
+ return e && e.__esModule ? e : {
33
+ default: e
34
+ };
35
+ }
36
+ function _getRequireWildcardCache(e) {
37
+ if ("function" != typeof WeakMap) return null;
38
+ var r = new WeakMap(),
39
+ t = new WeakMap();
40
+ return (_getRequireWildcardCache = function _getRequireWildcardCache(e) {
41
+ return e ? t : r;
42
+ })(e);
43
+ }
44
+ function _interopRequireWildcard(e, r) {
45
+ if (!r && e && e.__esModule) return e;
46
+ if (null === e || "object" != typeof e && "function" != typeof e) return {
47
+ default: e
48
+ };
49
+ var t = _getRequireWildcardCache(r);
50
+ if (t && t.has(e)) return t.get(e);
51
+ var n = {
52
+ __proto__: null
53
+ },
54
+ a = Object.defineProperty && Object.getOwnPropertyDescriptor;
55
+ for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) {
56
+ var i = a ? Object.getOwnPropertyDescriptor(e, u) : null;
57
+ i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u];
58
+ }
59
+ return n.default = e, t && t.set(e, n), n;
60
+ }
61
+ function ownKeys(e, r) {
62
+ var t = Object.keys(e);
63
+ if (Object.getOwnPropertySymbols) {
64
+ var o = Object.getOwnPropertySymbols(e);
65
+ r && (o = o.filter(function (r) {
66
+ return Object.getOwnPropertyDescriptor(e, r).enumerable;
67
+ })), t.push.apply(t, o);
68
+ }
69
+ return t;
70
+ }
71
+ function _objectSpread(e) {
72
+ for (var r = 1; r < arguments.length; r++) {
73
+ var t = null != arguments[r] ? arguments[r] : {};
74
+ r % 2 ? ownKeys(Object(t), !0).forEach(function (r) {
75
+ _defineProperty(e, r, t[r]);
76
+ }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) {
77
+ Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r));
78
+ });
79
+ }
80
+ return e;
81
+ }
82
+ function _defineProperty(e, r, t) {
83
+ return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, {
84
+ value: t,
85
+ enumerable: !0,
86
+ configurable: !0,
87
+ writable: !0
88
+ }) : e[r] = t, e;
89
+ }
90
+ function _toPropertyKey(t) {
91
+ var i = _toPrimitive(t, "string");
92
+ return "symbol" == typeof i ? i : i + "";
93
+ }
94
+ function _toPrimitive(t, r) {
95
+ if ("object" != typeof t || !t) return t;
96
+ var e = t[Symbol.toPrimitive];
97
+ if (void 0 !== e) {
98
+ var i = e.call(t, r || "default");
99
+ if ("object" != typeof i) return i;
100
+ throw new TypeError("@@toPrimitive must return a primitive value.");
101
+ }
102
+ return ("string" === r ? String : Number)(t);
103
+ }
104
+ const LocationsLoading = () => {
105
+ return /*#__PURE__*/_react.default.createElement("div", {
106
+ className: (0, _helpers__.withStyle)('w-100 text-center')
107
+ }, /*#__PURE__*/_react.default.createElement("div", {
108
+ className: (0, _helpers__.withStyle)('spinner-border text-primary mx-auto'),
109
+ role: "status"
110
+ }, /*#__PURE__*/_react.default.createElement("span", {
111
+ className: "sr-only"
112
+ }, "Loading...")));
113
+ };
114
+ const NoLocationFound = () => {
115
+ return /*#__PURE__*/_react.default.createElement("h4", null, "Geen montagelocaties gevonden");
116
+ };
117
+ const LocationList = _ref => {
118
+ let {
119
+ locationsById,
120
+ locationIds,
121
+ userLocation,
122
+ isLocationSetViaSearch = false,
123
+ isLoading = false
124
+ } = _ref;
125
+ const {
126
+ activeMarkerId
127
+ } = (0, _ActiveMarkerContext.useActiveMarker)();
128
+ const [{
129
+ selectedBranch
130
+ }] = (0, _OrderSessionContext.useOrderSession)();
131
+ const listRef = (0, _react.useRef)(null);
132
+ const locationsWithDistance = locationIds.map((locationId, index) => {
133
+ const location = locationsById[locationId];
134
+ const coordinates = location.googleMapsLocation;
135
+ if (!coordinates) return null;
136
+ const [latStr, lngStr] = coordinates.split(',');
137
+ const lat = parseFloat(latStr);
138
+ const lng = parseFloat(lngStr);
139
+ const distance = userLocation ? (0, _geolocation.calculateDistance)({
140
+ lat1: userLocation.lat,
141
+ lng1: userLocation.lng,
142
+ lat2: lat,
143
+ lng2: lng
144
+ }).toFixed(2) : null;
145
+ return _objectSpread(_objectSpread({}, location), {}, {
146
+ distance: distance ? parseFloat(distance) : null
147
+ });
148
+ }).filter(location => location !== null);
149
+ const sortedLocations = locationsWithDistance.sort((a, b) => {
150
+ const aIsSelected = a.entityId === activeMarkerId || a.entityId === selectedBranch;
151
+ const bIsSelected = b.entityId === activeMarkerId || b.entityId === selectedBranch;
152
+ if (aIsSelected && !bIsSelected) return -1; // a goes to top
153
+ if (!aIsSelected && bIsSelected) return 1; // b goes to top
154
+
155
+ if (a.distance === null) return 1;
156
+ if (b.distance === null) return -1;
157
+ return a.distance - b.distance;
158
+ });
159
+
160
+ // Handle scrolling when location is set via search
161
+ (0, _react.useEffect)(() => {
162
+ if (isLocationSetViaSearch && listRef.current) {
163
+ listRef.current.scrollTop = 0;
164
+ }
165
+ }, [isLocationSetViaSearch, userLocation]);
166
+ return /*#__PURE__*/_react.default.createElement("div", {
167
+ ref: listRef,
168
+ className: (0, _helpers__.withStyle)('dealer-list')
169
+ }, /*#__PURE__*/_react.default.createElement("h5", null, userLocation ? 'Dichtsbijzijnde montagelocaties' : 'Montagelocaties'), isLoading && /*#__PURE__*/_react.default.createElement(LocationsLoading, null), !isLoading && !locationIds.length && /*#__PURE__*/_react.default.createElement(NoLocationFound, null), sortedLocations.map(location => /*#__PURE__*/_react.default.createElement(_LocationListItem.default, {
170
+ openingHours: location.openingstijden,
171
+ title: location.naamVestiging,
172
+ city: location.city,
173
+ distance: location.distance ? location.distance : null,
174
+ id: location.entityId,
175
+ key: location.entityId,
176
+ isSelected: location.entityId === activeMarkerId || location.entityId === selectedBranch,
177
+ userLocation: userLocation
178
+ })));
179
+ };
180
+ var _default = exports.default = LocationList;