kitchen-simulator 1.0.0-clark.85 → 1.0.0-clark.90

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.
@@ -1,12 +1,12 @@
1
1
  import _extends from "@babel/runtime/helpers/esm/extends";
2
2
  import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties";
3
3
  import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray";
4
- import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
5
4
  import _classCallCheck from "@babel/runtime/helpers/esm/classCallCheck";
6
5
  import _createClass from "@babel/runtime/helpers/esm/createClass";
7
6
  import _possibleConstructorReturn from "@babel/runtime/helpers/esm/possibleConstructorReturn";
8
7
  import _getPrototypeOf from "@babel/runtime/helpers/esm/getPrototypeOf";
9
8
  import _inherits from "@babel/runtime/helpers/esm/inherits";
9
+ import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
10
10
  var _excluded = ["width", "height", "state", "stateExtractor"];
11
11
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
12
12
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
@@ -40,6 +40,23 @@ var LiteKitchenConfigurator = /*#__PURE__*/function (_Component) {
40
40
  _this = _callSuper(this, LiteKitchenConfigurator, [props]);
41
41
 
42
42
  // utm tracking
43
+ _defineProperty(_this, "handleBeforeUnload", function (e) {
44
+ var areas = _this.props.stateExtractor(_this.props.state).getIn(['scene', 'layers', _this.props.stateExtractor(_this.props.state).scene.selectedLayer, 'areas']);
45
+ if (!_this.state.isSaved && areas.size > 0) {
46
+ setTimeout(function () {
47
+ _this.setState({
48
+ savePromptVisible: true,
49
+ isLeaving: true
50
+ });
51
+ }, 500);
52
+ _this.saveProjectToStorage();
53
+
54
+ // This line is required to trigger the browser confirmation dialog
55
+ e.preventDefault();
56
+ e.returnValue = '';
57
+ return '';
58
+ }
59
+ });
43
60
  var utmDetailParams = new URLSearchParams(_this.props.location && _this.props.location.search);
44
61
  var utmStrEncoded = utmDetailParams.get('details');
45
62
  var utmRequestData = null;
@@ -84,8 +101,7 @@ var LiteKitchenConfigurator = /*#__PURE__*/function (_Component) {
84
101
  redirectURL: '',
85
102
  snackBarMessage: '',
86
103
  isSaved: false,
87
- isLeaving: false,
88
- stateCatalog: _this.props.catalog
104
+ isLeaving: false
89
105
  };
90
106
 
91
107
  // For UTM tracking
@@ -326,6 +342,8 @@ var LiteKitchenConfigurator = /*#__PURE__*/function (_Component) {
326
342
  }, {
327
343
  key: "componentDidMount",
328
344
  value: function componentDidMount() {
345
+ window.addEventListener('beforeunload', this.handleBeforeUnload);
346
+ console.log('context =>', this.context);
329
347
  window.forRedo = [];
330
348
  var store = this.context.store;
331
349
  var _this$props2 = this.props,
@@ -336,10 +354,18 @@ var LiteKitchenConfigurator = /*#__PURE__*/function (_Component) {
336
354
  return newplugin(store, stateExtractor);
337
355
  });
338
356
  }
357
+ }, {
358
+ key: "componentWillUnmount",
359
+ value: function componentWillUnmount() {
360
+ window.addEventListener('beforeunload', this.handleBeforeUnload);
361
+ window.onbeforeunload = null;
362
+ }
363
+ }, {
364
+ key: "componentWillMount",
365
+ value: function componentWillMount() {}
339
366
  }, {
340
367
  key: "componentWillReceiveProps",
341
368
  value: function componentWillReceiveProps(nextProps) {
342
- var _oldState$catalog, _plannerState$catalog;
343
369
  var stateExtractor = nextProps.stateExtractor,
344
370
  state = nextProps.state,
345
371
  projectActions = nextProps.projectActions,
@@ -351,15 +377,6 @@ var LiteKitchenConfigurator = /*#__PURE__*/function (_Component) {
351
377
  handleExternalEvent(nextProps);
352
378
  }
353
379
  var plannerState = stateExtractor(state);
354
- var oldState = stateExtractor(this.props.state);
355
- if ((oldState === null || oldState === void 0 || (_oldState$catalog = oldState.catalog) === null || _oldState$catalog === void 0 ? void 0 : _oldState$catalog.elements) !== (plannerState === null || plannerState === void 0 || (_plannerState$catalog = plannerState.catalog) === null || _plannerState$catalog === void 0 ? void 0 : _plannerState$catalog.elements)) {
356
- // copy state.catalog to the props.catalog
357
- // let catalog = this.state.stateCatalog;
358
- // console.log('111111', plannerState?.catalog?.elements.toJS());
359
- // catalog.elements = plannerState?.catalog?.elements.toJS();
360
- // console.log('222222', catalog);
361
- // this.setState({ stateCatalog: catalog });
362
- }
363
380
  var catalogReady = plannerState.getIn(['catalog', 'ready']);
364
381
  if (!catalogReady) {
365
382
  projectActions.initCatalog(catalog);
@@ -432,7 +449,7 @@ var LiteKitchenConfigurator = /*#__PURE__*/function (_Component) {
432
449
  }, /*#__PURE__*/React.createElement(Content, _extends({
433
450
  width: contentW,
434
451
  height: contentH,
435
- catalog: this.state.stateCatalog,
452
+ catalog: this.props.catalog,
436
453
  state: extractedState,
437
454
  toolBar: this.state.toolbar,
438
455
  setToolbar: this.setToolbar,
@@ -441,7 +458,8 @@ var LiteKitchenConfigurator = /*#__PURE__*/function (_Component) {
441
458
  }, props, {
442
459
  onWheel: function onWheel(event) {
443
460
  return event.preventDefault();
444
- }
461
+ },
462
+ onInternalEvent: this.props.onInternalEvent
445
463
  }))));
446
464
  }
447
465
  }]);
@@ -460,7 +478,8 @@ LiteKitchenConfigurator.propTypes = {
460
478
  footerbarComponents: PropTypes.array,
461
479
  customContents: PropTypes.object,
462
480
  softwareSignature: PropTypes.string,
463
- configData: PropTypes.object
481
+ configData: PropTypes.object,
482
+ onInternalEvent: PropTypes.func
464
483
  };
465
484
  LiteKitchenConfigurator.contextTypes = {
466
485
  store: PropTypes.object.isRequired
@@ -8,7 +8,7 @@ import _createClass from "@babel/runtime/helpers/esm/createClass";
8
8
  import _possibleConstructorReturn from "@babel/runtime/helpers/esm/possibleConstructorReturn";
9
9
  import _getPrototypeOf from "@babel/runtime/helpers/esm/getPrototypeOf";
10
10
  import _inherits from "@babel/runtime/helpers/esm/inherits";
11
- var _excluded = ["width", "height", "projectElement", "dataBundle", "configData", "options", "user", "auth", "featureFlags", "sentry", "analytics", "externalEvent", "onError"];
11
+ var _excluded = ["width", "height", "projectElement", "dataBundle", "configData", "options", "user", "auth", "featureFlags", "sentry", "analytics", "externalEvent", "onInternalEvent", "onError"];
12
12
  import _regeneratorRuntime from "@babel/runtime/regenerator";
13
13
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
14
14
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
@@ -153,6 +153,7 @@ export default function LiteRenderer(props) {
153
153
  sentry = props.sentry,
154
154
  analytics = props.analytics,
155
155
  externalEvent = props.externalEvent,
156
+ onInternalEvent = props.onInternalEvent,
156
157
  onError = props.onError,
157
158
  passThrough = _objectWithoutProperties(props, _excluded);
158
159
 
@@ -471,7 +472,8 @@ export default function LiteRenderer(props) {
471
472
  },
472
473
  data: data,
473
474
  configData: configData,
474
- externalEvent: externalEvent
475
+ externalEvent: externalEvent,
476
+ onInternalEvent: onInternalEvent
475
477
  }, passThrough)))));
476
478
  }
477
479
 
@@ -495,6 +497,7 @@ LiteRenderer.propTypes = {
495
497
  environment: PropTypes.string
496
498
  }),
497
499
  externalEvent: PropTypes.object,
500
+ onInternalEvent: PropTypes.func,
498
501
  onError: PropTypes.func,
499
502
  store: PropTypes.object
500
503
  };
@@ -16,7 +16,8 @@ export default function Content(_ref, _ref2) {
16
16
  setToolbar = _ref.setToolbar,
17
17
  replaceCabinet = _ref.replaceCabinet,
18
18
  keyDownEnable = _ref.keyDownEnable,
19
- catalog = _ref.catalog;
19
+ catalog = _ref.catalog,
20
+ onInternalEvent = _ref.onInternalEvent;
20
21
  var projectActions = _ref2.projectActions;
21
22
  var mode = state.get('mode');
22
23
  switch (mode) {
@@ -40,7 +41,8 @@ export default function Content(_ref, _ref2) {
40
41
  setToolbar: setToolbar,
41
42
  replaceCabinet: replaceCabinet,
42
43
  keyDownEnable: keyDownEnable,
43
- downloadFlag: false
44
+ downloadFlag: false,
45
+ onInternalEvent: onInternalEvent
44
46
  });
45
47
  case constants.MODE_3D_FIRST_PERSON:
46
48
  return /*#__PURE__*/React.createElement(Viewer3DFirstPerson, {
@@ -78,7 +80,8 @@ export default function Content(_ref, _ref2) {
78
80
  width: width,
79
81
  height: height,
80
82
  setToolbar: setToolbar,
81
- replaceCabinet: replaceCabinet
83
+ replaceCabinet: replaceCabinet,
84
+ onInternalEvent: onInternalEvent
82
85
  });
83
86
  case constants.MODE_ROTATING_ITEM_3D:
84
87
  case constants.MODE_DRAGGING_ITEM_3D:
@@ -94,7 +97,8 @@ export default function Content(_ref, _ref2) {
94
97
  setToolbar: setToolbar,
95
98
  replaceCabinet: replaceCabinet,
96
99
  keyDownEnable: keyDownEnable,
97
- downloadFlag: false
100
+ downloadFlag: false,
101
+ onInternalEvent: onInternalEvent
98
102
  });
99
103
 
100
104
  // case constants.MODE_CONFIGURING_PROJECT:
@@ -119,7 +123,8 @@ Content.propTypes = {
119
123
  state: PropTypes.object.isRequired,
120
124
  width: PropTypes.number.isRequired,
121
125
  height: PropTypes.number.isRequired,
122
- replaceCabinet: PropTypes.func.isRequired
126
+ replaceCabinet: PropTypes.func.isRequired,
127
+ onInternalEvent: PropTypes.func.isRequired
123
128
  };
124
129
  Content.contextTypes = {
125
130
  projectActions: PropTypes.object.isRequired
@@ -6,7 +6,7 @@ import React, { useEffect, useRef, useState } from 'react';
6
6
  import PropTypes from 'prop-types';
7
7
  import { ReactSVGPanZoom, TOOL_AUTO, TOOL_NONE, TOOL_PAN, TOOL_ZOOM_IN, TOOL_ZOOM_OUT } from 'react-svg-pan-zoom';
8
8
  import * as constants from "../../constants";
9
- import { DECIMAL_PLACES_2, LINE_THICKNESS, MIN_ANGLE_DISALLOW_DRAW_WALL, MODE_ELEVATION_VIEW, MODE_IDLE, UNIT_ANGLE } from "../../constants";
9
+ import { DECIMAL_PLACES_2, LINE_THICKNESS, MIN_ANGLE_DISALLOW_DRAW_WALL, MODE_ELEVATION_VIEW, MODE_IDLE, UNIT_ANGLE, INTERNAL_EVENT_SELECT_ELEMENT, INTERNAL_EVENT_DRAG_ELEMENT, INTERNAL_EVENT_DRAW_ELEMENT, INTERNAL_EVENT_ROTATE_ELEMENT } from "../../constants";
10
10
  import State from "./state";
11
11
  import * as SharedStyle from "../../shared-style";
12
12
  import { RulerX, RulerY } from "./export";
@@ -123,7 +123,8 @@ export default function Viewer2D(_ref, _ref2) {
123
123
  width = _ref.width,
124
124
  height = _ref.height,
125
125
  setToolbar = _ref.setToolbar,
126
- replaceCabinet = _ref.replaceCabinet;
126
+ replaceCabinet = _ref.replaceCabinet,
127
+ onInternalEvent = _ref.onInternalEvent;
127
128
  var viewer2DActions = _ref2.viewer2DActions,
128
129
  linesActions = _ref2.linesActions,
129
130
  holesActions = _ref2.holesActions,
@@ -780,35 +781,42 @@ export default function Viewer2D(_ref, _ref2) {
780
781
  if (mode === constants.MODE_IDLE) {
781
782
  var elementData = extractElementData(event.target);
782
783
  if (!elementData) return;
783
- if (sCount < 2) switch (elementData.prototype) {
784
- case 'lines':
785
- if (elementData.selected) {
786
- if (elementData.part === 'remove') break;else if (elementData.part === 'elevation') break;
787
- linesActions.beginDraggingLine(elementData.layer, elementData.id, x, y, state.snapMask);
788
- }
789
- break;
790
- case 'vertices':
791
- verticesActions.beginDraggingVertex(elementData.layer, elementData.id, x, y, state.snapMask);
792
- break;
793
- case 'items':
794
- setToolbar('');
795
- current_sel_obj_id = elementData.id;
796
- if (elementData.part === 'rotation-anchor') itemsActions.beginRotatingItem(elementData.layer, elementData.id, x, y);else if (elementData.part === 'remove') break;else if (elementData.part === 'duplicate') break;else if (elementData.part === 'warning_edit') break;else {
797
- // closes the setting dialog
798
- if (document.getElementById('setting_dialog')) {
799
- document.getElementById('setting_dialog').style.display = 'none';
784
+ if (sCount < 2) {
785
+ switch (elementData.prototype) {
786
+ case 'lines':
787
+ if (elementData.selected) {
788
+ if (elementData.part === 'remove') break;else if (elementData.part === 'elevation') break;
789
+ linesActions.beginDraggingLine(elementData.layer, elementData.id, x, y, state.snapMask);
800
790
  }
801
- itemsActions.selectItem(elementData.layer, elementData.id);
802
- // projectActions.setMode(constants.MODE_DRAGGING_ITEM);
803
- itemsActions.beginDraggingItem(elementData.layer, elementData.id, x, y);
804
- replaceCabinet(false);
805
- }
806
- break;
807
- case 'holes':
808
- if (elementData.selected) holesActions.beginDraggingHole(elementData.layer, elementData.id, x, y);
809
- break;
810
- default:
811
- break;
791
+ break;
792
+ case 'vertices':
793
+ verticesActions.beginDraggingVertex(elementData.layer, elementData.id, x, y, state.snapMask);
794
+ break;
795
+ case 'items':
796
+ setToolbar('');
797
+ current_sel_obj_id = elementData.id;
798
+ if (elementData.part === 'rotation-anchor') itemsActions.beginRotatingItem(elementData.layer, elementData.id, x, y);else if (elementData.part === 'remove') break;else if (elementData.part === 'duplicate') break;else if (elementData.part === 'warning_edit') break;else {
799
+ // closes the setting dialog
800
+ if (document.getElementById('setting_dialog')) {
801
+ document.getElementById('setting_dialog').style.display = 'none';
802
+ }
803
+ itemsActions.selectItem(elementData.layer, elementData.id);
804
+ // projectActions.setMode(constants.MODE_DRAGGING_ITEM);
805
+ itemsActions.beginDraggingItem(elementData.layer, elementData.id, x, y);
806
+ replaceCabinet(false);
807
+ }
808
+ break;
809
+ case 'holes':
810
+ if (elementData.selected) holesActions.beginDraggingHole(elementData.layer, elementData.id, x, y);
811
+ break;
812
+ default:
813
+ break;
814
+ }
815
+ var currentObject = state.getIn(['scene', 'layers', layerID, elementData.prototype, elementData.id]);
816
+ onInternalEvent === null || onInternalEvent === void 0 || onInternalEvent({
817
+ type: INTERNAL_EVENT_SELECT_ELEMENT,
818
+ value: currentObject.toJS()
819
+ });
812
820
  } else {
813
821
  sPoint.x = x;
814
822
  sPoint.y = y;
@@ -844,10 +852,47 @@ export default function Viewer2D(_ref, _ref2) {
844
852
  y = _mapCursorPosition3.y;
845
853
  var vertices = state.getIn(['scene', 'layers', layerID, 'vertices']).toJS();
846
854
  var lines = state.getIn(['scene', 'layers', layerID, 'lines']).toJS();
855
+ var elementData = extractElementData(event.target);
856
+ var selectedLayer = scene.getIn(['layers', layerID]);
857
+ var elementPrototype = null;
858
+ var elementID = null;
859
+ var internalType = '';
860
+ switch (mode) {
861
+ case constants.MODE_DRAWING_LINE:
862
+ elementPrototype = 'lines';
863
+ internalType = INTERNAL_EVENT_DRAW_ELEMENT;
864
+ break;
865
+ case constants.MODE_DRAWING_HOLE:
866
+ elementPrototype = 'holes';
867
+ internalType = INTERNAL_EVENT_DRAW_ELEMENT;
868
+ break;
869
+ case constants.MODE_DRAWING_ITEM:
870
+ elementPrototype = 'items';
871
+ internalType = INTERNAL_EVENT_DRAW_ELEMENT;
872
+ break;
873
+ case constants.MODE_DRAGGING_LINE:
874
+ elementPrototype = 'lines';
875
+ internalType = INTERNAL_EVENT_DRAG_ELEMENT;
876
+ break;
877
+ case constants.MODE_DRAGGING_HOLE:
878
+ elementPrototype = 'holes';
879
+ internalType = INTERNAL_EVENT_DRAG_ELEMENT;
880
+ break;
881
+ case constants.MODE_DRAGGING_ITEM:
882
+ elementPrototype = 'items';
883
+ internalType = INTERNAL_EVENT_DRAG_ELEMENT;
884
+ break;
885
+ case constants.MODE_DRAGGING_VERTEX:
886
+ elementPrototype = 'lines';
887
+ internalType = INTERNAL_EVENT_DRAG_ELEMENT;
888
+ break;
889
+ case constants.MODE_ROTATING_ITEM:
890
+ elementPrototype = 'items';
891
+ internalType = INTERNAL_EVENT_ROTATE_ELEMENT;
892
+ break;
893
+ }
847
894
  switch (mode) {
848
895
  case constants.MODE_IDLE:
849
- var elementData = extractElementData(event.target);
850
- var selectedLayer = scene.getIn(['layers', layerID]);
851
896
  switch (elementData ? elementData.prototype : 'none') {
852
897
  case 'areas':
853
898
  if (document.getElementById('setting_dialog')) {
@@ -1187,6 +1232,14 @@ export default function Viewer2D(_ref, _ref2) {
1187
1232
  itemsActions.endRotatingItem(x, y);
1188
1233
  break;
1189
1234
  }
1235
+ if (elementPrototype) {
1236
+ elementID = state.getIn(['scene', 'layers', layerID, 'selected', elementPrototype]).first();
1237
+ var _currentObject = state.getIn(['scene', 'layers', layerID, elementPrototype, elementID]);
1238
+ onInternalEvent === null || onInternalEvent === void 0 || onInternalEvent({
1239
+ type: internalType,
1240
+ value: _currentObject.toJS()
1241
+ });
1242
+ }
1190
1243
  event.stopPropagation();
1191
1244
  };
1192
1245
  var onChangeValue = function onChangeValue(value) {
@@ -19,7 +19,7 @@ import { checkCabinetOverlap, createBacksplash, deleteSpecifiedMeshObjects, fVLi
19
19
  import { disposeObject, disposeScene } from "./three-memory-cleaner";
20
20
  import diff from 'immutablediff';
21
21
  import * as SharedStyle from "../../shared-style";
22
- import { BASE_CABINET_LAYOUTPOS, MODE_3D_VIEW, MODE_DRAGGING_ITEM_3D, MODE_DRAWING_HOLE_3D, MODE_DRAWING_ITEM_3D, MODE_ELEVATION_VIEW, MODE_IDLE_3D, MODE_ROTATING_ITEM_3D, SECONDARY_PURPLE_COLOR, TALL_CABINET_LAYOUTPOS, UNIT_CENTIMETER, WALL_CABINET_LAYOUTPOS } from "../../constants";
22
+ import { BASE_CABINET_LAYOUTPOS, MODE_3D_VIEW, MODE_DRAGGING_ITEM_3D, MODE_DRAWING_HOLE_3D, MODE_DRAWING_ITEM_3D, MODE_ELEVATION_VIEW, MODE_IDLE_3D, MODE_ROTATING_ITEM_3D, SECONDARY_PURPLE_COLOR, TALL_CABINET_LAYOUTPOS, UNIT_CENTIMETER, WALL_CABINET_LAYOUTPOS, INTERNAL_EVENT_SELECT_ELEMENT, INTERNAL_EVENT_DRAG_ELEMENT, INTERNAL_EVENT_DRAW_ELEMENT, INTERNAL_EVENT_ROTATE_ELEMENT, MODE_ROTATING_ITEM, MODE_DRAGGING_HOLE_3D } from "../../constants";
23
23
  import { isUndefined } from 'util';
24
24
  import { verticesDistance } from "../../utils/geometry";
25
25
  import { convert } from "../../utils/convert-units-lite";
@@ -1274,7 +1274,18 @@ var Scene3DViewer = /*#__PURE__*/function (_React$Component) {
1274
1274
  }
1275
1275
  }
1276
1276
  if (selectedObject !== undefined) {
1277
- var selectedItem = planData.sceneGraph.layers[selectedObject.layerID].items[selectedObject.itemID];
1277
+ // get selected object from planData.sceneGraph
1278
+ var selectedItem = null;
1279
+ switch (true) {
1280
+ case 'itemID' in selectedObject:
1281
+ selectedItem = planData.sceneGraph.layers[selectedObject.layerID].items[selectedObject.itemID];
1282
+ break;
1283
+ case 'holeID' in selectedObject:
1284
+ selectedItem = planData.sceneGraph.layers[selectedObject.layerID].holes[selectedObject.holeID];
1285
+ break;
1286
+ default:
1287
+ break;
1288
+ }
1278
1289
  sPoint.set(Point.x, Point.y);
1279
1290
  if (transflag == 0) {
1280
1291
  scene3D.remove(toolObj);
@@ -1340,7 +1351,8 @@ var Scene3DViewer = /*#__PURE__*/function (_React$Component) {
1340
1351
  }
1341
1352
  };
1342
1353
  this.mouseUpEvent = function (event) {
1343
- var _selObj$object, _selObj$object2;
1354
+ var internalType = ''; // internalEvent type - select/drag/draw
1355
+ var selectedElement; // internalEvent data
1344
1356
  firstMove = 0;
1345
1357
  var altitude = 0;
1346
1358
  if (allItemRect && allItemRect.cur && allItemRect.cur.itemInfo !== undefined) {
@@ -1377,6 +1389,14 @@ var Scene3DViewer = /*#__PURE__*/function (_React$Component) {
1377
1389
  isInitialPhase = true;
1378
1390
  return;
1379
1391
  }
1392
+ switch (_this2.props.state.mode) {
1393
+ case MODE_DRAGGING_ITEM_3D:
1394
+ internalType = INTERNAL_EVENT_DRAG_ELEMENT;
1395
+ break;
1396
+ case MODE_ROTATING_ITEM_3D:
1397
+ internalType = INTERNAL_EVENT_ROTATE_ELEMENT;
1398
+ break;
1399
+ }
1380
1400
  if (_this2.props.state.mode == MODE_DRAGGING_ITEM_3D) {
1381
1401
  _this2.context.itemsActions.endDraggingItem3D();
1382
1402
  }
@@ -1458,56 +1478,62 @@ var Scene3DViewer = /*#__PURE__*/function (_React$Component) {
1458
1478
  currentObject = currentObject.parent;
1459
1479
  }
1460
1480
  isSelected = true;
1461
- setTimeout(function () {
1462
- getDistances(layer);
1463
- var selectedItem = planData.sceneGraph.layers[selectedObject.layerID].items[selectedObject.itemID];
1464
- if (isUndefined(selectedItem)) return;
1465
- var selItem = _this2.props.state.scene.layers.get(selectedObject.layerID).items.get(selectedObject.itemID);
1466
- var itemPos = selectedItem.position.clone();
1467
- if (intersects[_i10].object.parent && intersects[_i10].object.parent.parent.userData.itemId === selectedItem.userData.itemId) {
1468
- toolObj.position.set(intersects[_i10].point.x, intersects[_i10].point.y, intersects[_i10].point.z);
1469
- } else {
1470
- toolObj.position.set(planData.plan.position.x + itemPos.x, selItem.category === 'lighting' ? -planData.plan.position.y - selItem.properties.get('height').get('length') : planData.plan.position.y + selectedItem.children[0].position.y, planData.plan.position.z + itemPos.z);
1471
- }
1472
- scene3D.add(toolObj);
1473
- _this2.setState({
1474
- toolObj: toolObj
1475
- });
1476
- // showItemButtons(layer.getIn(['items', selectedObject.itemID]), currentObject, event, camera, this.renderer);
1477
- var pointArray = [],
1478
- cnt = 0;
1479
- pointArray.push([fVLine[0].userData.distance, 90]);
1480
- pointArray.push([fVLine[1].userData.distance, -90]);
1481
- pointArray.push([fVLine[2].userData.distance, 180]);
1482
- pointArray.push([fVLine[3].userData.distance, 0]);
1483
- pointArray.forEach(function (pointElement, index) {
1484
- if (pointElement[0] == undefined) pointArray[index][0] = 0;
1485
- });
1486
- pointArray.forEach(function (pointElement) {
1487
- if (pointElement[0] == 0) cnt++;
1488
- });
1489
- if (cnt == 4 || cnt == 3) {
1490
- pointArray[0][0] = 100;
1491
- pointArray[1][0] = 100;
1492
- }
1493
- actions.itemsActions.storeDistArray(layer.id, selectedObject.itemID, pointArray);
1481
+ getDistances(layer);
1482
+ var selectedItem = planData.sceneGraph.layers[selectedObject.layerID].items[selectedObject.itemID];
1483
+ if (isUndefined(selectedItem)) return;
1484
+ selectedElement = _this2.props.state.scene.layers.get(selectedObject.layerID).items.get(selectedObject.itemID);
1485
+ var itemPos = selectedItem.position.clone();
1486
+ if (intersects[_i10].object.parent && intersects[_i10].object.parent.parent.userData.itemId === selectedItem.userData.itemId) {
1487
+ toolObj.position.set(intersects[_i10].point.x, intersects[_i10].point.y, intersects[_i10].point.z);
1488
+ } else {
1489
+ toolObj.position.set(planData.plan.position.x + itemPos.x, selectedElement.category === 'lighting' ? -planData.plan.position.y - selectedElement.properties.get('height').get('length') : planData.plan.position.y + selectedItem.children[0].position.y, planData.plan.position.z + itemPos.z);
1490
+ }
1491
+ scene3D.add(toolObj);
1492
+ _this2.setState({
1493
+ toolObj: toolObj
1494
+ });
1495
+ // showItemButtons(layer.getIn(['items', selectedObject.itemID]), currentObject, event, camera, this.renderer);
1496
+ var pointArray = [],
1497
+ cnt = 0;
1498
+ pointArray.push([fVLine[0].userData.distance, 90]);
1499
+ pointArray.push([fVLine[1].userData.distance, -90]);
1500
+ pointArray.push([fVLine[2].userData.distance, 180]);
1501
+ pointArray.push([fVLine[3].userData.distance, 0]);
1502
+ pointArray.forEach(function (pointElement, index) {
1503
+ if (pointElement[0] == undefined) pointArray[index][0] = 0;
1494
1504
  });
1505
+ pointArray.forEach(function (pointElement) {
1506
+ if (pointElement[0] == 0) cnt++;
1507
+ });
1508
+ if (cnt == 4 || cnt == 3) {
1509
+ pointArray[0][0] = 100;
1510
+ pointArray[1][0] = 100;
1511
+ }
1512
+ actions.itemsActions.storeDistArray(layer.id, selectedObject.itemID, pointArray);
1513
+ internalType = internalType ? internalType : INTERNAL_EVENT_SELECT_ELEMENT;
1495
1514
  } else {
1496
1515
  if (selectedObject) {
1516
+ var elementID = null;
1517
+ var elementPrototype = null;
1497
1518
  switch (true) {
1498
1519
  case 'holeID' in selectedObject:
1499
- if (selObj !== null && selObj !== void 0 && (_selObj$object = selObj.object) !== null && _selObj$object !== void 0 && _selObj$object.name.includes('transHole')) {
1500
- actions.holesActions.endDraggingHole3D(sPoint.x, sPoint.y);
1501
- }
1502
- break;
1503
1520
  case 'lineID' in selectedObject:
1504
- if (selObj !== null && selObj !== void 0 && (_selObj$object2 = selObj.object) !== null && _selObj$object2 !== void 0 && _selObj$object2.name.includes('transHole')) {
1521
+ if (_this2.props.state.mode === MODE_DRAGGING_HOLE_3D) {
1505
1522
  actions.holesActions.endDraggingHole3D(sPoint.x, sPoint.y);
1523
+ internalType = INTERNAL_EVENT_SELECT_ELEMENT;
1524
+ elementID = selectedObject.holeID;
1525
+ elementPrototype = 'holeID';
1506
1526
  }
1507
1527
  break;
1528
+ case 'areaID' in selectedObject:
1529
+ internalType = INTERNAL_EVENT_SELECT_ELEMENT;
1530
+ elementID = selectedObject.areaID;
1531
+ elementPrototype = 'areas';
1532
+ break;
1508
1533
  default:
1509
1534
  break;
1510
1535
  }
1536
+ selectedElement = _this2.props.state.scene.layers.get(selectedObject.layerID).getIn([elementPrototype, elementID]);
1511
1537
  }
1512
1538
  isSelected = false;
1513
1539
  }
@@ -1542,14 +1568,14 @@ var Scene3DViewer = /*#__PURE__*/function (_React$Component) {
1542
1568
  getPoint(event, alti);
1543
1569
  if (bRotate) {
1544
1570
  var _intersects$_i;
1545
- var selectedItem = planData.sceneGraph.layers[selectedObject.layerID].items[selectedObject.itemID];
1546
- if (isUndefined(selectedItem)) return;
1547
- var selItem = _this2.props.state.scene.layers.get(selectedObject.layerID).items.get(selectedObject.itemID);
1548
- var itemPos = selectedItem.position.clone();
1549
- if (((_intersects$_i = intersects[_i10]) === null || _intersects$_i === void 0 || (_intersects$_i = _intersects$_i.object) === null || _intersects$_i === void 0 || (_intersects$_i = _intersects$_i.parent) === null || _intersects$_i === void 0 || (_intersects$_i = _intersects$_i.parent) === null || _intersects$_i === void 0 || (_intersects$_i = _intersects$_i.userData) === null || _intersects$_i === void 0 ? void 0 : _intersects$_i.itemId) === selectedItem.userData.itemId) {
1571
+ var _selectedItem = planData.sceneGraph.layers[selectedObject.layerID].items[selectedObject.itemID];
1572
+ if (isUndefined(_selectedItem)) return;
1573
+ selectedElement = _this2.props.state.scene.layers.get(selectedObject.layerID).items.get(selectedObject.itemID);
1574
+ var _itemPos = _selectedItem.position.clone();
1575
+ if (((_intersects$_i = intersects[_i10]) === null || _intersects$_i === void 0 || (_intersects$_i = _intersects$_i.object) === null || _intersects$_i === void 0 || (_intersects$_i = _intersects$_i.parent) === null || _intersects$_i === void 0 || (_intersects$_i = _intersects$_i.parent) === null || _intersects$_i === void 0 || (_intersects$_i = _intersects$_i.userData) === null || _intersects$_i === void 0 ? void 0 : _intersects$_i.itemId) === _selectedItem.userData.itemId) {
1550
1576
  toolObj.position.set(intersects[_i10].point.x, intersects[_i10].point.y, intersects[_i10].point.z);
1551
1577
  } else {
1552
- toolObj.position.set(planData.plan.position.x + itemPos.x, selItem.category === 'lighting' ? -planData.plan.position.y - selItem.properties.get('height').get('length') : planData.plan.position.y + selectedItem.children[0].position.y, planData.plan.position.z + itemPos.z);
1578
+ toolObj.position.set(planData.plan.position.x + _itemPos.x, selectedElement.category === 'lighting' ? -planData.plan.position.y - selectedElement.properties.get('height').get('length') : planData.plan.position.y + _selectedItem.children[0].position.y, planData.plan.position.z + _itemPos.z);
1553
1579
  }
1554
1580
  scene3D.add(toolObj);
1555
1581
  _this2.setState({
@@ -1560,14 +1586,14 @@ var Scene3DViewer = /*#__PURE__*/function (_React$Component) {
1560
1586
  }
1561
1587
  if (bMove) {
1562
1588
  bMove = false;
1563
- var _selectedItem = planData.sceneGraph.layers[selectedObject.layerID].items[selectedObject.itemID];
1564
- if (isUndefined(_selectedItem)) return;
1565
- var _selItem = _this2.props.state.scene.layers.get(selectedObject.layerID).items.get(selectedObject.itemID);
1566
- var _itemPos = _selectedItem.position.clone();
1567
- if (intersects[_i10].object.parent.parent.userData.itemId === _selectedItem.userData.itemId) {
1589
+ var _selectedItem2 = planData.sceneGraph.layers[selectedObject.layerID].items[selectedObject.itemID];
1590
+ if (isUndefined(_selectedItem2)) return;
1591
+ selectedElement = _this2.props.state.scene.layers.get(selectedObject.layerID).items.get(selectedObject.itemID);
1592
+ var _itemPos2 = _selectedItem2.position.clone();
1593
+ if (intersects[_i10].object.parent.parent.userData.itemId === _selectedItem2.userData.itemId) {
1568
1594
  toolObj.position.set(intersects[_i10].point.x, intersects[_i10].point.y, intersects[_i10].point.z);
1569
1595
  } else {
1570
- toolObj.position.set(planData.plan.position.x + _itemPos.x, _selItem.category === 'lighting' ? -planData.plan.position.y - _selItem.properties.get('height').get('length') : planData.plan.position.y + _selectedItem.children[0].position.y, planData.plan.position.z + _itemPos.z);
1596
+ toolObj.position.set(planData.plan.position.x + _itemPos2.x, selectedElement.category === 'lighting' ? -planData.plan.position.y - selectedElement.properties.get('height').get('length') : planData.plan.position.y + _selectedItem2.children[0].position.y, planData.plan.position.z + _itemPos2.z);
1571
1597
  }
1572
1598
  scene3D.add(toolObj);
1573
1599
  _this2.setState({
@@ -1601,6 +1627,13 @@ var Scene3DViewer = /*#__PURE__*/function (_React$Component) {
1601
1627
  selectedObj = allItemRect.cur;
1602
1628
  }
1603
1629
  }
1630
+ if (!isEmpty(internalType)) {
1631
+ var _this2$props$onIntern, _this2$props;
1632
+ (_this2$props$onIntern = (_this2$props = _this2.props).onInternalEvent) === null || _this2$props$onIntern === void 0 || _this2$props$onIntern.call(_this2$props, {
1633
+ type: internalType,
1634
+ value: selectedElement.toJS()
1635
+ });
1636
+ }
1604
1637
  };
1605
1638
  this.mouseEnterEvent = function (event) {
1606
1639
  if (_this2.props.state.mode !== MODE_DRAWING_ITEM_3D) return;
package/es/constants.js CHANGED
@@ -667,4 +667,10 @@ export var EXTERNAL_EVENT_ZOOM_OUT = 'EXTERNAL_EVENT_ZOOM_OUT';
667
667
  export var EXTERNAL_EVENT_UNDO = 'EXTERNAL_EVENT_UNDO';
668
668
  export var EXTERNAL_EVENT_REDO = 'EXTERNAL_EVENT_REDO';
669
669
  export var EXTERNAL_EVENT_SET_MOLDING = 'EXTERNAL_EVENT_SET_MOLDING';
670
- export var EXTERNAL_EVENT_PROJECT_SETTING = 'EXTERNAL_EVENT_PROJECT_SETTING';
670
+ export var EXTERNAL_EVENT_PROJECT_SETTING = 'EXTERNAL_EVENT_PROJECT_SETTING';
671
+
672
+ // internal event type
673
+ export var INTERNAL_EVENT_SELECT_ELEMENT = 'INTERNAL_EVENT_SELECT_ELEMENT';
674
+ export var INTERNAL_EVENT_DRAG_ELEMENT = 'INTERNAL_EVENT_DRAG_ELEMENT';
675
+ export var INTERNAL_EVENT_DRAW_ELEMENT = 'INTERNAL_EVENT_DRAW_ELEMENT';
676
+ export var INTERNAL_EVENT_ROTATE_ELEMENT = 'INTERNAL_EVENT_ROTATE_ELEMENT';
@@ -1,7 +1,7 @@
1
1
  import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
2
2
  import React, { useState, useEffect } from 'react';
3
3
  import ContainerDimensions from 'react-container-dimensions';
4
- import mockProps from "./mocks/mockProps.json";
4
+ import mockProps from "./mocks/mockProps2.json";
5
5
  import mockDataBundle from "./mocks/dataBundle2.json";
6
6
  import cabinetPaylod from "./mocks/cabinetPayload2.json";
7
7
  import doorStylePaylod from "./mocks/doorStylePayload.json";
@@ -19,6 +19,9 @@ var options = {
19
19
  unit: 'in',
20
20
  enable3D: true
21
21
  };
22
+ var onInternalEvent = function onInternalEvent(evt) {
23
+ console.log('EVENT:', evt.type, evt.value);
24
+ };
22
25
  document.getElementById('app').style.display = 'block';
23
26
  function WorkSpace(props) {
24
27
  var _useState = useState(null),
@@ -270,6 +273,7 @@ function WorkSpace(props) {
270
273
  companyUrl: "https://example.com",
271
274
  toolbarButtons: [],
272
275
  externalEvent: externalEvent,
276
+ onInternalEvent: onInternalEvent,
273
277
  onError: function onError(payload) {
274
278
  // payload = {
275
279
  // type: 'render-error' | 'runtime-error' | 'unhandled-rejection',
@@ -873,18 +873,18 @@ export function getAllItemSnap(allItemRects) {
873
873
  var snap4 = itemrectInfo(rect.rect[3].x + ox0, rect.rect[3].y + oy0, nrot, cur && cur.size, rect.layoutpos, rect.is_corner);
874
874
  var sizeinfo = otherItems[index].cat && otherItems[index].cat.info.sizeinfo;
875
875
  if (sizeinfo) {
876
- var left_blind_length = sizeinfo.left_blind_length,
877
- right_blind_length = sizeinfo.right_blind_length;
878
- if (left_blind_length > 0) {
879
- var vx = left_blind_length - ch;
876
+ var leftBlindLength = sizeinfo.leftBlindLength,
877
+ rightBlindLength = sizeinfo.rightBlindLength;
878
+ if (leftBlindLength > 0) {
879
+ var vx = leftBlindLength - ch;
880
880
  var vy = cw;
881
881
  var dx = vx * cos + vy * sin;
882
882
  var dy = vx * sin - vy * cos;
883
883
  var snap6 = itemrectInfo(rect.rect[0].x + dx, rect.rect[0].y + dy, rect.rotRad + Math.PI / 2, cur && cur.size, rect.layoutpos, rect.is_corner);
884
884
  allItemSnap.push(snap6);
885
885
  }
886
- if (right_blind_length > 0) {
887
- var _vx = ch - right_blind_length;
886
+ if (rightBlindLength > 0) {
887
+ var _vx = ch - rightBlindLength;
888
888
  var _vy = cw;
889
889
  var _dx = _vx * cos + _vy * sin;
890
890
  var _dy = _vx * sin - _vy * cos;