@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
|
@@ -1,11 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
createContext,
|
|
3
|
-
ReactNode,
|
|
4
|
-
useContext,
|
|
5
|
-
useEffect,
|
|
6
|
-
useMemo,
|
|
7
|
-
useRef,
|
|
8
|
-
} from "react";
|
|
1
|
+
import { createContext, ReactNode, useContext, useMemo } from "react";
|
|
9
2
|
import h from "@macrostrat/hyper";
|
|
10
3
|
import {
|
|
11
4
|
CompositeColumnScale,
|
|
@@ -13,84 +6,98 @@ import {
|
|
|
13
6
|
} from "../prepare-units/composite-scale";
|
|
14
7
|
import { ColumnAxisType } from "@macrostrat/column-components";
|
|
15
8
|
import type { ExtUnit, PackageLayoutData } from "../prepare-units";
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
9
|
+
import {
|
|
10
|
+
allowUnitSelectionAtom,
|
|
11
|
+
selectedUnitIDAtom,
|
|
12
|
+
UnitSelectionCallbacks,
|
|
13
|
+
UnitSelectionCallbackManager,
|
|
14
|
+
} from "./unit-selection";
|
|
15
|
+
import { BaseUnit } from "@macrostrat/api-types";
|
|
16
|
+
import {
|
|
17
|
+
AtomMap,
|
|
18
|
+
columnUnitsAtom,
|
|
19
|
+
columnUnitsMapAtom,
|
|
20
|
+
scope,
|
|
21
|
+
ScopedProvider,
|
|
22
|
+
} from "./core";
|
|
23
|
+
|
|
24
|
+
export interface ColumnStateProviderProps<
|
|
25
|
+
T extends BaseUnit,
|
|
26
|
+
> extends Partial<UnitSelectionCallbacks> {
|
|
24
27
|
children: ReactNode;
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
const columnUnitsAtom = atom<ExtUnit[]>();
|
|
29
|
-
|
|
30
|
-
const columnUnitsMapAtom = atom<Map<number, ExtUnit> | null>((get) => {
|
|
31
|
-
const units = get(columnUnitsAtom);
|
|
32
|
-
if (!units) return null;
|
|
33
|
-
const unitMap = new Map<number, ExtUnit>();
|
|
34
|
-
units.forEach((unit) => {
|
|
35
|
-
unitMap.set(unit.unit_id, unit);
|
|
36
|
-
});
|
|
37
|
-
return unitMap;
|
|
38
|
-
});
|
|
39
|
-
|
|
40
|
-
function ScopedProvider({ children, ...rest }: ProviderProps) {
|
|
41
|
-
// Always use the same store instance in this tree
|
|
42
|
-
let val = null;
|
|
43
|
-
try {
|
|
44
|
-
val = useStore();
|
|
45
|
-
} catch {
|
|
46
|
-
// No store found, create a new one
|
|
47
|
-
val = null;
|
|
48
|
-
}
|
|
49
|
-
return h(Provider, { store: val, ...rest }, children);
|
|
28
|
+
units: T[];
|
|
29
|
+
selectedUnit: number | null;
|
|
30
|
+
allowUnitSelection?: boolean;
|
|
50
31
|
}
|
|
51
32
|
|
|
52
|
-
export function MacrostratColumnStateProvider({
|
|
33
|
+
export function MacrostratColumnStateProvider<T extends BaseUnit>({
|
|
53
34
|
children,
|
|
54
35
|
units,
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
}) {
|
|
36
|
+
allowUnitSelection = false,
|
|
37
|
+
onUnitSelected,
|
|
38
|
+
selectedUnit,
|
|
39
|
+
}: ColumnStateProviderProps<T>) {
|
|
59
40
|
/** Top-level provider for Macrostrat column data.
|
|
60
41
|
* It is either provided by the Column component itself, or
|
|
61
42
|
* can be hoisted higher in the tree to provide a common data context
|
|
62
43
|
*/
|
|
63
44
|
|
|
64
|
-
|
|
45
|
+
/* By default, unit selection is disabled. However, if any related props are passed,
|
|
46
|
+
we enable it.
|
|
47
|
+
*/
|
|
48
|
+
const _allowSelection = useMemo(() => {
|
|
49
|
+
if (allowUnitSelection) {
|
|
50
|
+
return true;
|
|
51
|
+
}
|
|
52
|
+
return selectedUnit != null || onUnitSelected != null;
|
|
53
|
+
}, []);
|
|
54
|
+
|
|
55
|
+
const atomMap: AtomMap = [
|
|
65
56
|
[columnUnitsAtom, units],
|
|
57
|
+
[allowUnitSelectionAtom, _allowSelection],
|
|
58
|
+
[selectedUnitIDAtom, selectedUnit],
|
|
66
59
|
];
|
|
67
60
|
|
|
61
|
+
let selectionHandlers: ReactNode = null;
|
|
62
|
+
if (_allowSelection) {
|
|
63
|
+
selectionHandlers = h(UnitSelectionCallbackManager, { onUnitSelected });
|
|
64
|
+
}
|
|
65
|
+
|
|
68
66
|
return h(
|
|
69
67
|
ScopedProvider,
|
|
70
68
|
{
|
|
71
|
-
|
|
69
|
+
atoms: atomMap,
|
|
72
70
|
},
|
|
73
|
-
[
|
|
71
|
+
[selectionHandlers, children],
|
|
74
72
|
);
|
|
75
73
|
}
|
|
76
74
|
|
|
77
|
-
export interface MacrostratColumnDataContext {
|
|
78
|
-
units:
|
|
75
|
+
export interface MacrostratColumnDataContext<T extends BaseUnit> {
|
|
76
|
+
units: T[];
|
|
79
77
|
sections: PackageLayoutData[];
|
|
80
78
|
totalHeight?: number;
|
|
81
79
|
axisType?: ColumnAxisType;
|
|
80
|
+
allowUnitSelection?: boolean;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
export interface ColumnDataProviderProps<T extends BaseUnit>
|
|
84
|
+
extends MacrostratColumnDataContext<T>, ColumnStateProviderProps<T> {
|
|
85
|
+
children: ReactNode;
|
|
82
86
|
}
|
|
83
87
|
|
|
84
88
|
const MacrostratColumnDataContext =
|
|
85
|
-
createContext<MacrostratColumnDataContext
|
|
89
|
+
createContext<MacrostratColumnDataContext<any>>(null);
|
|
86
90
|
|
|
87
|
-
export function MacrostratColumnDataProvider({
|
|
91
|
+
export function MacrostratColumnDataProvider<T extends BaseUnit>({
|
|
88
92
|
children,
|
|
89
93
|
units,
|
|
90
94
|
sections,
|
|
91
95
|
totalHeight,
|
|
92
96
|
axisType,
|
|
93
|
-
|
|
97
|
+
allowUnitSelection,
|
|
98
|
+
onUnitSelected,
|
|
99
|
+
selectedUnit,
|
|
100
|
+
}: ColumnDataProviderProps<T>) {
|
|
94
101
|
/** Internal provider for Macrostrat column data.
|
|
95
102
|
* As a general rule, we want to provide data and column-axis
|
|
96
103
|
* height calculations through the context, since these need to
|
|
@@ -114,11 +121,26 @@ export function MacrostratColumnDataProvider({
|
|
|
114
121
|
|
|
115
122
|
return h(
|
|
116
123
|
MacrostratColumnStateProvider,
|
|
117
|
-
{
|
|
124
|
+
{
|
|
125
|
+
units,
|
|
126
|
+
allowUnitSelection,
|
|
127
|
+
onUnitSelected,
|
|
128
|
+
selectedUnit,
|
|
129
|
+
},
|
|
118
130
|
h(MacrostratColumnDataContext.Provider, { value }, children),
|
|
119
131
|
);
|
|
120
132
|
}
|
|
121
133
|
|
|
134
|
+
export function UnitSelectionProvider(props: ColumnStateProviderProps<any>) {
|
|
135
|
+
/* A basic unit selection provider without column data context.
|
|
136
|
+
Mostly for use with the CorrelationChart component.
|
|
137
|
+
*/
|
|
138
|
+
return h(MacrostratColumnStateProvider, {
|
|
139
|
+
...props,
|
|
140
|
+
allowUnitSelection: true,
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
|
|
122
144
|
export function useMacrostratColumnData() {
|
|
123
145
|
const ctx = useContext(MacrostratColumnDataContext);
|
|
124
146
|
if (!ctx) {
|
|
@@ -130,12 +152,12 @@ export function useMacrostratColumnData() {
|
|
|
130
152
|
}
|
|
131
153
|
|
|
132
154
|
export function useMacrostratUnits() {
|
|
133
|
-
return useAtomValue(columnUnitsAtom);
|
|
155
|
+
return scope.useAtomValue(columnUnitsAtom);
|
|
134
156
|
}
|
|
135
157
|
|
|
136
158
|
export function useColumnUnitsMap(): Map<number, ExtUnit> | null {
|
|
137
159
|
try {
|
|
138
|
-
return useAtomValue(columnUnitsMapAtom)
|
|
160
|
+
return scope.useAtomValue(columnUnitsMapAtom) as Map<number, ExtUnit>;
|
|
139
161
|
} catch {
|
|
140
162
|
return null;
|
|
141
163
|
}
|
|
@@ -148,34 +170,3 @@ export function useCompositeScale(): CompositeColumnScale {
|
|
|
148
170
|
[ctx.sections],
|
|
149
171
|
);
|
|
150
172
|
}
|
|
151
|
-
|
|
152
|
-
function AtomUpdater({
|
|
153
|
-
atoms,
|
|
154
|
-
}: {
|
|
155
|
-
atoms: [WritableAtom<any, any, any>, any][];
|
|
156
|
-
}) {
|
|
157
|
-
/**
|
|
158
|
-
* A generic updater to sync Jotai atoms with state passed as props.
|
|
159
|
-
* Useful for scoped providers where state needs to be synced outside
|
|
160
|
-
* of the current context.
|
|
161
|
-
*/
|
|
162
|
-
/** TODO: this is an awkward way to keep atoms updated */
|
|
163
|
-
// The scoped store
|
|
164
|
-
const store = useStore();
|
|
165
|
-
|
|
166
|
-
// Warn on atoms changing length
|
|
167
|
-
const prevLengthRef = useRef(atoms.length);
|
|
168
|
-
useEffect(() => {
|
|
169
|
-
if (prevLengthRef.current !== atoms.length) {
|
|
170
|
-
console.error("Error: number of atoms in ScopedAtomUpdater has changed.");
|
|
171
|
-
prevLengthRef.current = atoms.length;
|
|
172
|
-
}
|
|
173
|
-
}, [atoms.length]);
|
|
174
|
-
|
|
175
|
-
for (const [atom, value] of atoms) {
|
|
176
|
-
useEffect(() => {
|
|
177
|
-
store.set(atom, value);
|
|
178
|
-
}, [store, value]);
|
|
179
|
-
}
|
|
180
|
-
return null;
|
|
181
|
-
}
|