@crystaldesign/web-planner-logic 25.14.0-beta.9 → 25.15.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 (79) hide show
  1. package/build/cjs/{DivaBoxPlanner-837fcb6c.js → DivaBoxPlanner-8c80d525.js} +658 -327
  2. package/build/cjs/{DivaStandardPlanner-9975547f.js → DivaStandardPlanner-1875d1fe.js} +98 -88
  3. package/build/cjs/{DoorPlanner-2bee68c5.js → DoorPlanner-aeaf5721.js} +1 -1
  4. package/build/cjs/{Host3DSignalR-61765978.js → Host3DSignalR-92aa7960.js} +1 -1
  5. package/build/cjs/{LiviqueWWSHandler-3c10b4c9.js → LiviqueWWSHandler-50901254.js} +1 -1
  6. package/build/cjs/{PfisterWWSHandler-8e0b1e2c.js → PfisterWWSHandler-32d47418.js} +1 -1
  7. package/build/cjs/{PlannerHandler2D-d59d9a25.js → PlannerHandler2D-a67e13f7.js} +2 -2
  8. package/build/cjs/{SeriousBasketHandler-2e99b2f1.js → SeriousBasketHandler-fdc11dbf.js} +1 -1
  9. package/build/cjs/{ShelfPlanner-3e01dfce.js → ShelfPlanner-0f29fd7b.js} +1 -1
  10. package/build/cjs/{StandardWWSHandler-9f33d803.js → StandardWWSHandler-db3c3fef.js} +1 -1
  11. package/build/cjs/{index-1c168106.js → index-6e991f69.js} +286 -202
  12. package/build/cjs/index.js +1 -3
  13. package/build/esm/{DivaBoxPlanner-d293f020.js → DivaBoxPlanner-850868bf.js} +657 -327
  14. package/build/esm/{DivaStandardPlanner-690b22b7.js → DivaStandardPlanner-476ab33b.js} +98 -88
  15. package/build/esm/{DoorPlanner-d93d77bc.js → DoorPlanner-746f3540.js} +1 -1
  16. package/build/esm/{Host3DSignalR-9b4a43f1.js → Host3DSignalR-6859f807.js} +1 -1
  17. package/build/esm/{LiviqueWWSHandler-33874664.js → LiviqueWWSHandler-48646dbb.js} +1 -1
  18. package/build/esm/{PfisterWWSHandler-106d1de5.js → PfisterWWSHandler-376b9b2b.js} +1 -1
  19. package/build/esm/{PlannerHandler2D-1ae53adb.js → PlannerHandler2D-1e940f9f.js} +2 -2
  20. package/build/esm/{SeriousBasketHandler-db56b22c.js → SeriousBasketHandler-07a052e1.js} +1 -1
  21. package/build/esm/{ShelfPlanner-82f5503b.js → ShelfPlanner-fc0c0a4a.js} +1 -1
  22. package/build/esm/{StandardWWSHandler-09b93069.js → StandardWWSHandler-036af1a0.js} +1 -1
  23. package/build/esm/{index-abafa975.js → index-b7a3a897.js} +287 -201
  24. package/build/esm/index.js +1 -1
  25. package/build/types/web-planner-logic/src/index.d.ts +0 -1
  26. package/build/types/web-planner-logic/src/index.d.ts.map +1 -1
  27. package/build/types/web-planner-logic/src/interface/API/AiImageResult.d.ts +0 -2
  28. package/build/types/web-planner-logic/src/interface/API/AiImageResult.d.ts.map +1 -1
  29. package/build/types/web-planner-logic/src/interface/API/Checkout.d.ts +1 -0
  30. package/build/types/web-planner-logic/src/interface/API/Checkout.d.ts.map +1 -1
  31. package/build/types/web-planner-logic/src/interface/API/ViewConfigDataType.d.ts +1 -0
  32. package/build/types/web-planner-logic/src/interface/API/ViewConfigDataType.d.ts.map +1 -1
  33. package/build/types/web-planner-logic/src/interface/AdditionalModelInfos.d.ts +1 -0
  34. package/build/types/web-planner-logic/src/interface/AdditionalModelInfos.d.ts.map +1 -1
  35. package/build/types/web-planner-logic/src/interface/Articles/CatalogArticleDataType.d.ts +5 -0
  36. package/build/types/web-planner-logic/src/interface/Articles/CatalogArticleDataType.d.ts.map +1 -1
  37. package/build/types/web-planner-logic/src/interface/CoreTypes/index.d.ts +1 -1
  38. package/build/types/web-planner-logic/src/interface/CoreTypes/index.d.ts.map +1 -1
  39. package/build/types/web-planner-logic/src/interface/DivaCatalogDataType.d.ts +2 -0
  40. package/build/types/web-planner-logic/src/interface/DivaCatalogDataType.d.ts.map +1 -1
  41. package/build/types/web-planner-logic/src/interface/IDM/ArticleApi.d.ts +2 -0
  42. package/build/types/web-planner-logic/src/interface/IDM/ArticleApi.d.ts.map +1 -1
  43. package/build/types/web-planner-logic/src/interface/ReturnTypes/index.d.ts +1 -0
  44. package/build/types/web-planner-logic/src/interface/ReturnTypes/index.d.ts.map +1 -1
  45. package/build/types/web-planner-logic/src/interface/ViewTypes/index.d.ts +0 -1
  46. package/build/types/web-planner-logic/src/interface/ViewTypes/index.d.ts.map +1 -1
  47. package/build/types/web-planner-logic/src/interface/webPlannerParams/WebPlannerParamsType.d.ts +1 -0
  48. package/build/types/web-planner-logic/src/interface/webPlannerParams/WebPlannerParamsType.d.ts.map +1 -1
  49. package/build/types/web-planner-logic/src/logic/Article/Engine/IDMArticleEngine.d.ts.map +1 -1
  50. package/build/types/web-planner-logic/src/logic/Basket/DivaBasketHandler.d.ts +2 -1
  51. package/build/types/web-planner-logic/src/logic/Basket/DivaBasketHandler.d.ts.map +1 -1
  52. package/build/types/web-planner-logic/src/logic/DivaWebPlanner.d.ts +4 -2
  53. package/build/types/web-planner-logic/src/logic/DivaWebPlanner.d.ts.map +1 -1
  54. package/build/types/web-planner-logic/src/logic/Planner/BoxPlanner/BoxPlannerGrid.d.ts +4 -4
  55. package/build/types/web-planner-logic/src/logic/Planner/BoxPlanner/BoxPlannerGrid.d.ts.map +1 -1
  56. package/build/types/web-planner-logic/src/logic/Planner/BoxPlanner/ConstructionRulesHandler.d.ts +1 -0
  57. package/build/types/web-planner-logic/src/logic/Planner/BoxPlanner/ConstructionRulesHandler.d.ts.map +1 -1
  58. package/build/types/web-planner-logic/src/logic/Planner/BoxPlanner/DivaBoxPlanner.d.ts +4 -1
  59. package/build/types/web-planner-logic/src/logic/Planner/BoxPlanner/DivaBoxPlanner.d.ts.map +1 -1
  60. package/build/types/web-planner-logic/src/logic/Planner/DivaPlannerHandler.d.ts +4 -1
  61. package/build/types/web-planner-logic/src/logic/Planner/DivaPlannerHandler.d.ts.map +1 -1
  62. package/build/types/web-planner-logic/src/logic/Planner/DivaStandardPlanner.d.ts +4 -1
  63. package/build/types/web-planner-logic/src/logic/Planner/DivaStandardPlanner.d.ts.map +1 -1
  64. package/build/types/web-planner-logic/src/logic/Planner/Rendering/types.d.ts +1 -1
  65. package/build/types/web-planner-logic/src/logic/Planner/Rendering/types.d.ts.map +1 -1
  66. package/build/types/web-planner-logic/src/logic/Set/DivaSetHandler.d.ts.map +1 -1
  67. package/build/types/web-planner-logic/src/model/Articles/Article/CatalogArticleData.d.ts +7 -1
  68. package/build/types/web-planner-logic/src/model/Articles/Article/CatalogArticleData.d.ts.map +1 -1
  69. package/build/types/web-planner-logic/src/model/Articles/Article/DivaCatalogArticle.d.ts.map +1 -1
  70. package/build/types/web-planner-logic/src/model/Catalog/CatalogData.d.ts +1 -0
  71. package/build/types/web-planner-logic/src/model/Catalog/CatalogData.d.ts.map +1 -1
  72. package/build/types/web-planner-logic/src/model/Catalog/DivaCatalogData.d.ts.map +1 -1
  73. package/build/types/web-planner-logic/src/model/Catalog/IDMCatalogData.d.ts.map +1 -1
  74. package/build/types/web-planner-logic/src/model/Options/ArticleOptionData.d.ts.map +1 -1
  75. package/build/types/web-planner-logic/src/test/scripts/create_renderorder.d.ts +1 -1
  76. package/build/types/web-planner-logic/src/test/scripts/create_renderorder.d.ts.map +1 -1
  77. package/build/types/web-planner-logic/src/test/scripts/getOrigProductId.d.ts +1 -1
  78. package/build/types/web-planner-logic/src/test/scripts/getOrigProductId.d.ts.map +1 -1
  79. package/package.json +2 -2
@@ -5,11 +5,11 @@ var _classCallCheck = require('@babel/runtime/helpers/classCallCheck');
5
5
  var _createClass = require('@babel/runtime/helpers/createClass');
6
6
  var _defineProperty = require('@babel/runtime/helpers/defineProperty');
7
7
  var _regeneratorRuntime = require('@babel/runtime/regenerator');
8
- var index = require('./index-1c168106.js');
8
+ var index = require('./index-6e991f69.js');
9
9
  var DivaUtils = require('@crystaldesign/diva-utils');
10
10
  var _toConsumableArray = require('@babel/runtime/helpers/toConsumableArray');
11
- var PlannerHandler2D = require('./PlannerHandler2D-d59d9a25.js');
12
- require('@babel/runtime/helpers/slicedToArray');
11
+ var _slicedToArray = require('@babel/runtime/helpers/slicedToArray');
12
+ var PlannerHandler2D = require('./PlannerHandler2D-a67e13f7.js');
13
13
  require('@babel/runtime/helpers/objectWithoutProperties');
14
14
  require('axios');
15
15
  require('@crystaldesign/basket-model');
@@ -28,6 +28,7 @@ var _defineProperty__default = /*#__PURE__*/_interopDefaultLegacy(_definePropert
28
28
  var _regeneratorRuntime__default = /*#__PURE__*/_interopDefaultLegacy(_regeneratorRuntime);
29
29
  var DivaUtils__default = /*#__PURE__*/_interopDefaultLegacy(DivaUtils);
30
30
  var _toConsumableArray__default = /*#__PURE__*/_interopDefaultLegacy(_toConsumableArray);
31
+ var _slicedToArray__default = /*#__PURE__*/_interopDefaultLegacy(_slicedToArray);
31
32
 
32
33
  var LOG$3 = DivaUtils__default["default"].initLog('Planner', 'WEB-PLANNER-LOGIC');
33
34
  var BoxPlannerPartlistHelper = /*#__PURE__*/function () {
@@ -1909,15 +1910,27 @@ var ConstructionRulesHandler = /*#__PURE__*/function () {
1909
1910
  }, {
1910
1911
  key: "evalRule",
1911
1912
  value: function evalRule(elementId, rule, optionHandler) {
1912
- var allValid = true;
1913
+ var evaluation = true;
1913
1914
  var splittedAND = rule.split('&');
1914
1915
  for (var andNum = 0; andNum < splittedAND.length; andNum++) {
1915
- var opt = splittedAND[andNum].split('=')[0];
1916
- var opv = splittedAND[andNum].split('=')[1];
1917
- var curOptVal = this.getOptionVal(elementId, opt, optionHandler);
1918
- if (curOptVal && curOptVal != opv) allValid = false;
1916
+ var splittedOr = splittedAND[andNum].split('|');
1917
+ if (splittedOr.length == 1) {
1918
+ var opt = splittedAND[andNum].split('=')[0];
1919
+ var opv = splittedAND[andNum].split('=')[1];
1920
+ var curOptVal = this.getOptionVal(elementId, opt, optionHandler);
1921
+ if (curOptVal && curOptVal != opv) evaluation = false;
1922
+ continue;
1923
+ }
1924
+ var orValuation = false;
1925
+ for (var orNum = 0; orNum < splittedOr.length; orNum++) {
1926
+ var opt = splittedOr[orNum].split('=')[0];
1927
+ var opv = splittedOr[orNum].split('=')[1];
1928
+ var _curOptVal = this.getOptionVal(elementId, opt, optionHandler);
1929
+ if (_curOptVal && _curOptVal == opv) orValuation = true;
1930
+ }
1931
+ if (evaluation) evaluation = orValuation;
1919
1932
  }
1920
- return allValid;
1933
+ return evaluation;
1921
1934
  }
1922
1935
  }, {
1923
1936
  key: "setOptionDoShow",
@@ -1971,6 +1984,18 @@ var ConstructionRulesHandler = /*#__PURE__*/function () {
1971
1984
  if (!this.hideOptionsForConstruction.has(elementId)) this.hideOptionsForConstruction.set(elementId, []);
1972
1985
  (_this$hideOptionsForC2 = this.hideOptionsForConstruction.get(elementId)) === null || _this$hideOptionsForC2 === void 0 || _this$hideOptionsForC2.push(option);
1973
1986
  }
1987
+ }, {
1988
+ key: "setOptionDoCustom",
1989
+ value: function setOptionDoCustom(elementId, option, val, optionHandler) {
1990
+ var _optionHandler$get4, _this$hideOptionsForC3;
1991
+ // LOG.log("Update Box Planner Logic. SetOptionDoHide: elementId: " + elementId + "; Option: " + option);
1992
+ var curOptVisibilityInfo = this.constructionRules.optionsVisibilityInfo[option];
1993
+ if (!curOptVisibilityInfo) return;
1994
+ if (!optionHandler.has(elementId)) optionHandler.set(elementId, new Map());
1995
+ (_optionHandler$get4 = optionHandler.get(elementId)) === null || _optionHandler$get4 === void 0 || _optionHandler$get4.set(option, curOptVisibilityInfo[val]);
1996
+ if (!this.hideOptionsForConstruction.has(elementId)) this.hideOptionsForConstruction.set(elementId, []);
1997
+ (_this$hideOptionsForC3 = this.hideOptionsForConstruction.get(elementId)) === null || _this$hideOptionsForC3 === void 0 || _this$hideOptionsForC3.push(option);
1998
+ }
1974
1999
 
1975
2000
  //Returns all
1976
2001
  }, {
@@ -2011,7 +2036,7 @@ var ConstructionRulesHandler = /*#__PURE__*/function () {
2011
2036
  }
2012
2037
  var allElementIds = boxPlannerGrid.getAllElementIdsInGrid(); //run through front an backside grid
2013
2038
  for (var i = 0; i < allElementIds.length; i++) {
2014
- var _optionHandler$get4;
2039
+ var _optionHandler$get5;
2015
2040
  if (this.hideOptionsForConstruction.has(allElementIds[i]) && this.hideOptionsForConstruction.get(allElementIds[i]).length > 0) {
2016
2041
  while (this.hideOptionsForConstruction.get(allElementIds[i]).length > 0) {
2017
2042
  var optName = this.hideOptionsForConstruction.get(allElementIds[i])[0];
@@ -2100,7 +2125,7 @@ var ConstructionRulesHandler = /*#__PURE__*/function () {
2100
2125
 
2101
2126
  ///Add debug input
2102
2127
  if (!optionHandler.has(allElementIds[i])) optionHandler.set(allElementIds[i], new Map());
2103
- (_optionHandler$get4 = optionHandler.get(allElementIds[i])) === null || _optionHandler$get4 === void 0 || _optionHandler$get4.set('DEBUG', boxPlannerGrid.getElementById(allElementIds[i]).getPosNr() + '');
2128
+ (_optionHandler$get5 = optionHandler.get(allElementIds[i])) === null || _optionHandler$get5 === void 0 || _optionHandler$get5.set('DEBUG', boxPlannerGrid.getElementById(allElementIds[i]).getPosNr() + '');
2104
2129
  if (opvToReset.length > 0) {
2105
2130
  for (var r = 0; r < opvToReset.length; r++) {
2106
2131
  var articleOPV = this.getOptionVal(allElementIds[i], opvToReset[r].opt, optionHandler);
@@ -2380,6 +2405,7 @@ var ConstructionRulesHandler = /*#__PURE__*/function () {
2380
2405
  key: "correctSimpleOpt",
2381
2406
  value: function correctSimpleOpt(xIndex, yIndex, boxPlannerGrid, optionHandler, fromBackside) {
2382
2407
  var curElement = boxPlannerGrid.getPlannerElementAtGridPos(xIndex, yIndex, fromBackside);
2408
+ if (!curElement) return;
2383
2409
  //Schauen ob Element top Element hat.
2384
2410
  if (this.constructionRules.defaultConstructionRules.TOP) {
2385
2411
  var hasTopElement = boxPlannerGrid.getElementHasTopElement(curElement.ElementId);
@@ -2595,23 +2621,22 @@ var ConstructionRulesHandler = /*#__PURE__*/function () {
2595
2621
  }
2596
2622
  }, {
2597
2623
  key: "validateDimensionRule",
2598
- value: function validateDimensionRule(dimRule, boxPlannerSize) {
2624
+ value: function validateDimensionRule(dimension, dimensionLimit, boxPlannerSize, higherLimit, lowerLimit) {
2599
2625
  var isOver = false;
2600
2626
  var isEqual = false;
2601
- if (dimRule.dimension.toLowerCase() == 'height' && boxPlannerSize.y > dimRule.dimensionLimit) isOver = true;
2602
- if (dimRule.dimension.toLowerCase() == 'height' && boxPlannerSize.y == dimRule.dimensionLimit) isEqual = true;
2603
- if (dimRule.dimension.toLowerCase() == 'width' && boxPlannerSize.x > dimRule.dimensionLimit) isOver = true;
2604
- if (dimRule.dimension.toLowerCase() == 'width' && boxPlannerSize.x == dimRule.dimensionLimit) isEqual = true;
2605
- if (dimRule.dimension.toLowerCase() == 'depth' && boxPlannerSize.z > dimRule.dimensionLimit) isOver = true;
2606
- if (dimRule.dimension.toLowerCase() == 'depth' && boxPlannerSize.z == dimRule.dimensionLimit) isEqual = true;
2627
+ if (dimension.toLowerCase() == 'height' && boxPlannerSize.y > dimensionLimit) isOver = true;
2628
+ if (dimension.toLowerCase() == 'height' && boxPlannerSize.y == dimensionLimit) isEqual = true;
2629
+ if (dimension.toLowerCase() == 'width' && boxPlannerSize.x > dimensionLimit) isOver = true;
2630
+ if (dimension.toLowerCase() == 'width' && boxPlannerSize.x == dimensionLimit) isEqual = true;
2631
+ if (dimension.toLowerCase() == 'depth' && boxPlannerSize.z > dimensionLimit) isOver = true;
2632
+ if (dimension.toLowerCase() == 'depth' && boxPlannerSize.z == dimensionLimit) isEqual = true;
2607
2633
  if (isOver) {
2608
- if (dimRule.higherLimit.toLowerCase() == 'doshow') return true;else if (dimRule.higherLimit.toLowerCase() == 'dohide') return false;
2634
+ return higherLimit;
2609
2635
  } else if (isEqual) {
2610
- return true;
2636
+ return higherLimit;
2611
2637
  } else {
2612
- if (dimRule.lowerLimit.toLowerCase() == 'doshow') return true;else if (dimRule.lowerLimit.toLowerCase() == 'dohide') return false;
2638
+ return lowerLimit;
2613
2639
  }
2614
- return false;
2615
2640
  }
2616
2641
 
2617
2642
  /*
@@ -2622,42 +2647,38 @@ var ConstructionRulesHandler = /*#__PURE__*/function () {
2622
2647
  key: "correctOverHangingElement",
2623
2648
  value: function correctOverHangingElement(changedElementId, boxPlannerGrid, optionHandler, changedOPTs) {
2624
2649
  var _this2 = this;
2625
- if (!changedOPTs) return;
2626
- var _loop = function _loop() {
2627
- var elements = boxPlannerGrid.getAllElementsInColumn(columndIdx, false, false); // from bottom to top
2628
- var lastElement = null;
2629
- var changedElementIdx = elements.findIndex(function (e) {
2630
- return e.ElementId == changedElementId;
2631
- });
2632
- elements.forEach(function (element, idx) {
2633
- var _lastElement$Width, _element$Width, _lastElement$Depth, _element$Depth;
2634
- if (!lastElement) {
2635
- lastElement = element;
2636
- return;
2637
- }
2638
- if (((_lastElement$Width = lastElement.Width) !== null && _lastElement$Width !== void 0 ? _lastElement$Width : 0) > ((_element$Width = element.Width) !== null && _element$Width !== void 0 ? _element$Width : 0)) {
2639
- // is either the above wider opt or the one under and smaller
2640
- var t = Object.entries(changedOPTs);
2641
- var opt = t[0][0];
2642
- var opv = t[0][1];
2643
- if (idx < changedElementIdx) {
2644
- _this2.setOptionValue(element.ElementId, opt, opv, optionHandler);
2645
- } else {
2646
- _this2.setOptionValue(element.ElementId, opt, opv, optionHandler);
2647
- }
2648
- }
2649
- if (((_lastElement$Depth = lastElement.Depth) !== null && _lastElement$Depth !== void 0 ? _lastElement$Depth : 0) > ((_element$Depth = element.Depth) !== null && _element$Depth !== void 0 ? _element$Depth : 0)) {
2650
- var _t = Object.entries(changedOPTs); // should be the new wider width that causes the overhanging
2651
- var _opt = _t[0][0];
2652
- var _opv2 = _t[0][1];
2653
- _this2.setOptionValue(element.ElementId, _opt, _opv2, optionHandler);
2654
- }
2655
- lastElement = element;
2656
- });
2657
- };
2658
- for (var columndIdx = 0; columndIdx < boxPlannerGrid.getColumnCount(); columndIdx++) {
2659
- _loop();
2660
- }
2650
+ if (!changedOPTs || !changedElementId) return;
2651
+ var startIdx = boxPlannerGrid.getCellsInGridByElementId(changedElementId).startColIndex;
2652
+ var elements = boxPlannerGrid.getAllElementsInColumn(startIdx, false, true); // from bottom to top
2653
+ var changedElementIdx = elements.findIndex(function (e) {
2654
+ return e.ElementId == changedElementId;
2655
+ });
2656
+ var changedElement = elements[changedElementIdx];
2657
+ if (!changedElement) return; // nothing changed in this row
2658
+ var t = Object.entries(changedOPTs);
2659
+ var opt = t[0][0];
2660
+ var opv = t[0][1];
2661
+ elements.forEach(function (element, idx) {
2662
+ if (idx < changedElementIdx) {
2663
+ //under the changed one
2664
+ var rightNeighbours = boxPlannerGrid.getNeighborElements(element.ElementId, 'RIGHT', false);
2665
+ var freeSpace = element.Width;
2666
+ rightNeighbours.forEach(function (n) {
2667
+ if (n.ElementId == changedElement.ElementId) return;
2668
+ var topElements = boxPlannerGrid.getNeighborElements(n.ElementId, 'TOP', false).filter(function (n) {
2669
+ return n.ElementId != changedElement.ElementId;
2670
+ });
2671
+ var topWidth = topElements.reduce(function (totalwidth, e) {
2672
+ return totalwidth += e.Width;
2673
+ }, 0);
2674
+ if (topWidth < n.Width) freeSpace += n.Width - topWidth;
2675
+ });
2676
+ if (Math.round(changedElement.Width) > Math.round(freeSpace)) _this2.setOptionValue(element.ElementId, opt, opv, optionHandler);
2677
+ } else {
2678
+ // over the changed one
2679
+ if (changedElement.Width < element.Width) _this2.setOptionValue(element.ElementId, opt, opv, optionHandler);
2680
+ }
2681
+ });
2661
2682
  }
2662
2683
  }, {
2663
2684
  key: "correctFoot",
@@ -2665,7 +2686,10 @@ var ConstructionRulesHandler = /*#__PURE__*/function () {
2665
2686
  var _this3 = this;
2666
2687
  var elements = boxPlannerGrid.getAllElementsInFrontGrid();
2667
2688
  elements.forEach(function (e) {
2668
- if (boxPlannerGrid.getElementHasBottomElement(e.ElementId)) _this3.setOptionValue(e.ElementId, 'OPTFUSS_SYS', 'OPVOHNE', optionHandler);
2689
+ if (boxPlannerGrid.getElementHasBottomElement(e.ElementId)) {
2690
+ _this3.setOptionValue(e.ElementId, 'OPTFUSS_SYS', 'OPVOHNE', optionHandler);
2691
+ _this3.setOptionValue(e.ElementId, 'OPTPOSSIBILITY_FUSS_OHNE', 'OPVTRUE', optionHandler);
2692
+ }
2669
2693
  });
2670
2694
  }
2671
2695
 
@@ -2674,30 +2698,49 @@ var ConstructionRulesHandler = /*#__PURE__*/function () {
2674
2698
  * */
2675
2699
  }, {
2676
2700
  key: "correctOptionsInfluencedByDimensions",
2677
- value: function correctOptionsInfluencedByDimensions(boxPlannerGrid, optionHandler) {
2701
+ value: function correctOptionsInfluencedByDimensions(boxPlannerGrid, optionHandler, changedOPTs) {
2678
2702
  var _this4 = this;
2679
2703
  if (!this.constructionRules.optionsInfluencedByDimensions) return;
2680
2704
  var boxPlannerSize = boxPlannerGrid.getSizeOfWholeSet(false);
2681
2705
  var allElements = boxPlannerGrid.getAllElementsInFrontGrid();
2682
- this.constructionRules.optionsInfluencedByDimensions.forEach(function (dimRule) {
2683
- if (Array.isArray(dimRule)) {
2684
- if (dimRule.every(function (rule) {
2685
- return _this4.validateDimensionRule(rule, boxPlannerSize);
2686
- })) dimRule.forEach(function (rule) {
2687
- return allElements.forEach(function (element) {
2688
- return _this4.setOptionDoShow(element.ElementId, rule.option, optionHandler);
2689
- });
2690
- });else dimRule.forEach(function (rule) {
2691
- return allElements.forEach(function (element) {
2692
- return _this4.setOptionDoHide(element.ElementId, rule.option, optionHandler);
2706
+ var setRule = function setRule(option, res) {
2707
+ if (changedOPTs) {
2708
+ var changedOpt = Object.entries(changedOPTs).find(function (_ref) {
2709
+ var _ref2 = _slicedToArray__default["default"](_ref, 2),
2710
+ key = _ref2[0];
2711
+ _ref2[1];
2712
+ return key == option;
2713
+ });
2714
+ if (changedOpt) {
2715
+ allElements.forEach(function (element) {
2716
+ return _this4.setOptionValue(element.ElementId, changedOpt[0], changedOpt[1], optionHandler);
2693
2717
  });
2718
+ return;
2719
+ }
2720
+ }
2721
+ allElements.forEach(function (element) {
2722
+ return _this4.setOptionDoCustom(element.ElementId, option, res, optionHandler);
2723
+ });
2724
+ };
2725
+ var dim = this.constructionRules.optionsInfluencedByDimensions;
2726
+ dim.forEach(function (dimRule) {
2727
+ if (Array.isArray(dimRule)) {
2728
+ var res = dimRule.every(function (r) {
2729
+ return _this4.validateDimensionRule(r.dimension, r.dimensionLimit, boxPlannerSize, r.higherLimit, r.lowerLimit).toLowerCase() == 'doshow';
2694
2730
  });
2731
+ var t = dimRule[0];
2732
+ if (res) setRule(t.option, 'doShow');else setRule(t.option, 'doHide');
2695
2733
  } else {
2696
- if (_this4.validateDimensionRule(dimRule, boxPlannerSize)) allElements.forEach(function (element) {
2697
- return _this4.setOptionDoShow(element.ElementId, dimRule.option, optionHandler);
2698
- });else allElements.forEach(function (element) {
2699
- return _this4.setOptionDoHide(element.ElementId, dimRule.option, optionHandler);
2700
- });
2734
+ var seriesDimRule = dimRule;
2735
+ var baseDimRule = dimRule;
2736
+ if (seriesDimRule.series) {
2737
+ var _dimRule = seriesDimRule.series.findLast(function (r) {
2738
+ return _this4.validateDimensionRule(r.dimension, r.dimensionLimit, boxPlannerSize, '1', '2') == '1';
2739
+ });
2740
+ if (_dimRule) setRule(seriesDimRule.option, _dimRule.value);
2741
+ } else {
2742
+ setRule(baseDimRule.option, _this4.validateDimensionRule(baseDimRule.option, baseDimRule.dimensionLimit, boxPlannerSize, baseDimRule.higherLimit, baseDimRule.lowerLimit));
2743
+ }
2701
2744
  }
2702
2745
  });
2703
2746
  }
@@ -2771,22 +2814,22 @@ var ConstructionRulesHandler = /*#__PURE__*/function () {
2771
2814
 
2772
2815
  // default => set all to ohne
2773
2816
  serie.forEach(function (element) {
2774
- var _element$Width2;
2775
- seriesWidth += (_element$Width2 = element.Width) !== null && _element$Width2 !== void 0 ? _element$Width2 : 0;
2776
- boxPlannerGrid.getAllElementsDown(element.ElementId).elements.forEach(function (e) {
2817
+ var _element$size$width;
2818
+ seriesWidth += (_element$size$width = element.size.width) !== null && _element$size$width !== void 0 ? _element$size$width : 0;
2819
+ boxPlannerGrid.getAllElementsDown(element.elementId).elements.forEach(function (e) {
2777
2820
  return _this5.setOptionValue(e, coverPlateRule.optABD, 'OPVOHNE', optionHandler);
2778
2821
  });
2779
- _this5.setOptionValue(element.ElementId, coverPlateRule.optABD, 'OPVOHNE', optionHandler);
2822
+ _this5.setOptionValue(element.elementId, coverPlateRule.optABD, 'OPVOHNE', optionHandler);
2780
2823
  });
2781
2824
  var firstUncoveredElement = serie[0];
2782
- var _loop2 = function _loop2() {
2825
+ var _loop = function _loop() {
2783
2826
  var opv = seriesWidthToPlateOpv.findLast(function (stp) {
2784
2827
  // is a clean element ending
2785
2828
  var helperWidth = 0;
2786
2829
  var isClean = false;
2787
2830
  serie.forEach(function (element) {
2788
- var _element$Width3;
2789
- helperWidth += (_element$Width3 = element.Width) !== null && _element$Width3 !== void 0 ? _element$Width3 : 0;
2831
+ var _element$size$width2;
2832
+ helperWidth += (_element$size$width2 = element.size.width) !== null && _element$size$width2 !== void 0 ? _element$size$width2 : 0;
2790
2833
  if (Math.abs(helperWidth - stp.limit) < 1) isClean = true;
2791
2834
  });
2792
2835
  if (stp.limit <= seriesWidth && isClean) return true;
@@ -2795,11 +2838,11 @@ var ConstructionRulesHandler = /*#__PURE__*/function () {
2795
2838
  if (!opv) return {
2796
2839
  v: void 0
2797
2840
  };
2798
- _this5.setOptionValue(firstUncoveredElement.ElementId, coverPlateRule.optABD, opv.plateOpv, optionHandler);
2841
+ _this5.setOptionValue(firstUncoveredElement.elementId, coverPlateRule.optABD, opv.plateOpv, optionHandler);
2799
2842
  var helperWidth = 0;
2800
2843
  firstUncoveredElement = serie.find(function (e) {
2801
- var _e$Width;
2802
- helperWidth += (_e$Width = e.Width) !== null && _e$Width !== void 0 ? _e$Width : 0;
2844
+ var _e$size$width;
2845
+ helperWidth += (_e$size$width = e.size.width) !== null && _e$size$width !== void 0 ? _e$size$width : 0;
2803
2846
  if (helperWidth > opv.limit) return true;
2804
2847
  return false;
2805
2848
  });
@@ -2808,7 +2851,7 @@ var ConstructionRulesHandler = /*#__PURE__*/function () {
2808
2851
  },
2809
2852
  _ret;
2810
2853
  while (seriesWidth != 0) {
2811
- _ret = _loop2();
2854
+ _ret = _loop();
2812
2855
  if (_ret) return _ret.v;
2813
2856
  }
2814
2857
  });
@@ -3081,9 +3124,9 @@ var ConstructionRulesHandler = /*#__PURE__*/function () {
3081
3124
  var allElements = boxPlannerGrid.getAllElementsInGridSortedbyGridPos();
3082
3125
  if (this.constructionRules.correctRetailArticleNumberByRule && this.constructionRules.correctRetailArticleNumberByRule.length > 0) {
3083
3126
  for (var i = 0; i < this.constructionRules.correctRetailArticleNumberByRule.length; i++) {
3084
- var allValid = true;
3085
3127
  var constructionRule = this.constructionRules.correctRetailArticleNumberByRule[i];
3086
3128
  if (constructionRule.range == 'global') {
3129
+ var allValid = true;
3087
3130
  //Do check if all Elements satify the rules
3088
3131
  for (var j = 0; j < allElements.length; j++) {
3089
3132
  if (!allValid) break;
@@ -3096,6 +3139,19 @@ var ConstructionRulesHandler = /*#__PURE__*/function () {
3096
3139
  retailArticleRules: constructionRule.retailArticleRules
3097
3140
  };
3098
3141
  }
3142
+ } else if (constructionRule.range == "singular") {
3143
+ var _allValid = false;
3144
+ //Do check if all Elements satify the rules
3145
+ for (var j = 0; j < allElements.length; j++) {
3146
+ var _valid = this.evalRule(allElements[j].getElementId(), constructionRule.rule, optionHandler);
3147
+ if (_valid) _allValid = true;
3148
+ }
3149
+ if (_allValid) {
3150
+ return {
3151
+ doChange: true,
3152
+ retailArticleRules: constructionRule.retailArticleRules
3153
+ };
3154
+ }
3099
3155
  }
3100
3156
  }
3101
3157
  }
@@ -3135,7 +3191,7 @@ var ConstructionRulesHandler = /*#__PURE__*/function () {
3135
3191
  value: function () {
3136
3192
  var _updateOptionLogicBoxPlanner = _asyncToGenerator__default["default"](/*#__PURE__*/_regeneratorRuntime__default["default"].mark(function _callee(boxPlannerGrid, changedOPTs, targetElements, forceResetCornerElements) {
3137
3193
  var _targetElements;
3138
- var startTime, resultMessage, optionHandler, allElements, i, _iterator, _step, coverPlateRule, j, doChangeRetailArticleNumbers;
3194
+ var startTime, resultMessage, optionHandler, allElements, i, j, _boxPlannerGrid$getPl2, elementId, _boxPlannerGrid$getPl3, _elementId, _iterator, _step, coverPlateRule, _boxPlannerGrid$getPl4, _elementId2, doChangeRetailArticleNumbers;
3139
3195
  return _regeneratorRuntime__default["default"].wrap(function _callee$(_context) {
3140
3196
  while (1) switch (_context.prev = _context.next) {
3141
3197
  case 0:
@@ -3170,19 +3226,6 @@ var ConstructionRulesHandler = /*#__PURE__*/function () {
3170
3226
  this.correctBottom(boxPlannerGrid, optionHandler, false);
3171
3227
  if (boxPlannerGrid.getPlannerHasActiveBackside()) this.correctBottom(boxPlannerGrid, optionHandler, true);
3172
3228
  this.correctSeries(boxPlannerGrid, optionHandler);
3173
- if (this.constructionRules.coverPlateRule) {
3174
- _iterator = _createForOfIteratorHelper$1(this.constructionRules.coverPlateRule);
3175
- try {
3176
- for (_iterator.s(); !(_step = _iterator.n()).done;) {
3177
- coverPlateRule = _step.value;
3178
- this.correctCoverPlate(coverPlateRule, boxPlannerGrid, optionHandler);
3179
- }
3180
- } catch (err) {
3181
- _iterator.e(err);
3182
- } finally {
3183
- _iterator.f();
3184
- }
3185
- }
3186
3229
  for (i = 0; i < boxPlannerGrid.getColumnCount(); i++) {
3187
3230
  for (j = 0; j < boxPlannerGrid.getRowCount(i, false); j++) {
3188
3231
  this.correctSimpleOpt(i, j, boxPlannerGrid, optionHandler, false);
@@ -3195,39 +3238,126 @@ var ConstructionRulesHandler = /*#__PURE__*/function () {
3195
3238
  }
3196
3239
  }
3197
3240
  }
3198
- for (i = 0; i < boxPlannerGrid.getColumnCount(); i++) {
3199
- for (j = 0; j < boxPlannerGrid.getRowCount(i, false); j++) {
3200
- this.correctForceOptOfElement(boxPlannerGrid.getPlannerElementAtGridPos(i, j, false).ElementId, boxPlannerGrid, optionHandler, false);
3201
- this.correctNeighborCustomOLTs(boxPlannerGrid.getPlannerElementAtGridPos(i, j, false).ElementId, boxPlannerGrid, optionHandler);
3202
- }
3241
+ i = 0;
3242
+ case 17:
3243
+ if (!(i < boxPlannerGrid.getColumnCount())) {
3244
+ _context.next = 31;
3245
+ break;
3203
3246
  }
3204
- if (boxPlannerGrid.getPlannerHasActiveBackside()) {
3205
- for (i = boxPlannerGrid.getColumnCount() - 1; i >= 0; i--) {
3206
- for (j = 0; j < boxPlannerGrid.getRowCount(i, false); j++) {
3207
- this.correctForceOptOfElement(boxPlannerGrid.getPlannerElementAtGridPos(i, j, true).ElementId, boxPlannerGrid, optionHandler, true);
3208
- this.correctNeighborCustomOLTs(boxPlannerGrid.getPlannerElementAtGridPos(i, j, true).ElementId, boxPlannerGrid, optionHandler);
3209
- }
3210
- }
3247
+ j = 0;
3248
+ case 19:
3249
+ if (!(j < boxPlannerGrid.getRowCount(i, false))) {
3250
+ _context.next = 28;
3251
+ break;
3252
+ }
3253
+ elementId = (_boxPlannerGrid$getPl2 = boxPlannerGrid.getPlannerElementAtGridPos(i, j, false)) === null || _boxPlannerGrid$getPl2 === void 0 ? void 0 : _boxPlannerGrid$getPl2.ElementId;
3254
+ if (elementId) {
3255
+ _context.next = 23;
3256
+ break;
3257
+ }
3258
+ return _context.abrupt("continue", 25);
3259
+ case 23:
3260
+ this.correctForceOptOfElement(elementId, boxPlannerGrid, optionHandler, false);
3261
+ this.correctNeighborCustomOLTs(elementId, boxPlannerGrid, optionHandler);
3262
+ case 25:
3263
+ j++;
3264
+ _context.next = 19;
3265
+ break;
3266
+ case 28:
3267
+ i++;
3268
+ _context.next = 17;
3269
+ break;
3270
+ case 31:
3271
+ if (!boxPlannerGrid.getPlannerHasActiveBackside()) {
3272
+ _context.next = 47;
3273
+ break;
3274
+ }
3275
+ i = boxPlannerGrid.getColumnCount() - 1;
3276
+ case 33:
3277
+ if (!(i >= 0)) {
3278
+ _context.next = 47;
3279
+ break;
3211
3280
  }
3281
+ j = 0;
3282
+ case 35:
3283
+ if (!(j < boxPlannerGrid.getRowCount(i, false))) {
3284
+ _context.next = 44;
3285
+ break;
3286
+ }
3287
+ _elementId = (_boxPlannerGrid$getPl3 = boxPlannerGrid.getPlannerElementAtGridPos(i, j, false)) === null || _boxPlannerGrid$getPl3 === void 0 ? void 0 : _boxPlannerGrid$getPl3.ElementId;
3288
+ if (_elementId) {
3289
+ _context.next = 39;
3290
+ break;
3291
+ }
3292
+ return _context.abrupt("continue", 41);
3293
+ case 39:
3294
+ this.correctForceOptOfElement(_elementId, boxPlannerGrid, optionHandler, true);
3295
+ this.correctNeighborCustomOLTs(_elementId, boxPlannerGrid, optionHandler);
3296
+ case 41:
3297
+ j++;
3298
+ _context.next = 35;
3299
+ break;
3300
+ case 44:
3301
+ i--;
3302
+ _context.next = 33;
3303
+ break;
3304
+ case 47:
3212
3305
  this.correctFoot(boxPlannerGrid, optionHandler);
3213
3306
  this.correctLadder(boxPlannerGrid, optionHandler);
3214
- this.correctOptionsInfluencedByDimensions(boxPlannerGrid, optionHandler);
3307
+ this.correctOptionsInfluencedByDimensions(boxPlannerGrid, optionHandler, changedOPTs);
3215
3308
  this.correctOverHangingElement((_targetElements = targetElements) === null || _targetElements === void 0 ? void 0 : _targetElements[0], boxPlannerGrid, optionHandler, changedOPTs);
3216
3309
  this.partlistHelper.calculateKnots(boxPlannerGrid, optionHandler);
3217
3310
  this.partlistHelper.calculateRahmen(boxPlannerGrid, optionHandler);
3218
- for (i = 0; i < boxPlannerGrid.getColumnCount(); i++) {
3219
- for (j = 0; j < boxPlannerGrid.getRowCount(i, false); j++) {
3220
- this.correctBack(boxPlannerGrid, optionHandler, boxPlannerGrid.getPlannerElementAtGridPos(i, j, false).getElementId());
3311
+ if (this.constructionRules.coverPlateRule) {
3312
+ _iterator = _createForOfIteratorHelper$1(this.constructionRules.coverPlateRule);
3313
+ try {
3314
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
3315
+ coverPlateRule = _step.value;
3316
+ this.correctCoverPlate(coverPlateRule, boxPlannerGrid, optionHandler);
3317
+ }
3318
+ } catch (err) {
3319
+ _iterator.e(err);
3320
+ } finally {
3321
+ _iterator.f();
3221
3322
  }
3222
3323
  }
3324
+ i = 0;
3325
+ case 55:
3326
+ if (!(i < boxPlannerGrid.getColumnCount())) {
3327
+ _context.next = 68;
3328
+ break;
3329
+ }
3330
+ j = 0;
3331
+ case 57:
3332
+ if (!(j < boxPlannerGrid.getRowCount(i, false))) {
3333
+ _context.next = 65;
3334
+ break;
3335
+ }
3336
+ _elementId2 = (_boxPlannerGrid$getPl4 = boxPlannerGrid.getPlannerElementAtGridPos(i, j, false)) === null || _boxPlannerGrid$getPl4 === void 0 ? void 0 : _boxPlannerGrid$getPl4.getElementId();
3337
+ if (_elementId2) {
3338
+ _context.next = 61;
3339
+ break;
3340
+ }
3341
+ return _context.abrupt("continue", 62);
3342
+ case 61:
3343
+ this.correctBack(boxPlannerGrid, optionHandler, _elementId2);
3344
+ case 62:
3345
+ j++;
3346
+ _context.next = 57;
3347
+ break;
3348
+ case 65:
3349
+ i++;
3350
+ _context.next = 55;
3351
+ break;
3352
+ case 68:
3223
3353
  doChangeRetailArticleNumbers = this.doChangeRetailArticleNumbers(boxPlannerGrid, optionHandler);
3224
- _context.next = 29;
3354
+ _context.next = 71;
3225
3355
  return this.updateCfgValuesByPlanner(optionHandler, undefined, this.constructionRules.partlistRules.bundleRules, doChangeRetailArticleNumbers);
3226
- case 29:
3356
+ case 71:
3227
3357
  LOG$2.debug('BoxPlanner updateOptionLogic - Duration after setting Option Values of all Articles: ' + (new Date().getTime() - startTime));
3228
3358
  LOG$2.debug('BoxPlanner updateOptionLogic - Duration after setting updating configurator: ' + (new Date().getTime() - startTime));
3229
3359
  return _context.abrupt("return", resultMessage);
3230
- case 32:
3360
+ case 74:
3231
3361
  case "end":
3232
3362
  return _context.stop();
3233
3363
  }
@@ -3355,7 +3485,7 @@ var BoxPlannerGrid = /*#__PURE__*/function () {
3355
3485
  var cells = [];
3356
3486
  for (var i = 0; i < colCount; i++) {
3357
3487
  for (var j = 0; j < rowCount; j++) {
3358
- var _cell = {
3488
+ var _cell2 = {
3359
3489
  plannedElement: {
3360
3490
  basketId: newElement.getBasketId(),
3361
3491
  elementId: newElement.getElementId(),
@@ -3374,7 +3504,7 @@ var BoxPlannerGrid = /*#__PURE__*/function () {
3374
3504
  },
3375
3505
  index: new index.Vector2(startColIndex + i, startRowIndex + j)
3376
3506
  };
3377
- cells.push(_cell);
3507
+ cells.push(_cell2);
3378
3508
  }
3379
3509
  }
3380
3510
  return cells;
@@ -3439,7 +3569,7 @@ var BoxPlannerGrid = /*#__PURE__*/function () {
3439
3569
  key: "getGridColumnWidth",
3440
3570
  value: function getGridColumnWidth(x) {
3441
3571
  var frontGrid = this.generalPlanningState.grids[0].matrix;
3442
- for (var y = 0; x < frontGrid[y].length; x++) {
3572
+ for (var y = 0; y < frontGrid[y].length; y++) {
3443
3573
  var _plannedElement$size$, _plannedElement;
3444
3574
  var cell = frontGrid[x][y];
3445
3575
  if (cell) return (_plannedElement$size$ = (_plannedElement = cell.plannedElement) === null || _plannedElement === void 0 ? void 0 : _plannedElement.size.width) !== null && _plannedElement$size$ !== void 0 ? _plannedElement$size$ : 0;
@@ -3663,10 +3793,10 @@ var BoxPlannerGrid = /*#__PURE__*/function () {
3663
3793
  }
3664
3794
  for (var i = 0; i < backGrid.length; i++) {
3665
3795
  for (var j = 0; j < backGrid[i].length; j++) {
3666
- var _cell2$plannedElement;
3667
- var _cell2 = backGrid[i][j];
3668
- var _elementId = (_cell2$plannedElement = _cell2.plannedElement) === null || _cell2$plannedElement === void 0 ? void 0 : _cell2$plannedElement.elementId;
3669
- if (_cell2 && _elementId && allCheckedElementIds.indexOf(_elementId) == -1) {
3796
+ var _cell3$plannedElement;
3797
+ var _cell3 = backGrid[i][j];
3798
+ var _elementId = (_cell3$plannedElement = _cell3.plannedElement) === null || _cell3$plannedElement === void 0 ? void 0 : _cell3$plannedElement.elementId;
3799
+ if (_cell3 && _elementId && allCheckedElementIds.indexOf(_elementId) == -1) {
3670
3800
  var _element = this.getElementById(_elementId);
3671
3801
  allCheckedElementIds.push(_elementId);
3672
3802
  returnElements.push(_element);
@@ -3930,10 +4060,10 @@ var BoxPlannerGrid = /*#__PURE__*/function () {
3930
4060
  }
3931
4061
  } else {
3932
4062
  for (var i = curGrid[index].length - 1; i >= 0; i--) {
3933
- var _cell3$plannedElement;
3934
- var _cell3 = curGrid[index][i];
3935
- var _elementId4 = _cell3 === null || _cell3 === void 0 || (_cell3$plannedElement = _cell3.plannedElement) === null || _cell3$plannedElement === void 0 ? void 0 : _cell3$plannedElement.elementId;
3936
- if (_cell3 && _elementId4 && allElementIds.indexOf(_elementId4) == -1) {
4063
+ var _cell4$plannedElement;
4064
+ var _cell4 = curGrid[index][i];
4065
+ var _elementId4 = _cell4 === null || _cell4 === void 0 || (_cell4$plannedElement = _cell4.plannedElement) === null || _cell4$plannedElement === void 0 ? void 0 : _cell4$plannedElement.elementId;
4066
+ if (_cell4 && _elementId4 && allElementIds.indexOf(_elementId4) == -1) {
3937
4067
  allElementIds.push(_elementId4);
3938
4068
  allElements.push(this.plannerElements.get(_elementId4));
3939
4069
  }
@@ -4022,31 +4152,90 @@ var BoxPlannerGrid = /*#__PURE__*/function () {
4022
4152
  }, {
4023
4153
  key: "getNeighborElements",
4024
4154
  value: function getNeighborElements(elementId, dir) {
4025
- var _curGrid$area$toX, _curGrid$area$toX2, _curGrid2, _curGrid3, _curGrid$area$fromX, _topNeighbour$planned, _curGrid$area$fromX2, _downNeighbour$planne;
4155
+ var _this = this,
4156
+ _curGrid$area$fromX,
4157
+ _downNeighbour$planne;
4158
+ var clean = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
4026
4159
  var res = this.getCellsInGridByElementId(elementId);
4027
4160
  var curGrid = res.backside ? this.generalPlanningState.grids[1].matrix : this.generalPlanningState.grids[0].matrix;
4028
4161
  var result = [];
4029
4162
  var plannedElement = res.cells[0].plannedElement;
4030
4163
  if (!plannedElement) return result;
4164
+ var currentRow = curGrid[plannedElement.area.fromX];
4165
+ var startHeight = 0;
4166
+ var endHeight = 0;
4167
+ for (var y = 0; y < currentRow.length;) {
4168
+ var cell = currentRow[y];
4169
+ if (cell.index.y < res.startRowIndex) startHeight = Math.round((startHeight + cell.plannedElement.size.height) * 1000) / 1000;
4170
+ if (cell.index.y < res.endRowIndex) endHeight = Math.round((endHeight + cell.plannedElement.size.height) * 1000) / 1000;
4171
+ y = cell.plannedElement.area.toY;
4172
+ }
4173
+ var neighbourSize = 0;
4174
+ var neighbours = [];
4031
4175
  switch (dir) {
4032
4176
  case 'RIGHT':
4033
4177
  // only clean neighbours (for docking) add property if you also need clean ones
4034
- var rLowestNeighbour = (_curGrid$area$toX = curGrid[plannedElement.area.toX]) === null || _curGrid$area$toX === void 0 || (_curGrid$area$toX = _curGrid$area$toX[plannedElement.area.fromY]) === null || _curGrid$area$toX === void 0 || (_curGrid$area$toX = _curGrid$area$toX.plannedElement) === null || _curGrid$area$toX === void 0 ? void 0 : _curGrid$area$toX.elementId;
4035
- var rHighestNeighbour = (_curGrid$area$toX2 = curGrid[plannedElement.area.toX]) === null || _curGrid$area$toX2 === void 0 || (_curGrid$area$toX2 = _curGrid$area$toX2[plannedElement.area.toY - 1]) === null || _curGrid$area$toX2 === void 0 || (_curGrid$area$toX2 = _curGrid$area$toX2.plannedElement) === null || _curGrid$area$toX2 === void 0 ? void 0 : _curGrid$area$toX2.elementId;
4036
- if (rLowestNeighbour == rHighestNeighbour && rLowestNeighbour) result.push(this.plannerElements.get(rLowestNeighbour));
4178
+
4179
+ for (var x = plannedElement.area.toX; x < curGrid.length;) {
4180
+ var _neighbourRow$0$plann, _neighbourRow$0$plann2;
4181
+ var neighbourRow = curGrid[x];
4182
+ for (var _y = 0; _y < neighbourRow.length;) {
4183
+ var _cell5$plannedElement, _cell5$plannedElement2;
4184
+ var _cell5 = neighbourRow[_y];
4185
+ if (neighbours.includes(_cell5)) continue;
4186
+
4187
+ // cubo has ladders that cause the first box to range all to the top, therefore the height computation won't work
4188
+ if (plannedElement.area.fromY == _y && this.gridSetupParams.forceSingleCellPerElement && plannedElement.area.toX == x) neighbours.push(_cell5);else if (clean && !this.gridSetupParams.forceSingleCellPerElement && neighbourSize == startHeight) neighbours.push(_cell5);else if (!clean && neighbourSize >= startHeight && neighbourSize <= endHeight) neighbours.push(_cell5);
4189
+ neighbourSize = Math.round((neighbourSize + _cell5.plannedElement.size.height) * 1000) / 1000;
4190
+ _y = (_cell5$plannedElement = (_cell5$plannedElement2 = _cell5.plannedElement) === null || _cell5$plannedElement2 === void 0 ? void 0 : _cell5$plannedElement2.area.toY) !== null && _cell5$plannedElement !== void 0 ? _cell5$plannedElement : _y + 1;
4191
+ }
4192
+ neighbourSize = 0;
4193
+ x = (_neighbourRow$0$plann = (_neighbourRow$0$plann2 = neighbourRow[0].plannedElement) === null || _neighbourRow$0$plann2 === void 0 ? void 0 : _neighbourRow$0$plann2.area.toX) !== null && _neighbourRow$0$plann !== void 0 ? _neighbourRow$0$plann : x + 1;
4194
+ }
4195
+ neighbours.forEach(function (n) {
4196
+ return !result.find(function (r) {
4197
+ return r.ElementId == n.plannedElement.elementId;
4198
+ }) && result.push(_this.plannerElements.get(n.plannedElement.elementId));
4199
+ });
4037
4200
  break;
4038
4201
  case 'LEFT':
4039
- var lowestNeighbour = (_curGrid2 = curGrid[plannedElement.area.fromX - 1]) === null || _curGrid2 === void 0 || (_curGrid2 = _curGrid2[plannedElement.area.fromY]) === null || _curGrid2 === void 0 || (_curGrid2 = _curGrid2.plannedElement) === null || _curGrid2 === void 0 ? void 0 : _curGrid2.elementId;
4040
- var highestNeighbour = (_curGrid3 = curGrid[plannedElement.area.fromX - 1]) === null || _curGrid3 === void 0 || (_curGrid3 = _curGrid3[plannedElement.area.toY - 1]) === null || _curGrid3 === void 0 || (_curGrid3 = _curGrid3.plannedElement) === null || _curGrid3 === void 0 ? void 0 : _curGrid3.elementId;
4041
- if (lowestNeighbour == highestNeighbour && lowestNeighbour) result.push(this.plannerElements.get(lowestNeighbour));
4202
+ for (var _x2 = plannedElement.area.fromX - 1; _x2 > 0;) {
4203
+ var _neighbourRow = curGrid[_x2];
4204
+ for (var _y2 = 0; _y2 < _neighbourRow.length;) {
4205
+ var _cell6$plannedElement, _cell6$plannedElement2;
4206
+ var _cell6 = _neighbourRow[_y2];
4207
+ if (neighbours.includes(_cell6)) continue;
4208
+ if (plannedElement.area.fromY == _y2 && this.gridSetupParams.forceSingleCellPerElement && plannedElement.area.toX == _x2) neighbours.push(_cell6);else if (clean && !this.gridSetupParams.forceSingleCellPerElement && neighbourSize == startHeight) neighbours.push(_cell6);else if (!clean && neighbourSize >= startHeight && neighbourSize <= endHeight) neighbours.push(_cell6);
4209
+ neighbourSize = Math.round((neighbourSize + _cell6.plannedElement.size.height) * 1000) / 1000;
4210
+ _y2 = (_cell6$plannedElement = (_cell6$plannedElement2 = _cell6.plannedElement) === null || _cell6$plannedElement2 === void 0 ? void 0 : _cell6$plannedElement2.area.toY) !== null && _cell6$plannedElement !== void 0 ? _cell6$plannedElement : _y2 + 1;
4211
+ }
4212
+ neighbourSize = 0;
4213
+ _x2 = _neighbourRow[0].plannedElement ? _neighbourRow[0].plannedElement.area.fromX - 1 : _x2 + 1;
4214
+ }
4215
+ neighbours.forEach(function (n) {
4216
+ return !result.find(function (r) {
4217
+ return r.ElementId == n.plannedElement.elementId;
4218
+ }) && result.push(_this.plannerElements.get(n.plannedElement.elementId));
4219
+ });
4042
4220
  break;
4043
4221
  case 'TOP':
4044
- var topNeighbour = (_curGrid$area$fromX = curGrid[plannedElement.area.fromX]) === null || _curGrid$area$fromX === void 0 ? void 0 : _curGrid$area$fromX[plannedElement.area.toY];
4045
- var tElementId = topNeighbour === null || topNeighbour === void 0 || (_topNeighbour$planned = topNeighbour.plannedElement) === null || _topNeighbour$planned === void 0 ? void 0 : _topNeighbour$planned.elementId;
4046
- if (tElementId) result.push(this.plannerElements.get(tElementId));
4222
+ var topNeighbours = [];
4223
+ for (var _x3 = plannedElement.area.fromX; _x3 < plannedElement.area.toX;) {
4224
+ var _cell7 = curGrid[_x3][plannedElement.area.toY];
4225
+ if (!_cell7) break;
4226
+ topNeighbours.push(_cell7);
4227
+ if (clean) break;
4228
+ _x3 = _cell7.plannedElement.area.toX;
4229
+ }
4230
+ if (topNeighbours.length == 0) break;
4231
+ topNeighbours.forEach(function (topNeighbour) {
4232
+ var _plannedElement3;
4233
+ var tElementId = (_plannedElement3 = topNeighbour.plannedElement) === null || _plannedElement3 === void 0 ? void 0 : _plannedElement3.elementId;
4234
+ if (tElementId) result.push(_this.plannerElements.get(tElementId));
4235
+ });
4047
4236
  break;
4048
4237
  case 'DOWN':
4049
- var downNeighbour = (_curGrid$area$fromX2 = curGrid[plannedElement.area.fromX]) === null || _curGrid$area$fromX2 === void 0 ? void 0 : _curGrid$area$fromX2[plannedElement.area.fromY - 1];
4238
+ var downNeighbour = (_curGrid$area$fromX = curGrid[plannedElement.area.fromX]) === null || _curGrid$area$fromX === void 0 ? void 0 : _curGrid$area$fromX[plannedElement.area.fromY - 1];
4050
4239
  var dElementId = downNeighbour === null || downNeighbour === void 0 || (_downNeighbour$planne = downNeighbour.plannedElement) === null || _downNeighbour$planne === void 0 ? void 0 : _downNeighbour$planne.elementId;
4051
4240
  if (dElementId) result.push(this.plannerElements.get(dElementId));
4052
4241
  break;
@@ -4112,16 +4301,16 @@ var BoxPlannerGrid = /*#__PURE__*/function () {
4112
4301
  var checkedElementIds = [];
4113
4302
  var frontGrid = this.generalPlanningState.grids[0].matrix;
4114
4303
  for (var x = 0; x < frontGrid.length;) {
4115
- var _row$0$plannedElement, _row$0$plannedElement2;
4304
+ var _row$0$plannedElement, _row$;
4116
4305
  var curHeight = 0;
4117
4306
  var row = frontGrid[x];
4118
4307
  for (var y = 0; y < row.length;) {
4119
- var _cell4, _cell$plannedElement$, _cell$plannedElement8;
4308
+ var _cell8, _cell$plannedElement$, _cell$plannedElement8;
4120
4309
  var cell = row[y];
4121
- var elementId = (_cell4 = cell) === null || _cell4 === void 0 || (_cell4 = _cell4.plannedElement) === null || _cell4 === void 0 ? void 0 : _cell4.elementId;
4310
+ var elementId = (_cell8 = cell) === null || _cell8 === void 0 || (_cell8 = _cell8.plannedElement) === null || _cell8 === void 0 ? void 0 : _cell8.elementId;
4122
4311
  if (elementId && cell && checkedElementIds.indexOf(elementId) == -1) {
4123
4312
  curHeight += this.plannerElements.get(elementId).getHeight();
4124
- if (x == 0 && y == 0) depth = this.plannerElements.get(elementId).getDepth();
4313
+ if (x == 0 && y == 0) depth = cell.plannedElement.size.depth;
4125
4314
  }
4126
4315
  y = (_cell$plannedElement$ = (_cell$plannedElement8 = cell.plannedElement) === null || _cell$plannedElement8 === void 0 ? void 0 : _cell$plannedElement8.area.toY) !== null && _cell$plannedElement$ !== void 0 ? _cell$plannedElement$ : y + 1;
4127
4316
  }
@@ -4132,7 +4321,7 @@ var BoxPlannerGrid = /*#__PURE__*/function () {
4132
4321
  if (curWidth == 77.9) curWidth = 75;else if (curWidth == 40.4) curWidth = 37.5;else if (curWidth == 21.7) curWidth = 18.75;
4133
4322
  }
4134
4323
  width += curWidth;
4135
- x = (_row$0$plannedElement = (_row$0$plannedElement2 = row[0].plannedElement) === null || _row$0$plannedElement2 === void 0 ? void 0 : _row$0$plannedElement2.area.toX) !== null && _row$0$plannedElement !== void 0 ? _row$0$plannedElement : x + 1;
4324
+ x = (_row$0$plannedElement = row === null || row === void 0 || (_row$ = row[0]) === null || _row$ === void 0 || (_row$ = _row$.plannedElement) === null || _row$ === void 0 ? void 0 : _row$.area.toX) !== null && _row$0$plannedElement !== void 0 ? _row$0$plannedElement : x + 1;
4136
4325
  }
4137
4326
  if (this.hasActiveBackside) depth *= 2;
4138
4327
  return new index.Vector3(width, height, depth);
@@ -4148,9 +4337,11 @@ var BoxPlannerGrid = /*#__PURE__*/function () {
4148
4337
  var onBottom = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
4149
4338
  if (this.hasActiveBackside) throw new Error('this function is doesnt implement the backside logic (yet)');
4150
4339
  var result = [];
4340
+ var grid = this.generalPlanningState.grids[0].matrix;
4151
4341
  var lastHeight = -1;
4152
- for (var x = 0; x < this.getColumnCount();) {
4153
- var row = this.generalPlanningState.grids[0].matrix[x];
4342
+ for (var x = 0; x < grid.length;) {
4343
+ var _grid$new_x;
4344
+ var row = grid[x];
4154
4345
  var height = 0;
4155
4346
  for (var y = 0; y < row.length;) {
4156
4347
  var element = row[y].plannedElement;
@@ -4159,12 +4350,20 @@ var BoxPlannerGrid = /*#__PURE__*/function () {
4159
4350
  }
4160
4351
  if (Math.round(height) == Math.round(lastHeight) || onBottom) {
4161
4352
  if (!result[result.length - 1]) result.push([]);
4162
- result[result.length - 1].push(this.getPlannerElementAtGridPos(x, row.length - 1, false));
4163
- } else {
4164
- result.push([this.getPlannerElementAtGridPos(x, row.length - 1, false)]);
4353
+ result[result.length - 1].push(grid[x][onBottom ? 0 : row.length - 1].plannedElement);
4354
+ } else if (grid[x][row.length - 1].plannedElement.area.fromX == x) {
4355
+ result.push([grid[x][onBottom ? 0 : row.length - 1].plannedElement]);
4165
4356
  }
4166
4357
  lastHeight = height;
4167
- x = row[row.length - 1].plannedElement ? row[row.length - 1].plannedElement.area.toX : x + 1;
4358
+ var new_x = row[row.length - 1].plannedElement.area.toX;
4359
+ var newHeight = (_grid$new_x = grid[new_x]) === null || _grid$new_x === void 0 ? void 0 : _grid$new_x.length;
4360
+
4361
+ // if the next row is fx. lower and doesn't have a clean cut here we need to skip more
4362
+ if (newHeight && newHeight != row.length) {
4363
+ var cell = grid[new_x][newHeight - 1];
4364
+ if (cell.index.x != cell.plannedElement.area.fromX) new_x = cell.plannedElement.area.toX;
4365
+ }
4366
+ x = new_x;
4168
4367
  }
4169
4368
  return result;
4170
4369
  }
@@ -4210,42 +4409,63 @@ var BoxPlannerGrid = /*#__PURE__*/function () {
4210
4409
  }, {
4211
4410
  key: "getAllElementsToFillUp",
4212
4411
  value: function getAllElementsToFillUp(elementId, dir) {
4213
- var _this = this;
4412
+ var _this2 = this;
4214
4413
  var curPos = this.getCellsInGridByElementId(elementId);
4215
4414
 
4216
4415
  //columns and rows are swapped don't ask me why
4217
4416
  var element = curPos.cells[0].plannedElement;
4218
4417
  var index = {
4219
- x: curPos.startColIndex,
4418
+ x: dir == 'LEFT' ? curPos.startColIndex : curPos.endColIndex - 1,
4220
4419
  y: curPos.startRowIndex
4221
4420
  };
4222
4421
  var curGrid = curPos.backside ? this.generalPlanningState.grids[1].matrix : this.generalPlanningState.grids[0].matrix;
4223
4422
  var plannerIdsToFill = [];
4224
- var existingPlannerIds = [];
4225
- var _loop = function _loop(_y) {
4226
- var _curGrid$index$x$_y;
4227
- var elementToCopy = (_curGrid$index$x$_y = curGrid[index.x][_y]) === null || _curGrid$index$x$_y === void 0 ? void 0 : _curGrid$index$x$_y.plannedElement;
4228
- if (!elementToCopy) {
4229
- y = _y;
4230
- return 1;
4231
- } // break
4232
- var length = element.area.toX - element.area.fromX;
4233
- var d = dir == 'RIGHT' ? +length : -length;
4234
- var isPlanned = curGrid.every(function (x, idx) {
4235
- var _x$_y;
4236
- return idx < element.area.fromX + d || idx >= element.area.toX + d || ((_x$_y = x[_y]) === null || _x$_y === void 0 ? void 0 : _x$_y.plannedElement);
4237
- });
4238
- var neighbour = _this.getNeighborElements(elementToCopy.elementId, dir);
4239
- if (neighbour.length == 0 && !isPlanned && elementToCopy) plannerIdsToFill.push(elementToCopy.elementId);else if (elementToCopy) existingPlannerIds.push(elementToCopy.elementId);
4240
- _y = elementToCopy.area.toY;
4241
- y = _y;
4242
- };
4243
- for (var y = 0; y <= index.y;) {
4244
- if (_loop(y)) break;
4423
+ var length = element.area.toX - element.area.fromX;
4424
+ var d = dir == 'RIGHT' ? +length : -length;
4425
+ plannerIdsToFill.push(element.elementId);
4426
+ _objectSpread(_objectSpread({}, element.area), {}, {
4427
+ fromX: element.area.fromX + d,
4428
+ toX: element.area.toX + d
4429
+ });
4430
+ var _loop = function _loop(_y3) {
4431
+ var _curGrid$index$x$_y;
4432
+ var supportElement = (_curGrid$index$x$_y = curGrid[index.x][_y3]) === null || _curGrid$index$x$_y === void 0 ? void 0 : _curGrid$index$x$_y.plannedElement;
4433
+ if (!supportElement) {
4434
+ y = _y3;
4435
+ return 0;
4436
+ } // break
4437
+ var topElements = _this2.getNeighborElements(supportElement.elementId, 'TOP', false);
4438
+ var topWidth = 0;
4439
+ topElements.forEach(function (t) {
4440
+ return topWidth += t.Width;
4441
+ });
4442
+ var freeSpace = 0;
4443
+ if (supportElement.size.width > topWidth) freeSpace = supportElement.size.width - topWidth;
4444
+ var neighbours = _this2.getNeighborElements(supportElement.elementId, dir, false);
4445
+ neighbours.forEach(function (n) {
4446
+ if (_this2.getNeighborElements(n.ElementId, 'TOP').length > 0) return;
4447
+ freeSpace += n.Width;
4448
+ });
4449
+ if (freeSpace >= element.size.width) {
4450
+ y = _y3;
4451
+ return 0;
4452
+ } // break
4453
+ var missingWidth = element.size.width - freeSpace;
4454
+ while (missingWidth > 0) {
4455
+ plannerIdsToFill.push(supportElement.elementId);
4456
+ missingWidth = Math.round(missingWidth - supportElement.size.width);
4457
+ }
4458
+ _y3 = supportElement.area.fromY - 1;
4459
+ y = _y3;
4460
+ },
4461
+ _ret;
4462
+ for (var y = index.y - 1; y >= 0;) {
4463
+ _ret = _loop(y);
4464
+ if (_ret === 0) break;
4245
4465
  }
4246
4466
  // if there is nothing to fill we copy everyting
4247
4467
  return {
4248
- elements: plannerIdsToFill.length == 0 ? existingPlannerIds : plannerIdsToFill,
4468
+ elements: plannerIdsToFill.reverse(),
4249
4469
  backside: curPos.backside
4250
4470
  };
4251
4471
  }
@@ -4341,11 +4561,32 @@ var BoxPlannerGrid = /*#__PURE__*/function () {
4341
4561
  // [][] -> | [][][]
4342
4562
  // [][] | [][][]
4343
4563
  // [][][] | [][][][]
4344
- function moveGrid(plannedCells) {
4564
+ var moveGrid = function moveGrid(plannedCells) {
4345
4565
  var grid = new Array();
4346
4566
  var rightNeighbour = plannedCells.filter(function (c) {
4347
4567
  return c.index.x == element.area.toX;
4348
4568
  });
4569
+ var col = [];
4570
+ var support = [];
4571
+ var _loop2 = function _loop2() {
4572
+ var c = frontGrid[x][element.area.fromY];
4573
+ var s = frontGrid[x][element.area.fromY - 1];
4574
+ if (c && !col.find(function (_c) {
4575
+ return _c.plannedElement.elementId == c.plannedElement.elementId;
4576
+ })) col.push(frontGrid[x][element.area.fromY]);
4577
+ if (s && !support.find(function (_c) {
4578
+ return _c.plannedElement.elementId == s.plannedElement.elementId;
4579
+ })) support.push(frontGrid[x][element.area.fromY - 1]);
4580
+ };
4581
+ for (var x = 0; x < frontGrid.length; x++) {
4582
+ _loop2();
4583
+ }
4584
+ var sizeXTop = col.reduce(function (acc, n) {
4585
+ return acc += n.plannedElement.size.width;
4586
+ }, 0);
4587
+ var sizeXUnder = support ? support.reduce(function (acc, n) {
4588
+ return acc += n.plannedElement.size.width;
4589
+ }, 0) : 0;
4349
4590
  var rightNeighbourOfCopy = rightNeighbour.find(function (c) {
4350
4591
  return c.index.y == absoluteCopyIndex.y;
4351
4592
  });
@@ -4357,7 +4598,9 @@ var BoxPlannerGrid = /*#__PURE__*/function () {
4357
4598
  });
4358
4599
  plannedCells.forEach(function (cell) {
4359
4600
  // if we can't fill up (need to move the grid)
4360
- if (cell.index.x >= absoluteCopyIndex.x && (copyDirectionIsRight && (rightNeighbourOfCopy || rightNeighbour.length == 0) || !copyDirectionIsRight && (leftNeighbourOfCopy || leftNeighbour.length == 0) || absoluteCopyIndex.x == -1)) {
4601
+ if (cell.index.x >= absoluteCopyIndex.x && (copyDirectionIsRight && (rightNeighbourOfCopy || rightNeighbour.length == 0) && (
4602
+ // no free space or on the right height == move
4603
+ !(sizeXTop <= sizeXUnder - element.size.width) || cell.index.y >= element.area.fromY && cell.index.y < element.area.toY) || !copyDirectionIsRight && (leftNeighbourOfCopy || leftNeighbour.length == 0) || absoluteCopyIndex.x == -1)) {
4361
4604
  cell.index.x += widthCopyArea;
4362
4605
  cell.plannedElement.area.fromX += widthCopyArea;
4363
4606
  cell.plannedElement.area.toX += widthCopyArea;
@@ -4366,13 +4609,13 @@ var BoxPlannerGrid = /*#__PURE__*/function () {
4366
4609
  grid[cell.index.x][cell.index.y] = cell;
4367
4610
  });
4368
4611
  return grid;
4369
- }
4612
+ };
4370
4613
  frontGrid = moveGrid(this.getAllUsedCellsInGrid(false));
4371
4614
  for (var x = 0; x < widthCopyArea; x++) if (!frontGrid[absoluteCopyIndex.x + x]) frontGrid[absoluteCopyIndex.x + x] = [];
4372
4615
  this.generalPlanningState.grids[0].matrix = frontGrid;
4373
4616
  if (this.hasActiveBackside) {
4374
4617
  backGrid = moveGrid(this.getAllUsedCellsInGrid(true));
4375
- for (var _x2 = 0; _x2 < widthCopyArea; _x2++) if (!backGrid[absoluteCopyIndex.x + _x2]) backGrid[absoluteCopyIndex.x + _x2] = [];
4618
+ for (var _x4 = 0; _x4 < widthCopyArea; _x4++) if (!backGrid[absoluteCopyIndex.x + _x4]) backGrid[absoluteCopyIndex.x + _x4] = [];
4376
4619
  this.generalPlanningState.grids[1].matrix = backGrid;
4377
4620
  }
4378
4621
  }
@@ -4418,13 +4661,12 @@ var BoxPlannerGrid = /*#__PURE__*/function () {
4418
4661
  var elementData = this.plannerElements.get(elementId);
4419
4662
  var deletedCells = this.getCellsInGridByElementId(elementId);
4420
4663
  if (!elementData) return;
4421
- this.deleteElement(elementId, "STD");
4664
+ this.deleteElement(elementId, 'STD');
4422
4665
  var curGrid = this.generalPlanningState.grids[0].matrix;
4423
4666
  var cells = undefined;
4424
- if (absoluteIndex.x < 0 || absoluteIndex.y == 0 && deletedCells.endRowIndex >= absoluteIndex.x // moved 0 to 4 so now shift to left
4425
- ) {
4667
+ if (absoluteIndex.x < 0 && absoluteIndex.y == 0) {
4426
4668
  var dir = deletedCells.endColIndex >= absoluteIndex.x;
4427
- if (deletedCells.startColIndex >= absoluteIndex.x) absoluteIndex.x -= deletedCells.endColIndex - deletedCells.startColIndex;
4669
+ if (deletedCells.startColIndex <= absoluteIndex.x) absoluteIndex.x -= deletedCells.endColIndex - deletedCells.startColIndex;
4428
4670
  if (absoluteIndex.x < 0) absoluteIndex.x = 0;
4429
4671
  cells = this.createNewCells(elementData, absoluteIndex.x, absoluteIndex.y, false);
4430
4672
  var movedGrid = [];
@@ -4433,9 +4675,9 @@ var BoxPlannerGrid = /*#__PURE__*/function () {
4433
4675
  _.forEach(function (_, y) {
4434
4676
  var newX = x;
4435
4677
  var shiftX = 0;
4436
- if (y == absoluteIndex.y) {
4437
- newX += dir ? element.area.toX - element.area.fromX : -(element.area.toX - element.area.fromX);
4438
- shiftX = dir ? element.area.toX - element.area.fromX : -(element.area.toX - element.area.fromX);
4678
+ if (y == absoluteIndex.y || absoluteIndex.y == 0) {
4679
+ newX += dir ? element.area.toX - element.area.fromX : 0;
4680
+ shiftX = dir ? element.area.toX - element.area.fromX : 0;
4439
4681
  }
4440
4682
  if (!movedGrid[newX]) movedGrid[newX] = [];
4441
4683
  var cellElem = curGrid[x][y].plannedElement;
@@ -4458,7 +4700,7 @@ var BoxPlannerGrid = /*#__PURE__*/function () {
4458
4700
  });
4459
4701
  curGrid = movedGrid;
4460
4702
  } else {
4461
- if (absoluteIndex.x > deletedCells.startColIndex && absoluteIndex.y == deletedCells.startRowIndex) absoluteIndex.x -= deletedCells.endColIndex - deletedCells.startColIndex;
4703
+ if (absoluteIndex.x > deletedCells.startColIndex && deletedCells.startRowIndex == 0) absoluteIndex.x -= deletedCells.endColIndex - deletedCells.startColIndex;
4462
4704
  cells = this.createNewCells(elementData, absoluteIndex.x, absoluteIndex.y, false);
4463
4705
  }
4464
4706
  for (var i = 0; i < cells.length; i++) {
@@ -4488,8 +4730,6 @@ var BoxPlannerGrid = /*#__PURE__*/function () {
4488
4730
  var backsideForCopy = copyIndex.z == -1 || curPos.backside == true;
4489
4731
  if (cellIndex.x < 0) cellIndex.x = 0; // can't plan to negative space see prepareGridForColCopy
4490
4732
  var curGrid = backsideForCopy ? this.generalPlanningState.grids[1].matrix : this.generalPlanningState.grids[0].matrix;
4491
- // can't float need to dock
4492
- if (curGrid[cellIndex.x].length < cellIndex.y) cellIndex.y = curGrid[cellIndex.x].length;
4493
4733
  var cells = this.createNewCells(newElement, cellIndex.x, cellIndex.y, backsideForCopy);
4494
4734
  for (var i = 0; i < cells.length; i++) {
4495
4735
  if (!curGrid[cells[i].index.x]) curGrid[cells[i].index.x] = [];
@@ -4520,75 +4760,129 @@ var BoxPlannerGrid = /*#__PURE__*/function () {
4520
4760
  }, {
4521
4761
  key: "updateGridElementDimensions",
4522
4762
  value: function updateGridElementDimensions(elementId, elementData) {
4523
- var _this2 = this;
4524
- if (!elementData) return;
4763
+ var _this3 = this;
4764
+ if (!elementData) return false;
4765
+ var backup = structuredClone(this.generalPlanningState);
4525
4766
  var res = this.getCellsInGridByElementId(elementId);
4526
4767
  var scpe = this.gridSetupParams.forceSingleCellPerElement;
4768
+ var origin = {
4769
+ x: res.cells[0].plannedElement.area.toX,
4770
+ y: res.cells[0].plannedElement.area.toY
4771
+ };
4772
+ var diff = {
4773
+ x: 0,
4774
+ y: 0
4775
+ };
4527
4776
  res.cells.forEach(function (cell) {
4528
4777
  if (!cell.plannedElement) return;
4529
- cell.plannedElement.size.width = elementData.width;
4530
- cell.plannedElement.size.height = elementData.height;
4531
- cell.plannedElement.area = {
4532
- fromX: cell.index.x,
4533
- toX: !scpe ? Math.round(cell.index.x + elementData.width / _this2.gridSetupParams.fixCellRasterWidth) : cell.index.x + 1,
4534
- fromY: cell.index.y,
4535
- toY: !scpe ? Math.round(cell.index.y + elementData.height / _this2.gridSetupParams.fixCellRasterHeight) : cell.index.y + 1
4778
+ var el = cell.plannedElement;
4779
+ el.size.width = elementData.width;
4780
+ el.size.height = elementData.height;
4781
+ el.size.depth = elementData.depth;
4782
+ el.area = {
4783
+ fromX: el.area.fromX,
4784
+ toX: !scpe ? Math.round(el.area.fromX + elementData.width / _this3.gridSetupParams.fixCellRasterWidth) : cell.index.x + 1,
4785
+ fromY: el.area.fromY,
4786
+ toY: !scpe ? Math.round(el.area.fromY + elementData.height / _this3.gridSetupParams.fixCellRasterHeight) : cell.index.y + 1
4536
4787
  };
4788
+ diff.y = cell.plannedElement.area.toY - origin.y;
4789
+ diff.x = cell.plannedElement.area.toX - origin.x;
4537
4790
  });
4538
- if (scpe) return;
4791
+ var cell = res.cells[0];
4792
+ var grid = this.generalPlanningState.grids[0].matrix;
4793
+ // if the element got bigger we need to move all the above elements up
4794
+ // if it got wider we need to move all the elements to the right
4795
+ if (diff.y != 0) {
4796
+ for (var x = cell.plannedElement.area.fromX; x < cell.plannedElement.area.toX; x++) {
4797
+ var row = grid[x];
4798
+ if (!row) continue;
4799
+ for (var y = origin.y; y < row.length; y++) {
4800
+ var _cell = row[y];
4801
+ if (_cell.index.y != y || _cell.plannedElement.elementId == cell.plannedElement.elementId) continue; //already corrected
4802
+ _cell.index.y += diff.y;
4803
+ _cell.plannedElement.area.fromY += diff.y;
4804
+ _cell.plannedElement.area.toY += diff.y;
4805
+ }
4806
+ }
4807
+ } else if (diff.x != 0) {
4808
+ for (var _x5 = cell.plannedElement.area.fromX; _x5 < grid.length; _x5++) {
4809
+ for (var _y4 = cell.plannedElement.area.fromY; _y4 < cell.plannedElement.area.toY; _y4++) {
4810
+ var _cell9 = grid[_x5][_y4];
4811
+ if (!_cell9 || _cell9.plannedElement.elementId == elementId) continue; //already corrected
4812
+ _cell9.index.x += diff.x;
4813
+ _cell9.plannedElement.area.fromX += diff.x;
4814
+ _cell9.plannedElement.area.toX += diff.x;
4815
+ }
4816
+ }
4817
+ }
4818
+
4819
+ // after indices/areas are corrected rebuild the grid
4820
+ if (scpe) return false;
4821
+ res.cells[0].plannedElement;
4539
4822
  var newGrid = new Array();
4540
4823
  var plannedCells = this.getAllUsedCellsInGrid(false);
4541
- plannedCells.forEach(function (cell) {
4542
- var area = cell.plannedElement.area;
4543
- if (newGrid.find(function (x) {
4544
- return x.find(function (y) {
4545
- var _y$plannedElement3, _cell$plannedElement9;
4546
- return ((_y$plannedElement3 = y.plannedElement) === null || _y$plannedElement3 === void 0 ? void 0 : _y$plannedElement3.elementId) == ((_cell$plannedElement9 = cell.plannedElement) === null || _cell$plannedElement9 === void 0 ? void 0 : _cell$plannedElement9.elementId);
4547
- });
4548
- })) return;
4549
- for (var x = area.fromX; x < area.toX; x++) {
4550
- var _loop2 = function _loop2(y) {
4551
- if (!newGrid[x]) newGrid[x] = [];
4552
- if (y < area.fromY) {
4553
- if (newGrid[x][y]) return 0; // continue
4554
- var el = _this2.generalPlanningState.grids[0].matrix.findLast(function (_x) {
4555
- return _x[y].plannedElement;
4556
- });
4557
- newGrid[x][y] = {
4558
- index: {
4559
- x: x,
4560
- y: y
4561
- },
4562
- plannedElement: el && el.length > 0 ? el[0].plannedElement : undefined
4824
+ var _loop3 = function _loop3() {
4825
+ var cell = plannedCells[idx];
4826
+ var area = cell.plannedElement.area;
4827
+ if (newGrid.find(function (x) {
4828
+ return x.find(function (y) {
4829
+ var _y$plannedElement3, _cell$plannedElement9;
4830
+ return (y === null || y === void 0 || (_y$plannedElement3 = y.plannedElement) === null || _y$plannedElement3 === void 0 ? void 0 : _y$plannedElement3.elementId) == ((_cell$plannedElement9 = cell.plannedElement) === null || _cell$plannedElement9 === void 0 ? void 0 : _cell$plannedElement9.elementId);
4831
+ });
4832
+ })) return 0; // continue
4833
+ for (var _x6 = area.fromX; _x6 < area.toX; _x6++) {
4834
+ for (var _y5 = area.fromY; _y5 < area.toY; _y5++) {
4835
+ if (!newGrid[_x6] && area.fromY == 0) newGrid[_x6] = [];
4836
+
4837
+ // we have a so called overhanging element not so nice, let's correct:
4838
+ var support = plannedCells.find(function (c) {
4839
+ return c.plannedElement.area.toX >= cell.plannedElement.area.toX && c.plannedElement.area.toY == cell.index.y;
4840
+ });
4841
+ if (!support && !newGrid[_x6]) {
4842
+ _this3.generalPlanningState = backup;
4843
+ return {
4844
+ v: true
4563
4845
  };
4564
- return 0; // continue
4565
4846
  }
4566
4847
 
4567
- // if the element got smaller we need to move it to the neighbour
4568
- //newGrid[x][y] = { ...cell, index: { x, y: y } };
4569
- newGrid[x][y] = _objectSpread(_objectSpread({}, cell), {}, {
4848
+ // the element below got smaller
4849
+ if (!newGrid[_x6] && !support) {
4850
+ _this3.generalPlanningState = backup;
4851
+ return {
4852
+ v: true
4853
+ };
4854
+ } else if (!newGrid[_x6]) newGrid[_x6] = [];
4855
+ // when the element above starts early and goes over multiple ones
4856
+
4857
+ // regular case
4858
+ newGrid[_x6][_y5] = _objectSpread(_objectSpread({}, cell), {}, {
4570
4859
  index: {
4571
- x: x,
4572
- y: y
4860
+ x: _x6,
4861
+ y: _y5
4573
4862
  },
4574
4863
  plannedElement: _objectSpread(_objectSpread({}, cell.plannedElement), {}, {
4575
4864
  area: {
4576
- fromX: x,
4577
- toX: x + (cell.plannedElement.area.toX - cell.plannedElement.area.fromX),
4578
- fromY: y,
4579
- toY: y + (cell.plannedElement.area.toY - cell.plannedElement.area.fromY)
4580
- }
4865
+ fromX: cell.plannedElement.area.fromX,
4866
+ toX: cell.plannedElement.area.fromX + (cell.plannedElement.area.toX - cell.plannedElement.area.fromX),
4867
+ fromY: cell.plannedElement.area.fromY,
4868
+ toY: cell.plannedElement.area.fromY + (cell.plannedElement.area.toY - cell.plannedElement.area.fromY)
4869
+ },
4870
+ size: _objectSpread(_objectSpread({}, cell.plannedElement.size), {}, {
4871
+ depth: elementData.depth
4872
+ })
4581
4873
  })
4582
4874
  });
4583
- },
4584
- _ret;
4585
- for (var y = 0; y < area.toY; y++) {
4586
- _ret = _loop2(y);
4587
- if (_ret === 0) continue;
4875
+ }
4588
4876
  }
4589
- }
4590
- });
4877
+ },
4878
+ _ret2;
4879
+ for (var idx = 0; idx < plannedCells.length; idx++) {
4880
+ _ret2 = _loop3();
4881
+ if (_ret2 === 0) continue;
4882
+ if (_ret2) return _ret2.v;
4883
+ }
4591
4884
  if (res.backside) this.generalPlanningState.grids[1].matrix = newGrid;else this.generalPlanningState.grids[0].matrix = newGrid;
4885
+ return false;
4592
4886
  }
4593
4887
 
4594
4888
  /**
@@ -4629,9 +4923,11 @@ var BoxPlannerGrid = /*#__PURE__*/function () {
4629
4923
  var topNeighbors = this.getNeighborElements(elementId, 'TOP');
4630
4924
  var rightNeighbors = this.getNeighborElements(elementId, 'RIGHT');
4631
4925
  var leftNeighbors = this.getNeighborElements(elementId, 'LEFT');
4926
+ var downNeighbors = this.getNeighborElements(elementId, 'DOWN');
4632
4927
  if (topNeighbors.length > 0) PlannerHandler2D.dockingPointHandlerInst.tryDockElement(element, 'AVO', [topNeighbors[0]]);
4633
4928
  if (leftNeighbors.length > 0) PlannerHandler2D.dockingPointHandlerInst.tryDockElement(element, 'AVL', [leftNeighbors[0]]);
4634
4929
  if (rightNeighbors.length > 0) PlannerHandler2D.dockingPointHandlerInst.tryDockElement(element, 'AVR', [rightNeighbors[0]]);
4930
+ if (downNeighbors.length > 0) PlannerHandler2D.dockingPointHandlerInst.tryDockElement(element, 'AVU', [downNeighbors[0]]);
4635
4931
  element.PosNr = posNr;
4636
4932
  posNr++;
4637
4933
  }
@@ -4639,9 +4935,9 @@ var BoxPlannerGrid = /*#__PURE__*/function () {
4639
4935
  }
4640
4936
  for (var i = 0; i < backGrid.length; i++) {
4641
4937
  for (var j = 0; j < backGrid[i].length; j++) {
4642
- var _cell5$plannedElement;
4643
- var _cell5 = backGrid[i][j];
4644
- var _elementId6 = _cell5 === null || _cell5 === void 0 || (_cell5$plannedElement = _cell5.plannedElement) === null || _cell5$plannedElement === void 0 ? void 0 : _cell5$plannedElement.elementId;
4938
+ var _cell10$plannedElemen;
4939
+ var _cell10 = backGrid[i][j];
4940
+ var _elementId6 = _cell10 === null || _cell10 === void 0 || (_cell10$plannedElemen = _cell10.plannedElement) === null || _cell10$plannedElemen === void 0 ? void 0 : _cell10$plannedElemen.elementId;
4645
4941
  if (_elementId6 && allCheckedElementIds.indexOf(_elementId6) == -1) {
4646
4942
  var _element2 = this.plannerElements.get(_elementId6);
4647
4943
  allCheckedElementIds.push(_elementId6);
@@ -4979,9 +5275,9 @@ var BoxPlannerGrid = /*#__PURE__*/function () {
4979
5275
  var targetRowIndex = endRowIndex + 1;
4980
5276
  var _copyPossible = false;
4981
5277
  // Iterate through columns within the element's width
4982
- for (var _x3 = endColIndex; _x3 >= startColIndex; _x3--) {
4983
- if (isValidCell(_x3, targetRowIndex)) {
4984
- copyStartColIndex = _x3;
5278
+ for (var _x7 = endColIndex; _x7 >= startColIndex; _x7--) {
5279
+ if (isValidCell(_x7, targetRowIndex)) {
5280
+ copyStartColIndex = _x7;
4985
5281
  _copyPossible = true;
4986
5282
  }
4987
5283
  }
@@ -4998,19 +5294,19 @@ var BoxPlannerGrid = /*#__PURE__*/function () {
4998
5294
  var _targetColIndex = endColIndex;
4999
5295
  var _copyPossible2 = false;
5000
5296
  // Iterate through rows within the element's height
5001
- for (var _y2 = startRowIndex; _y2 <= endRowIndex; _y2++) {
5002
- if (isValidCell(_targetColIndex, _y2)) {
5003
- copyStartRowIndex = _y2;
5297
+ for (var _y6 = startRowIndex; _y6 <= endRowIndex; _y6++) {
5298
+ if (isValidCell(_targetColIndex, _y6)) {
5299
+ copyStartRowIndex = _y6;
5004
5300
  _copyPossible2 = true;
5005
5301
  break;
5006
5302
  }
5007
5303
  }
5008
5304
  if (!_copyPossible2) return undefined;
5009
5305
  _copyPossible2 = false;
5010
- for (var _x4 = endColIndex; _x4 <= endColIndex + elementCells.colCount; _x4++) {
5011
- if (isValidCell(_x4, copyStartRowIndex) && (copyStartRowIndex == 0 || !isValidCell(_x4, copyStartRowIndex - 1))) {
5306
+ for (var _x8 = endColIndex; _x8 <= endColIndex + elementCells.colCount; _x8++) {
5307
+ if (isValidCell(_x8, copyStartRowIndex) && (copyStartRowIndex == 0 || !isValidCell(_x8, copyStartRowIndex - 1))) {
5012
5308
  //check also for overhang
5013
- copyEndColIndex = _x4;
5309
+ copyEndColIndex = _x8;
5014
5310
  _copyPossible2 = true;
5015
5311
  } else {
5016
5312
  break; //when you find one situation where it is not valid skip outside.
@@ -5050,16 +5346,16 @@ var BoxPlannerGrid = /*#__PURE__*/function () {
5050
5346
  } else {
5051
5347
  var distToOriginX = 0;
5052
5348
  for (var i = 0; i < cellsStartColIndex; i++) {
5053
- var _plannedElement$size$3, _plannedElement3;
5054
- distToOriginX += (_plannedElement$size$3 = (_plannedElement3 = curGrid[i][0].plannedElement) === null || _plannedElement3 === void 0 ? void 0 : _plannedElement3.size.width) !== null && _plannedElement$size$3 !== void 0 ? _plannedElement$size$3 : 0;
5349
+ var _plannedElement$size$3, _plannedElement4;
5350
+ distToOriginX += (_plannedElement$size$3 = (_plannedElement4 = curGrid[i][0].plannedElement) === null || _plannedElement4 === void 0 ? void 0 : _plannedElement4.size.width) !== null && _plannedElement$size$3 !== void 0 ? _plannedElement$size$3 : 0;
5055
5351
  }
5056
5352
  if (cellsStartColIndex < 0) {
5057
5353
  distToOriginX = -element.getWidth();
5058
5354
  }
5059
5355
  var distToOriginY = 0;
5060
5356
  for (var i = 0; i < cellsStartRowIndex; i++) {
5061
- var _plannedElement$size$4, _plannedElement4;
5062
- distToOriginY += (_plannedElement$size$4 = (_plannedElement4 = curGrid[cellsStartColIndex][i].plannedElement) === null || _plannedElement4 === void 0 ? void 0 : _plannedElement4.size.width) !== null && _plannedElement$size$4 !== void 0 ? _plannedElement$size$4 : 0;
5357
+ var _plannedElement$size$4, _plannedElement5;
5358
+ distToOriginY += (_plannedElement$size$4 = (_plannedElement5 = curGrid[cellsStartColIndex][i].plannedElement) === null || _plannedElement5 === void 0 ? void 0 : _plannedElement5.size.width) !== null && _plannedElement$size$4 !== void 0 ? _plannedElement$size$4 : 0;
5063
5359
  }
5064
5360
  elementLocation.startIndexWorldPos = new index.Vector2(distToOriginX, distToOriginY);
5065
5361
  }
@@ -5106,7 +5402,7 @@ var BoxPlannerGrid = /*#__PURE__*/function () {
5106
5402
  var _ele2, _ele3;
5107
5403
  var movables = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
5108
5404
  var selectedElementId = arguments.length > 1 ? arguments[1] : undefined;
5109
- if (!movables) return this.generalPlanningState;
5405
+ if (!movables || !selectedElementId) return this.generalPlanningState;
5110
5406
  // fill to equal size
5111
5407
  var matrix = this.generalPlanningState.grids[0].matrix;
5112
5408
  var matrixWithMovables = [];
@@ -5153,6 +5449,9 @@ var BoxPlannerGrid = /*#__PURE__*/function () {
5153
5449
  isSupport = !!matrix.find(function (x, idx) {
5154
5450
  return idx >= ele.area.fromX && idx < ele.area.toX && matrix[idx].length > ele.area.toY;
5155
5451
  }); // can't move if there is anything above these cells
5452
+
5453
+ // if it has left and right neighbour and is on the bottom
5454
+ if (ele.area.fromX == 0 && this.getNeighborElements(ele.elementId, 'LEFT').length > 0 && this.getNeighborElements(ele.elementId, 'RIGHT').length > 0) isSupport = true;
5156
5455
  }
5157
5456
  if (isSupport) return this.generalPlanningState;
5158
5457
  for (var x = 0; x < maxWidth; x++) {
@@ -5173,7 +5472,7 @@ var BoxPlannerGrid = /*#__PURE__*/function () {
5173
5472
  if (x >= from && x < to) return;
5174
5473
  var row = matrixWithMovables[x];
5175
5474
  var len = row.length;
5176
- var _x = ele.fromX == 0 ? x : x - 1;
5475
+ var _x = ele.area.fromX == 0 ? x : x - 1;
5177
5476
  row[len] = {
5178
5477
  index: {
5179
5478
  x: _x,
@@ -5186,7 +5485,7 @@ var BoxPlannerGrid = /*#__PURE__*/function () {
5186
5485
  var len = matrixWithMovables.length;
5187
5486
  if (((_ele2 = ele) === null || _ele2 === void 0 ? void 0 : _ele2.area.toX) != matrix.length) matrixWithMovables[len] = [{
5188
5487
  index: {
5189
- x: ele.fromX == 0 ? len : len - 1,
5488
+ x: ele.area.fromX == 0 ? len : len - 1,
5190
5489
  y: 0
5191
5490
  }
5192
5491
  }];
@@ -5210,7 +5509,7 @@ var BoxPlannerGrid = /*#__PURE__*/function () {
5210
5509
  //system 4 useacse
5211
5510
  var totalColCount = matrix[0].length;
5212
5511
  var colSizes = Array(totalColCount).fill(-1);
5213
- var _loop3 = function _loop3(i) {
5512
+ var _loop4 = function _loop4(i) {
5214
5513
  var _matrix$find;
5215
5514
  var cell = (_matrix$find = matrix.find(function (row) {
5216
5515
  var _row$i$plannedElement, _row$i$plannedElement2;
@@ -5224,7 +5523,7 @@ var BoxPlannerGrid = /*#__PURE__*/function () {
5224
5523
  if (colSizes[i] === -1) return 1; // break
5225
5524
  };
5226
5525
  for (var i = 0; i < totalColCount; i++) {
5227
- if (_loop3(i)) break;
5526
+ if (_loop4(i)) break;
5228
5527
  }
5229
5528
  if (colSizes.includes(-1)) LOG$1.error(new Error('Column sizes are not set'));
5230
5529
  return colSizes;
@@ -5287,9 +5586,9 @@ var BoxPlannerGrid = /*#__PURE__*/function () {
5287
5586
  });
5288
5587
  if (!column) {
5289
5588
  matrix.map(function (row) {
5290
- var _row$;
5589
+ var _row$2;
5291
5590
  return row.push({
5292
- index: new index.Vector2(((_row$ = row[0]) === null || _row$ === void 0 ? void 0 : _row$.index.x) || 0, y),
5591
+ index: new index.Vector2(((_row$2 = row[0]) === null || _row$2 === void 0 ? void 0 : _row$2.index.x) || 0, y),
5293
5592
  plannedElement: undefined
5294
5593
  });
5295
5594
  });
@@ -5338,7 +5637,7 @@ var DivaBoxPlanner = /*#__PURE__*/function () {
5338
5637
  key: "initPlanner",
5339
5638
  value: function () {
5340
5639
  var _initPlanner = _asyncToGenerator__default["default"](/*#__PURE__*/_regeneratorRuntime__default["default"].mark(function _callee(setPlanData) {
5341
- var planData, jsonElements, i, jsonElement, elementID, plannerElement, data, highesElemId, _jsonElement, params;
5640
+ var planData, jsonElements, i, jsonElement, elementID, plannerElement, constructionRules, _constructionRules$co, _constructionRules$co2, data, highesElemId, _jsonElement, params;
5342
5641
  return _regeneratorRuntime__default["default"].wrap(function _callee$(_context) {
5343
5642
  while (1) switch (_context.prev = _context.next) {
5344
5643
  case 0:
@@ -5368,7 +5667,20 @@ var DivaBoxPlanner = /*#__PURE__*/function () {
5368
5667
  if (this.nextElementId < elementID + 1) this.nextElementId = elementID + 1;
5369
5668
  this.set.setElementId(jsonElement.basketID, plannerElement.ElementId);
5370
5669
  if (!this.constructionRulesHandler.getConstructionRulesLoaded()) {
5371
- this.constructionRulesHandler.setConstructionRules(this.set.getConstructionRuleOfElementId(plannerElement.ElementId));
5670
+ constructionRules = this.set.getConstructionRuleOfElementId(plannerElement.ElementId);
5671
+ if (constructionRules) {
5672
+ this.boxPlannerGrid.GridSetupParams = {
5673
+ fixCellRasterHeight: 19.2,
5674
+ fixCellRasterWidth: 19.2,
5675
+ forceFixCellRasterSize: (_constructionRules$co = constructionRules.constructionRules.forceFixCellRasterSize) !== null && _constructionRules$co !== void 0 ? _constructionRules$co : true,
5676
+ forceSingleCellPerElement: (_constructionRules$co2 = constructionRules.constructionRules.forceSingleCellPerElement) !== null && _constructionRules$co2 !== void 0 ? _constructionRules$co2 : true,
5677
+ hasMaxGridRasterHeight: constructionRules.constructionRules.hasMaxGridRasterHeight,
5678
+ maxGridRasterHeight: constructionRules.constructionRules.maxGridRasterHeight,
5679
+ hasMaxGridRasterWidth: constructionRules.constructionRules.hasMaxGridRasterWidth,
5680
+ maxGridRasterWidth: constructionRules.constructionRules.maxGridRasterWidth
5681
+ };
5682
+ }
5683
+ this.constructionRulesHandler.setConstructionRules(constructionRules);
5372
5684
  }
5373
5685
  data = this.set.getPlannerData(plannerElement.ElementId);
5374
5686
  if (data) plannerElement.updatePlannerData(data);
@@ -5496,7 +5808,7 @@ var DivaBoxPlanner = /*#__PURE__*/function () {
5496
5808
  key: "addPlannerElement",
5497
5809
  value: (function () {
5498
5810
  var _addPlannerElement = _asyncToGenerator__default["default"](/*#__PURE__*/_regeneratorRuntime__default["default"].mark(function _callee2(basketID, params) {
5499
- var plannerElement, data, constructionRules, _constructionRules$co, _constructionRules$co2;
5811
+ var plannerElement, data, constructionRules, _constructionRules$co3, _constructionRules$co4;
5500
5812
  return _regeneratorRuntime__default["default"].wrap(function _callee2$(_context2) {
5501
5813
  while (1) switch (_context2.prev = _context2.next) {
5502
5814
  case 0:
@@ -5520,8 +5832,8 @@ var DivaBoxPlanner = /*#__PURE__*/function () {
5520
5832
  this.boxPlannerGrid.GridSetupParams = {
5521
5833
  fixCellRasterHeight: 19.2,
5522
5834
  fixCellRasterWidth: 19.2,
5523
- forceFixCellRasterSize: (_constructionRules$co = constructionRules.constructionRules.forceFixCellRasterSize) !== null && _constructionRules$co !== void 0 ? _constructionRules$co : true,
5524
- forceSingleCellPerElement: (_constructionRules$co2 = constructionRules.constructionRules.forceSingleCellPerElement) !== null && _constructionRules$co2 !== void 0 ? _constructionRules$co2 : true,
5835
+ forceFixCellRasterSize: (_constructionRules$co3 = constructionRules.constructionRules.forceFixCellRasterSize) !== null && _constructionRules$co3 !== void 0 ? _constructionRules$co3 : true,
5836
+ forceSingleCellPerElement: (_constructionRules$co4 = constructionRules.constructionRules.forceSingleCellPerElement) !== null && _constructionRules$co4 !== void 0 ? _constructionRules$co4 : true,
5525
5837
  hasMaxGridRasterHeight: constructionRules.constructionRules.hasMaxGridRasterHeight,
5526
5838
  maxGridRasterHeight: constructionRules.constructionRules.maxGridRasterHeight,
5527
5839
  hasMaxGridRasterWidth: constructionRules.constructionRules.hasMaxGridRasterWidth,
@@ -5599,11 +5911,10 @@ var DivaBoxPlanner = /*#__PURE__*/function () {
5599
5911
  value: (function () {
5600
5912
  var _copyPlannerElement = _asyncToGenerator__default["default"](/*#__PURE__*/_regeneratorRuntime__default["default"].mark(function _callee5(articleCopyRelation, copyInfo) {
5601
5913
  var _this = this;
5602
- var gridIsPrepared, plannerElementsToLoadSVG, that, i, cellPos, allDPs, j;
5914
+ var plannerElementsToLoadSVG, that, i, cellPos, allDPs, j;
5603
5915
  return _regeneratorRuntime__default["default"].wrap(function _callee5$(_context5) {
5604
5916
  while (1) switch (_context5.prev = _context5.next) {
5605
5917
  case 0:
5606
- gridIsPrepared = false;
5607
5918
  if (copyInfo) {
5608
5919
  _context5.next = 3;
5609
5920
  break;
@@ -5613,25 +5924,22 @@ var DivaBoxPlanner = /*#__PURE__*/function () {
5613
5924
  if (copyInfo.copyType == 'STD') copyInfo.targetElements = [];
5614
5925
  plannerElementsToLoadSVG = [];
5615
5926
  that = this;
5616
- articleCopyRelation.forEach(function (basketIDNewArticle, elementToCopyId) {
5927
+ articleCopyRelation.forEach(function (val) {
5617
5928
  var _copyInfo$targetEleme;
5618
- if (!gridIsPrepared) {
5619
- if (copyInfo.copyIndex.z == -1) {
5620
- if (!_this.boxPlannerGrid.getPlannerHasActiveBackside()) _this.boxPlannerGrid.prepareGridForBackSideCopy();
5621
- } else {
5622
- _this.boxPlannerGrid.prepareGridForColCopy(elementToCopyId, copyInfo.copyIndex);
5623
- }
5929
+ if (copyInfo.copyIndex.z == -1) {
5930
+ if (!_this.boxPlannerGrid.getPlannerHasActiveBackside()) _this.boxPlannerGrid.prepareGridForBackSideCopy();
5931
+ } else {
5932
+ _this.boxPlannerGrid.prepareGridForColCopy(val.key, copyInfo.copyIndex);
5624
5933
  }
5625
- gridIsPrepared = true;
5626
5934
 
5627
5935
  //Init Planner Element
5628
- var plannerElement = new index.PlannerElementData(_this.set.getSetId(), basketIDNewArticle, _this.nextElementId, DivaBoxPlanner.plannerType);
5936
+ var plannerElement = new index.PlannerElementData(_this.set.getSetId(), val.value, _this.nextElementId, DivaBoxPlanner.plannerType);
5629
5937
  _this.nextElementId++;
5630
- _this.set.setElementId(basketIDNewArticle, plannerElement.ElementId);
5938
+ _this.set.setElementId(val.value, plannerElement.ElementId);
5631
5939
  var data = _this.set.getPlannerData(plannerElement.ElementId);
5632
5940
  plannerElement.updatePlannerData(data);
5633
- _this.boxPlannerGrid.addElementAsCopy(elementToCopyId, plannerElement, copyInfo.copyIndex);
5634
- _this.constructionRulesHandler.onElementCopy(elementToCopyId, plannerElement.getElementId());
5941
+ _this.boxPlannerGrid.addElementAsCopy(val.key, plannerElement, copyInfo.copyIndex);
5942
+ _this.constructionRulesHandler.onElementCopy(val.key, plannerElement.getElementId());
5635
5943
  plannerElementsToLoadSVG.push(plannerElement);
5636
5944
  if (copyInfo.copyType == 'STD') (_copyInfo$targetEleme = copyInfo.targetElements) === null || _copyInfo$targetEleme === void 0 || _copyInfo$targetEleme.push(plannerElement.getElementId());
5637
5945
  });
@@ -5648,7 +5956,7 @@ var DivaBoxPlanner = /*#__PURE__*/function () {
5648
5956
  if (copyInfo.copyIndex.y == 1 && this.constructionRulesHandler.getHasMaxElemCountPerColumn()) {
5649
5957
  //The max height of col is reached
5650
5958
  cellPos = this.boxPlannerGrid.getCellsInGridByElementId(plannerElementsToLoadSVG[i].ElementId);
5651
- if (cellPos.endRowIndex + 1 == that.constructionRulesHandler.getMaxElemCountPerColumn()) {
5959
+ if (cellPos.endRowIndex == that.constructionRulesHandler.getMaxElemCountPerColumn()) {
5652
5960
  allDPs = plannerElementsToLoadSVG[i].getFreeDockingPointsByType('AVO');
5653
5961
  for (j = 0; j < allDPs.length; j++) {
5654
5962
  allDPs[j].disableDP(true);
@@ -5762,7 +6070,7 @@ var DivaBoxPlanner = /*#__PURE__*/function () {
5762
6070
  }
5763
6071
  }
5764
6072
  //remove duplicate
5765
- return Array.from(new Set(allElementsToCopy));
6073
+ return allElementsToCopy;
5766
6074
  }
5767
6075
 
5768
6076
  /**
@@ -5916,42 +6224,58 @@ var DivaBoxPlanner = /*#__PURE__*/function () {
5916
6224
  value: (function () {
5917
6225
  var _updatePlanner = _asyncToGenerator__default["default"](/*#__PURE__*/_regeneratorRuntime__default["default"].mark(function _callee7(changedOPT, targetElements) {
5918
6226
  var _this2 = this;
5919
- var message, cellPos, elemToCheck, copyIndex, allElementsToCopy, _allElementsToCopy, allElementsInBackGrid, _allElementsInBackGrid, _message;
6227
+ var failed, message, cellPos, elemToCheck, copyIndex, allElementsToCopy, _allElementsToCopy, allElementsInBackGrid, _allElementsInBackGrid, _message;
5920
6228
  return _regeneratorRuntime__default["default"].wrap(function _callee7$(_context7) {
5921
6229
  while (1) switch (_context7.prev = _context7.next) {
5922
6230
  case 0:
5923
6231
  LOG.debug('BoxPlanner - configurationHasChanged ' + changedOPT);
6232
+ failed = false;
5924
6233
  targetElements === null || targetElements === void 0 || targetElements.forEach(function (e) {
5925
6234
  var _this2$set$getArticle;
5926
- return _this2.boxPlannerGrid.updateGridElementDimensions(e, (_this2$set$getArticle = _this2.set.getArticleByElementId(e)) === null || _this2$set$getArticle === void 0 ? void 0 : _this2$set$getArticle.plannerData);
6235
+ failed = _this2.boxPlannerGrid.updateGridElementDimensions(e, (_this2$set$getArticle = _this2.set.getArticleByElementId(e)) === null || _this2$set$getArticle === void 0 ? void 0 : _this2$set$getArticle.plannerData);
6236
+ if (failed) return;
6237
+ });
6238
+ if (!failed) {
6239
+ _context7.next = 5;
6240
+ break;
6241
+ }
6242
+ return _context7.abrupt("return", {
6243
+ doDeleteBackGrid: false,
6244
+ elemIdsToDelete: [],
6245
+ viewMessageCodex: "resizeerror",
6246
+ failed: true
5927
6247
  });
6248
+ case 5:
6249
+ this.boxPlannerGrid.updateWorldPosOfElements();
5928
6250
  if (!(changedOPT && targetElements && targetElements.length > 0 && changedOPT['OPTELEMENT'] && (changedOPT['OPTELEMENT'] == 'OPVECK_I' || changedOPT['OPTELEMENT'] == 'OPVECK_A'))) {
5929
- _context7.next = 19;
6251
+ _context7.next = 23;
5930
6252
  break;
5931
6253
  }
5932
6254
  if (!(targetElements.length > 1)) {
5933
- _context7.next = 10;
6255
+ _context7.next = 14;
5934
6256
  break;
5935
6257
  }
5936
- _context7.next = 6;
6258
+ _context7.next = 10;
5937
6259
  return this.constructionRulesHandler.updateOptionLogicBoxPlanner(this.boxPlannerGrid, changedOPT, targetElements, true);
5938
- case 6:
6260
+ case 10:
5939
6261
  message = _context7.sent;
5940
6262
  if (!message) {
5941
- _context7.next = 9;
6263
+ _context7.next = 13;
5942
6264
  break;
5943
6265
  }
5944
6266
  return _context7.abrupt("return", {
5945
6267
  doDeleteBackGrid: false,
5946
6268
  elemIdsToDelete: [],
5947
- viewMessageCodex: message
6269
+ viewMessageCodex: message,
6270
+ failed: false
5948
6271
  });
5949
- case 9:
6272
+ case 13:
5950
6273
  return _context7.abrupt("return", {
5951
6274
  doDeleteBackGrid: false,
5952
- elemIdsToDelete: []
6275
+ elemIdsToDelete: [],
6276
+ failed: false
5953
6277
  });
5954
- case 10:
6278
+ case 14:
5955
6279
  //If the most bottom element has no neighbor right or left - copy element
5956
6280
  cellPos = this.boxPlannerGrid.getCellsInGridByElementId(targetElements[0]);
5957
6281
  elemToCheck = targetElements[0];
@@ -5959,7 +6283,7 @@ var DivaBoxPlanner = /*#__PURE__*/function () {
5959
6283
  elemToCheck = this.boxPlannerGrid.getPlannerElementAtGridPos(cellPos.startColIndex, 0, false).getElementId();
5960
6284
  }
5961
6285
  if (!(!this.boxPlannerGrid.getElementHasLeftElement(elemToCheck) || !this.boxPlannerGrid.getElementHasRightElement(elemToCheck))) {
5962
- _context7.next = 19;
6286
+ _context7.next = 23;
5963
6287
  break;
5964
6288
  }
5965
6289
  //Someone has changed Eck innen or aussen. If the current eselected Element has no neighbor left or right copy neighbor
@@ -5981,6 +6305,7 @@ var DivaBoxPlanner = /*#__PURE__*/function () {
5981
6305
  copyType: 'BoxPlanner_COL'
5982
6306
  });
5983
6307
  return _context7.abrupt("return", {
6308
+ failed: false,
5984
6309
  doDeleteBackGrid: false,
5985
6310
  elemIdsToDelete: [],
5986
6311
  elementIdToCopy: allElementsToCopy,
@@ -5989,17 +6314,17 @@ var DivaBoxPlanner = /*#__PURE__*/function () {
5989
6314
  changedOPT: changedOPT,
5990
6315
  targetElements: targetElements
5991
6316
  });
5992
- case 19:
6317
+ case 23:
5993
6318
  if (!(changedOPT && changedOPT['OPTDMOD'])) {
5994
- _context7.next = 34;
6319
+ _context7.next = 38;
5995
6320
  break;
5996
6321
  }
5997
6322
  _context7.t0 = changedOPT['OPTDMOD'];
5998
- _context7.next = _context7.t0 === 'OPVD_EIN' ? 23 : _context7.t0 === 'OPVD_AUS' ? 27 : 32;
6323
+ _context7.next = _context7.t0 === 'OPVD_EIN' ? 27 : _context7.t0 === 'OPVD_AUS' ? 31 : 36;
5999
6324
  break;
6000
- case 23:
6325
+ case 27:
6001
6326
  if (this.boxPlannerGrid.getPlannerHasActiveBackside()) {
6002
- _context7.next = 26;
6327
+ _context7.next = 30;
6003
6328
  break;
6004
6329
  }
6005
6330
  _allElementsToCopy = this.getPlannerElementsInfluencedByCopy(-1, {
@@ -6011,25 +6336,27 @@ var DivaBoxPlanner = /*#__PURE__*/function () {
6011
6336
  copyType: 'BoxPlanner_backside'
6012
6337
  });
6013
6338
  return _context7.abrupt("return", {
6339
+ failed: false,
6014
6340
  doDeleteBackGrid: false,
6015
6341
  elemIdsToDelete: [],
6016
6342
  elementIdToCopy: _allElementsToCopy,
6017
6343
  copyType: 'BoxPlanner_backside',
6018
6344
  changedOPT: changedOPT
6019
6345
  });
6020
- case 26:
6021
- return _context7.abrupt("break", 32);
6022
- case 27:
6346
+ case 30:
6347
+ return _context7.abrupt("break", 36);
6348
+ case 31:
6023
6349
  if (!this.boxPlannerGrid.getPlannerHasActiveBackside()) {
6024
- _context7.next = 31;
6350
+ _context7.next = 35;
6025
6351
  break;
6026
6352
  }
6027
6353
  allElementsInBackGrid = this.boxPlannerGrid.getAllElementsInBackGrid();
6028
6354
  if (!(allElementsInBackGrid.length > 0)) {
6029
- _context7.next = 31;
6355
+ _context7.next = 35;
6030
6356
  break;
6031
6357
  }
6032
6358
  return _context7.abrupt("return", {
6359
+ failed: false,
6033
6360
  doDeleteBackGrid: true,
6034
6361
  elemIdsToDelete: allElementsInBackGrid.map(function (element) {
6035
6362
  return element.ElementId;
@@ -6037,23 +6364,24 @@ var DivaBoxPlanner = /*#__PURE__*/function () {
6037
6364
  deletionType: 'BoxPlanner_backside',
6038
6365
  changedOPT: changedOPT
6039
6366
  });
6040
- case 31:
6041
- return _context7.abrupt("break", 32);
6042
- case 32:
6043
- _context7.next = 48;
6367
+ case 35:
6368
+ return _context7.abrupt("break", 36);
6369
+ case 36:
6370
+ _context7.next = 52;
6044
6371
  break;
6045
- case 34:
6372
+ case 38:
6046
6373
  if (!(changedOPT && changedOPT['OPTFARBE_RAHMEN'] && changedOPT['OPTFARBE_RAHMEN'] == 'OPVSCHWARZ_MATT' && this.boxPlannerGrid.getPlannerHasActiveBackside())) {
6047
- _context7.next = 40;
6374
+ _context7.next = 44;
6048
6375
  break;
6049
6376
  }
6050
6377
  //If the double modul is active but the color is changed to black - disable double modul
6051
6378
  _allElementsInBackGrid = this.boxPlannerGrid.getAllElementsInBackGrid();
6052
6379
  if (!(_allElementsInBackGrid.length > 0)) {
6053
- _context7.next = 38;
6380
+ _context7.next = 42;
6054
6381
  break;
6055
6382
  }
6056
6383
  return _context7.abrupt("return", {
6384
+ failed: false,
6057
6385
  doDeleteBackGrid: true,
6058
6386
  elemIdsToDelete: _allElementsInBackGrid.map(function (element) {
6059
6387
  return element.ElementId;
@@ -6063,34 +6391,37 @@ var DivaBoxPlanner = /*#__PURE__*/function () {
6063
6391
  targetElements: targetElements,
6064
6392
  viewMessageCodex: 'BOXPLAN_BLACKFRAME_INCOMPATIBLE_ELEMENT_WARNING'
6065
6393
  });
6066
- case 38:
6067
- _context7.next = 48;
6394
+ case 42:
6395
+ _context7.next = 52;
6068
6396
  break;
6069
- case 40:
6070
- _context7.next = 42;
6397
+ case 44:
6398
+ _context7.next = 46;
6071
6399
  return this.constructionRulesHandler.updateOptionLogicBoxPlanner(this.boxPlannerGrid, changedOPT, targetElements);
6072
- case 42:
6400
+ case 46:
6073
6401
  _message = _context7.sent;
6074
6402
  if (!_message) {
6075
- _context7.next = 47;
6403
+ _context7.next = 51;
6076
6404
  break;
6077
6405
  }
6078
6406
  return _context7.abrupt("return", {
6079
6407
  doDeleteBackGrid: false,
6080
6408
  elemIdsToDelete: [],
6081
- viewMessageCodex: _message
6409
+ viewMessageCodex: _message,
6410
+ failed: false
6082
6411
  });
6083
- case 47:
6412
+ case 51:
6084
6413
  return _context7.abrupt("return", {
6085
6414
  doDeleteBackGrid: false,
6086
- elemIdsToDelete: []
6415
+ elemIdsToDelete: [],
6416
+ failed: false
6087
6417
  });
6088
- case 48:
6418
+ case 52:
6089
6419
  return _context7.abrupt("return", {
6090
6420
  doDeleteBackGrid: false,
6091
- elemIdsToDelete: []
6421
+ elemIdsToDelete: [],
6422
+ failed: false
6092
6423
  });
6093
- case 49:
6424
+ case 53:
6094
6425
  case "end":
6095
6426
  return _context7.stop();
6096
6427
  }