Skip to content

Commit d571a23

Browse files
authored
Merge pull request #213 from UW-Macrostrat/unit-interactions
Improve handling of unit interactions and column data fetching
2 parents 9bc03fe + 40f270d commit d571a23

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

46 files changed

+969
-371
lines changed

packages/column-views/CHANGELOG.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,14 @@ All notable changes to this project will be documented in this file. The format
44
is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this
55
project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
66

7+
## [3.1.0] - 2026-01-31
8+
9+
- Moved `MacrostratDataProvider` and data fetchers to
10+
`@macrostrat/data-provider` for better modularity.
11+
- Standardize approach to clickable/linkable data items in `UnitDetailsPanel`,
12+
using a new `MacrostratInteractionProvider` from
13+
`@macrostrat/data-components`.
14+
715
## [3.0.3] - 2026-01-29
816

917
- Change layout of `package.json`

packages/column-views/package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@macrostrat/column-views",
3-
"version": "3.0.3",
3+
"version": "3.1.0",
44
"description": "Data views for Macrostrat stratigraphic columns",
55
"repository": {
66
"type": "git",
@@ -50,6 +50,7 @@
5050
"@macrostrat/color-utils": "workspace:^",
5151
"@macrostrat/column-components": "workspace:^",
5252
"@macrostrat/data-components": "workspace:^",
53+
"@macrostrat/data-provider": "workspace:^",
5354
"@macrostrat/hyper": "^3.0.6",
5455
"@macrostrat/map-interface": "workspace:^",
5556
"@macrostrat/map-styles": "workspace:^",

packages/column-views/src/correlation-chart/stories/correlation-chart.stories.ts

Lines changed: 29 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -4,21 +4,23 @@ import { useCorrelationLine } from "./utils";
44
import {
55
ColumnCorrelationMap,
66
ColumnCorrelationProvider,
7-
fetchUnits,
8-
MacrostratDataProvider,
97
MergeSectionsMode,
108
useCorrelationMapStore,
11-
useMacrostratBaseURL,
12-
useMacrostratFetch,
139
} from "../..";
1410
import { hyperStyled } from "@macrostrat/hyper";
11+
import {
12+
MacrostratDataProvider,
13+
fetchUnits,
14+
useMacrostratFetch,
15+
} from "@macrostrat/data-provider";
1516

1617
import styles from "./stories.module.sass";
1718
import { CorrelationChart, CorrelationChartProps } from "../main";
1819
import { ErrorBoundary, useAsyncMemo } from "@macrostrat/ui-components";
1920
import { OverlaysProvider } from "@blueprintjs/core";
2021
import { EnvironmentColoredUnitComponent } from "../../units";
2122
import { scaleLinear, scalePow } from "d3-scale";
23+
import { MacrostratInteractionProvider } from "@macrostrat/data-components";
2224

2325
const mapboxToken = import.meta.env.VITE_MAPBOX_API_TOKEN;
2426

@@ -35,29 +37,34 @@ function CorrelationStoryUI({
3537
projectID,
3638
...rest
3739
}: any) {
40+
const domain = "https://dev.macrostrat.org";
3841
return h(
3942
MacrostratDataProvider,
40-
{ baseURL: "https://dev.macrostrat.org/api/v2" },
43+
{ baseURL: domain + "/api/v2" },
4144
h(
42-
ColumnCorrelationProvider,
43-
{
44-
focusedLine,
45-
columns: null,
46-
projectID,
47-
onSelectColumns(cols, line) {
48-
setFocusedLine(line);
45+
MacrostratInteractionProvider,
46+
{ linkDomain: domain },
47+
h(
48+
ColumnCorrelationProvider,
49+
{
50+
focusedLine,
51+
columns: null,
52+
projectID,
53+
onSelectColumns(cols, line) {
54+
setFocusedLine(line);
55+
},
4956
},
50-
},
51-
h("div.correlation-ui", [
52-
h("div.correlation-container", h(CorrelationDiagramWrapper, rest)),
53-
h("div.right-column", [
54-
h(ColumnCorrelationMap, {
55-
accessToken: mapboxToken,
56-
className: "correlation-map",
57-
//showLogo: false,
58-
}),
57+
h("div.correlation-ui", [
58+
h("div.correlation-container", h(CorrelationDiagramWrapper, rest)),
59+
h("div.right-column", [
60+
h(ColumnCorrelationMap, {
61+
accessToken: mapboxToken,
62+
className: "correlation-map",
63+
//showLogo: false,
64+
}),
65+
]),
5966
]),
60-
]),
67+
),
6168
),
6269
);
6370
}

packages/column-views/src/data-provider/core.ts

Lines changed: 0 additions & 89 deletions
This file was deleted.
Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
export * from "./fetch";
2-
export * from "./base";
31
export * from "./column-nav";
42
export * from "./store";
53
export * from "./unit-selection";

packages/column-views/src/data-provider/store.ts

Lines changed: 51 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,22 +4,31 @@ import {
44
CompositeColumnScale,
55
createCompositeScale,
66
} from "../prepare-units/composite-scale";
7-
import { ColumnAxisType } from "@macrostrat/column-components";
7+
import { ColumnAxisType, ColumnProvider } from "@macrostrat/column-components";
88
import type { ExtUnit, PackageLayoutData } from "../prepare-units";
99
import {
1010
allowUnitSelectionAtom,
1111
selectedUnitIDAtom,
1212
UnitSelectionCallbacks,
1313
UnitSelectionCallbackManager,
1414
} 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";
15+
import type { BaseUnit } from "@macrostrat/api-types";
16+
import { type AtomMap, createScopedStore } from "@macrostrat/data-components";
17+
import { atom } from "jotai";
18+
19+
export const scope = createScopedStore();
20+
21+
export const columnUnitsAtom = atom<BaseUnit[]>();
22+
23+
export const columnUnitsMapAtom = atom<Map<number, BaseUnit> | null>((get) => {
24+
const units = get(columnUnitsAtom);
25+
if (!units) return null;
26+
const unitMap = new Map<number, BaseUnit>();
27+
units.forEach((unit) => {
28+
unitMap.set(unit.unit_id, unit);
29+
});
30+
return unitMap;
31+
});
2332

2433
export interface ColumnStateProviderProps<
2534
T extends BaseUnit,
@@ -64,9 +73,11 @@ export function MacrostratColumnStateProvider<T extends BaseUnit>({
6473
}
6574

6675
return h(
67-
ScopedProvider,
76+
scope.Provider,
6877
{
6978
atoms: atomMap,
79+
keepUpdated: true,
80+
inherit: true,
7081
},
7182
[selectionHandlers, children],
7283
);
@@ -170,3 +181,33 @@ export function useCompositeScale(): CompositeColumnScale {
170181
[ctx.sections],
171182
);
172183
}
184+
185+
export function MacrostratColumnProvider(props) {
186+
/** A column provider specialized the Macrostrat API. Maps more
187+
* generic concepts to Macrostrat-specific ones.
188+
*/
189+
190+
const { axisType } = useMacrostratColumnData();
191+
const { units, domain, pixelScale, scale, children } = props;
192+
return h(
193+
ColumnProvider,
194+
{
195+
axisType,
196+
divisions: units,
197+
range: domain,
198+
pixelsPerMeter: pixelScale,
199+
scale,
200+
},
201+
children,
202+
);
203+
}
204+
205+
/** This is now a legacy provider */
206+
export function LithologiesProvider({ children }) {
207+
useEffect(() => {
208+
console.warn(
209+
"LithologiesProvider is deprecated. Replace with MacrostratDataProvider",
210+
);
211+
}, []);
212+
return children;
213+
}

packages/column-views/src/data-provider/unit-selection.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
1-
import { BaseUnit, UnitLong } from "@macrostrat/api-types";
1+
import type { BaseUnit, UnitLong } from "@macrostrat/api-types";
22
import { useKeyHandler } from "@macrostrat/ui-components";
33
import { useEffect, useRef, useCallback, useMemo } from "react";
44
import type { RectBounds, IUnit } from "../units/types";
55
import { atom } from "jotai";
6-
import { columnUnitsMapAtom, scope } from "./core";
7-
import { ColumnData } from "@macrostrat/column-views";
6+
import { scope, columnUnitsMapAtom } from "./store";
87
import {
98
AgeRangeQuantifiedDifference,
109
ageRangeQuantifiedDifference,
1110
AgeRangeRelationship,
1211
} from "@macrostrat/stratigraphy-utils";
12+
import type { ColumnData } from "@macrostrat/data-provider";
1313

1414
type UnitSelectDispatch = (
1515
unit: number | BaseUnit | null,
@@ -69,7 +69,7 @@ const selectedUnitAtom = atom(
6969
target: HTMLElement | null = null,
7070
): BaseUnit | null => {
7171
if (!get(allowUnitSelectionAtom)) {
72-
throw new Error("Unit selection is disabled.");
72+
console.error("Unit selection is disabled.");
7373
}
7474

7575
let unitID: number | null;

packages/column-views/src/maps/column-correlation/state.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import {
1515
} from "react";
1616
import h from "@macrostrat/hyper";
1717
import { createComputed } from "zustand-computed";
18-
import { useMacrostratColumns } from "../../data-provider/base";
18+
import { useMacrostratColumns } from "@macrostrat/data-provider";
1919
import { buffer } from "@turf/buffer";
2020
import { booleanPointInPolygon } from "@turf/boolean-point-in-polygon";
2121

@@ -26,6 +26,7 @@ export interface CorrelationMapInput {
2626

2727
export interface CorrelationMapStore extends CorrelationMapInput {
2828
onClickMap: (event: mapboxgl.MapMouseEvent, point: Point) => void;
29+
projectID?: number;
2930
}
3031

3132
export interface CorrelationProviderProps extends CorrelationMapInput {

packages/column-views/src/maps/column-navigation/mapbox/state.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import h from "@macrostrat/hyper";
1212
import {
1313
useMacrostratColumns,
1414
useMacrostratStore,
15-
} from "../../../data-provider";
15+
} from "@macrostrat/data-provider";
1616

1717
export interface NavigationStore {
1818
columns: ColumnGeoJSONRecordWithID[];

packages/column-views/src/maps/column-navigation/svg/column-navigation-svg-map.stories.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import h from "@macrostrat/hyper";
22

33
import { Meta } from "@storybook/react-vite";
44
import { ColumnNavigationSVGMap, ColumnNavigationSVGMapProps } from ".";
5-
import { MacrostratDataProvider } from "../../../data-provider";
5+
import { MacrostratDataProvider } from "@macrostrat/data-provider";
66
import { useState } from "react";
77

88
interface ColumnIndexMapProps extends ColumnNavigationSVGMapProps {

0 commit comments

Comments
 (0)