@macrostrat/column-views 2.3.3 → 2.4.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.
- package/CHANGELOG.md +14 -0
- package/dist/esm/{column-views.b977da35.js → column-views.083fb787.js} +5 -5
- package/dist/esm/{column-views.b977da35.js.map → column-views.083fb787.js.map} +1 -1
- package/dist/esm/{column-views.4685ea28.js → column-views.088a0274.js} +2 -2
- package/dist/esm/{column-views.4685ea28.js.map → column-views.088a0274.js.map} +1 -1
- package/dist/esm/{column-views.a665cbb2.js → column-views.11353c2c.js} +5 -5
- package/dist/esm/{column-views.a665cbb2.js.map → column-views.11353c2c.js.map} +1 -1
- package/dist/esm/{column-views.f7cdf6be.js → column-views.18655508.js} +3 -3
- package/dist/esm/{column-views.f7cdf6be.js.map → column-views.18655508.js.map} +1 -1
- package/dist/esm/column-views.1cd55918.js +206 -0
- package/dist/esm/column-views.1cd55918.js.map +1 -0
- package/dist/esm/column-views.1ef55568.js +15 -0
- package/dist/esm/{column-views.04636815.js.map → column-views.1ef55568.js.map} +1 -1
- package/dist/esm/{column-views.e075af15.js → column-views.3090f246.js} +22 -4
- package/dist/esm/column-views.3090f246.js.map +1 -0
- package/dist/esm/{column-views.c92a359e.js → column-views.33796541.js} +2 -2
- package/dist/esm/{column-views.c92a359e.js.map → column-views.33796541.js.map} +1 -1
- package/dist/esm/{column-views.488f24b6.js → column-views.3ae8f23d.js} +2 -2
- package/dist/esm/{column-views.488f24b6.js.map → column-views.3ae8f23d.js.map} +1 -1
- package/dist/esm/{column-views.faa7e52e.js → column-views.40d3688c.js} +3 -3
- package/dist/esm/{column-views.faa7e52e.js.map → column-views.40d3688c.js.map} +1 -1
- package/dist/esm/{column-views.b9265595.js → column-views.4e9b8594.js} +11 -10
- package/dist/esm/column-views.4e9b8594.js.map +1 -0
- package/dist/esm/{column-views.8c296309.js → column-views.5e1c216f.js} +27 -6
- package/dist/esm/column-views.5e1c216f.js.map +1 -0
- package/dist/esm/{column-views.e3f0cd7b.js → column-views.5e830e7c.js} +23 -33
- package/dist/esm/column-views.5e830e7c.js.map +1 -0
- package/dist/esm/{column-views.c149f7a5.js → column-views.5ec7294d.js} +3 -3
- package/dist/esm/{column-views.c149f7a5.js.map → column-views.5ec7294d.js.map} +1 -1
- package/dist/esm/column-views.67804ce5.js +68 -0
- package/dist/esm/column-views.67804ce5.js.map +1 -0
- package/dist/esm/{column-views.3f1cdc18.js → column-views.6f0d4f3a.js} +2 -2
- package/dist/esm/{column-views.3f1cdc18.js.map → column-views.6f0d4f3a.js.map} +1 -1
- package/dist/esm/{column-views.58b891df.js → column-views.76fb9948.js} +2 -2
- package/dist/esm/{column-views.58b891df.js.map → column-views.76fb9948.js.map} +1 -1
- package/dist/esm/{column-views.3d3e00be.js → column-views.77322764.js} +2 -2
- package/dist/esm/{column-views.3d3e00be.js.map → column-views.77322764.js.map} +1 -1
- package/dist/esm/{column-views.82a5112b.js → column-views.85d57d04.js} +4 -4
- package/dist/esm/{column-views.82a5112b.js.map → column-views.85d57d04.js.map} +1 -1
- package/dist/esm/{column-views.4e6eead3.js → column-views.88436022.js} +2 -2
- package/dist/esm/{column-views.4e6eead3.js.map → column-views.88436022.js.map} +1 -1
- package/dist/esm/{column-views.2f979aee.js → column-views.88b2418b.js} +3 -3
- package/dist/esm/{column-views.2f979aee.js.map → column-views.88b2418b.js.map} +1 -1
- package/dist/esm/{column-views.d6c0b7bc.js → column-views.8ce33ec6.js} +2 -2
- package/dist/esm/{column-views.d6c0b7bc.js.map → column-views.8ce33ec6.js.map} +1 -1
- package/dist/esm/{column-views.6f96d1c3.js → column-views.91c18fe3.js} +31 -19
- package/dist/esm/column-views.91c18fe3.js.map +1 -0
- package/dist/esm/{column-views.18aac6a5.js → column-views.99cb1c41.js} +3 -3
- package/dist/esm/{column-views.18aac6a5.js.map → column-views.99cb1c41.js.map} +1 -1
- package/dist/esm/{column-views.0a010643.js → column-views.ab2cc6cb.js} +27 -14
- package/dist/esm/column-views.ab2cc6cb.js.map +1 -0
- package/dist/esm/{column-views.d5fff9b8.js → column-views.af4278f0.js} +3 -3
- package/dist/esm/{column-views.d5fff9b8.js.map → column-views.af4278f0.js.map} +1 -1
- package/dist/esm/{column-views.d1b49f5c.js → column-views.b957dc19.js} +3 -3
- package/dist/esm/{column-views.d1b49f5c.js.map → column-views.b957dc19.js.map} +1 -1
- package/dist/esm/{column-views.ad2fe46c.js → column-views.bc83a85d.js} +19 -3
- package/dist/esm/column-views.bc83a85d.js.map +1 -0
- package/dist/esm/column-views.c1e507e6.js +113 -0
- package/dist/esm/column-views.c1e507e6.js.map +1 -0
- package/dist/esm/{column-views.ce3a3ac8.js → column-views.c93b63db.js} +3 -3
- package/dist/esm/column-views.c93b63db.js.map +1 -0
- package/dist/esm/{column-views.26e0e0b6.js → column-views.ce5251f7.js} +2 -2
- package/dist/esm/{column-views.26e0e0b6.js.map → column-views.ce5251f7.js.map} +1 -1
- package/dist/esm/{column-views.8d972657.js → column-views.d4e50f74.js} +3 -3
- package/dist/esm/{column-views.8d972657.js.map → column-views.d4e50f74.js.map} +1 -1
- package/dist/esm/{column-views.75b83110.js → column-views.dd2d5a6d.js} +5 -5
- package/dist/esm/{column-views.75b83110.js.map → column-views.dd2d5a6d.js.map} +1 -1
- package/dist/esm/{column-views.73fc96cb.js → column-views.e6882667.js} +5 -5
- package/dist/esm/{column-views.73fc96cb.js.map → column-views.e6882667.js.map} +1 -1
- package/dist/esm/{column-views.ee9d71ba.js → column-views.e885211d.js} +2 -2
- package/dist/esm/{column-views.ee9d71ba.js.map → column-views.e885211d.js.map} +1 -1
- package/dist/esm/{column-views.029ea8f1.js → column-views.ee2fd38f.js} +3 -3
- package/dist/esm/{column-views.029ea8f1.js.map → column-views.ee2fd38f.js.map} +1 -1
- package/dist/esm/{column-views.9d51a5ab.js → column-views.f35c4621.js} +2 -2
- package/dist/esm/column-views.f35c4621.js.map +1 -0
- package/dist/esm/{column-views.5fff0716.js → column-views.f56e604d.js} +3 -3
- package/dist/esm/{column-views.5fff0716.js.map → column-views.f56e604d.js.map} +1 -1
- package/dist/esm/{column-views.9ffc089b.js → column-views.f904e6d7.js} +3 -3
- package/dist/esm/{column-views.9ffc089b.js.map → column-views.f904e6d7.js.map} +1 -1
- package/dist/esm/{column-views.24060b85.js → column-views.fc4860bd.js} +4 -4
- package/dist/esm/{column-views.24060b85.js.map → column-views.fc4860bd.js.map} +1 -1
- package/dist/esm/{column-views.0da4503a.js → column-views.fedccce9.js} +2 -2
- package/dist/esm/{column-views.0da4503a.js.map → column-views.fedccce9.js.map} +1 -1
- package/dist/esm/index.d.ts +91 -86
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +11 -11
- package/dist/node/{column-views.02869dc5.js → column-views.003e0c17.js} +2 -2
- package/dist/node/{column-views.02869dc5.js.map → column-views.003e0c17.js.map} +1 -1
- package/dist/node/column-views.080781ca.js +2 -0
- package/dist/node/column-views.080781ca.js.map +1 -0
- package/dist/node/{column-views.00ad98fa.js → column-views.0818254f.js} +2 -2
- package/dist/node/{column-views.00ad98fa.js.map → column-views.0818254f.js.map} +1 -1
- package/dist/node/{column-views.2577dec0.js → column-views.0d48f51d.js} +2 -2
- package/dist/node/{column-views.2577dec0.js.map → column-views.0d48f51d.js.map} +1 -1
- package/dist/node/column-views.18e86c2d.js +2 -0
- package/dist/node/column-views.18e86c2d.js.map +1 -0
- package/dist/node/{column-views.8eae7028.js → column-views.375529b1.js} +2 -2
- package/dist/node/{column-views.8eae7028.js.map → column-views.375529b1.js.map} +1 -1
- package/dist/node/{column-views.6b391d60.js → column-views.39b71a38.js} +2 -2
- package/dist/node/{column-views.6b391d60.js.map → column-views.39b71a38.js.map} +1 -1
- package/dist/node/{column-views.47440961.js → column-views.447008d0.js} +2 -2
- package/dist/node/{column-views.47440961.js.map → column-views.447008d0.js.map} +1 -1
- package/dist/node/{column-views.c4188442.js → column-views.4d573ded.js} +2 -2
- package/dist/node/{column-views.c4188442.js.map → column-views.4d573ded.js.map} +1 -1
- package/dist/node/{column-views.8f540f78.js → column-views.4d8fc443.js} +2 -2
- package/dist/node/{column-views.8f540f78.js.map → column-views.4d8fc443.js.map} +1 -1
- package/dist/node/{column-views.3a947d58.js → column-views.54f7a243.js} +2 -2
- package/dist/node/{column-views.3a947d58.js.map → column-views.54f7a243.js.map} +1 -1
- package/dist/node/column-views.58b336f1.js +2 -0
- package/dist/node/column-views.58b336f1.js.map +1 -0
- package/dist/node/{column-views.465e593b.js → column-views.5908556a.js} +2 -2
- package/dist/node/{column-views.465e593b.js.map → column-views.5908556a.js.map} +1 -1
- package/dist/node/column-views.5c02450b.js +2 -0
- package/dist/node/column-views.5c02450b.js.map +1 -0
- package/dist/node/column-views.5e73411d.js +2 -0
- package/dist/node/column-views.5e73411d.js.map +1 -0
- package/dist/node/{column-views.825d2719.js → column-views.5f3f8ccf.js} +2 -2
- package/dist/node/{column-views.825d2719.js.map → column-views.5f3f8ccf.js.map} +1 -1
- package/dist/node/{column-views.0a2596c2.js → column-views.6051e986.js} +2 -2
- package/dist/node/{column-views.0a2596c2.js.map → column-views.6051e986.js.map} +1 -1
- package/dist/node/{column-views.c921fa1a.js → column-views.64fc40d6.js} +2 -2
- package/dist/node/{column-views.c921fa1a.js.map → column-views.64fc40d6.js.map} +1 -1
- package/dist/node/{column-views.6556e004.js → column-views.66663668.js} +2 -2
- package/dist/node/{column-views.6556e004.js.map → column-views.66663668.js.map} +1 -1
- package/dist/node/{column-views.a14f0134.js → column-views.6f0cb059.js} +2 -2
- package/dist/node/{column-views.a14f0134.js.map → column-views.6f0cb059.js.map} +1 -1
- package/dist/node/{column-views.9efa91f1.js → column-views.72c3c6e7.js} +2 -2
- package/dist/node/{column-views.9efa91f1.js.map → column-views.72c3c6e7.js.map} +1 -1
- package/dist/node/column-views.74fcfb9c.js +2 -0
- package/dist/node/column-views.74fcfb9c.js.map +1 -0
- package/dist/node/{column-views.75456275.js → column-views.784bac2a.js} +2 -2
- package/dist/node/{column-views.75456275.js.map → column-views.784bac2a.js.map} +1 -1
- package/dist/node/{column-views.0f401891.js → column-views.796fc1de.js} +2 -2
- package/dist/node/{column-views.0f401891.js.map → column-views.796fc1de.js.map} +1 -1
- package/dist/node/column-views.7b6e7d82.js +2 -0
- package/dist/node/column-views.7b6e7d82.js.map +1 -0
- package/dist/node/{column-views.7c322202.js → column-views.7e895e1a.js} +2 -2
- package/dist/node/{column-views.7c322202.js.map → column-views.7e895e1a.js.map} +1 -1
- package/dist/node/column-views.87d31e0a.js +2 -0
- package/dist/node/column-views.87d31e0a.js.map +1 -0
- package/dist/node/{column-views.59ce629d.js → column-views.94c8ce3e.js} +2 -2
- package/dist/node/{column-views.59ce629d.js.map → column-views.94c8ce3e.js.map} +1 -1
- package/dist/node/{column-views.48a3cfa3.js → column-views.951e3e9a.js} +2 -2
- package/dist/node/{column-views.48a3cfa3.js.map → column-views.951e3e9a.js.map} +1 -1
- package/dist/node/column-views.a0969fc8.js +2 -0
- package/dist/node/column-views.a0969fc8.js.map +1 -0
- package/dist/node/{column-views.67e7a200.js → column-views.b6613ab0.js} +2 -2
- package/dist/node/{column-views.67e7a200.js.map → column-views.b6613ab0.js.map} +1 -1
- package/dist/node/{column-views.d529d3aa.js → column-views.b762c9a8.js} +2 -2
- package/dist/node/{column-views.d529d3aa.js.map → column-views.b762c9a8.js.map} +1 -1
- package/dist/node/{column-views.e153680b.js → column-views.bdf05ed4.js} +2 -2
- package/dist/node/{column-views.e153680b.js.map → column-views.bdf05ed4.js.map} +1 -1
- package/dist/node/{column-views.fafbc028.js → column-views.d30231cb.js} +2 -2
- package/dist/node/{column-views.fafbc028.js.map → column-views.d30231cb.js.map} +1 -1
- package/dist/node/column-views.d86e6c7d.js +2 -0
- package/dist/node/column-views.d86e6c7d.js.map +1 -0
- package/dist/node/column-views.db3377d8.js +2 -0
- package/dist/node/column-views.db3377d8.js.map +1 -0
- package/dist/node/{column-views.2fe8feb9.js → column-views.f4063bc8.js} +2 -2
- package/dist/node/{column-views.2fe8feb9.js.map → column-views.f4063bc8.js.map} +1 -1
- package/dist/node/{column-views.3d0c2bea.js → column-views.f93b4175.js} +2 -2
- package/dist/node/{column-views.3d0c2bea.js.map → column-views.f93b4175.js.map} +1 -1
- package/dist/node/{column-views.cd54f1b1.js → column-views.fa5ee6de.js} +2 -2
- package/dist/node/{column-views.cd54f1b1.js.map → column-views.fa5ee6de.js.map} +1 -1
- package/dist/node/{column-views.08bef1f6.js → column-views.fe7a5452.js} +2 -2
- package/dist/node/{column-views.08bef1f6.js.map → column-views.fe7a5452.js.map} +1 -1
- package/dist/node/column-views.ffbffec7.js +2 -0
- package/dist/node/column-views.ffbffec7.js.map +1 -0
- package/dist/node/index.js +1 -1
- package/dist/node/index.js.map +1 -1
- package/package.json +4 -2
- package/src/age-model-overlay.ts +4 -2
- package/src/column.ts +18 -41
- package/src/correlation-chart/main.ts +24 -13
- package/src/correlation-chart/stories/correlation-chart.stories.ts +38 -17
- package/src/data-provider/base.ts +22 -0
- package/src/data-provider/core.ts +89 -0
- package/src/data-provider/fetch.ts +35 -10
- package/src/data-provider/store.ts +79 -88
- package/src/data-provider/unit-selection.ts +265 -159
- package/src/maps/column-correlation/core.ts +1 -1
- package/src/maps/column-correlation/state.ts +16 -1
- package/src/unit-details/panel.ts +44 -26
- package/src/unit-details/popover.ts +21 -9
- package/dist/esm/column-views.04636815.js +0 -15
- package/dist/esm/column-views.0a010643.js.map +0 -1
- package/dist/esm/column-views.4b259f9e.js +0 -136
- package/dist/esm/column-views.4b259f9e.js.map +0 -1
- package/dist/esm/column-views.6f96d1c3.js.map +0 -1
- package/dist/esm/column-views.8c296309.js.map +0 -1
- package/dist/esm/column-views.9d51a5ab.js.map +0 -1
- package/dist/esm/column-views.ad2fe46c.js.map +0 -1
- package/dist/esm/column-views.b9265595.js.map +0 -1
- package/dist/esm/column-views.c44febd0.js +0 -169
- package/dist/esm/column-views.c44febd0.js.map +0 -1
- package/dist/esm/column-views.ce3a3ac8.js.map +0 -1
- package/dist/esm/column-views.e075af15.js.map +0 -1
- package/dist/esm/column-views.e3f0cd7b.js.map +0 -1
- package/dist/node/column-views.0beae29d.js +0 -2
- package/dist/node/column-views.0beae29d.js.map +0 -1
- package/dist/node/column-views.46efb749.js +0 -2
- package/dist/node/column-views.46efb749.js.map +0 -1
- package/dist/node/column-views.7425d37b.js +0 -2
- package/dist/node/column-views.7425d37b.js.map +0 -1
- package/dist/node/column-views.868c04dc.js +0 -2
- package/dist/node/column-views.868c04dc.js.map +0 -1
- package/dist/node/column-views.8e846c57.js +0 -2
- package/dist/node/column-views.8e846c57.js.map +0 -1
- package/dist/node/column-views.c007152b.js +0 -2
- package/dist/node/column-views.c007152b.js.map +0 -1
- package/dist/node/column-views.d818b387.js +0 -2
- package/dist/node/column-views.d818b387.js.map +0 -1
- package/dist/node/column-views.dfe9a971.js +0 -2
- package/dist/node/column-views.dfe9a971.js.map +0 -1
- package/dist/node/column-views.e264a767.js +0 -2
- package/dist/node/column-views.e264a767.js.map +0 -1
- package/dist/node/column-views.ed2fd268.js +0 -2
- package/dist/node/column-views.ed2fd268.js.map +0 -1
- package/dist/node/column-views.fee4e65d.js +0 -2
- package/dist/node/column-views.fee4e65d.js.map +0 -1
package/src/column.ts
CHANGED
|
@@ -8,8 +8,6 @@ import {
|
|
|
8
8
|
} from "@macrostrat/ui-components";
|
|
9
9
|
import classNames from "classnames";
|
|
10
10
|
import {
|
|
11
|
-
RefObject,
|
|
12
|
-
useRef,
|
|
13
11
|
HTMLAttributes,
|
|
14
12
|
useCallback,
|
|
15
13
|
CSSProperties,
|
|
@@ -18,8 +16,8 @@ import {
|
|
|
18
16
|
import styles from "./column.module.sass";
|
|
19
17
|
import { UnitComponent } from "./units";
|
|
20
18
|
import {
|
|
21
|
-
UnitSelectionProvider,
|
|
22
19
|
UnitKeyboardNavigation,
|
|
20
|
+
useColumnRef,
|
|
23
21
|
useUnitSelectionDispatch,
|
|
24
22
|
} from "./data-provider";
|
|
25
23
|
|
|
@@ -111,14 +109,12 @@ export function Column(props: ColumnProps) {
|
|
|
111
109
|
minPixelScale = 0.2,
|
|
112
110
|
minSectionHeight = 50,
|
|
113
111
|
collapseSmallUnconformities = true,
|
|
114
|
-
allowUnitSelection,
|
|
112
|
+
allowUnitSelection = false,
|
|
115
113
|
hybridScale,
|
|
116
114
|
scale,
|
|
117
115
|
axisType,
|
|
118
116
|
...rest
|
|
119
117
|
} = props;
|
|
120
|
-
const ref = useRef<HTMLElement>();
|
|
121
|
-
// Selected item position
|
|
122
118
|
|
|
123
119
|
/* Make pixelScale and targetUnitHeight mutually exclusive. PixelScale implies
|
|
124
120
|
* standardization of scales in all sections */
|
|
@@ -172,46 +168,26 @@ export function Column(props: ColumnProps) {
|
|
|
172
168
|
);
|
|
173
169
|
}
|
|
174
170
|
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
{
|
|
178
|
-
|
|
171
|
+
return h(
|
|
172
|
+
MacrostratColumnDataProvider,
|
|
173
|
+
{
|
|
174
|
+
units,
|
|
175
|
+
sections,
|
|
176
|
+
totalHeight,
|
|
177
|
+
axisType: _axisType,
|
|
178
|
+
allowUnitSelection: showUnitPopover || allowUnitSelection,
|
|
179
|
+
onUnitSelected,
|
|
180
|
+
selectedUnit,
|
|
181
|
+
},
|
|
182
|
+
h(ColumnInner, { ageAxisComponent, ...rest }, [
|
|
179
183
|
children,
|
|
180
184
|
h.if(showUnitPopover)(UnitSelectionPopover),
|
|
181
185
|
h.if(keyboardNavigation)(UnitKeyboardNavigation, { units }),
|
|
182
|
-
],
|
|
183
|
-
);
|
|
184
|
-
|
|
185
|
-
/* By default, unit selection is disabled. However, if any related props are passed,
|
|
186
|
-
we enable it.
|
|
187
|
-
*/
|
|
188
|
-
let _allowUnitSelection = allowUnitSelection ?? false;
|
|
189
|
-
if (showUnitPopover || selectedUnit != null || onUnitSelected != null) {
|
|
190
|
-
_allowUnitSelection = true;
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
if (_allowUnitSelection) {
|
|
194
|
-
main = h(
|
|
195
|
-
UnitSelectionProvider,
|
|
196
|
-
{
|
|
197
|
-
columnRef: ref,
|
|
198
|
-
onUnitSelected,
|
|
199
|
-
selectedUnit,
|
|
200
|
-
units,
|
|
201
|
-
},
|
|
202
|
-
main,
|
|
203
|
-
);
|
|
204
|
-
}
|
|
205
|
-
|
|
206
|
-
return h(
|
|
207
|
-
MacrostratColumnDataProvider,
|
|
208
|
-
{ units, sections, totalHeight, axisType: _axisType },
|
|
209
|
-
main,
|
|
186
|
+
]),
|
|
210
187
|
);
|
|
211
188
|
}
|
|
212
189
|
|
|
213
190
|
interface ColumnInnerProps extends BaseColumnProps {
|
|
214
|
-
columnRef: RefObject<HTMLElement>;
|
|
215
191
|
ageAxisComponent?: ComponentType;
|
|
216
192
|
}
|
|
217
193
|
|
|
@@ -234,7 +210,6 @@ function ColumnInner(props: ColumnInnerProps) {
|
|
|
234
210
|
columnWidth: _columnWidth = 150,
|
|
235
211
|
showLabelColumn: _showLabelColumn = true,
|
|
236
212
|
className,
|
|
237
|
-
columnRef,
|
|
238
213
|
clipUnits = false,
|
|
239
214
|
children,
|
|
240
215
|
showTimescale,
|
|
@@ -246,6 +221,8 @@ function ColumnInner(props: ColumnInnerProps) {
|
|
|
246
221
|
|
|
247
222
|
const { axisType } = useMacrostratColumnData();
|
|
248
223
|
|
|
224
|
+
const columnRef = useColumnRef();
|
|
225
|
+
|
|
249
226
|
// Coalesce unconformity label setting to a boolean
|
|
250
227
|
let _timescaleUnconformityLabels = false;
|
|
251
228
|
let _sectionUnconformityLabels = false;
|
|
@@ -314,7 +291,7 @@ function useMouseEventHandlers(
|
|
|
314
291
|
const dispatch = useUnitSelectionDispatch();
|
|
315
292
|
const onClick = useCallback(
|
|
316
293
|
(evt) => {
|
|
317
|
-
dispatch?.(null, null
|
|
294
|
+
dispatch?.(null, null);
|
|
318
295
|
},
|
|
319
296
|
[dispatch],
|
|
320
297
|
);
|
|
@@ -2,12 +2,13 @@
|
|
|
2
2
|
import {
|
|
3
3
|
UnitSelectionProvider,
|
|
4
4
|
UnitKeyboardNavigation,
|
|
5
|
-
|
|
5
|
+
useUnitSelectionDispatch,
|
|
6
|
+
useColumnRef,
|
|
6
7
|
} from "../data-provider";
|
|
7
|
-
import { UnitSelectionPopover } from "../unit-details";
|
|
8
|
+
import { UnitDetailsFeature, UnitSelectionPopover } from "../unit-details";
|
|
8
9
|
import hyper from "@macrostrat/hyper";
|
|
9
10
|
import styles from "./main.module.sass";
|
|
10
|
-
import { useMemo
|
|
11
|
+
import { useMemo } from "react";
|
|
11
12
|
import { useInDarkMode } from "@macrostrat/ui-components";
|
|
12
13
|
import { CompositeTimescaleCore } from "../section";
|
|
13
14
|
import classNames from "classnames";
|
|
@@ -49,6 +50,18 @@ export interface CorrelationChartProps extends CorrelationChartSettings {
|
|
|
49
50
|
onUnitSelected?: (unitID: number | null, unit: BaseUnit | null) => void;
|
|
50
51
|
}
|
|
51
52
|
|
|
53
|
+
function MainChartArea({ children }) {
|
|
54
|
+
const columnRef = useColumnRef();
|
|
55
|
+
return h("div.main-chart", { ref: columnRef }, children);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
const unitPopoverFeatures = new Set([
|
|
59
|
+
UnitDetailsFeature.AdjacentUnits,
|
|
60
|
+
UnitDetailsFeature.OutcropType,
|
|
61
|
+
UnitDetailsFeature.DepthRange,
|
|
62
|
+
UnitDetailsFeature.ColumnName,
|
|
63
|
+
]);
|
|
64
|
+
|
|
52
65
|
export function CorrelationChart({
|
|
53
66
|
data,
|
|
54
67
|
columnSpacing = 0,
|
|
@@ -75,8 +88,6 @@ export function CorrelationChart({
|
|
|
75
88
|
});
|
|
76
89
|
}, [data, ...Object.values(scaleProps)]);
|
|
77
90
|
|
|
78
|
-
const columnRef = useRef(null);
|
|
79
|
-
|
|
80
91
|
// A flattened units array is used to support keyboard navigation
|
|
81
92
|
const units = useMemo(() => {
|
|
82
93
|
return data?.map((d0) => d0.units).flat() ?? [];
|
|
@@ -101,14 +112,14 @@ export function CorrelationChart({
|
|
|
101
112
|
{ className: "correlation-diagram" },
|
|
102
113
|
h(
|
|
103
114
|
UnitSelectionProvider,
|
|
104
|
-
{
|
|
115
|
+
{ selectedUnit, onUnitSelected, units },
|
|
105
116
|
h(ChartArea, [
|
|
106
117
|
h(TimescaleColumn, {
|
|
107
118
|
key: "timescale",
|
|
108
119
|
scaleInfo,
|
|
109
120
|
unconformityLabels,
|
|
110
121
|
}),
|
|
111
|
-
h(
|
|
122
|
+
h(MainChartArea, [
|
|
112
123
|
h(
|
|
113
124
|
SVG,
|
|
114
125
|
{
|
|
@@ -133,9 +144,11 @@ export function CorrelationChart({
|
|
|
133
144
|
});
|
|
134
145
|
}),
|
|
135
146
|
),
|
|
136
|
-
h.if(showUnitPopover)(UnitSelectionPopover
|
|
147
|
+
h.if(showUnitPopover)(UnitSelectionPopover, {
|
|
148
|
+
features: unitPopoverFeatures,
|
|
149
|
+
}),
|
|
137
150
|
// Navigation only works within a column for now...
|
|
138
|
-
h(UnitKeyboardNavigation, {
|
|
151
|
+
h(UnitKeyboardNavigation, { columnData: data }),
|
|
139
152
|
]),
|
|
140
153
|
]),
|
|
141
154
|
),
|
|
@@ -296,15 +309,13 @@ function StratColSpan({
|
|
|
296
309
|
}
|
|
297
310
|
|
|
298
311
|
function ChartArea({ children }) {
|
|
299
|
-
const setSelectedUnit =
|
|
300
|
-
(state) => state.setSelectedUnit,
|
|
301
|
-
);
|
|
312
|
+
const setSelectedUnit = useUnitSelectionDispatch();
|
|
302
313
|
|
|
303
314
|
return h(
|
|
304
315
|
"div.correlation-chart-inner",
|
|
305
316
|
{
|
|
306
317
|
onClick() {
|
|
307
|
-
setSelectedUnit(null);
|
|
318
|
+
setSelectedUnit(null, null);
|
|
308
319
|
},
|
|
309
320
|
},
|
|
310
321
|
children,
|
|
@@ -6,8 +6,11 @@ import {
|
|
|
6
6
|
ColumnCorrelationMap,
|
|
7
7
|
ColumnCorrelationProvider,
|
|
8
8
|
fetchUnits,
|
|
9
|
+
MacrostratDataProvider,
|
|
9
10
|
MergeSectionsMode,
|
|
10
11
|
useCorrelationMapStore,
|
|
12
|
+
useMacrostratBaseURL,
|
|
13
|
+
useMacrostratFetch,
|
|
11
14
|
} from "../..";
|
|
12
15
|
import { hyperStyled } from "@macrostrat/hyper";
|
|
13
16
|
|
|
@@ -35,30 +38,37 @@ function CorrelationStoryUI({
|
|
|
35
38
|
...rest
|
|
36
39
|
}: any) {
|
|
37
40
|
return h(
|
|
38
|
-
|
|
39
|
-
{
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
41
|
+
MacrostratDataProvider,
|
|
42
|
+
{ baseURL: "https://dev.macrostrat.org/api/v2" },
|
|
43
|
+
h(
|
|
44
|
+
ColumnCorrelationProvider,
|
|
45
|
+
{
|
|
46
|
+
focusedLine,
|
|
47
|
+
columns: null,
|
|
48
|
+
projectID,
|
|
49
|
+
onSelectColumns(cols, line) {
|
|
50
|
+
setFocusedLine(line);
|
|
51
|
+
},
|
|
44
52
|
},
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
53
|
+
h("div.correlation-ui", [
|
|
54
|
+
h("div.correlation-container", h(CorrelationDiagramWrapper, rest)),
|
|
55
|
+
h("div.right-column", [
|
|
56
|
+
h(ColumnCorrelationMap, {
|
|
57
|
+
accessToken: mapboxToken,
|
|
58
|
+
className: "correlation-map",
|
|
59
|
+
//showLogo: false,
|
|
60
|
+
}),
|
|
61
|
+
]),
|
|
54
62
|
]),
|
|
55
|
-
|
|
63
|
+
),
|
|
56
64
|
);
|
|
57
65
|
}
|
|
58
66
|
|
|
59
67
|
function CorrelationDiagramWrapper(props: Omit<CorrelationChartProps, "data">) {
|
|
60
68
|
/** This state management is a bit too complicated, but it does kinda sorta work */
|
|
61
69
|
|
|
70
|
+
const fetch = useMacrostratFetch();
|
|
71
|
+
|
|
62
72
|
// Sync focused columns with map
|
|
63
73
|
const focusedColumns = useCorrelationMapStore(
|
|
64
74
|
(state) => state.focusedColumns,
|
|
@@ -66,7 +76,7 @@ function CorrelationDiagramWrapper(props: Omit<CorrelationChartProps, "data">) {
|
|
|
66
76
|
|
|
67
77
|
const columnUnits = useAsyncMemo(async () => {
|
|
68
78
|
const col_ids = focusedColumns.map((col) => col.properties.col_id);
|
|
69
|
-
return await fetchUnits(col_ids);
|
|
79
|
+
return await fetchUnits(col_ids, fetch);
|
|
70
80
|
}, [focusedColumns]);
|
|
71
81
|
|
|
72
82
|
return h("div.correlation-diagram", [
|
|
@@ -161,6 +171,11 @@ export default {
|
|
|
161
171
|
type: "number",
|
|
162
172
|
},
|
|
163
173
|
},
|
|
174
|
+
projectID: {
|
|
175
|
+
control: {
|
|
176
|
+
type: "number",
|
|
177
|
+
},
|
|
178
|
+
},
|
|
164
179
|
},
|
|
165
180
|
} as Meta<typeof CorrelationStoryUI>;
|
|
166
181
|
|
|
@@ -221,3 +236,9 @@ WithPowerScaleMerged.args = {
|
|
|
221
236
|
scale: scalePow().exponent(0.3).domain([0, 2500]).range([0, 1000]),
|
|
222
237
|
mergeSections: MergeSectionsMode.ALL,
|
|
223
238
|
};
|
|
239
|
+
|
|
240
|
+
export const eODPCorrelationChart = Template.bind({});
|
|
241
|
+
eODPCorrelationChart.args = {
|
|
242
|
+
focusedLine: "-125,38 -120,32",
|
|
243
|
+
projectID: 3,
|
|
244
|
+
};
|
|
@@ -288,6 +288,14 @@ export function useMacrostratBaseURL(
|
|
|
288
288
|
return ctx.getState().baseURL;
|
|
289
289
|
}
|
|
290
290
|
|
|
291
|
+
export function useMacrostratFetch() {
|
|
292
|
+
const ctx = useContext(MacrostratDataProviderContext);
|
|
293
|
+
if (ctx == null) {
|
|
294
|
+
throw new Error("Missing MacrostratDataProvider");
|
|
295
|
+
}
|
|
296
|
+
return ctx.getState().fetch;
|
|
297
|
+
}
|
|
298
|
+
|
|
291
299
|
type DataTypeKey =
|
|
292
300
|
| "lithologies"
|
|
293
301
|
| "intervals"
|
|
@@ -345,6 +353,20 @@ export function useMacrostratColumns(
|
|
|
345
353
|
}, [colData, inProcess]);
|
|
346
354
|
}
|
|
347
355
|
|
|
356
|
+
export function useMacrostratColumnInfo(
|
|
357
|
+
columnID: number,
|
|
358
|
+
): ColumnGeoJSONRecord["properties"] | null {
|
|
359
|
+
/** Get basic info for a column, without automatically fetching it (assumes the overall set of relevant columns has already been fetched) */
|
|
360
|
+
const columnsMap = useMacrostratStore((s) => s.columnFootprints);
|
|
361
|
+
return useMemo(() => {
|
|
362
|
+
for (const colData of columnsMap.values()) {
|
|
363
|
+
const col = colData.columns.find((d) => d.properties.col_id === columnID);
|
|
364
|
+
if (col != null) return col.properties;
|
|
365
|
+
}
|
|
366
|
+
return null;
|
|
367
|
+
}, [columnsMap, columnID]);
|
|
368
|
+
}
|
|
369
|
+
|
|
348
370
|
export function useMacrostratData(dataType: DataTypeKey, ...args: any[]) {
|
|
349
371
|
const selector = dataTypeMapping[dataType];
|
|
350
372
|
const operator = useMacrostratStore(selector);
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { atom, type WritableAtom } from "jotai";
|
|
2
|
+
import { createIsolation } from "jotai-scope";
|
|
3
|
+
import { BaseUnit } from "@macrostrat/api-types";
|
|
4
|
+
import { ReactNode, useEffect, useRef } from "react";
|
|
5
|
+
import h from "@macrostrat/hyper";
|
|
6
|
+
|
|
7
|
+
interface StateIsolation {
|
|
8
|
+
Provider: (props: {
|
|
9
|
+
store?: any;
|
|
10
|
+
initialValues?: AtomMap;
|
|
11
|
+
children: ReactNode;
|
|
12
|
+
}) => ReactNode;
|
|
13
|
+
useStore: () => any;
|
|
14
|
+
useAtom: any;
|
|
15
|
+
useAtomValue: any;
|
|
16
|
+
useSetAtom: any;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export const scope: StateIsolation = createIsolation();
|
|
20
|
+
|
|
21
|
+
export type AtomMap = [WritableAtom<any, any, any>, any][];
|
|
22
|
+
|
|
23
|
+
type ProviderProps = {
|
|
24
|
+
children: ReactNode;
|
|
25
|
+
atoms?: AtomMap;
|
|
26
|
+
shouldUpdateAtoms?: boolean;
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
export function ScopedProvider({
|
|
30
|
+
children,
|
|
31
|
+
atoms,
|
|
32
|
+
shouldUpdateAtoms = true,
|
|
33
|
+
}: ProviderProps) {
|
|
34
|
+
// Always use the same store instance in this tree
|
|
35
|
+
let val = null;
|
|
36
|
+
try {
|
|
37
|
+
val = scope.useStore();
|
|
38
|
+
// This store has already been provided
|
|
39
|
+
return children;
|
|
40
|
+
} catch {
|
|
41
|
+
return h(scope.Provider, { store: null, initialValues: atoms }, [
|
|
42
|
+
h.if(shouldUpdateAtoms)(AtomUpdater, { atoms }),
|
|
43
|
+
children,
|
|
44
|
+
]);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
function AtomUpdater({
|
|
49
|
+
atoms,
|
|
50
|
+
}: {
|
|
51
|
+
atoms: [WritableAtom<any, any, any>, any][];
|
|
52
|
+
}) {
|
|
53
|
+
/**
|
|
54
|
+
* A generic updater to sync Jotai atoms with state passed as props.
|
|
55
|
+
* Useful for scoped providers where state needs to be synced outside
|
|
56
|
+
* the current context.
|
|
57
|
+
*/
|
|
58
|
+
/** TODO: this is an awkward way to keep atoms updated */
|
|
59
|
+
// The scoped store
|
|
60
|
+
const store = scope.useStore();
|
|
61
|
+
|
|
62
|
+
// Warn on atoms changing length
|
|
63
|
+
const prevLengthRef = useRef(atoms.length);
|
|
64
|
+
useEffect(() => {
|
|
65
|
+
if (prevLengthRef.current !== atoms.length) {
|
|
66
|
+
console.error("Error: number of atoms in ScopedAtomUpdater has changed.");
|
|
67
|
+
prevLengthRef.current = atoms.length;
|
|
68
|
+
}
|
|
69
|
+
}, [atoms.length]);
|
|
70
|
+
|
|
71
|
+
for (const [atom, value] of atoms) {
|
|
72
|
+
useEffect(() => {
|
|
73
|
+
store.set(atom, value);
|
|
74
|
+
}, [store, value]);
|
|
75
|
+
}
|
|
76
|
+
return null;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
export const columnUnitsAtom = atom<BaseUnit[]>();
|
|
80
|
+
|
|
81
|
+
export const columnUnitsMapAtom = atom<Map<number, BaseUnit> | null>((get) => {
|
|
82
|
+
const units = get(columnUnitsAtom);
|
|
83
|
+
if (!units) return null;
|
|
84
|
+
const unitMap = new Map<number, BaseUnit>();
|
|
85
|
+
units.forEach((unit) => {
|
|
86
|
+
unitMap.set(unit.unit_id, unit);
|
|
87
|
+
});
|
|
88
|
+
return unitMap;
|
|
89
|
+
});
|
|
@@ -3,7 +3,6 @@ import {
|
|
|
3
3
|
ColumnGeoJSONRecordWithID,
|
|
4
4
|
MacrostratRef,
|
|
5
5
|
StratName,
|
|
6
|
-
StratUnit,
|
|
7
6
|
UnitLong,
|
|
8
7
|
} from "@macrostrat/api-types";
|
|
9
8
|
import {
|
|
@@ -14,16 +13,15 @@ import {
|
|
|
14
13
|
import crossFetch from "cross-fetch";
|
|
15
14
|
import { feature } from "topojson-client";
|
|
16
15
|
import { geoArea } from "d3-geo";
|
|
17
|
-
import _ from "underscore";
|
|
18
16
|
|
|
19
|
-
function
|
|
20
|
-
url: string,
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
const baseURL = "https://macrostrat.org/api/v2";
|
|
24
|
-
return crossFetch(baseURL + url, options);
|
|
17
|
+
function createScopedFetch(baseURL: string) {
|
|
18
|
+
return function (url: string, options: RequestInit | undefined = undefined) {
|
|
19
|
+
return crossFetch(baseURL + url, options);
|
|
20
|
+
};
|
|
25
21
|
}
|
|
26
22
|
|
|
23
|
+
const defaultFetch = createScopedFetch("https://macrostrat.org/api/v2");
|
|
24
|
+
|
|
27
25
|
export type ColumnStatusCode = "in process" | "active" | "obsolete";
|
|
28
26
|
|
|
29
27
|
export interface ColumnFetchOptions {
|
|
@@ -232,8 +230,35 @@ export async function fetchUnits(
|
|
|
232
230
|
columns: number[],
|
|
233
231
|
fetch = defaultFetch,
|
|
234
232
|
): Promise<ColumnData[]> {
|
|
235
|
-
const
|
|
236
|
-
|
|
233
|
+
const params = new URLSearchParams();
|
|
234
|
+
params.append("response", "long");
|
|
235
|
+
|
|
236
|
+
if (columns.length == 0) {
|
|
237
|
+
return [];
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
const col_string = columns.map((column) => column.toString()).join(",");
|
|
241
|
+
params.append("col_id", col_string);
|
|
242
|
+
|
|
243
|
+
const res = await fetch("/units" + "?" + params.toString());
|
|
244
|
+
const data = await res.json();
|
|
245
|
+
if (!data.success) {
|
|
246
|
+
throw new Error("Failed to fetch column units");
|
|
247
|
+
}
|
|
248
|
+
const units = data.success.data;
|
|
249
|
+
const unitsMap = new Map<number, UnitLong[]>();
|
|
250
|
+
for (const unit of units) {
|
|
251
|
+
const colID = unit.col_id;
|
|
252
|
+
if (!unitsMap.has(colID)) {
|
|
253
|
+
unitsMap.set(colID, []);
|
|
254
|
+
}
|
|
255
|
+
unitsMap.get(colID).push(unit);
|
|
256
|
+
}
|
|
257
|
+
const result: ColumnData[] = [];
|
|
258
|
+
for (const colID of columns) {
|
|
259
|
+
result.push({ columnID: colID, units: unitsMap.get(colID) || [] });
|
|
260
|
+
}
|
|
261
|
+
return result;
|
|
237
262
|
}
|
|
238
263
|
|
|
239
264
|
export async function fetchColumnUnits(
|