thm-p3-configurator 0.0.458 → 0.0.462

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 (74) 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/__api__/queries.js +7 -5
  8. package/dist/src/shared/__components__/Header.js +47 -3
  9. package/dist/src/shared/__components__/LocationsSelector/LocationDetails.js +295 -0
  10. package/dist/src/shared/__components__/LocationsSelector/LocationInfo.js +140 -0
  11. package/dist/src/shared/__components__/LocationsSelector/LocationList.js +190 -0
  12. package/dist/src/shared/__components__/LocationsSelector/LocationListItem.js +116 -0
  13. package/dist/src/shared/__components__/LocationsSelector/LocationTreeMarker.js +97 -0
  14. package/dist/src/shared/__components__/LocationsSelector/index.js +156 -0
  15. package/dist/src/shared/__components__/Modal.js +78 -0
  16. package/dist/src/shared/__components__/Navbar.js +85 -0
  17. package/dist/src/shared/__components__/NavigationSteps.js +143 -0
  18. package/dist/src/shared/__components__/Pagination.js +53 -0
  19. package/dist/src/shared/__components__/ProductCard/ProductCardCheckbox.js +38 -0
  20. package/dist/src/shared/__components__/ProductCard/ProductCardDescription.js +84 -0
  21. package/dist/src/shared/__components__/ProductCard/ProductCardDiscountAlert.js +57 -0
  22. package/dist/src/shared/__components__/ProductCard/ProductCardImage.js +28 -0
  23. package/dist/src/shared/__components__/ProductCard/ProductCardPortalNote.js +61 -0
  24. package/dist/src/shared/__components__/ProductCard/ProductCardPrice.js +37 -0
  25. package/dist/src/shared/__components__/ProductCard/ProductCardRibbon.js +28 -0
  26. package/dist/src/shared/__components__/ProductCard/ProductCardSpecifications.js +77 -0
  27. package/dist/src/shared/__components__/ProductCard/ProductCardUsps.js +82 -0
  28. package/dist/src/shared/__components__/ProductCard/index.js +250 -0
  29. package/dist/src/shared/__components__/ProductTable/ProductTableEditableRow.js +66 -0
  30. package/dist/src/shared/__components__/ProductTable/ProductTableHead.js +32 -0
  31. package/dist/src/shared/__components__/ProductTable/ProductTableSection.js +25 -0
  32. package/dist/src/shared/__components__/ProductTable/ProductTableSectionTotal.js +46 -0
  33. package/dist/src/shared/__components__/ProductTable/ProductTableStaticRow.js +47 -0
  34. package/dist/src/shared/__components__/ProductTable/ProductTableTotal.js +41 -0
  35. package/dist/src/shared/__components__/ProductTable/index.js +127 -0
  36. package/dist/src/shared/__components__/SingleOrderCartCard.js +85 -0
  37. package/dist/src/shared/__components__/SingleOrderProductCard.js +387 -0
  38. package/dist/src/shared/__components__/Spinners/FullPageSpinner.js +76 -0
  39. package/dist/src/shared/__components__/Spinners/InlineSpinner.js +26 -0
  40. package/dist/src/shared/__components__/Spinners/TextSpinner.js +31 -0
  41. package/dist/src/shared/__components__/UspsList.js +27 -0
  42. package/dist/src/shared/__components__/internal/InternalCustomerDetailsForm.js +1095 -0
  43. package/dist/src/shared/__constants__/__tests__/index.test.js +53 -0
  44. package/dist/src/shared/__constants__/cartTable.js +35 -0
  45. package/dist/src/shared/__constants__/cookiebot.js +7 -0
  46. package/dist/src/shared/__constants__/index.js +451 -0
  47. package/dist/src/shared/__constants__/sentry.js +20 -0
  48. package/dist/src/shared/__containers__/ANWBMembershipInput.js +170 -0
  49. package/dist/src/shared/__containers__/AppointmentForm.js +551 -0
  50. package/dist/src/shared/__containers__/BoardComputerCard.js +140 -0
  51. package/dist/src/shared/__containers__/ExtraProductsOverview.js +6 -1
  52. package/dist/src/shared/__containers__/ProductCartSide.js +8 -2
  53. package/dist/src/shared/__containers__/ProductsCartOverview.js +8 -5
  54. package/dist/src/shared/__containers__/internal/InternalBranchSelectorModal.js +118 -35
  55. package/dist/src/shared/__containers__/internal/OrderTypeSelectorModal.js +8 -0
  56. package/dist/src/shared/__context__/OrderSessionContext.js +2 -0
  57. package/dist/src/shared/__helpers__/__tests__/resetConfiguratorOrderCache.test.js +39 -0
  58. package/dist/src/shared/__helpers__/__tests__/singleOrderBranchSelector.test.js +126 -0
  59. package/dist/src/shared/__helpers__/__tests__/singleOrderWebshop.test.js +17 -0
  60. package/dist/src/shared/__helpers__/index.js +30 -1
  61. package/dist/src/shared/__helpers__/product.js +1 -13
  62. package/dist/src/shared/__helpers__/resetConfiguratorOrderCache.js +22 -0
  63. package/dist/src/shared/__helpers__/singleOrderArticles.js +27 -15
  64. package/dist/src/shared/__helpers__/singleOrderBranchSelector.js +112 -2
  65. package/dist/src/shared/__helpers__/singleOrderCustomerDetails.js +1 -1
  66. package/dist/src/shared/__helpers__/singleOrderWebshop.js +46 -0
  67. package/dist/src/shared/__hooks__/useBranchTheme.js +12 -1
  68. package/dist/src/shared/__pages__/internal/InternalLicensePlatePage.js +26 -10
  69. package/dist/src/shared/__pages__/internal/InternalManualSelectionPage.js +8 -1
  70. package/dist/src/shared/__pages__/internal/InternalSingleOrderPage.js +21 -8
  71. package/dist/src/shared/__style__/_variables-external.scss +6 -0
  72. package/dist/src/shared/__style__/_variables.scss +6 -0
  73. package/dist/src/shared/__style__/configurator/_configurator.scss +100 -0
  74. package/package.json +1 -1
@@ -541,7 +541,8 @@ exports.useSingleOrderCart = useSingleOrderCart;
541
541
  const useOrderDataQuery = exports.useOrderDataQuery = function useOrderDataQuery() {
542
542
  let orderParameters = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
543
543
  const [{
544
- existingDossierId
544
+ existingDossierId,
545
+ singleOrderFlowRevision
545
546
  }] = (0, _OrderSessionContext.useOrderSession)();
546
547
  const pricingFormula = (0, _usePricingFormula.usePricingFormula)();
547
548
  const normalizedOrderParams = (0, _queryKeyFactory.normalizeOrderParams)(_objectSpread(_objectSpread({}, orderParameters), {}, {
@@ -558,7 +559,7 @@ const useOrderDataQuery = exports.useOrderDataQuery = function useOrderDataQuery
558
559
  initialized
559
560
  } = (0, _AuthSessionContext.useAuthSession)();
560
561
  const isSessionContextReady = (0, _useSessionContextReady.useSessionContextReady)();
561
- const orderQueryKey = APP_CONFIG.internal ? [...(0, _queryKeyFactory.getOrderQueryKey)(normalizedOrderParams), initialized, authenticated, isSessionContextReady] : (0, _queryKeyFactory.getOrderQueryKey)(normalizedOrderParams);
562
+ const orderQueryKey = APP_CONFIG.internal ? [...(0, _queryKeyFactory.getOrderQueryKey)(normalizedOrderParams), initialized, authenticated, isSessionContextReady, singleOrderFlowRevision] : (0, _queryKeyFactory.getOrderQueryKey)(normalizedOrderParams);
562
563
  const serializedOrderParams = (0, _queryKeyFactory.serializeOrderParams)(normalizedOrderParams);
563
564
  const hasOrderInput = (licensePlate === null || licensePlate === void 0 ? void 0 : licensePlate.length) > 5 || !!(model !== null && model !== void 0 && model.length);
564
565
  const orderQuery = (0, _reactQuery.useQuery)(orderQueryKey, {
@@ -704,6 +705,7 @@ const useQuestionsQuery = exports.useQuestionsQuery = function useQuestionsQuery
704
705
  const {
705
706
  orderData,
706
707
  isFetchingOrder,
708
+ isLoadingOrder,
707
709
  isOrderError,
708
710
  orderError
709
711
  } = useOrderDataQuery(normalizedQuestionParams);
@@ -719,7 +721,7 @@ const useQuestionsQuery = exports.useQuestionsQuery = function useQuestionsQuery
719
721
  }, [orderData === null || orderData === void 0 || (_orderData$executionA4 = orderData.executionAnswerOptions) === null || _orderData$executionA4 === void 0 ? void 0 : _orderData$executionA4.execution2AnswerOptions]);
720
722
  const durationQuestion = (0, _react.useMemo)(() => (0, _helpers__.parseArrayToInputOptions)(orderData === null || orderData === void 0 ? void 0 : orderData.durationAnswerOptions), [orderData === null || orderData === void 0 ? void 0 : orderData.durationAnswerOptions]);
721
723
  return {
722
- isLoadingQuestions: isFetchingOrder,
724
+ isLoadingQuestions: isFetchingOrder || isLoadingOrder,
723
725
  isQuestionsError: isOrderError,
724
726
  execution1Answer: orderData === null || orderData === void 0 || (_orderData$answers = orderData.answers) === null || _orderData$answers === void 0 ? void 0 : _orderData$answers.execution1,
725
727
  execution2Answer: orderData === null || orderData === void 0 || (_orderData$answers2 = orderData.answers) === null || _orderData$answers2 === void 0 ? void 0 : _orderData$answers2.execution2,
@@ -733,14 +735,14 @@ const useQuestionsQuery = exports.useQuestionsQuery = function useQuestionsQuery
733
735
  };
734
736
  };
735
737
  const useSingleOrderBranchesQuery = branchesParams => {
736
- var _branchesParams;
738
+ var _branchesParams, _branchesParams2;
737
739
  branchesParams = _objectSpread(_objectSpread({}, branchesParams), {}, {
738
740
  type: 'single-order'
739
741
  });
740
742
  const branchesParamsString = new URLSearchParams((0, _helpers__.removeNullishProps)(branchesParams)).toString();
741
743
  const branchesQuery = (0, _reactQuery.useQuery)(['single-order-branches', branchesParamsString], {
742
744
  queryFn: () => _authenticatedProxyApi.authenticatedProxyApi.getSingleOrderBranches(branchesParamsString).then(res => res.data),
743
- enabled: !!((_branchesParams = branchesParams) !== null && _branchesParams !== void 0 && _branchesParams.branchTypeId)
745
+ enabled: !!((_branchesParams = branchesParams) !== null && _branchesParams !== void 0 && _branchesParams.branchTypeId) || (0, _constants__.isLooseOrderOnlyFormula)((_branchesParams2 = branchesParams) === null || _branchesParams2 === void 0 ? void 0 : _branchesParams2.formula)
744
746
  });
745
747
  return {
746
748
  isLoadingSingleOrderBranches: branchesQuery.isLoading,
@@ -9,6 +9,9 @@ var _logoPrimaryIcon = _interopRequireDefault(require("../../../public/assets/im
9
9
  var _logoThcWhite = _interopRequireDefault(require("../../../public/assets/images/logo-thc-white.svg"));
10
10
  var _logoTmgPrimary = _interopRequireDefault(require("../../../public/assets/images/logo-tmg-primary.png"));
11
11
  var _tmLogo = _interopRequireDefault(require("../../../public/assets/images/tm-logo.png"));
12
+ var _logoWbPrimary = _interopRequireDefault(require("../../../public/assets/images/logo-wb-primary.png"));
13
+ var _logoThlPrimary = _interopRequireDefault(require("../../../public/assets/images/logo-thl-primary.png"));
14
+ var _logoThPrimary = _interopRequireDefault(require("../../../public/assets/images/logo-th-primary.png"));
12
15
  var _constants__ = require("../__constants__");
13
16
  var _helpers__ = require("../__helpers__");
14
17
  var _useBranchTheme = require("../__hooks__/useBranchTheme");
@@ -17,12 +20,53 @@ function _interopRequireDefault(e) {
17
20
  default: e
18
21
  };
19
22
  }
23
+ const getHeaderLogo = theme => {
24
+ switch (theme) {
25
+ case _constants__.BRANCH_THEME_BY_FORMULA.TowMotive:
26
+ return {
27
+ src: _tmLogo.default,
28
+ alt: 'TowMotive'
29
+ };
30
+ case _constants__.BRANCH_THEME_BY_FORMULA.Trekhaakcentrum:
31
+ return {
32
+ src: _logoThcWhite.default,
33
+ alt: 'Trekhaakcentrum'
34
+ };
35
+ case _constants__.BRANCH_THEME_BY_FORMULA.TowMotiveGroup:
36
+ return {
37
+ src: _logoTmgPrimary.default,
38
+ alt: 'TowMotive Group'
39
+ };
40
+ case _constants__.BRANCH_THEME_BY_FORMULA.WestfaliaBenelux:
41
+ return {
42
+ src: _logoWbPrimary.default,
43
+ alt: 'Westfalia Benelux'
44
+ };
45
+ case _constants__.BRANCH_THEME_BY_FORMULA.Trekhaakland:
46
+ return {
47
+ src: _logoThlPrimary.default,
48
+ alt: 'Trekhaakland'
49
+ };
50
+ case _constants__.BRANCH_THEME_BY_FORMULA.Trekhaken:
51
+ return {
52
+ src: _logoThPrimary.default,
53
+ alt: 'Trekhaken.nl'
54
+ };
55
+ default:
56
+ return {
57
+ src: _logoPrimaryIcon.default,
58
+ alt: 'Trekhaak Montage'
59
+ };
60
+ }
61
+ };
20
62
  const Header = _ref => {
21
63
  let {
22
64
  title,
23
65
  subtitle = ''
24
66
  } = _ref;
25
67
  const theme = (0, _useBranchTheme.useBranchTheme)();
68
+ const headerLogo = getHeaderLogo(theme);
69
+ const isWebshopTheme = theme === _constants__.BRANCH_THEME_BY_FORMULA.WestfaliaBenelux || theme === _constants__.BRANCH_THEME_BY_FORMULA.Trekhaakland || theme === _constants__.BRANCH_THEME_BY_FORMULA.Trekhaken;
26
70
  return /*#__PURE__*/_react.default.createElement("div", {
27
71
  className: (0, _helpers__.withStyle)("hero hero--offset")
28
72
  }, /*#__PURE__*/_react.default.createElement("div", {
@@ -32,9 +76,9 @@ const Header = _ref => {
32
76
  }, /*#__PURE__*/_react.default.createElement("div", {
33
77
  className: (0, _helpers__.withStyle)('col hero__logo-container')
34
78
  }, /*#__PURE__*/_react.default.createElement("img", {
35
- className: (0, _helpers__.withStyle)("hero__logo ".concat(theme === _constants__.BRANCH_THEME_BY_FORMULA.TowMotiveGroup ? 'hero__logo--tmg' : '')),
36
- src: theme === _constants__.BRANCH_THEME_BY_FORMULA.TowMotive ? _tmLogo.default : theme === _constants__.BRANCH_THEME_BY_FORMULA.Trekhaakcentrum ? _logoThcWhite.default : theme === _constants__.BRANCH_THEME_BY_FORMULA.TowMotiveGroup ? _logoTmgPrimary.default : _logoPrimaryIcon.default,
37
- alt: "Trekhaak Montage"
79
+ className: (0, _helpers__.withStyle)("hero__logo ".concat(theme === _constants__.BRANCH_THEME_BY_FORMULA.TowMotiveGroup ? 'hero__logo--tmg' : '', " ").concat(isWebshopTheme ? 'hero__logo--webshop' : '')),
80
+ src: headerLogo.src,
81
+ alt: headerLogo.alt
38
82
  }), /*#__PURE__*/_react.default.createElement("div", {
39
83
  className: (0, _helpers__.withStyle)('hero__inner d-none d-lg-block')
40
84
  }, /*#__PURE__*/_react.default.createElement("h2", null, (title === null || title === void 0 ? void 0 : title.length) > 0 ? title : 'Trekhaak offerte opstellen'), (subtitle === null || subtitle === void 0 ? void 0 : subtitle.length) > 0 && /*#__PURE__*/_react.default.createElement("p", {
@@ -0,0 +1,295 @@
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 _helpers__ = require("../../__helpers__");
21
+ function _getRequireWildcardCache(e) {
22
+ if ("function" != typeof WeakMap) return null;
23
+ var r = new WeakMap(),
24
+ t = new WeakMap();
25
+ return (_getRequireWildcardCache = function _getRequireWildcardCache(e) {
26
+ return e ? t : r;
27
+ })(e);
28
+ }
29
+ function _interopRequireWildcard(e, r) {
30
+ if (!r && e && e.__esModule) return e;
31
+ if (null === e || "object" != typeof e && "function" != typeof e) return {
32
+ default: e
33
+ };
34
+ var t = _getRequireWildcardCache(r);
35
+ if (t && t.has(e)) return t.get(e);
36
+ var n = {
37
+ __proto__: null
38
+ },
39
+ a = Object.defineProperty && Object.getOwnPropertyDescriptor;
40
+ for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) {
41
+ var i = a ? Object.getOwnPropertyDescriptor(e, u) : null;
42
+ i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u];
43
+ }
44
+ return n.default = e, t && t.set(e, n), n;
45
+ }
46
+ const isStatusPositive = status => status === true || status === 1 || status === 'ja' || status === 'Ja';
47
+ const StatusDot = _ref => {
48
+ let {
49
+ status
50
+ } = _ref;
51
+ const positive = isStatusPositive(status);
52
+ return /*#__PURE__*/_react.default.createElement("span", {
53
+ className: (0, _helpers__.withStyle)('d-flex align-items-center gap-1')
54
+ }, /*#__PURE__*/_react.default.createElement("span", {
55
+ style: {
56
+ width: 7,
57
+ height: 7,
58
+ borderRadius: '50%',
59
+ flexShrink: 0,
60
+ background: positive ? '#038808' : '#adb5bd',
61
+ display: 'inline-block'
62
+ }
63
+ }), /*#__PURE__*/_react.default.createElement("span", {
64
+ style: {
65
+ fontSize: 11,
66
+ fontWeight: 600,
67
+ color: positive ? '#038808' : '#6c757d'
68
+ }
69
+ }, positive ? 'Ja' : 'Nee'));
70
+ };
71
+ const ServiceRow = _ref2 => {
72
+ let {
73
+ icon,
74
+ label,
75
+ status,
76
+ bedrag,
77
+ voorwaarden
78
+ } = _ref2;
79
+ return /*#__PURE__*/_react.default.createElement("div", {
80
+ style: {
81
+ marginBottom: 6
82
+ }
83
+ }, /*#__PURE__*/_react.default.createElement("div", {
84
+ className: (0, _helpers__.withStyle)('d-flex align-items-center justify-content-between')
85
+ }, /*#__PURE__*/_react.default.createElement("span", {
86
+ className: (0, _helpers__.withStyle)('d-flex align-items-center gap-1')
87
+ }, /*#__PURE__*/_react.default.createElement("i", {
88
+ className: icon,
89
+ style: {
90
+ width: 14,
91
+ textAlign: 'center',
92
+ fontSize: 11,
93
+ color: '#6c757d'
94
+ }
95
+ }), /*#__PURE__*/_react.default.createElement("span", {
96
+ style: {
97
+ fontSize: 12,
98
+ fontWeight: 600,
99
+ color: '#343a40'
100
+ }
101
+ }, label)), /*#__PURE__*/_react.default.createElement("span", {
102
+ className: (0, _helpers__.withStyle)('d-flex align-items-center gap-2')
103
+ }, bedrag != null && bedrag !== '' && /*#__PURE__*/_react.default.createElement("span", {
104
+ style: {
105
+ fontSize: 11,
106
+ color: '#6c757d'
107
+ }
108
+ }, typeof bedrag === 'number' ? "\u20AC\xA0".concat(bedrag.toFixed(2)) : bedrag), /*#__PURE__*/_react.default.createElement(StatusDot, {
109
+ status: status
110
+ }))), voorwaarden && /*#__PURE__*/_react.default.createElement("p", {
111
+ style: {
112
+ margin: '2px 0 0 18px',
113
+ fontSize: 10,
114
+ color: '#6c757d',
115
+ fontStyle: 'italic',
116
+ lineHeight: 1.4
117
+ }
118
+ }, voorwaarden));
119
+ };
120
+ const SectionLabel = _ref3 => {
121
+ let {
122
+ icon,
123
+ label
124
+ } = _ref3;
125
+ return /*#__PURE__*/_react.default.createElement("p", {
126
+ className: (0, _helpers__.withStyle)('d-flex align-items-center gap-1 mb-1'),
127
+ style: {
128
+ fontSize: 11,
129
+ fontWeight: 700,
130
+ color: '#495057',
131
+ textTransform: 'uppercase',
132
+ letterSpacing: '0.04em'
133
+ }
134
+ }, /*#__PURE__*/_react.default.createElement("i", {
135
+ className: icon,
136
+ style: {
137
+ width: 14,
138
+ textAlign: 'center',
139
+ fontSize: 10,
140
+ color: '#6c757d'
141
+ }
142
+ }), label);
143
+ };
144
+ const formatDate = dateStr => {
145
+ if (!dateStr) return '';
146
+ const date = new Date(dateStr);
147
+ if (isNaN(date.getTime())) return dateStr;
148
+ return date.toLocaleDateString('nl-NL', {
149
+ day: '2-digit',
150
+ month: '2-digit',
151
+ year: 'numeric'
152
+ });
153
+ };
154
+
155
+ /**
156
+ * Normalises a raw branch object (from GET /branches/:id) into display props.
157
+ */
158
+ const buildDetailProps = branch => {
159
+ var _branch$haalEnBrengSe, _branch$extraGesloten;
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$haalEnBrengSe = branch.haalEnBrengServiceJaNee) !== null && _branch$haalEnBrengSe !== void 0 ? _branch$haalEnBrengSe : branch.haalEnBrengService,
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$extraGesloten = branch.extraGeslotenDagen) !== null && _branch$extraGesloten !== void 0 ? _branch$extraGesloten : branch.extraGeslotenDagenVestiging
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
+ initialBranch = null
187
+ } = _ref4;
188
+ const today = (0, _react.useMemo)(() => {
189
+ const d = new Date();
190
+ d.setHours(0, 0, 0, 0);
191
+ return d;
192
+ }, []);
193
+ const props = buildDetailProps(initialBranch);
194
+ if (!props) return null;
195
+ const {
196
+ leenauto,
197
+ leenfiets,
198
+ haalEnBrengservice,
199
+ betaalmethoden,
200
+ extraGeslotenDagen
201
+ } = props;
202
+ const upcomingGeslotenDagen = Array.isArray(extraGeslotenDagen) ? extraGeslotenDagen.filter(dag => {
203
+ if (!(dag !== null && dag !== void 0 && dag.einddatum)) return false;
204
+ const eindDatum = new Date(dag.einddatum);
205
+ eindDatum.setHours(0, 0, 0, 0);
206
+ return eindDatum >= today;
207
+ }) : [];
208
+ const hasLeenauto = leenauto != null;
209
+ const hasLeenfiets = leenfiets != null;
210
+ const hasHaalEnBreng = haalEnBrengservice != null;
211
+ const hasBetaalmethoden = Array.isArray(betaalmethoden) && betaalmethoden.length > 0;
212
+ const hasGeslotenDagen = upcomingGeslotenDagen.length > 0;
213
+ return /*#__PURE__*/_react.default.createElement("div", {
214
+ style: {
215
+ marginTop: 10,
216
+ paddingTop: 10,
217
+ borderTop: '1px solid #e9ecef'
218
+ }
219
+ }, (hasLeenauto || hasLeenfiets || hasHaalEnBreng) && /*#__PURE__*/_react.default.createElement("div", {
220
+ style: {
221
+ marginBottom: hasBetaalmethoden || hasGeslotenDagen ? 8 : 0
222
+ }
223
+ }, hasLeenauto && /*#__PURE__*/_react.default.createElement(ServiceRow, {
224
+ icon: "fas fa-car",
225
+ label: "Leenauto",
226
+ status: leenauto.status,
227
+ bedrag: leenauto.bedrag,
228
+ voorwaarden: leenauto.voorwaarden
229
+ }), hasLeenfiets && /*#__PURE__*/_react.default.createElement(ServiceRow, {
230
+ icon: "fas fa-bicycle",
231
+ label: "Leenfiets",
232
+ status: leenfiets.status,
233
+ voorwaarden: leenfiets.voorwaarden
234
+ }), hasHaalEnBreng && /*#__PURE__*/_react.default.createElement(ServiceRow, {
235
+ icon: "fas fa-truck",
236
+ label: "Haal- en brengservice",
237
+ status: haalEnBrengservice.status,
238
+ voorwaarden: haalEnBrengservice.voorwaarden
239
+ })), hasBetaalmethoden && /*#__PURE__*/_react.default.createElement("div", {
240
+ style: {
241
+ marginBottom: hasGeslotenDagen ? 8 : 0,
242
+ paddingTop: hasLeenauto || hasLeenfiets || hasHaalEnBreng ? 8 : 0,
243
+ borderTop: hasLeenauto || hasLeenfiets || hasHaalEnBreng ? '1px solid #f1f3f5' : 'none'
244
+ }
245
+ }, /*#__PURE__*/_react.default.createElement(SectionLabel, {
246
+ icon: "fas fa-credit-card",
247
+ label: "Betaalmethoden"
248
+ }), /*#__PURE__*/_react.default.createElement("div", {
249
+ className: (0, _helpers__.withStyle)('d-flex flex-wrap gap-1')
250
+ }, betaalmethoden.map((method, i) => /*#__PURE__*/_react.default.createElement("span", {
251
+ key: i,
252
+ style: {
253
+ fontSize: 10,
254
+ fontWeight: 600,
255
+ padding: '2px 7px',
256
+ borderRadius: 4,
257
+ border: '1px solid #dee2e6',
258
+ color: '#495057',
259
+ background: '#f8f9fa'
260
+ }
261
+ }, method)))), hasGeslotenDagen && /*#__PURE__*/_react.default.createElement("div", {
262
+ style: {
263
+ paddingTop: hasBetaalmethoden || hasLeenauto || hasLeenfiets || hasHaalEnBreng ? 8 : 0,
264
+ borderTop: hasBetaalmethoden || hasLeenauto || hasLeenfiets || hasHaalEnBreng ? '1px solid #f1f3f5' : 'none'
265
+ }
266
+ }, /*#__PURE__*/_react.default.createElement(SectionLabel, {
267
+ icon: "fas fa-calendar-times",
268
+ label: "Extra gesloten"
269
+ }), /*#__PURE__*/_react.default.createElement("ul", {
270
+ className: (0, _helpers__.withStyle)('list-unstyled mb-0')
271
+ }, upcomingGeslotenDagen.map((dag, i) => {
272
+ const heeftBereik = dag.startdatum && dag.einddatum && dag.startdatum !== dag.einddatum;
273
+ const datumLabel = heeftBereik ? "".concat(formatDate(dag.startdatum), " \u2013 ").concat(formatDate(dag.einddatum)) : formatDate(dag.einddatum || dag.startdatum);
274
+ return /*#__PURE__*/_react.default.createElement("li", {
275
+ key: i,
276
+ className: (0, _helpers__.withStyle)('d-flex justify-content-between align-items-baseline'),
277
+ style: {
278
+ marginBottom: 2
279
+ }
280
+ }, /*#__PURE__*/_react.default.createElement("span", {
281
+ style: {
282
+ fontSize: 11,
283
+ color: '#495057'
284
+ }
285
+ }, dag.omschrijving || '—'), /*#__PURE__*/_react.default.createElement("span", {
286
+ style: {
287
+ fontSize: 10,
288
+ color: '#6c757d',
289
+ marginLeft: 8,
290
+ whiteSpace: 'nowrap'
291
+ }
292
+ }, datumLabel));
293
+ }))));
294
+ };
295
+ 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;