hart-estate-widget 0.0.64 → 0.0.67

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 (96) hide show
  1. package/README.md +7 -3
  2. package/package.json +17 -5
  3. package/build/assets/css/app.css +0 -1
  4. package/build/assets/css/app.css.map +0 -1
  5. package/build/assets/fonts/RobotoMono/RobotoMono-Bold.ttf +0 -0
  6. package/build/assets/fonts/RobotoMono/RobotoMono-Bold.woff +0 -0
  7. package/build/assets/fonts/RobotoMono/RobotoMono-Bold.woff2 +0 -0
  8. package/build/assets/fonts/RobotoMono/RobotoMono-BoldItalic.ttf +0 -0
  9. package/build/assets/fonts/RobotoMono/RobotoMono-BoldItalic.woff +0 -0
  10. package/build/assets/fonts/RobotoMono/RobotoMono-BoldItalic.woff2 +0 -0
  11. package/build/assets/fonts/RobotoMono/RobotoMono-Italic.ttf +0 -0
  12. package/build/assets/fonts/RobotoMono/RobotoMono-Italic.woff +0 -0
  13. package/build/assets/fonts/RobotoMono/RobotoMono-Italic.woff2 +0 -0
  14. package/build/assets/fonts/RobotoMono/RobotoMono-Light.ttf +0 -0
  15. package/build/assets/fonts/RobotoMono/RobotoMono-Light.woff +0 -0
  16. package/build/assets/fonts/RobotoMono/RobotoMono-Light.woff2 +0 -0
  17. package/build/assets/fonts/RobotoMono/RobotoMono-LightItalic.ttf +0 -0
  18. package/build/assets/fonts/RobotoMono/RobotoMono-LightItalic.woff +0 -0
  19. package/build/assets/fonts/RobotoMono/RobotoMono-LightItalic.woff2 +0 -0
  20. package/build/assets/fonts/RobotoMono/RobotoMono-Medium.ttf +0 -0
  21. package/build/assets/fonts/RobotoMono/RobotoMono-Medium.woff +0 -0
  22. package/build/assets/fonts/RobotoMono/RobotoMono-Medium.woff2 +0 -0
  23. package/build/assets/fonts/RobotoMono/RobotoMono-MediumItalic.ttf +0 -0
  24. package/build/assets/fonts/RobotoMono/RobotoMono-MediumItalic.woff +0 -0
  25. package/build/assets/fonts/RobotoMono/RobotoMono-MediumItalic.woff2 +0 -0
  26. package/build/assets/fonts/RobotoMono/RobotoMono-Regular.ttf +0 -0
  27. package/build/assets/fonts/RobotoMono/RobotoMono-Regular.woff +0 -0
  28. package/build/assets/fonts/RobotoMono/RobotoMono-Regular.woff2 +0 -0
  29. package/build/assets/fonts/RobotoMono/RobotoMono-Thin.ttf +0 -0
  30. package/build/assets/fonts/RobotoMono/RobotoMono-Thin.woff +0 -0
  31. package/build/assets/fonts/RobotoMono/RobotoMono-Thin.woff2 +0 -0
  32. package/build/assets/fonts/RobotoMono/RobotoMono.css +0 -98
  33. package/build/assets/icons/1x.svg +0 -4
  34. package/build/assets/icons/2x.svg +0 -4
  35. package/build/assets/icons/bullet.png +0 -0
  36. package/build/assets/icons/close.svg +0 -4
  37. package/build/assets/icons/enter-fullscreen.svg +0 -6
  38. package/build/assets/icons/hand-move.svg +0 -15
  39. package/build/assets/icons/hand-research.svg +0 -12
  40. package/build/assets/icons/rotation-close.svg +0 -6
  41. package/build/assets/icons/rotation.svg +0 -4
  42. package/build/assets/img/3D.jpg +0 -0
  43. package/build/assets/img/door-icon.png +0 -0
  44. package/build/assets/img/door-texture.jpeg +0 -0
  45. package/build/assets/img/exterior-wall-texture-roughness.jpg +0 -0
  46. package/build/assets/img/exterior-wall-texture.jpeg +0 -0
  47. package/build/assets/img/floor-bathroom.jpg +0 -0
  48. package/build/assets/img/floor-dark.png +0 -0
  49. package/build/assets/img/floor-white.png +0 -0
  50. package/build/assets/img/floor.jpg +0 -0
  51. package/build/assets/img/grass.png +0 -0
  52. package/build/assets/img/logo.svg +0 -11
  53. package/build/assets/img/refresh-icon.svg +0 -6
  54. package/build/assets/img/spot-icon.png +0 -0
  55. package/build/assets/img/wall-texture.jpg +0 -0
  56. package/build/assets/sass/components/instructions.sass +0 -94
  57. package/build/assets/sass/components/loader.sass +0 -54
  58. package/build/assets/sass/components/model.sass +0 -27
  59. package/build/assets/sass/components/panorama.sass +0 -174
  60. package/build/assets/sass/components/rotation.sass +0 -106
  61. package/build/assets/sass/components/tabs.sass +0 -121
  62. package/build/assets/sass/index.sass +0 -65
  63. package/build/assets/sass/mixin.sass +0 -48
  64. package/build/assets/sass/vars.sass +0 -28
  65. package/build/components/Application.js +0 -132
  66. package/build/components/Buttons/FullScreenButton.js +0 -50
  67. package/build/components/Buttons/TabButton.js +0 -24
  68. package/build/components/Instructions.js +0 -54
  69. package/build/components/Loader.js +0 -22
  70. package/build/components/ModelTab.js +0 -213
  71. package/build/components/PanoramaTab.js +0 -620
  72. package/build/components/RotationTab.js +0 -152
  73. package/build/components/Widget.js +0 -130
  74. package/build/config/defaultConfig.js +0 -30
  75. package/build/enums/deviceOrientationStatuses.js +0 -11
  76. package/build/enums/deviceWidth.js +0 -21
  77. package/build/enums/imageExtentions.js +0 -16
  78. package/build/index.css +0 -2
  79. package/build/index.js +0 -67
  80. package/build/locale/en/data.json +0 -25
  81. package/build/locale/index.js +0 -71
  82. package/build/locale/ru/data.json +0 -25
  83. package/build/store/apiStore.js +0 -231
  84. package/build/store/deviceStore.js +0 -60
  85. package/build/store/fullScreenStore.js +0 -159
  86. package/build/store/houseStore.js +0 -952
  87. package/build/store/index.js +0 -124
  88. package/build/store/modelStore.js +0 -338
  89. package/build/threesixty/events.js +0 -220
  90. package/build/threesixty/index.js +0 -264
  91. package/build/utils/csg/csg-lib.js +0 -472
  92. package/build/utils/csg/csg-worker.js +0 -84
  93. package/build/utils/csg/three-csg.js +0 -277
  94. package/build/utils/helpers.js +0 -12
  95. package/build/utils/modelHelpers.js +0 -161
  96. package/build/utils/panoramaHelpers.js +0 -117
@@ -1,620 +0,0 @@
1
- "use strict";
2
-
3
- function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
4
-
5
- Object.defineProperty(exports, "__esModule", {
6
- value: true
7
- });
8
- exports.default = void 0;
9
-
10
- var _react = _interopRequireWildcard(require("react"));
11
-
12
- var _deviceStore = _interopRequireDefault(require("../store/deviceStore"));
13
-
14
- var _locale = _interopRequireDefault(require("../locale"));
15
-
16
- var _store = _interopRequireDefault(require("../store"));
17
-
18
- var THREE = _interopRequireWildcard(require("three"));
19
-
20
- var PANOLENS = _interopRequireWildcard(require("panolens"));
21
-
22
- var _threeDeviceOrientation = _interopRequireDefault(require("three-device-orientation"));
23
-
24
- var _geometric = require("geometric");
25
-
26
- var _deviceOrientationStatuses = require("../enums/deviceOrientationStatuses");
27
-
28
- var _deviceWidth = require("../enums/deviceWidth");
29
-
30
- var _imageExtentions = require("../enums/imageExtentions");
31
-
32
- var _helpers = require("../utils/helpers");
33
-
34
- var _panoramaHelpers = require("../utils/panoramaHelpers");
35
-
36
- var _Loader = _interopRequireDefault(require("./Loader"));
37
-
38
- var _Instructions = _interopRequireDefault(require("./Instructions"));
39
-
40
- var _spotIcon = _interopRequireDefault(require("../assets/img/spot-icon.png"));
41
-
42
- var _doorIcon = _interopRequireDefault(require("../assets/img/door-icon.png"));
43
-
44
- var _handMove = _interopRequireDefault(require("../assets/icons/hand-move.svg"));
45
-
46
- var _handResearch = _interopRequireDefault(require("../assets/icons/hand-research.svg"));
47
-
48
- var _rotationClose = _interopRequireDefault(require("../assets/icons/rotation-close.svg"));
49
-
50
- var _rotation = _interopRequireDefault(require("../assets/icons/rotation.svg"));
51
-
52
- var _x = _interopRequireDefault(require("../assets/icons/1x.svg"));
53
-
54
- var _x2 = _interopRequireDefault(require("../assets/icons/2x.svg"));
55
-
56
- var _close = _interopRequireDefault(require("../assets/icons/close.svg"));
57
-
58
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
59
-
60
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
61
-
62
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
63
-
64
- function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
65
-
66
- function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
67
-
68
- function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
69
-
70
- function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
71
-
72
- function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
73
-
74
- function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
75
-
76
- var _PANOLENS$CONTROLS = PANOLENS.CONTROLS,
77
- DEVICEORIENTATION = _PANOLENS$CONTROLS.DEVICEORIENTATION,
78
- ORBIT = _PANOLENS$CONTROLS.ORBIT;
79
- var pathName = 'Panorama_0_0_';
80
- var cameraFovValues = {
81
- x1: 90,
82
- x2: 60
83
- };
84
-
85
- var getDefaultUserData = function getDefaultUserData() {
86
- return {
87
- left: 0,
88
- top: 0,
89
- points: []
90
- };
91
- };
92
-
93
- var createPanorama = function createPanorama(image, index, setLoadingState) {
94
- var panorama = new PANOLENS.ImagePanorama(image);
95
- panorama.userData = getDefaultUserData();
96
- panorama['panorama_id'] = index + 1;
97
- panorama.addEventListener('progress', function (event) {
98
- setLoadingState(true);
99
-
100
- if (event.progress.loaded / event.progress.total * 100 === 100) {
101
- setLoadingState(false);
102
- }
103
- });
104
- panorama.addEventListener('enter', function () {
105
- return setLoadingState(false);
106
- });
107
- return panorama;
108
- };
109
-
110
- var getPanoramas = function getPanoramas(json, images, setLoadingState) {
111
- if (!json) return images.map(function (image, index) {
112
- return createPanorama(image, index, setLoadingState);
113
- });
114
- var panoramas = json.Floors[0].Units[0].Rooms.reduce(function (acc, jsonRoom, index) {
115
- var roomImages = images.filter(function (img) {
116
- var panoramaIdIndex = img.indexOf(pathName) + pathName.length;
117
- if (panoramaIdIndex < pathName.length) return false;
118
- var indexAsString = String(index);
119
- var panoramaId = String((0, _imageExtentions.removeExtention)(img.substring(panoramaIdIndex))).split('.')[0];
120
-
121
- if (panoramaId.toLowerCase().includes(_panoramaHelpers.cameraIdBeginning)) {
122
- var cameraIdIndex = panoramaId.toLowerCase().indexOf(_panoramaHelpers.cameraIdBeginning) - 1;
123
- panoramaId = panoramaId.slice(0, cameraIdIndex);
124
- }
125
-
126
- var maxIndexLength = Math.max(indexAsString.length, panoramaId.length);
127
- var imageInRoom = (0, _panoramaHelpers.getArrayFromNumber)(maxIndexLength).every(function (i) {
128
- return panoramaId[i] === indexAsString[i];
129
- });
130
- return imageInRoom;
131
- });
132
- if (!roomImages.length) return acc;
133
- roomImages.forEach(function (image) {
134
- var panorama = createPanorama(image, index, setLoadingState);
135
- panorama['room_images'] = roomImages;
136
- panorama['room_id'] = jsonRoom.ID;
137
- var roomPoints = (0, _panoramaHelpers.getRoomCoordinates)(jsonRoom, json.Floors[0].Walls, json.Vertices);
138
-
139
- var _polygonMean = (0, _geometric.polygonMean)(roomPoints),
140
- _polygonMean2 = _slicedToArray(_polygonMean, 2),
141
- left = _polygonMean2[0],
142
- top = _polygonMean2[1];
143
-
144
- if (panorama.src.toLowerCase().includes(_panoramaHelpers.cameraIdBeginning)) {
145
- var currentCamera = (0, _panoramaHelpers.getCameraFromSrc)(json, panorama.src);
146
- left = currentCamera.Location.X;
147
- top = currentCamera.Location.Y;
148
- }
149
-
150
- panorama.userData = {
151
- left: left,
152
- top: top,
153
- points: roomPoints
154
- };
155
-
156
- if (panorama['room_id'] === _store.default.initialPanoramaRoomId) {
157
- acc.unshift(panorama);
158
- } else {
159
- acc.push(panorama);
160
- }
161
- });
162
- return acc;
163
- }, []);
164
- return panoramas.map(function (panorama, index) {
165
- panorama['panorama_index'] = index;
166
- var currentRoom = json.Floors[0].Units[0].Rooms.find(function (room) {
167
- return room.ID === panorama['room_id'];
168
- });
169
-
170
- if (!panorama.linkedSpots.length) {
171
- return setPanoramaLinks(json, currentRoom, panorama, panoramas);
172
- }
173
-
174
- return panorama;
175
- });
176
- };
177
-
178
- var setPanoramaLinks = function setPanoramaLinks(json, currentRoom, panorama, panoramas) {
179
- var center = [panorama.userData.left, panorama.userData.top];
180
- panorama['room_images'].forEach(function (image) {
181
- if (image === panorama.src) return;
182
- var connectedPanorama = panoramas.find(function (_ref) {
183
- var src = _ref.src;
184
- return src === image;
185
- });
186
- var currentCamera = (0, _panoramaHelpers.getCameraFromSrc)(json, connectedPanorama.src);
187
- if (!currentCamera) return;
188
- connectPanorama(panorama, connectedPanorama, currentCamera.Location, center, false);
189
- });
190
- json.Floors[0].Doors.forEach(function (_ref2) {
191
- var Location = _ref2.Location,
192
- Walls = _ref2.Walls;
193
- if (!Walls.some(function (doorWallId) {
194
- return currentRoom.Walls.some(function (roomWallId) {
195
- return roomWallId === doorWallId;
196
- });
197
- })) return;
198
- var connectedRoom = json.Floors[0].Units[0].Rooms.find(function (room) {
199
- var roomHasSameWall = room.Walls.some(function (roomWallId) {
200
- return Walls.some(function (doorWallId) {
201
- return roomWallId === doorWallId;
202
- });
203
- });
204
- var isSameRoom = room.ID === currentRoom.ID;
205
- return roomHasSameWall && !isSameRoom;
206
- });
207
- if (!connectedRoom) return;
208
- var availablePanoramas = panoramas.filter(function (_ref3) {
209
- var room_id = _ref3.room_id;
210
- return room_id === connectedRoom.ID;
211
- });
212
-
213
- var _getClosestPanorama = (0, _panoramaHelpers.getClosestPanorama)([Location.X, Location.Y], availablePanoramas),
214
- connectedPanorama = _getClosestPanorama.panorama;
215
-
216
- if (!connectedPanorama) return;
217
- connectPanorama(panorama, connectedPanorama, Location, center, true);
218
- });
219
- return panorama;
220
- };
221
-
222
- var connectPanorama = function connectPanorama(panorama, connectedPanorama, location, center) {
223
- var isDoorLink = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;
224
- var locationX = location.Y - center[1];
225
- var locationY = location.X - center[0];
226
- var locationZ = isDoorLink ? -10 : -100;
227
- var icon = isDoorLink ? _doorIcon.default : _spotIcon.default;
228
- var iconUrl = "".concat(icon, "?id=").concat(panorama['panorama_index'], "-").concat(panorama['panorama_id'], "-").concat(Math.random());
229
- var defaultScale = 20;
230
- var maxScale = 50;
231
- var defaultLength = 120;
232
- var length = (0, _geometric.lineLength)([[0, 0], [locationX, locationY]]);
233
- var scale = length / defaultLength * defaultScale;
234
- var finalScale = scale > maxScale ? maxScale : scale;
235
- var resultScale = isDoorLink ? finalScale : finalScale - 15;
236
- var position = new THREE.Vector3(locationX, locationZ, locationY);
237
- panorama.link(connectedPanorama, position, resultScale, iconUrl);
238
- };
239
-
240
- var PanoramaTab = function PanoramaTab(_ref4) {
241
- var _panoramas$currentRoo;
242
-
243
- var json = _ref4.json,
244
- planImage = _ref4.planImage,
245
- images = _ref4.images,
246
- disabled = _ref4.disabled;
247
- var instructionSteps = [{
248
- icon: _handMove.default,
249
- text: _locale.default.getLocaleText('rotate-plan')
250
- }, {
251
- icon: _handResearch.default,
252
- text: _locale.default.getLocaleText('research-plan')
253
- }];
254
-
255
- var _useState = (0, _react.useState)(_deviceOrientationStatuses.deviceOrientationStatuses.DENIED),
256
- _useState2 = _slicedToArray(_useState, 2),
257
- deviceOrientationStatus = _useState2[0],
258
- setDeviceOrientationStatus = _useState2[1];
259
-
260
- var _useState3 = (0, _react.useState)(true),
261
- _useState4 = _slicedToArray(_useState3, 2),
262
- showInstructions = _useState4[0],
263
- setInstructionsState = _useState4[1];
264
-
265
- var _useState5 = (0, _react.useState)(true),
266
- _useState6 = _slicedToArray(_useState5, 2),
267
- loadingState = _useState6[0],
268
- setLoadingState = _useState6[1];
269
-
270
- var _useState7 = (0, _react.useState)({
271
- width: '200px',
272
- height: 'auto'
273
- }),
274
- _useState8 = _slicedToArray(_useState7, 2),
275
- mapSize = _useState8[0],
276
- setMapSize = _useState8[1];
277
-
278
- var _useState9 = (0, _react.useState)(false),
279
- _useState10 = _slicedToArray(_useState9, 2),
280
- mapOpen = _useState10[0],
281
- setMapState = _useState10[1];
282
-
283
- var _useState11 = (0, _react.useState)({
284
- X: 1,
285
- Y: 1
286
- }),
287
- _useState12 = _slicedToArray(_useState11, 2),
288
- planScale = _useState12[0],
289
- setPlanScale = _useState12[1];
290
-
291
- var _useState13 = (0, _react.useState)(true),
292
- _useState14 = _slicedToArray(_useState13, 2),
293
- isMapDisabled = _useState14[0],
294
- setMapDisabledState = _useState14[1];
295
-
296
- var _useState15 = (0, _react.useState)(false),
297
- _useState16 = _slicedToArray(_useState15, 2),
298
- autoplayEnabled = _useState16[0],
299
- setAutoplayState = _useState16[1];
300
-
301
- var _useState17 = (0, _react.useState)(cameraFovValues.x1),
302
- _useState18 = _slicedToArray(_useState17, 2),
303
- cameraFov = _useState18[0],
304
- setCameraFov = _useState18[1];
305
-
306
- var _useState19 = (0, _react.useState)(0),
307
- _useState20 = _slicedToArray(_useState19, 2),
308
- currentRoomIndex = _useState20[0],
309
- setCurrentRoomIndex = _useState20[1];
310
-
311
- var _useState21 = (0, _react.useState)([]),
312
- _useState22 = _slicedToArray(_useState21, 2),
313
- panoramas = _useState22[0],
314
- setPanoramas = _useState22[1];
315
-
316
- var _useState23 = (0, _react.useState)(null),
317
- _useState24 = _slicedToArray(_useState23, 2),
318
- viewer = _useState24[0],
319
- setViewer = _useState24[1];
320
-
321
- var changePanorama = function changePanorama(panorama) {
322
- setCurrentRoomIndex(panorama['panorama_index']);
323
- viewer.setPanorama(panorama);
324
- };
325
-
326
- var setScale = function setScale() {
327
- if (!viewer) return;
328
- var image = document.querySelector('.widget-tab__panorama-map img');
329
- var imageWidth = image.naturalWidth;
330
- var imageHeight = image.naturalHeight;
331
- var imageDelta = imageWidth / imageHeight;
332
- var maxWidth = 200;
333
- var maxHeight = _store.default.config.height - 200;
334
- var width = maxWidth;
335
- var height = width / imageDelta;
336
-
337
- if (height >= maxHeight) {
338
- height = maxHeight;
339
- width = height * imageDelta;
340
- }
341
-
342
- setMapSize({
343
- width: "".concat(width, "px"),
344
- height: "".concat(height, "px")
345
- });
346
- setPlanScale((0, _panoramaHelpers.getScale)({
347
- width: width,
348
- height: height
349
- }, json));
350
- viewer.onWindowResize(_store.default.config.width, _store.default.config.height);
351
- };
352
-
353
- var onImageLoaded = function onImageLoaded() {
354
- setScale();
355
- setMapDisabledState(!json);
356
- };
357
-
358
- var getDotPosition = function getDotPosition(_ref5) {
359
- var left = _ref5.left,
360
- top = _ref5.top;
361
- return {
362
- left: "".concat(left * planScale.X, "px"),
363
- top: "".concat(top * planScale.Y, "px")
364
- };
365
- };
366
-
367
- var updateCameraFov = function updateCameraFov(fov) {
368
- setCameraFov(fov);
369
- viewer.camera.fov = fov;
370
- viewer.camera.currentFov = fov;
371
- viewer.camera.updateProjectionMatrix();
372
- };
373
-
374
- var toggleFov = function toggleFov() {
375
- if (viewer.camera.fov === cameraFovValues.x1) {
376
- updateCameraFov(cameraFovValues.x2);
377
- return;
378
- }
379
-
380
- updateCameraFov(cameraFovValues.x1);
381
- };
382
-
383
- var getAngle = function getAngle(control) {
384
- if (control.alpha) {
385
- return control.alpha - THREE.MathUtils.degToRad(control.screenOrientation);
386
- }
387
-
388
- return control.getAzimuthalAngle();
389
- };
390
-
391
- var toggleAutoplay = function toggleAutoplay() {
392
- setAutoplayState(!autoplayEnabled);
393
-
394
- if (autoplayEnabled) {
395
- viewer.disableAutoRate();
396
-
397
- if (deviceOrientationStatus === _deviceOrientationStatuses.deviceOrientationStatuses.GRANTED) {
398
- viewer.enableControl(DEVICEORIENTATION);
399
- }
400
-
401
- return;
402
- }
403
-
404
- if (viewer.getControlId() !== 'orbit') {
405
- viewer.enableControl(ORBIT);
406
- }
407
-
408
- viewer.enableAutoRate();
409
- };
410
-
411
- (0, _react.useEffect)(function () {
412
- if (!panoramas.length) return;
413
- var container = document.querySelector('.widget-tab__panorama-overlay');
414
- var newViewer = new PANOLENS.Viewer({
415
- autoRotateActivationDuration: 1000,
416
- cameraFov: cameraFovValues.x1,
417
- autoHideInfospot: false,
418
- controlButtons: [],
419
- container: container
420
- });
421
-
422
- var preventCameraFovChange = function preventCameraFovChange(e) {
423
- e.preventDefault();
424
- e.stopPropagation();
425
- newViewer.camera.fov = newViewer.camera.currentFov;
426
- newViewer.camera.updateProjectionMatrix();
427
- };
428
-
429
- container.addEventListener('mousewheel', preventCameraFovChange);
430
- container.addEventListener('touchmove', preventCameraFovChange);
431
- panoramas.forEach(function (panorama) {
432
- if (!panorama.panorama_id) return;
433
- panorama.addEventListener('enter', function (_ref6) {
434
- var target = _ref6.target;
435
- return setCurrentRoomIndex(target['panorama_index']);
436
- });
437
- newViewer.add(panorama);
438
- });
439
- newViewer.scene.rotation.y = Math.PI / 2;
440
- newViewer.camera.currentFov = cameraFovValues.x1;
441
- setViewer(newViewer);
442
- var camera = new THREE.PerspectiveCamera(75, container.clientWidth / container.clientHeight, 1, 1000);
443
- var orientationControls = new _threeDeviceOrientation.default(camera);
444
-
445
- var animate = function animate() {
446
- window.requestAnimationFrame(animate);
447
- orientationControls.update();
448
- var fovElement = document.querySelector('.widget-tab__panorama-map__fov');
449
- if (!fovElement) return;
450
- var angle = -getAngle(newViewer.getControl());
451
- fovElement.style.transform = "translate(-50%, -50%) rotate(".concat(angle, "rad)");
452
- };
453
-
454
- animate();
455
- }, [panoramas]);
456
- (0, _react.useEffect)(setScale, [json, viewer, _store.default.config.width, _store.default.config.height]);
457
- (0, _react.useEffect)(function () {
458
- return setPanoramas(getPanoramas(json, images, setLoadingState));
459
- }, [json, images]);
460
-
461
- var requestDeviceOrientation = function requestDeviceOrientation() {
462
- return DeviceOrientationEvent.requestPermission().then(function (status) {
463
- setDeviceOrientationStatus(status);
464
-
465
- if (status !== _deviceOrientationStatuses.deviceOrientationStatuses.GRANTED) {
466
- viewer.enableControl(ORBIT);
467
- return;
468
- }
469
-
470
- viewer.enableControl(DEVICEORIENTATION);
471
- });
472
- };
473
-
474
- var onStart = function onStart() {
475
- setInstructionsState(false);
476
- if (!_deviceStore.default.isMobile && !_deviceStore.default.isTablet) return;
477
-
478
- var allowDeviceOrientation = function allowDeviceOrientation() {
479
- window.removeEventListener('deviceorientation', allowDeviceOrientation);
480
- setDeviceOrientationStatus(_deviceOrientationStatuses.deviceOrientationStatuses.GRANTED);
481
- viewer.enableControl(DEVICEORIENTATION);
482
- };
483
-
484
- try {
485
- if (!DeviceOrientationEvent.requestPermission) {
486
- window.addEventListener('deviceorientation', allowDeviceOrientation);
487
- return;
488
- }
489
-
490
- return requestDeviceOrientation();
491
- } catch (error) {
492
- console.error(error.message);
493
- }
494
- };
495
-
496
- var getRoomPointsAsString = function getRoomPointsAsString(points) {
497
- return points.map(function (_ref7) {
498
- var _ref8 = _slicedToArray(_ref7, 2),
499
- x = _ref8[0],
500
- y = _ref8[1];
501
-
502
- return [x * planScale.X, y * planScale.Y];
503
- }).flat().filter(function (num) {
504
- return !isNaN(num);
505
- }).toString();
506
- };
507
-
508
- var openMap = function openMap() {
509
- _store.default.hideControls();
510
-
511
- setMapState(true);
512
- };
513
-
514
- var closeMap = function closeMap() {
515
- _store.default.showControls();
516
-
517
- setMapState(false);
518
- };
519
-
520
- var onMapClick = function onMapClick(event) {
521
- if (loadingState) return;
522
-
523
- if (_store.default.config.width <= _deviceWidth.deviceWidth.tablet) {
524
- if (!mapOpen) {
525
- openMap();
526
- return;
527
- }
528
- }
529
-
530
- var map = document.querySelector('.widget-tab__panorama-map');
531
- var mapScale = map.getBoundingClientRect().width / map.offsetWidth;
532
- var image = document.querySelector('.widget-tab__panorama-map img');
533
- var offset = image.getBoundingClientRect();
534
- var clientX = event.clientX,
535
- clientY = event.clientY;
536
- var x = (clientX - offset.left) / mapScale / planScale.X;
537
- var y = (clientY - offset.top) / mapScale / planScale.Y;
538
- var availablePanoramas = panoramas.filter(function (_ref9) {
539
- var userData = _ref9.userData;
540
- return (0, _geometric.pointInPolygon)([x, y], userData.points);
541
- });
542
-
543
- var _getClosestPanorama2 = (0, _panoramaHelpers.getClosestPanorama)([x, y], availablePanoramas),
544
- panorama = _getClosestPanorama2.panorama;
545
-
546
- closeMap();
547
- if (!panorama) return;
548
- changePanorama(panorama);
549
- };
550
-
551
- var getMapClass = function getMapClass() {
552
- var className = 'widget-tab__panorama-map';
553
-
554
- if (isMapDisabled) {
555
- className += ' widget-tab__panorama-map--hidden';
556
- }
557
-
558
- if (mapOpen) {
559
- className += ' widget-tab__panorama-map--scaled';
560
- }
561
-
562
- return className;
563
- };
564
-
565
- return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("div", {
566
- className: "widget-tab__panorama"
567
- }, /*#__PURE__*/_react.default.createElement("div", {
568
- className: "widget-tab__panorama-overlay",
569
- onContextMenu: _helpers.preventRightClick
570
- }), loadingState && /*#__PURE__*/_react.default.createElement(_Loader.default, {
571
- absolute: true
572
- }), mapOpen && /*#__PURE__*/_react.default.createElement("div", {
573
- className: "widget-tab__panorama-close-map",
574
- onClick: closeMap
575
- }, /*#__PURE__*/_react.default.createElement("img", {
576
- src: _close.default,
577
- alt: "close-map"
578
- })), /*#__PURE__*/_react.default.createElement("div", {
579
- className: getMapClass()
580
- }, /*#__PURE__*/_react.default.createElement("img", {
581
- src: planImage,
582
- style: mapSize,
583
- alt: "plan",
584
- onLoad: onImageLoaded
585
- }), !isMapDisabled && /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("div", {
586
- className: "widget-tab__panorama-map__fov",
587
- style: getDotPosition(((_panoramas$currentRoo = panoramas[currentRoomIndex]) === null || _panoramas$currentRoo === void 0 ? void 0 : _panoramas$currentRoo.userData) || getDefaultUserData())
588
- }), /*#__PURE__*/_react.default.createElement("svg", {
589
- width: mapSize.width,
590
- key: "X-".concat(planScale.X, "-Y-").concat(planScale.Y),
591
- onClick: onMapClick
592
- }, panoramas.map(function (_ref10, index) {
593
- var userData = _ref10.userData;
594
- return /*#__PURE__*/_react.default.createElement("polygon", {
595
- key: index,
596
- points: getRoomPointsAsString(userData.points)
597
- });
598
- })))), /*#__PURE__*/_react.default.createElement("div", {
599
- className: "widget-tab__panorama-controls"
600
- }, /*#__PURE__*/_react.default.createElement("button", {
601
- className: "widget-tab__panorama-controls-button",
602
- onClick: toggleFov
603
- }, /*#__PURE__*/_react.default.createElement("img", {
604
- src: cameraFov === cameraFovValues.x1 ? _x.default : _x2.default,
605
- alt: "scale-icon"
606
- })), /*#__PURE__*/_react.default.createElement("button", {
607
- className: "widget-tab__panorama-controls-button",
608
- onClick: toggleAutoplay
609
- }, /*#__PURE__*/_react.default.createElement("img", {
610
- src: autoplayEnabled ? _rotationClose.default : _rotation.default,
611
- alt: "rotation-icon"
612
- })))), showInstructions && /*#__PURE__*/_react.default.createElement(_Instructions.default, {
613
- disabled: disabled,
614
- steps: instructionSteps,
615
- onClick: onStart
616
- }));
617
- };
618
-
619
- var _default = PanoramaTab;
620
- exports.default = _default;