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