@webviz/subsurface-viewer 0.0.2-alpha.3 → 0.0.2-alpha.4

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 (84) hide show
  1. package/dist/SubsurfaceViewer.js +0 -4
  2. package/dist/SubsurfaceViewer.js.map +1 -1
  3. package/dist/components/ColorLegend.d.ts +1 -1
  4. package/dist/components/ColorLegends.d.ts +1 -1
  5. package/dist/components/InfoCard.js.map +1 -1
  6. package/dist/components/Map.d.ts +21 -19
  7. package/dist/components/Map.js +158 -245
  8. package/dist/components/Map.js.map +1 -1
  9. package/dist/layers/BoxSelectionLayer/boxSelectionLayer.d.ts +2 -3
  10. package/dist/layers/BoxSelectionLayer/boxSelectionLayer.js.map +1 -1
  11. package/dist/layers/axes/axesLayer.d.ts +2 -2
  12. package/dist/layers/axes/axesLayer.js.map +1 -1
  13. package/dist/layers/axes/boxLayer.d.ts +2 -2
  14. package/dist/layers/axes/boxLayer.js.map +1 -1
  15. package/dist/layers/axes2d/axes2DLayer.d.ts +2 -2
  16. package/dist/layers/axes2d/axes2DLayer.js.map +1 -1
  17. package/dist/layers/drawing/drawingLayer.d.ts +2 -2
  18. package/dist/layers/drawing/drawingLayer.js +1 -2
  19. package/dist/layers/drawing/drawingLayer.js.map +1 -1
  20. package/dist/layers/grid3d/grid3dLayer.d.ts +4 -4
  21. package/dist/layers/grid3d/grid3dLayer.js.map +1 -1
  22. package/dist/layers/grid3d/privateLayer.d.ts +2 -2
  23. package/dist/layers/grid3d/privateLayer.js +6 -3
  24. package/dist/layers/grid3d/privateLayer.js.map +1 -1
  25. package/dist/layers/map/mapLayer.d.ts +2 -2
  26. package/dist/layers/map/mapLayer.js.map +1 -1
  27. package/dist/layers/map/privateMapLayer.d.ts +2 -2
  28. package/dist/layers/map/privateMapLayer.js +2 -0
  29. package/dist/layers/map/privateMapLayer.js.map +1 -1
  30. package/dist/layers/northarrow/northArrow3DLayer.d.ts +2 -2
  31. package/dist/layers/northarrow/northArrow3DLayer.js.map +1 -1
  32. package/dist/layers/piechart/pieChartLayer.d.ts +1 -1
  33. package/dist/layers/points/pointsLayer.d.ts +2 -2
  34. package/dist/layers/points/pointsLayer.js.map +1 -1
  35. package/dist/layers/polylines/polylinesLayer.d.ts +2 -2
  36. package/dist/layers/polylines/polylinesLayer.js.map +1 -1
  37. package/dist/layers/terrain/map3DLayer.d.ts +4 -4
  38. package/dist/layers/terrain/map3DLayer.js.map +1 -1
  39. package/dist/layers/terrain/terrainMapLayer.js +6 -3
  40. package/dist/layers/terrain/terrainMapLayer.js.map +1 -1
  41. package/dist/layers/triangle/privateTriangleLayer.d.ts +2 -2
  42. package/dist/layers/triangle/privateTriangleLayer.js.map +1 -1
  43. package/dist/layers/triangle/triangleLayer.d.ts +2 -2
  44. package/dist/layers/triangle/triangleLayer.js.map +1 -1
  45. package/dist/layers/utils/layerTools.d.ts +2 -2
  46. package/dist/layers/wells/wellsLayer.d.ts +3 -3
  47. package/dist/layers/wells/wellsLayer.js.map +1 -1
  48. package/dist/package.json +2 -2
  49. package/dist/utils/fit-bounds.d.ts +0 -1
  50. package/dist/utils/fit-bounds.js +0 -3
  51. package/dist/utils/fit-bounds.js.map +1 -1
  52. package/dist/utils/specExtractor.d.ts +1 -1
  53. package/dist/utils/specExtractor.js.map +1 -1
  54. package/package.json +3 -3
  55. package/dist/storybook/SubsurfaceViewer.stories.d.ts +0 -455
  56. package/dist/storybook/SubsurfaceViewer.stories.js +0 -537
  57. package/dist/storybook/SubsurfaceViewer.stories.js.map +0 -1
  58. package/dist/storybook/components/InfoCard.stories.d.ts +0 -48
  59. package/dist/storybook/components/InfoCard.stories.js +0 -36
  60. package/dist/storybook/components/InfoCard.stories.js.map +0 -1
  61. package/dist/storybook/components/colorLegends/ContinuousLegend.stories.d.ts +0 -31
  62. package/dist/storybook/components/colorLegends/ContinuousLegend.stories.js +0 -30
  63. package/dist/storybook/components/colorLegends/ContinuousLegend.stories.js.map +0 -1
  64. package/dist/storybook/components/colorLegends/DiscreteLegend.stories.d.ts +0 -31
  65. package/dist/storybook/components/colorLegends/DiscreteLegend.stories.js +0 -30
  66. package/dist/storybook/components/colorLegends/DiscreteLegend.stories.js.map +0 -1
  67. package/dist/storybook/components/colorLegends/IndividualScaleForMap.stories.d.ts +0 -20
  68. package/dist/storybook/components/colorLegends/IndividualScaleForMap.stories.js +0 -66
  69. package/dist/storybook/components/colorLegends/IndividualScaleForMap.stories.js.map +0 -1
  70. package/dist/storybook/components/colorLegends/SingleScaleForMap.stories.d.ts +0 -65
  71. package/dist/storybook/components/colorLegends/SingleScaleForMap.stories.js +0 -94
  72. package/dist/storybook/components/colorLegends/SingleScaleForMap.stories.js.map +0 -1
  73. package/dist/storybook/components/settings/LayerSettingsButton.stories.d.ts +0 -34
  74. package/dist/storybook/components/settings/LayerSettingsButton.stories.js +0 -31
  75. package/dist/storybook/components/settings/LayerSettingsButton.stories.js.map +0 -1
  76. package/dist/storybook/components/settings/NumericInput.stories.d.ts +0 -14
  77. package/dist/storybook/components/settings/NumericInput.stories.js +0 -15
  78. package/dist/storybook/components/settings/NumericInput.stories.js.map +0 -1
  79. package/dist/storybook/components/settings/ToggleButton.stories.d.ts +0 -13
  80. package/dist/storybook/components/settings/ToggleButton.stories.js +0 -14
  81. package/dist/storybook/components/settings/ToggleButton.stories.js.map +0 -1
  82. package/dist/storybook/schemaValidation/schemaValidation.stories.d.ts +0 -31
  83. package/dist/storybook/schemaValidation/schemaValidation.stories.js +0 -42
  84. package/dist/storybook/schemaValidation/schemaValidation.stories.js.map +0 -1
@@ -17,6 +17,43 @@ import { colorTables } from "@emerson-eps/color-tables";
17
17
  import { getModelMatrixScale } from "../layers/utils/layerTools";
18
18
  import { OrbitController, OrthographicController } from "@deck.gl/core/typed";
19
19
  import IntersectionView from "../views/intersectionView";
20
+ const minZoom3D = -12;
21
+ const maxZoom3D = 12;
22
+ const minZoom2D = -12;
23
+ const maxZoom2D = 4;
24
+ class ZScaleOrbitController extends OrbitController {
25
+ static setZScaleUpReference(setZScaleUp) {
26
+ ZScaleOrbitController.setZScaleUp = setZScaleUp;
27
+ }
28
+ static setZScaleDownReference(setZScaleDown) {
29
+ ZScaleOrbitController.setZScaleDown = setZScaleDown;
30
+ }
31
+ handleEvent(event) {
32
+ if (ZScaleOrbitController.setZScaleUp === null) {
33
+ return super.handleEvent(event);
34
+ }
35
+ if (ZScaleOrbitController.setZScaleUp &&
36
+ event.type === "keydown" &&
37
+ event.key === "ArrowUp") {
38
+ ZScaleOrbitController.setZScaleUp(Math.random());
39
+ return true;
40
+ }
41
+ else if (ZScaleOrbitController.setZScaleDown &&
42
+ event.type === "keydown" &&
43
+ event.key === "ArrowDown") {
44
+ ZScaleOrbitController.setZScaleDown(Math.random());
45
+ return true;
46
+ }
47
+ return super.handleEvent(event);
48
+ }
49
+ }
50
+ ZScaleOrbitController.setZScaleUp = null;
51
+ ZScaleOrbitController.setZScaleDown = null;
52
+ class ZScaleOrbitView extends OrbitView {
53
+ get ControllerType() {
54
+ return ZScaleOrbitController;
55
+ }
56
+ }
20
57
  function addBoundingBoxes(b1, b2) {
21
58
  const boxDefault = [0, 0, 0, 1, 1, 1];
22
59
  if (typeof b1 === "undefined" || typeof b2 === "undefined") {
@@ -76,14 +113,15 @@ function adjustCameraTarget(viewStates, scale, newScale) {
76
113
  return vs;
77
114
  }
78
115
  const Map = ({ id, layers, bounds, views, coords, scale, coordinateUnit, colorTables, setEditedData, checkDatafileSchema, onMouseEvent, selection, children, getTooltip = defaultTooltip, cameraPosition, getCameraPosition, triggerHome, triggerResetMultipleWells, }) => {
79
- var _a, _b, _c, _d, _e;
80
- const isCameraPositionDefined = typeof cameraPosition !== "undefined" &&
81
- Object.keys(cameraPosition).length !== 0;
116
+ var _a, _b, _c, _d, _e, _f;
82
117
  const deckRef = useRef(null);
83
118
  const bboxInitial = [0, 0, 0, 1, 1, 1];
84
- const boundsInitial = React.useMemo(() => bounds !== null && bounds !== void 0 ? bounds : [0, 0, 1, 1], [bounds]);
85
- // state for views prop of DeckGL component
86
- const [viewsProps, setViewsProps] = useState([]);
119
+ // Deck.gl View's and viewStates as input to Deck.gl
120
+ const [deckGLViews, setDeckGLViews] = useState([]);
121
+ const [viewStates, setViewStates] = useState({});
122
+ const [reportedBoundingBox, setReportedBoundingBox] = useState(bboxInitial);
123
+ const [reportedBoundingBoxAcc, setReportedBoundingBoxAcc] = useState(bboxInitial);
124
+ const [deckGLLayers, setDeckGLLayers] = useState([]);
87
125
  const [alteredLayers, setAlteredLayers] = useState([]);
88
126
  const [viewPortMargins, setViewPortMargins] = useState({
89
127
  left: 0,
@@ -91,184 +129,65 @@ const Map = ({ id, layers, bounds, views, coords, scale, coordinateUnit, colorTa
91
129
  top: 0,
92
130
  bottom: 0,
93
131
  });
94
- const [didUserChangeCamera, setDidUserChangeCamera] = useState(false);
95
- const [reportedBoundingBox, setReportedBoundingBox] = useState(bboxInitial);
96
- const [reportedBoundingBoxAcc, setReportedBoundingBoxAcc] = useState(bboxInitial);
97
- const initialViewState = getViewState(viewPortMargins, boundsInitial, boundingBoxCenter(reportedBoundingBoxAcc), views, 0, (_a = deckRef.current) === null || _a === void 0 ? void 0 : _a.deck);
98
- // Local help function.
99
- const calcDefaultViewStates = useCallback((boundingBox, input) => {
100
- const center = boundingBoxCenter(boundingBox // note this may include axesLayer
101
- );
102
- const updatedViewProps = input ? input : viewsProps;
103
- const isBoundsDefined = typeof bounds !== "undefined";
104
- const viewStateMap = updatedViewProps.map((item, index) => {
105
- var _a, _b, _c, _d, _e, _f;
106
- const is3D = (_c = (_b = (_a = views === null || views === void 0 ? void 0 : views.viewports) === null || _a === void 0 ? void 0 : _a[index]) === null || _b === void 0 ? void 0 : _b.show3D) !== null && _c !== void 0 ? _c : false;
107
- const viewState = isBoundsDefined
108
- ? getViewState(viewPortMargins, boundsInitial, center, views, index, (_d = deckRef.current) === null || _d === void 0 ? void 0 : _d.deck)
109
- : getViewState3D(is3D, boundingBox, (_e = views === null || views === void 0 ? void 0 : views.viewports) === null || _e === void 0 ? void 0 : _e[index].zoom, (_f = deckRef.current) === null || _f === void 0 ? void 0 : _f.deck);
110
- const minZoom = is3D ? -12 : -12;
111
- const maxZoom = is3D ? +12 : +4;
112
- return [item.id, Object.assign(Object.assign({}, viewState), { minZoom, maxZoom })];
113
- });
114
- const tempViewStates = Object.fromEntries(viewStateMap);
115
- setDidUserChangeCamera(false);
116
- setViewStates(tempViewStates);
117
- }, [bounds, boundsInitial, views, viewPortMargins, viewsProps]);
118
- // set initial view state based on supplied bounds and zoom in viewState
119
- const [viewStates, setViewStates] = useState({
120
- "main-view_2D": cameraPosition !== null && cameraPosition !== void 0 ? cameraPosition : {},
121
- });
122
- const [firstViewStateId, setFirstViewStatesId] = useState("main-view_2D");
132
+ // Used for scaling in z direction using arrow keys.
133
+ const [scaleZ, setScaleZ] = useState(1);
134
+ const [scaleZUp, setScaleZUp] = useState(Number.MAX_VALUE);
135
+ const [scaleZDown, setScaleZDown] = useState(Number.MAX_VALUE);
136
+ React.useEffect(() => {
137
+ ZScaleOrbitController.setZScaleUpReference(setScaleZUp);
138
+ }, [setScaleZUp]);
139
+ React.useEffect(() => {
140
+ ZScaleOrbitController.setZScaleDownReference(setScaleZDown);
141
+ }, [setScaleZDown]);
142
+ // Calculate a set of Deck.gl View's and viewStates as input to Deck.gl
123
143
  useEffect(() => {
124
- let tempViewStates = {};
125
- if (isCameraPositionDefined) {
126
- tempViewStates = Object.fromEntries(viewsProps.map((item) => [item.id, cameraPosition]));
127
- }
128
- else {
129
- const isBoundsDefined = typeof bounds !== "undefined";
130
- tempViewStates = Object.fromEntries(viewsProps.map((item, index) => {
131
- var _a, _b, _c, _d, _e, _f;
132
- let viewState = viewStates[item.id];
133
- if (typeof viewState === "undefined") {
134
- viewState = isBoundsDefined
135
- ? getViewState(viewPortMargins, boundsInitial, boundingBoxCenter(reportedBoundingBoxAcc), views, index, (_a = deckRef.current) === null || _a === void 0 ? void 0 : _a.deck)
136
- : getViewState3D((_d = (_c = (_b = views === null || views === void 0 ? void 0 : views.viewports) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.show3D) !== null && _d !== void 0 ? _d : false, reportedBoundingBoxAcc, (_e = views === null || views === void 0 ? void 0 : views.viewports) === null || _e === void 0 ? void 0 : _e[index].zoom, (_f = deckRef.current) === null || _f === void 0 ? void 0 : _f.deck);
137
- }
138
- return [item.id, viewState];
139
- }));
140
- }
141
- if (viewsProps[0] !== undefined) {
142
- setFirstViewStatesId(viewsProps[0].id);
143
- }
144
- setViewStates(tempViewStates);
145
- // eslint-disable-next-line react-hooks/exhaustive-deps
144
+ var _a;
145
+ const [Views, viewStates] = createViewsAndViewStates(views, viewPortMargins, bounds, cameraPosition, reportedBoundingBoxAcc, (_a = deckRef.current) === null || _a === void 0 ? void 0 : _a.deck);
146
+ setDeckGLViews(Views);
147
+ setViewStates(viewStates);
146
148
  }, [
147
- boundsInitial,
149
+ bounds,
148
150
  cameraPosition,
149
- isCameraPositionDefined,
150
- viewPortMargins,
151
151
  views === null || views === void 0 ? void 0 : views.viewports,
152
- viewsProps,
153
- ]);
154
- // calculate view state on deckgl context load (based on viewport size)
155
- const onLoad = useCallback(() => {
156
- let tempViewStates = {};
157
- if (isCameraPositionDefined) {
158
- tempViewStates = Object.fromEntries(viewsProps.map((item) => [item.id, cameraPosition]));
159
- }
160
- else {
161
- tempViewStates = Object.fromEntries(viewsProps.map((item, index) => {
162
- var _a;
163
- return [
164
- item.id,
165
- getViewState(viewPortMargins, boundsInitial, boundingBoxCenter(reportedBoundingBoxAcc), views, index, (_a = deckRef.current) === null || _a === void 0 ? void 0 : _a.deck),
166
- ];
167
- }));
168
- if (viewsProps[0] !== undefined) {
169
- setFirstViewStatesId(viewsProps[0].id);
170
- }
171
- setViewStates(tempViewStates);
172
- }
173
- }, [
174
- isCameraPositionDefined,
175
- viewsProps,
176
- cameraPosition,
177
- viewPortMargins,
178
- boundsInitial,
152
+ (_a = deckRef === null || deckRef === void 0 ? void 0 : deckRef.current) === null || _a === void 0 ? void 0 : _a.deck,
153
+ reportedBoundingBox,
179
154
  reportedBoundingBoxAcc,
180
155
  views,
156
+ viewPortMargins,
157
+ triggerHome,
181
158
  ]);
182
159
  useEffect(() => {
183
- if (typeof triggerHome !== "undefined") {
184
- calcDefaultViewStates(reportedBoundingBoxAcc);
185
- }
186
- // eslint-disable-next-line react-hooks/exhaustive-deps
187
- }, [triggerHome]);
160
+ setDeckGLLayers(alteredLayers);
161
+ }, [alteredLayers]);
188
162
  useEffect(() => {
189
163
  const union_of_reported_bboxes = addBoundingBoxes(reportedBoundingBoxAcc, reportedBoundingBox);
190
164
  setReportedBoundingBoxAcc(union_of_reported_bboxes);
191
- // If "bounds" or "cameraPosition" is not defined "viewState" will be
192
- // calculated based on the union of the reported bounding boxes from each layer.
193
- if (!didUserChangeCamera && !isCameraPositionDefined) {
194
- calcDefaultViewStates(union_of_reported_bboxes);
195
- }
196
165
  // eslint-disable-next-line react-hooks/exhaustive-deps
197
166
  }, [reportedBoundingBox]);
198
- // react on bounds prop change
199
167
  useEffect(() => {
200
- const isBoundsDefined = typeof bounds !== "undefined";
201
- let tempViewStates = {};
202
- if (!isCameraPositionDefined) {
203
- tempViewStates = Object.fromEntries(viewsProps.map((item, index) => {
204
- var _a, _b, _c, _d, _e, _f;
205
- return [
206
- item.id,
207
- isBoundsDefined
208
- ? getViewState(viewPortMargins, boundsInitial, boundingBoxCenter(reportedBoundingBoxAcc), views, index, (_a = deckRef.current) === null || _a === void 0 ? void 0 : _a.deck)
209
- : getViewState3D((_d = (_c = (_b = views === null || views === void 0 ? void 0 : views.viewports) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.show3D) !== null && _d !== void 0 ? _d : false, reportedBoundingBoxAcc, (_e = views === null || views === void 0 ? void 0 : views.viewports) === null || _e === void 0 ? void 0 : _e[index].zoom, (_f = deckRef.current) === null || _f === void 0 ? void 0 : _f.deck),
210
- ];
211
- }));
212
- if (viewsProps[0] !== undefined) {
213
- setFirstViewStatesId(viewsProps[0].id);
214
- }
215
- setViewStates(tempViewStates);
168
+ if (scaleZUp !== Number.MAX_VALUE) {
169
+ const newScaleZ = scaleZ * 1.05;
170
+ setScaleZ(newScaleZ);
171
+ // Make camera target follow the scaling.
172
+ const vs = adjustCameraTarget(viewStates, scaleZ, newScaleZ);
173
+ setViewStates(vs);
216
174
  }
217
175
  // eslint-disable-next-line react-hooks/exhaustive-deps
218
- }, [boundsInitial, cameraPosition, views === null || views === void 0 ? void 0 : views.viewports, viewsProps]);
219
- // react on cameraPosition prop change
220
- useEffect(() => {
221
- let tempViewStates = {};
222
- if (isCameraPositionDefined) {
223
- tempViewStates = Object.fromEntries(viewsProps.map((item) => [item.id, cameraPosition]));
224
- setViewStates(tempViewStates);
225
- if (viewsProps[0] !== undefined) {
226
- setFirstViewStatesId(viewsProps[0].id);
227
- }
228
- }
229
- if (cameraPosition === null) {
230
- tempViewStates = Object.fromEntries(viewsProps.map((item) => [item.id, initialViewState]));
231
- setViewStates(tempViewStates);
232
- }
233
- // eslint-disable-next-line react-hooks/exhaustive-deps
234
- }, [cameraPosition, viewsProps]);
235
- // Used for scaling in z direction using arrow keys.
236
- const [scaleZ, setScaleZ] = useState(1);
237
- const [scaleZUp, setScaleZUp] = useState(1);
238
- const [scaleZDown, setScaleZDown] = useState(1);
239
- const scaleUpFunction = () => {
240
- setScaleZUp(Math.random());
241
- };
242
- const scaleDownFunction = () => {
243
- setScaleZDown(Math.random());
244
- };
245
- useEffect(() => {
246
- const newScaleZ = scaleZ * 1.05;
247
- setScaleZ(newScaleZ);
248
- // Make camera target follow the scaling.
249
- const vs = adjustCameraTarget(viewStates, scaleZ, newScaleZ);
250
- setViewStates(vs);
251
- // eslint-disable-next-line react-hooks/exhaustive-deps
252
176
  }, [scaleZUp]);
253
177
  useEffect(() => {
254
- const newScaleZ = scaleZ * 0.95;
255
- setScaleZ(newScaleZ);
256
- // Make camera target follow the scaling.
257
- const vs = adjustCameraTarget(viewStates, scaleZ, newScaleZ);
258
- setViewStates(vs);
259
- // eslint-disable-next-line react-hooks/exhaustive-deps
260
- }, [scaleZDown]);
261
- useEffect(() => {
262
- const viewProps = getViews(views);
263
- setViewsProps(viewProps);
264
- if (!bounds) {
265
- calcDefaultViewStates(reportedBoundingBoxAcc);
178
+ if (scaleZUp !== Number.MAX_VALUE) {
179
+ const newScaleZ = scaleZ * 0.95;
180
+ setScaleZ(newScaleZ);
181
+ // Make camera target follow the scaling.
182
+ const vs = adjustCameraTarget(viewStates, scaleZ, newScaleZ);
183
+ setViewStates(vs);
266
184
  }
267
185
  // eslint-disable-next-line react-hooks/exhaustive-deps
268
- }, [views]);
186
+ }, [scaleZDown]);
269
187
  useEffect(() => {
270
- if (layers == undefined)
188
+ if (typeof layers === "undefined") {
271
189
  return;
190
+ }
272
191
  // Margins on the viewport are extracted from a potenial axes2D layer.
273
192
  const axes2DLayer = layers === null || layers === void 0 ? void 0 : layers.find((e) => {
274
193
  return (e === null || e === void 0 ? void 0 : e.constructor) === Axes2DLayer;
@@ -286,26 +205,37 @@ const Map = ({ id, layers, bounds, views, coords, scale, coordinateUnit, colorTa
286
205
  ? axes2DLayer.props.marginV
287
206
  : 0;
288
207
  setViewPortMargins({ left, right, top, bottom });
289
- const m = getModelMatrixScale(scaleZ);
290
208
  const layers_copy = layers.map((item) => {
291
- if ((item === null || item === void 0 ? void 0 : item.constructor.name) === NorthArrow3DLayer.name)
209
+ if ((item === null || item === void 0 ? void 0 : item.constructor.name) === NorthArrow3DLayer.name) {
292
210
  return item;
293
- const layer = item;
294
- // Set "modelLayer" matrix to reflect correct z scaling.
295
- const scaledLayer = layer.clone({ modelMatrix: m });
211
+ }
296
212
  // Inject "setReportedBoundingBox" function into layer for it to report
297
213
  // back its respective bounding box.
298
- const boundedLayer = scaledLayer.clone({
214
+ return item.clone({
215
+ // eslint-disable-next-line
216
+ // @ts-ignore
299
217
  setReportedBoundingBox: setReportedBoundingBox,
300
218
  });
301
- return boundedLayer !== null && boundedLayer !== void 0 ? boundedLayer : scaledLayer;
302
219
  });
303
220
  setAlteredLayers(layers_copy);
304
- }, [scaleZ, layers /*dispatch*/]);
305
- const [deckGLLayers, setDeckGLLayers] = useState([]);
221
+ }, [layers]);
306
222
  useEffect(() => {
307
- setDeckGLLayers(alteredLayers);
308
- }, [alteredLayers]);
223
+ if (typeof layers === "undefined") {
224
+ return;
225
+ }
226
+ const m = getModelMatrixScale(scaleZ);
227
+ const layers_copy = deckGLLayers.map((item) => {
228
+ if ((item === null || item === void 0 ? void 0 : item.constructor.name) === NorthArrow3DLayer.name) {
229
+ return item;
230
+ }
231
+ // Set "modelLayer" matrix to reflect correct z scaling.
232
+ return item.clone({
233
+ modelMatrix: m,
234
+ });
235
+ });
236
+ setDeckGLLayers(layers_copy);
237
+ // eslint-disable-next-line react-hooks/exhaustive-deps
238
+ }, [scaleZ]);
309
239
  useEffect(() => {
310
240
  var _a, _b, _c;
311
241
  const layers = (_b = (_a = deckRef.current) === null || _a === void 0 ? void 0 : _a.deck) === null || _b === void 0 ? void 0 : _b.props.layers;
@@ -453,7 +383,6 @@ const Map = ({ id, layers, bounds, views, coords, scale, coordinateUnit, colorTa
453
383
  const onViewStateChange = useCallback(
454
384
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
455
385
  ({ viewId, viewState }) => {
456
- var _a;
457
386
  const viewports = (views === null || views === void 0 ? void 0 : views.viewports) || [];
458
387
  const isSyncIds = viewports
459
388
  .filter((item) => item.isSync)
@@ -469,14 +398,7 @@ const Map = ({ id, layers, bounds, views, coords, scale, coordinateUnit, colorTa
469
398
  if (getCameraPosition) {
470
399
  getCameraPosition(viewState);
471
400
  }
472
- setFirstViewStatesId((_a = viewsProps[0]) === null || _a === void 0 ? void 0 : _a.id);
473
- setDidUserChangeCamera(true);
474
- }, [getCameraPosition, views === null || views === void 0 ? void 0 : views.viewports, viewsProps]);
475
- const deckGLViews = React.useMemo(() => {
476
- var _a;
477
- return createViews(views, scaleUpFunction, scaleDownFunction, (_a = deckRef.current) === null || _a === void 0 ? void 0 : _a.deck);
478
- // eslint-disable-next-line react-hooks/exhaustive-deps
479
- }, [views, views, (_d = deckRef.current) === null || _d === void 0 ? void 0 : _d.deck]);
401
+ }, [getCameraPosition, views === null || views === void 0 ? void 0 : views.viewports]);
480
402
  if (!deckGLViews || isEmpty(deckGLViews) || isEmpty(deckGLLayers))
481
403
  return null;
482
404
  return (React.createElement("div", { onContextMenu: (event) => event.preventDefault() },
@@ -505,10 +427,8 @@ const Map = ({ id, layers, bounds, views, coords, scale, coordinateUnit, colorTa
505
427
  setEditedData === null || setEditedData === void 0 ? void 0 : setEditedData(updated_prop);
506
428
  },
507
429
  colorTables: colorTables,
508
- }, getCursor: ({ isDragging }) => isDragging ? "grabbing" : "default", getTooltip: getTooltip, ref: deckRef, onViewStateChange: onViewStateChange, onHover: onHover, onClick: onClick, onLoad: onLoad, onAfterRender: onAfterRender }, children),
509
- (scale === null || scale === void 0 ? void 0 : scale.visible) ? (React.createElement(DistanceScale, Object.assign({}, scale, { zoom: viewStates[firstViewStateId] === undefined
510
- ? -5
511
- : viewStates[firstViewStateId].zoom, scaleUnit: coordinateUnit, style: (_e = scale.cssStyle) !== null && _e !== void 0 ? _e : {} }))) : null,
430
+ }, getCursor: ({ isDragging }) => isDragging ? "grabbing" : "default", getTooltip: getTooltip, ref: deckRef, onViewStateChange: onViewStateChange, onHover: onHover, onClick: onClick, onAfterRender: onAfterRender }, children),
431
+ (scale === null || scale === void 0 ? void 0 : scale.visible) ? (React.createElement(DistanceScale, Object.assign({}, scale, { zoom: (_e = (_d = viewStates[Object.keys(viewStates)[0]]) === null || _d === void 0 ? void 0 : _d.zoom) !== null && _e !== void 0 ? _e : -5, scaleUnit: coordinateUnit, style: (_f = scale.cssStyle) !== null && _f !== void 0 ? _f : {} }))) : null,
512
432
  React.createElement(StatusIndicator, { layers: deckGLLayers, isLoaded: isLoaded }),
513
433
  (coords === null || coords === void 0 ? void 0 : coords.visible) ? React.createElement(InfoCard, { pickInfos: hoverInfo }) : null,
514
434
  errorText && (React.createElement("pre", { style: {
@@ -562,8 +482,8 @@ export function jsonToObject(data, enums = undefined) {
562
482
  return jsonConverter.convert(filtered_data);
563
483
  }
564
484
  // return viewstate with computed bounds to fit the data in viewport
565
- function getViewState(viewPortMargins, bounds_accessor, centerOfData, views, viewPortIndex, deck) {
566
- var _a, _b, _c, _d, _e;
485
+ function getViewState(viewPortMargins, bounds_accessor, centerOfData, views, viewPort, deck) {
486
+ var _a;
567
487
  let bounds = [0, 0, 1, 1];
568
488
  if (typeof bounds_accessor == "function") {
569
489
  bounds = bounds_accessor();
@@ -631,15 +551,19 @@ function getViewState(viewPortMargins, bounds_accessor, centerOfData, views, vie
631
551
  fb_target = [fb.x - translate_x, fb.y - translate_y, z];
632
552
  fb_zoom = fb.zoom;
633
553
  }
634
- const target = (_c = (_b = views === null || views === void 0 ? void 0 : views.viewports) === null || _b === void 0 ? void 0 : _b[viewPortIndex]) === null || _c === void 0 ? void 0 : _c.target;
635
- const zoom = (_e = (_d = views === null || views === void 0 ? void 0 : views.viewports) === null || _d === void 0 ? void 0 : _d[viewPortIndex]) === null || _e === void 0 ? void 0 : _e.zoom;
554
+ const target = viewPort.target;
555
+ const zoom = viewPort.zoom;
636
556
  const target_ = target !== null && target !== void 0 ? target : fb_target;
637
557
  const zoom_ = zoom !== null && zoom !== void 0 ? zoom : fb_zoom;
558
+ const minZoom = minZoom3D;
559
+ const maxZoom = viewPort.show3D ? maxZoom3D : maxZoom2D;
638
560
  const view_state = {
639
561
  target: target_,
640
562
  zoom: zoom_,
641
563
  rotationX: 90,
642
564
  rotationOrbit: 0,
565
+ minZoom,
566
+ maxZoom,
643
567
  };
644
568
  return view_state;
645
569
  }
@@ -674,34 +598,28 @@ function getViewState3D(is3D, bounds, zoom, deck) {
674
598
  zoom: zoom !== null && zoom !== void 0 ? zoom : fitted_bound.zoom * 1.2,
675
599
  rotationX: 45,
676
600
  rotationOrbit: 0,
601
+ minZoom: minZoom3D,
602
+ maxZoom: maxZoom3D,
677
603
  };
678
604
  return view_state;
679
605
  }
680
- // construct views object for DeckGL component
681
- function createViews(views, scaleUpFunction, scaleDownFunction, deck) {
682
- var _a;
683
- // Use modified controller to handle key events.
684
- class ZScaleOrbitController extends OrbitController {
685
- handleEvent(event) {
686
- if (event.type === "keydown" && event.key === "ArrowUp") {
687
- scaleUpFunction();
688
- return true;
689
- }
690
- else if (event.type === "keydown" && event.key === "ArrowDown") {
691
- scaleDownFunction();
692
- return true;
693
- }
694
- return super.handleEvent(event);
695
- }
696
- }
606
+ // construct views and viewStates for DeckGL component
607
+ function createViewsAndViewStates(views, viewPortMargins, bounds, cameraPosition, boundingBox, deck) {
608
+ var _a, _b, _c, _d;
697
609
  const deckgl_views = [];
698
- const widthViewPort = deck === null || deck === void 0 ? void 0 : deck.width;
699
- const heightViewPort = deck === null || deck === void 0 ? void 0 : deck.height;
700
- const isDeckDefined = typeof widthViewPort !== "undefined" &&
701
- typeof heightViewPort !== "undefined";
702
- const mPixels = (_a = views === null || views === void 0 ? void 0 : views.marginPixels) !== null && _a !== void 0 ? _a : 0;
610
+ let viewStates = {};
611
+ const centerOfData = boundingBoxCenter(boundingBox);
612
+ const widthViewPort = (_a = deck === null || deck === void 0 ? void 0 : deck.width) !== null && _a !== void 0 ? _a : 1;
613
+ const heightViewPort = (_b = deck === null || deck === void 0 ? void 0 : deck.height) !== null && _b !== void 0 ? _b : 1;
614
+ const mPixels = (_c = views === null || views === void 0 ? void 0 : views.marginPixels) !== null && _c !== void 0 ? _c : 0;
615
+ const isOk = deck &&
616
+ views &&
617
+ views.layout[0] >= 1 &&
618
+ views.layout[1] >= 1 &&
619
+ views.layout[0] * views.layout[1] <= views.viewports.length;
703
620
  // if props for multiple viewport are not proper, return 2d view
704
- if (!views || !views.viewports || !views.layout || !isDeckDefined) {
621
+ if (!isOk) {
622
+ console.warn("Properties for multiple viewports are not properly defined.");
705
623
  deckgl_views.push(new OrthographicView({
706
624
  id: "main",
707
625
  controller: { doubleClickZoom: false },
@@ -713,6 +631,14 @@ function createViews(views, scaleUpFunction, scaleDownFunction, deck) {
713
631
  far: +99999,
714
632
  near: -99999,
715
633
  }));
634
+ viewStates = Object.assign(Object.assign({}, viewStates), { ["dummy"]: {
635
+ target: [0, 0],
636
+ zoom: 0,
637
+ rotationX: 0,
638
+ rotationOrbit: 0,
639
+ minZoom: minZoom2D,
640
+ maxZoom: maxZoom2D,
641
+ } });
716
642
  }
717
643
  else {
718
644
  let yPos = 0;
@@ -731,14 +657,16 @@ function createViews(views, scaleUpFunction, scaleDownFunction, deck) {
731
657
  for (let x = 1; x <= nX; x++) {
732
658
  if (views.viewports == undefined ||
733
659
  deckgl_views.length >= views.viewports.length) {
734
- return deckgl_views;
660
+ return [deckgl_views, viewStates];
735
661
  }
736
662
  const currentViewport = views.viewports[deckgl_views.length];
737
- const ViewType = currentViewport.show3D
738
- ? OrbitView
739
- : currentViewport.id === "intersection_view"
740
- ? IntersectionView
741
- : OrthographicView;
663
+ let ViewType = ZScaleOrbitView;
664
+ if (!currentViewport.show3D) {
665
+ ViewType =
666
+ currentViewport.id === "intersection_view"
667
+ ? IntersectionView
668
+ : OrthographicView;
669
+ }
742
670
  const far = 9999;
743
671
  const near = currentViewport.show3D ? 0.1 : -9999;
744
672
  const Controller = currentViewport.show3D
@@ -759,37 +687,22 @@ function createViews(views, scaleUpFunction, scaleDownFunction, deck) {
759
687
  far,
760
688
  near,
761
689
  }));
690
+ const isBoundsDefined = typeof bounds !== "undefined";
691
+ const isCameraPositionDefined = typeof cameraPosition !== "undefined" &&
692
+ Object.keys(cameraPosition).length !== 0;
693
+ let viewState = cameraPosition;
694
+ if (!isCameraPositionDefined) {
695
+ viewState = isBoundsDefined
696
+ ? getViewState(viewPortMargins, bounds !== null && bounds !== void 0 ? bounds : [0, 0, 1, 1], centerOfData, views, currentViewport, deck)
697
+ : getViewState3D((_d = currentViewport.show3D) !== null && _d !== void 0 ? _d : false, boundingBox, currentViewport.zoom, deck);
698
+ }
699
+ viewStates = Object.assign(Object.assign({}, viewStates), { [currentViewport.id]: viewState });
762
700
  xPos = xPos + w;
763
701
  }
764
702
  yPos = yPos + h;
765
703
  }
766
704
  }
767
- return deckgl_views;
768
- }
769
- // construct views object for DeckGL component
770
- function getViews(views) {
771
- const deckgl_views = [];
772
- // if props for multiple viewport are not proper, return 2d view
773
- if (!views || !views.viewports || !views.layout) {
774
- deckgl_views.push({
775
- id: "main",
776
- });
777
- }
778
- else {
779
- const [nY, nX] = views.layout;
780
- for (let y = 1; y <= nY; y++) {
781
- for (let x = 1; x <= nX; x++) {
782
- if (views.viewports == undefined ||
783
- deckgl_views.length >= views.viewports.length)
784
- return deckgl_views;
785
- const cur_viewport = views.viewports[deckgl_views.length];
786
- deckgl_views.push({
787
- id: cur_viewport.id,
788
- });
789
- }
790
- }
791
- }
792
- return deckgl_views;
705
+ return [deckgl_views, viewStates];
793
706
  }
794
707
  function handleMouseEvent(type, infos, event) {
795
708
  var _a;