@crystaldesign/web-planner-logic 26.11.0-beta.9 → 26.12.0-beta.1

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 (110) hide show
  1. package/build/cjs/{DivaBoxPlanner-02a2dbbf.js → DivaBoxPlanner-104200d4.js} +132 -45
  2. package/build/cjs/{DivaStandardPlanner-150246c0.js → DivaStandardPlanner-afd61e89.js} +584 -310
  3. package/build/cjs/{DoorPlanner-ce630754.js → DoorPlanner-58218b20.js} +2 -1
  4. package/build/cjs/{Host3DSignalR-b0b1fb8d.js → Host3DSignalR-43cccc62.js} +40 -24
  5. package/build/cjs/{LiviqueWWSHandler-c11ea7d2.js → LiviqueWWSHandler-9ac1d546.js} +2 -1
  6. package/build/cjs/{PfisterWWSHandler-3c723ecc.js → PfisterWWSHandler-27d3c2f1.js} +2 -1
  7. package/build/cjs/{PlannerHandler2D-6c0324be.js → PlannerHandler2D-b9e0aa00.js} +1 -1
  8. package/build/cjs/{SeriousBasketHandler-d1ae4006.js → SeriousBasketHandler-9225ef60.js} +2 -1
  9. package/build/cjs/{ShelfPlanner-04d98f4d.js → ShelfPlanner-89660e65.js} +261 -148
  10. package/build/cjs/{StandardWWSHandler-9b596caf.js → StandardWWSHandler-eaf1106a.js} +2 -1
  11. package/build/cjs/{index-633196ab.js → index-9279cd6b.js} +16313 -14314
  12. package/build/cjs/index.js +8 -1
  13. package/build/esm/{DivaBoxPlanner-fa9f6ec6.js → DivaBoxPlanner-49ca2254.js} +132 -45
  14. package/build/esm/{DivaStandardPlanner-6c001048.js → DivaStandardPlanner-5b1937df.js} +583 -310
  15. package/build/esm/{DoorPlanner-ef9165f9.js → DoorPlanner-e5d456e3.js} +2 -1
  16. package/build/esm/{Host3DSignalR-2dc8478a.js → Host3DSignalR-bf8a4afc.js} +40 -24
  17. package/build/esm/{LiviqueWWSHandler-b6e8bf5f.js → LiviqueWWSHandler-1e537c0a.js} +2 -1
  18. package/build/esm/{PfisterWWSHandler-54b3e0aa.js → PfisterWWSHandler-6218f972.js} +2 -1
  19. package/build/esm/{PlannerHandler2D-0e61311d.js → PlannerHandler2D-0e55412b.js} +1 -1
  20. package/build/esm/{SeriousBasketHandler-7b097870.js → SeriousBasketHandler-b534a712.js} +2 -1
  21. package/build/esm/{ShelfPlanner-f3e86534.js → ShelfPlanner-5062f0a3.js} +261 -148
  22. package/build/esm/{StandardWWSHandler-4b0caefd.js → StandardWWSHandler-6c628e60.js} +2 -1
  23. package/build/esm/{index-6c8de812.js → index-e11ba779.js} +16309 -14315
  24. package/build/esm/index.js +2 -1
  25. package/build/types/web-planner-logic/src/index.d.ts +8 -3
  26. package/build/types/web-planner-logic/src/index.d.ts.map +1 -1
  27. package/build/types/web-planner-logic/src/interface/ArticleOptionStateType.d.ts +1 -0
  28. package/build/types/web-planner-logic/src/interface/ArticleOptionStateType.d.ts.map +1 -1
  29. package/build/types/web-planner-logic/src/interface/Articles/ArticleDataType.d.ts +13 -0
  30. package/build/types/web-planner-logic/src/interface/Articles/ArticleDataType.d.ts.map +1 -1
  31. package/build/types/web-planner-logic/src/interface/Articles/ArticleInfoType.d.ts +13 -0
  32. package/build/types/web-planner-logic/src/interface/Articles/ArticleInfoType.d.ts.map +1 -1
  33. package/build/types/web-planner-logic/src/interface/Articles/CatalogArticleDataType.d.ts +4 -0
  34. package/build/types/web-planner-logic/src/interface/Articles/CatalogArticleDataType.d.ts.map +1 -1
  35. package/build/types/web-planner-logic/src/interface/DivaCatalogDataType.d.ts +6 -1
  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 +19 -18
  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/IDM/Decision.d.ts +1 -0
  40. package/build/types/web-planner-logic/src/interface/IDM/Decision.d.ts.map +1 -1
  41. package/build/types/web-planner-logic/src/interface/Planner/ISaveSetPlanner.d.ts +37 -0
  42. package/build/types/web-planner-logic/src/interface/Planner/ISaveSetPlanner.d.ts.map +1 -1
  43. package/build/types/web-planner-logic/src/interface/ShelfPlanner/ShelfAccessoiresView.d.ts +5 -0
  44. package/build/types/web-planner-logic/src/interface/ShelfPlanner/ShelfAccessoiresView.d.ts.map +1 -1
  45. package/build/types/web-planner-logic/src/interface/webPlannerParams/WebPlannerParamsType.d.ts +46 -2
  46. package/build/types/web-planner-logic/src/interface/webPlannerParams/WebPlannerParamsType.d.ts.map +1 -1
  47. package/build/types/web-planner-logic/src/logic/Article/ArticleOptionState.d.ts +2 -0
  48. package/build/types/web-planner-logic/src/logic/Article/ArticleOptionState.d.ts.map +1 -1
  49. package/build/types/web-planner-logic/src/logic/Article/DivaArticle.d.ts +4 -0
  50. package/build/types/web-planner-logic/src/logic/Article/DivaArticle.d.ts.map +1 -1
  51. package/build/types/web-planner-logic/src/logic/Article/DivaArticleHandler.d.ts.map +1 -1
  52. package/build/types/web-planner-logic/src/logic/Article/Engine/ArticleEngine.d.ts +4 -0
  53. package/build/types/web-planner-logic/src/logic/Article/Engine/ArticleEngine.d.ts.map +1 -1
  54. package/build/types/web-planner-logic/src/logic/Article/Engine/DivaArticleEngine.d.ts +2 -0
  55. package/build/types/web-planner-logic/src/logic/Article/Engine/DivaArticleEngine.d.ts.map +1 -1
  56. package/build/types/web-planner-logic/src/logic/Article/Engine/IDMArticleEngine.d.ts +39 -2
  57. package/build/types/web-planner-logic/src/logic/Article/Engine/IDMArticleEngine.d.ts.map +1 -1
  58. package/build/types/web-planner-logic/src/logic/ConfigTree/Shelfplanner/ShelfPlanner.d.ts +20 -0
  59. package/build/types/web-planner-logic/src/logic/ConfigTree/Shelfplanner/ShelfPlanner.d.ts.map +1 -1
  60. package/build/types/web-planner-logic/src/logic/ConfigTree/Shelfplanner/ShelfPlannerGrid.d.ts +31 -1
  61. package/build/types/web-planner-logic/src/logic/ConfigTree/Shelfplanner/ShelfPlannerGrid.d.ts.map +1 -1
  62. package/build/types/web-planner-logic/src/logic/DivaApiHandler.d.ts +25 -0
  63. package/build/types/web-planner-logic/src/logic/DivaApiHandler.d.ts.map +1 -1
  64. package/build/types/web-planner-logic/src/logic/DivaCatalogHandler.d.ts +1 -0
  65. package/build/types/web-planner-logic/src/logic/DivaCatalogHandler.d.ts.map +1 -1
  66. package/build/types/web-planner-logic/src/logic/DivaWebPlanner.d.ts +145 -95
  67. package/build/types/web-planner-logic/src/logic/DivaWebPlanner.d.ts.map +1 -1
  68. package/build/types/web-planner-logic/src/logic/Planner/BoxPlanner/ConstructionRulesHandler.d.ts +19 -0
  69. package/build/types/web-planner-logic/src/logic/Planner/BoxPlanner/ConstructionRulesHandler.d.ts.map +1 -1
  70. package/build/types/web-planner-logic/src/logic/Planner/BoxPlanner/DivaBoxPlanner.d.ts +15 -1
  71. package/build/types/web-planner-logic/src/logic/Planner/BoxPlanner/DivaBoxPlanner.d.ts.map +1 -1
  72. package/build/types/web-planner-logic/src/logic/Planner/DivaPlannerHandler.d.ts +11 -1
  73. package/build/types/web-planner-logic/src/logic/Planner/DivaPlannerHandler.d.ts.map +1 -1
  74. package/build/types/web-planner-logic/src/logic/Planner/DivaStandardPlanner.d.ts +31 -1
  75. package/build/types/web-planner-logic/src/logic/Planner/DivaStandardPlanner.d.ts.map +1 -1
  76. package/build/types/web-planner-logic/src/logic/Planner/Rendering/Host3DSignalR.d.ts.map +1 -1
  77. package/build/types/web-planner-logic/src/logic/Planner/Rendering/PlannerHandler3D.d.ts +17 -1
  78. package/build/types/web-planner-logic/src/logic/Planner/Rendering/PlannerHandler3D.d.ts.map +1 -1
  79. package/build/types/web-planner-logic/src/logic/Set/DivaSetHandler.d.ts +31 -3
  80. package/build/types/web-planner-logic/src/logic/Set/DivaSetHandler.d.ts.map +1 -1
  81. package/build/types/web-planner-logic/src/logic/Set/catalogXml/articleGeo.d.ts +9 -0
  82. package/build/types/web-planner-logic/src/logic/Set/catalogXml/articleGeo.d.ts.map +1 -0
  83. package/build/types/web-planner-logic/src/logic/Set/catalogXml/parseCatalogXml.d.ts +12 -0
  84. package/build/types/web-planner-logic/src/logic/Set/catalogXml/parseCatalogXml.d.ts.map +1 -0
  85. package/build/types/web-planner-logic/src/logic/Set/catalogXml/types.d.ts +66 -0
  86. package/build/types/web-planner-logic/src/logic/Set/catalogXml/types.d.ts.map +1 -0
  87. package/build/types/web-planner-logic/src/logic/bootMark.d.ts +71 -0
  88. package/build/types/web-planner-logic/src/logic/bootMark.d.ts.map +1 -0
  89. package/build/types/web-planner-logic/src/model/Articles/Article/CatalogArticleData.d.ts +4 -0
  90. package/build/types/web-planner-logic/src/model/Articles/Article/CatalogArticleData.d.ts.map +1 -1
  91. package/build/types/web-planner-logic/src/model/Articles/Article/IDMCatalogArticle.d.ts +13 -0
  92. package/build/types/web-planner-logic/src/model/Articles/Article/IDMCatalogArticle.d.ts.map +1 -1
  93. package/build/types/web-planner-logic/src/model/Catalog/CatalogData.d.ts +33 -7
  94. package/build/types/web-planner-logic/src/model/Catalog/CatalogData.d.ts.map +1 -1
  95. package/build/types/web-planner-logic/src/model/Catalog/IDMCatalogData.d.ts.map +1 -1
  96. package/build/types/web-planner-logic/src/model/Options/ArticleOptionData.d.ts +4 -0
  97. package/build/types/web-planner-logic/src/model/Options/ArticleOptionData.d.ts.map +1 -1
  98. package/build/types/web-planner-logic/src/model/Options/ArticleOptionValueData.d.ts +2 -0
  99. package/build/types/web-planner-logic/src/model/Options/ArticleOptionValueData.d.ts.map +1 -1
  100. package/build/types/web-planner-logic/src/model/Options/CatalogOptionData.d.ts +2 -0
  101. package/build/types/web-planner-logic/src/model/Options/CatalogOptionData.d.ts.map +1 -1
  102. package/build/types/web-planner-logic/src/model/Planner/PlannerElementData.d.ts +6 -1
  103. package/build/types/web-planner-logic/src/model/Planner/PlannerElementData.d.ts.map +1 -1
  104. package/build/types/web-planner-logic/src/test/engineFeatureDefaults.test.d.ts +2 -0
  105. package/build/types/web-planner-logic/src/test/engineFeatureDefaults.test.d.ts.map +1 -0
  106. package/build/types/web-planner-logic/src/test/idmPlannerPaletteView.test.d.ts +2 -0
  107. package/build/types/web-planner-logic/src/test/idmPlannerPaletteView.test.d.ts.map +1 -0
  108. package/build/types/web-planner-logic/src/test/partlistPosCountDecision.test.d.ts +2 -0
  109. package/build/types/web-planner-logic/src/test/partlistPosCountDecision.test.d.ts.map +1 -0
  110. package/package.json +4 -3
@@ -1,20 +1,21 @@
1
1
  'use strict';
2
2
 
3
+ var _toConsumableArray = require('@babel/runtime/helpers/toConsumableArray');
3
4
  var _asyncToGenerator = require('@babel/runtime/helpers/asyncToGenerator');
4
5
  var _classCallCheck = require('@babel/runtime/helpers/classCallCheck');
5
6
  var _createClass = require('@babel/runtime/helpers/createClass');
6
7
  var _defineProperty = require('@babel/runtime/helpers/defineProperty');
7
8
  var _regeneratorRuntime = require('@babel/runtime/regenerator');
8
- var index = require('./index-633196ab.js');
9
+ var index = require('./index-9279cd6b.js');
9
10
  var DivaUtils = require('@crystaldesign/diva-utils');
10
11
  var planner2dCore = require('@crystaldesign/planner-2d-core');
11
- var PlannerHandler2D = require('./PlannerHandler2D-6c0324be.js');
12
+ var PlannerHandler2D = require('./PlannerHandler2D-b9e0aa00.js');
12
13
  require('@babel/runtime/helpers/slicedToArray');
13
14
  require('@babel/runtime/helpers/objectWithoutProperties');
14
- require('@babel/runtime/helpers/toConsumableArray');
15
15
  require('axios');
16
16
  require('@crystaldesign/basket-model');
17
17
  require('@babel/runtime/helpers/typeof');
18
+ require('fast-xml-parser');
18
19
  require('@babel/runtime/helpers/possibleConstructorReturn');
19
20
  require('@babel/runtime/helpers/getPrototypeOf');
20
21
  require('@babel/runtime/helpers/inherits');
@@ -25,6 +26,7 @@ require('@babel/runtime/helpers/get');
25
26
 
26
27
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
27
28
 
29
+ var _toConsumableArray__default = /*#__PURE__*/_interopDefaultLegacy(_toConsumableArray);
28
30
  var _asyncToGenerator__default = /*#__PURE__*/_interopDefaultLegacy(_asyncToGenerator);
29
31
  var _classCallCheck__default = /*#__PURE__*/_interopDefaultLegacy(_classCallCheck);
30
32
  var _createClass__default = /*#__PURE__*/_interopDefaultLegacy(_createClass);
@@ -32,6 +34,26 @@ var _defineProperty__default = /*#__PURE__*/_interopDefaultLegacy(_definePropert
32
34
  var _regeneratorRuntime__default = /*#__PURE__*/_interopDefaultLegacy(_regeneratorRuntime);
33
35
  var DivaUtils__default = /*#__PURE__*/_interopDefaultLegacy(DivaUtils);
34
36
 
37
+ /** Configurator 2.0 set planner payload (`SetPlanData` after base64 decode). */
38
+
39
+ /** Legacy planner 1.x payload (no `v: 2` wrapper). */
40
+
41
+ function parseSetPlanData(setPlanData) {
42
+ var planDataString = DivaUtils__default["default"].decodeBase64(setPlanData);
43
+ return JSON.parse(planDataString);
44
+ }
45
+ function isSavePlannerV2(planData) {
46
+ return planData.v === 2;
47
+ }
48
+
49
+ /** Article codex from a V2 or legacy element record. */
50
+ function saveElementArticleCodex(element) {
51
+ return element.articleCodex || element.Codex;
52
+ }
53
+
54
+ function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
55
+ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
56
+ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
35
57
  var LOG = DivaUtils__default["default"].initLog('Planner', 'WEB-PLANNER-LOGIC');
36
58
  var ACC_DOCK_TYPES = ['AVO', 'AVU', 'AVC', 'AVS', 'AVN'];
37
59
  var DivaStandardPlanner = /*#__PURE__*/function () {
@@ -61,7 +83,13 @@ var DivaStandardPlanner = /*#__PURE__*/function () {
61
83
  _defineProperty__default["default"](this, "nextElementId", 1);
62
84
  _defineProperty__default["default"](this, "collisionHandler", void 0);
63
85
  _defineProperty__default["default"](this, "dockToAVUorAVOororAVNorAVSorAVC", function (plannerElement, targetElements) {
64
- if (plannerElement.HasAVU) {
86
+ // Capability comes from the SVG-parsed docking points, not the catalog metadata counts
87
+ // (countAV*): the parsed SVG is the same source the targeted dock (tryDockElementToDP) uses, so
88
+ // auto-dock stays consistent with it even when the catalog's SVG detail info misses the counts.
89
+ var hasFreeDP = function hasFreeDP(type) {
90
+ return plannerElement.getFreeDockingPointsByType(type).length > 0;
91
+ };
92
+ if (hasFreeDP('AVU')) {
65
93
  //Try to dock Element to free AVR
66
94
  var successDP = PlannerHandler2D.dockingPointHandlerInst.tryDockElement(plannerElement, 'AVU', targetElements);
67
95
  if (successDP) {
@@ -77,28 +105,28 @@ var DivaStandardPlanner = /*#__PURE__*/function () {
77
105
  if (_successDP) return true;
78
106
  }
79
107
  }
80
- if (plannerElement.HasAVO) {
108
+ if (hasFreeDP('AVO')) {
81
109
  var _successDP2 = PlannerHandler2D.dockingPointHandlerInst.tryDockElement(plannerElement, 'AVO', targetElements);
82
110
  if (_successDP2) {
83
111
  _this.updateWorldPos(plannerElement, _successDP2);
84
112
  return true;
85
113
  }
86
114
  }
87
- if (plannerElement.HasAVN) {
115
+ if (hasFreeDP('AVN')) {
88
116
  var _successDP3 = PlannerHandler2D.dockingPointHandlerInst.tryDockElement(plannerElement, 'AVN', targetElements);
89
117
  if (_successDP3) {
90
118
  _this.updateWorldPos(plannerElement, _successDP3);
91
119
  return true;
92
120
  }
93
121
  }
94
- if (plannerElement.HasAVS) {
122
+ if (hasFreeDP('AVS')) {
95
123
  var _successDP4 = PlannerHandler2D.dockingPointHandlerInst.tryDockElement(plannerElement, 'AVS', targetElements);
96
124
  if (_successDP4) {
97
125
  _this.updateWorldPos(plannerElement, _successDP4);
98
126
  return true;
99
127
  }
100
128
  }
101
- if (plannerElement.HasAVC) {
129
+ if (hasFreeDP('AVC')) {
102
130
  var _successDP5 = PlannerHandler2D.dockingPointHandlerInst.tryDockElement(plannerElement, 'AVC', targetElements);
103
131
  if (_successDP5) {
104
132
  _this.updateWorldPos(plannerElement, _successDP5);
@@ -231,10 +259,7 @@ var DivaStandardPlanner = /*#__PURE__*/function () {
231
259
  var refElement = this.plannerElements.get(dockingPoint.OnElementId);
232
260
  var refDockingPoint = refElement.getDockingPointById(dockingPoint.OnDP.DpId);
233
261
  if (refDockingPoint == undefined) return updateConfig;
234
- var dockedTransform = planner2dCore.computeDockedTransform(refElement, refDockingPoint, plannerElement, dockingPoint);
235
- plannerElement.RotDeg = dockedTransform.rotDeg;
236
- plannerElement.WorldPosCorner = new index.Vector3(dockedTransform.worldPosCorner.x, dockedTransform.worldPosCorner.y, dockedTransform.worldPosCorner.z);
237
- plannerElement.WorldPosCornerIgnoreOLF = new index.Vector3(dockedTransform.worldPosCornerIgnoreOLF.x, dockedTransform.worldPosCornerIgnoreOLF.y, dockedTransform.worldPosCornerIgnoreOLF.z);
262
+ this.applyDockTransform(plannerElement, refElement, dockingPoint, refDockingPoint);
238
263
  updateConfig = this.set.onDockingChanged(plannerElement.ElementId, refElement.ElementId, 'DOCK', dockingPoint.Type);
239
264
  var data = this.set.getPlannerData(plannerElement.ElementId);
240
265
  plannerElement.updatePlannerData(data);
@@ -243,15 +268,81 @@ var DivaStandardPlanner = /*#__PURE__*/function () {
243
268
  return updateConfig;
244
269
  }
245
270
 
271
+ /**
272
+ * Positions `plannerElement` so its `dockingPoint` aligns to `refElement`'s `refDockingPoint`
273
+ * (rotation + OLF/OLT-aware translation). Mutates only the element's world position and rotation —
274
+ * NOT the docking relations — so it is reusable for a non-committing snap preview
275
+ * ({@link getDockSnapPreview}) as well as the real dock ({@link updateWorldPos}).
276
+ */
277
+ }, {
278
+ key: "applyDockTransform",
279
+ value: function applyDockTransform(plannerElement, refElement, dockingPoint, refDockingPoint) {
280
+ var dockedTransform = planner2dCore.computeDockedTransform(refElement, refDockingPoint, plannerElement, dockingPoint);
281
+ plannerElement.RotDeg = dockedTransform.rotDeg;
282
+ plannerElement.WorldPosCorner = new index.Vector3(dockedTransform.worldPosCorner.x, dockedTransform.worldPosCorner.y, dockedTransform.worldPosCorner.z);
283
+ plannerElement.WorldPosCornerIgnoreOLF = new index.Vector3(dockedTransform.worldPosCornerIgnoreOLF.x, dockedTransform.worldPosCornerIgnoreOLF.y, dockedTransform.worldPosCornerIgnoreOLF.z);
284
+ }
285
+
286
+ /**
287
+ * Non-committing preview of where `elementId` would auto-snap if released now: runs the same
288
+ * dockable-pair search as END, and for the closest pair computes the docked transform via
289
+ * {@link applyDockTransform} (apply → read → restore, no docking relations touched). Returns the
290
+ * delta from the element's current transform (cm / deg), or null if nothing is in snapping range.
291
+ * `excludeElementIds` skips the element's own move-group so it doesn't "snap" to siblings that
292
+ * are translating with it.
293
+ */
294
+ }, {
295
+ key: "getDockSnapPreview",
296
+ value: function getDockSnapPreview(elementId, autoDockingDistance) {
297
+ var excludeElementIds = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
298
+ var element = this.plannerElements.get(elementId);
299
+ if (!element) return null;
300
+ var targets = this.getAllPlannerElements().filter(function (e) {
301
+ return e.getElementId() !== elementId && !excludeElementIds.includes(e.getElementId());
302
+ });
303
+ var pairs = PlannerHandler2D.dockingPointHandlerInst.searchDockableElementsInArea(element, targets, autoDockingDistance);
304
+ if (!pairs || pairs.size === 0) return null;
305
+ var best;
306
+ pairs.forEach(function (p) {
307
+ if (best == undefined || p.distance < best.distance) best = p;
308
+ });
309
+ if (best == undefined) return null;
310
+ var targetElement = this.plannerElements.get(best.targetDP.ElementId);
311
+ if (!targetElement) return null;
312
+ var savedRot = element.RotDeg;
313
+ var savedCenter = element.WorldPosCenter;
314
+ var savedX = savedCenter.x,
315
+ savedY = savedCenter.y,
316
+ savedZ = savedCenter.z;
317
+ this.applyDockTransform(element, targetElement, best.sourceDP, best.targetDP);
318
+ var snapped = element.WorldPosCenter;
319
+ var result = {
320
+ dx: snapped.x - savedX,
321
+ dz: snapped.z - savedZ,
322
+ dRotDeg: element.RotDeg - savedRot
323
+ };
324
+ // Restore — the preview must leave the planner state untouched.
325
+ element.RotDeg = savedRot;
326
+ element.WorldPosCenter = new index.Vector3(savedX, savedY, savedZ);
327
+ return result;
328
+ }
329
+
246
330
  /**
247
331
  * This function updates the position information of all elements. It is called after updating the SVG of 1 element.
248
332
  * The position is updated based on the posNr.
249
333
  * At the end - the collision is calculated
334
+ * @param changedElementIds elements whose SVG was reloaded this cycle (their docking geometry may
335
+ * have moved, e.g. an AVC shifted by stretch areas). Elements docked - directly or transitively -
336
+ * to one of them are re-anchored to the moved partner after the PosNr walk, which on its own only
337
+ * propagates forward in PosNr order and prefers AVL over AVC anchors.
250
338
  */
251
339
  }, {
252
340
  key: "updateAllElementsWorldPos",
253
- value: function updateAllElementsWorldPos(checkCollisionSingleElementId) {
341
+ value: function updateAllElementsWorldPos(checkCollisionSingleElementId, changedElementIds) {
254
342
  if (this.doDisablePlanner2D) return false;
343
+ var getDockedDPsInPriorityOrder = function getDockedDPsInPriorityOrder(element) {
344
+ return element.getDockingDockingPointsByType('AVL').concat(element.getDockingDockingPointsByType('AVR')).concat(element.getDockingDockingPointsByType('AVU')).concat(element.getDockingDockingPointsByType('AVO')).concat(element.getDockingDockingPointsByType('AVN')).concat(element.getDockingDockingPointsByType('AVS')).concat(element.getDockingDockingPointsByType('AVC'));
345
+ };
255
346
  var updateConfig = false;
256
347
  var sortedPlannerElementsbyPosNr = [];
257
348
  var accElems = [];
@@ -272,7 +363,7 @@ var DivaStandardPlanner = /*#__PURE__*/function () {
272
363
  var element = sortedPlannerElementsbyPosNr[i];
273
364
  alreadyCorrectedId.push(element.ElementId);
274
365
  if (i > firstI) {
275
- var dockingPoints = element.getDockingDockingPointsByType('AVL').concat(element.getDockingDockingPointsByType('AVR')).concat(element.getDockingDockingPointsByType('AVU')).concat(element.getDockingDockingPointsByType('AVO')).concat(element.getDockingDockingPointsByType('AVN')).concat(element.getDockingDockingPointsByType('AVS')).concat(element.getDockingDockingPointsByType('AVC'));
366
+ var dockingPoints = getDockedDPsInPriorityOrder(element);
276
367
  for (var j = 0; j < dockingPoints.length; j++) {
277
368
  //Nur wenn er auf ein element schaut das schon gedockt ist korrigieren
278
369
  if (alreadyCorrectedId.indexOf(dockingPoints[j].OnElementId) >= 0) {
@@ -283,6 +374,38 @@ var DivaStandardPlanner = /*#__PURE__*/function () {
283
374
  }
284
375
  }
285
376
  }
377
+
378
+ // The walk above anchors each element to its FIRST docked partner in AVL-first priority and
379
+ // only propagates forward in PosNr order - both hide a geometry change in a reloaded partner
380
+ // (e.g. an AVC line shifted by stretch areas). Sweep outward from the reloaded elements:
381
+ // re-anchor every element docked - directly or transitively - to a moved partner, until stable.
382
+ if (changedElementIds && changedElementIds.length > 0) {
383
+ var moved = new Set(changedElementIds);
384
+ var progressed = true;
385
+ while (progressed) {
386
+ progressed = false;
387
+ var _iterator = _createForOfIteratorHelper(sortedPlannerElementsbyPosNr),
388
+ _step;
389
+ try {
390
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
391
+ var _element = _step.value;
392
+ if (!_element || moved.has(_element.ElementId)) continue;
393
+ var dpToMovedPartner = getDockedDPsInPriorityOrder(_element).find(function (dp) {
394
+ return moved.has(dp.OnElementId);
395
+ });
396
+ if (dpToMovedPartner) {
397
+ updateConfig = this.updateWorldPos(_element, dpToMovedPartner) || updateConfig;
398
+ moved.add(_element.ElementId);
399
+ progressed = true;
400
+ }
401
+ }
402
+ } catch (err) {
403
+ _iterator.e(err);
404
+ } finally {
405
+ _iterator.f();
406
+ }
407
+ }
408
+ }
286
409
  this.checkCollision(false, checkCollisionSingleElementId);
287
410
  return updateConfig;
288
411
  }
@@ -325,39 +448,39 @@ var DivaStandardPlanner = /*#__PURE__*/function () {
325
448
  plannerElement.WorldPosCenter = setToTransform.transform.worldPosCenter;
326
449
  plannerElement.RotDeg = setToTransform.transform.rotDeg;
327
450
  this.set.onDockingChanged(plannerElement.ElementId, -1, 'NOT_DOCKED');
328
- _context.next = 47;
451
+ _context.next = 48;
329
452
  break;
330
453
  case 8:
331
454
  //Nun unterscheidet man, ob man das Element zu einem bestimmten vorselektierten Element Docken will , zu einem vorselektierten DockingPoint oder an eine Freie Planung.
332
455
  dockingFound = false;
333
456
  if (!dockingPointInfos) {
334
- _context.next = 46;
457
+ _context.next = 47;
335
458
  break;
336
459
  }
337
460
  i = 0;
338
461
  case 11:
339
462
  if (!(i < dockingPointInfos.length)) {
340
- _context.next = 46;
463
+ _context.next = 47;
341
464
  break;
342
465
  }
343
466
  targetElemIdToDock = dockingPointInfos[i].targetElemIdToDock;
344
467
  targetDockingPointId = dockingPointInfos[i].targetDockingPointId;
345
468
  if (!(targetElemIdToDock && targetElemIdToDock > -1 && this.plannerElements.has(targetElemIdToDock))) {
346
- _context.next = 43;
469
+ _context.next = 44;
347
470
  break;
348
471
  }
349
472
  if (!(targetDockingPointId && targetDockingPointId != '')) {
350
- _context.next = 31;
473
+ _context.next = 32;
351
474
  break;
352
475
  }
353
476
  targetElem = this.plannerElements.get(targetElemIdToDock);
354
477
  if (!targetElem) {
355
- _context.next = 29;
478
+ _context.next = 30;
356
479
  break;
357
480
  }
358
481
  targetDP = targetElem.getDockingPointById(targetDockingPointId);
359
482
  if (!targetDP) {
360
- _context.next = 29;
483
+ _context.next = 30;
361
484
  break;
362
485
  }
363
486
  successDP = PlannerHandler2D.dockingPointHandlerInst.tryDockElementToDP(plannerElement, targetElem, targetDP);
@@ -367,17 +490,21 @@ var DivaStandardPlanner = /*#__PURE__*/function () {
367
490
  }
368
491
  this.updateWorldPos(plannerElement, successDP);
369
492
  dockingFound = true;
370
- _context.next = 29;
493
+ _context.next = 30;
371
494
  break;
372
495
  case 26:
373
496
  _context.next = 28;
374
497
  return this.tryToDockWithDifferentSVGWithFormula(plannerElement, targetElemIdToDock);
375
498
  case 28:
376
- success = _context.sent;
377
- case 29:
378
- _context.next = 43;
499
+ if (!_context.sent) {
500
+ _context.next = 30;
501
+ break;
502
+ }
503
+ dockingFound = true;
504
+ case 30:
505
+ _context.next = 44;
379
506
  break;
380
- case 31:
507
+ case 32:
381
508
  success = false;
382
509
  if (plannerElement.HasAVL || plannerElement.HasAVR) {
383
510
  success = this.dockToAVLorAVR(plannerElement, [this.plannerElements.get(targetElemIdToDock)]);
@@ -386,28 +513,28 @@ var DivaStandardPlanner = /*#__PURE__*/function () {
386
513
  success = this.dockToAVUorAVOororAVNorAVSorAVC(plannerElement, [this.plannerElements.get(targetElemIdToDock)]);
387
514
  }
388
515
  if (success) {
389
- _context.next = 42;
516
+ _context.next = 43;
390
517
  break;
391
518
  }
392
- _context.next = 37;
519
+ _context.next = 38;
393
520
  return this.tryToDockWithDifferentSVGWithFormula(plannerElement, targetElemIdToDock);
394
- case 37:
521
+ case 38:
395
522
  success = _context.sent;
396
523
  if (success) {
397
- _context.next = 42;
524
+ _context.next = 43;
398
525
  break;
399
526
  }
400
- _context.next = 41;
527
+ _context.next = 42;
401
528
  return this.addElementToWorld(plannerElement, undefined, undefined, undefined, 50);
402
- case 41:
403
- return _context.abrupt("return");
404
529
  case 42:
405
- if (success) dockingFound = true;
530
+ return _context.abrupt("return");
406
531
  case 43:
532
+ if (success) dockingFound = true;
533
+ case 44:
407
534
  i++;
408
535
  _context.next = 11;
409
536
  break;
410
- case 46:
537
+ case 47:
411
538
  if (!dockingFound) {
412
539
  allPlannerElements = this.getAllPlannerElements();
413
540
  _success = this.dockToAVLorAVR(plannerElement, allPlannerElements);
@@ -428,13 +555,13 @@ var DivaStandardPlanner = /*#__PURE__*/function () {
428
555
  }
429
556
  }
430
557
  }
431
- case 47:
558
+ case 48:
432
559
  this.updatePlannerPosNr();
433
560
  this.updateAllElementsWorldPos();
434
561
  this.updatePlannerPosNr();
435
562
  this.checkCollision(false, plannerElement.getElementId());
436
563
  this.updatePlannerBoundingBox();
437
- case 52:
564
+ case 53:
438
565
  case "end":
439
566
  return _context.stop();
440
567
  }
@@ -449,7 +576,7 @@ var DivaStandardPlanner = /*#__PURE__*/function () {
449
576
  key: "tryToDockWithDifferentSVGWithFormula",
450
577
  value: function () {
451
578
  var _tryToDockWithDifferentSVGWithFormula = _asyncToGenerator__default["default"](/*#__PURE__*/_regeneratorRuntime__default["default"].mark(function _callee2(plannerElement, targetElemIdToDock) {
452
- var success, article, origVariantValues, svgsWithFormula, i, elements, variantValues, vv, key, v, _i2, _vv, _elements, _variantValues, _key, _elements2, _variantValues2, _key2;
579
+ var success, article, origVariantValues, svgsWithFormula, i, vv, targetFilterCandidates, _i2, v, _i3, elements, variantValues, key;
453
580
  return _regeneratorRuntime__default["default"].wrap(function _callee2$(_context2) {
454
581
  while (1) switch (_context2.prev = _context2.next) {
455
582
  case 0:
@@ -459,92 +586,107 @@ var DivaStandardPlanner = /*#__PURE__*/function () {
459
586
  origVariantValues = article === null || article === void 0 ? void 0 : article.VariantValues;
460
587
  svgsWithFormula = plannerElement.getSVGsWithFormula();
461
588
  if (!(plannerElement.FilterAVL.length || plannerElement.FilterAVR.length)) {
462
- _context2.next = 47;
589
+ _context2.next = 52;
463
590
  break;
464
591
  }
465
592
  if (!(svgsWithFormula !== null && svgsWithFormula !== void 0 && svgsWithFormula.length)) {
466
- _context2.next = 22;
593
+ _context2.next = 18;
467
594
  break;
468
595
  }
469
596
  i = 0;
470
597
  case 7:
471
598
  if (!(i < svgsWithFormula.length)) {
472
- _context2.next = 22;
599
+ _context2.next = 18;
473
600
  break;
474
601
  }
475
- elements = new Map();
476
- variantValues = new Map();
477
602
  vv = DivaUtils__default["default"].getVariantValuesFromRule(svgsWithFormula[i].JsFormula, {});
478
- for (key in vv) {
479
- variantValues.set(key, vv[key]);
480
- }
481
- elements.set(plannerElement.ElementId, variantValues);
482
- _context2.next = 15;
483
- return this.set.updateCfgValuesByPlanner(elements, true);
484
- case 15:
485
- success = this.dockToAVLorAVR(plannerElement, [this.plannerElements.get(targetElemIdToDock)]);
603
+ _context2.next = 11;
604
+ return this.applyVariantValuesAndTryDock(plannerElement, targetElemIdToDock, vv);
605
+ case 11:
606
+ success = _context2.sent;
486
607
  if (!success) {
487
- _context2.next = 19;
608
+ _context2.next = 15;
488
609
  break;
489
610
  }
490
611
  //svg did match
491
612
  LOG.debug('svgWithFormula nr: ' + i + ' did dock: ' + svgsWithFormula[i].SVG);
492
- return _context2.abrupt("break", 22);
493
- case 19:
613
+ return _context2.abrupt("break", 18);
614
+ case 15:
494
615
  i++;
495
616
  _context2.next = 7;
496
617
  break;
497
- case 22:
618
+ case 18:
619
+ if (!(!success && article)) {
620
+ _context2.next = 31;
621
+ break;
622
+ }
623
+ targetFilterCandidates = this.getVariantValuesMatchingTargetFilters(article, this.plannerElements.get(targetElemIdToDock));
624
+ _i2 = 0;
625
+ case 21:
626
+ if (!(_i2 < targetFilterCandidates.length && _i2 < 20)) {
627
+ _context2.next = 31;
628
+ break;
629
+ }
630
+ _context2.next = 24;
631
+ return this.applyVariantValuesAndTryDock(plannerElement, targetElemIdToDock, targetFilterCandidates[_i2]);
632
+ case 24:
633
+ success = _context2.sent;
634
+ if (!success) {
635
+ _context2.next = 28;
636
+ break;
637
+ }
638
+ LOG.debug('following variantValues matching the target avl/avr filter did dock: ', targetFilterCandidates[_i2]);
639
+ return _context2.abrupt("break", 31);
640
+ case 28:
641
+ _i2++;
642
+ _context2.next = 21;
643
+ break;
644
+ case 31:
498
645
  //other logic. look for decisions with featrue 90 or 89 and try change the options that influence 90 - 89
499
646
  v = plannerElement.getVaraintValuesInfluencingAVLAVRFilter();
500
647
  if (!(v !== null && v !== void 0 && v.length && !success)) {
501
- _context2.next = 40;
648
+ _context2.next = 44;
502
649
  break;
503
650
  }
504
- _i2 = 0;
505
- case 25:
506
- if (!(_i2 < v.length && _i2 < 20)) {
507
- _context2.next = 40;
651
+ _i3 = 0;
652
+ case 34:
653
+ if (!(_i3 < v.length && _i3 < 20)) {
654
+ _context2.next = 44;
508
655
  break;
509
656
  }
510
- _vv = v[_i2];
511
- _elements = new Map();
512
- _variantValues = new Map();
513
- for (_key in _vv) {
514
- _variantValues.set(_key, _vv[_key]);
515
- }
516
- _elements.set(plannerElement.ElementId, _variantValues);
517
- _context2.next = 33;
518
- return this.set.updateCfgValuesByPlanner(_elements, true);
519
- case 33:
520
- success = this.dockToAVLorAVR(plannerElement, [this.plannerElements.get(targetElemIdToDock)]);
657
+ _context2.next = 37;
658
+ return this.applyVariantValuesAndTryDock(plannerElement, targetElemIdToDock, v[_i3]);
659
+ case 37:
660
+ success = _context2.sent;
521
661
  if (!success) {
522
- _context2.next = 37;
662
+ _context2.next = 41;
523
663
  break;
524
664
  }
525
665
  //variantValues did match
526
- LOG.debug('following variantValues did dock: ', _variantValues);
527
- return _context2.abrupt("break", 40);
528
- case 37:
529
- _i2++;
530
- _context2.next = 25;
666
+ LOG.debug('following variantValues did dock: ', v[_i3]);
667
+ return _context2.abrupt("break", 44);
668
+ case 41:
669
+ _i3++;
670
+ _context2.next = 34;
531
671
  break;
532
- case 40:
672
+ case 44:
533
673
  if (success) {
534
- _context2.next = 47;
674
+ _context2.next = 52;
535
675
  break;
536
676
  }
537
- _elements2 = new Map();
538
- _variantValues2 = new Map();
539
- for (_key2 in origVariantValues) {
540
- _variantValues2.set(_key2, origVariantValues[_key2]);
677
+ elements = new Map();
678
+ variantValues = new Map();
679
+ for (key in origVariantValues) {
680
+ variantValues.set(key, origVariantValues[key]);
541
681
  }
542
- _elements2.set(plannerElement.ElementId, _variantValues2);
543
- _context2.next = 47;
544
- return this.set.updateCfgValuesByPlanner(_elements2, true);
545
- case 47:
682
+ elements.set(plannerElement.ElementId, variantValues);
683
+ _context2.next = 51;
684
+ return this.set.updateCfgValuesByPlanner(elements, true);
685
+ case 51:
686
+ if (article) this.commitPendingConnectorFilters(article);
687
+ case 52:
546
688
  return _context2.abrupt("return", success);
547
- case 48:
689
+ case 53:
548
690
  case "end":
549
691
  return _context2.stop();
550
692
  }
@@ -555,6 +697,91 @@ var DivaStandardPlanner = /*#__PURE__*/function () {
555
697
  }
556
698
  return tryToDockWithDifferentSVGWithFormula;
557
699
  }()
700
+ }, {
701
+ key: "applyVariantValuesAndTryDock",
702
+ value: function () {
703
+ var _applyVariantValuesAndTryDock = _asyncToGenerator__default["default"](/*#__PURE__*/_regeneratorRuntime__default["default"].mark(function _callee3(plannerElement, targetElemIdToDock, variantValuesToApply) {
704
+ var elements, variantValues, key, article;
705
+ return _regeneratorRuntime__default["default"].wrap(function _callee3$(_context3) {
706
+ while (1) switch (_context3.prev = _context3.next) {
707
+ case 0:
708
+ elements = new Map();
709
+ variantValues = new Map();
710
+ for (key in variantValuesToApply) {
711
+ variantValues.set(key, variantValuesToApply[key]);
712
+ }
713
+ elements.set(plannerElement.ElementId, variantValues);
714
+ _context3.next = 6;
715
+ return this.set.updateCfgValuesByPlanner(elements, true);
716
+ case 6:
717
+ article = this.set.getArticleByElementId(plannerElement.ElementId);
718
+ if (article) this.commitPendingConnectorFilters(article);
719
+ return _context3.abrupt("return", this.dockToAVLorAVR(plannerElement, [this.plannerElements.get(targetElemIdToDock)]));
720
+ case 9:
721
+ case "end":
722
+ return _context3.stop();
723
+ }
724
+ }, _callee3, this);
725
+ }));
726
+ function applyVariantValuesAndTryDock(_x7, _x8, _x9) {
727
+ return _applyVariantValuesAndTryDock.apply(this, arguments);
728
+ }
729
+ return applyVariantValuesAndTryDock;
730
+ }() //the engines only commit option-derived connector filters when the svg swaps, but while probing dock configurations the filters must follow the configuration even without a swap
731
+ }, {
732
+ key: "commitPendingConnectorFilters",
733
+ value: function commitPendingConnectorFilters(article) {
734
+ if (article.newPossibleAVRFilters) {
735
+ article.avr = article.newPossibleAVRFilters;
736
+ article.newPossibleAVRFilters = undefined;
737
+ }
738
+ if (article.newPossibleAVLFilters) {
739
+ article.avl = article.newPossibleAVLFilters;
740
+ article.newPossibleAVLFilters = undefined;
741
+ }
742
+ }
743
+ }, {
744
+ key: "getVariantValuesMatchingTargetFilters",
745
+ value: function getVariantValuesMatchingTargetFilters(article, targetElement) {
746
+ if (!targetElement) return [];
747
+ var optPrefix = !article.CatalogData.isIDMFormat ? 'OPT' : '';
748
+ var opvPrefix = !article.CatalogData.isIDMFormat ? 'OPV' : '';
749
+ var candidates = [];
750
+ var seen = new Set();
751
+ var collect = function collect(connectorFeature, targetFilters) {
752
+ var _iterator2 = _createForOfIteratorHelper(targetFilters),
753
+ _step2;
754
+ try {
755
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
756
+ var filter = _step2.value;
757
+ var _iterator3 = _createForOfIteratorHelper(article.getVariantValuesInfluencingOptions([optPrefix + connectorFeature], opvPrefix + filter)),
758
+ _step3;
759
+ try {
760
+ for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
761
+ var vv = _step3.value;
762
+ var key = JSON.stringify(vv);
763
+ if (!seen.has(key)) {
764
+ seen.add(key);
765
+ candidates.push(vv);
766
+ }
767
+ }
768
+ } catch (err) {
769
+ _iterator3.e(err);
770
+ } finally {
771
+ _iterator3.f();
772
+ }
773
+ }
774
+ } catch (err) {
775
+ _iterator2.e(err);
776
+ } finally {
777
+ _iterator2.f();
778
+ }
779
+ };
780
+ //this article's AVL side (feature 89) docks against the target's AVR side and vice versa
781
+ collect('89', targetElement.FilterAVR);
782
+ collect('90', targetElement.FilterAVL);
783
+ return candidates;
784
+ }
558
785
  }, {
559
786
  key: "dockToAVLorAVR",
560
787
  value: function dockToAVLorAVR(plannerElement, targetElements) {
@@ -732,31 +959,31 @@ var DivaStandardPlanner = /*#__PURE__*/function () {
732
959
  }, {
733
960
  key: "updatePlanner",
734
961
  value: function () {
735
- var _updatePlanner = _asyncToGenerator__default["default"](/*#__PURE__*/_regeneratorRuntime__default["default"].mark(function _callee3() {
962
+ var _updatePlanner = _asyncToGenerator__default["default"](/*#__PURE__*/_regeneratorRuntime__default["default"].mark(function _callee4() {
736
963
  var allPlannerElements, elemtsWhereSomethingChanged, i, elem, doReload, elementsToDelete, elementsLostDockingRelation;
737
- return _regeneratorRuntime__default["default"].wrap(function _callee3$(_context3) {
738
- while (1) switch (_context3.prev = _context3.next) {
964
+ return _regeneratorRuntime__default["default"].wrap(function _callee4$(_context4) {
965
+ while (1) switch (_context4.prev = _context4.next) {
739
966
  case 0:
740
967
  allPlannerElements = this.getAllPlannerElements();
741
968
  elemtsWhereSomethingChanged = [];
742
969
  i = 0;
743
970
  case 3:
744
971
  if (!(i < allPlannerElements.length)) {
745
- _context3.next = 13;
972
+ _context4.next = 13;
746
973
  break;
747
974
  }
748
975
  elem = allPlannerElements[i];
749
976
  doReload = elem.updatePlannerData(this.set.getPlannerData(elem.getElementId()));
750
977
  if (!doReload) {
751
- _context3.next = 10;
978
+ _context4.next = 10;
752
979
  break;
753
980
  }
754
981
  elemtsWhereSomethingChanged.push(elem.ElementId);
755
- _context3.next = 10;
982
+ _context4.next = 10;
756
983
  return PlannerHandler2D.handler2D.loadSVG(elem, this.set);
757
984
  case 10:
758
985
  i++;
759
- _context3.next = 3;
986
+ _context4.next = 3;
760
987
  break;
761
988
  case 13:
762
989
  elementsToDelete = [];
@@ -769,11 +996,11 @@ var DivaStandardPlanner = /*#__PURE__*/function () {
769
996
  elementsToDelete.push(elementsLostDockingRelation[i].ElementId);
770
997
  }
771
998
  }
772
- this.updateAllElementsWorldPos();
999
+ this.updateAllElementsWorldPos(undefined, elemtsWhereSomethingChanged);
773
1000
  this.updatePlannerPosNr();
774
1001
  this.updatePlannerBoundingBox();
775
1002
  }
776
- return _context3.abrupt("return", {
1003
+ return _context4.abrupt("return", {
777
1004
  doDeleteBackGrid: false,
778
1005
  elemIdsToDelete: elementsToDelete,
779
1006
  elementIdsToUpdateSelection: elemtsWhereSomethingChanged,
@@ -781,9 +1008,9 @@ var DivaStandardPlanner = /*#__PURE__*/function () {
781
1008
  });
782
1009
  case 16:
783
1010
  case "end":
784
- return _context3.stop();
1011
+ return _context4.stop();
785
1012
  }
786
- }, _callee3, this);
1013
+ }, _callee4, this);
787
1014
  }));
788
1015
  function updatePlanner() {
789
1016
  return _updatePlanner.apply(this, arguments);
@@ -798,15 +1025,14 @@ var DivaStandardPlanner = /*#__PURE__*/function () {
798
1025
  }, {
799
1026
  key: "extendPlanner",
800
1027
  value: (function () {
801
- var _extendPlanner = _asyncToGenerator__default["default"](/*#__PURE__*/_regeneratorRuntime__default["default"].mark(function _callee4(setPlanData, globalBoundingBox) {
802
- var planDataString, planData, jsonElements, elementsSortedbyPosNr, accElements, oldElementidMapping, i, _jsonElement$Accessoi, jsonElement, catalogArticle, plannerElement, data, curElement, DPsInfo, j, dpInfo, sourceDP, targetElement, targetDP;
803
- return _regeneratorRuntime__default["default"].wrap(function _callee4$(_context4) {
804
- while (1) switch (_context4.prev = _context4.next) {
1028
+ var _extendPlanner = _asyncToGenerator__default["default"](/*#__PURE__*/_regeneratorRuntime__default["default"].mark(function _callee5(setPlanData, globalBoundingBox) {
1029
+ var planData, jsonElements, elementsSortedbyPosNr, accElements, oldElementidMapping, i, _saveElementArticleCo, _jsonElement$Accessoi, jsonElement, catalogArticle, plannerElement, data, elementsForDockingExtend, row, curElement, DPsInfo, j, dpInfo, sourceDP, targetElement, targetDP;
1030
+ return _regeneratorRuntime__default["default"].wrap(function _callee5$(_context5) {
1031
+ while (1) switch (_context5.prev = _context5.next) {
805
1032
  case 0:
806
- planDataString = DivaUtils__default["default"].decodeBase64(setPlanData);
807
- planData = JSON.parse(planDataString);
808
- if (!(planData.v != null && planData.v == 2)) {
809
- _context4.next = 40;
1033
+ planData = parseSetPlanData(setPlanData);
1034
+ if (!isSavePlannerV2(planData)) {
1035
+ _context5.next = 39;
810
1036
  break;
811
1037
  }
812
1038
  jsonElements = planData.set.elements;
@@ -814,70 +1040,70 @@ var DivaStandardPlanner = /*#__PURE__*/function () {
814
1040
  accElements = [];
815
1041
  oldElementidMapping = new Map(); //First reset planner element values in jsonElement so that every set is planned to be set to origin
816
1042
  i = 0;
817
- case 8:
1043
+ case 7:
818
1044
  if (!(i < jsonElements.length)) {
819
- _context4.next = 36;
1045
+ _context5.next = 35;
820
1046
  break;
821
1047
  }
822
- _context4.prev = 9;
1048
+ _context5.prev = 8;
823
1049
  jsonElement = jsonElements[i];
824
- catalogArticle = this.set.CatalogData.getCatalogArticleByArticleCodex(jsonElement.articleCodex || jsonElement.Codex);
1050
+ catalogArticle = this.set.CatalogData.getCatalogArticleByArticleCodex((_saveElementArticleCo = saveElementArticleCodex(jsonElement)) !== null && _saveElementArticleCo !== void 0 ? _saveElementArticleCo : '');
825
1051
  if (!(!catalogArticle && (_jsonElement$Accessoi = jsonElement.AccessoireInitParams) !== null && _jsonElement$Accessoi !== void 0 && _jsonElement$Accessoi.RelatedToBasketID && !this.set.getSetState.onlyRunLogic)) {
826
- _context4.next = 15;
1052
+ _context5.next = 14;
827
1053
  break;
828
1054
  }
829
1055
  LOG.error(new DivaUtils.DivaError('Error initializing element nr ' + i + ' in the Standard Web Planner. PlanData V2', {
830
1056
  code: 'WC_0012'
831
1057
  }));
832
- return _context4.abrupt("continue", 33);
833
- case 15:
1058
+ return _context5.abrupt("continue", 32);
1059
+ case 14:
834
1060
  plannerElement = new index.PlannerElementData(this.set.getSetId(), jsonElement.basketID, this.nextElementId, DivaStandardPlanner.plannerType);
835
- oldElementidMapping.set(parseInt(jsonElement.elementID), plannerElement);
1061
+ oldElementidMapping.set(jsonElement.elementID, plannerElement);
836
1062
  this.nextElementId = plannerElement.getElementId() + 1;
837
1063
  this.plannerElements.set(plannerElement.ElementId, plannerElement);
838
1064
  this.set.setElementId(jsonElement.basketID, plannerElement.ElementId);
839
1065
  data = this.set.getPlannerData(plannerElement.ElementId);
840
1066
  plannerElement.updatePlannerData(data);
841
1067
  if (this.doDisablePlanner2D) {
842
- _context4.next = 25;
1068
+ _context5.next = 24;
843
1069
  break;
844
1070
  }
845
- _context4.next = 25;
1071
+ _context5.next = 24;
846
1072
  return PlannerHandler2D.handler2D.loadSVG(plannerElement, this.set);
847
- case 25:
1073
+ case 24:
848
1074
  plannerElement.WorldPosCenter = new index.Vector3(globalBoundingBox.WorldPos.x + globalBoundingBox.Size.x + jsonElement.x + 100, globalBoundingBox.WorldPos.y + jsonElement.y, globalBoundingBox.WorldPos.z + jsonElement.z);
849
1075
  plannerElement.RotDeg = jsonElement.rot;
850
1076
  if (plannerElement.IsDockedAccessoire) {
851
1077
  accElements.push(jsonElement);
852
1078
  plannerElement.PosNr = jsonElement.posNr;
853
- plannerElement.AccessoirePosNr = jsonElement.accNr;
1079
+ if (jsonElement.accNr != null) plannerElement.AccessoirePosNr = jsonElement.accNr;
854
1080
  } else {
855
1081
  elementsSortedbyPosNr[jsonElement.posNr - 1] = jsonElement;
856
1082
  plannerElement.PosNr = jsonElement.posNr;
857
1083
  }
858
- _context4.next = 33;
1084
+ _context5.next = 32;
859
1085
  break;
860
- case 30:
861
- _context4.prev = 30;
862
- _context4.t0 = _context4["catch"](9);
1086
+ case 29:
1087
+ _context5.prev = 29;
1088
+ _context5.t0 = _context5["catch"](8);
863
1089
  LOG.error(new DivaUtils.DivaError('Error initializing element nr ' + i + ' in the Standard Web Planner. PlanData V2', {
864
- cause: _context4.t0,
1090
+ cause: _context5.t0,
865
1091
  code: 'WC_0012'
866
1092
  }));
867
- case 33:
1093
+ case 32:
868
1094
  i++;
869
- _context4.next = 8;
1095
+ _context5.next = 7;
870
1096
  break;
871
- case 36:
872
- elementsSortedbyPosNr = elementsSortedbyPosNr.concat(accElements);
873
- for (i = 0; i < elementsSortedbyPosNr.length; i++) {
874
- curElement = oldElementidMapping.get(elementsSortedbyPosNr[i].elementID);
875
- if (elementsSortedbyPosNr.length > 1) {
876
- //This is the case when a complex product is loaded
877
- //First element is already positioned correctly not docket
1097
+ case 35:
1098
+ elementsForDockingExtend = [].concat(_toConsumableArray__default["default"](elementsSortedbyPosNr.filter(function (e) {
1099
+ return e != null;
1100
+ })), accElements);
1101
+ for (i = 0; i < elementsForDockingExtend.length; i++) {
1102
+ row = elementsForDockingExtend[i];
1103
+ curElement = oldElementidMapping.get(row.elementID);
1104
+ if (elementsForDockingExtend.length > 1) {
878
1105
  if (i > 0) {
879
- //The other elements are docked to the First element.
880
- DPsInfo = elementsSortedbyPosNr[i].DP;
1106
+ DPsInfo = row.DP;
881
1107
  for (j = 0; j < DPsInfo.length; j++) {
882
1108
  dpInfo = DPsInfo[j];
883
1109
  sourceDP = curElement === null || curElement === void 0 ? void 0 : curElement.getDockingPointById(dpInfo.id);
@@ -890,19 +1116,19 @@ var DivaStandardPlanner = /*#__PURE__*/function () {
890
1116
  }
891
1117
  }
892
1118
  }
893
- _context4.next = 41;
1119
+ _context5.next = 40;
894
1120
  break;
895
- case 40:
1121
+ case 39:
896
1122
  LOG.error(new DivaUtils.DivaError('The function extend Planner works only with products that are saved in the configurator 2.0', {
897
1123
  code: 'WC_0012'
898
1124
  }));
899
- case 41:
1125
+ case 40:
900
1126
  case "end":
901
- return _context4.stop();
1127
+ return _context5.stop();
902
1128
  }
903
- }, _callee4, this, [[9, 30]]);
1129
+ }, _callee5, this, [[8, 29]]);
904
1130
  }));
905
- function extendPlanner(_x7, _x8) {
1131
+ function extendPlanner(_x10, _x11) {
906
1132
  return _extendPlanner.apply(this, arguments);
907
1133
  }
908
1134
  return extendPlanner;
@@ -910,47 +1136,45 @@ var DivaStandardPlanner = /*#__PURE__*/function () {
910
1136
  }, {
911
1137
  key: "initPlanner",
912
1138
  value: function () {
913
- var _initPlanner = _asyncToGenerator__default["default"](/*#__PURE__*/_regeneratorRuntime__default["default"].mark(function _callee5(setPlanData) {
914
- var planDataString, planData, jsonElements, elementsSortedbyPosNr, accElements, i, _jsonElement$Accessoi2, jsonElement, catalogArticle, elementID, plannerElement, data, onlyOneBaseElement, _jsonElement, hasSavedPos, element, DPsInfo, j, dpInfo, sourceElement, sourceDP, targetElement, targetDP, _jsonElements, _elementsSortedbyPosNr, _accElements, _jsonElement2$Accesso, _jsonElement2, _catalogArticle, basketID, elementId, _plannerElement, _data, centerWorldPos, parentPosNr, accPosNr, _DPsInfo, _dpInfo, _this$plannerElements, targetElementId, dpType, curElement, _targetElement;
915
- return _regeneratorRuntime__default["default"].wrap(function _callee5$(_context5) {
916
- while (1) switch (_context5.prev = _context5.next) {
1139
+ var _initPlanner = _asyncToGenerator__default["default"](/*#__PURE__*/_regeneratorRuntime__default["default"].mark(function _callee6(setPlanData) {
1140
+ var planData, _planData$set, jsonElements, elementsSortedbyPosNr, accElements, i, _saveElementArticleCo2, _jsonElement$Accessoi2, jsonElement, catalogArticle, elementID, plannerElement, data, onlyOneBaseElement, elementsForDocking, row, _jsonElement, hasSavedPos, element, DPsInfo, j, dpInfo, sourceElement, sourceDP, targetElement, targetDP, alreadyDocked, docked, _elementsForDocking$i, elementId, _planData$Sets, _legacySet$Elements, legacySet, _jsonElements, _elementsSortedbyPosNr, _accElements, _saveElementArticleCo3, _jsonElement2$Accesso, _jsonElement2, _catalogArticle, basketID, _elementId, _plannerElement, _data, centerWorldPos, parentPosNr, accPosNr, elementsForDockingV1, _row, _DPsInfo, _dpInfo, _this$plannerElements, targetElementId, dpType, curElement, _targetElement, anchorElement;
1141
+ return _regeneratorRuntime__default["default"].wrap(function _callee6$(_context6) {
1142
+ while (1) switch (_context6.prev = _context6.next) {
917
1143
  case 0:
918
- planDataString = DivaUtils__default["default"].decodeBase64(setPlanData);
919
- planData = JSON.parse(planDataString);
920
- if (!(planData.v != null && planData.v == 2)) {
921
- _context5.next = 62;
1144
+ planData = parseSetPlanData(setPlanData);
1145
+ if (!isSavePlannerV2(planData)) {
1146
+ _context6.next = 63;
922
1147
  break;
923
1148
  }
924
1149
  LOG.debug('Initialize set Plan Data - V2\n' + planData, 'DivaStandardPlanner initPlanner');
925
- if (!(!planData.set || !planData.set.elements || planData.set.elements.length == 0)) {
926
- _context5.next = 6;
1150
+ if ((_planData$set = planData.set) !== null && _planData$set !== void 0 && (_planData$set = _planData$set.elements) !== null && _planData$set !== void 0 && _planData$set.length) {
1151
+ _context6.next = 5;
927
1152
  break;
928
1153
  }
929
- return _context5.abrupt("return");
930
- case 6:
931
- //Init new saved Plannings
1154
+ return _context6.abrupt("return");
1155
+ case 5:
932
1156
  jsonElements = planData.set.elements;
933
1157
  elementsSortedbyPosNr = [];
934
1158
  accElements = [];
935
1159
  i = 0;
936
- case 10:
1160
+ case 9:
937
1161
  if (!(i < jsonElements.length)) {
938
- _context5.next = 38;
1162
+ _context6.next = 37;
939
1163
  break;
940
1164
  }
941
- _context5.prev = 11;
1165
+ _context6.prev = 10;
942
1166
  jsonElement = jsonElements[i];
943
- catalogArticle = this.set.CatalogData.getCatalogArticleByArticleCodex(jsonElement.articleCodex || jsonElement.Codex);
1167
+ catalogArticle = this.set.CatalogData.getCatalogArticleByArticleCodex((_saveElementArticleCo2 = saveElementArticleCodex(jsonElement)) !== null && _saveElementArticleCo2 !== void 0 ? _saveElementArticleCo2 : '');
944
1168
  if (!(!catalogArticle && (_jsonElement$Accessoi2 = jsonElement.AccessoireInitParams) !== null && _jsonElement$Accessoi2 !== void 0 && _jsonElement$Accessoi2.RelatedToBasketID && !this.set.getSetState.onlyRunLogic)) {
945
- _context5.next = 17;
1169
+ _context6.next = 16;
946
1170
  break;
947
1171
  }
948
1172
  LOG.error(new DivaUtils.DivaError('Error initializing element nr ' + i + ' in the Standard Web Planner. PlanData V2', {
949
1173
  code: 'WC_0012'
950
1174
  }));
951
- return _context5.abrupt("continue", 35);
952
- case 17:
953
- elementID = parseInt(jsonElement.elementID);
1175
+ return _context6.abrupt("continue", 34);
1176
+ case 16:
1177
+ elementID = jsonElement.elementID;
954
1178
  plannerElement = new index.PlannerElementData(this.set.getSetId(), jsonElement.basketID, elementID, DivaStandardPlanner.plannerType);
955
1179
  this.nextElementId = elementID + 1;
956
1180
  this.plannerElements.set(plannerElement.ElementId, plannerElement);
@@ -958,12 +1182,12 @@ var DivaStandardPlanner = /*#__PURE__*/function () {
958
1182
  data = this.set.getPlannerData(plannerElement.ElementId);
959
1183
  plannerElement.updatePlannerData(data);
960
1184
  if (this.doDisablePlanner2D) {
961
- _context5.next = 27;
1185
+ _context6.next = 26;
962
1186
  break;
963
1187
  }
964
- _context5.next = 27;
1188
+ _context6.next = 26;
965
1189
  return PlannerHandler2D.handler2D.loadSVG(plannerElement, this.set);
966
- case 27:
1190
+ case 26:
967
1191
  //Im neuen speichern ist die Position hinten link - nicht mehr im Centrum wie im alten Planer
968
1192
  //plannerElement.WorldPosCenter = new Vector3(jsonElement.x, jsonElement.y, jsonElement.z);
969
1193
  plannerElement.WorldPosCenter = new index.Vector3(this.plannerBoundingBox.WorldPos.x + jsonElement.x, this.plannerBoundingBox.WorldPos.y + jsonElement.y, this.plannerBoundingBox.WorldPos.z + jsonElement.z);
@@ -971,141 +1195,151 @@ var DivaStandardPlanner = /*#__PURE__*/function () {
971
1195
  if (plannerElement.IsDockedAccessoire) {
972
1196
  accElements.push(jsonElement);
973
1197
  plannerElement.PosNr = jsonElement.posNr;
974
- plannerElement.AccessoirePosNr = jsonElement.accNr;
1198
+ if (jsonElement.accNr != null) plannerElement.AccessoirePosNr = jsonElement.accNr;
975
1199
  } else {
976
1200
  elementsSortedbyPosNr[jsonElement.posNr - 1] = jsonElement;
977
1201
  plannerElement.PosNr = jsonElement.posNr;
978
1202
  }
979
- _context5.next = 35;
1203
+ _context6.next = 34;
980
1204
  break;
981
- case 32:
982
- _context5.prev = 32;
983
- _context5.t0 = _context5["catch"](11);
1205
+ case 31:
1206
+ _context6.prev = 31;
1207
+ _context6.t0 = _context6["catch"](10);
984
1208
  LOG.error(new DivaUtils.DivaError('Error initializing element nr ' + i + ' in the Standard Web Planner. PlanData V2', {
985
- cause: _context5.t0,
1209
+ cause: _context6.t0,
986
1210
  code: 'WC_0012'
987
1211
  }));
988
- case 35:
1212
+ case 34:
989
1213
  i++;
990
- _context5.next = 10;
1214
+ _context6.next = 9;
991
1215
  break;
992
- case 38:
993
- onlyOneBaseElement = elementsSortedbyPosNr.length == 1; //Saves if only one base element is in the planning. All the others are only accessoires
994
- elementsSortedbyPosNr = elementsSortedbyPosNr.concat(accElements);
1216
+ case 37:
1217
+ onlyOneBaseElement = elementsSortedbyPosNr.filter(Boolean).length == 1; //Saves if only one base element is in the planning. All the others are only accessoires
1218
+ elementsForDocking = [].concat(_toConsumableArray__default["default"](elementsSortedbyPosNr.filter(function (e) {
1219
+ return e != null;
1220
+ })), accElements);
995
1221
  i = 0;
996
- case 41:
997
- if (!(i < elementsSortedbyPosNr.length)) {
998
- _context5.next = 60;
1222
+ case 40:
1223
+ if (!(i < elementsForDocking.length)) {
1224
+ _context6.next = 61;
999
1225
  break;
1000
1226
  }
1001
- _context5.prev = 42;
1227
+ _context6.prev = 41;
1228
+ row = elementsForDocking[i];
1002
1229
  if (!(i == 0 && onlyOneBaseElement && this.plannerHasStaticBackground)) {
1003
- _context5.next = 48;
1230
+ _context6.next = 48;
1004
1231
  break;
1005
1232
  }
1006
1233
  //if the planner has a static background room and there is only one base element (ignore docked ACCs) then it should be forced positioned in the center of the room.
1007
1234
  //Only do this for fresh plannings - if the saved planData already contains a position, keep it.
1235
+ //if the planner has a static background room and there is only one base element (ignore docked ACCs) then it should be forced positioned in the center of the room
1008
1236
  _jsonElement = elementsSortedbyPosNr[i];
1009
- hasSavedPos = _jsonElement.x != null || _jsonElement.y != null || _jsonElement.z != null;
1237
+ hasSavedPos = (_jsonElement === null || _jsonElement === void 0 ? void 0 : _jsonElement.x) != null || (_jsonElement === null || _jsonElement === void 0 ? void 0 : _jsonElement.y) != null || (_jsonElement === null || _jsonElement === void 0 ? void 0 : _jsonElement.z) != null;
1010
1238
  if (!hasSavedPos) {
1011
- element = this.plannerElements.get(_jsonElement.elementID);
1239
+ element = this.plannerElements.get(row.elementID);
1012
1240
  if (element) element.WorldPosCenter = new index.Vector3(0, element.Height / 2, element.Depth / 2);
1013
1241
  }
1014
- return _context5.abrupt("continue", 57);
1242
+ return _context6.abrupt("continue", 58);
1015
1243
  case 48:
1016
- if (!(elementsSortedbyPosNr[i].DP == null || elementsSortedbyPosNr[i].DP.length == 0)) {
1017
- _context5.next = 50;
1244
+ if (!(row.DP == null || row.DP.length == 0)) {
1245
+ _context6.next = 50;
1018
1246
  break;
1019
1247
  }
1020
- return _context5.abrupt("continue", 57);
1248
+ return _context6.abrupt("continue", 58);
1021
1249
  case 50:
1022
- DPsInfo = elementsSortedbyPosNr[i].DP;
1250
+ DPsInfo = row.DP;
1023
1251
  for (j = 0; j < DPsInfo.length; j++) {
1024
1252
  dpInfo = DPsInfo[j];
1025
- if (dpInfo.id && dpInfo.id != '' && dpInfo.onID && dpInfo.onID != '' && dpInfo.onDPID && dpInfo.onDPID != '') {
1026
- sourceElement = this.plannerElements.get(elementsSortedbyPosNr[i].elementID);
1253
+ if (dpInfo.id && dpInfo.onID != null && dpInfo.onDPID) {
1254
+ sourceElement = this.plannerElements.get(row.elementID);
1027
1255
  sourceDP = sourceElement === null || sourceElement === void 0 ? void 0 : sourceElement.getDockingPointById(dpInfo.id);
1028
1256
  targetElement = this.plannerElements.get(dpInfo.onID);
1029
1257
  targetDP = targetElement === null || targetElement === void 0 ? void 0 : targetElement.getDockingPointById(dpInfo.onDPID);
1030
1258
  if (sourceDP && targetDP) {
1031
- PlannerHandler2D.dockingPointHandlerInst.tryDockElementDPToDP(sourceElement, targetElement, sourceDP, targetDP);
1259
+ // Saved plans store each relation on both sides - skip the mirror entry of an already established pair.
1260
+ alreadyDocked = sourceDP.IsDocking && sourceDP.OnDP == targetDP;
1261
+ docked = alreadyDocked || PlannerHandler2D.dockingPointHandlerInst.tryDockElementDPToDP(sourceElement, targetElement, sourceDP, targetDP);
1262
+ if (!docked && !this.doDisablePlanner2D) LOG.error(new DivaUtils.DivaError('Saved docking relation rejected on init: ' + dpInfo.id + ' (elem ' + (sourceElement === null || sourceElement === void 0 ? void 0 : sourceElement.ElementId) + ') -> ' + dpInfo.onDPID + ' (elem ' + (targetElement === null || targetElement === void 0 ? void 0 : targetElement.ElementId) + ')', {
1263
+ code: 'WC_0012'
1264
+ }));
1032
1265
  } else {
1033
1266
  if (!this.doDisablePlanner2D) LOG.error(new DivaUtils.DivaError('Error initializing docking point between source element with id: ' + (sourceElement === null || sourceElement === void 0 ? void 0 : sourceElement.ElementId) + ' and target Element with id: ' + (targetElement === null || targetElement === void 0 ? void 0 : targetElement.ElementId) + '. SourceDPID: ' + dpInfo.id + '; targetDPID: ' + dpInfo.onDPID));
1034
1267
  }
1035
1268
  }
1036
1269
  }
1037
- _context5.next = 57;
1270
+ _context6.next = 58;
1038
1271
  break;
1039
1272
  case 54:
1040
- _context5.prev = 54;
1041
- _context5.t1 = _context5["catch"](42);
1042
- LOG.error(new DivaUtils.DivaError('Error initializing dockingPoints of element with elementID ' + elementsSortedbyPosNr[i].elementID, {
1043
- cause: _context5.t1,
1273
+ _context6.prev = 54;
1274
+ _context6.t1 = _context6["catch"](41);
1275
+ elementId = (_elementsForDocking$i = elementsForDocking[i]) === null || _elementsForDocking$i === void 0 ? void 0 : _elementsForDocking$i.elementID;
1276
+ LOG.error(new DivaUtils.DivaError('Error initializing dockingPoints of element with elementID ' + elementId, {
1277
+ cause: _context6.t1,
1044
1278
  code: 'WC_0012'
1045
1279
  }));
1046
- case 57:
1280
+ case 58:
1047
1281
  i++;
1048
- _context5.next = 41;
1282
+ _context6.next = 40;
1049
1283
  break;
1050
- case 60:
1051
- _context5.next = 113;
1284
+ case 61:
1285
+ _context6.next = 116;
1052
1286
  break;
1053
- case 62:
1287
+ case 63:
1054
1288
  LOG.debug('Initialize set Plan Data - old V1\n' + planData, 'DivaStandardPlanner initPlanner');
1055
- if (!(!planData.Sets || planData.Sets.length == 0 || !planData.Sets[0].Elements || planData.Sets[0].Elements.length == 0)) {
1056
- _context5.next = 65;
1289
+ legacySet = (_planData$Sets = planData.Sets) === null || _planData$Sets === void 0 ? void 0 : _planData$Sets[0];
1290
+ if (legacySet !== null && legacySet !== void 0 && (_legacySet$Elements = legacySet.Elements) !== null && _legacySet$Elements !== void 0 && _legacySet$Elements.length) {
1291
+ _context6.next = 67;
1057
1292
  break;
1058
1293
  }
1059
- return _context5.abrupt("return");
1060
- case 65:
1061
- //Init old Plannings - saved with the old planner
1062
- _jsonElements = planData.Sets[0].Elements;
1294
+ return _context6.abrupt("return");
1295
+ case 67:
1296
+ _jsonElements = legacySet.Elements;
1063
1297
  _elementsSortedbyPosNr = [];
1064
1298
  _accElements = []; //Zuerst initialisiere alle Elemente
1065
1299
  //Dann positioniere sie richtig
1066
1300
  i = 0;
1067
- case 69:
1301
+ case 71:
1068
1302
  if (!(i < _jsonElements.length)) {
1069
- _context5.next = 103;
1303
+ _context6.next = 105;
1070
1304
  break;
1071
1305
  }
1072
- _context5.prev = 70;
1306
+ _context6.prev = 72;
1073
1307
  _jsonElement2 = _jsonElements[i];
1074
- _catalogArticle = this.set.CatalogData.getCatalogArticleByArticleCodex(_jsonElement2.articleCodex || _jsonElement2.Codex);
1308
+ _catalogArticle = this.set.CatalogData.getCatalogArticleByArticleCodex((_saveElementArticleCo3 = saveElementArticleCodex(_jsonElement2)) !== null && _saveElementArticleCo3 !== void 0 ? _saveElementArticleCo3 : '');
1075
1309
  if (!(!_catalogArticle && (_jsonElement2$Accesso = _jsonElement2.AccessoireInitParams) !== null && _jsonElement2$Accesso !== void 0 && _jsonElement2$Accesso.RelatedToBasketID && !this.set.getSetState.onlyRunLogic)) {
1076
- _context5.next = 76;
1310
+ _context6.next = 78;
1077
1311
  break;
1078
1312
  }
1079
- LOG.error(new DivaUtils.DivaError('Error initializing element nr ' + i + ' in the Standard Web Planner. PlanData V2', {
1313
+ LOG.error(new DivaUtils.DivaError('Error initializing element nr ' + i + ' in the Standard Web Planner. PlanData V1', {
1080
1314
  code: 'WC_0012'
1081
1315
  }));
1082
- return _context5.abrupt("continue", 100);
1083
- case 76:
1316
+ return _context6.abrupt("continue", 102);
1317
+ case 78:
1084
1318
  basketID = _jsonElement2.BasketID;
1085
1319
  if (this.set.getElementId(basketID) == -1) this.set.setElementId(basketID, Number(_jsonElement2.ID));
1086
- elementId = this.set.getElementId(basketID);
1087
- _jsonElement2.elementId = elementId;
1088
- if (!(elementId == -1)) {
1089
- _context5.next = 83;
1320
+ _elementId = this.set.getElementId(basketID);
1321
+ _jsonElement2.elementId = _elementId;
1322
+ if (!(_elementId == -1)) {
1323
+ _context6.next = 85;
1090
1324
  break;
1091
1325
  }
1092
1326
  LOG.error(new DivaUtils.DivaError('Error when initializing planner. The elementID Was not saved in the article. ', {
1093
1327
  code: 'WC_0012'
1094
1328
  }));
1095
- return _context5.abrupt("continue", 100);
1096
- case 83:
1097
- _plannerElement = new index.PlannerElementData(this.set.getSetId(), basketID, elementId, DivaStandardPlanner.plannerType);
1098
- this.nextElementId = elementId + 1;
1329
+ return _context6.abrupt("continue", 102);
1330
+ case 85:
1331
+ _plannerElement = new index.PlannerElementData(this.set.getSetId(), basketID, _elementId, DivaStandardPlanner.plannerType);
1332
+ this.nextElementId = _elementId + 1;
1099
1333
  this.plannerElements.set(_plannerElement.ElementId, _plannerElement);
1100
1334
  _data = this.set.getPlannerData(_plannerElement.ElementId);
1101
1335
  _plannerElement.updatePlannerData(_data);
1102
1336
  if (this.doDisablePlanner2D) {
1103
- _context5.next = 91;
1337
+ _context6.next = 93;
1104
1338
  break;
1105
1339
  }
1106
- _context5.next = 91;
1340
+ _context6.next = 93;
1107
1341
  return PlannerHandler2D.handler2D.loadSVG(_plannerElement, this.set);
1108
- case 91:
1342
+ case 93:
1109
1343
  //Achtung die Pos Infos im alten Planer waren Zentrumskoordinaten!!! Nicht hinten oben.
1110
1344
  centerWorldPos = new index.Vector3(_jsonElement2.PosX, _jsonElement2.PosZ, _jsonElement2.PosY);
1111
1345
  _plannerElement.WorldPosCenter = new index.Vector3(this.plannerBoundingBox.WorldPos.x + centerWorldPos.x, this.plannerBoundingBox.WorldPos.y + centerWorldPos.y, this.plannerBoundingBox.WorldPos.z + centerWorldPos.z);
@@ -1115,72 +1349,77 @@ var DivaStandardPlanner = /*#__PURE__*/function () {
1115
1349
  if (_jsonElement2.PosNum.toString().indexOf('.') > 0) {
1116
1350
  parentPosNr = _jsonElement2.PosNum.toString().split('.')[0];
1117
1351
  accPosNr = _jsonElement2.PosNum.toString().split('.')[1];
1118
- _plannerElement.PosNr = parentPosNr;
1119
- _plannerElement.AccessoirePosNr = accPosNr;
1352
+ _plannerElement.PosNr = Number(parentPosNr);
1353
+ _plannerElement.AccessoirePosNr = Number(accPosNr);
1120
1354
  }
1121
1355
  } else {
1122
1356
  _elementsSortedbyPosNr[_jsonElement2.PosNum - 1] = _jsonElement2;
1123
1357
  _plannerElement.PosNr = _jsonElement2.PosNum;
1124
1358
  }
1125
- _context5.next = 100;
1359
+ _context6.next = 102;
1126
1360
  break;
1127
- case 97:
1128
- _context5.prev = 97;
1129
- _context5.t2 = _context5["catch"](70);
1361
+ case 99:
1362
+ _context6.prev = 99;
1363
+ _context6.t2 = _context6["catch"](72);
1130
1364
  LOG.error(new DivaUtils.DivaError('Error initializing element nr ' + i + ' in the Standard Web Planner - Plan Data old Planner', {
1131
- cause: _context5.t2,
1365
+ cause: _context6.t2,
1132
1366
  code: 'WC_0012'
1133
1367
  }));
1134
- case 100:
1368
+ case 102:
1135
1369
  i++;
1136
- _context5.next = 69;
1370
+ _context6.next = 71;
1137
1371
  break;
1138
- case 103:
1139
- _elementsSortedbyPosNr = _elementsSortedbyPosNr.concat(_accElements);
1140
- //Dann werden die DockingPoints durchgegangen und die jeweils richtigen müssen gesucht werden.
1141
- i = 0;
1142
1372
  case 105:
1143
- if (!(i < _elementsSortedbyPosNr.length)) {
1144
- _context5.next = 113;
1373
+ elementsForDockingV1 = [].concat(_toConsumableArray__default["default"](_elementsSortedbyPosNr.filter(function (e) {
1374
+ return e != null;
1375
+ })), _accElements);
1376
+ i = 0;
1377
+ case 107:
1378
+ if (!(i < elementsForDockingV1.length)) {
1379
+ _context6.next = 116;
1145
1380
  break;
1146
1381
  }
1147
- if (!(_elementsSortedbyPosNr[i].DP == null || _elementsSortedbyPosNr[i].DP.length == 0)) {
1148
- _context5.next = 108;
1382
+ _row = elementsForDockingV1[i];
1383
+ if (!(_row.DP == null || _row.DP.length == 0)) {
1384
+ _context6.next = 111;
1149
1385
  break;
1150
1386
  }
1151
- return _context5.abrupt("continue", 110);
1152
- case 108:
1153
- _DPsInfo = _elementsSortedbyPosNr[i].DP;
1387
+ return _context6.abrupt("continue", 113);
1388
+ case 111:
1389
+ _DPsInfo = _row.DP;
1154
1390
  for (j = 0; j < _DPsInfo.length; j++) {
1155
1391
  _dpInfo = _DPsInfo[j];
1156
1392
  if (_dpInfo.DP && _dpInfo.DP != '' && _dpInfo.onID && _dpInfo.onID != '') {
1157
- targetElementId = parseInt(_dpInfo.onID);
1393
+ targetElementId = parseInt(String(_dpInfo.onID));
1158
1394
  dpType = _dpInfo.DP;
1159
- curElement = this.plannerElements.get(_elementsSortedbyPosNr[i].elementId);
1395
+ curElement = _row.elementId != null ? this.plannerElements.get(_row.elementId) : undefined;
1160
1396
  _targetElement = (_this$plannerElements = this.plannerElements.get(targetElementId)) !== null && _this$plannerElements !== void 0 ? _this$plannerElements : this.getPlannerElementByIndex(targetElementId - 1);
1161
1397
  if (curElement && _targetElement) {
1162
1398
  PlannerHandler2D.dockingPointHandlerInst.initDockingPointRelationByArea(curElement, _targetElement, dpType);
1163
1399
  } else {
1164
- LOG.error(new DivaUtils.DivaError('Error initializing dockingPoints of element with elementID ' + _elementsSortedbyPosNr[i].elementId, {
1400
+ LOG.error(new DivaUtils.DivaError('Error initializing dockingPoints of element with elementID ' + _row.elementId, {
1165
1401
  code: 'WC_0012'
1166
1402
  }));
1167
1403
  }
1168
1404
  }
1169
1405
  }
1170
- case 110:
1406
+ case 113:
1171
1407
  i++;
1172
- _context5.next = 105;
1408
+ _context6.next = 107;
1173
1409
  break;
1174
- case 113:
1175
- this.updateAllElementsWorldPos();
1410
+ case 116:
1411
+ this.plannerElements.forEach(function (el) {
1412
+ if (!el.IsDockedAccessoire && (anchorElement == undefined || el.PosNr < anchorElement.PosNr)) anchorElement = el;
1413
+ });
1414
+ this.updateAllElementsWorldPos(undefined, anchorElement ? [anchorElement.ElementId] : undefined);
1176
1415
  this.updatePlannerPosNr();
1177
- case 115:
1416
+ case 119:
1178
1417
  case "end":
1179
- return _context5.stop();
1418
+ return _context6.stop();
1180
1419
  }
1181
- }, _callee5, this, [[11, 32], [42, 54], [70, 97]]);
1420
+ }, _callee6, this, [[10, 31], [41, 54], [72, 99]]);
1182
1421
  }));
1183
- function initPlanner(_x9) {
1422
+ function initPlanner(_x12) {
1184
1423
  return _initPlanner.apply(this, arguments);
1185
1424
  }
1186
1425
  return initPlanner;
@@ -1199,11 +1438,11 @@ var DivaStandardPlanner = /*#__PURE__*/function () {
1199
1438
  }, {
1200
1439
  key: "addPlannerElement",
1201
1440
  value: function () {
1202
- var _addPlannerElement = _asyncToGenerator__default["default"](/*#__PURE__*/_regeneratorRuntime__default["default"].mark(function _callee6(basketID, params) {
1441
+ var _addPlannerElement = _asyncToGenerator__default["default"](/*#__PURE__*/_regeneratorRuntime__default["default"].mark(function _callee7(basketID, params) {
1203
1442
  var _params$dockingPointI, _t$, _t$2, _t$3;
1204
1443
  var plannerElement, data, t;
1205
- return _regeneratorRuntime__default["default"].wrap(function _callee6$(_context6) {
1206
- while (1) switch (_context6.prev = _context6.next) {
1444
+ return _regeneratorRuntime__default["default"].wrap(function _callee7$(_context7) {
1445
+ while (1) switch (_context7.prev = _context7.next) {
1207
1446
  case 0:
1208
1447
  // _elementId: number, _setId: string, _basketId: string, elementInitProp: any, catalogElement: CatalogPlannerArticleData
1209
1448
  plannerElement = new index.PlannerElementData(this.set.getSetId(), basketID, this.nextElementId, DivaStandardPlanner.plannerType /*, this.set.getSetId(), basketID, elementInitProp, catalogElement*/);
@@ -1214,10 +1453,10 @@ var DivaStandardPlanner = /*#__PURE__*/function () {
1214
1453
  plannerElement.updatePlannerData(data);
1215
1454
  //Do load the svg
1216
1455
  if (this.doDisablePlanner2D) {
1217
- _context6.next = 9;
1456
+ _context7.next = 9;
1218
1457
  break;
1219
1458
  }
1220
- _context6.next = 9;
1459
+ _context7.next = 9;
1221
1460
  return PlannerHandler2D.handler2D.loadSVG(plannerElement, this.set);
1222
1461
  case 9:
1223
1462
  t = (_params$dockingPointI = params.dockingPointInfos) !== null && _params$dockingPointI !== void 0 ? _params$dockingPointI : [{
@@ -1225,49 +1464,49 @@ var DivaStandardPlanner = /*#__PURE__*/function () {
1225
1464
  targetElemIdToDock: params.targetElemIdToDock
1226
1465
  }];
1227
1466
  if (!(t !== null && t !== void 0 && (_t$ = t[0]) !== null && _t$ !== void 0 && _t$.targetElemIdToDock && t !== null && t !== void 0 && (_t$2 = t[0]) !== null && _t$2 !== void 0 && _t$2.targetDockingPointId)) {
1228
- _context6.next = 15;
1467
+ _context7.next = 15;
1229
1468
  break;
1230
1469
  }
1231
- _context6.next = 13;
1470
+ _context7.next = 13;
1232
1471
  return this.addElementToWorld(plannerElement, t);
1233
1472
  case 13:
1234
- _context6.next = 27;
1473
+ _context7.next = 27;
1235
1474
  break;
1236
1475
  case 15:
1237
1476
  if (!(t !== null && t !== void 0 && (_t$3 = t[0]) !== null && _t$3 !== void 0 && _t$3.targetElemIdToDock)) {
1238
- _context6.next = 20;
1477
+ _context7.next = 20;
1239
1478
  break;
1240
1479
  }
1241
- _context6.next = 18;
1480
+ _context7.next = 18;
1242
1481
  return this.addElementToWorld(plannerElement, t);
1243
1482
  case 18:
1244
- _context6.next = 27;
1483
+ _context7.next = 27;
1245
1484
  break;
1246
1485
  case 20:
1247
1486
  if (!params.oldPlannerTransform) {
1248
- _context6.next = 25;
1487
+ _context7.next = 25;
1249
1488
  break;
1250
1489
  }
1251
- _context6.next = 23;
1490
+ _context7.next = 23;
1252
1491
  return this.addElementToWorld(plannerElement, undefined, undefined, undefined, undefined, {
1253
1492
  forceSetToTrans: true,
1254
1493
  transform: params.oldPlannerTransform
1255
1494
  });
1256
1495
  case 23:
1257
- _context6.next = 27;
1496
+ _context7.next = 27;
1258
1497
  break;
1259
1498
  case 25:
1260
- _context6.next = 27;
1499
+ _context7.next = 27;
1261
1500
  return this.addElementToWorld(plannerElement);
1262
1501
  case 27:
1263
1502
  this.updatePlannerBoundingBox();
1264
1503
  case 28:
1265
1504
  case "end":
1266
- return _context6.stop();
1505
+ return _context7.stop();
1267
1506
  }
1268
- }, _callee6, this);
1507
+ }, _callee7, this);
1269
1508
  }));
1270
- function addPlannerElement(_x10, _x11) {
1509
+ function addPlannerElement(_x13, _x14) {
1271
1510
  return _addPlannerElement.apply(this, arguments);
1272
1511
  }
1273
1512
  return addPlannerElement;
@@ -1286,34 +1525,68 @@ var DivaStandardPlanner = /*#__PURE__*/function () {
1286
1525
  }, {
1287
1526
  key: "copyPlannerElement",
1288
1527
  value: (function () {
1289
- var _copyPlannerElement = _asyncToGenerator__default["default"](/*#__PURE__*/_regeneratorRuntime__default["default"].mark(function _callee7(articleCopyRelation, copyInfo) {
1290
- var articlesToLoad, i;
1291
- return _regeneratorRuntime__default["default"].wrap(function _callee7$(_context7) {
1292
- while (1) switch (_context7.prev = _context7.next) {
1528
+ var _copyPlannerElement = _asyncToGenerator__default["default"](/*#__PURE__*/_regeneratorRuntime__default["default"].mark(function _callee8(articleCopyRelation, copyInfo) {
1529
+ var i, _copyInfo$copyIndex, rel, dirX, sourceElement, targetDP;
1530
+ return _regeneratorRuntime__default["default"].wrap(function _callee8$(_context8) {
1531
+ while (1) switch (_context8.prev = _context8.next) {
1293
1532
  case 0:
1294
- articlesToLoad = [];
1295
- articleCopyRelation.forEach(function (rel) {
1296
- if (copyInfo == undefined) articlesToLoad.push(rel.value);
1297
- });
1298
1533
  i = 0;
1299
- case 3:
1300
- if (!(i < articlesToLoad.length)) {
1301
- _context7.next = 9;
1534
+ case 1:
1535
+ if (!(i < articleCopyRelation.length)) {
1536
+ _context8.next = 24;
1302
1537
  break;
1303
1538
  }
1304
- _context7.next = 6;
1305
- return this.addPlannerElement(articlesToLoad[i], {});
1539
+ rel = articleCopyRelation[i];
1540
+ if (!(copyInfo == undefined)) {
1541
+ _context8.next = 7;
1542
+ break;
1543
+ }
1544
+ _context8.next = 6;
1545
+ return this.addPlannerElement(rel.value, {});
1306
1546
  case 6:
1547
+ return _context8.abrupt("continue", 21);
1548
+ case 7:
1549
+ //Directional copy (copyIndex.x = -1 left / 1 right): dock the copy at the source element's free AVL/AVR
1550
+ dirX = (_copyInfo$copyIndex = copyInfo.copyIndex) === null || _copyInfo$copyIndex === void 0 ? void 0 : _copyInfo$copyIndex.x;
1551
+ if (!(dirX != -1 && dirX != 1)) {
1552
+ _context8.next = 12;
1553
+ break;
1554
+ }
1555
+ _context8.next = 11;
1556
+ return this.addPlannerElement(rel.value, {});
1557
+ case 11:
1558
+ return _context8.abrupt("continue", 21);
1559
+ case 12:
1560
+ sourceElement = this.plannerElements.get(rel.key);
1561
+ targetDP = sourceElement === null || sourceElement === void 0 ? void 0 : sourceElement.getFreeDockingPointsByType(dirX == -1 ? 'AVL' : 'AVR').find(function (dp) {
1562
+ return !dp.IsDisabled;
1563
+ });
1564
+ if (!(sourceElement && targetDP)) {
1565
+ _context8.next = 19;
1566
+ break;
1567
+ }
1568
+ _context8.next = 17;
1569
+ return this.addPlannerElement(rel.value, {
1570
+ targetElemIdToDock: sourceElement.ElementId,
1571
+ targetDockingPointId: targetDP.DpId
1572
+ });
1573
+ case 17:
1574
+ _context8.next = 21;
1575
+ break;
1576
+ case 19:
1577
+ _context8.next = 21;
1578
+ return this.addPlannerElement(rel.value, {});
1579
+ case 21:
1307
1580
  i++;
1308
- _context7.next = 3;
1581
+ _context8.next = 1;
1309
1582
  break;
1310
- case 9:
1583
+ case 24:
1311
1584
  case "end":
1312
- return _context7.stop();
1585
+ return _context8.stop();
1313
1586
  }
1314
- }, _callee7, this);
1587
+ }, _callee8, this);
1315
1588
  }));
1316
- function copyPlannerElement(_x12, _x13) {
1589
+ function copyPlannerElement(_x15, _x16) {
1317
1590
  return _copyPlannerElement.apply(this, arguments);
1318
1591
  }
1319
1592
  return copyPlannerElement;
@@ -1332,7 +1605,8 @@ var DivaStandardPlanner = /*#__PURE__*/function () {
1332
1605
  }, {
1333
1606
  key: "getPlannerElementsInfluencedByCopy",
1334
1607
  value: function getPlannerElementsInfluencedByCopy(elementId, copyInfo) {
1335
- if (!copyInfo || copyInfo.copyType != 'BoxPlanner_backside') throw new Error('copyType needs to be BoxPlanner_backside here');
1608
+ //STD = directional AVL/AVR copy of a single element; only the element itself is influenced
1609
+ if (!copyInfo || copyInfo.copyType != 'BoxPlanner_backside' && copyInfo.copyType != 'STD') throw new Error('copyType needs to be BoxPlanner_backside or STD here');
1336
1610
  if (this.plannerElements.has(elementId)) return [elementId];
1337
1611
  return [];
1338
1612
  }
@@ -1345,19 +1619,19 @@ var DivaStandardPlanner = /*#__PURE__*/function () {
1345
1619
  }, {
1346
1620
  key: "deletePlannerElement",
1347
1621
  value: (function () {
1348
- var _deletePlannerElement = _asyncToGenerator__default["default"](/*#__PURE__*/_regeneratorRuntime__default["default"].mark(function _callee8(elementId, autoCorrectAVL_AVR) {
1622
+ var _deletePlannerElement = _asyncToGenerator__default["default"](/*#__PURE__*/_regeneratorRuntime__default["default"].mark(function _callee9(elementId, autoCorrectAVL_AVR) {
1349
1623
  var plannerElement, parent, prevPosNum, nextPosNum, newSelElemIdPrev, newSelElemIdNext, endForEach, removeDockingRelation, avlVec, avrVec, elementLeft, elementRight, avrElementLeft, avlElementRight, transform;
1350
- return _regeneratorRuntime__default["default"].wrap(function _callee8$(_context8) {
1351
- while (1) switch (_context8.prev = _context8.next) {
1624
+ return _regeneratorRuntime__default["default"].wrap(function _callee9$(_context9) {
1625
+ while (1) switch (_context9.prev = _context9.next) {
1352
1626
  case 0:
1353
- _context8.next = 2;
1627
+ _context9.next = 2;
1354
1628
  return DivaUtils__default["default"].Sleep(1);
1355
1629
  case 2:
1356
1630
  if (this.plannerElements.has(elementId)) {
1357
- _context8.next = 4;
1631
+ _context9.next = 4;
1358
1632
  break;
1359
1633
  }
1360
- return _context8.abrupt("return", {});
1634
+ return _context9.abrupt("return", {});
1361
1635
  case 4:
1362
1636
  plannerElement = this.plannerElements.get(elementId);
1363
1637
  parent = this.getParentElement(plannerElement);
@@ -1414,17 +1688,17 @@ var DivaStandardPlanner = /*#__PURE__*/function () {
1414
1688
  this.updatePlannerPosNr();
1415
1689
  this.checkCollision(false, plannerElement.getElementId());
1416
1690
  this.updatePlannerBoundingBox();
1417
- return _context8.abrupt("return", {
1691
+ return _context9.abrupt("return", {
1418
1692
  newElementToSelect: newSelElemIdPrev >= 0 ? newSelElemIdPrev : newSelElemIdNext >= 0 ? newSelElemIdNext : undefined,
1419
1693
  transform: transform
1420
1694
  });
1421
1695
  case 24:
1422
1696
  case "end":
1423
- return _context8.stop();
1697
+ return _context9.stop();
1424
1698
  }
1425
- }, _callee8, this);
1699
+ }, _callee9, this);
1426
1700
  }));
1427
- function deletePlannerElement(_x14, _x15) {
1701
+ function deletePlannerElement(_x17, _x18) {
1428
1702
  return _deletePlannerElement.apply(this, arguments);
1429
1703
  }
1430
1704
  return deletePlannerElement;
@@ -1516,8 +1790,8 @@ var DivaStandardPlanner = /*#__PURE__*/function () {
1516
1790
  element.SetPosNr = startSetPosNr + element.PosNr - 1;
1517
1791
  this.set.setPosNr(element.ElementId, element.getPosNr());
1518
1792
  }
1519
- for (var _i3 = 0; _i3 < elements.length; _i3++) {
1520
- if (!elements[_i3].IsAccessoire) this.set.giveAccNewPosNrByBasketId(elements[_i3].getBasketId());
1793
+ for (var _i4 = 0; _i4 < elements.length; _i4++) {
1794
+ if (!elements[_i4].IsAccessoire) this.set.giveAccNewPosNrByBasketId(elements[_i4].getBasketId());
1521
1795
  }
1522
1796
  return elements.length;
1523
1797
  }
@@ -1534,12 +1808,12 @@ var DivaStandardPlanner = /*#__PURE__*/function () {
1534
1808
  */
1535
1809
  }, {
1536
1810
  key: "updatePlannerTrans",
1537
- value: function updatePlannerTrans(elementId, deltaMove, deltaAngleDeg, rotCorrection, transState, autoDockingDistance) {
1811
+ value: function updatePlannerTrans(elementId, deltaMove, deltaAngleDeg, rotCorrection, transState, autoDockingDistance, turningPoint) {
1538
1812
  var _this3 = this;
1539
1813
  var updateConfig = false;
1540
1814
  if (this.plannerElements.has(elementId)) {
1541
1815
  var plannerElement = this.plannerElements.get(elementId);
1542
- plannerElement === null || plannerElement === void 0 || plannerElement.updateDeltaTrans(deltaMove, deltaAngleDeg, rotCorrection, transState == 'END');
1816
+ plannerElement === null || plannerElement === void 0 || plannerElement.updateDeltaTrans(deltaMove, deltaAngleDeg, rotCorrection, transState == 'END', turningPoint);
1543
1817
  if (transState == 'START') {
1544
1818
  if (plannerElement) {
1545
1819
  var dpsToUndock = ['AVR', 'AVL'];
@@ -1722,8 +1996,8 @@ var DivaStandardPlanner = /*#__PURE__*/function () {
1722
1996
  }
1723
1997
  var shelfPlannerElements = _this5.set.getShelfPlannerData(elemId);
1724
1998
  if (shelfPlannerElements) {
1725
- for (var _i4 = 0; _i4 < shelfPlannerElements.length; _i4++) {
1726
- var accessorire = shelfPlannerElements[_i4];
1999
+ for (var _i5 = 0; _i5 < shelfPlannerElements.length; _i5++) {
2000
+ var accessorire = shelfPlannerElements[_i5];
1727
2001
  var shelfConfig = _this5.set.getShelfPlannerConfigData(accessorire.basketId).config;
1728
2002
  var _accElements2 = [];
1729
2003
  if (shelfConfig.accs && shelfConfig.accs.length > 0) {