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.
- package/README.md +7 -3
- package/package.json +17 -5
- package/build/assets/css/app.css +0 -1
- package/build/assets/css/app.css.map +0 -1
- package/build/assets/fonts/RobotoMono/RobotoMono-Bold.ttf +0 -0
- package/build/assets/fonts/RobotoMono/RobotoMono-Bold.woff +0 -0
- package/build/assets/fonts/RobotoMono/RobotoMono-Bold.woff2 +0 -0
- package/build/assets/fonts/RobotoMono/RobotoMono-BoldItalic.ttf +0 -0
- package/build/assets/fonts/RobotoMono/RobotoMono-BoldItalic.woff +0 -0
- package/build/assets/fonts/RobotoMono/RobotoMono-BoldItalic.woff2 +0 -0
- package/build/assets/fonts/RobotoMono/RobotoMono-Italic.ttf +0 -0
- package/build/assets/fonts/RobotoMono/RobotoMono-Italic.woff +0 -0
- package/build/assets/fonts/RobotoMono/RobotoMono-Italic.woff2 +0 -0
- package/build/assets/fonts/RobotoMono/RobotoMono-Light.ttf +0 -0
- package/build/assets/fonts/RobotoMono/RobotoMono-Light.woff +0 -0
- package/build/assets/fonts/RobotoMono/RobotoMono-Light.woff2 +0 -0
- package/build/assets/fonts/RobotoMono/RobotoMono-LightItalic.ttf +0 -0
- package/build/assets/fonts/RobotoMono/RobotoMono-LightItalic.woff +0 -0
- package/build/assets/fonts/RobotoMono/RobotoMono-LightItalic.woff2 +0 -0
- package/build/assets/fonts/RobotoMono/RobotoMono-Medium.ttf +0 -0
- package/build/assets/fonts/RobotoMono/RobotoMono-Medium.woff +0 -0
- package/build/assets/fonts/RobotoMono/RobotoMono-Medium.woff2 +0 -0
- package/build/assets/fonts/RobotoMono/RobotoMono-MediumItalic.ttf +0 -0
- package/build/assets/fonts/RobotoMono/RobotoMono-MediumItalic.woff +0 -0
- package/build/assets/fonts/RobotoMono/RobotoMono-MediumItalic.woff2 +0 -0
- package/build/assets/fonts/RobotoMono/RobotoMono-Regular.ttf +0 -0
- package/build/assets/fonts/RobotoMono/RobotoMono-Regular.woff +0 -0
- package/build/assets/fonts/RobotoMono/RobotoMono-Regular.woff2 +0 -0
- package/build/assets/fonts/RobotoMono/RobotoMono-Thin.ttf +0 -0
- package/build/assets/fonts/RobotoMono/RobotoMono-Thin.woff +0 -0
- package/build/assets/fonts/RobotoMono/RobotoMono-Thin.woff2 +0 -0
- package/build/assets/fonts/RobotoMono/RobotoMono.css +0 -98
- package/build/assets/icons/1x.svg +0 -4
- package/build/assets/icons/2x.svg +0 -4
- package/build/assets/icons/bullet.png +0 -0
- package/build/assets/icons/close.svg +0 -4
- package/build/assets/icons/enter-fullscreen.svg +0 -6
- package/build/assets/icons/hand-move.svg +0 -15
- package/build/assets/icons/hand-research.svg +0 -12
- package/build/assets/icons/rotation-close.svg +0 -6
- package/build/assets/icons/rotation.svg +0 -4
- package/build/assets/img/3D.jpg +0 -0
- package/build/assets/img/door-icon.png +0 -0
- package/build/assets/img/door-texture.jpeg +0 -0
- package/build/assets/img/exterior-wall-texture-roughness.jpg +0 -0
- package/build/assets/img/exterior-wall-texture.jpeg +0 -0
- package/build/assets/img/floor-bathroom.jpg +0 -0
- package/build/assets/img/floor-dark.png +0 -0
- package/build/assets/img/floor-white.png +0 -0
- package/build/assets/img/floor.jpg +0 -0
- package/build/assets/img/grass.png +0 -0
- package/build/assets/img/logo.svg +0 -11
- package/build/assets/img/refresh-icon.svg +0 -6
- package/build/assets/img/spot-icon.png +0 -0
- package/build/assets/img/wall-texture.jpg +0 -0
- package/build/assets/sass/components/instructions.sass +0 -94
- package/build/assets/sass/components/loader.sass +0 -54
- package/build/assets/sass/components/model.sass +0 -27
- package/build/assets/sass/components/panorama.sass +0 -174
- package/build/assets/sass/components/rotation.sass +0 -106
- package/build/assets/sass/components/tabs.sass +0 -121
- package/build/assets/sass/index.sass +0 -65
- package/build/assets/sass/mixin.sass +0 -48
- package/build/assets/sass/vars.sass +0 -28
- package/build/components/Application.js +0 -132
- package/build/components/Buttons/FullScreenButton.js +0 -50
- package/build/components/Buttons/TabButton.js +0 -24
- package/build/components/Instructions.js +0 -54
- package/build/components/Loader.js +0 -22
- package/build/components/ModelTab.js +0 -213
- package/build/components/PanoramaTab.js +0 -620
- package/build/components/RotationTab.js +0 -152
- package/build/components/Widget.js +0 -130
- package/build/config/defaultConfig.js +0 -30
- package/build/enums/deviceOrientationStatuses.js +0 -11
- package/build/enums/deviceWidth.js +0 -21
- package/build/enums/imageExtentions.js +0 -16
- package/build/index.css +0 -2
- package/build/index.js +0 -67
- package/build/locale/en/data.json +0 -25
- package/build/locale/index.js +0 -71
- package/build/locale/ru/data.json +0 -25
- package/build/store/apiStore.js +0 -231
- package/build/store/deviceStore.js +0 -60
- package/build/store/fullScreenStore.js +0 -159
- package/build/store/houseStore.js +0 -952
- package/build/store/index.js +0 -124
- package/build/store/modelStore.js +0 -338
- package/build/threesixty/events.js +0 -220
- package/build/threesixty/index.js +0 -264
- package/build/utils/csg/csg-lib.js +0 -472
- package/build/utils/csg/csg-worker.js +0 -84
- package/build/utils/csg/three-csg.js +0 -277
- package/build/utils/helpers.js +0 -12
- package/build/utils/modelHelpers.js +0 -161
- 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;
|