@webviz/well-log-viewer 0.0.1-alpha.1 → 0.0.1-alpha.3
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/SyncLogViewer.js +3 -4
- package/dist/SyncLogViewer.js.map +1 -1
- package/dist/components/WellLogView.js +5 -5
- package/dist/components/WellLogView.js.map +1 -1
- package/dist/demo/example-data/welllog_template_2.json +167 -167
- package/dist/demo/example-data/wellpick_colors.json +1 -1
- package/dist/demo/example-data/wellpicks.json +179 -179
- package/package.json +32 -5
- package/dist/Intro.stories.mdx +0 -59
- package/dist/package.json +0 -21
- package/src/Intro.stories.mdx +0 -59
- package/src/MapAndWellLogViewer.stories.jsx +0 -147
- package/src/MapAndWellLogViewer.test.tsx +0 -26
- package/src/MapAndWellLogViewer.tsx +0 -473
- package/src/SyncLogViewer.stories.jsx +0 -361
- package/src/SyncLogViewer.test.tsx +0 -41
- package/src/SyncLogViewer.tsx +0 -1188
- package/src/WellLogViewer.png +0 -0
- package/src/WellLogViewer.stories.jsx +0 -169
- package/src/WellLogViewer.test.tsx +0 -53
- package/src/WellLogViewer.tsx +0 -439
- package/src/WellLogViewer_performance.test.tsx +0 -78
- package/src/__snapshots__/MapAndWellLogViewer.test.tsx.snap +0 -365
- package/src/__snapshots__/SyncLogViewer.test.tsx.snap +0 -510
- package/src/__snapshots__/WellLogViewer.test.tsx.snap +0 -552
- package/src/components/AxisSelector.test.tsx +0 -50
- package/src/components/AxisSelector.tsx +0 -49
- package/src/components/ColorTableTypes.ts +0 -9
- package/src/components/InfoPanel.test.tsx +0 -58
- package/src/components/InfoPanel.tsx +0 -144
- package/src/components/InfoTypes.ts +0 -17
- package/src/components/LocalMenus.tsx +0 -336
- package/src/components/PlotDialog.tsx +0 -419
- package/src/components/Scroller.stories.jsx +0 -80
- package/src/components/Scroller.test.tsx +0 -22
- package/src/components/Scroller.tsx +0 -173
- package/src/components/TrackDialog.tsx +0 -217
- package/src/components/WellLogSpacer.tsx +0 -483
- package/src/components/WellLogTemplateTypes.ts +0 -65
- package/src/components/WellLogTypes.ts +0 -53
- package/src/components/WellLogView.stories.jsx +0 -84
- package/src/components/WellLogView.test.tsx +0 -52
- package/src/components/WellLogView.tsx +0 -2063
- package/src/components/WellLogViewWithScroller.stories.jsx +0 -69
- package/src/components/WellLogViewWithScroller.test.tsx +0 -47
- package/src/components/WellLogViewWithScroller.tsx +0 -179
- package/src/components/ZoomSlider.stories.jsx +0 -52
- package/src/components/ZoomSlider.test.tsx +0 -28
- package/src/components/ZoomSlider.tsx +0 -86
- package/src/components/__snapshots__/AxisSelector.test.tsx.snap +0 -28
- package/src/components/__snapshots__/InfoPanel.test.tsx.snap +0 -103
- package/src/components/__snapshots__/Scroller.test.tsx.snap +0 -13
- package/src/components/__snapshots__/WellLogView.test.tsx.snap +0 -54
- package/src/components/__snapshots__/WellLogViewWithScroller.test.tsx.snap +0 -270
- package/src/components/__snapshots__/ZoomSlider.test.tsx.snap +0 -50
- package/src/components/styles.scss +0 -106
- package/src/custom.d.ts +0 -13
- package/src/demo/example-data/volve_logs.json +0 -689617
- package/src/demo/example-data/welllog_template_2.json +0 -196
- package/src/demo/example-data/wellpick_colors.json +0 -156
- package/src/demo/example-data/wellpicks.json +0 -186
- package/src/index.ts +0 -8
- package/src/utils/axes.ts +0 -26
- package/src/utils/color-table.ts +0 -153
- package/src/utils/deepcopy.ts +0 -3
- package/src/utils/edit-track.tsx +0 -40
- package/src/utils/fill-info.ts +0 -224
- package/src/utils/gradientfill-plot-legend.ts +0 -177
- package/src/utils/gradientfill-plot.ts +0 -203
- package/src/utils/graph/factory.ts +0 -15
- package/src/utils/legend/common.ts +0 -153
- package/src/utils/log-viewer.ts +0 -209
- package/src/utils/minmax.ts +0 -126
- package/src/utils/pattern.tsx +0 -50
- package/src/utils/stack/stack-legend.ts +0 -100
- package/src/utils/tracks.ts +0 -1559
- package/tsconfig.json +0 -8
package/src/WellLogViewer.png
DELETED
|
Binary file
|
|
@@ -1,169 +0,0 @@
|
|
|
1
|
-
/* eslint-disable react-hooks/exhaustive-deps */ // remove when ready to fix these.
|
|
2
|
-
|
|
3
|
-
import React from "react";
|
|
4
|
-
import WellLogViewer from "./WellLogViewer";
|
|
5
|
-
import { argTypesWellLogViewerProp } from "./WellLogViewer";
|
|
6
|
-
import { colorTables } from "@emerson-eps/color-tables";
|
|
7
|
-
|
|
8
|
-
const ComponentCode =
|
|
9
|
-
'<WellLogViewer id="WellLogViewer" \r\n' +
|
|
10
|
-
" horizontal=false \r\n" +
|
|
11
|
-
' welllog={require("../../../../example-data/L898MUD.json")[0]} \r\n' +
|
|
12
|
-
' template={require("../../../../example-data/welllog_template_1.json")} \r\n' +
|
|
13
|
-
" colorTables={colorTables} \r\n" +
|
|
14
|
-
"/>";
|
|
15
|
-
|
|
16
|
-
import { axisTitles, axisMnemos } from "./utils/axes";
|
|
17
|
-
|
|
18
|
-
export default {
|
|
19
|
-
component: WellLogViewer,
|
|
20
|
-
title: "WellLogViewer/Demo/WellLogViewer",
|
|
21
|
-
parameters: {
|
|
22
|
-
docs: {
|
|
23
|
-
description: {
|
|
24
|
-
component:
|
|
25
|
-
"A demo component to deal with WellLogView component.",
|
|
26
|
-
},
|
|
27
|
-
},
|
|
28
|
-
componentSource: {
|
|
29
|
-
code: ComponentCode,
|
|
30
|
-
language: "javascript",
|
|
31
|
-
},
|
|
32
|
-
},
|
|
33
|
-
argTypes: {
|
|
34
|
-
...argTypesWellLogViewerProp,
|
|
35
|
-
id: {
|
|
36
|
-
description:
|
|
37
|
-
"The ID of this component, used to identify dash components in callbacks. The ID needs to be unique across all of the components in an app.",
|
|
38
|
-
},
|
|
39
|
-
},
|
|
40
|
-
};
|
|
41
|
-
|
|
42
|
-
function fillInfo(controller) {
|
|
43
|
-
if (!controller) return "-";
|
|
44
|
-
const baseDomain = controller.getContentBaseDomain();
|
|
45
|
-
const domain = controller.getContentDomain();
|
|
46
|
-
const selection = controller.getContentSelection();
|
|
47
|
-
return (
|
|
48
|
-
"total: [" +
|
|
49
|
-
baseDomain[0].toFixed(0) +
|
|
50
|
-
", " +
|
|
51
|
-
baseDomain[1].toFixed(0) +
|
|
52
|
-
"], " +
|
|
53
|
-
"visible: [" +
|
|
54
|
-
domain[0].toFixed(0) +
|
|
55
|
-
", " +
|
|
56
|
-
domain[1].toFixed(0) +
|
|
57
|
-
"]" +
|
|
58
|
-
(selection[0] !== undefined
|
|
59
|
-
? ", selected: [" +
|
|
60
|
-
selection[0].toFixed(0) +
|
|
61
|
-
(selection[1] !== undefined
|
|
62
|
-
? ", " + selection[1].toFixed(0)
|
|
63
|
-
: "") +
|
|
64
|
-
"]"
|
|
65
|
-
: "")
|
|
66
|
-
);
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
const Template = (args) => {
|
|
70
|
-
const infoRef = React.useRef();
|
|
71
|
-
const setInfo = function (info) {
|
|
72
|
-
if (infoRef.current) infoRef.current.innerHTML = info;
|
|
73
|
-
};
|
|
74
|
-
const [controller, setController] = React.useState(null);
|
|
75
|
-
const onCreateController = React.useCallback(
|
|
76
|
-
(controller) => {
|
|
77
|
-
setController(controller);
|
|
78
|
-
},
|
|
79
|
-
[controller]
|
|
80
|
-
);
|
|
81
|
-
const onContentRescale = React.useCallback(() => {
|
|
82
|
-
setInfo(fillInfo(controller));
|
|
83
|
-
}, [controller]);
|
|
84
|
-
const onContentSelection = React.useCallback(() => {
|
|
85
|
-
setInfo(fillInfo(controller));
|
|
86
|
-
}, [controller]);
|
|
87
|
-
|
|
88
|
-
return (
|
|
89
|
-
<div
|
|
90
|
-
style={{ height: "92vh", display: "flex", flexDirection: "column" }}
|
|
91
|
-
>
|
|
92
|
-
<div style={{ width: "100%", height: "100%", flex: 1 }}>
|
|
93
|
-
<WellLogViewer
|
|
94
|
-
id="WellLogViewer"
|
|
95
|
-
{...args}
|
|
96
|
-
onCreateController={onCreateController}
|
|
97
|
-
onContentRescale={onContentRescale}
|
|
98
|
-
onContentSelection={onContentSelection}
|
|
99
|
-
/>
|
|
100
|
-
</div>
|
|
101
|
-
<div ref={infoRef} style={{ width: "100%", flex: 0 }}></div>
|
|
102
|
-
</div>
|
|
103
|
-
);
|
|
104
|
-
};
|
|
105
|
-
|
|
106
|
-
const wellpick = {
|
|
107
|
-
wellpick: require("../../../../example-data/wellpicks.json")[0],
|
|
108
|
-
name: "HORIZON",
|
|
109
|
-
colorTables: colorTables,
|
|
110
|
-
color: "Stratigraphy",
|
|
111
|
-
};
|
|
112
|
-
|
|
113
|
-
export const Default = Template.bind({});
|
|
114
|
-
Default.args = {
|
|
115
|
-
id: "Well-Log-Viewer",
|
|
116
|
-
horizontal: false,
|
|
117
|
-
welllog: require("../../../../example-data/L898MUD.json")[0],
|
|
118
|
-
template: require("../../../../example-data/welllog_template_1.json"),
|
|
119
|
-
colorTables: colorTables,
|
|
120
|
-
wellpick: wellpick,
|
|
121
|
-
axisTitles: axisTitles,
|
|
122
|
-
axisMnemos: axisMnemos,
|
|
123
|
-
viewTitle: true, // show default welllog view title (a wellname from the welllog)
|
|
124
|
-
options: {
|
|
125
|
-
hideTrackTitle: false,
|
|
126
|
-
hideTrackLegend: false,
|
|
127
|
-
},
|
|
128
|
-
};
|
|
129
|
-
|
|
130
|
-
export const Horizontal = Template.bind({});
|
|
131
|
-
Horizontal.args = {
|
|
132
|
-
id: "Well-Log-Viewer-Horizontal",
|
|
133
|
-
horizontal: true,
|
|
134
|
-
welllog:
|
|
135
|
-
require("../../../../example-data/WL_RAW_AAC-BHPR-CAL-DEN-GR-MECH-NEU-NMR-REMP_MWD_3.json")[0],
|
|
136
|
-
template: require("../../../../example-data/welllog_template_2.json"),
|
|
137
|
-
colorTables: colorTables,
|
|
138
|
-
wellpick: wellpick,
|
|
139
|
-
axisTitles: axisTitles,
|
|
140
|
-
axisMnemos: axisMnemos,
|
|
141
|
-
viewTitle: true, // show default welllog view title (a wellname from the welllog)
|
|
142
|
-
};
|
|
143
|
-
Horizontal.parameters = {
|
|
144
|
-
docs: {
|
|
145
|
-
description: {
|
|
146
|
-
story: "An example showing horizontal orientation of the tracks.",
|
|
147
|
-
},
|
|
148
|
-
},
|
|
149
|
-
};
|
|
150
|
-
|
|
151
|
-
export const Discrete = Template.bind({});
|
|
152
|
-
Discrete.args = {
|
|
153
|
-
id: "Well-Log-Viewer-Discrete",
|
|
154
|
-
horizontal: false,
|
|
155
|
-
welllog: require("../../../../example-data/volve_logs.json")[0],
|
|
156
|
-
template: require("../../../../example-data/welllog_template_2.json"),
|
|
157
|
-
colorTables: colorTables,
|
|
158
|
-
wellpick: wellpick,
|
|
159
|
-
axisTitles: axisTitles,
|
|
160
|
-
axisMnemos: axisMnemos,
|
|
161
|
-
viewTitle: true, // show default welllog view title (a wellname from the welllog)
|
|
162
|
-
};
|
|
163
|
-
Discrete.parameters = {
|
|
164
|
-
docs: {
|
|
165
|
-
description: {
|
|
166
|
-
story: "An example showing the tracks with discrete logs.",
|
|
167
|
-
},
|
|
168
|
-
},
|
|
169
|
-
};
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
/* eslint-disable @typescript-eslint/no-var-requires */
|
|
2
|
-
import "@testing-library/jest-dom/extend-expect";
|
|
3
|
-
import { render } from "@testing-library/react";
|
|
4
|
-
import "jest-styled-components";
|
|
5
|
-
import React from "react";
|
|
6
|
-
import WellLogViewer from "./WellLogViewer";
|
|
7
|
-
import { WellLogController } from "./components/WellLogView";
|
|
8
|
-
import { axisTitles, axisMnemos } from "./utils/axes";
|
|
9
|
-
import { colorTables } from "@emerson-eps/color-tables";
|
|
10
|
-
|
|
11
|
-
const exampleTemplate = require("../../../../example-data/welllog_template_1.json");
|
|
12
|
-
const exampleWellLog = require("../../../../example-data/L898MUD.json")[0];
|
|
13
|
-
const exampleColorTable = colorTables;
|
|
14
|
-
|
|
15
|
-
window.ResizeObserver =
|
|
16
|
-
window.ResizeObserver ||
|
|
17
|
-
jest.fn().mockImplementation(() => ({
|
|
18
|
-
disconnect: jest.fn(),
|
|
19
|
-
observe: jest.fn(),
|
|
20
|
-
unobserve: jest.fn(),
|
|
21
|
-
}));
|
|
22
|
-
|
|
23
|
-
describe("Test Well Log Viewer Component", () => {
|
|
24
|
-
it("snapshot test", () => {
|
|
25
|
-
const { container } = render(
|
|
26
|
-
<WellLogViewer
|
|
27
|
-
id="Well-Log-Viewer"
|
|
28
|
-
options={{
|
|
29
|
-
hideTrackTitle: true,
|
|
30
|
-
hideTrackLegend: true,
|
|
31
|
-
}}
|
|
32
|
-
welllog={exampleWellLog}
|
|
33
|
-
template={exampleTemplate}
|
|
34
|
-
colorTables={exampleColorTable}
|
|
35
|
-
horizontal={true}
|
|
36
|
-
primaryAxis={"md"}
|
|
37
|
-
axisTitles={axisTitles}
|
|
38
|
-
axisMnemos={axisMnemos}
|
|
39
|
-
readoutOptions={{
|
|
40
|
-
allTracks: false,
|
|
41
|
-
grouping: "by_track",
|
|
42
|
-
}}
|
|
43
|
-
onCreateController={(controller: WellLogController) =>
|
|
44
|
-
controller
|
|
45
|
-
}
|
|
46
|
-
onContentRescale={function (): void {
|
|
47
|
-
throw new Error("Function not implemented.");
|
|
48
|
-
}}
|
|
49
|
-
/>
|
|
50
|
-
);
|
|
51
|
-
expect(container.firstChild).toMatchSnapshot();
|
|
52
|
-
});
|
|
53
|
-
});
|
package/src/WellLogViewer.tsx
DELETED
|
@@ -1,439 +0,0 @@
|
|
|
1
|
-
import React, { Component } from "react";
|
|
2
|
-
|
|
3
|
-
import PropTypes from "prop-types";
|
|
4
|
-
|
|
5
|
-
import WellLogViewWithScroller from "./components/WellLogViewWithScroller";
|
|
6
|
-
import { WellLogViewWithScrollerProps } from "./components/WellLogViewWithScroller";
|
|
7
|
-
import { argTypesWellLogViewScrollerProp } from "./components/WellLogViewWithScroller";
|
|
8
|
-
//import { _propTypesWellLogView } from "./components/WellLogView";
|
|
9
|
-
|
|
10
|
-
import { shouldUpdateWellLogView } from "./components/WellLogView";
|
|
11
|
-
|
|
12
|
-
import InfoPanel from "./components/InfoPanel";
|
|
13
|
-
import AxisSelector from "./components/AxisSelector";
|
|
14
|
-
|
|
15
|
-
import ZoomSlider from "./components/ZoomSlider";
|
|
16
|
-
|
|
17
|
-
import { WellLogController } from "./components/WellLogView";
|
|
18
|
-
|
|
19
|
-
import { getAvailableAxes } from "./utils/tracks";
|
|
20
|
-
|
|
21
|
-
import { onTrackMouseEvent } from "./utils/edit-track";
|
|
22
|
-
import { fillInfos } from "./utils/fill-info";
|
|
23
|
-
import { LogViewer } from "@equinor/videx-wellog";
|
|
24
|
-
|
|
25
|
-
import { Info, InfoOptions } from "./components/InfoTypes";
|
|
26
|
-
|
|
27
|
-
export interface WellLogViewerProps extends WellLogViewWithScrollerProps {
|
|
28
|
-
readoutOptions?: InfoOptions; // options for readout
|
|
29
|
-
|
|
30
|
-
// callbacks
|
|
31
|
-
onContentRescale?: () => void;
|
|
32
|
-
onContentSelection?: () => void;
|
|
33
|
-
onTemplateChanged?: () => void;
|
|
34
|
-
|
|
35
|
-
onCreateController?: (controller: WellLogController) => void;
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
export const argTypesWellLogViewerProp = {
|
|
39
|
-
...argTypesWellLogViewScrollerProp,
|
|
40
|
-
readoutOptions: {
|
|
41
|
-
description:
|
|
42
|
-
"Options for readout panel.<br/>" +
|
|
43
|
-
"allTracks: boolean — Show not only visible tracks,<br/>" +
|
|
44
|
-
"grouping: string — How group values.",
|
|
45
|
-
/*
|
|
46
|
-
defaultValue: {
|
|
47
|
-
allTracks: false,
|
|
48
|
-
grouping: "by_track",
|
|
49
|
-
}
|
|
50
|
-
*/
|
|
51
|
-
},
|
|
52
|
-
// callbacks...
|
|
53
|
-
};
|
|
54
|
-
|
|
55
|
-
interface State {
|
|
56
|
-
axes: string[]; // axes available in welllog
|
|
57
|
-
primaryAxis: string;
|
|
58
|
-
infos: Info[];
|
|
59
|
-
|
|
60
|
-
sliderValue: number; // value for zoom slider
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
class WellLogViewer extends Component<WellLogViewerProps, State> {
|
|
64
|
-
public static propTypes: Record<string, unknown>;
|
|
65
|
-
|
|
66
|
-
controller: WellLogController | null;
|
|
67
|
-
|
|
68
|
-
collapsedTrackIds: (string | number)[];
|
|
69
|
-
|
|
70
|
-
constructor(props: WellLogViewerProps) {
|
|
71
|
-
super(props);
|
|
72
|
-
|
|
73
|
-
const axes = getAvailableAxes(
|
|
74
|
-
this.props.welllog,
|
|
75
|
-
this.props.axisMnemos
|
|
76
|
-
);
|
|
77
|
-
let primaryAxis = axes[0];
|
|
78
|
-
if (this.props.template && this.props.template.scale.primary) {
|
|
79
|
-
if (axes.indexOf(this.props.template.scale.primary) >= 0)
|
|
80
|
-
primaryAxis = this.props.template.scale.primary;
|
|
81
|
-
}
|
|
82
|
-
if (this.props.primaryAxis) primaryAxis = this.props.primaryAxis;
|
|
83
|
-
this.state = {
|
|
84
|
-
primaryAxis: primaryAxis, //"md"
|
|
85
|
-
axes: axes, //["md", "tvd"]
|
|
86
|
-
infos: [],
|
|
87
|
-
|
|
88
|
-
sliderValue: 4.0,
|
|
89
|
-
};
|
|
90
|
-
|
|
91
|
-
this.controller = null;
|
|
92
|
-
|
|
93
|
-
this.collapsedTrackIds = [];
|
|
94
|
-
|
|
95
|
-
this.collapsedTrackIds = [];
|
|
96
|
-
|
|
97
|
-
this.onCreateController = this.onCreateController.bind(this);
|
|
98
|
-
|
|
99
|
-
this.onInfo = this.onInfo.bind(this);
|
|
100
|
-
|
|
101
|
-
this.onChangePrimaryAxis = this.onChangePrimaryAxis.bind(this);
|
|
102
|
-
|
|
103
|
-
this.onContentRescale = this.onContentRescale.bind(this);
|
|
104
|
-
this.onContentSelection = this.onContentSelection.bind(this);
|
|
105
|
-
this.onTemplateChanged = this.onTemplateChanged.bind(this);
|
|
106
|
-
|
|
107
|
-
this.onZoomSliderChange = this.onZoomSliderChange.bind(this);
|
|
108
|
-
|
|
109
|
-
this.onInfoGroupClick = this.onInfoGroupClick.bind(this);
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
componentDidMount(): void {
|
|
113
|
-
this.setSliderValue();
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
shouldComponentUpdate(
|
|
117
|
-
nextProps: WellLogViewerProps,
|
|
118
|
-
nextState: State
|
|
119
|
-
): boolean {
|
|
120
|
-
if (shouldUpdateWellLogView(this.props, nextProps)) return true;
|
|
121
|
-
|
|
122
|
-
return (
|
|
123
|
-
!Object.is(this.props, nextProps) ||
|
|
124
|
-
!Object.is(this.state, nextState)
|
|
125
|
-
);
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
componentDidUpdate(
|
|
129
|
-
prevProps: WellLogViewerProps /*, prevState: State*/
|
|
130
|
-
): void {
|
|
131
|
-
if (
|
|
132
|
-
this.props.welllog !== prevProps.welllog ||
|
|
133
|
-
this.props.template !== prevProps.template ||
|
|
134
|
-
this.props.axisMnemos !== prevProps.axisMnemos ||
|
|
135
|
-
this.props.primaryAxis !== prevProps.primaryAxis /*||
|
|
136
|
-
this.props.colorTables !== prevProps.colorTables*/
|
|
137
|
-
) {
|
|
138
|
-
const axes = getAvailableAxes(
|
|
139
|
-
this.props.welllog,
|
|
140
|
-
this.props.axisMnemos
|
|
141
|
-
);
|
|
142
|
-
let primaryAxis = axes[0];
|
|
143
|
-
if (this.props.template && this.props.template.scale.primary) {
|
|
144
|
-
if (axes.indexOf(this.props.template.scale.primary) >= 0) {
|
|
145
|
-
primaryAxis = this.props.template.scale.primary;
|
|
146
|
-
} else if (this.props.welllog === prevProps.welllog) return; // nothing to update
|
|
147
|
-
}
|
|
148
|
-
if (this.props.primaryAxis) primaryAxis = this.props.primaryAxis;
|
|
149
|
-
this.setState({
|
|
150
|
-
primaryAxis: primaryAxis,
|
|
151
|
-
axes: axes,
|
|
152
|
-
// will be changed by callback! infos: [],
|
|
153
|
-
});
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
if (
|
|
157
|
-
this.props.readoutOptions &&
|
|
158
|
-
(!prevProps.readoutOptions ||
|
|
159
|
-
this.props.readoutOptions.allTracks !==
|
|
160
|
-
prevProps.readoutOptions.allTracks ||
|
|
161
|
-
this.props.readoutOptions.grouping !==
|
|
162
|
-
prevProps.readoutOptions.grouping)
|
|
163
|
-
) {
|
|
164
|
-
this.updateReadoutPanel();
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
updateReadoutPanel(): void {
|
|
169
|
-
const controller = this.controller;
|
|
170
|
-
if (controller)
|
|
171
|
-
controller.selectContent(controller.getContentSelection()); // force to update readout panel
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
// callback function from WellLogView
|
|
175
|
-
onInfo(
|
|
176
|
-
x: number,
|
|
177
|
-
logController: LogViewer,
|
|
178
|
-
iFrom: number,
|
|
179
|
-
iTo: number
|
|
180
|
-
): void {
|
|
181
|
-
const infos = fillInfos(
|
|
182
|
-
x,
|
|
183
|
-
logController,
|
|
184
|
-
iFrom,
|
|
185
|
-
iTo,
|
|
186
|
-
this.collapsedTrackIds,
|
|
187
|
-
this.props.readoutOptions
|
|
188
|
-
);
|
|
189
|
-
|
|
190
|
-
this.setState({
|
|
191
|
-
infos: infos,
|
|
192
|
-
});
|
|
193
|
-
}
|
|
194
|
-
// callback function from WellLogView
|
|
195
|
-
onCreateController(controller: WellLogController): void {
|
|
196
|
-
this.controller = controller;
|
|
197
|
-
if (this.props.onCreateController)
|
|
198
|
-
// set callback to component's caller
|
|
199
|
-
this.props.onCreateController(controller);
|
|
200
|
-
}
|
|
201
|
-
// callback function from WellLogView
|
|
202
|
-
onContentRescale(): void {
|
|
203
|
-
this.setSliderValue();
|
|
204
|
-
if (this.props.onContentRescale) this.props.onContentRescale();
|
|
205
|
-
}
|
|
206
|
-
// callback function from WellLogView
|
|
207
|
-
onContentSelection(): void {
|
|
208
|
-
this.setSliderValue();
|
|
209
|
-
if (this.props.onContentSelection) this.props.onContentSelection();
|
|
210
|
-
}
|
|
211
|
-
onTemplateChanged(): void {
|
|
212
|
-
if (this.props.onTemplateChanged) {
|
|
213
|
-
if (this.props.onTemplateChanged) this.props.onTemplateChanged();
|
|
214
|
-
}
|
|
215
|
-
}
|
|
216
|
-
|
|
217
|
-
// callback function from Axis selector
|
|
218
|
-
onChangePrimaryAxis(value: string): void {
|
|
219
|
-
this.setState({ primaryAxis: value });
|
|
220
|
-
}
|
|
221
|
-
// callback function from Zoom slider
|
|
222
|
-
onZoomSliderChange(value: number): void {
|
|
223
|
-
const controller = this.controller;
|
|
224
|
-
if (controller) {
|
|
225
|
-
controller.zoomContent(value);
|
|
226
|
-
}
|
|
227
|
-
}
|
|
228
|
-
|
|
229
|
-
// set zoom value to slider
|
|
230
|
-
setSliderValue(): void {
|
|
231
|
-
this.setState((state: Readonly<State>) => {
|
|
232
|
-
if (!this.controller) return null;
|
|
233
|
-
const zoom = this.controller.getContentZoom();
|
|
234
|
-
if (Math.abs(Math.log(state.sliderValue / zoom)) < 0.01)
|
|
235
|
-
return null;
|
|
236
|
-
return { sliderValue: zoom };
|
|
237
|
-
});
|
|
238
|
-
}
|
|
239
|
-
|
|
240
|
-
onInfoGroupClick(trackId: string | number): void {
|
|
241
|
-
const i = this.collapsedTrackIds.indexOf(trackId);
|
|
242
|
-
if (i < 0) this.collapsedTrackIds.push(trackId);
|
|
243
|
-
else delete this.collapsedTrackIds[i];
|
|
244
|
-
|
|
245
|
-
this.updateReadoutPanel();
|
|
246
|
-
|
|
247
|
-
if (this.controller)
|
|
248
|
-
this.controller.selectContent(
|
|
249
|
-
this.controller.getContentSelection()
|
|
250
|
-
); // force to update readout panel
|
|
251
|
-
}
|
|
252
|
-
|
|
253
|
-
render(): JSX.Element {
|
|
254
|
-
const maxContentZoom = 256;
|
|
255
|
-
return (
|
|
256
|
-
<div style={{ height: "100%", width: "100%", display: "flex" }}>
|
|
257
|
-
<WellLogViewWithScroller
|
|
258
|
-
welllog={this.props.welllog}
|
|
259
|
-
template={this.props.template}
|
|
260
|
-
colorTables={this.props.colorTables}
|
|
261
|
-
wellpick={this.props.wellpick}
|
|
262
|
-
horizontal={this.props.horizontal}
|
|
263
|
-
maxContentZoom={maxContentZoom}
|
|
264
|
-
primaryAxis={this.state.primaryAxis}
|
|
265
|
-
axisTitles={this.props.axisTitles}
|
|
266
|
-
axisMnemos={this.props.axisMnemos}
|
|
267
|
-
options={this.props.options}
|
|
268
|
-
onInfo={this.onInfo}
|
|
269
|
-
onCreateController={this.onCreateController}
|
|
270
|
-
onTrackMouseEvent={onTrackMouseEvent}
|
|
271
|
-
onContentRescale={this.onContentRescale}
|
|
272
|
-
onContentSelection={this.onContentSelection}
|
|
273
|
-
onTemplateChanged={this.onTemplateChanged}
|
|
274
|
-
/>
|
|
275
|
-
<div
|
|
276
|
-
style={{
|
|
277
|
-
flex: "0, 0",
|
|
278
|
-
display: "flex",
|
|
279
|
-
flexDirection: "column",
|
|
280
|
-
height: "100%",
|
|
281
|
-
width: "255px",
|
|
282
|
-
minWidth: "255px",
|
|
283
|
-
maxWidth: "255px",
|
|
284
|
-
}}
|
|
285
|
-
>
|
|
286
|
-
<AxisSelector
|
|
287
|
-
header="Primary scale"
|
|
288
|
-
axes={this.state.axes}
|
|
289
|
-
axisLabels={this.props.axisTitles}
|
|
290
|
-
value={this.state.primaryAxis}
|
|
291
|
-
onChange={this.onChangePrimaryAxis}
|
|
292
|
-
/>
|
|
293
|
-
<InfoPanel
|
|
294
|
-
header="Readout"
|
|
295
|
-
onGroupClick={this.onInfoGroupClick}
|
|
296
|
-
infos={this.state.infos}
|
|
297
|
-
/>
|
|
298
|
-
<br />
|
|
299
|
-
<div style={{ paddingLeft: "10px", display: "flex" }}>
|
|
300
|
-
<span>Zoom:</span>
|
|
301
|
-
<span
|
|
302
|
-
style={{
|
|
303
|
-
flex: "1 1 100px",
|
|
304
|
-
padding: "0 20px 0 10px",
|
|
305
|
-
}}
|
|
306
|
-
>
|
|
307
|
-
<ZoomSlider
|
|
308
|
-
value={this.state.sliderValue}
|
|
309
|
-
max={maxContentZoom}
|
|
310
|
-
onChange={this.onZoomSliderChange}
|
|
311
|
-
/>
|
|
312
|
-
</span>
|
|
313
|
-
</div>
|
|
314
|
-
</div>
|
|
315
|
-
</div>
|
|
316
|
-
);
|
|
317
|
-
}
|
|
318
|
-
}
|
|
319
|
-
|
|
320
|
-
///
|
|
321
|
-
const WellLogViewOptions_propTypes = PropTypes.shape({
|
|
322
|
-
/**
|
|
323
|
-
* The maximum zoom value
|
|
324
|
-
*/
|
|
325
|
-
maxContentZoom: PropTypes.number,
|
|
326
|
-
/**
|
|
327
|
-
* The maximum number of visible tracks
|
|
328
|
-
*/
|
|
329
|
-
maxVisibleTrackNum: PropTypes.number,
|
|
330
|
-
/**
|
|
331
|
-
* Validate JSON datafile against schema
|
|
332
|
-
*/
|
|
333
|
-
checkDatafileSchema: PropTypes.bool,
|
|
334
|
-
/**
|
|
335
|
-
* Hide titles of the track. Default is false
|
|
336
|
-
*/
|
|
337
|
-
hideTrackTitle: PropTypes.bool,
|
|
338
|
-
/**
|
|
339
|
-
* Hide legends of the track. Default is false
|
|
340
|
-
*/
|
|
341
|
-
hideTrackLegend: PropTypes.bool,
|
|
342
|
-
});
|
|
343
|
-
|
|
344
|
-
const InfoOptions_propTypes = PropTypes.shape({
|
|
345
|
-
/**
|
|
346
|
-
* Show not only visible tracks
|
|
347
|
-
*/
|
|
348
|
-
allTracks: PropTypes.bool,
|
|
349
|
-
/**
|
|
350
|
-
* how group values. "" | "track"
|
|
351
|
-
*/
|
|
352
|
-
grouping: PropTypes.string,
|
|
353
|
-
});
|
|
354
|
-
|
|
355
|
-
WellLogViewer.propTypes = {
|
|
356
|
-
//do not work with python dash! ..._propTypesWellLogView(), // ...WellLogViewWithScroller.propTypes,
|
|
357
|
-
/**
|
|
358
|
-
* The ID of this component, used to identify dash components
|
|
359
|
-
* in callbacks. The ID needs to be unique across all of the
|
|
360
|
-
* components in an app.
|
|
361
|
-
*/
|
|
362
|
-
id: PropTypes.string.isRequired,
|
|
363
|
-
|
|
364
|
-
/**
|
|
365
|
-
* An object from JSON file describing well log data
|
|
366
|
-
*/
|
|
367
|
-
welllog: PropTypes.object.isRequired,
|
|
368
|
-
|
|
369
|
-
/**
|
|
370
|
-
* Prop containing track template data
|
|
371
|
-
*/
|
|
372
|
-
template: PropTypes.object.isRequired,
|
|
373
|
-
|
|
374
|
-
/**
|
|
375
|
-
* Prop containing color table data
|
|
376
|
-
*/
|
|
377
|
-
colorTables: PropTypes.array.isRequired,
|
|
378
|
-
|
|
379
|
-
/**
|
|
380
|
-
* Orientation of the track plots on the screen. Default is false
|
|
381
|
-
*/
|
|
382
|
-
horizontal: PropTypes.bool,
|
|
383
|
-
|
|
384
|
-
/**
|
|
385
|
-
* Initial visible interval of the log data
|
|
386
|
-
*/
|
|
387
|
-
domain: PropTypes.arrayOf(PropTypes.number),
|
|
388
|
-
|
|
389
|
-
/**
|
|
390
|
-
* Initial selected interval of the log data
|
|
391
|
-
*/
|
|
392
|
-
selection: PropTypes.arrayOf(PropTypes.number),
|
|
393
|
-
|
|
394
|
-
/**
|
|
395
|
-
* Well picks data
|
|
396
|
-
*/
|
|
397
|
-
wellpick: PropTypes.object,
|
|
398
|
-
|
|
399
|
-
/**
|
|
400
|
-
* Primary axis id: " md", "tvd", "time"...
|
|
401
|
-
*/
|
|
402
|
-
primaryAxis: PropTypes.string,
|
|
403
|
-
|
|
404
|
-
/**
|
|
405
|
-
* Log mnemonics for axes
|
|
406
|
-
*/
|
|
407
|
-
axisTitles: PropTypes.object,
|
|
408
|
-
|
|
409
|
-
/**
|
|
410
|
-
* Names for axes
|
|
411
|
-
*/
|
|
412
|
-
axisMnemos: PropTypes.object,
|
|
413
|
-
|
|
414
|
-
/**
|
|
415
|
-
* The maximum zoom value
|
|
416
|
-
*/
|
|
417
|
-
maxContentZoom: PropTypes.number,
|
|
418
|
-
|
|
419
|
-
/**
|
|
420
|
-
* Set to true for default titles or to array of individial welllog titles
|
|
421
|
-
*/
|
|
422
|
-
viewTitle: PropTypes.oneOfType([
|
|
423
|
-
PropTypes.bool,
|
|
424
|
-
PropTypes.string,
|
|
425
|
-
PropTypes.object /* react element */,
|
|
426
|
-
]),
|
|
427
|
-
|
|
428
|
-
/**
|
|
429
|
-
* WellLogView additional options
|
|
430
|
-
*/
|
|
431
|
-
options: WellLogViewOptions_propTypes /*PropTypes.object,*/,
|
|
432
|
-
|
|
433
|
-
/**
|
|
434
|
-
* Options for readout panel
|
|
435
|
-
*/
|
|
436
|
-
readoutOptions: InfoOptions_propTypes /*PropTypes.object,*/,
|
|
437
|
-
};
|
|
438
|
-
|
|
439
|
-
export default WellLogViewer;
|