@webviz/subsurface-viewer 0.0.1-alpha.1 → 0.0.2-alpha.2
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/dist/index.d.ts +0 -1
- package/dist/index.js +0 -1
- package/dist/index.js.map +1 -1
- package/dist/package.json +5 -2
- package/package.json +6 -3
- package/dist/DashSubsurfaceViewer.d.ts +0 -56
- package/dist/DashSubsurfaceViewer.js +0 -160
- package/dist/DashSubsurfaceViewer.js.map +0 -1
- package/src/DashSubsurfaceViewer.tsx +0 -270
- package/src/SubsurfaceViewer.stories.tsx +0 -449
- package/src/SubsurfaceViewer.test.tsx +0 -98
- package/src/SubsurfaceViewer.tsx +0 -356
- package/src/__snapshots__/SubsurfaceViewer.test.tsx.snap +0 -178
- package/src/assets/glTF/north_arrow/scene.bin +0 -0
- package/src/assets/glTF/north_arrow/scene.gltf +0 -315
- package/src/assets/glTF/north_arrow/textures/Arrow5_baseColor.png +0 -0
- package/src/assets/glTF/north_arrow/textures/Arrow5_metallicRoughness.png +0 -0
- package/src/assets/glTF/north_arrow/textures/Arrow5_normal.png +0 -0
- package/src/components/ColorLegend.test.tsx +0 -32
- package/src/components/ColorLegend.tsx +0 -80
- package/src/components/ColorLegends.test.tsx +0 -97
- package/src/components/ColorLegends.tsx +0 -46
- package/src/components/DistanceScale.stories.tsx +0 -28
- package/src/components/DistanceScale.test.tsx +0 -36
- package/src/components/DistanceScale.tsx +0 -84
- package/src/components/InfoCard.test.tsx +0 -110
- package/src/components/InfoCard.tsx +0 -263
- package/src/components/Map.test.tsx +0 -142
- package/src/components/Map.tsx +0 -1435
- package/src/components/StatusIndicator.test.tsx +0 -14
- package/src/components/StatusIndicator.tsx +0 -38
- package/src/components/ViewAnnotation.tsx +0 -16
- package/src/components/ViewFooter.test.tsx +0 -12
- package/src/components/ViewFooter.tsx +0 -30
- package/src/components/__snapshots__/ColorLegends.test.tsx.snap +0 -15
- package/src/components/__snapshots__/DistanceScale.test.tsx.snap +0 -33
- package/src/components/__snapshots__/InfoCard.test.tsx.snap +0 -561
- package/src/components/__snapshots__/Map.test.tsx.snap +0 -119
- package/src/components/__snapshots__/StatusIndicator.test.tsx.snap +0 -3
- package/src/components/__snapshots__/ViewFooter.test.tsx.snap +0 -7
- package/src/components/settings/DrawModeSelector.test.tsx +0 -45
- package/src/components/settings/DrawModeSelector.tsx +0 -58
- package/src/components/settings/DrawModeSelector_performance.test.tsx +0 -35
- package/src/components/settings/LayerProperty.test.tsx +0 -35
- package/src/components/settings/LayerProperty.tsx +0 -153
- package/src/components/settings/LayerProperty_performance.test.tsx +0 -39
- package/src/components/settings/LayerSettingsButton.test.tsx +0 -133
- package/src/components/settings/LayerSettingsButton.tsx +0 -95
- package/src/components/settings/LayersButton.test.tsx +0 -102
- package/src/components/settings/LayersButton.tsx +0 -97
- package/src/components/settings/NumericInput.test.tsx +0 -25
- package/src/components/settings/NumericInput.tsx +0 -67
- package/src/components/settings/Settings.tsx +0 -71
- package/src/components/settings/SliderInput.test.tsx +0 -28
- package/src/components/settings/SliderInput.tsx +0 -71
- package/src/components/settings/ToggleButton.test.tsx +0 -25
- package/src/components/settings/ToggleButton.tsx +0 -53
- package/src/components/settings/__snapshots__/DrawModeSelector.test.tsx.snap +0 -124
- package/src/components/settings/__snapshots__/LayerProperty.test.tsx.snap +0 -124
- package/src/components/settings/__snapshots__/LayerSettingsButton.test.tsx.snap +0 -36
- package/src/components/settings/__snapshots__/LayersButton.test.tsx.snap +0 -83
- package/src/components/settings/__snapshots__/NumericInput.test.tsx.snap +0 -123
- package/src/components/settings/__snapshots__/SliderInput.test.tsx.snap +0 -244
- package/src/components/settings/__snapshots__/ToggleButton.test.tsx.snap +0 -182
- package/src/custom.d.ts +0 -9
- package/src/index.ts +0 -5
- package/src/inputSchema/ColorTables.json +0 -51
- package/src/inputSchema/FaultPolygons.json +0 -80
- package/src/inputSchema/Grid.json +0 -39
- package/src/inputSchema/PieChart.json +0 -72
- package/src/inputSchema/WellLog.json +0 -126
- package/src/inputSchema/WellLogTemplate.json +0 -136
- package/src/inputSchema/WellLogs.json +0 -5
- package/src/inputSchema/Wells.json +0 -106
- package/src/inputSchema/schemaValidationUtil.tsx +0 -55
- package/src/inputSchema/validator.tsx +0 -72
- package/src/inputSchema/wellCompletions.json +0 -108
- package/src/layers/BoxSelectionLayer/boxSelectionLayer.stories.tsx +0 -172
- package/src/layers/BoxSelectionLayer/boxSelectionLayer.tsx +0 -136
- package/src/layers/axes/axes-fragment.glsl.ts +0 -15
- package/src/layers/axes/axesLayer.stories.tsx +0 -87
- package/src/layers/axes/axesLayer.ts +0 -692
- package/src/layers/axes/boxLayer.ts +0 -71
- package/src/layers/axes/grid-vertex.glsl.ts +0 -14
- package/src/layers/axes2d/axes2DLayer.stories.tsx +0 -150
- package/src/layers/axes2d/axes2DLayer.ts +0 -841
- package/src/layers/axes2d/font-atlas.png +0 -0
- package/src/layers/axes2d/label-fragment.glsl.js +0 -37
- package/src/layers/axes2d/label-vertex.glsl.js +0 -20
- package/src/layers/axes2d/line-fragment.glsl.js +0 -14
- package/src/layers/axes2d/line-vertex.glsl.js +0 -13
- package/src/layers/colormap/colormap.fs.glsl.ts +0 -42
- package/src/layers/colormap/colormapLayer.ts +0 -247
- package/src/layers/drawing/drawingLayer.tsx +0 -256
- package/src/layers/fault_polygons/faultPolygonsLayer.ts +0 -54
- package/src/layers/grid3d/fragment.fs.glsl.ts +0 -109
- package/src/layers/grid3d/fragment_lines.glsl.ts +0 -21
- package/src/layers/grid3d/grid3dLayer.stories.tsx +0 -172
- package/src/layers/grid3d/grid3dLayer.ts +0 -248
- package/src/layers/grid3d/privateLayer.ts +0 -292
- package/src/layers/grid3d/vertex.glsl.ts +0 -43
- package/src/layers/grid3d/vertex_lines.glsl.ts +0 -15
- package/src/layers/grid3d/webworker.ts +0 -173
- package/src/layers/hillshading2d/hillshading2d.fs.glsl.ts +0 -62
- package/src/layers/hillshading2d/hillshading2dLayer.ts +0 -172
- package/src/layers/index.ts +0 -35
- package/src/layers/intersection/intersectionView.stories.tsx +0 -294
- package/src/layers/intersection/unfoldedGeoJsonLayer.ts +0 -92
- package/src/layers/map/fragment.fs.glsl.ts +0 -127
- package/src/layers/map/fragment_lines.glsl.ts +0 -21
- package/src/layers/map/mapLayer.stories.tsx +0 -1369
- package/src/layers/map/mapLayer.ts +0 -470
- package/src/layers/map/privateMapLayer.ts +0 -317
- package/src/layers/map/vertex.glsl.ts +0 -45
- package/src/layers/map/vertex_lines.glsl.ts +0 -15
- package/src/layers/map/webworker.ts +0 -479
- package/src/layers/northarrow/northArrow.stories.tsx +0 -108
- package/src/layers/northarrow/northArrow3DLayer.ts +0 -204
- package/src/layers/northarrow/northarrow-fragment.glsl.js +0 -14
- package/src/layers/northarrow/northarrow-vertex.glsl.js +0 -13
- package/src/layers/piechart/fragment.glsl.js +0 -42
- package/src/layers/piechart/pieChartLayer.ts +0 -246
- package/src/layers/piechart/vertex.glsl.js +0 -42
- package/src/layers/points/pointsLayer.stories.tsx +0 -141
- package/src/layers/points/pointsLayer.ts +0 -143
- package/src/layers/polylines/polylinesLayer.stories.tsx +0 -144
- package/src/layers/polylines/polylinesLayer.ts +0 -263
- package/src/layers/selectable_geojson/selectableGeoJsonLayer.ts +0 -25
- package/src/layers/shader_modules/decoder.fs.glsl.ts +0 -41
- package/src/layers/shader_modules/decoder.ts +0 -46
- package/src/layers/shader_modules/index.ts +0 -1
- package/src/layers/terrain/map3DLayer.stories.tsx +0 -340
- package/src/layers/terrain/map3DLayer.ts +0 -556
- package/src/layers/terrain/terrainMapLayer.ts +0 -334
- package/src/layers/terrain/terrainmap.fs.glsl.ts +0 -134
- package/src/layers/triangle/fragment.fs.glsl.ts +0 -126
- package/src/layers/triangle/fragment_lines.glsl.ts +0 -21
- package/src/layers/triangle/privateTriangleLayer.ts +0 -203
- package/src/layers/triangle/test_data/surfacePoints.ts +0 -4344
- package/src/layers/triangle/test_data/surfaceTriangles.ts +0 -7392
- package/src/layers/triangle/triangleLayer.stories.tsx +0 -191
- package/src/layers/triangle/triangleLayer.ts +0 -273
- package/src/layers/triangle/vertex.glsl.ts +0 -35
- package/src/layers/triangle/vertex_lines.glsl.ts +0 -15
- package/src/layers/triangle/webworker.ts +0 -165
- package/src/layers/utils/glsl.d.ts +0 -4
- package/src/layers/utils/layerTools.ts +0 -182
- package/src/layers/utils/propertyMapTools.ts +0 -43
- package/src/layers/wells/utils/spline.ts +0 -318
- package/src/layers/wells/wellsLayer.stories.tsx +0 -625
- package/src/layers/wells/wellsLayer.ts +0 -1377
- package/src/redux/actions.ts +0 -8
- package/src/redux/reducer.ts +0 -43
- package/src/redux/store.ts +0 -15
- package/src/redux/types.ts +0 -114
- package/src/storybook/SubsurfaceViewer.stories.jsx +0 -644
- package/src/storybook/components/InfoCard.stories.jsx +0 -39
- package/src/storybook/components/colorLegends/ContinuousLegend.stories.jsx +0 -32
- package/src/storybook/components/colorLegends/DiscreteLegend.stories.jsx +0 -33
- package/src/storybook/components/colorLegends/IndividualScaleForMap.stories.jsx +0 -99
- package/src/storybook/components/colorLegends/SingleScaleForMap.stories.jsx +0 -120
- package/src/storybook/components/settings/LayerSettingsButton.stories.jsx +0 -34
- package/src/storybook/components/settings/NumericInput.stories.jsx +0 -17
- package/src/storybook/components/settings/ToggleButton.stories.jsx +0 -16
- package/src/storybook/schemaValidation/sampleData.js +0 -177
- package/src/storybook/schemaValidation/schemaValidation.stories.jsx +0 -91
- package/src/test/TestWrapper.tsx +0 -13
- package/src/utils/configuration.ts +0 -61
- package/src/utils/fit-bounds.js +0 -85
- package/src/utils/measurement.ts +0 -61
- package/src/utils/northArrow.ts +0 -4
- package/src/utils/specExtractor.ts +0 -36
- package/src/viewports/index.js +0 -1
- package/src/viewports/intersectionViewport.ts +0 -137
- package/src/views/index.js +0 -1
- package/src/views/intersectionView.ts +0 -38
- package/tsconfig.json +0 -7
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
import { render, screen } from "@testing-library/react";
|
|
2
|
-
import "jest-styled-components";
|
|
3
|
-
import "@testing-library/jest-dom";
|
|
4
|
-
import React from "react";
|
|
5
|
-
import userEvent from "@testing-library/user-event";
|
|
6
|
-
import { EmptyWrapper } from "../../test/TestWrapper";
|
|
7
|
-
import DrawModeSelector from "./DrawModeSelector";
|
|
8
|
-
|
|
9
|
-
describe("Test draw-mode menu", () => {
|
|
10
|
-
it("snapshot test", () => {
|
|
11
|
-
const { container } = render(
|
|
12
|
-
EmptyWrapper({
|
|
13
|
-
children: (
|
|
14
|
-
<DrawModeSelector
|
|
15
|
-
layerId="drawing-layer"
|
|
16
|
-
label="Draw mode"
|
|
17
|
-
value="drawLineString"
|
|
18
|
-
/>
|
|
19
|
-
),
|
|
20
|
-
})
|
|
21
|
-
);
|
|
22
|
-
expect(container.firstChild).toMatchSnapshot();
|
|
23
|
-
});
|
|
24
|
-
it("select option to dispatch redux action", async () => {
|
|
25
|
-
render(
|
|
26
|
-
EmptyWrapper({
|
|
27
|
-
children: (
|
|
28
|
-
<DrawModeSelector
|
|
29
|
-
layerId="drawing-layer"
|
|
30
|
-
label="Draw mode"
|
|
31
|
-
value="drawLineString"
|
|
32
|
-
/>
|
|
33
|
-
),
|
|
34
|
-
})
|
|
35
|
-
);
|
|
36
|
-
expect(screen.getByLabelText(/draw mode/i)).toBeVisible();
|
|
37
|
-
expect(
|
|
38
|
-
screen.getByRole("combobox", { name: /draw mode/i })
|
|
39
|
-
).toHaveDisplayValue("Create polyline");
|
|
40
|
-
userEvent.selectOptions(
|
|
41
|
-
screen.getByRole("combobox", { name: /draw mode/i }),
|
|
42
|
-
"View"
|
|
43
|
-
);
|
|
44
|
-
});
|
|
45
|
-
});
|
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
/* eslint-disable react-hooks/exhaustive-deps */ // remove when ready to fix these.
|
|
2
|
-
|
|
3
|
-
import { NativeSelect } from "@equinor/eds-core-react";
|
|
4
|
-
import React, { useCallback } from "react";
|
|
5
|
-
import { useDispatch } from "react-redux";
|
|
6
|
-
import { updateDrawingMode } from "../../redux/actions";
|
|
7
|
-
import { DrawMode, DrawModes } from "../../redux/types";
|
|
8
|
-
|
|
9
|
-
interface Props {
|
|
10
|
-
/**
|
|
11
|
-
* It defines the mode that are available for a particular layer based on layer ID.
|
|
12
|
-
*/
|
|
13
|
-
layerId: string;
|
|
14
|
-
/**
|
|
15
|
-
* Label for the component.
|
|
16
|
-
*/
|
|
17
|
-
label: string;
|
|
18
|
-
/**
|
|
19
|
-
* Initial state of the component.
|
|
20
|
-
*/
|
|
21
|
-
value: string;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
const DrawModeSelector: React.FC<Props> = React.memo(
|
|
25
|
-
({ layerId, label, value }: Props) => {
|
|
26
|
-
// Redux
|
|
27
|
-
const dispatch = useDispatch();
|
|
28
|
-
|
|
29
|
-
// handlers
|
|
30
|
-
const handleSelectedItemChange = useCallback(
|
|
31
|
-
(event: { target: { value: string } }) => {
|
|
32
|
-
const selection = DrawModes.find(
|
|
33
|
-
(mode) => mode.displayName === event.target.value
|
|
34
|
-
);
|
|
35
|
-
dispatch(
|
|
36
|
-
updateDrawingMode([layerId, selection?.id as DrawMode])
|
|
37
|
-
);
|
|
38
|
-
},
|
|
39
|
-
[dispatch]
|
|
40
|
-
);
|
|
41
|
-
const cur_selection = DrawModes.find((mode) => mode.id === value);
|
|
42
|
-
return (
|
|
43
|
-
<NativeSelect
|
|
44
|
-
id={`${layerId}-mode-selector`}
|
|
45
|
-
label={label}
|
|
46
|
-
value={cur_selection?.displayName}
|
|
47
|
-
onChange={handleSelectedItemChange}
|
|
48
|
-
>
|
|
49
|
-
{DrawModes.map((mode) => (
|
|
50
|
-
<option key={mode.id}>{mode.displayName}</option>
|
|
51
|
-
))}
|
|
52
|
-
</NativeSelect>
|
|
53
|
-
);
|
|
54
|
-
}
|
|
55
|
-
);
|
|
56
|
-
|
|
57
|
-
DrawModeSelector.displayName = "DrawModeSelector";
|
|
58
|
-
export default DrawModeSelector;
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
import { render } from "@testing-library/react";
|
|
2
|
-
import "jest-styled-components";
|
|
3
|
-
import "@testing-library/jest-dom";
|
|
4
|
-
import React, { Profiler } from "react";
|
|
5
|
-
import { EmptyWrapper } from "../../test/TestWrapper";
|
|
6
|
-
import DrawModeSelector from "./DrawModeSelector";
|
|
7
|
-
import { obj } from "../../../../performanceUtility/onRenderFunction";
|
|
8
|
-
import * as core from "@actions/core";
|
|
9
|
-
import logTimes from "../../../../performanceUtility/onRenderFunction";
|
|
10
|
-
|
|
11
|
-
describe("Test draw-mode menu", () => {
|
|
12
|
-
it("performance test", () => {
|
|
13
|
-
render(
|
|
14
|
-
EmptyWrapper({
|
|
15
|
-
children: (
|
|
16
|
-
<Profiler id="Native Select" onRender={logTimes}>
|
|
17
|
-
<DrawModeSelector
|
|
18
|
-
layerId="drawing-layer"
|
|
19
|
-
label="Draw mode"
|
|
20
|
-
value="drawLineString"
|
|
21
|
-
/>
|
|
22
|
-
</Profiler>
|
|
23
|
-
),
|
|
24
|
-
})
|
|
25
|
-
);
|
|
26
|
-
if (obj.perf_metrics[0][2] > 100) {
|
|
27
|
-
core.warning(
|
|
28
|
-
"DrawModeSelector Component in '/components/SubsurfaceViewer/components/settings/' seems to have performance issues. Actual render time:" +
|
|
29
|
-
obj.perf_metrics[0][2] +
|
|
30
|
-
" Expected render time: 100"
|
|
31
|
-
);
|
|
32
|
-
}
|
|
33
|
-
// expect(obj.perf_metrics[0][2]).toBeLessThan(340);
|
|
34
|
-
});
|
|
35
|
-
});
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
import { render } from "@testing-library/react";
|
|
2
|
-
import "jest-styled-components";
|
|
3
|
-
import "@testing-library/jest-dom";
|
|
4
|
-
import React from "react";
|
|
5
|
-
import { EmptyWrapper } from "../../test/TestWrapper";
|
|
6
|
-
import LayerProperty from "./LayerProperty";
|
|
7
|
-
|
|
8
|
-
const drawingLayer = {
|
|
9
|
-
"@@type": "DrawingLayer",
|
|
10
|
-
name: "Drawing",
|
|
11
|
-
id: "drawing-layer",
|
|
12
|
-
pickable: true,
|
|
13
|
-
visible: true,
|
|
14
|
-
mode: "drawLineString",
|
|
15
|
-
|
|
16
|
-
// Props used to get/set data in the drawing layer.
|
|
17
|
-
selectedFeatureIndexes: [] as number[],
|
|
18
|
-
data: {
|
|
19
|
-
type: "FeatureCollection",
|
|
20
|
-
features: [],
|
|
21
|
-
},
|
|
22
|
-
};
|
|
23
|
-
|
|
24
|
-
describe("Test Layer Property", () => {
|
|
25
|
-
it("snapshot test", () => {
|
|
26
|
-
const { container } = drawingLayer
|
|
27
|
-
? render(
|
|
28
|
-
EmptyWrapper({
|
|
29
|
-
children: <LayerProperty layer={drawingLayer} />,
|
|
30
|
-
})
|
|
31
|
-
)
|
|
32
|
-
: render(<div />);
|
|
33
|
-
expect(container.firstChild).toMatchSnapshot();
|
|
34
|
-
});
|
|
35
|
-
});
|
|
@@ -1,153 +0,0 @@
|
|
|
1
|
-
import React, { ChangeEvent, FormEvent, useCallback } from "react";
|
|
2
|
-
import { useDispatch } from "react-redux";
|
|
3
|
-
import { updateLayerProp } from "../../redux/actions";
|
|
4
|
-
import DrawModeSelector from "./DrawModeSelector";
|
|
5
|
-
import NumericInput from "./NumericInput";
|
|
6
|
-
import ToggleButton from "./ToggleButton";
|
|
7
|
-
import SliderInput from "./SliderInput";
|
|
8
|
-
import {
|
|
9
|
-
SliderTypeProps,
|
|
10
|
-
ToggleTypeProps,
|
|
11
|
-
MenuTypeProps,
|
|
12
|
-
NumericTypeProps,
|
|
13
|
-
} from "../../redux/types";
|
|
14
|
-
|
|
15
|
-
interface Props {
|
|
16
|
-
layer: Record<string, unknown>;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
const LayerProperty: React.FC<Props> = React.memo(({ layer }: Props) => {
|
|
20
|
-
// Redux
|
|
21
|
-
const dispatch = useDispatch();
|
|
22
|
-
|
|
23
|
-
// handlers
|
|
24
|
-
const updateProp = useCallback(
|
|
25
|
-
(
|
|
26
|
-
layer_id: string,
|
|
27
|
-
prop_name: string,
|
|
28
|
-
state: string | number | boolean
|
|
29
|
-
) => dispatch(updateLayerProp([layer_id, prop_name, state])),
|
|
30
|
-
[dispatch]
|
|
31
|
-
);
|
|
32
|
-
|
|
33
|
-
const isControlDisplayable = (
|
|
34
|
-
propId: string,
|
|
35
|
-
dependentOnProp?: string
|
|
36
|
-
): boolean => {
|
|
37
|
-
if (!layer) return false;
|
|
38
|
-
|
|
39
|
-
return dependentOnProp
|
|
40
|
-
? dependentOnProp in layer && propId in layer
|
|
41
|
-
: propId in layer;
|
|
42
|
-
};
|
|
43
|
-
|
|
44
|
-
return (
|
|
45
|
-
layer && (
|
|
46
|
-
<>
|
|
47
|
-
{
|
|
48
|
-
// first render all boolean properties
|
|
49
|
-
ToggleTypeProps.map(
|
|
50
|
-
(prop) =>
|
|
51
|
-
isControlDisplayable(
|
|
52
|
-
prop.id,
|
|
53
|
-
prop.dependentOnProp
|
|
54
|
-
) && (
|
|
55
|
-
<ToggleButton
|
|
56
|
-
label={prop.displayName}
|
|
57
|
-
checked={layer[prop.id] as boolean}
|
|
58
|
-
onChange={(
|
|
59
|
-
e: ChangeEvent<HTMLInputElement>
|
|
60
|
-
) => {
|
|
61
|
-
updateProp(
|
|
62
|
-
layer["id"] as string,
|
|
63
|
-
prop.id,
|
|
64
|
-
e.target.checked
|
|
65
|
-
);
|
|
66
|
-
}}
|
|
67
|
-
key={`prop-toggle-${layer["id"]}-${prop.id}`}
|
|
68
|
-
/>
|
|
69
|
-
)
|
|
70
|
-
)
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
{
|
|
74
|
-
// then render all numeric properties
|
|
75
|
-
NumericTypeProps.map(
|
|
76
|
-
(prop) =>
|
|
77
|
-
isControlDisplayable(
|
|
78
|
-
prop.id,
|
|
79
|
-
prop.dependentOnProp
|
|
80
|
-
) && (
|
|
81
|
-
<NumericInput
|
|
82
|
-
label={prop.displayName}
|
|
83
|
-
value={layer[prop.id] as number}
|
|
84
|
-
step={prop.step}
|
|
85
|
-
onChange={(
|
|
86
|
-
e: ChangeEvent<HTMLInputElement>
|
|
87
|
-
) => {
|
|
88
|
-
updateProp(
|
|
89
|
-
layer["id"] as string,
|
|
90
|
-
prop.id,
|
|
91
|
-
Number(e.target.value)
|
|
92
|
-
);
|
|
93
|
-
}}
|
|
94
|
-
key={`prop-numeric-input-${layer["id"]}-${prop.id}`}
|
|
95
|
-
/>
|
|
96
|
-
)
|
|
97
|
-
)
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
{
|
|
101
|
-
// then render all slider properties
|
|
102
|
-
SliderTypeProps.map(
|
|
103
|
-
(prop) =>
|
|
104
|
-
isControlDisplayable(
|
|
105
|
-
prop.id,
|
|
106
|
-
prop.dependentOnProp
|
|
107
|
-
) && (
|
|
108
|
-
<SliderInput
|
|
109
|
-
label={prop.displayName}
|
|
110
|
-
min={prop.min}
|
|
111
|
-
max={prop.max}
|
|
112
|
-
step={prop.step}
|
|
113
|
-
value={layer[prop.id] as number}
|
|
114
|
-
onChange={(
|
|
115
|
-
_: FormEvent<HTMLDivElement>,
|
|
116
|
-
value: number | number[]
|
|
117
|
-
) => {
|
|
118
|
-
updateProp(
|
|
119
|
-
layer["id"] as string,
|
|
120
|
-
prop.id,
|
|
121
|
-
(value as number) / 100
|
|
122
|
-
);
|
|
123
|
-
}}
|
|
124
|
-
key={`prop-slider-${layer["id"]}-${prop.id}`}
|
|
125
|
-
/>
|
|
126
|
-
)
|
|
127
|
-
)
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
{
|
|
131
|
-
// lastly render all menu type properties
|
|
132
|
-
MenuTypeProps.map(
|
|
133
|
-
(prop) =>
|
|
134
|
-
isControlDisplayable(
|
|
135
|
-
prop.id,
|
|
136
|
-
prop.dependentOnProp
|
|
137
|
-
) && (
|
|
138
|
-
<DrawModeSelector
|
|
139
|
-
layerId={layer["id"] as string}
|
|
140
|
-
label={prop.displayName}
|
|
141
|
-
value={layer[prop.id] as string}
|
|
142
|
-
key={`prop-menu-${layer["id"]}-${prop.id}`}
|
|
143
|
-
/>
|
|
144
|
-
)
|
|
145
|
-
)
|
|
146
|
-
}
|
|
147
|
-
</>
|
|
148
|
-
)
|
|
149
|
-
);
|
|
150
|
-
});
|
|
151
|
-
|
|
152
|
-
LayerProperty.displayName = "LayerProperty";
|
|
153
|
-
export default LayerProperty;
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
import { render } from "@testing-library/react";
|
|
2
|
-
import "jest-styled-components";
|
|
3
|
-
import "@testing-library/jest-dom";
|
|
4
|
-
import React, { Profiler } from "react";
|
|
5
|
-
import { EmptyWrapper } from "../../test/TestWrapper";
|
|
6
|
-
import LayerProperty from "./LayerProperty";
|
|
7
|
-
import * as core from "@actions/core";
|
|
8
|
-
import { obj } from "../../../../performanceUtility/onRenderFunction";
|
|
9
|
-
import logTimes from "../../../../performanceUtility/onRenderFunction";
|
|
10
|
-
|
|
11
|
-
import exampleData from "../../../../../demo/example-data/deckgl-map.json";
|
|
12
|
-
|
|
13
|
-
const layers: Record<string, unknown>[] = exampleData[0].layers;
|
|
14
|
-
|
|
15
|
-
describe("Test Layer Property", () => {
|
|
16
|
-
it("performance test", () => {
|
|
17
|
-
const drawing_layer = layers.find(
|
|
18
|
-
(item) => item["@@type"] === "DrawingLayer"
|
|
19
|
-
);
|
|
20
|
-
drawing_layer &&
|
|
21
|
-
render(
|
|
22
|
-
EmptyWrapper({
|
|
23
|
-
children: (
|
|
24
|
-
<Profiler id="Layer properties" onRender={logTimes}>
|
|
25
|
-
<LayerProperty layer={drawing_layer} />
|
|
26
|
-
</Profiler>
|
|
27
|
-
),
|
|
28
|
-
})
|
|
29
|
-
);
|
|
30
|
-
if (obj.perf_metrics[0][2] > 100) {
|
|
31
|
-
core.warning(
|
|
32
|
-
"Layer Property Component in '/components/SubsurfaceViewer/components/settings/' seems to have performance issues. Actual render time:" +
|
|
33
|
-
obj.perf_metrics[0][2] +
|
|
34
|
-
" Expected render time: 200"
|
|
35
|
-
);
|
|
36
|
-
}
|
|
37
|
-
// expect(obj.perf_metrics[0][2]).toBeLessThan(400);
|
|
38
|
-
});
|
|
39
|
-
});
|
|
@@ -1,133 +0,0 @@
|
|
|
1
|
-
import { render, screen, waitFor } from "@testing-library/react";
|
|
2
|
-
import "jest-styled-components";
|
|
3
|
-
import React from "react";
|
|
4
|
-
import userEvent from "@testing-library/user-event";
|
|
5
|
-
import "@testing-library/jest-dom";
|
|
6
|
-
import { EmptyWrapper } from "../../test/TestWrapper";
|
|
7
|
-
import LayerSettingsButton from "./LayerSettingsButton";
|
|
8
|
-
|
|
9
|
-
const drawingLayer = {
|
|
10
|
-
"@@type": "DrawingLayer",
|
|
11
|
-
name: "Drawing",
|
|
12
|
-
id: "drawing-layer",
|
|
13
|
-
pickable: true,
|
|
14
|
-
visible: true,
|
|
15
|
-
mode: "drawLineString",
|
|
16
|
-
|
|
17
|
-
// Props used to get/set data in the drawing layer.
|
|
18
|
-
selectedFeatureIndexes: [] as number[],
|
|
19
|
-
data: {
|
|
20
|
-
type: "FeatureCollection",
|
|
21
|
-
features: [],
|
|
22
|
-
},
|
|
23
|
-
};
|
|
24
|
-
|
|
25
|
-
const wellsLayer = {
|
|
26
|
-
"@@type": "WellsLayer",
|
|
27
|
-
name: "Wells",
|
|
28
|
-
id: "wells-layer",
|
|
29
|
-
autoHighlight: true,
|
|
30
|
-
opacity: 1,
|
|
31
|
-
lineWidthScale: 1,
|
|
32
|
-
pointRadiusScale: 1,
|
|
33
|
-
lineStyle: { dash: false },
|
|
34
|
-
outline: true,
|
|
35
|
-
logRadius: 10,
|
|
36
|
-
logCurves: true,
|
|
37
|
-
refine: true,
|
|
38
|
-
visible: true,
|
|
39
|
-
wellNameVisible: false,
|
|
40
|
-
wellNameAtTop: false,
|
|
41
|
-
wellNameSize: 14,
|
|
42
|
-
wellNameColor: [0, 0, 0, 255],
|
|
43
|
-
selectedWell: "@@#editedData.selectedWells", // used to get data from deckgl layer
|
|
44
|
-
depthTest: true,
|
|
45
|
-
};
|
|
46
|
-
|
|
47
|
-
const layers = [drawingLayer, wellsLayer];
|
|
48
|
-
|
|
49
|
-
describe("test layers settings button", () => {
|
|
50
|
-
it("snapshot test", () => {
|
|
51
|
-
const { container } = drawingLayer
|
|
52
|
-
? render(
|
|
53
|
-
EmptyWrapper({
|
|
54
|
-
children: <LayerSettingsButton layer={drawingLayer} />,
|
|
55
|
-
})
|
|
56
|
-
)
|
|
57
|
-
: render(<div />);
|
|
58
|
-
expect(container.firstChild).toMatchSnapshot();
|
|
59
|
-
});
|
|
60
|
-
|
|
61
|
-
it("should close menu when clicked on backdrop", async () => {
|
|
62
|
-
drawingLayer &&
|
|
63
|
-
render(
|
|
64
|
-
EmptyWrapper({
|
|
65
|
-
children: <LayerSettingsButton layer={drawingLayer} />,
|
|
66
|
-
})
|
|
67
|
-
);
|
|
68
|
-
userEvent.click(screen.getByRole("button"));
|
|
69
|
-
const layer_settings_menu = screen.getByRole("menu");
|
|
70
|
-
expect(layer_settings_menu).toBeInTheDocument();
|
|
71
|
-
userEvent.click(document.body);
|
|
72
|
-
await waitFor(() => expect(layer_settings_menu).not.toBeVisible());
|
|
73
|
-
});
|
|
74
|
-
|
|
75
|
-
it("should close menu when clicked twice on layers button", async () => {
|
|
76
|
-
drawingLayer &&
|
|
77
|
-
render(
|
|
78
|
-
EmptyWrapper({
|
|
79
|
-
children: <LayerSettingsButton layer={drawingLayer} />,
|
|
80
|
-
})
|
|
81
|
-
);
|
|
82
|
-
userEvent.click(screen.getByRole("button"));
|
|
83
|
-
const layer_settings_menu = screen.getByRole("menu");
|
|
84
|
-
expect(layer_settings_menu).toBeInTheDocument();
|
|
85
|
-
userEvent.click(screen.getByRole("button"));
|
|
86
|
-
await waitFor(() => expect(layer_settings_menu).not.toBeVisible());
|
|
87
|
-
});
|
|
88
|
-
|
|
89
|
-
it("tests toggle button", async () => {
|
|
90
|
-
const wells_layer = layers.find(
|
|
91
|
-
(item) => item["@@type"] === "WellsLayer"
|
|
92
|
-
);
|
|
93
|
-
wells_layer &&
|
|
94
|
-
render(
|
|
95
|
-
EmptyWrapper({
|
|
96
|
-
children: <LayerSettingsButton layer={wells_layer} />,
|
|
97
|
-
})
|
|
98
|
-
);
|
|
99
|
-
userEvent.click(screen.getByRole("button"));
|
|
100
|
-
const wells_layer_settings_menu = screen.getByRole("menu");
|
|
101
|
-
expect(wells_layer_settings_menu).toBeInTheDocument();
|
|
102
|
-
});
|
|
103
|
-
|
|
104
|
-
it("tests numeric input", async () => {
|
|
105
|
-
const wells_layer = layers.find(
|
|
106
|
-
(item) => item["@@type"] === "WellsLayer"
|
|
107
|
-
);
|
|
108
|
-
wells_layer &&
|
|
109
|
-
render(
|
|
110
|
-
EmptyWrapper({
|
|
111
|
-
children: <LayerSettingsButton layer={wells_layer} />,
|
|
112
|
-
})
|
|
113
|
-
);
|
|
114
|
-
userEvent.click(screen.getByRole("button"));
|
|
115
|
-
const wells_layer_settings_menu = screen.getByRole("menu");
|
|
116
|
-
expect(wells_layer_settings_menu).toBeInTheDocument();
|
|
117
|
-
});
|
|
118
|
-
|
|
119
|
-
it("tests slider input", async () => {
|
|
120
|
-
const wells_layer = layers.find(
|
|
121
|
-
(item) => item["@@type"] === "WellsLayer"
|
|
122
|
-
);
|
|
123
|
-
wells_layer &&
|
|
124
|
-
render(
|
|
125
|
-
EmptyWrapper({
|
|
126
|
-
children: <LayerSettingsButton layer={wells_layer} />,
|
|
127
|
-
})
|
|
128
|
-
);
|
|
129
|
-
userEvent.click(screen.getByRole("button"));
|
|
130
|
-
const wells_layer_settings_menu = screen.getByRole("menu");
|
|
131
|
-
expect(wells_layer_settings_menu).toBeInTheDocument();
|
|
132
|
-
});
|
|
133
|
-
});
|
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
/* eslint-disable react-hooks/exhaustive-deps */ // remove when ready to fix these.
|
|
2
|
-
|
|
3
|
-
import { Icon, Menu, Tooltip } from "@equinor/eds-core-react";
|
|
4
|
-
import { styled } from "@mui/material/styles";
|
|
5
|
-
import { Fab } from "@mui/material";
|
|
6
|
-
import React, { useCallback, useMemo } from "react";
|
|
7
|
-
import { LayerIcons, LayerType } from "../../redux/types";
|
|
8
|
-
import { getPropVisibility } from "../../utils/specExtractor";
|
|
9
|
-
import LayerProperty from "./LayerProperty";
|
|
10
|
-
import { useDispatch } from "react-redux";
|
|
11
|
-
import { updateLayerProp } from "../../redux/actions";
|
|
12
|
-
|
|
13
|
-
const PREFIX = "LayerSettingsButton";
|
|
14
|
-
|
|
15
|
-
const classes = {
|
|
16
|
-
root: `${PREFIX}-root`,
|
|
17
|
-
menu: `${PREFIX}-menu`,
|
|
18
|
-
};
|
|
19
|
-
|
|
20
|
-
const Root = styled("div")(({ theme }) => ({
|
|
21
|
-
[`& .${classes.root}`]: {
|
|
22
|
-
marginBottom: theme.spacing(1),
|
|
23
|
-
},
|
|
24
|
-
|
|
25
|
-
[`& .${classes.menu}`]: {
|
|
26
|
-
display: "flex",
|
|
27
|
-
flexDirection: "column",
|
|
28
|
-
},
|
|
29
|
-
}));
|
|
30
|
-
|
|
31
|
-
interface Props {
|
|
32
|
-
layer: Record<string, unknown>;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
const LayerSettingsButton: React.FC<Props> = React.memo(({ layer }: Props) => {
|
|
36
|
-
const dispatch = useDispatch();
|
|
37
|
-
|
|
38
|
-
// handlers
|
|
39
|
-
const [anchorEl, setAnchorEl] = React.useState<null | HTMLElement>(null);
|
|
40
|
-
const handleClick = useCallback(
|
|
41
|
-
(event: React.MouseEvent<HTMLButtonElement>) => {
|
|
42
|
-
// hack to disable click propagation on drawing layer
|
|
43
|
-
dispatch(updateLayerProp(["drawing-layer", "mode", "view"]));
|
|
44
|
-
|
|
45
|
-
setAnchorEl(anchorEl ? null : event.currentTarget);
|
|
46
|
-
},
|
|
47
|
-
[anchorEl]
|
|
48
|
-
);
|
|
49
|
-
|
|
50
|
-
const handleClose = useCallback(() => {
|
|
51
|
-
setAnchorEl(null);
|
|
52
|
-
}, []);
|
|
53
|
-
|
|
54
|
-
const propVisibility = useMemo(() => getPropVisibility(layer), [layer]);
|
|
55
|
-
if (
|
|
56
|
-
!LayerIcons[layer["@@type"] as LayerType] ||
|
|
57
|
-
!layer["visible"] ||
|
|
58
|
-
!propVisibility
|
|
59
|
-
)
|
|
60
|
-
return null;
|
|
61
|
-
|
|
62
|
-
return (
|
|
63
|
-
<Root>
|
|
64
|
-
<Fab
|
|
65
|
-
id={`${layer["id"]}-button`}
|
|
66
|
-
size="medium"
|
|
67
|
-
onClick={handleClick}
|
|
68
|
-
className={classes.root}
|
|
69
|
-
>
|
|
70
|
-
<Tooltip title={layer["name"] as string}>
|
|
71
|
-
<Icon
|
|
72
|
-
color="currentColor"
|
|
73
|
-
name={LayerIcons[layer["@@type"] as LayerType]}
|
|
74
|
-
/>
|
|
75
|
-
</Tooltip>
|
|
76
|
-
</Fab>
|
|
77
|
-
<Menu
|
|
78
|
-
className={classes.menu}
|
|
79
|
-
anchorEl={anchorEl}
|
|
80
|
-
aria-labelledby={`${layer["id"]}-button`}
|
|
81
|
-
onClose={handleClose}
|
|
82
|
-
placement="left"
|
|
83
|
-
open={Boolean(anchorEl)}
|
|
84
|
-
>
|
|
85
|
-
<LayerProperty
|
|
86
|
-
layer={layer}
|
|
87
|
-
key={`layer-property-${layer["id"]}`}
|
|
88
|
-
/>
|
|
89
|
-
</Menu>
|
|
90
|
-
</Root>
|
|
91
|
-
);
|
|
92
|
-
});
|
|
93
|
-
|
|
94
|
-
LayerSettingsButton.displayName = "LayerSettingsButton";
|
|
95
|
-
export default LayerSettingsButton;
|