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