@crystaldesign/web-planner-logic 26.13.0-beta.2 → 26.13.0-beta.21

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 (95) hide show
  1. package/build/cjs/{DivaBoxPlanner-09506958.js → DivaBoxPlanner-cf785c8e.js} +4 -3
  2. package/build/cjs/{DivaStandardPlanner-3afaa9dc.js → DivaStandardPlanner-76758261.js} +4 -3
  3. package/build/cjs/{DoorPlanner-b7dc9d75.js → DoorPlanner-322b433f.js} +3 -2
  4. package/build/cjs/{Host3DSignalR-af1273a3.js → Host3DSignalR-720088d4.js} +63 -19
  5. package/build/cjs/{LiviqueWWSHandler-f90e47e8.js → LiviqueWWSHandler-ea49263b.js} +3 -2
  6. package/build/cjs/{PfisterWWSHandler-44e98549.js → PfisterWWSHandler-61d7dc26.js} +3 -2
  7. package/build/cjs/{PlannerHandler2D-8655bcdb.js → PlannerHandler2D-cd71fcd3.js} +1 -1
  8. package/build/cjs/{SeriousBasketHandler-da58bfd5.js → SeriousBasketHandler-966ca145.js} +3 -2
  9. package/build/cjs/{ShelfPlanner-fa17b8ac.js → ShelfPlanner-3a790d65.js} +13 -2
  10. package/build/cjs/{StandardWWSHandler-84ff60ba.js → StandardWWSHandler-b565c684.js} +3 -2
  11. package/build/cjs/{index-0075f2cf.js → index-dfe2c0e3.js} +1622 -1134
  12. package/build/cjs/index.js +3 -7
  13. package/build/esm/{DivaBoxPlanner-f98e012b.js → DivaBoxPlanner-570bd517.js} +4 -3
  14. package/build/esm/{DivaStandardPlanner-9436f998.js → DivaStandardPlanner-712385df.js} +4 -3
  15. package/build/esm/{DoorPlanner-5725f710.js → DoorPlanner-3670fee0.js} +3 -2
  16. package/build/esm/{Host3DSignalR-d160a5ff.js → Host3DSignalR-68938df9.js} +63 -19
  17. package/build/esm/{LiviqueWWSHandler-1bef5d2e.js → LiviqueWWSHandler-2cd9654b.js} +3 -2
  18. package/build/esm/{PfisterWWSHandler-967a27ec.js → PfisterWWSHandler-7593c211.js} +3 -2
  19. package/build/esm/{PlannerHandler2D-00b50d01.js → PlannerHandler2D-487406e6.js} +1 -1
  20. package/build/esm/{SeriousBasketHandler-7563dbf3.js → SeriousBasketHandler-b13a4be4.js} +3 -2
  21. package/build/esm/{ShelfPlanner-58042ac8.js → ShelfPlanner-8eeb52df.js} +13 -2
  22. package/build/esm/{StandardWWSHandler-25e8eec4.js → StandardWWSHandler-33aac025.js} +3 -2
  23. package/build/esm/{index-6188684c.js → index-0d6a39cb.js} +1622 -1130
  24. package/build/esm/index.js +3 -2
  25. package/build/types/web-planner-logic/src/index.d.ts +1 -7
  26. package/build/types/web-planner-logic/src/index.d.ts.map +1 -1
  27. package/build/types/web-planner-logic/src/interface/AdditionalModelInfos.d.ts +4 -2
  28. package/build/types/web-planner-logic/src/interface/AdditionalModelInfos.d.ts.map +1 -1
  29. package/build/types/web-planner-logic/src/interface/Articles/AccessoireItemType.d.ts +6 -2
  30. package/build/types/web-planner-logic/src/interface/Articles/AccessoireItemType.d.ts.map +1 -1
  31. package/build/types/web-planner-logic/src/interface/Articles/CatalogArticleDataType.d.ts +2 -0
  32. package/build/types/web-planner-logic/src/interface/Articles/CatalogArticleDataType.d.ts.map +1 -1
  33. package/build/types/web-planner-logic/src/interface/Articles/PartListArticleToLoadType.d.ts +1 -0
  34. package/build/types/web-planner-logic/src/interface/Articles/PartListArticleToLoadType.d.ts.map +1 -1
  35. package/build/types/web-planner-logic/src/interface/DivaCatalogDataType.d.ts +2 -0
  36. package/build/types/web-planner-logic/src/interface/DivaCatalogDataType.d.ts.map +1 -1
  37. package/build/types/web-planner-logic/src/interface/IDM/ArticleApi.d.ts +2 -3
  38. package/build/types/web-planner-logic/src/interface/IDM/ArticleApi.d.ts.map +1 -1
  39. package/build/types/web-planner-logic/src/interface/Planner/IDM3DTranslation.d.ts +20 -0
  40. package/build/types/web-planner-logic/src/interface/Planner/IDM3DTranslation.d.ts.map +1 -0
  41. package/build/types/web-planner-logic/src/interface/webPlannerParams/WebPlannerParamsType.d.ts +1 -1
  42. package/build/types/web-planner-logic/src/interface/webPlannerParams/WebPlannerParamsType.d.ts.map +1 -1
  43. package/build/types/web-planner-logic/src/logic/Article/DivaArticle.d.ts +28 -0
  44. package/build/types/web-planner-logic/src/logic/Article/DivaArticle.d.ts.map +1 -1
  45. package/build/types/web-planner-logic/src/logic/Article/DivaArticleHandler.d.ts.map +1 -1
  46. package/build/types/web-planner-logic/src/logic/Article/Engine/IDMArticleEngine.d.ts +1 -0
  47. package/build/types/web-planner-logic/src/logic/Article/Engine/IDMArticleEngine.d.ts.map +1 -1
  48. package/build/types/web-planner-logic/src/logic/Article/mandatoryAccessories.d.ts +3 -1
  49. package/build/types/web-planner-logic/src/logic/Article/mandatoryAccessories.d.ts.map +1 -1
  50. package/build/types/web-planner-logic/src/logic/ConfigTree/DivaConfigTree.d.ts.map +1 -1
  51. package/build/types/web-planner-logic/src/logic/ConfigTree/Shelfplanner/ShelfPlanner.d.ts +5 -0
  52. package/build/types/web-planner-logic/src/logic/ConfigTree/Shelfplanner/ShelfPlanner.d.ts.map +1 -1
  53. package/build/types/web-planner-logic/src/logic/DivaWebPlanner.d.ts +5 -1
  54. package/build/types/web-planner-logic/src/logic/DivaWebPlanner.d.ts.map +1 -1
  55. package/build/types/web-planner-logic/src/logic/Planner/IDM3D/idm3dTranslation.d.ts +33 -0
  56. package/build/types/web-planner-logic/src/logic/Planner/IDM3D/idm3dTranslation.d.ts.map +1 -0
  57. package/build/types/web-planner-logic/src/logic/Planner/Rendering/Host3DSignalR.d.ts +1 -0
  58. package/build/types/web-planner-logic/src/logic/Planner/Rendering/Host3DSignalR.d.ts.map +1 -1
  59. package/build/types/web-planner-logic/src/logic/Planner/Rendering/PlannerHandler3D.d.ts.map +1 -1
  60. package/build/types/web-planner-logic/src/logic/Set/DivaSetHandler.d.ts +4 -0
  61. package/build/types/web-planner-logic/src/logic/Set/DivaSetHandler.d.ts.map +1 -1
  62. package/build/types/web-planner-logic/src/model/Articles/Article/CatalogArticleData.d.ts +1 -0
  63. package/build/types/web-planner-logic/src/model/Articles/Article/CatalogArticleData.d.ts.map +1 -1
  64. package/build/types/web-planner-logic/src/model/Articles/Article/DivaCatalogArticle.d.ts.map +1 -1
  65. package/build/types/web-planner-logic/src/model/Articles/Article/IDMCatalogArticle.d.ts.map +1 -1
  66. package/build/types/web-planner-logic/src/model/Catalog/CatalogData.d.ts +1 -0
  67. package/build/types/web-planner-logic/src/model/Catalog/CatalogData.d.ts.map +1 -1
  68. package/build/types/web-planner-logic/src/model/Catalog/DivaCatalogData.d.ts +3 -0
  69. package/build/types/web-planner-logic/src/model/Catalog/DivaCatalogData.d.ts.map +1 -1
  70. package/build/types/web-planner-logic/src/model/Catalog/IDMCatalogData.d.ts +4 -2
  71. package/build/types/web-planner-logic/src/model/Catalog/IDMCatalogData.d.ts.map +1 -1
  72. package/build/types/web-planner-logic/src/model/Options/CatalogOptionData.d.ts +2 -3
  73. package/build/types/web-planner-logic/src/model/Options/CatalogOptionData.d.ts.map +1 -1
  74. package/build/types/web-planner-logic/src/model/Options/CatalogOptionValueData.d.ts.map +1 -1
  75. package/build/types/web-planner-logic/src/model/Properties/propertySchemaRegistry.d.ts +23 -11
  76. package/build/types/web-planner-logic/src/model/Properties/propertySchemaRegistry.d.ts.map +1 -1
  77. package/build/types/web-planner-logic/src/model/Properties/propertyValueCodec.d.ts +1 -34
  78. package/build/types/web-planner-logic/src/model/Properties/propertyValueCodec.d.ts.map +1 -1
  79. package/build/types/web-planner-logic/src/model/Properties/propertyValues.d.ts +41 -0
  80. package/build/types/web-planner-logic/src/model/Properties/propertyValues.d.ts.map +1 -0
  81. package/build/types/web-planner-logic/src/test/bundleRulesOwnPartlist.test.d.ts +2 -0
  82. package/build/types/web-planner-logic/src/test/bundleRulesOwnPartlist.test.d.ts.map +1 -0
  83. package/build/types/web-planner-logic/src/test/getConfigStepKeyOfAccessoire.test.d.ts +2 -0
  84. package/build/types/web-planner-logic/src/test/getConfigStepKeyOfAccessoire.test.d.ts.map +1 -0
  85. package/build/types/web-planner-logic/src/test/host3DSignalRReconnect.test.d.ts +2 -0
  86. package/build/types/web-planner-logic/src/test/host3DSignalRReconnect.test.d.ts.map +1 -0
  87. package/build/types/web-planner-logic/src/test/orderNumberTemplates.test.d.ts +2 -0
  88. package/build/types/web-planner-logic/src/test/orderNumberTemplates.test.d.ts.map +1 -0
  89. package/build/types/web-planner-logic/src/test/plannerHandler3DRoomListQueue.test.d.ts +2 -0
  90. package/build/types/web-planner-logic/src/test/plannerHandler3DRoomListQueue.test.d.ts.map +1 -0
  91. package/build/types/web-planner-logic/src/test/propertyParsers.test.d.ts +2 -0
  92. package/build/types/web-planner-logic/src/test/propertyParsers.test.d.ts.map +1 -0
  93. package/build/types/web-planner-logic/src/test/propertyValues.test.d.ts +2 -0
  94. package/build/types/web-planner-logic/src/test/propertyValues.test.d.ts.map +1 -0
  95. package/package.json +3 -3
@@ -2,7 +2,7 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var index = require('./index-0075f2cf.js');
5
+ var index = require('./index-dfe2c0e3.js');
6
6
  var planner2dCore = require('@crystaldesign/planner-2d-core');
7
7
  require('@babel/runtime/helpers/slicedToArray');
8
8
  require('@babel/runtime/helpers/asyncToGenerator');
@@ -14,8 +14,9 @@ require('@babel/runtime/helpers/objectWithoutProperties');
14
14
  require('@babel/runtime/helpers/toConsumableArray');
15
15
  require('axios');
16
16
  require('@crystaldesign/diva-utils');
17
- require('@crystaldesign/basket-model');
18
17
  require('@babel/runtime/helpers/typeof');
18
+ require('@babel/runtime/helpers/toArray');
19
+ require('@crystaldesign/basket-model');
19
20
  require('fast-xml-parser');
20
21
  require('@babel/runtime/helpers/possibleConstructorReturn');
21
22
  require('@babel/runtime/helpers/getPrototypeOf');
@@ -50,17 +51,12 @@ exports.bootNow = index.bootNow;
50
51
  exports.bootRequestName = index.bootRequestName;
51
52
  exports.collectStructureStepKeys = index.collectStructureStepKeys;
52
53
  exports.creatRenderOrders = index.creatRenderOrders;
53
- exports.decodePropertyValue = index.decodePropertyValue;
54
54
  exports["default"] = index.DivaWebPlanner;
55
- exports.editorKindOf = index.editorKindOf;
56
- exports.encodePropertyValue = index.encodePropertyValue;
57
55
  exports.getOrigProductId = index.getOrigProductId;
58
56
  exports.getSeriousSetNamePlaceholder = index.getSeriousSetNamePlaceholder;
59
57
  exports.headlessSession = index.headlessSession;
60
58
  exports.loadAndRepairBasket = index.loadAndRepairBasket;
61
59
  exports.propertyEncodingOf = index.propertyEncodingOf;
62
- exports.propertyValueProblem = index.propertyValueProblem;
63
- exports.rawStringOf = index.rawStringOf;
64
60
  exports.runHeadlessArtifactPass = index.runHeadlessArtifactPass;
65
61
  exports.runHeadlessArtifactPassBatch = index.runHeadlessArtifactPassBatch;
66
62
  Object.defineProperty(exports, 'DockingPoint', {
@@ -3,16 +3,17 @@ import _classCallCheck from '@babel/runtime/helpers/classCallCheck';
3
3
  import _createClass from '@babel/runtime/helpers/createClass';
4
4
  import _defineProperty from '@babel/runtime/helpers/defineProperty';
5
5
  import _regeneratorRuntime from '@babel/runtime/regenerator';
6
- import { c as Vector2, V as Vector3, P as PlannerElementData, B as BoundingBox } from './index-6188684c.js';
6
+ import { c as Vector2, V as Vector3, P as PlannerElementData, B as BoundingBox } from './index-0d6a39cb.js';
7
7
  import DivaUtils, { DivaError, md5 } from '@crystaldesign/diva-utils';
8
8
  import _toConsumableArray from '@babel/runtime/helpers/toConsumableArray';
9
9
  import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
10
- import { d as dockingPointHandlerInst, h as handler2D } from './PlannerHandler2D-00b50d01.js';
10
+ import { d as dockingPointHandlerInst, h as handler2D } from './PlannerHandler2D-487406e6.js';
11
11
  import '@babel/runtime/helpers/objectWithoutProperties';
12
12
  import 'axios';
13
+ import '@babel/runtime/helpers/typeof';
14
+ import '@babel/runtime/helpers/toArray';
13
15
  import '@crystaldesign/planner-2d-core';
14
16
  import '@crystaldesign/basket-model';
15
- import '@babel/runtime/helpers/typeof';
16
17
  import 'fast-xml-parser';
17
18
  import '@babel/runtime/helpers/possibleConstructorReturn';
18
19
  import '@babel/runtime/helpers/getPrototypeOf';
@@ -4,15 +4,16 @@ import _classCallCheck from '@babel/runtime/helpers/classCallCheck';
4
4
  import _createClass from '@babel/runtime/helpers/createClass';
5
5
  import _defineProperty from '@babel/runtime/helpers/defineProperty';
6
6
  import _regeneratorRuntime from '@babel/runtime/regenerator';
7
- import { V as Vector3, P as PlannerElementData, B as BoundingBox } from './index-6188684c.js';
7
+ import { V as Vector3, P as PlannerElementData, B as BoundingBox } from './index-0d6a39cb.js';
8
8
  import DivaUtils, { DivaError, md5 } from '@crystaldesign/diva-utils';
9
9
  import { computeDockedTransform } from '@crystaldesign/planner-2d-core';
10
- import { d as dockingPointHandlerInst, h as handler2D } from './PlannerHandler2D-00b50d01.js';
10
+ import { d as dockingPointHandlerInst, h as handler2D } from './PlannerHandler2D-487406e6.js';
11
11
  import '@babel/runtime/helpers/slicedToArray';
12
12
  import '@babel/runtime/helpers/objectWithoutProperties';
13
13
  import 'axios';
14
- import '@crystaldesign/basket-model';
15
14
  import '@babel/runtime/helpers/typeof';
15
+ import '@babel/runtime/helpers/toArray';
16
+ import '@crystaldesign/basket-model';
16
17
  import 'fast-xml-parser';
17
18
  import '@babel/runtime/helpers/possibleConstructorReturn';
18
19
  import '@babel/runtime/helpers/getPrototypeOf';
@@ -1,7 +1,7 @@
1
1
  import _classCallCheck from '@babel/runtime/helpers/classCallCheck';
2
2
  import _createClass from '@babel/runtime/helpers/createClass';
3
3
  import _defineProperty from '@babel/runtime/helpers/defineProperty';
4
- import './index-6188684c.js';
4
+ import './index-0d6a39cb.js';
5
5
  import DivaUtils from '@crystaldesign/diva-utils';
6
6
  import '@babel/runtime/helpers/slicedToArray';
7
7
  import '@babel/runtime/helpers/asyncToGenerator';
@@ -9,9 +9,10 @@ import '@babel/runtime/regenerator';
9
9
  import '@babel/runtime/helpers/objectWithoutProperties';
10
10
  import '@babel/runtime/helpers/toConsumableArray';
11
11
  import 'axios';
12
+ import '@babel/runtime/helpers/typeof';
13
+ import '@babel/runtime/helpers/toArray';
12
14
  import '@crystaldesign/planner-2d-core';
13
15
  import '@crystaldesign/basket-model';
14
- import '@babel/runtime/helpers/typeof';
15
16
  import 'fast-xml-parser';
16
17
  import '@babel/runtime/helpers/possibleConstructorReturn';
17
18
  import '@babel/runtime/helpers/getPrototypeOf';
@@ -3,7 +3,7 @@ import _classCallCheck from '@babel/runtime/helpers/classCallCheck';
3
3
  import _createClass from '@babel/runtime/helpers/createClass';
4
4
  import _defineProperty from '@babel/runtime/helpers/defineProperty';
5
5
  import _regeneratorRuntime from '@babel/runtime/regenerator';
6
- import { d as bootMark, R as Rendering, H as HQRenderScript } from './index-6188684c.js';
6
+ import { d as bootMark, R as Rendering, H as HQRenderScript } from './index-0d6a39cb.js';
7
7
  import DivaUtils, { DivaError } from '@crystaldesign/diva-utils';
8
8
  import { HubConnectionBuilder, LogLevel } from '@microsoft/signalr';
9
9
  import io from 'socket.io-client';
@@ -12,9 +12,10 @@ import '@babel/runtime/helpers/slicedToArray';
12
12
  import '@babel/runtime/helpers/objectWithoutProperties';
13
13
  import '@babel/runtime/helpers/toConsumableArray';
14
14
  import 'axios';
15
+ import '@babel/runtime/helpers/typeof';
16
+ import '@babel/runtime/helpers/toArray';
15
17
  import '@crystaldesign/planner-2d-core';
16
18
  import '@crystaldesign/basket-model';
17
- import '@babel/runtime/helpers/typeof';
18
19
  import 'fast-xml-parser';
19
20
  import '@babel/runtime/helpers/possibleConstructorReturn';
20
21
  import '@babel/runtime/helpers/getPrototypeOf';
@@ -35,6 +36,8 @@ var Host3DSignalR = /*#__PURE__*/function () {
35
36
  _defineProperty(this, "connectionErrorCount", void 0);
36
37
  _defineProperty(this, "doIgnoreOnClosed", void 0);
37
38
  //This boolean allows to ignore the onClose connection event of the signalR connection.
39
+ _defineProperty(this, "isClosed", false);
40
+ //Set by closeConnection(): a closed instance must never connect again.
38
41
  _defineProperty(this, "sessionID", void 0);
39
42
  //DivaMediaService
40
43
  _defineProperty(this, "divaMediaServiceSocketIO", undefined);
@@ -148,7 +151,7 @@ var Host3DSignalR = /*#__PURE__*/function () {
148
151
  value: (function () {
149
152
  var _initializeConnection = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2(divaNr) {
150
153
  var _this2 = this;
151
- var that;
154
+ var that, connection;
152
155
  return _regeneratorRuntime.wrap(function _callee2$(_context2) {
153
156
  while (1) switch (_context2.prev = _context2.next) {
154
157
  case 0:
@@ -167,11 +170,22 @@ var Host3DSignalR = /*#__PURE__*/function () {
167
170
  _context2.next = 5;
168
171
  return this.delay(100);
169
172
  case 5:
173
+ if (!this.isClosed) {
174
+ _context2.next = 7;
175
+ break;
176
+ }
177
+ return _context2.abrupt("return");
178
+ case 7:
170
179
  LOG.debug('Create SignalR connection with host: ' + this.renderSettings.Diva3DServerURL + '; RenderGroup: ' + this.renderSettings.RenderGroup);
171
180
  that = this;
172
181
  if (this.signalRConnection) {
173
182
  this.doIgnoreOnClosed = true;
174
- this.signalRConnection._completeClose();
183
+ // The replaced connection's close event is ignored below, so reset its state here.
184
+ this.connectionStarted = false;
185
+ this.successfullyLoggedIn = false;
186
+ this.successfullyJoinedDivaNr = false;
187
+ // stop() also closes the transport and cancels pending invocations, unlike the private _completeClose().
188
+ this.signalRConnection.stop()["catch"](function () {});
175
189
  this.signalRConnection = null;
176
190
  }
177
191
  if ((typeof window === 'undefined' || window).DIVA_LOGGER == 0) {
@@ -179,11 +193,14 @@ var Host3DSignalR = /*#__PURE__*/function () {
179
193
  } else {
180
194
  this.signalRConnection = new HubConnectionBuilder().withUrl(this.renderSettings.Diva3DServerURL).withHubProtocol(new MessagePackHubProtocol()).configureLogging(LogLevel.None).build();
181
195
  }
196
+ // Callbacks of a connection that was replaced meanwhile must not change the state of the current one.
197
+ connection = this.signalRConnection;
182
198
  this.signalRConnection.on('UnvalidSessionID', this.unvalidSessionID);
183
199
  this.signalRConnection.on('noRenderClientFound', this.noRenderClientFound);
184
200
  this.signalRConnection.on('newRendering', this.newRendering);
185
201
  this.signalRConnection.on('newHQRenderScript', this.newHQRenderScript);
186
202
  this.signalRConnection.start().then(function () {
203
+ if (connection !== that.signalRConnection) return;
187
204
  DivaUtils.endSpanOfApm('PlannerHandler3D initSignalRConnection');
188
205
  bootMark('signalr: connected');
189
206
  that.connectionStarted = true;
@@ -196,6 +213,7 @@ var Host3DSignalR = /*#__PURE__*/function () {
196
213
  that.reconnectingErrorCount = 0;
197
214
  that.login(); //After connecting to signalR, the login should be performed
198
215
  })["catch"](function (err) {
216
+ if (connection !== that.signalRConnection) return;
199
217
  DivaUtils.endSpanOfApm('PlannerHandler3D initSignalRConnection');
200
218
  LOG.error(new DivaError('Connection error. Message: ' + err.toString(), {
201
219
  code: 'WC_0014'
@@ -210,26 +228,32 @@ var Host3DSignalR = /*#__PURE__*/function () {
210
228
  return _regeneratorRuntime.wrap(function _callee$(_context) {
211
229
  while (1) switch (_context.prev = _context.next) {
212
230
  case 0:
231
+ if (!(connection !== _this2.signalRConnection)) {
232
+ _context.next = 2;
233
+ break;
234
+ }
235
+ return _context.abrupt("return");
236
+ case 2:
213
237
  DivaUtils.endSpanOfApm('PlannerHandler3D initSignalRConnection');
214
238
  LOG.warn('Connection with 3D Host gets lost. Try to reconnect.', 'WC_0014');
215
239
  that.connectionStarted = false;
216
240
  _this2.successfullyLoggedIn = false;
217
241
  _this2.successfullyJoinedDivaNr = false;
218
242
  if (!_this2.doIgnoreOnClosed) {
219
- _context.next = 7;
243
+ _context.next = 9;
220
244
  break;
221
245
  }
222
246
  return _context.abrupt("return");
223
- case 7:
247
+ case 9:
224
248
  _this2.reconnectAfterError = true;
225
249
  that.initializeConnection();
226
- case 9:
250
+ case 11:
227
251
  case "end":
228
252
  return _context.stop();
229
253
  }
230
254
  }, _callee);
231
255
  })));
232
- case 15:
256
+ case 18:
233
257
  case "end":
234
258
  return _context2.stop();
235
259
  }
@@ -430,11 +454,15 @@ var Host3DSignalR = /*#__PURE__*/function () {
430
454
  }, {
431
455
  key: "closeConnection",
432
456
  value: function closeConnection() {
457
+ this.isClosed = true;
433
458
  if (this.signalRConnection) {
434
459
  this.doIgnoreOnClosed = true;
435
460
  this.signalRConnection.invoke('LeaveWebClient')["catch"](function () {});
436
461
  LOG.debug('SignalRConnection: Close Connection and say byby to Diva3DHost.');
437
462
  this.signalRConnection.stop()["catch"](function () {});
463
+ // Drops the closed connection's callbacks: stopping it while it still starts rejects start(), which would
464
+ // otherwise reconnect and log in for a planner that is gone.
465
+ this.signalRConnection = null;
438
466
  }
439
467
 
440
468
  // Also close the socket connection to DivaMediaService
@@ -453,7 +481,7 @@ var Host3DSignalR = /*#__PURE__*/function () {
453
481
  key: "login",
454
482
  value: (function () {
455
483
  var _login = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee6() {
456
- var sessionId, that;
484
+ var connection, sessionId, that;
457
485
  return _regeneratorRuntime.wrap(function _callee6$(_context6) {
458
486
  while (1) switch (_context6.prev = _context6.next) {
459
487
  case 0:
@@ -461,11 +489,21 @@ var Host3DSignalR = /*#__PURE__*/function () {
461
489
  //_this.ServerLog("Login","send Login - userID:" + _userID + ", deviceID:" + _deviceID + ", divaSessionID:" SaveProjectWi+ _divaSessionID + ", info:" + _Application);
462
490
  DivaUtils.startSpanOfApm('PlannerHandler3D login');
463
491
  bootMark('signalr: LoginWebPlanner sent');
464
- _context6.prev = 3;
465
- _context6.next = 6;
466
- return this.signalRConnection.invoke('LoginWebPlanner', this.renderSettings.UserID, this.renderSettings.DeviceID, this.renderSettings.DivaSessionID, this.renderSettings.ApplicationName);
467
- case 6:
492
+
493
+ // A login answered after its connection was replaced belongs to the old connection: reporting it would mark the
494
+ // client as logged in while the new connection is not started yet.
495
+ connection = this.signalRConnection;
496
+ _context6.prev = 4;
497
+ _context6.next = 7;
498
+ return connection.invoke('LoginWebPlanner', this.renderSettings.UserID, this.renderSettings.DeviceID, this.renderSettings.DivaSessionID, this.renderSettings.ApplicationName);
499
+ case 7:
468
500
  sessionId = _context6.sent;
501
+ if (!(connection !== this.signalRConnection)) {
502
+ _context6.next = 10;
503
+ break;
504
+ }
505
+ return _context6.abrupt("return");
506
+ case 10:
469
507
  bootMark('signalr: LoginWebPlanner acked', {
470
508
  ok: sessionId != '' ? 1 : 0
471
509
  });
@@ -482,21 +520,27 @@ var Host3DSignalR = /*#__PURE__*/function () {
482
520
  status: 'ERROR'
483
521
  });
484
522
  }
485
- _context6.next = 17;
523
+ _context6.next = 22;
486
524
  break;
487
- case 12:
488
- _context6.prev = 12;
489
- _context6.t0 = _context6["catch"](3);
525
+ case 15:
526
+ _context6.prev = 15;
527
+ _context6.t0 = _context6["catch"](4);
528
+ if (!(connection !== this.signalRConnection)) {
529
+ _context6.next = 19;
530
+ break;
531
+ }
532
+ return _context6.abrupt("return");
533
+ case 19:
490
534
  DivaUtils.endSpanOfApm('PlannerHandler3D login');
491
535
  that = this;
492
536
  this.handleConnectionError(_context6.t0, function () {
493
537
  that.login();
494
538
  });
495
- case 17:
539
+ case 22:
496
540
  case "end":
497
541
  return _context6.stop();
498
542
  }
499
- }, _callee6, this, [[3, 12]]);
543
+ }, _callee6, this, [[4, 15]]);
500
544
  }));
501
545
  function login() {
502
546
  return _login.apply(this, arguments);
@@ -1,6 +1,6 @@
1
1
  import _classCallCheck from '@babel/runtime/helpers/classCallCheck';
2
2
  import _createClass from '@babel/runtime/helpers/createClass';
3
- import './index-6188684c.js';
3
+ import './index-0d6a39cb.js';
4
4
  import '@babel/runtime/helpers/slicedToArray';
5
5
  import '@babel/runtime/helpers/asyncToGenerator';
6
6
  import '@babel/runtime/helpers/defineProperty';
@@ -9,9 +9,10 @@ import '@babel/runtime/helpers/objectWithoutProperties';
9
9
  import '@babel/runtime/helpers/toConsumableArray';
10
10
  import 'axios';
11
11
  import '@crystaldesign/diva-utils';
12
+ import '@babel/runtime/helpers/typeof';
13
+ import '@babel/runtime/helpers/toArray';
12
14
  import '@crystaldesign/planner-2d-core';
13
15
  import '@crystaldesign/basket-model';
14
- import '@babel/runtime/helpers/typeof';
15
16
  import 'fast-xml-parser';
16
17
  import '@babel/runtime/helpers/possibleConstructorReturn';
17
18
  import '@babel/runtime/helpers/getPrototypeOf';
@@ -1,6 +1,6 @@
1
1
  import _classCallCheck from '@babel/runtime/helpers/classCallCheck';
2
2
  import _createClass from '@babel/runtime/helpers/createClass';
3
- import { a as articleHandlerInstance } from './index-6188684c.js';
3
+ import { a as articleHandlerInstance } from './index-0d6a39cb.js';
4
4
  import { SAPOrderLineData } from '@crystaldesign/basket-model';
5
5
  import DivaUtils, { DivaError } from '@crystaldesign/diva-utils';
6
6
  import '@babel/runtime/helpers/slicedToArray';
@@ -10,8 +10,9 @@ import '@babel/runtime/regenerator';
10
10
  import '@babel/runtime/helpers/objectWithoutProperties';
11
11
  import '@babel/runtime/helpers/toConsumableArray';
12
12
  import 'axios';
13
- import '@crystaldesign/planner-2d-core';
14
13
  import '@babel/runtime/helpers/typeof';
14
+ import '@babel/runtime/helpers/toArray';
15
+ import '@crystaldesign/planner-2d-core';
15
16
  import 'fast-xml-parser';
16
17
  import '@babel/runtime/helpers/possibleConstructorReturn';
17
18
  import '@babel/runtime/helpers/getPrototypeOf';
@@ -3,7 +3,7 @@ import _classCallCheck from '@babel/runtime/helpers/classCallCheck';
3
3
  import _createClass from '@babel/runtime/helpers/createClass';
4
4
  import _defineProperty from '@babel/runtime/helpers/defineProperty';
5
5
  import _regeneratorRuntime from '@babel/runtime/regenerator';
6
- import { c as Vector2, S as SVGUtils } from './index-6188684c.js';
6
+ import { c as Vector2, S as SVGUtils } from './index-0d6a39cb.js';
7
7
  import _possibleConstructorReturn from '@babel/runtime/helpers/possibleConstructorReturn';
8
8
  import _getPrototypeOf from '@babel/runtime/helpers/getPrototypeOf';
9
9
  import _get from '@babel/runtime/helpers/get';
@@ -1,7 +1,7 @@
1
1
  import _classCallCheck from '@babel/runtime/helpers/classCallCheck';
2
2
  import _createClass from '@babel/runtime/helpers/createClass';
3
3
  import _defineProperty from '@babel/runtime/helpers/defineProperty';
4
- import { s as summaryHandlerInstance } from './index-6188684c.js';
4
+ import { s as summaryHandlerInstance } from './index-0d6a39cb.js';
5
5
  import DivaUtils from '@crystaldesign/diva-utils';
6
6
  import '@babel/runtime/helpers/slicedToArray';
7
7
  import '@babel/runtime/helpers/asyncToGenerator';
@@ -9,9 +9,10 @@ import '@babel/runtime/regenerator';
9
9
  import '@babel/runtime/helpers/objectWithoutProperties';
10
10
  import '@babel/runtime/helpers/toConsumableArray';
11
11
  import 'axios';
12
+ import '@babel/runtime/helpers/typeof';
13
+ import '@babel/runtime/helpers/toArray';
12
14
  import '@crystaldesign/planner-2d-core';
13
15
  import '@crystaldesign/basket-model';
14
- import '@babel/runtime/helpers/typeof';
15
16
  import 'fast-xml-parser';
16
17
  import '@babel/runtime/helpers/possibleConstructorReturn';
17
18
  import '@babel/runtime/helpers/getPrototypeOf';
@@ -4,14 +4,15 @@ import _classCallCheck from '@babel/runtime/helpers/classCallCheck';
4
4
  import _createClass from '@babel/runtime/helpers/createClass';
5
5
  import _defineProperty from '@babel/runtime/helpers/defineProperty';
6
6
  import _regeneratorRuntime from '@babel/runtime/regenerator';
7
- import { G as Grid, a as articleHandlerInstance, b as setHandlerInstance } from './index-6188684c.js';
7
+ import { G as Grid, a as articleHandlerInstance, b as setHandlerInstance } from './index-0d6a39cb.js';
8
8
  import DivaUtils, { DivaError } from '@crystaldesign/diva-utils';
9
9
  import '@babel/runtime/helpers/slicedToArray';
10
10
  import '@babel/runtime/helpers/objectWithoutProperties';
11
11
  import 'axios';
12
+ import '@babel/runtime/helpers/typeof';
13
+ import '@babel/runtime/helpers/toArray';
12
14
  import '@crystaldesign/planner-2d-core';
13
15
  import '@crystaldesign/basket-model';
14
- import '@babel/runtime/helpers/typeof';
15
16
  import 'fast-xml-parser';
16
17
  import '@babel/runtime/helpers/possibleConstructorReturn';
17
18
  import '@babel/runtime/helpers/getPrototypeOf';
@@ -115,6 +116,16 @@ var ShelfPlanner = /*#__PURE__*/function () {
115
116
  }
116
117
  }
117
118
  }
119
+
120
+ /**
121
+ * True when an accessoire with this codex can be planned for free on this shelf (an initAcc with noPrice, eg the first
122
+ * Kleiderstange of a Jutzler element).
123
+ */
124
+ }, {
125
+ key: "canBeFree",
126
+ value: function canBeFree(articleCodex) {
127
+ return this.freeArticlesPossible[articleCodex] !== undefined;
128
+ }
118
129
  }, {
119
130
  key: "IsVisible",
120
131
  get: function get() {
@@ -1,6 +1,6 @@
1
1
  import _classCallCheck from '@babel/runtime/helpers/classCallCheck';
2
2
  import _createClass from '@babel/runtime/helpers/createClass';
3
- import './index-6188684c.js';
3
+ import './index-0d6a39cb.js';
4
4
  import '@babel/runtime/helpers/slicedToArray';
5
5
  import '@babel/runtime/helpers/asyncToGenerator';
6
6
  import '@babel/runtime/helpers/defineProperty';
@@ -9,9 +9,10 @@ import '@babel/runtime/helpers/objectWithoutProperties';
9
9
  import '@babel/runtime/helpers/toConsumableArray';
10
10
  import 'axios';
11
11
  import '@crystaldesign/diva-utils';
12
+ import '@babel/runtime/helpers/typeof';
13
+ import '@babel/runtime/helpers/toArray';
12
14
  import '@crystaldesign/planner-2d-core';
13
15
  import '@crystaldesign/basket-model';
14
- import '@babel/runtime/helpers/typeof';
15
16
  import 'fast-xml-parser';
16
17
  import '@babel/runtime/helpers/possibleConstructorReturn';
17
18
  import '@babel/runtime/helpers/getPrototypeOf';