thm-p3-configurator 0.0.340 → 0.0.341

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 (174) hide show
  1. package/dist/src/shared/App.js +80 -0
  2. package/dist/src/shared/__api__/__tests__/queryKeyFactory.test.js +114 -0
  3. package/dist/src/shared/__api__/_dummyApi.js +110 -0
  4. package/dist/src/shared/__api__/authenticatedProxyApi.js +310 -0
  5. package/dist/src/shared/__api__/mutations.js +838 -0
  6. package/dist/src/shared/__api__/orderApi.js +35 -0
  7. package/dist/src/shared/__api__/publicProxyApi.js +65 -0
  8. package/dist/src/shared/__api__/queries.js +892 -0
  9. package/dist/src/shared/__api__/queryKeyFactory.js +147 -0
  10. package/dist/src/shared/__components__/Buttons/LinkButton.js +56 -0
  11. package/dist/src/shared/__components__/Buttons/NavigationButton.js +40 -0
  12. package/dist/src/shared/__components__/Buttons/OutlinedButton.js +63 -0
  13. package/dist/src/shared/__components__/Buttons/PrimaryButton.js +55 -0
  14. package/dist/src/shared/__components__/Cards/Card.js +38 -0
  15. package/dist/src/shared/__components__/Cards/CardWide.js +27 -0
  16. package/dist/src/shared/__components__/Cards/ExpandableCard.js +79 -0
  17. package/dist/src/shared/__components__/Cards/TogglableCard.js +68 -0
  18. package/dist/src/shared/__components__/DangerAlert.js +23 -0
  19. package/dist/src/shared/__components__/EmptyState.js +30 -0
  20. package/dist/src/shared/__components__/Error.js +66 -0
  21. package/dist/src/shared/__components__/Form/CheckboxInput.js +87 -0
  22. package/dist/src/shared/__components__/Form/DatePickerInput.js +123 -0
  23. package/dist/src/shared/__components__/Form/DecimalInput.js +102 -0
  24. package/dist/src/shared/__components__/Form/DropdownInput.js +187 -0
  25. package/dist/src/shared/__components__/Form/ErrorMessage.js +23 -0
  26. package/dist/src/shared/__components__/Form/FormSteps.js +64 -0
  27. package/dist/src/shared/__components__/Form/LicensePlateInput.js +89 -0
  28. package/dist/src/shared/__components__/Form/MenuListWithSearchHint.js +25 -0
  29. package/dist/src/shared/__components__/Form/NumericInput.js +182 -0
  30. package/dist/src/shared/__components__/Form/RadioButtons.js +93 -0
  31. package/dist/src/shared/__components__/Form/RadioInput.js +83 -0
  32. package/dist/src/shared/__components__/Form/SearchableDropdownInput.js +257 -0
  33. package/dist/src/shared/__components__/Form/TextAreaInput.js +91 -0
  34. package/dist/src/shared/__components__/Form/TextInput.js +91 -0
  35. package/dist/src/shared/__components__/Form/TimePickerInput.js +129 -0
  36. package/dist/src/shared/__components__/Header.js +44 -0
  37. package/dist/src/shared/__components__/LocationsSelector/LocationAutoComplete.js +171 -0
  38. package/dist/src/shared/__components__/LocationsSelector/LocationClusteredMap.js +127 -0
  39. package/dist/src/shared/__components__/LocationsSelector/LocationClusteredTreeMarkers.js +247 -0
  40. package/dist/src/shared/__components__/LocationsSelector/LocationDetails.js +320 -0
  41. package/dist/src/shared/__components__/LocationsSelector/LocationInfo.js +139 -0
  42. package/dist/src/shared/__components__/LocationsSelector/LocationList.js +180 -0
  43. package/dist/src/shared/__components__/LocationsSelector/LocationListItem.js +103 -0
  44. package/dist/src/shared/__components__/LocationsSelector/LocationTreeMarker.js +96 -0
  45. package/dist/src/shared/__components__/LocationsSelector/index.js +162 -0
  46. package/dist/src/shared/__components__/Modal.js +78 -0
  47. package/dist/src/shared/__components__/Navbar.js +58 -0
  48. package/dist/src/shared/__components__/NavigationSteps.js +115 -0
  49. package/dist/src/shared/__components__/Pagination.js +53 -0
  50. package/dist/src/shared/__components__/ProductCard/ProductCardCheckbox.js +38 -0
  51. package/dist/src/shared/__components__/ProductCard/ProductCardDescription.js +77 -0
  52. package/dist/src/shared/__components__/ProductCard/ProductCardDiscountAlert.js +57 -0
  53. package/dist/src/shared/__components__/ProductCard/ProductCardImage.js +28 -0
  54. package/dist/src/shared/__components__/ProductCard/ProductCardPrice.js +37 -0
  55. package/dist/src/shared/__components__/ProductCard/ProductCardRibbon.js +28 -0
  56. package/dist/src/shared/__components__/ProductCard/ProductCardSpecifications.js +77 -0
  57. package/dist/src/shared/__components__/ProductCard/ProductCardUsps.js +82 -0
  58. package/dist/src/shared/__components__/ProductCard/index.js +173 -0
  59. package/dist/src/shared/__components__/ProductTable/ProductTableEditableRow.js +66 -0
  60. package/dist/src/shared/__components__/ProductTable/ProductTableHead.js +32 -0
  61. package/dist/src/shared/__components__/ProductTable/ProductTableSection.js +25 -0
  62. package/dist/src/shared/__components__/ProductTable/ProductTableSectionTotal.js +44 -0
  63. package/dist/src/shared/__components__/ProductTable/ProductTableStaticRow.js +47 -0
  64. package/dist/src/shared/__components__/ProductTable/ProductTableTotal.js +41 -0
  65. package/dist/src/shared/__components__/ProductTable/index.js +127 -0
  66. package/dist/src/shared/__components__/SingleOrderCartCard.js +78 -0
  67. package/dist/src/shared/__components__/SingleOrderProductCard.js +269 -0
  68. package/dist/src/shared/__components__/Spinners/FullPageSpinner.js +73 -0
  69. package/dist/src/shared/__components__/Spinners/InlineSpinner.js +26 -0
  70. package/dist/src/shared/__components__/Spinners/TextSpinner.js +31 -0
  71. package/dist/src/shared/__components__/UspsList.js +27 -0
  72. package/dist/src/shared/__components__/internal/InternalCustomerDetailsForm.js +951 -0
  73. package/dist/src/shared/__constants__/cartTable.js +32 -0
  74. package/dist/src/shared/__constants__/cookiebot.js +7 -0
  75. package/dist/src/shared/__constants__/index.js +311 -0
  76. package/dist/src/shared/__constants__/sentry.js +20 -0
  77. package/dist/src/shared/__containers__/ANWBMembershipInput.js +165 -0
  78. package/dist/src/shared/__containers__/AppointmentForm.js +389 -0
  79. package/dist/src/shared/__containers__/BoardComputerCard.js +137 -0
  80. package/dist/src/shared/__containers__/BottomNavigationBar.js +162 -0
  81. package/dist/src/shared/__containers__/DiscountProductsSelector.js +149 -0
  82. package/dist/src/shared/__containers__/ExitIntentModal.js +278 -0
  83. package/dist/src/shared/__containers__/ExtraProductsOverview.js +227 -0
  84. package/dist/src/shared/__containers__/LicensePlateForm.js +148 -0
  85. package/dist/src/shared/__containers__/ManualSelectionForm.js +258 -0
  86. package/dist/src/shared/__containers__/ProductCartSide.js +356 -0
  87. package/dist/src/shared/__containers__/ProductDiscountCard.js +167 -0
  88. package/dist/src/shared/__containers__/ProductsCartOverview.js +837 -0
  89. package/dist/src/shared/__containers__/ProductsOverview.js +416 -0
  90. package/dist/src/shared/__containers__/QuestionsForm.js +460 -0
  91. package/dist/src/shared/__containers__/QuotationForm.js +374 -0
  92. package/dist/src/shared/__containers__/QuotationSuccessModal.js +34 -0
  93. package/dist/src/shared/__containers__/SentryWrapper.js +60 -0
  94. package/dist/src/shared/__containers__/StyleWrapper.js +81 -0
  95. package/dist/src/shared/__containers__/VehicleData.js +190 -0
  96. package/dist/src/shared/__containers__/internal/DirectVehicleSelectorModal.js +125 -0
  97. package/dist/src/shared/__containers__/internal/InternalAppointmentForm.js +1650 -0
  98. package/dist/src/shared/__containers__/internal/InternalAppointmentSuccessModal.js +116 -0
  99. package/dist/src/shared/__containers__/internal/InternalBranchSelectorModal.js +483 -0
  100. package/dist/src/shared/__containers__/internal/InternalCancelDossierEdit.js +73 -0
  101. package/dist/src/shared/__containers__/internal/InternalDiscountCodeSelector.js +78 -0
  102. package/dist/src/shared/__containers__/internal/InternalDiscountForm.js +156 -0
  103. package/dist/src/shared/__containers__/internal/InternalExtraPriceForm.js +143 -0
  104. package/dist/src/shared/__containers__/internal/InternalLicenseplateModal.js +131 -0
  105. package/dist/src/shared/__containers__/internal/InternalPriceCalculationSelector.js +52 -0
  106. package/dist/src/shared/__containers__/internal/InternalQuotationForm.js +1056 -0
  107. package/dist/src/shared/__containers__/internal/InternalQuotationSuccessModal.js +114 -0
  108. package/dist/src/shared/__containers__/internal/InternalSingleOrderCart.js +97 -0
  109. package/dist/src/shared/__containers__/internal/InternalSingleOrderFilters.js +318 -0
  110. package/dist/src/shared/__containers__/internal/InternalSingleOrderProductOverview.js +201 -0
  111. package/dist/src/shared/__containers__/internal/InternalSingleOrderSidebar.js +21 -0
  112. package/dist/src/shared/__containers__/internal/InternalSingleOrderSuccessModal.js +57 -0
  113. package/dist/src/shared/__containers__/internal/OrderTypeSelectorModal.js +136 -0
  114. package/dist/src/shared/__containers__/internal/index.js +73 -0
  115. package/dist/src/shared/__context__/ActiveMarkerContext.js +44 -0
  116. package/dist/src/shared/__context__/AuthSessionContext.js +157 -0
  117. package/dist/src/shared/__context__/CountryContext.js +63 -0
  118. package/dist/src/shared/__context__/FormulaContext.js +69 -0
  119. package/dist/src/shared/__context__/OrderSessionContext.js +1452 -0
  120. package/dist/src/shared/__context__/ThemeContext.js +57 -0
  121. package/dist/src/shared/__helpers__/cartTable.js +424 -0
  122. package/dist/src/shared/__helpers__/cookieManager.js +44 -0
  123. package/dist/src/shared/__helpers__/cookiebot.js +30 -0
  124. package/dist/src/shared/__helpers__/dossier.js +324 -0
  125. package/dist/src/shared/__helpers__/geolocation.js +70 -0
  126. package/dist/src/shared/__helpers__/image.js +88 -0
  127. package/dist/src/shared/__helpers__/index.js +307 -0
  128. package/dist/src/shared/__helpers__/montageRate.js +71 -0
  129. package/dist/src/shared/__helpers__/product.js +192 -0
  130. package/dist/src/shared/__helpers__/queryClient.js +23 -0
  131. package/dist/src/shared/__helpers__/singleOrderArticles.js +328 -0
  132. package/dist/src/shared/__helpers__/ui.js +39 -0
  133. package/dist/src/shared/__hooks__/useArticleTypes.js +23 -0
  134. package/dist/src/shared/__hooks__/useAuthSession.js +12 -0
  135. package/dist/src/shared/__hooks__/useBranchTheme.js +84 -0
  136. package/dist/src/shared/__hooks__/useBreakpoint.js +68 -0
  137. package/dist/src/shared/__hooks__/useCheckEmailExists.js +90 -0
  138. package/dist/src/shared/__hooks__/useIsSingleOrder.js +18 -0
  139. package/dist/src/shared/__hooks__/useIsTmg.js +25 -0
  140. package/dist/src/shared/__hooks__/useIsTowmotive.js +23 -0
  141. package/dist/src/shared/__hooks__/useSearchParam.js +29 -0
  142. package/dist/src/shared/__hooks__/useSessionContextReady.js +16 -0
  143. package/dist/src/shared/__hooks__/useUserLocation.js +51 -0
  144. package/dist/src/shared/__pages__/AppointmentPage.js +42 -0
  145. package/dist/src/shared/__pages__/AppointmentThanksPage.js +59 -0
  146. package/dist/src/shared/__pages__/ExtraProductsPage.js +41 -0
  147. package/dist/src/shared/__pages__/LicensePlatePage.js +178 -0
  148. package/dist/src/shared/__pages__/LocationsPage.js +32 -0
  149. package/dist/src/shared/__pages__/ManualSelectionPage.js +161 -0
  150. package/dist/src/shared/__pages__/NoProductsPage.js +101 -0
  151. package/dist/src/shared/__pages__/NotFoundPage.js +27 -0
  152. package/dist/src/shared/__pages__/OverviewPage.js +56 -0
  153. package/dist/src/shared/__pages__/ProductsPage.js +48 -0
  154. package/dist/src/shared/__pages__/QuotationPage.js +38 -0
  155. package/dist/src/shared/__pages__/QuotationThanksPage.js +95 -0
  156. package/dist/src/shared/__pages__/index.js +156 -0
  157. package/dist/src/shared/__pages__/internal/InternalAppointmentPage.js +300 -0
  158. package/dist/src/shared/__pages__/internal/InternalExtraProductsPage.js +48 -0
  159. package/dist/src/shared/__pages__/internal/InternalLicensePlatePage.js +147 -0
  160. package/dist/src/shared/__pages__/internal/InternalLocationsPage.js +106 -0
  161. package/dist/src/shared/__pages__/internal/InternalManualSelectionPage.js +157 -0
  162. package/dist/src/shared/__pages__/internal/InternalNoDossierPage.js +82 -0
  163. package/dist/src/shared/__pages__/internal/InternalNoProductsPage.js +96 -0
  164. package/dist/src/shared/__pages__/internal/InternalOverviewPage.js +65 -0
  165. package/dist/src/shared/__pages__/internal/InternalProductsPage.js +49 -0
  166. package/dist/src/shared/__pages__/internal/InternalQuotationPage.js +253 -0
  167. package/dist/src/shared/__pages__/internal/InternalSessionEditPage.js +180 -0
  168. package/dist/src/shared/__pages__/internal/InternalSingleOrderPage.js +460 -0
  169. package/dist/src/shared/__pages__/internal/__TEST_ONLY_INTERNAL_ROUTES.js +95 -0
  170. package/dist/src/shared/__pages__/internal/index.js +94 -0
  171. package/dist/src/shared/__services__/ANWBValidator.js +136 -0
  172. package/dist/src/shared/__services__/AddressLookupService.js +137 -0
  173. package/dist/src/shared/__services__/AuthRuntime.js +57 -0
  174. package/package.json +1 -1
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+
3
+ require("core-js/modules/es.weak-map.js");
4
+ require("core-js/modules/web.dom-collections.iterator.js");
5
+ require("core-js/modules/es.weak-map.js");
6
+ require("core-js/modules/web.dom-collections.iterator.js");
7
+ Object.defineProperty(exports, "__esModule", {
8
+ value: true
9
+ });
10
+ exports.default = void 0;
11
+ var _react = _interopRequireWildcard(require("react"));
12
+ require("react-datepicker/src/stylesheets/datepicker-cssmodules.scss");
13
+ var _reactGtmModule = _interopRequireDefault(require("react-gtm-module"));
14
+ var _reactHotLoader = require("react-hot-loader");
15
+ var _reactQuery = require("react-query");
16
+ var _reactRouterDom = require("react-router-dom");
17
+ var _Navbar = _interopRequireDefault(require("./__components__/Navbar"));
18
+ var _constants__ = require("./__constants__");
19
+ var _SentryWrapper = _interopRequireDefault(require("./__containers__/SentryWrapper"));
20
+ var _pages__ = _interopRequireDefault(require("./__pages__"));
21
+ var _TEST_ONLY_INTERNAL_ROUTES = _interopRequireDefault(require("./__pages__/internal/__TEST_ONLY_INTERNAL_ROUTES"));
22
+ var _StyleWrapper = _interopRequireDefault(require("./__containers__/StyleWrapper"));
23
+ var _InternalBranchSelectorModal = _interopRequireDefault(require("./__containers__/internal/InternalBranchSelectorModal"));
24
+ var _ActiveMarkerContext = require("./__context__/ActiveMarkerContext");
25
+ var _CountryContext = require("./__context__/CountryContext");
26
+ var _FormulaContext = require("./__context__/FormulaContext");
27
+ var _OrderSessionContext = require("./__context__/OrderSessionContext");
28
+ var _cookiebot = require("./__helpers__/cookiebot");
29
+ var _queryClient = _interopRequireDefault(require("./__helpers__/queryClient"));
30
+ var _Experiments = _interopRequireDefault(require("./__services__/Experiments"));
31
+ var _mainExternal = _interopRequireDefault(require("./__style__/main-external.scss"));
32
+ var _main = _interopRequireDefault(require("./__style__/main.scss"));
33
+ function _interopRequireDefault(e) {
34
+ return e && e.__esModule ? e : {
35
+ default: e
36
+ };
37
+ }
38
+ function _getRequireWildcardCache(e) {
39
+ if ("function" != typeof WeakMap) return null;
40
+ var r = new WeakMap(),
41
+ t = new WeakMap();
42
+ return (_getRequireWildcardCache = function _getRequireWildcardCache(e) {
43
+ return e ? t : r;
44
+ })(e);
45
+ }
46
+ function _interopRequireWildcard(e, r) {
47
+ if (!r && e && e.__esModule) return e;
48
+ if (null === e || "object" != typeof e && "function" != typeof e) return {
49
+ default: e
50
+ };
51
+ var t = _getRequireWildcardCache(r);
52
+ if (t && t.has(e)) return t.get(e);
53
+ var n = {
54
+ __proto__: null
55
+ },
56
+ a = Object.defineProperty && Object.getOwnPropertyDescriptor;
57
+ for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) {
58
+ var i = a ? Object.getOwnPropertyDescriptor(e, u) : null;
59
+ i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u];
60
+ }
61
+ return n.default = e, t && t.set(e, n), n;
62
+ }
63
+ _reactGtmModule.default.initialize({
64
+ gtmId: APP_CONFIG.googleTagManagerId || 'GTM-TC67SZ4'
65
+ });
66
+ window.styles = APP_CONFIG.internal ? _main.default : _mainExternal.default;
67
+ const App = () => {
68
+ (0, _cookiebot.listenToCookiebotEvents)();
69
+ (0, _react.useEffect)(() => {
70
+ (0, _Experiments.default)();
71
+ });
72
+ return /*#__PURE__*/_react.default.createElement(_SentryWrapper.default, null, /*#__PURE__*/_react.default.createElement(_FormulaContext.FormulaController, {
73
+ defaultFormula: _constants__.CONFIGURATOR_FORMULAS.THM
74
+ }, /*#__PURE__*/_react.default.createElement(_CountryContext.CountryController, {
75
+ defaultCountry: APP_CONFIG.country
76
+ }, /*#__PURE__*/_react.default.createElement(_OrderSessionContext.OrderSessionController, null, /*#__PURE__*/_react.default.createElement(_reactQuery.QueryClientProvider, {
77
+ client: _queryClient.default
78
+ }, /*#__PURE__*/_react.default.createElement(_reactRouterDom.BrowserRouter, null, /*#__PURE__*/_react.default.createElement(_reactHotLoader.AppContainer, null, /*#__PURE__*/_react.default.createElement(_ActiveMarkerContext.ActiveMarkerProvider, null, /*#__PURE__*/_react.default.createElement(_StyleWrapper.default, null, !APP_CONFIG.internal && /*#__PURE__*/_react.default.createElement(_Navbar.default, null), APP_CONFIG.internal && /*#__PURE__*/_react.default.createElement(_InternalBranchSelectorModal.default, null), /*#__PURE__*/_react.default.createElement(_pages__.default, null))))))))));
79
+ };
80
+ var _default = exports.default = App;
@@ -0,0 +1,114 @@
1
+ "use strict";
2
+
3
+ require("core-js/modules/es.json.stringify.js");
4
+ require("core-js/modules/es.json.stringify.js");
5
+ var _queryKeyFactory = require("../queryKeyFactory");
6
+ describe('queryKeyFactory', () => {
7
+ beforeEach(() => {
8
+ global.APP_CONFIG = {
9
+ internal: true
10
+ };
11
+ });
12
+ it('normalizes buildYear into constructionYear without mutating input', () => {
13
+ const params = {
14
+ buildYear: '2024',
15
+ formula: 'THC',
16
+ skipFilters: false,
17
+ discountAmount: 0,
18
+ priceCalculationDate: '2026-03-09'
19
+ };
20
+ const normalized = (0, _queryKeyFactory.normalizeOrderParams)(params);
21
+ expect(normalized).toEqual({
22
+ constructionYear: '2024',
23
+ formula: 'THC',
24
+ skipFilters: false,
25
+ discountAmount: 0,
26
+ priceCalculationDate: '2026-03-09'
27
+ });
28
+ expect(params).toEqual({
29
+ buildYear: '2024',
30
+ formula: 'THC',
31
+ skipFilters: false,
32
+ discountAmount: 0,
33
+ priceCalculationDate: '2026-03-09'
34
+ });
35
+ });
36
+ it('drops priceCalculationDate for external mode', () => {
37
+ global.APP_CONFIG = {
38
+ internal: false
39
+ };
40
+ expect((0, _queryKeyFactory.normalizeOrderParams)({
41
+ formula: 'THC',
42
+ priceCalculationDate: '2026-03-09'
43
+ })).toEqual({
44
+ formula: 'THC'
45
+ });
46
+ });
47
+ it('serializes order params in stable priority order', () => {
48
+ const first = (0, _queryKeyFactory.serializeOrderParams)({
49
+ cart: '[]',
50
+ formula: 'THC',
51
+ buildYear: '2024',
52
+ licensePlate: '12AB34',
53
+ extraPriceAmount: 10,
54
+ durationAnswer: 'Lang'
55
+ });
56
+ const second = (0, _queryKeyFactory.serializeOrderParams)({
57
+ extraPriceAmount: 10,
58
+ durationAnswer: 'Lang',
59
+ licensePlate: '12AB34',
60
+ formula: 'THC',
61
+ cart: '[]',
62
+ buildYear: '2024'
63
+ });
64
+ expect(first).toBe('licensePlate=12AB34&formula=THC&constructionYear=2024&durationAnswer=Lang&extraPriceAmount=10&cart=%5B%5D');
65
+ expect(second).toBe(first);
66
+ });
67
+ it('preserves legacy getOrder request semantics by omitting falsy values', () => {
68
+ expect((0, _queryKeyFactory.serializeOrderParams)({
69
+ licensePlate: '12AB34',
70
+ formula: 'THC',
71
+ discountAmount: 0,
72
+ skipFilters: false,
73
+ extraPriceAmount: null
74
+ })).toBe('licensePlate=12AB34&formula=THC');
75
+ });
76
+ it('builds order query keys from serialized order params', () => {
77
+ expect((0, _queryKeyFactory.getOrderQueryKey)({
78
+ licensePlate: '12AB34',
79
+ formula: 'THC'
80
+ })).toEqual(['order', 'licensePlate=12AB34&formula=THC']);
81
+ });
82
+ it('includes formula in brands and build-years keys', () => {
83
+ expect((0, _queryKeyFactory.getBrandsQueryKey)('TMG')).toEqual(['brands', 'TMG']);
84
+ expect((0, _queryKeyFactory.getBuildYearsQueryKey)({
85
+ brand: 'Volvo',
86
+ formula: 'TMG'
87
+ })).toEqual(['buildYears', 'Volvo', 'TMG']);
88
+ });
89
+ it('includes formula in single-order-articles keys', () => {
90
+ const first = (0, _queryKeyFactory.getSingleOrderArticlesKey)({
91
+ filters: {
92
+ brand: 'Volvo',
93
+ articleNumber: '123'
94
+ },
95
+ formula: 'TMG',
96
+ branchId: 'branch-1',
97
+ webshop: false
98
+ });
99
+ const second = (0, _queryKeyFactory.getSingleOrderArticlesKey)({
100
+ filters: {
101
+ articleNumber: '123',
102
+ brand: 'Volvo'
103
+ },
104
+ formula: 'TMG',
105
+ branchId: 'branch-1',
106
+ webshop: false
107
+ });
108
+ expect(first).toEqual(['singleOrderArticles', JSON.stringify({
109
+ articleNumber: '123',
110
+ brand: 'Volvo'
111
+ }), 'TMG', 'branch-1', false]);
112
+ expect(second).toEqual(first);
113
+ });
114
+ });
@@ -0,0 +1,110 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.dummyApi = void 0;
7
+ var _bikeCarrier = _interopRequireDefault(require("../../../public/assets/images/dummy/bike-carrier.jpg"));
8
+ var _extra = _interopRequireDefault(require("../../../public/assets/images/dummy/extra.png"));
9
+ var _licensePlateWhite = _interopRequireDefault(require("../../../public/assets/images/dummy/license-plate-white.png"));
10
+ var _towbar = _interopRequireDefault(require("../../../public/assets/images/dummy/towbar-1.jpg"));
11
+ var _towbar2 = _interopRequireDefault(require("../../../public/assets/images/dummy/towbar-2.jpg"));
12
+ function _interopRequireDefault(e) {
13
+ return e && e.__esModule ? e : {
14
+ default: e
15
+ };
16
+ }
17
+ const dummyApi = exports.dummyApi = {
18
+ getCart: () => ({
19
+ data: {
20
+ editable: [{
21
+ id: 'onetwothree',
22
+ title: 'Trekhaken verticaal afneembaar',
23
+ price: 50,
24
+ image: _towbar.default,
25
+ amount: 50
26
+ }],
27
+ static: [{
28
+ id: 'onetwothree',
29
+ title: 'Trekhaken verticaal afneembaar',
30
+ price: 100,
31
+ image: _towbar2.default
32
+ }]
33
+ }
34
+ }),
35
+ getExtraProducts: () => ({
36
+ data: [{
37
+ isRecommended: false,
38
+ productId: 10,
39
+ productTitle: 'Witte kentekenplaat',
40
+ productDescription: "Witte kentekenplaat voor fietsendragers en aanhangwagens/caravans tot 750 kg.",
41
+ productImage: _licensePlateWhite.default,
42
+ productPrice: 249.99,
43
+ productDiscountedPrice: 199.99,
44
+ productCategory: 'Handige Accessoires'
45
+ }, {
46
+ isRecommended: false,
47
+ productId: 50,
48
+ productTitle: 'Verloopstekker 13- naar 7-polig',
49
+ productDescription: "D.m.v een verloopstekker kunnen ook oudere types\naanhangers, boot- of paardentrailers en fietsendragers\nworden aangesloten op uw 13-polige kabelset.",
50
+ productImage: _extra.default,
51
+ productPrice: 249.99,
52
+ productDiscountedPrice: 199.99,
53
+ productCategory: 'Handige Accessoires'
54
+ }, {
55
+ productId: 20,
56
+ isRecommended: false,
57
+ productTitle: 'Yakima Foldclick 2',
58
+ productDescription: "D.m.v een verloopstekker kunnen ook oudere types\naanhangers, boot- of paardentrailers en\nfietsendragers worden aangesloten op uw\n13-polige kabelset",
59
+ productImage: _bikeCarrier.default,
60
+ productPrice: 299.99,
61
+ productDiscountedPrice: 249.99,
62
+ productCategory: 'Fietsendragers'
63
+ }, {
64
+ productId: 30,
65
+ isRecommended: false,
66
+ productTitle: 'Yakima Foldclick 3',
67
+ productDescription: "D.m.v een verloopstekker kunnen ook oudere types\n aanhangers, boot- of paardentrailers en\n fietsendragers worden aangesloten op uw\n 13-polige kabelset",
68
+ productImage: _bikeCarrier.default,
69
+ productPrice: 500.99,
70
+ productDiscountedPrice: 400.99,
71
+ productCategory: 'Fietsendragers'
72
+ }]
73
+ }),
74
+ getLocations: () => {
75
+ return {
76
+ data: [{
77
+ description: 'Garagebedrijf Peter Peeters is het adres voor trekhaakmontages in Zuiderhout. \r\rBij ons kunt u rekenen op deskundige montage van trekhaak en kabelset. \r\rTevens kunnen wij u uitstekend adviseren over de producten en toepassingen. \r\rKom snel langs of plan een afspraak in.',
78
+ title: 'Trekhaak Montage vestiging',
79
+ postCode: '4921PJ',
80
+ street: 'Brieltjenspolder',
81
+ city: 'Made',
82
+ telephoneNumber: '085-0004122',
83
+ latitude: 51.67353,
84
+ longitude: 4.81503,
85
+ id: 165522,
86
+ image: 'https://trekhaak-labels-api-production.s3.eu-central-1.amazonaws.com/6a88a0b9-5885-4f2a-9243-1dd2e9773fa5'
87
+ }, {
88
+ description: 'Garagebedrijf Peter Peeters is het adres voor trekhaakmontages in Zuiderhout. \r\rBij ons kunt u rekenen op deskundige montage van trekhaak en kabelset. \r\rTevens kunnen wij u uitstekend adviseren over de producten en toepassingen. \r\rKom snel langs of plan een afspraak in.',
89
+ title: 'Misker Hardenberg B.V. (JAMES)',
90
+ postCode: '7772SG',
91
+ street: 'J.C. Kellerlaan',
92
+ city: 'Hardenberg',
93
+ telephoneNumber: '0523 - 262 777',
94
+ latitude: 52.56026,
95
+ longitude: 6.62978,
96
+ id: 1666
97
+ }]
98
+ };
99
+ },
100
+ createQuotation: quotationInput => ({
101
+ data: {
102
+ success: true
103
+ }
104
+ }),
105
+ createAppointment: appointmentInput => ({
106
+ data: {
107
+ success: true
108
+ }
109
+ })
110
+ };
@@ -0,0 +1,310 @@
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.promise.finally.js");
6
+ require("core-js/modules/es.string.includes.js");
7
+ Object.defineProperty(exports, "__esModule", {
8
+ value: true
9
+ });
10
+ exports.authenticatedProxyApi = void 0;
11
+ require("core-js/modules/es.array.includes.js");
12
+ require("core-js/modules/es.promise.js");
13
+ require("core-js/modules/es.promise.finally.js");
14
+ require("core-js/modules/es.string.includes.js");
15
+ var _axios = _interopRequireDefault(require("axios"));
16
+ var _AuthRuntime = require("../__services__/AuthRuntime");
17
+ function _interopRequireDefault(e) {
18
+ return e && e.__esModule ? e : {
19
+ default: e
20
+ };
21
+ }
22
+ const authenticatedClient = _axios.default.create({
23
+ baseURL: APP_CONFIG.proxyUrl,
24
+ withCredentials: true
25
+ });
26
+ const sessionClient = _axios.default.create({
27
+ baseURL: APP_CONFIG.proxyUrl,
28
+ withCredentials: true
29
+ });
30
+ let refreshPromise = null;
31
+ const syncRuntimeSession = function syncRuntimeSession() {
32
+ var _payload$branch$entit, _payload$branch;
33
+ let payload = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
34
+ if (!(payload !== null && payload !== void 0 && payload.authenticated)) {
35
+ _AuthRuntime.authRuntime.clear();
36
+ return false;
37
+ }
38
+ _AuthRuntime.authRuntime.setCsrfToken(payload.csrfToken || null);
39
+ _AuthRuntime.authRuntime.setActiveBranchId((_payload$branch$entit = (_payload$branch = payload.branch) === null || _payload$branch === void 0 ? void 0 : _payload$branch.entityId) !== null && _payload$branch$entit !== void 0 ? _payload$branch$entit : null);
40
+ return true;
41
+ };
42
+ const refreshSession = () => {
43
+ if (!refreshPromise) {
44
+ refreshPromise = sessionClient('api/v1/auth', {
45
+ method: 'PUT'
46
+ }).then(response => {
47
+ syncRuntimeSession((response === null || response === void 0 ? void 0 : response.data) || {});
48
+ return response;
49
+ }).finally(() => {
50
+ refreshPromise = null;
51
+ });
52
+ }
53
+ return refreshPromise;
54
+ };
55
+ const resyncSession = async () => {
56
+ const response = await sessionClient('api/v1/auth/session', {
57
+ method: 'GET'
58
+ });
59
+ syncRuntimeSession((response === null || response === void 0 ? void 0 : response.data) || {});
60
+ return response;
61
+ };
62
+ const attachSessionHeaders = function attachSessionHeaders() {
63
+ let config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
64
+ config.headers = config.headers || {};
65
+ const branchId = _AuthRuntime.authRuntime.getActiveBranchId();
66
+ if (branchId) {
67
+ config.headers['active-branch-id'] = branchId;
68
+ }
69
+ const method = (config.method || 'get').toLowerCase();
70
+ if (!['get', 'head', 'options'].includes(method)) {
71
+ const csrf = _AuthRuntime.authRuntime.getCsrfToken();
72
+ if (csrf) {
73
+ config.headers['X-CSRF-Token'] = csrf;
74
+ }
75
+ }
76
+ return config;
77
+ };
78
+ authenticatedClient.interceptors.request.use(config => attachSessionHeaders(config));
79
+ sessionClient.interceptors.request.use(config => {
80
+ const normalizedConfig = attachSessionHeaders(config);
81
+ if (normalizedConfig !== null && normalizedConfig !== void 0 && normalizedConfig.headers) {
82
+ delete normalizedConfig.headers['active-branch-id'];
83
+ }
84
+ return normalizedConfig;
85
+ });
86
+ authenticatedClient.interceptors.response.use(response => response, async error => {
87
+ var _error$response, _originalRequest$url;
88
+ const status = error === null || error === void 0 || (_error$response = error.response) === null || _error$response === void 0 ? void 0 : _error$response.status;
89
+ const originalRequest = (error === null || error === void 0 ? void 0 : error.config) || {};
90
+ if (![401, 403].includes(status) || originalRequest._retry || (_originalRequest$url = originalRequest.url) !== null && _originalRequest$url !== void 0 && _originalRequest$url.includes('api/v1/auth')) {
91
+ return Promise.reject(error);
92
+ }
93
+ originalRequest._retry = true;
94
+ try {
95
+ await refreshSession();
96
+ } catch (refreshError) {
97
+ var _sessionResponse$data;
98
+ const sessionResponse = await resyncSession().catch(() => null);
99
+ if (!(sessionResponse !== null && sessionResponse !== void 0 && (_sessionResponse$data = sessionResponse.data) !== null && _sessionResponse$data !== void 0 && _sessionResponse$data.authenticated)) {
100
+ return Promise.reject(refreshError);
101
+ }
102
+ }
103
+ return authenticatedClient(originalRequest);
104
+ });
105
+ const authenticatedProxyApi = exports.authenticatedProxyApi = {
106
+ getSession: () => sessionClient('api/v1/auth/session', {
107
+ method: 'GET'
108
+ }),
109
+ putSessionContext: function putSessionContext() {
110
+ let {
111
+ branchEntityId,
112
+ formula,
113
+ module
114
+ } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
115
+ return authenticatedClient('api/v1/auth/context', {
116
+ method: 'PUT',
117
+ data: {
118
+ branchEntityId,
119
+ formula,
120
+ module
121
+ }
122
+ });
123
+ },
124
+ getArticleTypes: () => authenticatedClient("api/v1/articles/types", {
125
+ method: 'GET'
126
+ }),
127
+ getCountries: () => authenticatedClient("api/v1/countries", {
128
+ method: 'GET'
129
+ }),
130
+ putRefreshToken: () => refreshSession(),
131
+ getArticleGroups: articleTypeId => authenticatedClient("api/v1/articles/groups/".concat(articleTypeId), {
132
+ method: 'GET'
133
+ }),
134
+ getArticleSubGroups: (articleGroupId, formula) => authenticatedClient("api/v1/articles/subgroups/".concat(articleGroupId, "?formula=").concat(formula), {
135
+ method: 'GET'
136
+ }),
137
+ getArticles: filtersQueryString => authenticatedClient("api/v1/articles?".concat(filtersQueryString), {
138
+ method: 'GET'
139
+ }),
140
+ getBrandsByArticleNumbers: articleNumbersString => authenticatedClient("api/v1/articles/brands?".concat(articleNumbersString), {
141
+ method: 'GET'
142
+ }),
143
+ deleteLogout: () => sessionClient("api/v1/auth", {
144
+ method: 'DELETE'
145
+ }),
146
+ getMyProfile: () => authenticatedClient('api/v1/profile', {
147
+ method: 'GET'
148
+ }),
149
+ getBranchTypes: () => authenticatedClient("api/v1/branch-types", {
150
+ method: 'GET'
151
+ }),
152
+ getBranchesByType: _ref => {
153
+ let {
154
+ formula,
155
+ ownershipType,
156
+ organisationType,
157
+ searchTerm,
158
+ isTmg = false,
159
+ isTowCenterBranch = false
160
+ } = _ref;
161
+ return authenticatedClient("api/v1/branches/by-type?searchTerm=".concat(searchTerm, "&formula=").concat(formula, "&ownershipType=").concat(ownershipType, "&organisationType=").concat(organisationType, "&isTmg=").concat(isTmg, "&isTowCenterBranch=").concat(isTowCenterBranch), {
162
+ method: 'GET'
163
+ });
164
+ },
165
+ getMyBranchesByFormula: formula => authenticatedClient("api/v1/profile/".concat(formula, "/branches"), {
166
+ method: 'GET'
167
+ }),
168
+ getSingleOrderBranchTypes: branchTypesParamsString => authenticatedClient("api/v1/branch-types?".concat(branchTypesParamsString), {
169
+ method: 'GET'
170
+ }),
171
+ getSingleOrderBranches: branchesParamsString => authenticatedClient("api/v1/branches?".concat(branchesParamsString), {
172
+ method: 'GET'
173
+ }),
174
+ getBranchById: id => authenticatedClient("api/v1/branches/".concat(id), {
175
+ method: 'GET'
176
+ }),
177
+ getQuotationById: id => authenticatedClient("api/v1/quotations/".concat(id), {
178
+ method: 'GET'
179
+ }),
180
+ getPlannedAppointmentById: id => authenticatedClient("api/v1/appointments/".concat(id), {
181
+ method: 'GET'
182
+ }),
183
+ getAppointmentRequestById: id => authenticatedClient("api/v1/appointment-requests/".concat(id), {
184
+ method: 'GET'
185
+ }),
186
+ getDossiers: _ref2 => {
187
+ let {
188
+ term,
189
+ offset = 0,
190
+ limit = 10,
191
+ branchId,
192
+ formula
193
+ } = _ref2;
194
+ return authenticatedClient("api/v1/dossiers?term=".concat(term, "&offset=").concat(offset, "&limit=").concat(limit).concat(branchId ? "&branchId=".concat(branchId) : '').concat(formula ? "&formula=".concat(formula) : ''), {
195
+ method: 'GET'
196
+ });
197
+ },
198
+ putDossierById: _ref3 => {
199
+ let {
200
+ id,
201
+ payload
202
+ } = _ref3;
203
+ return authenticatedClient("api/v1/dossiers/".concat(id), {
204
+ method: 'PUT',
205
+ data: payload
206
+ });
207
+ },
208
+ postAppointmentRequest: appointmentRequestPayload => authenticatedClient("api/v1/appointment-requests", {
209
+ method: 'POST',
210
+ data: appointmentRequestPayload,
211
+ headers: {
212
+ 'Content-Type': 'application/json'
213
+ }
214
+ }),
215
+ postQuotation: quotationPayload => authenticatedClient("api/v1/quotations", {
216
+ method: 'POST',
217
+ data: quotationPayload,
218
+ headers: {
219
+ 'Content-Type': 'application/json'
220
+ }
221
+ }),
222
+ postSingleOrder: singleOrderPayload => authenticatedClient("api/v1/single-orders", {
223
+ method: 'POST',
224
+ data: singleOrderPayload,
225
+ headers: {
226
+ 'Content-Type': 'application/json'
227
+ }
228
+ }),
229
+ postShopifyOrder: shopifyOrderPayload => authenticatedClient("api/v1/single-orders/shopify", {
230
+ method: 'POST',
231
+ data: shopifyOrderPayload
232
+ }),
233
+ postAppointment: appointmentPayload => authenticatedClient("api/v1/appointments", {
234
+ method: 'POST',
235
+ data: appointmentPayload,
236
+ headers: {
237
+ 'Content-Type': 'application/json'
238
+ }
239
+ }),
240
+ putQuotationById: _ref4 => {
241
+ let {
242
+ payload,
243
+ id
244
+ } = _ref4;
245
+ return authenticatedClient("api/v1/quotations/".concat(id), {
246
+ method: 'PUT',
247
+ data: payload,
248
+ headers: {
249
+ 'Content-Type': 'application/json'
250
+ }
251
+ });
252
+ },
253
+ putAppointmentById: _ref5 => {
254
+ let {
255
+ payload,
256
+ id
257
+ } = _ref5;
258
+ return authenticatedClient("api/v1/appointments/".concat(id), {
259
+ method: 'PUT',
260
+ data: payload,
261
+ headers: {
262
+ 'Content-Type': 'application/json'
263
+ }
264
+ });
265
+ },
266
+ putAppointmentRequestById: _ref6 => {
267
+ let {
268
+ payload,
269
+ id
270
+ } = _ref6;
271
+ return authenticatedClient("api/v1/appointment-requests/".concat(id, "?action=order"), {
272
+ method: 'PUT',
273
+ data: payload,
274
+ headers: {
275
+ 'Content-Type': 'application/json'
276
+ }
277
+ });
278
+ },
279
+ getActiveDiscounts: _ref7 => {
280
+ let {
281
+ formulaCode,
282
+ limit,
283
+ offset
284
+ } = _ref7;
285
+ return authenticatedClient("api/v1/discounts?limit=".concat(limit, "&offset=").concat(offset, "&formulaCode=").concat(formulaCode), {
286
+ method: 'GET',
287
+ headers: {
288
+ 'Content-Type': 'application/json'
289
+ }
290
+ });
291
+ },
292
+ getPartBrands: () => authenticatedClient("api/v1/configurator/part-brands", {
293
+ method: 'GET'
294
+ }),
295
+ getOrder: orderParameters => {
296
+ const basePath = APP_CONFIG.internal ? 'api/v1' : 'api/public/v1';
297
+ return authenticatedClient("".concat(basePath, "/configurator/order?").concat(orderParameters), {
298
+ method: 'GET'
299
+ });
300
+ },
301
+ getArticlePrices: partsQueryString => {
302
+ if (!APP_CONFIG.internal) {
303
+ return null;
304
+ }
305
+ const basePath = APP_CONFIG.internal ? 'api/v1' : 'api/public/v1';
306
+ return authenticatedClient("".concat(basePath, "/configurator/prices?").concat(partsQueryString), {
307
+ method: 'GET'
308
+ });
309
+ }
310
+ };