@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
@@ -3,11 +3,11 @@ import _classCallCheck from '@babel/runtime/helpers/classCallCheck';
3
3
  import _createClass from '@babel/runtime/helpers/createClass';
4
4
  import _defineProperty from '@babel/runtime/helpers/defineProperty';
5
5
  import _regeneratorRuntime from '@babel/runtime/regenerator';
6
- import { c as Vector2, V as Vector3, P as PlannerElementData, B as BoundingBox } from './index-abafa975.js';
6
+ import { c as Vector2, V as Vector3, P as PlannerElementData, B as BoundingBox } from './index-b7a3a897.js';
7
7
  import DivaUtils, { DivaError, md5 } from '@crystaldesign/diva-utils';
8
8
  import _toConsumableArray from '@babel/runtime/helpers/toConsumableArray';
9
- import { d as dockingPointHandlerInst, h as handler2D } from './PlannerHandler2D-1ae53adb.js';
10
- import '@babel/runtime/helpers/slicedToArray';
9
+ import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
10
+ import { d as dockingPointHandlerInst, h as handler2D } from './PlannerHandler2D-1e940f9f.js';
11
11
  import '@babel/runtime/helpers/objectWithoutProperties';
12
12
  import 'axios';
13
13
  import '@crystaldesign/basket-model';
@@ -1897,15 +1897,27 @@ var ConstructionRulesHandler = /*#__PURE__*/function () {
1897
1897
  }, {
1898
1898
  key: "evalRule",
1899
1899
  value: function evalRule(elementId, rule, optionHandler) {
1900
- var allValid = true;
1900
+ var evaluation = true;
1901
1901
  var splittedAND = rule.split('&');
1902
1902
  for (var andNum = 0; andNum < splittedAND.length; andNum++) {
1903
- var opt = splittedAND[andNum].split('=')[0];
1904
- var opv = splittedAND[andNum].split('=')[1];
1905
- var curOptVal = this.getOptionVal(elementId, opt, optionHandler);
1906
- if (curOptVal && curOptVal != opv) allValid = false;
1903
+ var splittedOr = splittedAND[andNum].split('|');
1904
+ if (splittedOr.length == 1) {
1905
+ var opt = splittedAND[andNum].split('=')[0];
1906
+ var opv = splittedAND[andNum].split('=')[1];
1907
+ var curOptVal = this.getOptionVal(elementId, opt, optionHandler);
1908
+ if (curOptVal && curOptVal != opv) evaluation = false;
1909
+ continue;
1910
+ }
1911
+ var orValuation = false;
1912
+ for (var orNum = 0; orNum < splittedOr.length; orNum++) {
1913
+ var opt = splittedOr[orNum].split('=')[0];
1914
+ var opv = splittedOr[orNum].split('=')[1];
1915
+ var _curOptVal = this.getOptionVal(elementId, opt, optionHandler);
1916
+ if (_curOptVal && _curOptVal == opv) orValuation = true;
1917
+ }
1918
+ if (evaluation) evaluation = orValuation;
1907
1919
  }
1908
- return allValid;
1920
+ return evaluation;
1909
1921
  }
1910
1922
  }, {
1911
1923
  key: "setOptionDoShow",
@@ -1959,6 +1971,18 @@ var ConstructionRulesHandler = /*#__PURE__*/function () {
1959
1971
  if (!this.hideOptionsForConstruction.has(elementId)) this.hideOptionsForConstruction.set(elementId, []);
1960
1972
  (_this$hideOptionsForC2 = this.hideOptionsForConstruction.get(elementId)) === null || _this$hideOptionsForC2 === void 0 || _this$hideOptionsForC2.push(option);
1961
1973
  }
1974
+ }, {
1975
+ key: "setOptionDoCustom",
1976
+ value: function setOptionDoCustom(elementId, option, val, optionHandler) {
1977
+ var _optionHandler$get4, _this$hideOptionsForC3;
1978
+ // LOG.log("Update Box Planner Logic. SetOptionDoHide: elementId: " + elementId + "; Option: " + option);
1979
+ var curOptVisibilityInfo = this.constructionRules.optionsVisibilityInfo[option];
1980
+ if (!curOptVisibilityInfo) return;
1981
+ if (!optionHandler.has(elementId)) optionHandler.set(elementId, new Map());
1982
+ (_optionHandler$get4 = optionHandler.get(elementId)) === null || _optionHandler$get4 === void 0 || _optionHandler$get4.set(option, curOptVisibilityInfo[val]);
1983
+ if (!this.hideOptionsForConstruction.has(elementId)) this.hideOptionsForConstruction.set(elementId, []);
1984
+ (_this$hideOptionsForC3 = this.hideOptionsForConstruction.get(elementId)) === null || _this$hideOptionsForC3 === void 0 || _this$hideOptionsForC3.push(option);
1985
+ }
1962
1986
 
1963
1987
  //Returns all
1964
1988
  }, {
@@ -1999,7 +2023,7 @@ var ConstructionRulesHandler = /*#__PURE__*/function () {
1999
2023
  }
2000
2024
  var allElementIds = boxPlannerGrid.getAllElementIdsInGrid(); //run through front an backside grid
2001
2025
  for (var i = 0; i < allElementIds.length; i++) {
2002
- var _optionHandler$get4;
2026
+ var _optionHandler$get5;
2003
2027
  if (this.hideOptionsForConstruction.has(allElementIds[i]) && this.hideOptionsForConstruction.get(allElementIds[i]).length > 0) {
2004
2028
  while (this.hideOptionsForConstruction.get(allElementIds[i]).length > 0) {
2005
2029
  var optName = this.hideOptionsForConstruction.get(allElementIds[i])[0];
@@ -2088,7 +2112,7 @@ var ConstructionRulesHandler = /*#__PURE__*/function () {
2088
2112
 
2089
2113
  ///Add debug input
2090
2114
  if (!optionHandler.has(allElementIds[i])) optionHandler.set(allElementIds[i], new Map());
2091
- (_optionHandler$get4 = optionHandler.get(allElementIds[i])) === null || _optionHandler$get4 === void 0 || _optionHandler$get4.set('DEBUG', boxPlannerGrid.getElementById(allElementIds[i]).getPosNr() + '');
2115
+ (_optionHandler$get5 = optionHandler.get(allElementIds[i])) === null || _optionHandler$get5 === void 0 || _optionHandler$get5.set('DEBUG', boxPlannerGrid.getElementById(allElementIds[i]).getPosNr() + '');
2092
2116
  if (opvToReset.length > 0) {
2093
2117
  for (var r = 0; r < opvToReset.length; r++) {
2094
2118
  var articleOPV = this.getOptionVal(allElementIds[i], opvToReset[r].opt, optionHandler);
@@ -2368,6 +2392,7 @@ var ConstructionRulesHandler = /*#__PURE__*/function () {
2368
2392
  key: "correctSimpleOpt",
2369
2393
  value: function correctSimpleOpt(xIndex, yIndex, boxPlannerGrid, optionHandler, fromBackside) {
2370
2394
  var curElement = boxPlannerGrid.getPlannerElementAtGridPos(xIndex, yIndex, fromBackside);
2395
+ if (!curElement) return;
2371
2396
  //Schauen ob Element top Element hat.
2372
2397
  if (this.constructionRules.defaultConstructionRules.TOP) {
2373
2398
  var hasTopElement = boxPlannerGrid.getElementHasTopElement(curElement.ElementId);
@@ -2583,23 +2608,22 @@ var ConstructionRulesHandler = /*#__PURE__*/function () {
2583
2608
  }
2584
2609
  }, {
2585
2610
  key: "validateDimensionRule",
2586
- value: function validateDimensionRule(dimRule, boxPlannerSize) {
2611
+ value: function validateDimensionRule(dimension, dimensionLimit, boxPlannerSize, higherLimit, lowerLimit) {
2587
2612
  var isOver = false;
2588
2613
  var isEqual = false;
2589
- if (dimRule.dimension.toLowerCase() == 'height' && boxPlannerSize.y > dimRule.dimensionLimit) isOver = true;
2590
- if (dimRule.dimension.toLowerCase() == 'height' && boxPlannerSize.y == dimRule.dimensionLimit) isEqual = true;
2591
- if (dimRule.dimension.toLowerCase() == 'width' && boxPlannerSize.x > dimRule.dimensionLimit) isOver = true;
2592
- if (dimRule.dimension.toLowerCase() == 'width' && boxPlannerSize.x == dimRule.dimensionLimit) isEqual = true;
2593
- if (dimRule.dimension.toLowerCase() == 'depth' && boxPlannerSize.z > dimRule.dimensionLimit) isOver = true;
2594
- if (dimRule.dimension.toLowerCase() == 'depth' && boxPlannerSize.z == dimRule.dimensionLimit) isEqual = true;
2614
+ if (dimension.toLowerCase() == 'height' && boxPlannerSize.y > dimensionLimit) isOver = true;
2615
+ if (dimension.toLowerCase() == 'height' && boxPlannerSize.y == dimensionLimit) isEqual = true;
2616
+ if (dimension.toLowerCase() == 'width' && boxPlannerSize.x > dimensionLimit) isOver = true;
2617
+ if (dimension.toLowerCase() == 'width' && boxPlannerSize.x == dimensionLimit) isEqual = true;
2618
+ if (dimension.toLowerCase() == 'depth' && boxPlannerSize.z > dimensionLimit) isOver = true;
2619
+ if (dimension.toLowerCase() == 'depth' && boxPlannerSize.z == dimensionLimit) isEqual = true;
2595
2620
  if (isOver) {
2596
- if (dimRule.higherLimit.toLowerCase() == 'doshow') return true;else if (dimRule.higherLimit.toLowerCase() == 'dohide') return false;
2621
+ return higherLimit;
2597
2622
  } else if (isEqual) {
2598
- return true;
2623
+ return higherLimit;
2599
2624
  } else {
2600
- if (dimRule.lowerLimit.toLowerCase() == 'doshow') return true;else if (dimRule.lowerLimit.toLowerCase() == 'dohide') return false;
2625
+ return lowerLimit;
2601
2626
  }
2602
- return false;
2603
2627
  }
2604
2628
 
2605
2629
  /*
@@ -2610,42 +2634,38 @@ var ConstructionRulesHandler = /*#__PURE__*/function () {
2610
2634
  key: "correctOverHangingElement",
2611
2635
  value: function correctOverHangingElement(changedElementId, boxPlannerGrid, optionHandler, changedOPTs) {
2612
2636
  var _this2 = this;
2613
- if (!changedOPTs) return;
2614
- var _loop = function _loop() {
2615
- var elements = boxPlannerGrid.getAllElementsInColumn(columndIdx, false, false); // from bottom to top
2616
- var lastElement = null;
2617
- var changedElementIdx = elements.findIndex(function (e) {
2618
- return e.ElementId == changedElementId;
2619
- });
2620
- elements.forEach(function (element, idx) {
2621
- var _lastElement$Width, _element$Width, _lastElement$Depth, _element$Depth;
2622
- if (!lastElement) {
2623
- lastElement = element;
2624
- return;
2625
- }
2626
- 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)) {
2627
- // is either the above wider opt or the one under and smaller
2628
- var t = Object.entries(changedOPTs);
2629
- var opt = t[0][0];
2630
- var opv = t[0][1];
2631
- if (idx < changedElementIdx) {
2632
- _this2.setOptionValue(element.ElementId, opt, opv, optionHandler);
2633
- } else {
2634
- _this2.setOptionValue(element.ElementId, opt, opv, optionHandler);
2635
- }
2636
- }
2637
- 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)) {
2638
- var _t = Object.entries(changedOPTs); // should be the new wider width that causes the overhanging
2639
- var _opt = _t[0][0];
2640
- var _opv2 = _t[0][1];
2641
- _this2.setOptionValue(element.ElementId, _opt, _opv2, optionHandler);
2642
- }
2643
- lastElement = element;
2644
- });
2645
- };
2646
- for (var columndIdx = 0; columndIdx < boxPlannerGrid.getColumnCount(); columndIdx++) {
2647
- _loop();
2648
- }
2637
+ if (!changedOPTs || !changedElementId) return;
2638
+ var startIdx = boxPlannerGrid.getCellsInGridByElementId(changedElementId).startColIndex;
2639
+ var elements = boxPlannerGrid.getAllElementsInColumn(startIdx, false, true); // from bottom to top
2640
+ var changedElementIdx = elements.findIndex(function (e) {
2641
+ return e.ElementId == changedElementId;
2642
+ });
2643
+ var changedElement = elements[changedElementIdx];
2644
+ if (!changedElement) return; // nothing changed in this row
2645
+ var t = Object.entries(changedOPTs);
2646
+ var opt = t[0][0];
2647
+ var opv = t[0][1];
2648
+ elements.forEach(function (element, idx) {
2649
+ if (idx < changedElementIdx) {
2650
+ //under the changed one
2651
+ var rightNeighbours = boxPlannerGrid.getNeighborElements(element.ElementId, 'RIGHT', false);
2652
+ var freeSpace = element.Width;
2653
+ rightNeighbours.forEach(function (n) {
2654
+ if (n.ElementId == changedElement.ElementId) return;
2655
+ var topElements = boxPlannerGrid.getNeighborElements(n.ElementId, 'TOP', false).filter(function (n) {
2656
+ return n.ElementId != changedElement.ElementId;
2657
+ });
2658
+ var topWidth = topElements.reduce(function (totalwidth, e) {
2659
+ return totalwidth += e.Width;
2660
+ }, 0);
2661
+ if (topWidth < n.Width) freeSpace += n.Width - topWidth;
2662
+ });
2663
+ if (Math.round(changedElement.Width) > Math.round(freeSpace)) _this2.setOptionValue(element.ElementId, opt, opv, optionHandler);
2664
+ } else {
2665
+ // over the changed one
2666
+ if (changedElement.Width < element.Width) _this2.setOptionValue(element.ElementId, opt, opv, optionHandler);
2667
+ }
2668
+ });
2649
2669
  }
2650
2670
  }, {
2651
2671
  key: "correctFoot",
@@ -2653,7 +2673,10 @@ var ConstructionRulesHandler = /*#__PURE__*/function () {
2653
2673
  var _this3 = this;
2654
2674
  var elements = boxPlannerGrid.getAllElementsInFrontGrid();
2655
2675
  elements.forEach(function (e) {
2656
- if (boxPlannerGrid.getElementHasBottomElement(e.ElementId)) _this3.setOptionValue(e.ElementId, 'OPTFUSS_SYS', 'OPVOHNE', optionHandler);
2676
+ if (boxPlannerGrid.getElementHasBottomElement(e.ElementId)) {
2677
+ _this3.setOptionValue(e.ElementId, 'OPTFUSS_SYS', 'OPVOHNE', optionHandler);
2678
+ _this3.setOptionValue(e.ElementId, 'OPTPOSSIBILITY_FUSS_OHNE', 'OPVTRUE', optionHandler);
2679
+ }
2657
2680
  });
2658
2681
  }
2659
2682
 
@@ -2662,30 +2685,49 @@ var ConstructionRulesHandler = /*#__PURE__*/function () {
2662
2685
  * */
2663
2686
  }, {
2664
2687
  key: "correctOptionsInfluencedByDimensions",
2665
- value: function correctOptionsInfluencedByDimensions(boxPlannerGrid, optionHandler) {
2688
+ value: function correctOptionsInfluencedByDimensions(boxPlannerGrid, optionHandler, changedOPTs) {
2666
2689
  var _this4 = this;
2667
2690
  if (!this.constructionRules.optionsInfluencedByDimensions) return;
2668
2691
  var boxPlannerSize = boxPlannerGrid.getSizeOfWholeSet(false);
2669
2692
  var allElements = boxPlannerGrid.getAllElementsInFrontGrid();
2670
- this.constructionRules.optionsInfluencedByDimensions.forEach(function (dimRule) {
2671
- if (Array.isArray(dimRule)) {
2672
- if (dimRule.every(function (rule) {
2673
- return _this4.validateDimensionRule(rule, boxPlannerSize);
2674
- })) dimRule.forEach(function (rule) {
2675
- return allElements.forEach(function (element) {
2676
- return _this4.setOptionDoShow(element.ElementId, rule.option, optionHandler);
2677
- });
2678
- });else dimRule.forEach(function (rule) {
2679
- return allElements.forEach(function (element) {
2680
- return _this4.setOptionDoHide(element.ElementId, rule.option, optionHandler);
2693
+ var setRule = function setRule(option, res) {
2694
+ if (changedOPTs) {
2695
+ var changedOpt = Object.entries(changedOPTs).find(function (_ref) {
2696
+ var _ref2 = _slicedToArray(_ref, 2),
2697
+ key = _ref2[0];
2698
+ _ref2[1];
2699
+ return key == option;
2700
+ });
2701
+ if (changedOpt) {
2702
+ allElements.forEach(function (element) {
2703
+ return _this4.setOptionValue(element.ElementId, changedOpt[0], changedOpt[1], optionHandler);
2681
2704
  });
2705
+ return;
2706
+ }
2707
+ }
2708
+ allElements.forEach(function (element) {
2709
+ return _this4.setOptionDoCustom(element.ElementId, option, res, optionHandler);
2710
+ });
2711
+ };
2712
+ var dim = this.constructionRules.optionsInfluencedByDimensions;
2713
+ dim.forEach(function (dimRule) {
2714
+ if (Array.isArray(dimRule)) {
2715
+ var res = dimRule.every(function (r) {
2716
+ return _this4.validateDimensionRule(r.dimension, r.dimensionLimit, boxPlannerSize, r.higherLimit, r.lowerLimit).toLowerCase() == 'doshow';
2682
2717
  });
2718
+ var t = dimRule[0];
2719
+ if (res) setRule(t.option, 'doShow');else setRule(t.option, 'doHide');
2683
2720
  } else {
2684
- if (_this4.validateDimensionRule(dimRule, boxPlannerSize)) allElements.forEach(function (element) {
2685
- return _this4.setOptionDoShow(element.ElementId, dimRule.option, optionHandler);
2686
- });else allElements.forEach(function (element) {
2687
- return _this4.setOptionDoHide(element.ElementId, dimRule.option, optionHandler);
2688
- });
2721
+ var seriesDimRule = dimRule;
2722
+ var baseDimRule = dimRule;
2723
+ if (seriesDimRule.series) {
2724
+ var _dimRule = seriesDimRule.series.findLast(function (r) {
2725
+ return _this4.validateDimensionRule(r.dimension, r.dimensionLimit, boxPlannerSize, '1', '2') == '1';
2726
+ });
2727
+ if (_dimRule) setRule(seriesDimRule.option, _dimRule.value);
2728
+ } else {
2729
+ setRule(baseDimRule.option, _this4.validateDimensionRule(baseDimRule.option, baseDimRule.dimensionLimit, boxPlannerSize, baseDimRule.higherLimit, baseDimRule.lowerLimit));
2730
+ }
2689
2731
  }
2690
2732
  });
2691
2733
  }
@@ -2759,22 +2801,22 @@ var ConstructionRulesHandler = /*#__PURE__*/function () {
2759
2801
 
2760
2802
  // default => set all to ohne
2761
2803
  serie.forEach(function (element) {
2762
- var _element$Width2;
2763
- seriesWidth += (_element$Width2 = element.Width) !== null && _element$Width2 !== void 0 ? _element$Width2 : 0;
2764
- boxPlannerGrid.getAllElementsDown(element.ElementId).elements.forEach(function (e) {
2804
+ var _element$size$width;
2805
+ seriesWidth += (_element$size$width = element.size.width) !== null && _element$size$width !== void 0 ? _element$size$width : 0;
2806
+ boxPlannerGrid.getAllElementsDown(element.elementId).elements.forEach(function (e) {
2765
2807
  return _this5.setOptionValue(e, coverPlateRule.optABD, 'OPVOHNE', optionHandler);
2766
2808
  });
2767
- _this5.setOptionValue(element.ElementId, coverPlateRule.optABD, 'OPVOHNE', optionHandler);
2809
+ _this5.setOptionValue(element.elementId, coverPlateRule.optABD, 'OPVOHNE', optionHandler);
2768
2810
  });
2769
2811
  var firstUncoveredElement = serie[0];
2770
- var _loop2 = function _loop2() {
2812
+ var _loop = function _loop() {
2771
2813
  var opv = seriesWidthToPlateOpv.findLast(function (stp) {
2772
2814
  // is a clean element ending
2773
2815
  var helperWidth = 0;
2774
2816
  var isClean = false;
2775
2817
  serie.forEach(function (element) {
2776
- var _element$Width3;
2777
- helperWidth += (_element$Width3 = element.Width) !== null && _element$Width3 !== void 0 ? _element$Width3 : 0;
2818
+ var _element$size$width2;
2819
+ helperWidth += (_element$size$width2 = element.size.width) !== null && _element$size$width2 !== void 0 ? _element$size$width2 : 0;
2778
2820
  if (Math.abs(helperWidth - stp.limit) < 1) isClean = true;
2779
2821
  });
2780
2822
  if (stp.limit <= seriesWidth && isClean) return true;
@@ -2783,11 +2825,11 @@ var ConstructionRulesHandler = /*#__PURE__*/function () {
2783
2825
  if (!opv) return {
2784
2826
  v: void 0
2785
2827
  };
2786
- _this5.setOptionValue(firstUncoveredElement.ElementId, coverPlateRule.optABD, opv.plateOpv, optionHandler);
2828
+ _this5.setOptionValue(firstUncoveredElement.elementId, coverPlateRule.optABD, opv.plateOpv, optionHandler);
2787
2829
  var helperWidth = 0;
2788
2830
  firstUncoveredElement = serie.find(function (e) {
2789
- var _e$Width;
2790
- helperWidth += (_e$Width = e.Width) !== null && _e$Width !== void 0 ? _e$Width : 0;
2831
+ var _e$size$width;
2832
+ helperWidth += (_e$size$width = e.size.width) !== null && _e$size$width !== void 0 ? _e$size$width : 0;
2791
2833
  if (helperWidth > opv.limit) return true;
2792
2834
  return false;
2793
2835
  });
@@ -2796,7 +2838,7 @@ var ConstructionRulesHandler = /*#__PURE__*/function () {
2796
2838
  },
2797
2839
  _ret;
2798
2840
  while (seriesWidth != 0) {
2799
- _ret = _loop2();
2841
+ _ret = _loop();
2800
2842
  if (_ret) return _ret.v;
2801
2843
  }
2802
2844
  });
@@ -3069,9 +3111,9 @@ var ConstructionRulesHandler = /*#__PURE__*/function () {
3069
3111
  var allElements = boxPlannerGrid.getAllElementsInGridSortedbyGridPos();
3070
3112
  if (this.constructionRules.correctRetailArticleNumberByRule && this.constructionRules.correctRetailArticleNumberByRule.length > 0) {
3071
3113
  for (var i = 0; i < this.constructionRules.correctRetailArticleNumberByRule.length; i++) {
3072
- var allValid = true;
3073
3114
  var constructionRule = this.constructionRules.correctRetailArticleNumberByRule[i];
3074
3115
  if (constructionRule.range == 'global') {
3116
+ var allValid = true;
3075
3117
  //Do check if all Elements satify the rules
3076
3118
  for (var j = 0; j < allElements.length; j++) {
3077
3119
  if (!allValid) break;
@@ -3084,6 +3126,19 @@ var ConstructionRulesHandler = /*#__PURE__*/function () {
3084
3126
  retailArticleRules: constructionRule.retailArticleRules
3085
3127
  };
3086
3128
  }
3129
+ } else if (constructionRule.range == "singular") {
3130
+ var _allValid = false;
3131
+ //Do check if all Elements satify the rules
3132
+ for (var j = 0; j < allElements.length; j++) {
3133
+ var _valid = this.evalRule(allElements[j].getElementId(), constructionRule.rule, optionHandler);
3134
+ if (_valid) _allValid = true;
3135
+ }
3136
+ if (_allValid) {
3137
+ return {
3138
+ doChange: true,
3139
+ retailArticleRules: constructionRule.retailArticleRules
3140
+ };
3141
+ }
3087
3142
  }
3088
3143
  }
3089
3144
  }
@@ -3123,7 +3178,7 @@ var ConstructionRulesHandler = /*#__PURE__*/function () {
3123
3178
  value: function () {
3124
3179
  var _updateOptionLogicBoxPlanner = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(boxPlannerGrid, changedOPTs, targetElements, forceResetCornerElements) {
3125
3180
  var _targetElements;
3126
- var startTime, resultMessage, optionHandler, allElements, i, _iterator, _step, coverPlateRule, j, doChangeRetailArticleNumbers;
3181
+ var startTime, resultMessage, optionHandler, allElements, i, j, _boxPlannerGrid$getPl2, elementId, _boxPlannerGrid$getPl3, _elementId, _iterator, _step, coverPlateRule, _boxPlannerGrid$getPl4, _elementId2, doChangeRetailArticleNumbers;
3127
3182
  return _regeneratorRuntime.wrap(function _callee$(_context) {
3128
3183
  while (1) switch (_context.prev = _context.next) {
3129
3184
  case 0:
@@ -3158,19 +3213,6 @@ var ConstructionRulesHandler = /*#__PURE__*/function () {
3158
3213
  this.correctBottom(boxPlannerGrid, optionHandler, false);
3159
3214
  if (boxPlannerGrid.getPlannerHasActiveBackside()) this.correctBottom(boxPlannerGrid, optionHandler, true);
3160
3215
  this.correctSeries(boxPlannerGrid, optionHandler);
3161
- if (this.constructionRules.coverPlateRule) {
3162
- _iterator = _createForOfIteratorHelper$1(this.constructionRules.coverPlateRule);
3163
- try {
3164
- for (_iterator.s(); !(_step = _iterator.n()).done;) {
3165
- coverPlateRule = _step.value;
3166
- this.correctCoverPlate(coverPlateRule, boxPlannerGrid, optionHandler);
3167
- }
3168
- } catch (err) {
3169
- _iterator.e(err);
3170
- } finally {
3171
- _iterator.f();
3172
- }
3173
- }
3174
3216
  for (i = 0; i < boxPlannerGrid.getColumnCount(); i++) {
3175
3217
  for (j = 0; j < boxPlannerGrid.getRowCount(i, false); j++) {
3176
3218
  this.correctSimpleOpt(i, j, boxPlannerGrid, optionHandler, false);
@@ -3183,39 +3225,126 @@ var ConstructionRulesHandler = /*#__PURE__*/function () {
3183
3225
  }
3184
3226
  }
3185
3227
  }
3186
- for (i = 0; i < boxPlannerGrid.getColumnCount(); i++) {
3187
- for (j = 0; j < boxPlannerGrid.getRowCount(i, false); j++) {
3188
- this.correctForceOptOfElement(boxPlannerGrid.getPlannerElementAtGridPos(i, j, false).ElementId, boxPlannerGrid, optionHandler, false);
3189
- this.correctNeighborCustomOLTs(boxPlannerGrid.getPlannerElementAtGridPos(i, j, false).ElementId, boxPlannerGrid, optionHandler);
3190
- }
3228
+ i = 0;
3229
+ case 17:
3230
+ if (!(i < boxPlannerGrid.getColumnCount())) {
3231
+ _context.next = 31;
3232
+ break;
3191
3233
  }
3192
- if (boxPlannerGrid.getPlannerHasActiveBackside()) {
3193
- for (i = boxPlannerGrid.getColumnCount() - 1; i >= 0; i--) {
3194
- for (j = 0; j < boxPlannerGrid.getRowCount(i, false); j++) {
3195
- this.correctForceOptOfElement(boxPlannerGrid.getPlannerElementAtGridPos(i, j, true).ElementId, boxPlannerGrid, optionHandler, true);
3196
- this.correctNeighborCustomOLTs(boxPlannerGrid.getPlannerElementAtGridPos(i, j, true).ElementId, boxPlannerGrid, optionHandler);
3197
- }
3198
- }
3234
+ j = 0;
3235
+ case 19:
3236
+ if (!(j < boxPlannerGrid.getRowCount(i, false))) {
3237
+ _context.next = 28;
3238
+ break;
3239
+ }
3240
+ elementId = (_boxPlannerGrid$getPl2 = boxPlannerGrid.getPlannerElementAtGridPos(i, j, false)) === null || _boxPlannerGrid$getPl2 === void 0 ? void 0 : _boxPlannerGrid$getPl2.ElementId;
3241
+ if (elementId) {
3242
+ _context.next = 23;
3243
+ break;
3244
+ }
3245
+ return _context.abrupt("continue", 25);
3246
+ case 23:
3247
+ this.correctForceOptOfElement(elementId, boxPlannerGrid, optionHandler, false);
3248
+ this.correctNeighborCustomOLTs(elementId, boxPlannerGrid, optionHandler);
3249
+ case 25:
3250
+ j++;
3251
+ _context.next = 19;
3252
+ break;
3253
+ case 28:
3254
+ i++;
3255
+ _context.next = 17;
3256
+ break;
3257
+ case 31:
3258
+ if (!boxPlannerGrid.getPlannerHasActiveBackside()) {
3259
+ _context.next = 47;
3260
+ break;
3261
+ }
3262
+ i = boxPlannerGrid.getColumnCount() - 1;
3263
+ case 33:
3264
+ if (!(i >= 0)) {
3265
+ _context.next = 47;
3266
+ break;
3199
3267
  }
3268
+ j = 0;
3269
+ case 35:
3270
+ if (!(j < boxPlannerGrid.getRowCount(i, false))) {
3271
+ _context.next = 44;
3272
+ break;
3273
+ }
3274
+ _elementId = (_boxPlannerGrid$getPl3 = boxPlannerGrid.getPlannerElementAtGridPos(i, j, false)) === null || _boxPlannerGrid$getPl3 === void 0 ? void 0 : _boxPlannerGrid$getPl3.ElementId;
3275
+ if (_elementId) {
3276
+ _context.next = 39;
3277
+ break;
3278
+ }
3279
+ return _context.abrupt("continue", 41);
3280
+ case 39:
3281
+ this.correctForceOptOfElement(_elementId, boxPlannerGrid, optionHandler, true);
3282
+ this.correctNeighborCustomOLTs(_elementId, boxPlannerGrid, optionHandler);
3283
+ case 41:
3284
+ j++;
3285
+ _context.next = 35;
3286
+ break;
3287
+ case 44:
3288
+ i--;
3289
+ _context.next = 33;
3290
+ break;
3291
+ case 47:
3200
3292
  this.correctFoot(boxPlannerGrid, optionHandler);
3201
3293
  this.correctLadder(boxPlannerGrid, optionHandler);
3202
- this.correctOptionsInfluencedByDimensions(boxPlannerGrid, optionHandler);
3294
+ this.correctOptionsInfluencedByDimensions(boxPlannerGrid, optionHandler, changedOPTs);
3203
3295
  this.correctOverHangingElement((_targetElements = targetElements) === null || _targetElements === void 0 ? void 0 : _targetElements[0], boxPlannerGrid, optionHandler, changedOPTs);
3204
3296
  this.partlistHelper.calculateKnots(boxPlannerGrid, optionHandler);
3205
3297
  this.partlistHelper.calculateRahmen(boxPlannerGrid, optionHandler);
3206
- for (i = 0; i < boxPlannerGrid.getColumnCount(); i++) {
3207
- for (j = 0; j < boxPlannerGrid.getRowCount(i, false); j++) {
3208
- this.correctBack(boxPlannerGrid, optionHandler, boxPlannerGrid.getPlannerElementAtGridPos(i, j, false).getElementId());
3298
+ if (this.constructionRules.coverPlateRule) {
3299
+ _iterator = _createForOfIteratorHelper$1(this.constructionRules.coverPlateRule);
3300
+ try {
3301
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
3302
+ coverPlateRule = _step.value;
3303
+ this.correctCoverPlate(coverPlateRule, boxPlannerGrid, optionHandler);
3304
+ }
3305
+ } catch (err) {
3306
+ _iterator.e(err);
3307
+ } finally {
3308
+ _iterator.f();
3209
3309
  }
3210
3310
  }
3311
+ i = 0;
3312
+ case 55:
3313
+ if (!(i < boxPlannerGrid.getColumnCount())) {
3314
+ _context.next = 68;
3315
+ break;
3316
+ }
3317
+ j = 0;
3318
+ case 57:
3319
+ if (!(j < boxPlannerGrid.getRowCount(i, false))) {
3320
+ _context.next = 65;
3321
+ break;
3322
+ }
3323
+ _elementId2 = (_boxPlannerGrid$getPl4 = boxPlannerGrid.getPlannerElementAtGridPos(i, j, false)) === null || _boxPlannerGrid$getPl4 === void 0 ? void 0 : _boxPlannerGrid$getPl4.getElementId();
3324
+ if (_elementId2) {
3325
+ _context.next = 61;
3326
+ break;
3327
+ }
3328
+ return _context.abrupt("continue", 62);
3329
+ case 61:
3330
+ this.correctBack(boxPlannerGrid, optionHandler, _elementId2);
3331
+ case 62:
3332
+ j++;
3333
+ _context.next = 57;
3334
+ break;
3335
+ case 65:
3336
+ i++;
3337
+ _context.next = 55;
3338
+ break;
3339
+ case 68:
3211
3340
  doChangeRetailArticleNumbers = this.doChangeRetailArticleNumbers(boxPlannerGrid, optionHandler);
3212
- _context.next = 29;
3341
+ _context.next = 71;
3213
3342
  return this.updateCfgValuesByPlanner(optionHandler, undefined, this.constructionRules.partlistRules.bundleRules, doChangeRetailArticleNumbers);
3214
- case 29:
3343
+ case 71:
3215
3344
  LOG$2.debug('BoxPlanner updateOptionLogic - Duration after setting Option Values of all Articles: ' + (new Date().getTime() - startTime));
3216
3345
  LOG$2.debug('BoxPlanner updateOptionLogic - Duration after setting updating configurator: ' + (new Date().getTime() - startTime));
3217
3346
  return _context.abrupt("return", resultMessage);
3218
- case 32:
3347
+ case 74:
3219
3348
  case "end":
3220
3349
  return _context.stop();
3221
3350
  }
@@ -3343,7 +3472,7 @@ var BoxPlannerGrid = /*#__PURE__*/function () {
3343
3472
  var cells = [];
3344
3473
  for (var i = 0; i < colCount; i++) {
3345
3474
  for (var j = 0; j < rowCount; j++) {
3346
- var _cell = {
3475
+ var _cell2 = {
3347
3476
  plannedElement: {
3348
3477
  basketId: newElement.getBasketId(),
3349
3478
  elementId: newElement.getElementId(),
@@ -3362,7 +3491,7 @@ var BoxPlannerGrid = /*#__PURE__*/function () {
3362
3491
  },
3363
3492
  index: new Vector2(startColIndex + i, startRowIndex + j)
3364
3493
  };
3365
- cells.push(_cell);
3494
+ cells.push(_cell2);
3366
3495
  }
3367
3496
  }
3368
3497
  return cells;
@@ -3427,7 +3556,7 @@ var BoxPlannerGrid = /*#__PURE__*/function () {
3427
3556
  key: "getGridColumnWidth",
3428
3557
  value: function getGridColumnWidth(x) {
3429
3558
  var frontGrid = this.generalPlanningState.grids[0].matrix;
3430
- for (var y = 0; x < frontGrid[y].length; x++) {
3559
+ for (var y = 0; y < frontGrid[y].length; y++) {
3431
3560
  var _plannedElement$size$, _plannedElement;
3432
3561
  var cell = frontGrid[x][y];
3433
3562
  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;
@@ -3651,10 +3780,10 @@ var BoxPlannerGrid = /*#__PURE__*/function () {
3651
3780
  }
3652
3781
  for (var i = 0; i < backGrid.length; i++) {
3653
3782
  for (var j = 0; j < backGrid[i].length; j++) {
3654
- var _cell2$plannedElement;
3655
- var _cell2 = backGrid[i][j];
3656
- var _elementId = (_cell2$plannedElement = _cell2.plannedElement) === null || _cell2$plannedElement === void 0 ? void 0 : _cell2$plannedElement.elementId;
3657
- if (_cell2 && _elementId && allCheckedElementIds.indexOf(_elementId) == -1) {
3783
+ var _cell3$plannedElement;
3784
+ var _cell3 = backGrid[i][j];
3785
+ var _elementId = (_cell3$plannedElement = _cell3.plannedElement) === null || _cell3$plannedElement === void 0 ? void 0 : _cell3$plannedElement.elementId;
3786
+ if (_cell3 && _elementId && allCheckedElementIds.indexOf(_elementId) == -1) {
3658
3787
  var _element = this.getElementById(_elementId);
3659
3788
  allCheckedElementIds.push(_elementId);
3660
3789
  returnElements.push(_element);
@@ -3918,10 +4047,10 @@ var BoxPlannerGrid = /*#__PURE__*/function () {
3918
4047
  }
3919
4048
  } else {
3920
4049
  for (var i = curGrid[index].length - 1; i >= 0; i--) {
3921
- var _cell3$plannedElement;
3922
- var _cell3 = curGrid[index][i];
3923
- var _elementId4 = _cell3 === null || _cell3 === void 0 || (_cell3$plannedElement = _cell3.plannedElement) === null || _cell3$plannedElement === void 0 ? void 0 : _cell3$plannedElement.elementId;
3924
- if (_cell3 && _elementId4 && allElementIds.indexOf(_elementId4) == -1) {
4050
+ var _cell4$plannedElement;
4051
+ var _cell4 = curGrid[index][i];
4052
+ var _elementId4 = _cell4 === null || _cell4 === void 0 || (_cell4$plannedElement = _cell4.plannedElement) === null || _cell4$plannedElement === void 0 ? void 0 : _cell4$plannedElement.elementId;
4053
+ if (_cell4 && _elementId4 && allElementIds.indexOf(_elementId4) == -1) {
3925
4054
  allElementIds.push(_elementId4);
3926
4055
  allElements.push(this.plannerElements.get(_elementId4));
3927
4056
  }
@@ -4010,31 +4139,90 @@ var BoxPlannerGrid = /*#__PURE__*/function () {
4010
4139
  }, {
4011
4140
  key: "getNeighborElements",
4012
4141
  value: function getNeighborElements(elementId, dir) {
4013
- var _curGrid$area$toX, _curGrid$area$toX2, _curGrid2, _curGrid3, _curGrid$area$fromX, _topNeighbour$planned, _curGrid$area$fromX2, _downNeighbour$planne;
4142
+ var _this = this,
4143
+ _curGrid$area$fromX,
4144
+ _downNeighbour$planne;
4145
+ var clean = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
4014
4146
  var res = this.getCellsInGridByElementId(elementId);
4015
4147
  var curGrid = res.backside ? this.generalPlanningState.grids[1].matrix : this.generalPlanningState.grids[0].matrix;
4016
4148
  var result = [];
4017
4149
  var plannedElement = res.cells[0].plannedElement;
4018
4150
  if (!plannedElement) return result;
4151
+ var currentRow = curGrid[plannedElement.area.fromX];
4152
+ var startHeight = 0;
4153
+ var endHeight = 0;
4154
+ for (var y = 0; y < currentRow.length;) {
4155
+ var cell = currentRow[y];
4156
+ if (cell.index.y < res.startRowIndex) startHeight = Math.round((startHeight + cell.plannedElement.size.height) * 1000) / 1000;
4157
+ if (cell.index.y < res.endRowIndex) endHeight = Math.round((endHeight + cell.plannedElement.size.height) * 1000) / 1000;
4158
+ y = cell.plannedElement.area.toY;
4159
+ }
4160
+ var neighbourSize = 0;
4161
+ var neighbours = [];
4019
4162
  switch (dir) {
4020
4163
  case 'RIGHT':
4021
4164
  // only clean neighbours (for docking) add property if you also need clean ones
4022
- 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;
4023
- 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;
4024
- if (rLowestNeighbour == rHighestNeighbour && rLowestNeighbour) result.push(this.plannerElements.get(rLowestNeighbour));
4165
+
4166
+ for (var x = plannedElement.area.toX; x < curGrid.length;) {
4167
+ var _neighbourRow$0$plann, _neighbourRow$0$plann2;
4168
+ var neighbourRow = curGrid[x];
4169
+ for (var _y = 0; _y < neighbourRow.length;) {
4170
+ var _cell5$plannedElement, _cell5$plannedElement2;
4171
+ var _cell5 = neighbourRow[_y];
4172
+ if (neighbours.includes(_cell5)) continue;
4173
+
4174
+ // cubo has ladders that cause the first box to range all to the top, therefore the height computation won't work
4175
+ 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);
4176
+ neighbourSize = Math.round((neighbourSize + _cell5.plannedElement.size.height) * 1000) / 1000;
4177
+ _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;
4178
+ }
4179
+ neighbourSize = 0;
4180
+ 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;
4181
+ }
4182
+ neighbours.forEach(function (n) {
4183
+ return !result.find(function (r) {
4184
+ return r.ElementId == n.plannedElement.elementId;
4185
+ }) && result.push(_this.plannerElements.get(n.plannedElement.elementId));
4186
+ });
4025
4187
  break;
4026
4188
  case 'LEFT':
4027
- 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;
4028
- 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;
4029
- if (lowestNeighbour == highestNeighbour && lowestNeighbour) result.push(this.plannerElements.get(lowestNeighbour));
4189
+ for (var _x2 = plannedElement.area.fromX - 1; _x2 > 0;) {
4190
+ var _neighbourRow = curGrid[_x2];
4191
+ for (var _y2 = 0; _y2 < _neighbourRow.length;) {
4192
+ var _cell6$plannedElement, _cell6$plannedElement2;
4193
+ var _cell6 = _neighbourRow[_y2];
4194
+ if (neighbours.includes(_cell6)) continue;
4195
+ 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);
4196
+ neighbourSize = Math.round((neighbourSize + _cell6.plannedElement.size.height) * 1000) / 1000;
4197
+ _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;
4198
+ }
4199
+ neighbourSize = 0;
4200
+ _x2 = _neighbourRow[0].plannedElement ? _neighbourRow[0].plannedElement.area.fromX - 1 : _x2 + 1;
4201
+ }
4202
+ neighbours.forEach(function (n) {
4203
+ return !result.find(function (r) {
4204
+ return r.ElementId == n.plannedElement.elementId;
4205
+ }) && result.push(_this.plannerElements.get(n.plannedElement.elementId));
4206
+ });
4030
4207
  break;
4031
4208
  case 'TOP':
4032
- var topNeighbour = (_curGrid$area$fromX = curGrid[plannedElement.area.fromX]) === null || _curGrid$area$fromX === void 0 ? void 0 : _curGrid$area$fromX[plannedElement.area.toY];
4033
- var tElementId = topNeighbour === null || topNeighbour === void 0 || (_topNeighbour$planned = topNeighbour.plannedElement) === null || _topNeighbour$planned === void 0 ? void 0 : _topNeighbour$planned.elementId;
4034
- if (tElementId) result.push(this.plannerElements.get(tElementId));
4209
+ var topNeighbours = [];
4210
+ for (var _x3 = plannedElement.area.fromX; _x3 < plannedElement.area.toX;) {
4211
+ var _cell7 = curGrid[_x3][plannedElement.area.toY];
4212
+ if (!_cell7) break;
4213
+ topNeighbours.push(_cell7);
4214
+ if (clean) break;
4215
+ _x3 = _cell7.plannedElement.area.toX;
4216
+ }
4217
+ if (topNeighbours.length == 0) break;
4218
+ topNeighbours.forEach(function (topNeighbour) {
4219
+ var _plannedElement3;
4220
+ var tElementId = (_plannedElement3 = topNeighbour.plannedElement) === null || _plannedElement3 === void 0 ? void 0 : _plannedElement3.elementId;
4221
+ if (tElementId) result.push(_this.plannerElements.get(tElementId));
4222
+ });
4035
4223
  break;
4036
4224
  case 'DOWN':
4037
- var downNeighbour = (_curGrid$area$fromX2 = curGrid[plannedElement.area.fromX]) === null || _curGrid$area$fromX2 === void 0 ? void 0 : _curGrid$area$fromX2[plannedElement.area.fromY - 1];
4225
+ var downNeighbour = (_curGrid$area$fromX = curGrid[plannedElement.area.fromX]) === null || _curGrid$area$fromX === void 0 ? void 0 : _curGrid$area$fromX[plannedElement.area.fromY - 1];
4038
4226
  var dElementId = downNeighbour === null || downNeighbour === void 0 || (_downNeighbour$planne = downNeighbour.plannedElement) === null || _downNeighbour$planne === void 0 ? void 0 : _downNeighbour$planne.elementId;
4039
4227
  if (dElementId) result.push(this.plannerElements.get(dElementId));
4040
4228
  break;
@@ -4100,16 +4288,16 @@ var BoxPlannerGrid = /*#__PURE__*/function () {
4100
4288
  var checkedElementIds = [];
4101
4289
  var frontGrid = this.generalPlanningState.grids[0].matrix;
4102
4290
  for (var x = 0; x < frontGrid.length;) {
4103
- var _row$0$plannedElement, _row$0$plannedElement2;
4291
+ var _row$0$plannedElement, _row$;
4104
4292
  var curHeight = 0;
4105
4293
  var row = frontGrid[x];
4106
4294
  for (var y = 0; y < row.length;) {
4107
- var _cell4, _cell$plannedElement$, _cell$plannedElement8;
4295
+ var _cell8, _cell$plannedElement$, _cell$plannedElement8;
4108
4296
  var cell = row[y];
4109
- var elementId = (_cell4 = cell) === null || _cell4 === void 0 || (_cell4 = _cell4.plannedElement) === null || _cell4 === void 0 ? void 0 : _cell4.elementId;
4297
+ var elementId = (_cell8 = cell) === null || _cell8 === void 0 || (_cell8 = _cell8.plannedElement) === null || _cell8 === void 0 ? void 0 : _cell8.elementId;
4110
4298
  if (elementId && cell && checkedElementIds.indexOf(elementId) == -1) {
4111
4299
  curHeight += this.plannerElements.get(elementId).getHeight();
4112
- if (x == 0 && y == 0) depth = this.plannerElements.get(elementId).getDepth();
4300
+ if (x == 0 && y == 0) depth = cell.plannedElement.size.depth;
4113
4301
  }
4114
4302
  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;
4115
4303
  }
@@ -4120,7 +4308,7 @@ var BoxPlannerGrid = /*#__PURE__*/function () {
4120
4308
  if (curWidth == 77.9) curWidth = 75;else if (curWidth == 40.4) curWidth = 37.5;else if (curWidth == 21.7) curWidth = 18.75;
4121
4309
  }
4122
4310
  width += curWidth;
4123
- 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;
4311
+ 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;
4124
4312
  }
4125
4313
  if (this.hasActiveBackside) depth *= 2;
4126
4314
  return new Vector3(width, height, depth);
@@ -4136,9 +4324,11 @@ var BoxPlannerGrid = /*#__PURE__*/function () {
4136
4324
  var onBottom = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
4137
4325
  if (this.hasActiveBackside) throw new Error('this function is doesnt implement the backside logic (yet)');
4138
4326
  var result = [];
4327
+ var grid = this.generalPlanningState.grids[0].matrix;
4139
4328
  var lastHeight = -1;
4140
- for (var x = 0; x < this.getColumnCount();) {
4141
- var row = this.generalPlanningState.grids[0].matrix[x];
4329
+ for (var x = 0; x < grid.length;) {
4330
+ var _grid$new_x;
4331
+ var row = grid[x];
4142
4332
  var height = 0;
4143
4333
  for (var y = 0; y < row.length;) {
4144
4334
  var element = row[y].plannedElement;
@@ -4147,12 +4337,20 @@ var BoxPlannerGrid = /*#__PURE__*/function () {
4147
4337
  }
4148
4338
  if (Math.round(height) == Math.round(lastHeight) || onBottom) {
4149
4339
  if (!result[result.length - 1]) result.push([]);
4150
- result[result.length - 1].push(this.getPlannerElementAtGridPos(x, row.length - 1, false));
4151
- } else {
4152
- result.push([this.getPlannerElementAtGridPos(x, row.length - 1, false)]);
4340
+ result[result.length - 1].push(grid[x][onBottom ? 0 : row.length - 1].plannedElement);
4341
+ } else if (grid[x][row.length - 1].plannedElement.area.fromX == x) {
4342
+ result.push([grid[x][onBottom ? 0 : row.length - 1].plannedElement]);
4153
4343
  }
4154
4344
  lastHeight = height;
4155
- x = row[row.length - 1].plannedElement ? row[row.length - 1].plannedElement.area.toX : x + 1;
4345
+ var new_x = row[row.length - 1].plannedElement.area.toX;
4346
+ var newHeight = (_grid$new_x = grid[new_x]) === null || _grid$new_x === void 0 ? void 0 : _grid$new_x.length;
4347
+
4348
+ // if the next row is fx. lower and doesn't have a clean cut here we need to skip more
4349
+ if (newHeight && newHeight != row.length) {
4350
+ var cell = grid[new_x][newHeight - 1];
4351
+ if (cell.index.x != cell.plannedElement.area.fromX) new_x = cell.plannedElement.area.toX;
4352
+ }
4353
+ x = new_x;
4156
4354
  }
4157
4355
  return result;
4158
4356
  }
@@ -4198,42 +4396,63 @@ var BoxPlannerGrid = /*#__PURE__*/function () {
4198
4396
  }, {
4199
4397
  key: "getAllElementsToFillUp",
4200
4398
  value: function getAllElementsToFillUp(elementId, dir) {
4201
- var _this = this;
4399
+ var _this2 = this;
4202
4400
  var curPos = this.getCellsInGridByElementId(elementId);
4203
4401
 
4204
4402
  //columns and rows are swapped don't ask me why
4205
4403
  var element = curPos.cells[0].plannedElement;
4206
4404
  var index = {
4207
- x: curPos.startColIndex,
4405
+ x: dir == 'LEFT' ? curPos.startColIndex : curPos.endColIndex - 1,
4208
4406
  y: curPos.startRowIndex
4209
4407
  };
4210
4408
  var curGrid = curPos.backside ? this.generalPlanningState.grids[1].matrix : this.generalPlanningState.grids[0].matrix;
4211
4409
  var plannerIdsToFill = [];
4212
- var existingPlannerIds = [];
4213
- var _loop = function _loop(_y) {
4214
- var _curGrid$index$x$_y;
4215
- var elementToCopy = (_curGrid$index$x$_y = curGrid[index.x][_y]) === null || _curGrid$index$x$_y === void 0 ? void 0 : _curGrid$index$x$_y.plannedElement;
4216
- if (!elementToCopy) {
4217
- y = _y;
4218
- return 1;
4219
- } // break
4220
- var length = element.area.toX - element.area.fromX;
4221
- var d = dir == 'RIGHT' ? +length : -length;
4222
- var isPlanned = curGrid.every(function (x, idx) {
4223
- var _x$_y;
4224
- 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);
4225
- });
4226
- var neighbour = _this.getNeighborElements(elementToCopy.elementId, dir);
4227
- if (neighbour.length == 0 && !isPlanned && elementToCopy) plannerIdsToFill.push(elementToCopy.elementId);else if (elementToCopy) existingPlannerIds.push(elementToCopy.elementId);
4228
- _y = elementToCopy.area.toY;
4229
- y = _y;
4230
- };
4231
- for (var y = 0; y <= index.y;) {
4232
- if (_loop(y)) break;
4410
+ var length = element.area.toX - element.area.fromX;
4411
+ var d = dir == 'RIGHT' ? +length : -length;
4412
+ plannerIdsToFill.push(element.elementId);
4413
+ _objectSpread(_objectSpread({}, element.area), {}, {
4414
+ fromX: element.area.fromX + d,
4415
+ toX: element.area.toX + d
4416
+ });
4417
+ var _loop = function _loop(_y3) {
4418
+ var _curGrid$index$x$_y;
4419
+ var supportElement = (_curGrid$index$x$_y = curGrid[index.x][_y3]) === null || _curGrid$index$x$_y === void 0 ? void 0 : _curGrid$index$x$_y.plannedElement;
4420
+ if (!supportElement) {
4421
+ y = _y3;
4422
+ return 0;
4423
+ } // break
4424
+ var topElements = _this2.getNeighborElements(supportElement.elementId, 'TOP', false);
4425
+ var topWidth = 0;
4426
+ topElements.forEach(function (t) {
4427
+ return topWidth += t.Width;
4428
+ });
4429
+ var freeSpace = 0;
4430
+ if (supportElement.size.width > topWidth) freeSpace = supportElement.size.width - topWidth;
4431
+ var neighbours = _this2.getNeighborElements(supportElement.elementId, dir, false);
4432
+ neighbours.forEach(function (n) {
4433
+ if (_this2.getNeighborElements(n.ElementId, 'TOP').length > 0) return;
4434
+ freeSpace += n.Width;
4435
+ });
4436
+ if (freeSpace >= element.size.width) {
4437
+ y = _y3;
4438
+ return 0;
4439
+ } // break
4440
+ var missingWidth = element.size.width - freeSpace;
4441
+ while (missingWidth > 0) {
4442
+ plannerIdsToFill.push(supportElement.elementId);
4443
+ missingWidth = Math.round(missingWidth - supportElement.size.width);
4444
+ }
4445
+ _y3 = supportElement.area.fromY - 1;
4446
+ y = _y3;
4447
+ },
4448
+ _ret;
4449
+ for (var y = index.y - 1; y >= 0;) {
4450
+ _ret = _loop(y);
4451
+ if (_ret === 0) break;
4233
4452
  }
4234
4453
  // if there is nothing to fill we copy everyting
4235
4454
  return {
4236
- elements: plannerIdsToFill.length == 0 ? existingPlannerIds : plannerIdsToFill,
4455
+ elements: plannerIdsToFill.reverse(),
4237
4456
  backside: curPos.backside
4238
4457
  };
4239
4458
  }
@@ -4329,11 +4548,32 @@ var BoxPlannerGrid = /*#__PURE__*/function () {
4329
4548
  // [][] -> | [][][]
4330
4549
  // [][] | [][][]
4331
4550
  // [][][] | [][][][]
4332
- function moveGrid(plannedCells) {
4551
+ var moveGrid = function moveGrid(plannedCells) {
4333
4552
  var grid = new Array();
4334
4553
  var rightNeighbour = plannedCells.filter(function (c) {
4335
4554
  return c.index.x == element.area.toX;
4336
4555
  });
4556
+ var col = [];
4557
+ var support = [];
4558
+ var _loop2 = function _loop2() {
4559
+ var c = frontGrid[x][element.area.fromY];
4560
+ var s = frontGrid[x][element.area.fromY - 1];
4561
+ if (c && !col.find(function (_c) {
4562
+ return _c.plannedElement.elementId == c.plannedElement.elementId;
4563
+ })) col.push(frontGrid[x][element.area.fromY]);
4564
+ if (s && !support.find(function (_c) {
4565
+ return _c.plannedElement.elementId == s.plannedElement.elementId;
4566
+ })) support.push(frontGrid[x][element.area.fromY - 1]);
4567
+ };
4568
+ for (var x = 0; x < frontGrid.length; x++) {
4569
+ _loop2();
4570
+ }
4571
+ var sizeXTop = col.reduce(function (acc, n) {
4572
+ return acc += n.plannedElement.size.width;
4573
+ }, 0);
4574
+ var sizeXUnder = support ? support.reduce(function (acc, n) {
4575
+ return acc += n.plannedElement.size.width;
4576
+ }, 0) : 0;
4337
4577
  var rightNeighbourOfCopy = rightNeighbour.find(function (c) {
4338
4578
  return c.index.y == absoluteCopyIndex.y;
4339
4579
  });
@@ -4345,7 +4585,9 @@ var BoxPlannerGrid = /*#__PURE__*/function () {
4345
4585
  });
4346
4586
  plannedCells.forEach(function (cell) {
4347
4587
  // if we can't fill up (need to move the grid)
4348
- if (cell.index.x >= absoluteCopyIndex.x && (copyDirectionIsRight && (rightNeighbourOfCopy || rightNeighbour.length == 0) || !copyDirectionIsRight && (leftNeighbourOfCopy || leftNeighbour.length == 0) || absoluteCopyIndex.x == -1)) {
4588
+ if (cell.index.x >= absoluteCopyIndex.x && (copyDirectionIsRight && (rightNeighbourOfCopy || rightNeighbour.length == 0) && (
4589
+ // no free space or on the right height == move
4590
+ !(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)) {
4349
4591
  cell.index.x += widthCopyArea;
4350
4592
  cell.plannedElement.area.fromX += widthCopyArea;
4351
4593
  cell.plannedElement.area.toX += widthCopyArea;
@@ -4354,13 +4596,13 @@ var BoxPlannerGrid = /*#__PURE__*/function () {
4354
4596
  grid[cell.index.x][cell.index.y] = cell;
4355
4597
  });
4356
4598
  return grid;
4357
- }
4599
+ };
4358
4600
  frontGrid = moveGrid(this.getAllUsedCellsInGrid(false));
4359
4601
  for (var x = 0; x < widthCopyArea; x++) if (!frontGrid[absoluteCopyIndex.x + x]) frontGrid[absoluteCopyIndex.x + x] = [];
4360
4602
  this.generalPlanningState.grids[0].matrix = frontGrid;
4361
4603
  if (this.hasActiveBackside) {
4362
4604
  backGrid = moveGrid(this.getAllUsedCellsInGrid(true));
4363
- for (var _x2 = 0; _x2 < widthCopyArea; _x2++) if (!backGrid[absoluteCopyIndex.x + _x2]) backGrid[absoluteCopyIndex.x + _x2] = [];
4605
+ for (var _x4 = 0; _x4 < widthCopyArea; _x4++) if (!backGrid[absoluteCopyIndex.x + _x4]) backGrid[absoluteCopyIndex.x + _x4] = [];
4364
4606
  this.generalPlanningState.grids[1].matrix = backGrid;
4365
4607
  }
4366
4608
  }
@@ -4406,13 +4648,12 @@ var BoxPlannerGrid = /*#__PURE__*/function () {
4406
4648
  var elementData = this.plannerElements.get(elementId);
4407
4649
  var deletedCells = this.getCellsInGridByElementId(elementId);
4408
4650
  if (!elementData) return;
4409
- this.deleteElement(elementId, "STD");
4651
+ this.deleteElement(elementId, 'STD');
4410
4652
  var curGrid = this.generalPlanningState.grids[0].matrix;
4411
4653
  var cells = undefined;
4412
- if (absoluteIndex.x < 0 || absoluteIndex.y == 0 && deletedCells.endRowIndex >= absoluteIndex.x // moved 0 to 4 so now shift to left
4413
- ) {
4654
+ if (absoluteIndex.x < 0 && absoluteIndex.y == 0) {
4414
4655
  var dir = deletedCells.endColIndex >= absoluteIndex.x;
4415
- if (deletedCells.startColIndex >= absoluteIndex.x) absoluteIndex.x -= deletedCells.endColIndex - deletedCells.startColIndex;
4656
+ if (deletedCells.startColIndex <= absoluteIndex.x) absoluteIndex.x -= deletedCells.endColIndex - deletedCells.startColIndex;
4416
4657
  if (absoluteIndex.x < 0) absoluteIndex.x = 0;
4417
4658
  cells = this.createNewCells(elementData, absoluteIndex.x, absoluteIndex.y, false);
4418
4659
  var movedGrid = [];
@@ -4421,9 +4662,9 @@ var BoxPlannerGrid = /*#__PURE__*/function () {
4421
4662
  _.forEach(function (_, y) {
4422
4663
  var newX = x;
4423
4664
  var shiftX = 0;
4424
- if (y == absoluteIndex.y) {
4425
- newX += dir ? element.area.toX - element.area.fromX : -(element.area.toX - element.area.fromX);
4426
- shiftX = dir ? element.area.toX - element.area.fromX : -(element.area.toX - element.area.fromX);
4665
+ if (y == absoluteIndex.y || absoluteIndex.y == 0) {
4666
+ newX += dir ? element.area.toX - element.area.fromX : 0;
4667
+ shiftX = dir ? element.area.toX - element.area.fromX : 0;
4427
4668
  }
4428
4669
  if (!movedGrid[newX]) movedGrid[newX] = [];
4429
4670
  var cellElem = curGrid[x][y].plannedElement;
@@ -4446,7 +4687,7 @@ var BoxPlannerGrid = /*#__PURE__*/function () {
4446
4687
  });
4447
4688
  curGrid = movedGrid;
4448
4689
  } else {
4449
- if (absoluteIndex.x > deletedCells.startColIndex && absoluteIndex.y == deletedCells.startRowIndex) absoluteIndex.x -= deletedCells.endColIndex - deletedCells.startColIndex;
4690
+ if (absoluteIndex.x > deletedCells.startColIndex && deletedCells.startRowIndex == 0) absoluteIndex.x -= deletedCells.endColIndex - deletedCells.startColIndex;
4450
4691
  cells = this.createNewCells(elementData, absoluteIndex.x, absoluteIndex.y, false);
4451
4692
  }
4452
4693
  for (var i = 0; i < cells.length; i++) {
@@ -4476,8 +4717,6 @@ var BoxPlannerGrid = /*#__PURE__*/function () {
4476
4717
  var backsideForCopy = copyIndex.z == -1 || curPos.backside == true;
4477
4718
  if (cellIndex.x < 0) cellIndex.x = 0; // can't plan to negative space see prepareGridForColCopy
4478
4719
  var curGrid = backsideForCopy ? this.generalPlanningState.grids[1].matrix : this.generalPlanningState.grids[0].matrix;
4479
- // can't float need to dock
4480
- if (curGrid[cellIndex.x].length < cellIndex.y) cellIndex.y = curGrid[cellIndex.x].length;
4481
4720
  var cells = this.createNewCells(newElement, cellIndex.x, cellIndex.y, backsideForCopy);
4482
4721
  for (var i = 0; i < cells.length; i++) {
4483
4722
  if (!curGrid[cells[i].index.x]) curGrid[cells[i].index.x] = [];
@@ -4508,75 +4747,129 @@ var BoxPlannerGrid = /*#__PURE__*/function () {
4508
4747
  }, {
4509
4748
  key: "updateGridElementDimensions",
4510
4749
  value: function updateGridElementDimensions(elementId, elementData) {
4511
- var _this2 = this;
4512
- if (!elementData) return;
4750
+ var _this3 = this;
4751
+ if (!elementData) return false;
4752
+ var backup = structuredClone(this.generalPlanningState);
4513
4753
  var res = this.getCellsInGridByElementId(elementId);
4514
4754
  var scpe = this.gridSetupParams.forceSingleCellPerElement;
4755
+ var origin = {
4756
+ x: res.cells[0].plannedElement.area.toX,
4757
+ y: res.cells[0].plannedElement.area.toY
4758
+ };
4759
+ var diff = {
4760
+ x: 0,
4761
+ y: 0
4762
+ };
4515
4763
  res.cells.forEach(function (cell) {
4516
4764
  if (!cell.plannedElement) return;
4517
- cell.plannedElement.size.width = elementData.width;
4518
- cell.plannedElement.size.height = elementData.height;
4519
- cell.plannedElement.area = {
4520
- fromX: cell.index.x,
4521
- toX: !scpe ? Math.round(cell.index.x + elementData.width / _this2.gridSetupParams.fixCellRasterWidth) : cell.index.x + 1,
4522
- fromY: cell.index.y,
4523
- toY: !scpe ? Math.round(cell.index.y + elementData.height / _this2.gridSetupParams.fixCellRasterHeight) : cell.index.y + 1
4765
+ var el = cell.plannedElement;
4766
+ el.size.width = elementData.width;
4767
+ el.size.height = elementData.height;
4768
+ el.size.depth = elementData.depth;
4769
+ el.area = {
4770
+ fromX: el.area.fromX,
4771
+ toX: !scpe ? Math.round(el.area.fromX + elementData.width / _this3.gridSetupParams.fixCellRasterWidth) : cell.index.x + 1,
4772
+ fromY: el.area.fromY,
4773
+ toY: !scpe ? Math.round(el.area.fromY + elementData.height / _this3.gridSetupParams.fixCellRasterHeight) : cell.index.y + 1
4524
4774
  };
4775
+ diff.y = cell.plannedElement.area.toY - origin.y;
4776
+ diff.x = cell.plannedElement.area.toX - origin.x;
4525
4777
  });
4526
- if (scpe) return;
4778
+ var cell = res.cells[0];
4779
+ var grid = this.generalPlanningState.grids[0].matrix;
4780
+ // if the element got bigger we need to move all the above elements up
4781
+ // if it got wider we need to move all the elements to the right
4782
+ if (diff.y != 0) {
4783
+ for (var x = cell.plannedElement.area.fromX; x < cell.plannedElement.area.toX; x++) {
4784
+ var row = grid[x];
4785
+ if (!row) continue;
4786
+ for (var y = origin.y; y < row.length; y++) {
4787
+ var _cell = row[y];
4788
+ if (_cell.index.y != y || _cell.plannedElement.elementId == cell.plannedElement.elementId) continue; //already corrected
4789
+ _cell.index.y += diff.y;
4790
+ _cell.plannedElement.area.fromY += diff.y;
4791
+ _cell.plannedElement.area.toY += diff.y;
4792
+ }
4793
+ }
4794
+ } else if (diff.x != 0) {
4795
+ for (var _x5 = cell.plannedElement.area.fromX; _x5 < grid.length; _x5++) {
4796
+ for (var _y4 = cell.plannedElement.area.fromY; _y4 < cell.plannedElement.area.toY; _y4++) {
4797
+ var _cell9 = grid[_x5][_y4];
4798
+ if (!_cell9 || _cell9.plannedElement.elementId == elementId) continue; //already corrected
4799
+ _cell9.index.x += diff.x;
4800
+ _cell9.plannedElement.area.fromX += diff.x;
4801
+ _cell9.plannedElement.area.toX += diff.x;
4802
+ }
4803
+ }
4804
+ }
4805
+
4806
+ // after indices/areas are corrected rebuild the grid
4807
+ if (scpe) return false;
4808
+ res.cells[0].plannedElement;
4527
4809
  var newGrid = new Array();
4528
4810
  var plannedCells = this.getAllUsedCellsInGrid(false);
4529
- plannedCells.forEach(function (cell) {
4530
- var area = cell.plannedElement.area;
4531
- if (newGrid.find(function (x) {
4532
- return x.find(function (y) {
4533
- var _y$plannedElement3, _cell$plannedElement9;
4534
- 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);
4535
- });
4536
- })) return;
4537
- for (var x = area.fromX; x < area.toX; x++) {
4538
- var _loop2 = function _loop2(y) {
4539
- if (!newGrid[x]) newGrid[x] = [];
4540
- if (y < area.fromY) {
4541
- if (newGrid[x][y]) return 0; // continue
4542
- var el = _this2.generalPlanningState.grids[0].matrix.findLast(function (_x) {
4543
- return _x[y].plannedElement;
4544
- });
4545
- newGrid[x][y] = {
4546
- index: {
4547
- x: x,
4548
- y: y
4549
- },
4550
- plannedElement: el && el.length > 0 ? el[0].plannedElement : undefined
4811
+ var _loop3 = function _loop3() {
4812
+ var cell = plannedCells[idx];
4813
+ var area = cell.plannedElement.area;
4814
+ if (newGrid.find(function (x) {
4815
+ return x.find(function (y) {
4816
+ var _y$plannedElement3, _cell$plannedElement9;
4817
+ 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);
4818
+ });
4819
+ })) return 0; // continue
4820
+ for (var _x6 = area.fromX; _x6 < area.toX; _x6++) {
4821
+ for (var _y5 = area.fromY; _y5 < area.toY; _y5++) {
4822
+ if (!newGrid[_x6] && area.fromY == 0) newGrid[_x6] = [];
4823
+
4824
+ // we have a so called overhanging element not so nice, let's correct:
4825
+ var support = plannedCells.find(function (c) {
4826
+ return c.plannedElement.area.toX >= cell.plannedElement.area.toX && c.plannedElement.area.toY == cell.index.y;
4827
+ });
4828
+ if (!support && !newGrid[_x6]) {
4829
+ _this3.generalPlanningState = backup;
4830
+ return {
4831
+ v: true
4551
4832
  };
4552
- return 0; // continue
4553
4833
  }
4554
4834
 
4555
- // if the element got smaller we need to move it to the neighbour
4556
- //newGrid[x][y] = { ...cell, index: { x, y: y } };
4557
- newGrid[x][y] = _objectSpread(_objectSpread({}, cell), {}, {
4835
+ // the element below got smaller
4836
+ if (!newGrid[_x6] && !support) {
4837
+ _this3.generalPlanningState = backup;
4838
+ return {
4839
+ v: true
4840
+ };
4841
+ } else if (!newGrid[_x6]) newGrid[_x6] = [];
4842
+ // when the element above starts early and goes over multiple ones
4843
+
4844
+ // regular case
4845
+ newGrid[_x6][_y5] = _objectSpread(_objectSpread({}, cell), {}, {
4558
4846
  index: {
4559
- x: x,
4560
- y: y
4847
+ x: _x6,
4848
+ y: _y5
4561
4849
  },
4562
4850
  plannedElement: _objectSpread(_objectSpread({}, cell.plannedElement), {}, {
4563
4851
  area: {
4564
- fromX: x,
4565
- toX: x + (cell.plannedElement.area.toX - cell.plannedElement.area.fromX),
4566
- fromY: y,
4567
- toY: y + (cell.plannedElement.area.toY - cell.plannedElement.area.fromY)
4568
- }
4852
+ fromX: cell.plannedElement.area.fromX,
4853
+ toX: cell.plannedElement.area.fromX + (cell.plannedElement.area.toX - cell.plannedElement.area.fromX),
4854
+ fromY: cell.plannedElement.area.fromY,
4855
+ toY: cell.plannedElement.area.fromY + (cell.plannedElement.area.toY - cell.plannedElement.area.fromY)
4856
+ },
4857
+ size: _objectSpread(_objectSpread({}, cell.plannedElement.size), {}, {
4858
+ depth: elementData.depth
4859
+ })
4569
4860
  })
4570
4861
  });
4571
- },
4572
- _ret;
4573
- for (var y = 0; y < area.toY; y++) {
4574
- _ret = _loop2(y);
4575
- if (_ret === 0) continue;
4862
+ }
4576
4863
  }
4577
- }
4578
- });
4864
+ },
4865
+ _ret2;
4866
+ for (var idx = 0; idx < plannedCells.length; idx++) {
4867
+ _ret2 = _loop3();
4868
+ if (_ret2 === 0) continue;
4869
+ if (_ret2) return _ret2.v;
4870
+ }
4579
4871
  if (res.backside) this.generalPlanningState.grids[1].matrix = newGrid;else this.generalPlanningState.grids[0].matrix = newGrid;
4872
+ return false;
4580
4873
  }
4581
4874
 
4582
4875
  /**
@@ -4617,9 +4910,11 @@ var BoxPlannerGrid = /*#__PURE__*/function () {
4617
4910
  var topNeighbors = this.getNeighborElements(elementId, 'TOP');
4618
4911
  var rightNeighbors = this.getNeighborElements(elementId, 'RIGHT');
4619
4912
  var leftNeighbors = this.getNeighborElements(elementId, 'LEFT');
4913
+ var downNeighbors = this.getNeighborElements(elementId, 'DOWN');
4620
4914
  if (topNeighbors.length > 0) dockingPointHandlerInst.tryDockElement(element, 'AVO', [topNeighbors[0]]);
4621
4915
  if (leftNeighbors.length > 0) dockingPointHandlerInst.tryDockElement(element, 'AVL', [leftNeighbors[0]]);
4622
4916
  if (rightNeighbors.length > 0) dockingPointHandlerInst.tryDockElement(element, 'AVR', [rightNeighbors[0]]);
4917
+ if (downNeighbors.length > 0) dockingPointHandlerInst.tryDockElement(element, 'AVU', [downNeighbors[0]]);
4623
4918
  element.PosNr = posNr;
4624
4919
  posNr++;
4625
4920
  }
@@ -4627,9 +4922,9 @@ var BoxPlannerGrid = /*#__PURE__*/function () {
4627
4922
  }
4628
4923
  for (var i = 0; i < backGrid.length; i++) {
4629
4924
  for (var j = 0; j < backGrid[i].length; j++) {
4630
- var _cell5$plannedElement;
4631
- var _cell5 = backGrid[i][j];
4632
- var _elementId6 = _cell5 === null || _cell5 === void 0 || (_cell5$plannedElement = _cell5.plannedElement) === null || _cell5$plannedElement === void 0 ? void 0 : _cell5$plannedElement.elementId;
4925
+ var _cell10$plannedElemen;
4926
+ var _cell10 = backGrid[i][j];
4927
+ var _elementId6 = _cell10 === null || _cell10 === void 0 || (_cell10$plannedElemen = _cell10.plannedElement) === null || _cell10$plannedElemen === void 0 ? void 0 : _cell10$plannedElemen.elementId;
4633
4928
  if (_elementId6 && allCheckedElementIds.indexOf(_elementId6) == -1) {
4634
4929
  var _element2 = this.plannerElements.get(_elementId6);
4635
4930
  allCheckedElementIds.push(_elementId6);
@@ -4967,9 +5262,9 @@ var BoxPlannerGrid = /*#__PURE__*/function () {
4967
5262
  var targetRowIndex = endRowIndex + 1;
4968
5263
  var _copyPossible = false;
4969
5264
  // Iterate through columns within the element's width
4970
- for (var _x3 = endColIndex; _x3 >= startColIndex; _x3--) {
4971
- if (isValidCell(_x3, targetRowIndex)) {
4972
- copyStartColIndex = _x3;
5265
+ for (var _x7 = endColIndex; _x7 >= startColIndex; _x7--) {
5266
+ if (isValidCell(_x7, targetRowIndex)) {
5267
+ copyStartColIndex = _x7;
4973
5268
  _copyPossible = true;
4974
5269
  }
4975
5270
  }
@@ -4986,19 +5281,19 @@ var BoxPlannerGrid = /*#__PURE__*/function () {
4986
5281
  var _targetColIndex = endColIndex;
4987
5282
  var _copyPossible2 = false;
4988
5283
  // Iterate through rows within the element's height
4989
- for (var _y2 = startRowIndex; _y2 <= endRowIndex; _y2++) {
4990
- if (isValidCell(_targetColIndex, _y2)) {
4991
- copyStartRowIndex = _y2;
5284
+ for (var _y6 = startRowIndex; _y6 <= endRowIndex; _y6++) {
5285
+ if (isValidCell(_targetColIndex, _y6)) {
5286
+ copyStartRowIndex = _y6;
4992
5287
  _copyPossible2 = true;
4993
5288
  break;
4994
5289
  }
4995
5290
  }
4996
5291
  if (!_copyPossible2) return undefined;
4997
5292
  _copyPossible2 = false;
4998
- for (var _x4 = endColIndex; _x4 <= endColIndex + elementCells.colCount; _x4++) {
4999
- if (isValidCell(_x4, copyStartRowIndex) && (copyStartRowIndex == 0 || !isValidCell(_x4, copyStartRowIndex - 1))) {
5293
+ for (var _x8 = endColIndex; _x8 <= endColIndex + elementCells.colCount; _x8++) {
5294
+ if (isValidCell(_x8, copyStartRowIndex) && (copyStartRowIndex == 0 || !isValidCell(_x8, copyStartRowIndex - 1))) {
5000
5295
  //check also for overhang
5001
- copyEndColIndex = _x4;
5296
+ copyEndColIndex = _x8;
5002
5297
  _copyPossible2 = true;
5003
5298
  } else {
5004
5299
  break; //when you find one situation where it is not valid skip outside.
@@ -5038,16 +5333,16 @@ var BoxPlannerGrid = /*#__PURE__*/function () {
5038
5333
  } else {
5039
5334
  var distToOriginX = 0;
5040
5335
  for (var i = 0; i < cellsStartColIndex; i++) {
5041
- var _plannedElement$size$3, _plannedElement3;
5042
- 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;
5336
+ var _plannedElement$size$3, _plannedElement4;
5337
+ 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;
5043
5338
  }
5044
5339
  if (cellsStartColIndex < 0) {
5045
5340
  distToOriginX = -element.getWidth();
5046
5341
  }
5047
5342
  var distToOriginY = 0;
5048
5343
  for (var i = 0; i < cellsStartRowIndex; i++) {
5049
- var _plannedElement$size$4, _plannedElement4;
5050
- 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;
5344
+ var _plannedElement$size$4, _plannedElement5;
5345
+ 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;
5051
5346
  }
5052
5347
  elementLocation.startIndexWorldPos = new Vector2(distToOriginX, distToOriginY);
5053
5348
  }
@@ -5094,7 +5389,7 @@ var BoxPlannerGrid = /*#__PURE__*/function () {
5094
5389
  var _ele2, _ele3;
5095
5390
  var movables = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
5096
5391
  var selectedElementId = arguments.length > 1 ? arguments[1] : undefined;
5097
- if (!movables) return this.generalPlanningState;
5392
+ if (!movables || !selectedElementId) return this.generalPlanningState;
5098
5393
  // fill to equal size
5099
5394
  var matrix = this.generalPlanningState.grids[0].matrix;
5100
5395
  var matrixWithMovables = [];
@@ -5141,6 +5436,9 @@ var BoxPlannerGrid = /*#__PURE__*/function () {
5141
5436
  isSupport = !!matrix.find(function (x, idx) {
5142
5437
  return idx >= ele.area.fromX && idx < ele.area.toX && matrix[idx].length > ele.area.toY;
5143
5438
  }); // can't move if there is anything above these cells
5439
+
5440
+ // if it has left and right neighbour and is on the bottom
5441
+ if (ele.area.fromX == 0 && this.getNeighborElements(ele.elementId, 'LEFT').length > 0 && this.getNeighborElements(ele.elementId, 'RIGHT').length > 0) isSupport = true;
5144
5442
  }
5145
5443
  if (isSupport) return this.generalPlanningState;
5146
5444
  for (var x = 0; x < maxWidth; x++) {
@@ -5161,7 +5459,7 @@ var BoxPlannerGrid = /*#__PURE__*/function () {
5161
5459
  if (x >= from && x < to) return;
5162
5460
  var row = matrixWithMovables[x];
5163
5461
  var len = row.length;
5164
- var _x = ele.fromX == 0 ? x : x - 1;
5462
+ var _x = ele.area.fromX == 0 ? x : x - 1;
5165
5463
  row[len] = {
5166
5464
  index: {
5167
5465
  x: _x,
@@ -5174,7 +5472,7 @@ var BoxPlannerGrid = /*#__PURE__*/function () {
5174
5472
  var len = matrixWithMovables.length;
5175
5473
  if (((_ele2 = ele) === null || _ele2 === void 0 ? void 0 : _ele2.area.toX) != matrix.length) matrixWithMovables[len] = [{
5176
5474
  index: {
5177
- x: ele.fromX == 0 ? len : len - 1,
5475
+ x: ele.area.fromX == 0 ? len : len - 1,
5178
5476
  y: 0
5179
5477
  }
5180
5478
  }];
@@ -5198,7 +5496,7 @@ var BoxPlannerGrid = /*#__PURE__*/function () {
5198
5496
  //system 4 useacse
5199
5497
  var totalColCount = matrix[0].length;
5200
5498
  var colSizes = Array(totalColCount).fill(-1);
5201
- var _loop3 = function _loop3(i) {
5499
+ var _loop4 = function _loop4(i) {
5202
5500
  var _matrix$find;
5203
5501
  var cell = (_matrix$find = matrix.find(function (row) {
5204
5502
  var _row$i$plannedElement, _row$i$plannedElement2;
@@ -5212,7 +5510,7 @@ var BoxPlannerGrid = /*#__PURE__*/function () {
5212
5510
  if (colSizes[i] === -1) return 1; // break
5213
5511
  };
5214
5512
  for (var i = 0; i < totalColCount; i++) {
5215
- if (_loop3(i)) break;
5513
+ if (_loop4(i)) break;
5216
5514
  }
5217
5515
  if (colSizes.includes(-1)) LOG$1.error(new Error('Column sizes are not set'));
5218
5516
  return colSizes;
@@ -5275,9 +5573,9 @@ var BoxPlannerGrid = /*#__PURE__*/function () {
5275
5573
  });
5276
5574
  if (!column) {
5277
5575
  matrix.map(function (row) {
5278
- var _row$;
5576
+ var _row$2;
5279
5577
  return row.push({
5280
- index: new Vector2(((_row$ = row[0]) === null || _row$ === void 0 ? void 0 : _row$.index.x) || 0, y),
5578
+ index: new Vector2(((_row$2 = row[0]) === null || _row$2 === void 0 ? void 0 : _row$2.index.x) || 0, y),
5281
5579
  plannedElement: undefined
5282
5580
  });
5283
5581
  });
@@ -5326,7 +5624,7 @@ var DivaBoxPlanner = /*#__PURE__*/function () {
5326
5624
  key: "initPlanner",
5327
5625
  value: function () {
5328
5626
  var _initPlanner = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(setPlanData) {
5329
- var planData, jsonElements, i, jsonElement, elementID, plannerElement, data, highesElemId, _jsonElement, params;
5627
+ var planData, jsonElements, i, jsonElement, elementID, plannerElement, constructionRules, _constructionRules$co, _constructionRules$co2, data, highesElemId, _jsonElement, params;
5330
5628
  return _regeneratorRuntime.wrap(function _callee$(_context) {
5331
5629
  while (1) switch (_context.prev = _context.next) {
5332
5630
  case 0:
@@ -5356,7 +5654,20 @@ var DivaBoxPlanner = /*#__PURE__*/function () {
5356
5654
  if (this.nextElementId < elementID + 1) this.nextElementId = elementID + 1;
5357
5655
  this.set.setElementId(jsonElement.basketID, plannerElement.ElementId);
5358
5656
  if (!this.constructionRulesHandler.getConstructionRulesLoaded()) {
5359
- this.constructionRulesHandler.setConstructionRules(this.set.getConstructionRuleOfElementId(plannerElement.ElementId));
5657
+ constructionRules = this.set.getConstructionRuleOfElementId(plannerElement.ElementId);
5658
+ if (constructionRules) {
5659
+ this.boxPlannerGrid.GridSetupParams = {
5660
+ fixCellRasterHeight: 19.2,
5661
+ fixCellRasterWidth: 19.2,
5662
+ forceFixCellRasterSize: (_constructionRules$co = constructionRules.constructionRules.forceFixCellRasterSize) !== null && _constructionRules$co !== void 0 ? _constructionRules$co : true,
5663
+ forceSingleCellPerElement: (_constructionRules$co2 = constructionRules.constructionRules.forceSingleCellPerElement) !== null && _constructionRules$co2 !== void 0 ? _constructionRules$co2 : true,
5664
+ hasMaxGridRasterHeight: constructionRules.constructionRules.hasMaxGridRasterHeight,
5665
+ maxGridRasterHeight: constructionRules.constructionRules.maxGridRasterHeight,
5666
+ hasMaxGridRasterWidth: constructionRules.constructionRules.hasMaxGridRasterWidth,
5667
+ maxGridRasterWidth: constructionRules.constructionRules.maxGridRasterWidth
5668
+ };
5669
+ }
5670
+ this.constructionRulesHandler.setConstructionRules(constructionRules);
5360
5671
  }
5361
5672
  data = this.set.getPlannerData(plannerElement.ElementId);
5362
5673
  if (data) plannerElement.updatePlannerData(data);
@@ -5484,7 +5795,7 @@ var DivaBoxPlanner = /*#__PURE__*/function () {
5484
5795
  key: "addPlannerElement",
5485
5796
  value: (function () {
5486
5797
  var _addPlannerElement = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2(basketID, params) {
5487
- var plannerElement, data, constructionRules, _constructionRules$co, _constructionRules$co2;
5798
+ var plannerElement, data, constructionRules, _constructionRules$co3, _constructionRules$co4;
5488
5799
  return _regeneratorRuntime.wrap(function _callee2$(_context2) {
5489
5800
  while (1) switch (_context2.prev = _context2.next) {
5490
5801
  case 0:
@@ -5508,8 +5819,8 @@ var DivaBoxPlanner = /*#__PURE__*/function () {
5508
5819
  this.boxPlannerGrid.GridSetupParams = {
5509
5820
  fixCellRasterHeight: 19.2,
5510
5821
  fixCellRasterWidth: 19.2,
5511
- forceFixCellRasterSize: (_constructionRules$co = constructionRules.constructionRules.forceFixCellRasterSize) !== null && _constructionRules$co !== void 0 ? _constructionRules$co : true,
5512
- forceSingleCellPerElement: (_constructionRules$co2 = constructionRules.constructionRules.forceSingleCellPerElement) !== null && _constructionRules$co2 !== void 0 ? _constructionRules$co2 : true,
5822
+ forceFixCellRasterSize: (_constructionRules$co3 = constructionRules.constructionRules.forceFixCellRasterSize) !== null && _constructionRules$co3 !== void 0 ? _constructionRules$co3 : true,
5823
+ forceSingleCellPerElement: (_constructionRules$co4 = constructionRules.constructionRules.forceSingleCellPerElement) !== null && _constructionRules$co4 !== void 0 ? _constructionRules$co4 : true,
5513
5824
  hasMaxGridRasterHeight: constructionRules.constructionRules.hasMaxGridRasterHeight,
5514
5825
  maxGridRasterHeight: constructionRules.constructionRules.maxGridRasterHeight,
5515
5826
  hasMaxGridRasterWidth: constructionRules.constructionRules.hasMaxGridRasterWidth,
@@ -5587,11 +5898,10 @@ var DivaBoxPlanner = /*#__PURE__*/function () {
5587
5898
  value: (function () {
5588
5899
  var _copyPlannerElement = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee5(articleCopyRelation, copyInfo) {
5589
5900
  var _this = this;
5590
- var gridIsPrepared, plannerElementsToLoadSVG, that, i, cellPos, allDPs, j;
5901
+ var plannerElementsToLoadSVG, that, i, cellPos, allDPs, j;
5591
5902
  return _regeneratorRuntime.wrap(function _callee5$(_context5) {
5592
5903
  while (1) switch (_context5.prev = _context5.next) {
5593
5904
  case 0:
5594
- gridIsPrepared = false;
5595
5905
  if (copyInfo) {
5596
5906
  _context5.next = 3;
5597
5907
  break;
@@ -5601,25 +5911,22 @@ var DivaBoxPlanner = /*#__PURE__*/function () {
5601
5911
  if (copyInfo.copyType == 'STD') copyInfo.targetElements = [];
5602
5912
  plannerElementsToLoadSVG = [];
5603
5913
  that = this;
5604
- articleCopyRelation.forEach(function (basketIDNewArticle, elementToCopyId) {
5914
+ articleCopyRelation.forEach(function (val) {
5605
5915
  var _copyInfo$targetEleme;
5606
- if (!gridIsPrepared) {
5607
- if (copyInfo.copyIndex.z == -1) {
5608
- if (!_this.boxPlannerGrid.getPlannerHasActiveBackside()) _this.boxPlannerGrid.prepareGridForBackSideCopy();
5609
- } else {
5610
- _this.boxPlannerGrid.prepareGridForColCopy(elementToCopyId, copyInfo.copyIndex);
5611
- }
5916
+ if (copyInfo.copyIndex.z == -1) {
5917
+ if (!_this.boxPlannerGrid.getPlannerHasActiveBackside()) _this.boxPlannerGrid.prepareGridForBackSideCopy();
5918
+ } else {
5919
+ _this.boxPlannerGrid.prepareGridForColCopy(val.key, copyInfo.copyIndex);
5612
5920
  }
5613
- gridIsPrepared = true;
5614
5921
 
5615
5922
  //Init Planner Element
5616
- var plannerElement = new PlannerElementData(_this.set.getSetId(), basketIDNewArticle, _this.nextElementId, DivaBoxPlanner.plannerType);
5923
+ var plannerElement = new PlannerElementData(_this.set.getSetId(), val.value, _this.nextElementId, DivaBoxPlanner.plannerType);
5617
5924
  _this.nextElementId++;
5618
- _this.set.setElementId(basketIDNewArticle, plannerElement.ElementId);
5925
+ _this.set.setElementId(val.value, plannerElement.ElementId);
5619
5926
  var data = _this.set.getPlannerData(plannerElement.ElementId);
5620
5927
  plannerElement.updatePlannerData(data);
5621
- _this.boxPlannerGrid.addElementAsCopy(elementToCopyId, plannerElement, copyInfo.copyIndex);
5622
- _this.constructionRulesHandler.onElementCopy(elementToCopyId, plannerElement.getElementId());
5928
+ _this.boxPlannerGrid.addElementAsCopy(val.key, plannerElement, copyInfo.copyIndex);
5929
+ _this.constructionRulesHandler.onElementCopy(val.key, plannerElement.getElementId());
5623
5930
  plannerElementsToLoadSVG.push(plannerElement);
5624
5931
  if (copyInfo.copyType == 'STD') (_copyInfo$targetEleme = copyInfo.targetElements) === null || _copyInfo$targetEleme === void 0 || _copyInfo$targetEleme.push(plannerElement.getElementId());
5625
5932
  });
@@ -5636,7 +5943,7 @@ var DivaBoxPlanner = /*#__PURE__*/function () {
5636
5943
  if (copyInfo.copyIndex.y == 1 && this.constructionRulesHandler.getHasMaxElemCountPerColumn()) {
5637
5944
  //The max height of col is reached
5638
5945
  cellPos = this.boxPlannerGrid.getCellsInGridByElementId(plannerElementsToLoadSVG[i].ElementId);
5639
- if (cellPos.endRowIndex + 1 == that.constructionRulesHandler.getMaxElemCountPerColumn()) {
5946
+ if (cellPos.endRowIndex == that.constructionRulesHandler.getMaxElemCountPerColumn()) {
5640
5947
  allDPs = plannerElementsToLoadSVG[i].getFreeDockingPointsByType('AVO');
5641
5948
  for (j = 0; j < allDPs.length; j++) {
5642
5949
  allDPs[j].disableDP(true);
@@ -5750,7 +6057,7 @@ var DivaBoxPlanner = /*#__PURE__*/function () {
5750
6057
  }
5751
6058
  }
5752
6059
  //remove duplicate
5753
- return Array.from(new Set(allElementsToCopy));
6060
+ return allElementsToCopy;
5754
6061
  }
5755
6062
 
5756
6063
  /**
@@ -5904,42 +6211,58 @@ var DivaBoxPlanner = /*#__PURE__*/function () {
5904
6211
  value: (function () {
5905
6212
  var _updatePlanner = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee7(changedOPT, targetElements) {
5906
6213
  var _this2 = this;
5907
- var message, cellPos, elemToCheck, copyIndex, allElementsToCopy, _allElementsToCopy, allElementsInBackGrid, _allElementsInBackGrid, _message;
6214
+ var failed, message, cellPos, elemToCheck, copyIndex, allElementsToCopy, _allElementsToCopy, allElementsInBackGrid, _allElementsInBackGrid, _message;
5908
6215
  return _regeneratorRuntime.wrap(function _callee7$(_context7) {
5909
6216
  while (1) switch (_context7.prev = _context7.next) {
5910
6217
  case 0:
5911
6218
  LOG.debug('BoxPlanner - configurationHasChanged ' + changedOPT);
6219
+ failed = false;
5912
6220
  targetElements === null || targetElements === void 0 || targetElements.forEach(function (e) {
5913
6221
  var _this2$set$getArticle;
5914
- return _this2.boxPlannerGrid.updateGridElementDimensions(e, (_this2$set$getArticle = _this2.set.getArticleByElementId(e)) === null || _this2$set$getArticle === void 0 ? void 0 : _this2$set$getArticle.plannerData);
6222
+ failed = _this2.boxPlannerGrid.updateGridElementDimensions(e, (_this2$set$getArticle = _this2.set.getArticleByElementId(e)) === null || _this2$set$getArticle === void 0 ? void 0 : _this2$set$getArticle.plannerData);
6223
+ if (failed) return;
6224
+ });
6225
+ if (!failed) {
6226
+ _context7.next = 5;
6227
+ break;
6228
+ }
6229
+ return _context7.abrupt("return", {
6230
+ doDeleteBackGrid: false,
6231
+ elemIdsToDelete: [],
6232
+ viewMessageCodex: "resizeerror",
6233
+ failed: true
5915
6234
  });
6235
+ case 5:
6236
+ this.boxPlannerGrid.updateWorldPosOfElements();
5916
6237
  if (!(changedOPT && targetElements && targetElements.length > 0 && changedOPT['OPTELEMENT'] && (changedOPT['OPTELEMENT'] == 'OPVECK_I' || changedOPT['OPTELEMENT'] == 'OPVECK_A'))) {
5917
- _context7.next = 19;
6238
+ _context7.next = 23;
5918
6239
  break;
5919
6240
  }
5920
6241
  if (!(targetElements.length > 1)) {
5921
- _context7.next = 10;
6242
+ _context7.next = 14;
5922
6243
  break;
5923
6244
  }
5924
- _context7.next = 6;
6245
+ _context7.next = 10;
5925
6246
  return this.constructionRulesHandler.updateOptionLogicBoxPlanner(this.boxPlannerGrid, changedOPT, targetElements, true);
5926
- case 6:
6247
+ case 10:
5927
6248
  message = _context7.sent;
5928
6249
  if (!message) {
5929
- _context7.next = 9;
6250
+ _context7.next = 13;
5930
6251
  break;
5931
6252
  }
5932
6253
  return _context7.abrupt("return", {
5933
6254
  doDeleteBackGrid: false,
5934
6255
  elemIdsToDelete: [],
5935
- viewMessageCodex: message
6256
+ viewMessageCodex: message,
6257
+ failed: false
5936
6258
  });
5937
- case 9:
6259
+ case 13:
5938
6260
  return _context7.abrupt("return", {
5939
6261
  doDeleteBackGrid: false,
5940
- elemIdsToDelete: []
6262
+ elemIdsToDelete: [],
6263
+ failed: false
5941
6264
  });
5942
- case 10:
6265
+ case 14:
5943
6266
  //If the most bottom element has no neighbor right or left - copy element
5944
6267
  cellPos = this.boxPlannerGrid.getCellsInGridByElementId(targetElements[0]);
5945
6268
  elemToCheck = targetElements[0];
@@ -5947,7 +6270,7 @@ var DivaBoxPlanner = /*#__PURE__*/function () {
5947
6270
  elemToCheck = this.boxPlannerGrid.getPlannerElementAtGridPos(cellPos.startColIndex, 0, false).getElementId();
5948
6271
  }
5949
6272
  if (!(!this.boxPlannerGrid.getElementHasLeftElement(elemToCheck) || !this.boxPlannerGrid.getElementHasRightElement(elemToCheck))) {
5950
- _context7.next = 19;
6273
+ _context7.next = 23;
5951
6274
  break;
5952
6275
  }
5953
6276
  //Someone has changed Eck innen or aussen. If the current eselected Element has no neighbor left or right copy neighbor
@@ -5969,6 +6292,7 @@ var DivaBoxPlanner = /*#__PURE__*/function () {
5969
6292
  copyType: 'BoxPlanner_COL'
5970
6293
  });
5971
6294
  return _context7.abrupt("return", {
6295
+ failed: false,
5972
6296
  doDeleteBackGrid: false,
5973
6297
  elemIdsToDelete: [],
5974
6298
  elementIdToCopy: allElementsToCopy,
@@ -5977,17 +6301,17 @@ var DivaBoxPlanner = /*#__PURE__*/function () {
5977
6301
  changedOPT: changedOPT,
5978
6302
  targetElements: targetElements
5979
6303
  });
5980
- case 19:
6304
+ case 23:
5981
6305
  if (!(changedOPT && changedOPT['OPTDMOD'])) {
5982
- _context7.next = 34;
6306
+ _context7.next = 38;
5983
6307
  break;
5984
6308
  }
5985
6309
  _context7.t0 = changedOPT['OPTDMOD'];
5986
- _context7.next = _context7.t0 === 'OPVD_EIN' ? 23 : _context7.t0 === 'OPVD_AUS' ? 27 : 32;
6310
+ _context7.next = _context7.t0 === 'OPVD_EIN' ? 27 : _context7.t0 === 'OPVD_AUS' ? 31 : 36;
5987
6311
  break;
5988
- case 23:
6312
+ case 27:
5989
6313
  if (this.boxPlannerGrid.getPlannerHasActiveBackside()) {
5990
- _context7.next = 26;
6314
+ _context7.next = 30;
5991
6315
  break;
5992
6316
  }
5993
6317
  _allElementsToCopy = this.getPlannerElementsInfluencedByCopy(-1, {
@@ -5999,25 +6323,27 @@ var DivaBoxPlanner = /*#__PURE__*/function () {
5999
6323
  copyType: 'BoxPlanner_backside'
6000
6324
  });
6001
6325
  return _context7.abrupt("return", {
6326
+ failed: false,
6002
6327
  doDeleteBackGrid: false,
6003
6328
  elemIdsToDelete: [],
6004
6329
  elementIdToCopy: _allElementsToCopy,
6005
6330
  copyType: 'BoxPlanner_backside',
6006
6331
  changedOPT: changedOPT
6007
6332
  });
6008
- case 26:
6009
- return _context7.abrupt("break", 32);
6010
- case 27:
6333
+ case 30:
6334
+ return _context7.abrupt("break", 36);
6335
+ case 31:
6011
6336
  if (!this.boxPlannerGrid.getPlannerHasActiveBackside()) {
6012
- _context7.next = 31;
6337
+ _context7.next = 35;
6013
6338
  break;
6014
6339
  }
6015
6340
  allElementsInBackGrid = this.boxPlannerGrid.getAllElementsInBackGrid();
6016
6341
  if (!(allElementsInBackGrid.length > 0)) {
6017
- _context7.next = 31;
6342
+ _context7.next = 35;
6018
6343
  break;
6019
6344
  }
6020
6345
  return _context7.abrupt("return", {
6346
+ failed: false,
6021
6347
  doDeleteBackGrid: true,
6022
6348
  elemIdsToDelete: allElementsInBackGrid.map(function (element) {
6023
6349
  return element.ElementId;
@@ -6025,23 +6351,24 @@ var DivaBoxPlanner = /*#__PURE__*/function () {
6025
6351
  deletionType: 'BoxPlanner_backside',
6026
6352
  changedOPT: changedOPT
6027
6353
  });
6028
- case 31:
6029
- return _context7.abrupt("break", 32);
6030
- case 32:
6031
- _context7.next = 48;
6354
+ case 35:
6355
+ return _context7.abrupt("break", 36);
6356
+ case 36:
6357
+ _context7.next = 52;
6032
6358
  break;
6033
- case 34:
6359
+ case 38:
6034
6360
  if (!(changedOPT && changedOPT['OPTFARBE_RAHMEN'] && changedOPT['OPTFARBE_RAHMEN'] == 'OPVSCHWARZ_MATT' && this.boxPlannerGrid.getPlannerHasActiveBackside())) {
6035
- _context7.next = 40;
6361
+ _context7.next = 44;
6036
6362
  break;
6037
6363
  }
6038
6364
  //If the double modul is active but the color is changed to black - disable double modul
6039
6365
  _allElementsInBackGrid = this.boxPlannerGrid.getAllElementsInBackGrid();
6040
6366
  if (!(_allElementsInBackGrid.length > 0)) {
6041
- _context7.next = 38;
6367
+ _context7.next = 42;
6042
6368
  break;
6043
6369
  }
6044
6370
  return _context7.abrupt("return", {
6371
+ failed: false,
6045
6372
  doDeleteBackGrid: true,
6046
6373
  elemIdsToDelete: _allElementsInBackGrid.map(function (element) {
6047
6374
  return element.ElementId;
@@ -6051,34 +6378,37 @@ var DivaBoxPlanner = /*#__PURE__*/function () {
6051
6378
  targetElements: targetElements,
6052
6379
  viewMessageCodex: 'BOXPLAN_BLACKFRAME_INCOMPATIBLE_ELEMENT_WARNING'
6053
6380
  });
6054
- case 38:
6055
- _context7.next = 48;
6381
+ case 42:
6382
+ _context7.next = 52;
6056
6383
  break;
6057
- case 40:
6058
- _context7.next = 42;
6384
+ case 44:
6385
+ _context7.next = 46;
6059
6386
  return this.constructionRulesHandler.updateOptionLogicBoxPlanner(this.boxPlannerGrid, changedOPT, targetElements);
6060
- case 42:
6387
+ case 46:
6061
6388
  _message = _context7.sent;
6062
6389
  if (!_message) {
6063
- _context7.next = 47;
6390
+ _context7.next = 51;
6064
6391
  break;
6065
6392
  }
6066
6393
  return _context7.abrupt("return", {
6067
6394
  doDeleteBackGrid: false,
6068
6395
  elemIdsToDelete: [],
6069
- viewMessageCodex: _message
6396
+ viewMessageCodex: _message,
6397
+ failed: false
6070
6398
  });
6071
- case 47:
6399
+ case 51:
6072
6400
  return _context7.abrupt("return", {
6073
6401
  doDeleteBackGrid: false,
6074
- elemIdsToDelete: []
6402
+ elemIdsToDelete: [],
6403
+ failed: false
6075
6404
  });
6076
- case 48:
6405
+ case 52:
6077
6406
  return _context7.abrupt("return", {
6078
6407
  doDeleteBackGrid: false,
6079
- elemIdsToDelete: []
6408
+ elemIdsToDelete: [],
6409
+ failed: false
6080
6410
  });
6081
- case 49:
6411
+ case 53:
6082
6412
  case "end":
6083
6413
  return _context7.stop();
6084
6414
  }