@crystaldesign/web-planner-logic 26.14.0-beta.11 → 26.14.0-beta.13

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 (47) hide show
  1. package/build/cjs/{DivaBoxPlanner-15215da3.js → DivaBoxPlanner-18f7c428.js} +2 -2
  2. package/build/cjs/{DivaStandardPlanner-83a30b9c.js → DivaStandardPlanner-4d7fbb34.js} +66 -11
  3. package/build/cjs/{DoorPlanner-3fc953fb.js → DoorPlanner-034aaee6.js} +1 -1
  4. package/build/cjs/{Host3DSignalR-05c335b5.js → Host3DSignalR-57683aed.js} +1 -1
  5. package/build/cjs/{LiviqueWWSHandler-d14c9c94.js → LiviqueWWSHandler-3c716ed4.js} +1 -1
  6. package/build/cjs/{PfisterWWSHandler-67f01d01.js → PfisterWWSHandler-5c576069.js} +1 -1
  7. package/build/cjs/{PlannerHandler2D-37e192f8.js → PlannerHandler2D-d8896477.js} +1 -1
  8. package/build/cjs/{SeriousBasketHandler-44c2c22a.js → SeriousBasketHandler-5520760a.js} +1 -1
  9. package/build/cjs/{ShelfPlanner-e9159968.js → ShelfPlanner-18fbf9be.js} +1 -1
  10. package/build/cjs/{StandardWWSHandler-4306e241.js → StandardWWSHandler-ebb247f4.js} +1 -1
  11. package/build/cjs/{index-95cacf5a.js → index-aa0daf1a.js} +152 -67
  12. package/build/cjs/index.js +1 -1
  13. package/build/esm/{DivaBoxPlanner-4f2cfa4a.js → DivaBoxPlanner-27ead0c5.js} +2 -2
  14. package/build/esm/{DivaStandardPlanner-73a00f6f.js → DivaStandardPlanner-74b83b7c.js} +66 -11
  15. package/build/esm/{DoorPlanner-a4991f20.js → DoorPlanner-6ce21453.js} +1 -1
  16. package/build/esm/{Host3DSignalR-1f5a8d30.js → Host3DSignalR-fecb34a9.js} +1 -1
  17. package/build/esm/{LiviqueWWSHandler-fd798f64.js → LiviqueWWSHandler-e8187e50.js} +1 -1
  18. package/build/esm/{PfisterWWSHandler-52fc46a4.js → PfisterWWSHandler-26cb2971.js} +1 -1
  19. package/build/esm/{PlannerHandler2D-61875b95.js → PlannerHandler2D-990fb1b0.js} +1 -1
  20. package/build/esm/{SeriousBasketHandler-8d7f7eb2.js → SeriousBasketHandler-f8c5d1f1.js} +1 -1
  21. package/build/esm/{ShelfPlanner-2a635803.js → ShelfPlanner-5479c396.js} +1 -1
  22. package/build/esm/{StandardWWSHandler-9c5c3b67.js → StandardWWSHandler-903307a5.js} +1 -1
  23. package/build/esm/{index-44bde241.js → index-e415f84e.js} +152 -67
  24. package/build/esm/index.js +1 -1
  25. package/build/types/web-planner-logic/src/interface/DivaCatalogDataType.d.ts +1 -0
  26. package/build/types/web-planner-logic/src/interface/DivaCatalogDataType.d.ts.map +1 -1
  27. package/build/types/web-planner-logic/src/interface/ShelfPlanner/plannerData.d.ts +4 -0
  28. package/build/types/web-planner-logic/src/interface/ShelfPlanner/plannerData.d.ts.map +1 -1
  29. package/build/types/web-planner-logic/src/logic/Basket/DivaBasketHandler.d.ts +4 -0
  30. package/build/types/web-planner-logic/src/logic/Basket/DivaBasketHandler.d.ts.map +1 -1
  31. package/build/types/web-planner-logic/src/logic/ConfigTree/DivaConfigTreeHandler.d.ts.map +1 -1
  32. package/build/types/web-planner-logic/src/logic/ConfigTree/Shelfplanner/ShelfPlannerGrid.d.ts.map +1 -1
  33. package/build/types/web-planner-logic/src/logic/DivaWebPlanner.d.ts.map +1 -1
  34. package/build/types/web-planner-logic/src/logic/Planner/DivaStandardPlanner.d.ts +8 -0
  35. package/build/types/web-planner-logic/src/logic/Planner/DivaStandardPlanner.d.ts.map +1 -1
  36. package/build/types/web-planner-logic/src/logic/Set/DivaSetHandler.d.ts +5 -0
  37. package/build/types/web-planner-logic/src/logic/Set/DivaSetHandler.d.ts.map +1 -1
  38. package/build/types/web-planner-logic/src/model/Catalog/CatalogData.d.ts +2 -0
  39. package/build/types/web-planner-logic/src/model/Catalog/CatalogData.d.ts.map +1 -1
  40. package/build/types/web-planner-logic/src/model/Properties/propertySchemaRegistry.d.ts.map +1 -1
  41. package/build/types/web-planner-logic/src/test/dragKeepsDockingRules.test.d.ts +2 -0
  42. package/build/types/web-planner-logic/src/test/dragKeepsDockingRules.test.d.ts.map +1 -0
  43. package/build/types/web-planner-logic/src/test/dragTransOrder.test.d.ts +3 -0
  44. package/build/types/web-planner-logic/src/test/dragTransOrder.test.d.ts.map +1 -0
  45. package/build/types/web-planner-logic/src/test/shelfPlannerGroup.test.d.ts +2 -0
  46. package/build/types/web-planner-logic/src/test/shelfPlannerGroup.test.d.ts.map +1 -0
  47. package/package.json +3 -3
@@ -2133,6 +2133,7 @@ var CATALOG_PROPERTIES = {
2133
2133
  RECONFIG_AFTER_ARTICLE_DOCKED: 'boolean:1',
2134
2134
  REPAIR_VARIANT_VALUES: 'shape',
2135
2135
  RTV_PRESET: 'json',
2136
+ SHELFPLANNER_GROUP: 'string',
2136
2137
  SHOWACCESSOIREONLASTTAB: 'boolean:1',
2137
2138
  SHOWACCONDPONLY: 'boolean:1',
2138
2139
  SHOWTYPENRINPLANNER: 'boolean:1',
@@ -24727,6 +24728,12 @@ var DivaCatalogData = /*#__PURE__*/function () {
24727
24728
  get: function get() {
24728
24729
  return this.catalogProps.dontShowBasePrice;
24729
24730
  }
24731
+ /** Shelf-planner `Group` of every grid that names none (`SHELFPLANNER_GROUP`): its grids share one config step. */
24732
+ }, {
24733
+ key: "shelfPlannerGroup",
24734
+ get: function get() {
24735
+ return this.catalogProps.shelfPlannerGroup;
24736
+ }
24730
24737
  }, {
24731
24738
  key: "getOption",
24732
24739
  value: function getOption(opt) {
@@ -25120,6 +25127,9 @@ var DivaCatalogData = /*#__PURE__*/function () {
25120
25127
  case 'DIVA3D_USE_RTV_NEXT':
25121
25128
  _this2.catalogProps.divaUseRtvNext = item.Value === true;
25122
25129
  break;
25130
+ case 'SHELFPLANNER_GROUP':
25131
+ _this2.catalogProps.shelfPlannerGroup = textOf(item.Value) || undefined;
25132
+ break;
25123
25133
  case 'HEADER_DIMENSION_IDS':
25124
25134
  _this2.catalogProps.headerDimensionIds = listOf(item.Value);
25125
25135
  break;
@@ -34355,7 +34365,7 @@ var DivaArticle = /*#__PURE__*/function () {
34355
34365
  break;
34356
34366
  }
34357
34367
  _context.next = 4;
34358
- return Promise.resolve().then(function () { return require('./ShelfPlanner-e9159968.js'); });
34368
+ return Promise.resolve().then(function () { return require('./ShelfPlanner-18fbf9be.js'); });
34359
34369
  case 4:
34360
34370
  _yield$import = _context.sent;
34361
34371
  ShelfPlanner = _yield$import["default"];
@@ -40782,6 +40792,8 @@ var DivaConfigTreeHandler = /*#__PURE__*/function () {
40782
40792
  if ((_grid$ArticleRelation = grid.ArticleRelationsForOtherGroups) !== null && _grid$ArticleRelation !== void 0 && _grid$ArticleRelation.length) {
40783
40793
  var _loop2 = function _loop2() {
40784
40794
  var group = grid.ArticleRelationsForOtherGroups[i];
40795
+ // Already in this step as its own group.
40796
+ if (group.Group === gridGroupOrId) return 1; // continue
40785
40797
  var index = groupedGrids.findIndex(function (g) {
40786
40798
  return g.groupName === group.Group;
40787
40799
  });
@@ -40798,7 +40810,7 @@ var DivaConfigTreeHandler = /*#__PURE__*/function () {
40798
40810
  }
40799
40811
  };
40800
40812
  for (var i = 0; i < grid.ArticleRelationsForOtherGroups.length; i++) {
40801
- _loop2();
40813
+ if (_loop2()) continue;
40802
40814
  }
40803
40815
  }
40804
40816
  };
@@ -43201,7 +43213,7 @@ var DivaSet = /*#__PURE__*/function () {
43201
43213
  break;
43202
43214
  }
43203
43215
  _context5.next = 3;
43204
- return Promise.resolve().then(function () { return require('./DoorPlanner-3fc953fb.js'); });
43216
+ return Promise.resolve().then(function () { return require('./DoorPlanner-034aaee6.js'); });
43205
43217
  case 3:
43206
43218
  _yield$import = _context5.sent;
43207
43219
  DoorPlanner = _yield$import["default"];
@@ -44007,7 +44019,9 @@ var Grid = /*#__PURE__*/function () {
44007
44019
  this.excludeAccessoiresByAccessoiresInGrid = grid.ExcludeAccessoiresByAccessoiresInGrid;
44008
44020
  this.influencedByNeighborGrids = grid.InfluencedByNeighborGrids;
44009
44021
  this.influencedByOverlappingGrids = grid.InfluencedByOverlappingGrids;
44010
- this._group = grid.Group;
44022
+
44023
+ // The grid's own Group wins, even an empty one: that keeps the grid in a step of its own under a catalog default.
44024
+ this._group = 'Group' in grid ? grid.Group : article.CatalogData.shelfPlannerGroup;
44011
44025
  this.articleRelations = grid.ArticleRelations;
44012
44026
  this.initAccArr = grid.initAccArr;
44013
44027
  this.articleRelationsForOtherGroups = grid.ArticleRelationsForOtherGroups;
@@ -45069,16 +45083,18 @@ var Grid = /*#__PURE__*/function () {
45069
45083
  }, {
45070
45084
  key: "getArticleRelationsById",
45071
45085
  value: function getArticleRelationsById(id) {
45072
- var _this$ArticleRelation2;
45086
+ var _this$ArticleRelation2, _own;
45073
45087
  var alternative = (_this$ArticleRelation2 = this.ArticleRelationsForOtherGroups) === null || _this$ArticleRelation2 === void 0 ? void 0 : _this$ArticleRelation2.find(function (g) {
45074
45088
  return g.Group == id;
45075
45089
  });
45076
- if (alternative) return alternative.ArticleRelations;
45090
+ // The grid's own group can be one of its other groups too (e.g. by SHELFPLANNER_GROUP): that step offers both.
45091
+ if (alternative && id !== this.group) return alternative.ArticleRelations;
45092
+ var own = this.articleRelations;
45077
45093
  if (this.heightGridCellCountOnRule && this.currentLoadedRuleIndex !== false) {
45078
45094
  var curGrid = this.heightGridCellCountOnRule[this.currentLoadedRuleIndex];
45079
- if (curGrid.ArticleRelations) return curGrid.ArticleRelations;
45095
+ if (curGrid.ArticleRelations) own = curGrid.ArticleRelations;
45080
45096
  }
45081
- return this.articleRelations;
45097
+ return alternative ? [].concat(_toConsumableArray__default["default"]((_own = own) !== null && _own !== void 0 ? _own : []), _toConsumableArray__default["default"](alternative.ArticleRelations)) : own;
45082
45098
  }
45083
45099
  }, {
45084
45100
  key: "getGridIdByArticleCodex",
@@ -45660,6 +45676,11 @@ var DivaSetHandler = /*#__PURE__*/function () {
45660
45676
  var article = set.getArticleByBasketId(movedDoor.BasketId);
45661
45677
  article === null || article === void 0 || (_article$doorPlanner = article.doorPlanner) === null || _article$doorPlanner === void 0 || _article$doorPlanner.onChange(movedDoor, targetDoor);
45662
45678
  });
45679
+ /**
45680
+ * The sets whose running drag changed the docking at START: the planner undocks the grabbed element there, also from
45681
+ * the group members that move along with it, and docks it again at END.
45682
+ */
45683
+ _defineProperty__default["default"](this, "undockedByDragStart", new WeakSet());
45663
45684
  }
45664
45685
  return _createClass__default["default"](DivaSetHandler, [{
45665
45686
  key: "isDryRunArticle",
@@ -47808,18 +47829,28 @@ var DivaSetHandler = /*#__PURE__*/function () {
47808
47829
  key: "updatePlannerTrans",
47809
47830
  value: function () {
47810
47831
  var _updatePlannerTrans = _asyncToGenerator__default["default"](/*#__PURE__*/_regeneratorRuntime__default["default"].mark(function _callee27(set, plannerElementID, deltaMove, deltaAngleDeg, rotCorrection, transState, autoDockingDistance, turningPoint) {
47811
- var updateConfig;
47832
+ var updateConfig, undockedAtStart;
47812
47833
  return _regeneratorRuntime__default["default"].wrap(function _callee27$(_context29) {
47813
47834
  while (1) switch (_context29.prev = _context29.next) {
47814
47835
  case 0:
47815
- updateConfig = set.plannerHandler.updatePlannerTrans(set.getSetId(), plannerElementID, deltaMove, deltaAngleDeg, rotCorrection, transState, autoDockingDistance, turningPoint);
47816
- if (!updateConfig) {
47836
+ updateConfig = set.plannerHandler.updatePlannerTrans(set.getSetId(), plannerElementID, deltaMove, deltaAngleDeg, rotCorrection, transState, autoDockingDistance, turningPoint); // The configuration follows the docking the drag is released with. Reconfigured after START, the docking dependent
47837
+ // rules see the grabbed element apart from its group (a 50 cm cabinet allowed only beside a 100 cm one) and drop
47838
+ // the values they hide; the sizes that changed with them then keep END from docking the group again.
47839
+ if (!(transState == 'START')) {
47817
47840
  _context29.next = 4;
47818
47841
  break;
47819
47842
  }
47820
- _context29.next = 4;
47821
- return this.reconfigureSetAfterDockingChange(set, true, 'initializingAfterTrans');
47843
+ if (updateConfig) this.undockedByDragStart.add(set);
47844
+ return _context29.abrupt("return");
47822
47845
  case 4:
47846
+ undockedAtStart = transState == 'END' && this.undockedByDragStart["delete"](set);
47847
+ if (!(updateConfig || undockedAtStart)) {
47848
+ _context29.next = 8;
47849
+ break;
47850
+ }
47851
+ _context29.next = 8;
47852
+ return this.reconfigureSetAfterDockingChange(set, true, 'initializingAfterTrans');
47853
+ case 8:
47823
47854
  case "end":
47824
47855
  return _context29.stop();
47825
47856
  }
@@ -51289,22 +51320,15 @@ var DivaBasketHandler = /*#__PURE__*/function () {
51289
51320
  });
51290
51321
  case 12:
51291
51322
  response = _context11.sent;
51292
- if (!(response != 'ERROR_NO_BASKET_SAVED')) {
51293
- _context11.next = 17;
51294
- break;
51295
- }
51296
- this.baskets[this.actDivaNr] = new basketModel.BasketData(response);
51297
- _context11.next = 19;
51298
- break;
51299
- case 17:
51300
51323
  if (!(response === 'ERROR_NO_BASKET_SAVED' || response === 'ERROR_BASKET_AFTER_SAVE' || response === 'ERROR_NO_BASKET_SAVED_ENTITY_EXISTS')) {
51301
- _context11.next = 19;
51324
+ _context11.next = 15;
51302
51325
  break;
51303
51326
  }
51304
51327
  return _context11.abrupt("return", response);
51305
- case 19:
51328
+ case 15:
51329
+ this.baskets[this.actDivaNr] = new basketModel.BasketData(response);
51306
51330
  return _context11.abrupt("return", response === null || response === void 0 ? void 0 : response._id);
51307
- case 20:
51331
+ case 17:
51308
51332
  case "end":
51309
51333
  return _context11.stop();
51310
51334
  }
@@ -51315,6 +51339,42 @@ var DivaBasketHandler = /*#__PURE__*/function () {
51315
51339
  }
51316
51340
  return saveToBasket;
51317
51341
  }()
51342
+ /**
51343
+ * Moves the given basket to a new DivaNr as document version 1, for a save the server rejected because its DivaNr is taken.
51344
+ */
51345
+ }, {
51346
+ key: "moveToNewDivaNr",
51347
+ value: (function () {
51348
+ var _moveToNewDivaNr = _asyncToGenerator__default["default"](/*#__PURE__*/_regeneratorRuntime__default["default"].mark(function _callee12(api, basket) {
51349
+ var newDivaNr;
51350
+ return _regeneratorRuntime__default["default"].wrap(function _callee12$(_context12) {
51351
+ while (1) switch (_context12.prev = _context12.next) {
51352
+ case 0:
51353
+ _context12.next = 2;
51354
+ return this.createNewDivaNr(api);
51355
+ case 2:
51356
+ newDivaNr = _context12.sent;
51357
+ basket.setDivaNr(newDivaNr);
51358
+ basket.setDocumentVersion(1);
51359
+ this.baskets[newDivaNr] = basket;
51360
+ this.divaNr = newDivaNr;
51361
+ if (DivaUtils__default["default"].bridge) DivaUtils__default["default"].bridge.sendMessage({
51362
+ type: 'ABN',
51363
+ bEvent: {
51364
+ divaNr: newDivaNr
51365
+ }
51366
+ });
51367
+ case 8:
51368
+ case "end":
51369
+ return _context12.stop();
51370
+ }
51371
+ }, _callee12, this);
51372
+ }));
51373
+ function moveToNewDivaNr(_x28, _x29) {
51374
+ return _moveToNewDivaNr.apply(this, arguments);
51375
+ }
51376
+ return moveToNewDivaNr;
51377
+ }())
51318
51378
  }, {
51319
51379
  key: "divaWWSHandler",
51320
51380
  get: function get() {
@@ -51466,53 +51526,53 @@ var DivaBasketHandler = /*#__PURE__*/function () {
51466
51526
  }, {
51467
51527
  key: "initWWSClient",
51468
51528
  value: function () {
51469
- var _initWWSClient = _asyncToGenerator__default["default"](/*#__PURE__*/_regeneratorRuntime__default["default"].mark(function _callee12(wwsClient) {
51529
+ var _initWWSClient = _asyncToGenerator__default["default"](/*#__PURE__*/_regeneratorRuntime__default["default"].mark(function _callee13(wwsClient) {
51470
51530
  var _yield$import, PfisterWWSHandler, _yield$import2, LiviqueWWSHandler, _yield$import3, SeriousWWSHandler, _yield$import4, StandardWWSHandler;
51471
- return _regeneratorRuntime__default["default"].wrap(function _callee12$(_context12) {
51472
- while (1) switch (_context12.prev = _context12.next) {
51531
+ return _regeneratorRuntime__default["default"].wrap(function _callee13$(_context13) {
51532
+ while (1) switch (_context13.prev = _context13.next) {
51473
51533
  case 0:
51474
- _context12.t0 = wwsClient;
51475
- _context12.next = _context12.t0 === 'Pfister' ? 3 : _context12.t0 === 'Livique' ? 9 : _context12.t0 === 'Serious' ? 15 : 21;
51534
+ _context13.t0 = wwsClient;
51535
+ _context13.next = _context13.t0 === 'Pfister' ? 3 : _context13.t0 === 'Livique' ? 9 : _context13.t0 === 'Serious' ? 15 : 21;
51476
51536
  break;
51477
51537
  case 3:
51478
- _context12.next = 5;
51479
- return Promise.resolve().then(function () { return require('./PfisterWWSHandler-67f01d01.js'); });
51538
+ _context13.next = 5;
51539
+ return Promise.resolve().then(function () { return require('./PfisterWWSHandler-5c576069.js'); });
51480
51540
  case 5:
51481
- _yield$import = _context12.sent;
51541
+ _yield$import = _context13.sent;
51482
51542
  PfisterWWSHandler = _yield$import["default"];
51483
51543
  this._divaWWSHandler = new PfisterWWSHandler();
51484
- return _context12.abrupt("break", 27);
51544
+ return _context13.abrupt("break", 27);
51485
51545
  case 9:
51486
- _context12.next = 11;
51487
- return Promise.resolve().then(function () { return require('./LiviqueWWSHandler-d14c9c94.js'); });
51546
+ _context13.next = 11;
51547
+ return Promise.resolve().then(function () { return require('./LiviqueWWSHandler-3c716ed4.js'); });
51488
51548
  case 11:
51489
- _yield$import2 = _context12.sent;
51549
+ _yield$import2 = _context13.sent;
51490
51550
  LiviqueWWSHandler = _yield$import2["default"];
51491
51551
  this._divaWWSHandler = new LiviqueWWSHandler();
51492
- return _context12.abrupt("break", 27);
51552
+ return _context13.abrupt("break", 27);
51493
51553
  case 15:
51494
- _context12.next = 17;
51495
- return Promise.resolve().then(function () { return require('./SeriousBasketHandler-44c2c22a.js'); });
51554
+ _context13.next = 17;
51555
+ return Promise.resolve().then(function () { return require('./SeriousBasketHandler-5520760a.js'); });
51496
51556
  case 17:
51497
- _yield$import3 = _context12.sent;
51557
+ _yield$import3 = _context13.sent;
51498
51558
  SeriousWWSHandler = _yield$import3["default"];
51499
51559
  this._divaWWSHandler = new SeriousWWSHandler();
51500
- return _context12.abrupt("break", 27);
51560
+ return _context13.abrupt("break", 27);
51501
51561
  case 21:
51502
- _context12.next = 23;
51503
- return Promise.resolve().then(function () { return require('./StandardWWSHandler-4306e241.js'); });
51562
+ _context13.next = 23;
51563
+ return Promise.resolve().then(function () { return require('./StandardWWSHandler-ebb247f4.js'); });
51504
51564
  case 23:
51505
- _yield$import4 = _context12.sent;
51565
+ _yield$import4 = _context13.sent;
51506
51566
  StandardWWSHandler = _yield$import4["default"];
51507
51567
  this._divaWWSHandler = new StandardWWSHandler();
51508
- return _context12.abrupt("break", 27);
51568
+ return _context13.abrupt("break", 27);
51509
51569
  case 27:
51510
51570
  case "end":
51511
- return _context12.stop();
51571
+ return _context13.stop();
51512
51572
  }
51513
- }, _callee12, this);
51573
+ }, _callee13, this);
51514
51574
  }));
51515
- function initWWSClient(_x28) {
51575
+ function initWWSClient(_x30) {
51516
51576
  return _initWWSClient.apply(this, arguments);
51517
51577
  }
51518
51578
  return initWWSClient;
@@ -52898,7 +52958,7 @@ var PlannerHandler3D = /*#__PURE__*/function () {
52898
52958
  //If we need real time rendering initialize the SignalR and 3D host connection Handler
52899
52959
  bootMark('signalr: chunk import start');
52900
52960
  _context3.next = 3;
52901
- return Promise.resolve().then(function () { return require('./Host3DSignalR-05c335b5.js'); });
52961
+ return Promise.resolve().then(function () { return require('./Host3DSignalR-57683aed.js'); });
52902
52962
  case 3:
52903
52963
  _yield$import = _context3.sent;
52904
52964
  Host3DSignalR = _yield$import["default"];
@@ -57304,7 +57364,7 @@ var DivaPlannerHandler = /*#__PURE__*/function () {
57304
57364
  break;
57305
57365
  case 9:
57306
57366
  _context5.next = 11;
57307
- return Promise.resolve().then(function () { return require('./DivaStandardPlanner-83a30b9c.js'); });
57367
+ return Promise.resolve().then(function () { return require('./DivaStandardPlanner-4d7fbb34.js'); });
57308
57368
  case 11:
57309
57369
  _yield$import = _context5.sent;
57310
57370
  DivaStandardPlanner = _yield$import["default"];
@@ -57319,7 +57379,7 @@ var DivaPlannerHandler = /*#__PURE__*/function () {
57319
57379
  return _context5.abrupt("break", 22);
57320
57380
  case 16:
57321
57381
  _context5.next = 18;
57322
- return Promise.resolve().then(function () { return require('./DivaBoxPlanner-15215da3.js'); });
57382
+ return Promise.resolve().then(function () { return require('./DivaBoxPlanner-18f7c428.js'); });
57323
57383
  case 18:
57324
57384
  _yield$import2 = _context5.sent;
57325
57385
  DivaBoxPlanner = _yield$import2["default"];
@@ -61494,11 +61554,11 @@ var DivaWebPlanner = /*#__PURE__*/function () {
61494
61554
  this.divaBasketHandler.fillOrigConfigurations();
61495
61555
  actBasket.Updated = Date.now();
61496
61556
  if (!returnTo) {
61497
- _context35.next = 54;
61557
+ _context35.next = 69;
61498
61558
  break;
61499
61559
  }
61500
61560
  _context35.t3 = returnTo;
61501
- _context35.next = _context35.t3 === 'OPEN_SELLER_PRODUCTCREATOR' ? 27 : _context35.t3 === 'OPEN_SELLER_BASKET' ? 29 : _context35.t3 === 'OPEN_PDF' ? 32 : _context35.t3 === 'SAVE_BASKET_WITH_MODAL' ? 32 : _context35.t3 === 'SAVE_BASKET' ? 32 : _context35.t3 === 'SAVE_BASKET_SYNC' ? 32 : _context35.t3 === 'SAVE_BASKET_ASYNC' ? 32 : 54;
61561
+ _context35.next = _context35.t3 === 'OPEN_SELLER_PRODUCTCREATOR' ? 27 : _context35.t3 === 'OPEN_SELLER_BASKET' ? 29 : _context35.t3 === 'OPEN_PDF' ? 32 : _context35.t3 === 'SAVE_BASKET_WITH_MODAL' ? 32 : _context35.t3 === 'SAVE_BASKET' ? 32 : _context35.t3 === 'SAVE_BASKET_SYNC' ? 32 : _context35.t3 === 'SAVE_BASKET_ASYNC' ? 32 : 69;
61502
61562
  break;
61503
61563
  case 27:
61504
61564
  (_this$actions37 = this.actions) === null || _this$actions37 === void 0 || _this$actions37.openComponent({
@@ -61511,7 +61571,7 @@ var DivaWebPlanner = /*#__PURE__*/function () {
61511
61571
  basketData: actBasket
61512
61572
  }
61513
61573
  });
61514
- return _context35.abrupt("break", 54);
61574
+ return _context35.abrupt("break", 69);
61515
61575
  case 29:
61516
61576
  if (this.divaBasketHandler.basketWasSavedWithCurrentDocVersion) {
61517
61577
  actBasket.setDocumentVersion(actBasket.getDocumentVersion() + 1);
@@ -61526,7 +61586,7 @@ var DivaWebPlanner = /*#__PURE__*/function () {
61526
61586
  basketData: actBasket
61527
61587
  }
61528
61588
  });
61529
- return _context35.abrupt("break", 54);
61589
+ return _context35.abrupt("break", 69);
61530
61590
  case 32:
61531
61591
  if (!(event == 'onSaveProduct')) {
61532
61592
  _context35.next = 44;
@@ -61545,7 +61605,7 @@ var DivaWebPlanner = /*#__PURE__*/function () {
61545
61605
  case 40:
61546
61606
  newDivaNr = _context35.sent;
61547
61607
  actBasket.convertToBaseConfiguration(newDivaNr.divaNr);
61548
- _context35.next = 53;
61608
+ _context35.next = 68;
61549
61609
  break;
61550
61610
  case 44:
61551
61611
  if (this.divaBasketHandler.basketWasSavedWithCurrentDocVersion) {
@@ -61555,30 +61615,55 @@ var DivaWebPlanner = /*#__PURE__*/function () {
61555
61615
  this.divaBasketHandler.basketWasSavedWithCurrentDocVersion = true;
61556
61616
  actBasket.setDivaNr(this.divaBasketHandler.actDivaNr.split('-').length > 2 ? this.divaBasketHandler.actDivaNr.split('-')[0] + '-' + this.divaBasketHandler.actDivaNr.split('-')[1] : this.divaBasketHandler.actDivaNr);
61557
61617
  arReady = !!((_this$actSet14 = this.actSet()) !== null && _this$actSet14 !== void 0 && _this$actSet14.CatalogData.divaArReady);
61558
- _context35.next = 50;
61618
+ _context35.prev = 48;
61619
+ _context35.next = 51;
61620
+ return this.divaBasketHandler.saveToBasket(this.api, actBasket, returnTo, arReady);
61621
+ case 51:
61622
+ _result = _context35.sent;
61623
+ if (!(_result === 'ERROR_NO_BASKET_SAVED_ENTITY_EXISTS')) {
61624
+ _context35.next = 59;
61625
+ break;
61626
+ }
61627
+ _context35.next = 55;
61628
+ return this.divaBasketHandler.moveToNewDivaNr(this.api, actBasket);
61629
+ case 55:
61630
+ this.divaNr = this.divaBasketHandler.actDivaNr;
61631
+ _context35.next = 58;
61559
61632
  return this.divaBasketHandler.saveToBasket(this.api, actBasket, returnTo, arReady);
61560
- case 50:
61633
+ case 58:
61561
61634
  _result = _context35.sent;
61562
- if (!(_result === 'ERROR_NO_BASKET_SAVED' || _result === 'ERROR_BASKET_AFTER_SAVE')) {
61563
- _context35.next = 53;
61635
+ case 59:
61636
+ if (!(_result === 'ERROR_NO_BASKET_SAVED' || _result === 'ERROR_BASKET_AFTER_SAVE' || _result === 'ERROR_NO_BASKET_SAVED_ENTITY_EXISTS')) {
61637
+ _context35.next = 62;
61564
61638
  break;
61565
61639
  }
61640
+ // otherwise the next click reports BASKET_ALREADY_SAVED and sends mails and leads for a basket that does not exist
61641
+ this.divaBasketHandler.basketWasSavedWithCurrentDocVersion = undefined;
61566
61642
  return _context35.abrupt("return", 'canceled');
61567
- case 53:
61568
- return _context35.abrupt("break", 54);
61569
- case 54:
61643
+ case 62:
61644
+ _context35.next = 68;
61645
+ break;
61646
+ case 64:
61647
+ _context35.prev = 64;
61648
+ _context35.t4 = _context35["catch"](48);
61649
+ // a save that threw did not save either
61650
+ this.divaBasketHandler.basketWasSavedWithCurrentDocVersion = undefined;
61651
+ throw _context35.t4;
61652
+ case 68:
61653
+ return _context35.abrupt("break", 69);
61654
+ case 69:
61570
61655
  if (returnTo == 'DONT_SAVE_BASKET') event = 'dontSaveBasket';
61571
61656
  actBasket = (_this$divaBasketHandl4 = this.divaBasketHandler.getBasketData(actBasket.DivaNr, actBasket.DocumentVersion)) !== null && _this$divaBasketHandl4 !== void 0 ? _this$divaBasketHandl4 : actBasket; //get pdf documenturl from saved basket
61572
- _context35.next = 58;
61657
+ _context35.next = 73;
61573
61658
  return this.addToBasket(actBasket, event);
61574
- case 58:
61659
+ case 73:
61575
61660
  product = _context35.sent;
61576
61661
  return _context35.abrupt("return", product !== null && product !== void 0 ? product : 'saved');
61577
- case 60:
61662
+ case 75:
61578
61663
  case "end":
61579
61664
  return _context35.stop();
61580
61665
  }
61581
- }, _callee35, this);
61666
+ }, _callee35, this, [[48, 64]]);
61582
61667
  }));
61583
61668
  function saveToBasket(_x95, _x96, _x97) {
61584
61669
  return _saveToBasket.apply(this, arguments);
@@ -2,7 +2,7 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var index = require('./index-95cacf5a.js');
5
+ var index = require('./index-aa0daf1a.js');
6
6
  var plannerCore = require('@crystaldesign/planner-core');
7
7
  require('@babel/runtime/helpers/slicedToArray');
8
8
  require('@babel/runtime/helpers/asyncToGenerator');
@@ -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 { u as Vector2, V as Vector3, P as PlannerElementData, J as BoundingBox } from './index-44bde241.js';
6
+ import { u as Vector2, V as Vector3, P as PlannerElementData, J as BoundingBox } from './index-e415f84e.js';
7
7
  import DivaUtils, { DivaError, md5 } from '@crystaldesign/diva-utils';
8
8
  import _toConsumableArray from '@babel/runtime/helpers/toConsumableArray';
9
9
  import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
10
- import { d as dockingPointHandlerInst, h as handler2D } from './PlannerHandler2D-61875b95.js';
10
+ import { d as dockingPointHandlerInst, h as handler2D } from './PlannerHandler2D-990fb1b0.js';
11
11
  import '@babel/runtime/helpers/objectWithoutProperties';
12
12
  import 'axios';
13
13
  import '@babel/runtime/helpers/typeof';
@@ -5,10 +5,10 @@ import _createClass from '@babel/runtime/helpers/createClass';
5
5
  import _defineProperty from '@babel/runtime/helpers/defineProperty';
6
6
  import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
7
7
  import _regeneratorRuntime from '@babel/runtime/regenerator';
8
- import { V as Vector3, p as poseOf, g as getSnapPlace, c as getDockingGroups, d as getElementShape, e as getCarrierSlots, h as getSlotPlaces, m as moveGroupRigidly, i as isSamePose, j as getGroupBlock, k as fitsInsideRoom, l as keepInsideRoom, n as bindToWalls, o as sameGeoExtent, q as getCornerEnd, r as getDoorClearanceRects, t as rectCorners, u as Vector2, M as MAX_GUEST_DEPTH, v as slotExempt, w as bodiesOverlap, x as getNearestMember, y as toPlacementOffset, z as getTurnDeg, A as moveSlotMember, B as moveShape, C as layersCollide, D as shapesCollide, P as PlannerElementData, E as parseGuestPlacement, F as saveElementArticleCodex, H as parseSetPlanData, I as isSavePlannerV2, J as BoundingBox, K as movePoints } from './index-44bde241.js';
8
+ import { V as Vector3, p as poseOf, g as getSnapPlace, c as getDockingGroups, d as getElementShape, e as getCarrierSlots, h as getSlotPlaces, m as moveGroupRigidly, i as isSamePose, j as getGroupBlock, k as fitsInsideRoom, l as keepInsideRoom, n as bindToWalls, o as sameGeoExtent, q as getCornerEnd, r as getDoorClearanceRects, t as rectCorners, u as Vector2, M as MAX_GUEST_DEPTH, v as slotExempt, w as bodiesOverlap, x as getNearestMember, y as toPlacementOffset, z as getTurnDeg, A as moveSlotMember, B as moveShape, C as layersCollide, D as shapesCollide, P as PlannerElementData, E as parseGuestPlacement, F as saveElementArticleCodex, H as parseSetPlanData, I as isSavePlannerV2, J as BoundingBox, K as movePoints } from './index-e415f84e.js';
9
9
  import DivaUtils, { DivaError, md5 } from '@crystaldesign/diva-utils';
10
10
  import { computeDockedTransform } from '@crystaldesign/planner-core';
11
- import { d as dockingPointHandlerInst, h as handler2D } from './PlannerHandler2D-61875b95.js';
11
+ import { d as dockingPointHandlerInst, h as handler2D } from './PlannerHandler2D-990fb1b0.js';
12
12
  import '@babel/runtime/helpers/objectWithoutProperties';
13
13
  import 'axios';
14
14
  import '@babel/runtime/helpers/typeof';
@@ -70,6 +70,15 @@ var PATH_STEP = 2;
70
70
  var DEPTH_NOISE = 1e-6;
71
71
  /** cm within which a dragged guest snaps into a free place of a slot that takes it. */
72
72
  var SLOT_SNAP_DISTANCE = 20;
73
+ /**
74
+ * cm within which a group dragged in a room docks (between the docking points), at least the viewer's own docking
75
+ * distance: as far as a slot snap reaches. The bodies block the drag at contact and a pointer moves several cm per event,
76
+ * so the group is mostly pushed into the element it docks to; it has to dock from such a pose, not only from the few cm
77
+ * before contact.
78
+ */
79
+ var ROOM_DOCK_SNAP_DISTANCE = SLOT_SNAP_DISTANCE;
80
+ /** cm between two docking points that meet at a dock pose (the float noise of the docked transform). */
81
+ var DOCK_CONTACT_DISTANCE = 0.1;
73
82
  /** cm within which a drag counts as back at its start (the float noise of the summed moves). */
74
83
  var START_NOISE = 1e-6;
75
84
  var toFloorRect = function toFloorRect(block, pose) {
@@ -1681,13 +1690,14 @@ var DivaStandardPlanner = /*#__PURE__*/function () {
1681
1690
  };
1682
1691
  }
1683
1692
 
1684
- // The group follows the grabbed element rigidly to the wall or inside-room pose of the raw centre, also where it runs
1685
- // into an obstacle: what it runs into there is kept as `blockedBy` (the viewer shows the drag blocked, a release there
1686
- // goes back to the start). A forced group that fits on no wall is kept inside the room like a free one. Back at the
1687
- // start (a cancel, a blocked release) it stands exactly where it started, nothing snaps.
1693
+ // The group follows the grabbed element rigidly to the wall or inside-room pose of the raw centre, and from there onto
1694
+ // a dock within ROOM_DOCK_SNAP_DISTANCE, also where it runs into an obstacle: what it runs into there is kept as
1695
+ // `blockedBy` (the viewer shows the drag blocked, a release there goes back to the start). A forced group that fits on
1696
+ // no wall is kept inside the room like a free one. Back at the start (a cancel, a blocked release) it stands exactly
1697
+ // where it started, nothing snaps.
1688
1698
  }, {
1689
1699
  key: "updateRoomDrag",
1690
- value: function updateRoomDrag(room, drag, deltaMove) {
1700
+ value: function updateRoomDrag(room, drag, deltaMove, autoDockingDistance) {
1691
1701
  drag.dx += deltaMove.x;
1692
1702
  drag.dz += deltaMove.z;
1693
1703
  var _drag$start2 = drag.start,
@@ -1706,12 +1716,19 @@ var DivaStandardPlanner = /*#__PURE__*/function () {
1706
1716
  center: drag.start.center,
1707
1717
  rotDeg: rotDeg
1708
1718
  };
1709
- var wanted = atStart ? startPose : slotPose !== null && slotPose !== void 0 ? slotPose : wallPose && (drag.wallMode === 'forced' || snapsToWall) ? wallPose : insidePose(block, {
1719
+ var placed = atStart ? startPose : slotPose !== null && slotPose !== void 0 ? slotPose : wallPose && (drag.wallMode === 'forced' || snapsToWall) ? wallPose : insidePose(block, {
1710
1720
  center: rawCenter,
1711
1721
  rotDeg: rotDeg
1712
1722
  }, room);
1713
- drag.blockedBy = this.blockersAt(drag, wanted);
1714
- moveGroupRigidly([].concat(_toConsumableArray(drag.members), _toConsumableArray(drag.followers)), drag.current, wanted);
1723
+ var group = [].concat(_toConsumableArray(drag.members), _toConsumableArray(drag.followers));
1724
+ moveGroupRigidly(group, drag.current, placed);
1725
+ // Pushed against the element it docks to, the group touches it docked instead of standing blocked in it, so the
1726
+ // release docks it (see snapToDock).
1727
+ var reach = autoDockingDistance === 0 ? 0 : Math.max(autoDockingDistance, ROOM_DOCK_SNAP_DISTANCE);
1728
+ var dock = atStart || slotPose ? undefined : this.getDockSnapPose(drag, placed, reach);
1729
+ var wanted = dock !== null && dock !== void 0 ? dock : placed;
1730
+ moveGroupRigidly(group, placed, wanted);
1731
+ drag.blockedBy = dock ? [] : this.blockersAt(drag, wanted);
1715
1732
  drag.current = wanted;
1716
1733
  drag.slotSnapped = !!slotPose;
1717
1734
  // A pair that overlapped at the start may only come apart, never go back in.
@@ -1724,6 +1741,44 @@ var DivaStandardPlanner = /*#__PURE__*/function () {
1724
1741
  });
1725
1742
  }
1726
1743
 
1744
+ /**
1745
+ * The pose of the group, standing at `pose`, where the grabbed element docks onto the nearest dock outside the group and
1746
+ * its guests (see findDockSnap), where nothing blocks it; undefined when no dock is that near, or the room rule would
1747
+ * move the docked group or something blocks it there that it does not dock to: then the group stays where the pointer
1748
+ * has it. Docked elements may reach into each other as members of a group do (a side panel standing out of the
1749
+ * outline), so every element the group docks to at that pose (both neighbours of a gap it fills) does not block.
1750
+ */
1751
+ }, {
1752
+ key: "getDockSnapPose",
1753
+ value: function getDockSnapPose(drag, pose, autoDockingDistance) {
1754
+ var element = this.plannerElements.get(drag.elementId);
1755
+ var group = [].concat(_toConsumableArray(drag.members), _toConsumableArray(drag.followers));
1756
+ var unitIds = group.map(function (member) {
1757
+ return member.ElementId;
1758
+ });
1759
+ var snap = element && this.findDockSnap(element, autoDockingDistance, unitIds);
1760
+ if (!element || !snap) return undefined;
1761
+ var _this$snapMove = this.snapMove(element, snap),
1762
+ from = _this$snapMove.from,
1763
+ to = _this$snapMove.to;
1764
+ var docked = movePose(pose, from, to);
1765
+ if (!this.getKeptPose(drag, docked)) return undefined;
1766
+ moveGroupRigidly(group, pose, docked);
1767
+ var others = this.getAllPlannerElements().filter(function (other) {
1768
+ return !unitIds.includes(other.ElementId);
1769
+ });
1770
+ var dockedTo = new Set(group.flatMap(function (member) {
1771
+ return _toConsumableArray(dockingPointHandlerInst.searchDockableElementsInArea(member, others, DOCK_CONTACT_DISTANCE).values()).map(function (pair) {
1772
+ return pair.targetDP.ElementId;
1773
+ });
1774
+ }));
1775
+ moveGroupRigidly(group, docked, pose);
1776
+ var docksTo = function docksTo(obstacle) {
1777
+ return obstacle.setId === undefined && obstacle.elementId !== undefined && dockedTo.has(obstacle.elementId);
1778
+ };
1779
+ return this.blockersAt(drag, docked).every(docksTo) ? docked : undefined;
1780
+ }
1781
+
1727
1782
  // The unit moved rigidly onto the nearest dock of `element` outside it (see findDockSnap), else with `slots` into the
1728
1783
  // nearest free slot place (see findSlotSnap).
1729
1784
  }, {
@@ -3478,7 +3533,7 @@ var DivaStandardPlanner = /*#__PURE__*/function () {
3478
3533
  if (room && roomDrag && !roomDrag.rotating && transState == 'UPDATE' && roomDrag.members.some(function (member) {
3479
3534
  return member.ElementId == elementId;
3480
3535
  })) {
3481
- if (elementId == roomDrag.elementId) this.updateRoomDrag(room, roomDrag, deltaMove);
3536
+ if (elementId == roomDrag.elementId) this.updateRoomDrag(room, roomDrag, deltaMove, autoDockingDistance);
3482
3537
  return false;
3483
3538
  }
3484
3539
  if (this.plannerElements.has(elementId)) {
@@ -1,7 +1,7 @@
1
1
  import _classCallCheck from '@babel/runtime/helpers/classCallCheck';
2
2
  import _createClass from '@babel/runtime/helpers/createClass';
3
3
  import _defineProperty from '@babel/runtime/helpers/defineProperty';
4
- import './index-44bde241.js';
4
+ import './index-e415f84e.js';
5
5
  import DivaUtils from '@crystaldesign/diva-utils';
6
6
  import '@babel/runtime/helpers/slicedToArray';
7
7
  import '@babel/runtime/helpers/asyncToGenerator';
@@ -3,7 +3,7 @@ import _classCallCheck from '@babel/runtime/helpers/classCallCheck';
3
3
  import _createClass from '@babel/runtime/helpers/createClass';
4
4
  import _defineProperty from '@babel/runtime/helpers/defineProperty';
5
5
  import _regeneratorRuntime from '@babel/runtime/regenerator';
6
- import { L as bootMark, R as Rendering, N as HQRenderScript } from './index-44bde241.js';
6
+ import { L as bootMark, R as Rendering, N as HQRenderScript } from './index-e415f84e.js';
7
7
  import DivaUtils, { DivaError } from '@crystaldesign/diva-utils';
8
8
  import { HubConnectionBuilder, LogLevel } from '@microsoft/signalr';
9
9
  import io from 'socket.io-client';
@@ -1,6 +1,6 @@
1
1
  import _classCallCheck from '@babel/runtime/helpers/classCallCheck';
2
2
  import _createClass from '@babel/runtime/helpers/createClass';
3
- import './index-44bde241.js';
3
+ import './index-e415f84e.js';
4
4
  import '@babel/runtime/helpers/slicedToArray';
5
5
  import '@babel/runtime/helpers/asyncToGenerator';
6
6
  import '@babel/runtime/helpers/defineProperty';
@@ -1,6 +1,6 @@
1
1
  import _classCallCheck from '@babel/runtime/helpers/classCallCheck';
2
2
  import _createClass from '@babel/runtime/helpers/createClass';
3
- import { a as articleHandlerInstance } from './index-44bde241.js';
3
+ import { a as articleHandlerInstance } from './index-e415f84e.js';
4
4
  import { SAPOrderLineData } from '@crystaldesign/basket-model';
5
5
  import DivaUtils, { DivaError } from '@crystaldesign/diva-utils';
6
6
  import '@babel/runtime/helpers/slicedToArray';
@@ -3,7 +3,7 @@ import _classCallCheck from '@babel/runtime/helpers/classCallCheck';
3
3
  import _createClass from '@babel/runtime/helpers/createClass';
4
4
  import _defineProperty from '@babel/runtime/helpers/defineProperty';
5
5
  import _regeneratorRuntime from '@babel/runtime/regenerator';
6
- import { u as Vector2, S as SVGUtils } from './index-44bde241.js';
6
+ import { u as Vector2, S as SVGUtils } from './index-e415f84e.js';
7
7
  import _possibleConstructorReturn from '@babel/runtime/helpers/possibleConstructorReturn';
8
8
  import _getPrototypeOf from '@babel/runtime/helpers/getPrototypeOf';
9
9
  import _get from '@babel/runtime/helpers/get';
@@ -1,7 +1,7 @@
1
1
  import _classCallCheck from '@babel/runtime/helpers/classCallCheck';
2
2
  import _createClass from '@babel/runtime/helpers/createClass';
3
3
  import _defineProperty from '@babel/runtime/helpers/defineProperty';
4
- import { s as summaryHandlerInstance } from './index-44bde241.js';
4
+ import { s as summaryHandlerInstance } from './index-e415f84e.js';
5
5
  import DivaUtils from '@crystaldesign/diva-utils';
6
6
  import '@babel/runtime/helpers/slicedToArray';
7
7
  import '@babel/runtime/helpers/asyncToGenerator';