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

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 (94) hide show
  1. package/dist/SubsurfaceViewer.d.ts +4 -0
  2. package/dist/SubsurfaceViewer.js +2 -6
  3. package/dist/SubsurfaceViewer.js.map +1 -1
  4. package/dist/components/ColorLegend.d.ts +1 -1
  5. package/dist/components/ColorLegends.d.ts +1 -1
  6. package/dist/components/InfoCard.js.map +1 -1
  7. package/dist/components/Map.d.ts +25 -19
  8. package/dist/components/Map.js +166 -248
  9. package/dist/components/Map.js.map +1 -1
  10. package/dist/inputSchema/WellLogTemplate.json +0 -5
  11. package/dist/layers/BoxSelectionLayer/boxSelectionLayer.d.ts +5 -6
  12. package/dist/layers/BoxSelectionLayer/boxSelectionLayer.js +2 -5
  13. package/dist/layers/BoxSelectionLayer/boxSelectionLayer.js.map +1 -1
  14. package/dist/layers/axes/axesLayer.d.ts +2 -2
  15. package/dist/layers/axes/axesLayer.js.map +1 -1
  16. package/dist/layers/axes/boxLayer.d.ts +2 -2
  17. package/dist/layers/axes/boxLayer.js.map +1 -1
  18. package/dist/layers/axes2d/axes2DLayer.d.ts +2 -2
  19. package/dist/layers/axes2d/axes2DLayer.js +53 -21
  20. package/dist/layers/axes2d/axes2DLayer.js.map +1 -1
  21. package/dist/layers/drawing/drawingLayer.d.ts +2 -2
  22. package/dist/layers/drawing/drawingLayer.js +1 -2
  23. package/dist/layers/drawing/drawingLayer.js.map +1 -1
  24. package/dist/layers/grid3d/grid3dLayer.d.ts +5 -4
  25. package/dist/layers/grid3d/grid3dLayer.js +14 -1
  26. package/dist/layers/grid3d/grid3dLayer.js.map +1 -1
  27. package/dist/layers/grid3d/privateLayer.d.ts +2 -2
  28. package/dist/layers/grid3d/privateLayer.js +6 -3
  29. package/dist/layers/grid3d/privateLayer.js.map +1 -1
  30. package/dist/layers/map/mapLayer.d.ts +3 -2
  31. package/dist/layers/map/mapLayer.js +16 -5
  32. package/dist/layers/map/mapLayer.js.map +1 -1
  33. package/dist/layers/map/privateMapLayer.d.ts +2 -2
  34. package/dist/layers/map/privateMapLayer.js +2 -0
  35. package/dist/layers/map/privateMapLayer.js.map +1 -1
  36. package/dist/layers/northarrow/northArrow3DLayer.d.ts +2 -2
  37. package/dist/layers/northarrow/northArrow3DLayer.js.map +1 -1
  38. package/dist/layers/piechart/pieChartLayer.d.ts +1 -1
  39. package/dist/layers/points/pointsLayer.d.ts +2 -2
  40. package/dist/layers/points/pointsLayer.js.map +1 -1
  41. package/dist/layers/polylines/polylinesLayer.d.ts +2 -2
  42. package/dist/layers/polylines/polylinesLayer.js.map +1 -1
  43. package/dist/layers/terrain/map3DLayer.d.ts +4 -4
  44. package/dist/layers/terrain/map3DLayer.js.map +1 -1
  45. package/dist/layers/terrain/terrainMapLayer.js +6 -3
  46. package/dist/layers/terrain/terrainMapLayer.js.map +1 -1
  47. package/dist/layers/triangle/privateTriangleLayer.d.ts +2 -2
  48. package/dist/layers/triangle/privateTriangleLayer.js.map +1 -1
  49. package/dist/layers/triangle/triangleLayer.d.ts +3 -2
  50. package/dist/layers/triangle/triangleLayer.js +14 -1
  51. package/dist/layers/triangle/triangleLayer.js.map +1 -1
  52. package/dist/layers/utils/layerTools.d.ts +2 -2
  53. package/dist/layers/wells/wellsLayer.d.ts +3 -3
  54. package/dist/layers/wells/wellsLayer.js.map +1 -1
  55. package/dist/utils/fit-bounds.d.ts +0 -1
  56. package/dist/utils/fit-bounds.js +0 -3
  57. package/dist/utils/fit-bounds.js.map +1 -1
  58. package/dist/utils/specExtractor.d.ts +1 -1
  59. package/dist/utils/specExtractor.js.map +1 -1
  60. package/package.json +49 -36
  61. package/dist/assets/glTF/north_arrow/scene.bin +0 -0
  62. package/dist/assets/glTF/north_arrow/scene.gltf +0 -315
  63. package/dist/inputSchema/wellCompletions.json +0 -108
  64. package/dist/package.json +0 -38
  65. package/dist/storybook/SubsurfaceViewer.stories.d.ts +0 -455
  66. package/dist/storybook/SubsurfaceViewer.stories.js +0 -537
  67. package/dist/storybook/SubsurfaceViewer.stories.js.map +0 -1
  68. package/dist/storybook/components/InfoCard.stories.d.ts +0 -48
  69. package/dist/storybook/components/InfoCard.stories.js +0 -36
  70. package/dist/storybook/components/InfoCard.stories.js.map +0 -1
  71. package/dist/storybook/components/colorLegends/ContinuousLegend.stories.d.ts +0 -31
  72. package/dist/storybook/components/colorLegends/ContinuousLegend.stories.js +0 -30
  73. package/dist/storybook/components/colorLegends/ContinuousLegend.stories.js.map +0 -1
  74. package/dist/storybook/components/colorLegends/DiscreteLegend.stories.d.ts +0 -31
  75. package/dist/storybook/components/colorLegends/DiscreteLegend.stories.js +0 -30
  76. package/dist/storybook/components/colorLegends/DiscreteLegend.stories.js.map +0 -1
  77. package/dist/storybook/components/colorLegends/IndividualScaleForMap.stories.d.ts +0 -20
  78. package/dist/storybook/components/colorLegends/IndividualScaleForMap.stories.js +0 -66
  79. package/dist/storybook/components/colorLegends/IndividualScaleForMap.stories.js.map +0 -1
  80. package/dist/storybook/components/colorLegends/SingleScaleForMap.stories.d.ts +0 -65
  81. package/dist/storybook/components/colorLegends/SingleScaleForMap.stories.js +0 -94
  82. package/dist/storybook/components/colorLegends/SingleScaleForMap.stories.js.map +0 -1
  83. package/dist/storybook/components/settings/LayerSettingsButton.stories.d.ts +0 -34
  84. package/dist/storybook/components/settings/LayerSettingsButton.stories.js +0 -31
  85. package/dist/storybook/components/settings/LayerSettingsButton.stories.js.map +0 -1
  86. package/dist/storybook/components/settings/NumericInput.stories.d.ts +0 -14
  87. package/dist/storybook/components/settings/NumericInput.stories.js +0 -15
  88. package/dist/storybook/components/settings/NumericInput.stories.js.map +0 -1
  89. package/dist/storybook/components/settings/ToggleButton.stories.d.ts +0 -13
  90. package/dist/storybook/components/settings/ToggleButton.stories.js +0 -14
  91. package/dist/storybook/components/settings/ToggleButton.stories.js.map +0 -1
  92. package/dist/storybook/schemaValidation/schemaValidation.stories.d.ts +0 -31
  93. package/dist/storybook/schemaValidation/schemaValidation.stories.js +0 -42
  94. 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") {
@@ -75,15 +112,16 @@ function adjustCameraTarget(viewStates, scale, newScale) {
75
112
  }
76
113
  return vs;
77
114
  }
78
- 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;
115
+ const Map = ({ id, layers, bounds, views, coords, scale, coordinateUnit, colorTables, setEditedData, checkDatafileSchema, onMouseEvent, selection, children, getTooltip = defaultTooltip, cameraPosition, getCameraPosition, isLoadedCallback, triggerHome, triggerResetMultipleWells, }) => {
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;
@@ -407,10 +337,15 @@ const Map = ({ id, layers, bounds, views, coords, scale, coordinateUnit, colorTa
407
337
  const [isLoaded, setIsLoaded] = useState(false);
408
338
  const onAfterRender = useCallback(() => {
409
339
  if (deckGLLayers) {
410
- const state = deckGLLayers.every((layer) => layer.isLoaded);
340
+ const state = deckGLLayers.every((layer) => {
341
+ return layer.isLoaded;
342
+ });
411
343
  setIsLoaded(state);
344
+ if (typeof isLoadedCallback !== "undefined") {
345
+ isLoadedCallback(state);
346
+ }
412
347
  }
413
- }, [deckGLLayers]);
348
+ }, [deckGLLayers, isLoadedCallback]);
414
349
  // validate layers data
415
350
  const [errorText, setErrorText] = useState();
416
351
  useEffect(() => {
@@ -453,7 +388,6 @@ const Map = ({ id, layers, bounds, views, coords, scale, coordinateUnit, colorTa
453
388
  const onViewStateChange = useCallback(
454
389
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
455
390
  ({ viewId, viewState }) => {
456
- var _a;
457
391
  const viewports = (views === null || views === void 0 ? void 0 : views.viewports) || [];
458
392
  const isSyncIds = viewports
459
393
  .filter((item) => item.isSync)
@@ -469,14 +403,7 @@ const Map = ({ id, layers, bounds, views, coords, scale, coordinateUnit, colorTa
469
403
  if (getCameraPosition) {
470
404
  getCameraPosition(viewState);
471
405
  }
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]);
406
+ }, [getCameraPosition, views === null || views === void 0 ? void 0 : views.viewports]);
480
407
  if (!deckGLViews || isEmpty(deckGLViews) || isEmpty(deckGLLayers))
481
408
  return null;
482
409
  return (React.createElement("div", { onContextMenu: (event) => event.preventDefault() },
@@ -505,10 +432,8 @@ const Map = ({ id, layers, bounds, views, coords, scale, coordinateUnit, colorTa
505
432
  setEditedData === null || setEditedData === void 0 ? void 0 : setEditedData(updated_prop);
506
433
  },
507
434
  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,
435
+ }, getCursor: ({ isDragging }) => isDragging ? "grabbing" : "default", getTooltip: getTooltip, ref: deckRef, onViewStateChange: onViewStateChange, onHover: onHover, onClick: onClick, onAfterRender: onAfterRender }, children),
436
+ (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
437
  React.createElement(StatusIndicator, { layers: deckGLLayers, isLoaded: isLoaded }),
513
438
  (coords === null || coords === void 0 ? void 0 : coords.visible) ? React.createElement(InfoCard, { pickInfos: hoverInfo }) : null,
514
439
  errorText && (React.createElement("pre", { style: {
@@ -562,8 +487,8 @@ export function jsonToObject(data, enums = undefined) {
562
487
  return jsonConverter.convert(filtered_data);
563
488
  }
564
489
  // 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;
490
+ function getViewState(viewPortMargins, bounds_accessor, centerOfData, views, viewPort, deck) {
491
+ var _a;
567
492
  let bounds = [0, 0, 1, 1];
568
493
  if (typeof bounds_accessor == "function") {
569
494
  bounds = bounds_accessor();
@@ -631,15 +556,19 @@ function getViewState(viewPortMargins, bounds_accessor, centerOfData, views, vie
631
556
  fb_target = [fb.x - translate_x, fb.y - translate_y, z];
632
557
  fb_zoom = fb.zoom;
633
558
  }
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;
559
+ const target = viewPort.target;
560
+ const zoom = viewPort.zoom;
636
561
  const target_ = target !== null && target !== void 0 ? target : fb_target;
637
562
  const zoom_ = zoom !== null && zoom !== void 0 ? zoom : fb_zoom;
563
+ const minZoom = minZoom3D;
564
+ const maxZoom = viewPort.show3D ? maxZoom3D : maxZoom2D;
638
565
  const view_state = {
639
566
  target: target_,
640
567
  zoom: zoom_,
641
568
  rotationX: 90,
642
569
  rotationOrbit: 0,
570
+ minZoom,
571
+ maxZoom,
643
572
  };
644
573
  return view_state;
645
574
  }
@@ -674,34 +603,28 @@ function getViewState3D(is3D, bounds, zoom, deck) {
674
603
  zoom: zoom !== null && zoom !== void 0 ? zoom : fitted_bound.zoom * 1.2,
675
604
  rotationX: 45,
676
605
  rotationOrbit: 0,
606
+ minZoom: minZoom3D,
607
+ maxZoom: maxZoom3D,
677
608
  };
678
609
  return view_state;
679
610
  }
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
- }
611
+ // construct views and viewStates for DeckGL component
612
+ function createViewsAndViewStates(views, viewPortMargins, bounds, cameraPosition, boundingBox, deck) {
613
+ var _a, _b, _c, _d;
697
614
  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;
615
+ let viewStates = {};
616
+ const centerOfData = boundingBoxCenter(boundingBox);
617
+ const widthViewPort = (_a = deck === null || deck === void 0 ? void 0 : deck.width) !== null && _a !== void 0 ? _a : 1;
618
+ const heightViewPort = (_b = deck === null || deck === void 0 ? void 0 : deck.height) !== null && _b !== void 0 ? _b : 1;
619
+ const mPixels = (_c = views === null || views === void 0 ? void 0 : views.marginPixels) !== null && _c !== void 0 ? _c : 0;
620
+ const isOk = deck &&
621
+ views &&
622
+ views.layout[0] >= 1 &&
623
+ views.layout[1] >= 1 &&
624
+ views.layout[0] * views.layout[1] <= views.viewports.length;
703
625
  // if props for multiple viewport are not proper, return 2d view
704
- if (!views || !views.viewports || !views.layout || !isDeckDefined) {
626
+ if (!isOk) {
627
+ console.warn("Properties for multiple viewports are not properly defined.");
705
628
  deckgl_views.push(new OrthographicView({
706
629
  id: "main",
707
630
  controller: { doubleClickZoom: false },
@@ -713,6 +636,14 @@ function createViews(views, scaleUpFunction, scaleDownFunction, deck) {
713
636
  far: +99999,
714
637
  near: -99999,
715
638
  }));
639
+ viewStates = Object.assign(Object.assign({}, viewStates), { ["dummy"]: {
640
+ target: [0, 0],
641
+ zoom: 0,
642
+ rotationX: 0,
643
+ rotationOrbit: 0,
644
+ minZoom: minZoom2D,
645
+ maxZoom: maxZoom2D,
646
+ } });
716
647
  }
717
648
  else {
718
649
  let yPos = 0;
@@ -731,14 +662,16 @@ function createViews(views, scaleUpFunction, scaleDownFunction, deck) {
731
662
  for (let x = 1; x <= nX; x++) {
732
663
  if (views.viewports == undefined ||
733
664
  deckgl_views.length >= views.viewports.length) {
734
- return deckgl_views;
665
+ return [deckgl_views, viewStates];
735
666
  }
736
667
  const currentViewport = views.viewports[deckgl_views.length];
737
- const ViewType = currentViewport.show3D
738
- ? OrbitView
739
- : currentViewport.id === "intersection_view"
740
- ? IntersectionView
741
- : OrthographicView;
668
+ let ViewType = ZScaleOrbitView;
669
+ if (!currentViewport.show3D) {
670
+ ViewType =
671
+ currentViewport.id === "intersection_view"
672
+ ? IntersectionView
673
+ : OrthographicView;
674
+ }
742
675
  const far = 9999;
743
676
  const near = currentViewport.show3D ? 0.1 : -9999;
744
677
  const Controller = currentViewport.show3D
@@ -759,37 +692,22 @@ function createViews(views, scaleUpFunction, scaleDownFunction, deck) {
759
692
  far,
760
693
  near,
761
694
  }));
695
+ const isBoundsDefined = typeof bounds !== "undefined";
696
+ const isCameraPositionDefined = typeof cameraPosition !== "undefined" &&
697
+ Object.keys(cameraPosition).length !== 0;
698
+ let viewState = cameraPosition;
699
+ if (!isCameraPositionDefined) {
700
+ viewState = isBoundsDefined
701
+ ? getViewState(viewPortMargins, bounds !== null && bounds !== void 0 ? bounds : [0, 0, 1, 1], centerOfData, views, currentViewport, deck)
702
+ : getViewState3D((_d = currentViewport.show3D) !== null && _d !== void 0 ? _d : false, boundingBox, currentViewport.zoom, deck);
703
+ }
704
+ viewStates = Object.assign(Object.assign({}, viewStates), { [currentViewport.id]: viewState });
762
705
  xPos = xPos + w;
763
706
  }
764
707
  yPos = yPos + h;
765
708
  }
766
709
  }
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;
710
+ return [deckgl_views, viewStates];
793
711
  }
794
712
  function handleMouseEvent(type, infos, event) {
795
713
  var _a;