@webviz/subsurface-viewer 0.0.1-alpha.1 → 0.0.2-alpha.1

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 (171) hide show
  1. package/dist/package.json +5 -2
  2. package/package.json +6 -3
  3. package/src/DashSubsurfaceViewer.tsx +0 -270
  4. package/src/SubsurfaceViewer.stories.tsx +0 -449
  5. package/src/SubsurfaceViewer.test.tsx +0 -98
  6. package/src/SubsurfaceViewer.tsx +0 -356
  7. package/src/__snapshots__/SubsurfaceViewer.test.tsx.snap +0 -178
  8. package/src/assets/glTF/north_arrow/scene.bin +0 -0
  9. package/src/assets/glTF/north_arrow/scene.gltf +0 -315
  10. package/src/assets/glTF/north_arrow/textures/Arrow5_baseColor.png +0 -0
  11. package/src/assets/glTF/north_arrow/textures/Arrow5_metallicRoughness.png +0 -0
  12. package/src/assets/glTF/north_arrow/textures/Arrow5_normal.png +0 -0
  13. package/src/components/ColorLegend.test.tsx +0 -32
  14. package/src/components/ColorLegend.tsx +0 -80
  15. package/src/components/ColorLegends.test.tsx +0 -97
  16. package/src/components/ColorLegends.tsx +0 -46
  17. package/src/components/DistanceScale.stories.tsx +0 -28
  18. package/src/components/DistanceScale.test.tsx +0 -36
  19. package/src/components/DistanceScale.tsx +0 -84
  20. package/src/components/InfoCard.test.tsx +0 -110
  21. package/src/components/InfoCard.tsx +0 -263
  22. package/src/components/Map.test.tsx +0 -142
  23. package/src/components/Map.tsx +0 -1435
  24. package/src/components/StatusIndicator.test.tsx +0 -14
  25. package/src/components/StatusIndicator.tsx +0 -38
  26. package/src/components/ViewAnnotation.tsx +0 -16
  27. package/src/components/ViewFooter.test.tsx +0 -12
  28. package/src/components/ViewFooter.tsx +0 -30
  29. package/src/components/__snapshots__/ColorLegends.test.tsx.snap +0 -15
  30. package/src/components/__snapshots__/DistanceScale.test.tsx.snap +0 -33
  31. package/src/components/__snapshots__/InfoCard.test.tsx.snap +0 -561
  32. package/src/components/__snapshots__/Map.test.tsx.snap +0 -119
  33. package/src/components/__snapshots__/StatusIndicator.test.tsx.snap +0 -3
  34. package/src/components/__snapshots__/ViewFooter.test.tsx.snap +0 -7
  35. package/src/components/settings/DrawModeSelector.test.tsx +0 -45
  36. package/src/components/settings/DrawModeSelector.tsx +0 -58
  37. package/src/components/settings/DrawModeSelector_performance.test.tsx +0 -35
  38. package/src/components/settings/LayerProperty.test.tsx +0 -35
  39. package/src/components/settings/LayerProperty.tsx +0 -153
  40. package/src/components/settings/LayerProperty_performance.test.tsx +0 -39
  41. package/src/components/settings/LayerSettingsButton.test.tsx +0 -133
  42. package/src/components/settings/LayerSettingsButton.tsx +0 -95
  43. package/src/components/settings/LayersButton.test.tsx +0 -102
  44. package/src/components/settings/LayersButton.tsx +0 -97
  45. package/src/components/settings/NumericInput.test.tsx +0 -25
  46. package/src/components/settings/NumericInput.tsx +0 -67
  47. package/src/components/settings/Settings.tsx +0 -71
  48. package/src/components/settings/SliderInput.test.tsx +0 -28
  49. package/src/components/settings/SliderInput.tsx +0 -71
  50. package/src/components/settings/ToggleButton.test.tsx +0 -25
  51. package/src/components/settings/ToggleButton.tsx +0 -53
  52. package/src/components/settings/__snapshots__/DrawModeSelector.test.tsx.snap +0 -124
  53. package/src/components/settings/__snapshots__/LayerProperty.test.tsx.snap +0 -124
  54. package/src/components/settings/__snapshots__/LayerSettingsButton.test.tsx.snap +0 -36
  55. package/src/components/settings/__snapshots__/LayersButton.test.tsx.snap +0 -83
  56. package/src/components/settings/__snapshots__/NumericInput.test.tsx.snap +0 -123
  57. package/src/components/settings/__snapshots__/SliderInput.test.tsx.snap +0 -244
  58. package/src/components/settings/__snapshots__/ToggleButton.test.tsx.snap +0 -182
  59. package/src/custom.d.ts +0 -9
  60. package/src/index.ts +0 -5
  61. package/src/inputSchema/ColorTables.json +0 -51
  62. package/src/inputSchema/FaultPolygons.json +0 -80
  63. package/src/inputSchema/Grid.json +0 -39
  64. package/src/inputSchema/PieChart.json +0 -72
  65. package/src/inputSchema/WellLog.json +0 -126
  66. package/src/inputSchema/WellLogTemplate.json +0 -136
  67. package/src/inputSchema/WellLogs.json +0 -5
  68. package/src/inputSchema/Wells.json +0 -106
  69. package/src/inputSchema/schemaValidationUtil.tsx +0 -55
  70. package/src/inputSchema/validator.tsx +0 -72
  71. package/src/inputSchema/wellCompletions.json +0 -108
  72. package/src/layers/BoxSelectionLayer/boxSelectionLayer.stories.tsx +0 -172
  73. package/src/layers/BoxSelectionLayer/boxSelectionLayer.tsx +0 -136
  74. package/src/layers/axes/axes-fragment.glsl.ts +0 -15
  75. package/src/layers/axes/axesLayer.stories.tsx +0 -87
  76. package/src/layers/axes/axesLayer.ts +0 -692
  77. package/src/layers/axes/boxLayer.ts +0 -71
  78. package/src/layers/axes/grid-vertex.glsl.ts +0 -14
  79. package/src/layers/axes2d/axes2DLayer.stories.tsx +0 -150
  80. package/src/layers/axes2d/axes2DLayer.ts +0 -841
  81. package/src/layers/axes2d/font-atlas.png +0 -0
  82. package/src/layers/axes2d/label-fragment.glsl.js +0 -37
  83. package/src/layers/axes2d/label-vertex.glsl.js +0 -20
  84. package/src/layers/axes2d/line-fragment.glsl.js +0 -14
  85. package/src/layers/axes2d/line-vertex.glsl.js +0 -13
  86. package/src/layers/colormap/colormap.fs.glsl.ts +0 -42
  87. package/src/layers/colormap/colormapLayer.ts +0 -247
  88. package/src/layers/drawing/drawingLayer.tsx +0 -256
  89. package/src/layers/fault_polygons/faultPolygonsLayer.ts +0 -54
  90. package/src/layers/grid3d/fragment.fs.glsl.ts +0 -109
  91. package/src/layers/grid3d/fragment_lines.glsl.ts +0 -21
  92. package/src/layers/grid3d/grid3dLayer.stories.tsx +0 -172
  93. package/src/layers/grid3d/grid3dLayer.ts +0 -248
  94. package/src/layers/grid3d/privateLayer.ts +0 -292
  95. package/src/layers/grid3d/vertex.glsl.ts +0 -43
  96. package/src/layers/grid3d/vertex_lines.glsl.ts +0 -15
  97. package/src/layers/grid3d/webworker.ts +0 -173
  98. package/src/layers/hillshading2d/hillshading2d.fs.glsl.ts +0 -62
  99. package/src/layers/hillshading2d/hillshading2dLayer.ts +0 -172
  100. package/src/layers/index.ts +0 -35
  101. package/src/layers/intersection/intersectionView.stories.tsx +0 -294
  102. package/src/layers/intersection/unfoldedGeoJsonLayer.ts +0 -92
  103. package/src/layers/map/fragment.fs.glsl.ts +0 -127
  104. package/src/layers/map/fragment_lines.glsl.ts +0 -21
  105. package/src/layers/map/mapLayer.stories.tsx +0 -1369
  106. package/src/layers/map/mapLayer.ts +0 -470
  107. package/src/layers/map/privateMapLayer.ts +0 -317
  108. package/src/layers/map/vertex.glsl.ts +0 -45
  109. package/src/layers/map/vertex_lines.glsl.ts +0 -15
  110. package/src/layers/map/webworker.ts +0 -479
  111. package/src/layers/northarrow/northArrow.stories.tsx +0 -108
  112. package/src/layers/northarrow/northArrow3DLayer.ts +0 -204
  113. package/src/layers/northarrow/northarrow-fragment.glsl.js +0 -14
  114. package/src/layers/northarrow/northarrow-vertex.glsl.js +0 -13
  115. package/src/layers/piechart/fragment.glsl.js +0 -42
  116. package/src/layers/piechart/pieChartLayer.ts +0 -246
  117. package/src/layers/piechart/vertex.glsl.js +0 -42
  118. package/src/layers/points/pointsLayer.stories.tsx +0 -141
  119. package/src/layers/points/pointsLayer.ts +0 -143
  120. package/src/layers/polylines/polylinesLayer.stories.tsx +0 -144
  121. package/src/layers/polylines/polylinesLayer.ts +0 -263
  122. package/src/layers/selectable_geojson/selectableGeoJsonLayer.ts +0 -25
  123. package/src/layers/shader_modules/decoder.fs.glsl.ts +0 -41
  124. package/src/layers/shader_modules/decoder.ts +0 -46
  125. package/src/layers/shader_modules/index.ts +0 -1
  126. package/src/layers/terrain/map3DLayer.stories.tsx +0 -340
  127. package/src/layers/terrain/map3DLayer.ts +0 -556
  128. package/src/layers/terrain/terrainMapLayer.ts +0 -334
  129. package/src/layers/terrain/terrainmap.fs.glsl.ts +0 -134
  130. package/src/layers/triangle/fragment.fs.glsl.ts +0 -126
  131. package/src/layers/triangle/fragment_lines.glsl.ts +0 -21
  132. package/src/layers/triangle/privateTriangleLayer.ts +0 -203
  133. package/src/layers/triangle/test_data/surfacePoints.ts +0 -4344
  134. package/src/layers/triangle/test_data/surfaceTriangles.ts +0 -7392
  135. package/src/layers/triangle/triangleLayer.stories.tsx +0 -191
  136. package/src/layers/triangle/triangleLayer.ts +0 -273
  137. package/src/layers/triangle/vertex.glsl.ts +0 -35
  138. package/src/layers/triangle/vertex_lines.glsl.ts +0 -15
  139. package/src/layers/triangle/webworker.ts +0 -165
  140. package/src/layers/utils/glsl.d.ts +0 -4
  141. package/src/layers/utils/layerTools.ts +0 -182
  142. package/src/layers/utils/propertyMapTools.ts +0 -43
  143. package/src/layers/wells/utils/spline.ts +0 -318
  144. package/src/layers/wells/wellsLayer.stories.tsx +0 -625
  145. package/src/layers/wells/wellsLayer.ts +0 -1377
  146. package/src/redux/actions.ts +0 -8
  147. package/src/redux/reducer.ts +0 -43
  148. package/src/redux/store.ts +0 -15
  149. package/src/redux/types.ts +0 -114
  150. package/src/storybook/SubsurfaceViewer.stories.jsx +0 -644
  151. package/src/storybook/components/InfoCard.stories.jsx +0 -39
  152. package/src/storybook/components/colorLegends/ContinuousLegend.stories.jsx +0 -32
  153. package/src/storybook/components/colorLegends/DiscreteLegend.stories.jsx +0 -33
  154. package/src/storybook/components/colorLegends/IndividualScaleForMap.stories.jsx +0 -99
  155. package/src/storybook/components/colorLegends/SingleScaleForMap.stories.jsx +0 -120
  156. package/src/storybook/components/settings/LayerSettingsButton.stories.jsx +0 -34
  157. package/src/storybook/components/settings/NumericInput.stories.jsx +0 -17
  158. package/src/storybook/components/settings/ToggleButton.stories.jsx +0 -16
  159. package/src/storybook/schemaValidation/sampleData.js +0 -177
  160. package/src/storybook/schemaValidation/schemaValidation.stories.jsx +0 -91
  161. package/src/test/TestWrapper.tsx +0 -13
  162. package/src/utils/configuration.ts +0 -61
  163. package/src/utils/fit-bounds.js +0 -85
  164. package/src/utils/measurement.ts +0 -61
  165. package/src/utils/northArrow.ts +0 -4
  166. package/src/utils/specExtractor.ts +0 -36
  167. package/src/viewports/index.js +0 -1
  168. package/src/viewports/intersectionViewport.ts +0 -137
  169. package/src/views/index.js +0 -1
  170. package/src/views/intersectionView.ts +0 -38
  171. 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;