@macrostrat/column-views 3.0.3 → 3.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (84) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/dist/data-provider/column-nav.js +1 -1
  3. package/dist/data-provider/index.d.ts +0 -2
  4. package/dist/data-provider/store.cjs +49 -6
  5. package/dist/data-provider/store.cjs.map +1 -1
  6. package/dist/data-provider/store.js +46 -3
  7. package/dist/data-provider/store.js.map +1 -1
  8. package/dist/data-provider/unit-selection.cjs +9 -9
  9. package/dist/data-provider/unit-selection.cjs.map +1 -1
  10. package/dist/data-provider/unit-selection.d.ts +1 -1
  11. package/dist/data-provider/unit-selection.js +2 -2
  12. package/dist/data-provider/unit-selection.js.map +1 -1
  13. package/dist/index.cjs +5 -24
  14. package/dist/index.cjs.map +1 -1
  15. package/dist/index.js +4 -23
  16. package/dist/index.js.map +1 -1
  17. package/dist/maps/column-correlation/state.cjs +2 -2
  18. package/dist/maps/column-correlation/state.cjs.map +1 -1
  19. package/dist/maps/column-correlation/state.d.ts +1 -0
  20. package/dist/maps/column-correlation/state.js +1 -1
  21. package/dist/maps/column-correlation/state.js.map +1 -1
  22. package/dist/maps/column-navigation/mapbox/state.cjs +3 -3
  23. package/dist/maps/column-navigation/mapbox/state.cjs.map +1 -1
  24. package/dist/maps/column-navigation/mapbox/state.js +1 -1
  25. package/dist/maps/column-navigation/mapbox/state.js.map +1 -1
  26. package/dist/maps/column-navigation/svg/data-fetcher.cjs +25 -0
  27. package/dist/maps/column-navigation/svg/data-fetcher.cjs.map +1 -0
  28. package/dist/maps/column-navigation/svg/data-fetcher.d.ts +6 -0
  29. package/dist/maps/column-navigation/svg/data-fetcher.js +25 -0
  30. package/dist/maps/column-navigation/svg/data-fetcher.js.map +1 -0
  31. package/dist/maps/column-navigation/svg/layers.cjs +2 -3
  32. package/dist/maps/column-navigation/svg/layers.cjs.map +1 -1
  33. package/dist/maps/column-navigation/svg/layers.js +1 -2
  34. package/dist/maps/column-navigation/svg/layers.js.map +1 -1
  35. package/dist/section.cjs +3 -3
  36. package/dist/section.cjs.map +1 -1
  37. package/dist/section.js +2 -2
  38. package/dist/section.js.map +1 -1
  39. package/dist/unit-details/panel.cjs +76 -57
  40. package/dist/unit-details/panel.cjs.map +1 -1
  41. package/dist/unit-details/panel.js +72 -53
  42. package/dist/unit-details/panel.js.map +1 -1
  43. package/dist/units/boxes.cjs +1 -0
  44. package/dist/units/boxes.cjs.map +1 -1
  45. package/dist/units/boxes.js +1 -0
  46. package/dist/units/boxes.js.map +1 -1
  47. package/dist/units/index.cjs +4 -4
  48. package/dist/units/index.cjs.map +1 -1
  49. package/dist/units/index.js +1 -1
  50. package/dist/units/index.js.map +1 -1
  51. package/package.json +3 -2
  52. package/src/correlation-chart/stories/correlation-chart.stories.ts +29 -22
  53. package/src/data-provider/index.ts +0 -2
  54. package/src/data-provider/store.ts +51 -10
  55. package/src/data-provider/unit-selection.ts +4 -4
  56. package/src/maps/column-correlation/state.ts +2 -1
  57. package/src/maps/column-navigation/mapbox/state.ts +1 -1
  58. package/src/maps/column-navigation/svg/column-navigation-svg-map.stories.ts +1 -1
  59. package/src/maps/column-navigation/svg/data-fetcher.ts +34 -0
  60. package/src/maps/column-navigation/svg/layers.ts +1 -1
  61. package/src/section.ts +1 -1
  62. package/src/unit-details/panel.ts +97 -60
  63. package/src/units/boxes.ts +2 -1
  64. package/src/units/index.ts +1 -1
  65. package/dist/data-provider/base.cjs +0 -352
  66. package/dist/data-provider/base.cjs.map +0 -1
  67. package/dist/data-provider/base.d.ts +0 -65
  68. package/dist/data-provider/base.js +0 -349
  69. package/dist/data-provider/base.js.map +0 -1
  70. package/dist/data-provider/core.cjs +0 -58
  71. package/dist/data-provider/core.cjs.map +0 -1
  72. package/dist/data-provider/core.d.ts +0 -31
  73. package/dist/data-provider/core.js +0 -56
  74. package/dist/data-provider/core.js.map +0 -1
  75. package/dist/data-provider/fetch.cjs +0 -212
  76. package/dist/data-provider/fetch.cjs.map +0 -1
  77. package/dist/data-provider/fetch.d.ts +0 -27
  78. package/dist/data-provider/fetch.js +0 -210
  79. package/dist/data-provider/fetch.js.map +0 -1
  80. package/dist/data-provider/store.d.ts +0 -34
  81. package/dist/unit-details/panel.d.ts +0 -87
  82. package/src/data-provider/base.ts +0 -475
  83. package/src/data-provider/core.ts +0 -89
  84. package/src/data-provider/fetch.ts +0 -278
package/dist/index.js CHANGED
@@ -19,8 +19,7 @@ import { FossilDataType, useFossilData } from "./facets/fossils/provider.js";
19
19
  import { HeightMethod, HybridScaleType } from "./prepare-units/types.js";
20
20
  import { InsetMap } from "./maps/_shared/inset-map.js";
21
21
  import { IsotopesColumn, IsotopesDataset } from "./facets/carbon-isotopes/isotopes-column.js";
22
- import { LithologiesProvider, MacrostratAPIProvider, MacrostratColumnProvider, MacrostratDataProvider, useEnvironments, useLithologies, useMacrostratBaseURL, useMacrostratColumnInfo, useMacrostratColumns, useMacrostratData, useMacrostratDefs, useMacrostratFetch, useMacrostratStore } from "./data-provider/base.js";
23
- import { MacrostratColumnDataProvider, MacrostratColumnStateProvider, UnitSelectionProvider, useColumnUnitsMap, useCompositeScale, useMacrostratColumnData, useMacrostratUnits } from "./data-provider/store.js";
22
+ import { LithologiesProvider, MacrostratColumnDataProvider, MacrostratColumnProvider, MacrostratColumnStateProvider, UnitSelectionProvider, columnUnitsAtom, columnUnitsMapAtom, scope, useColumnUnitsMap, useCompositeScale, useMacrostratColumnData, useMacrostratUnits } from "./data-provider/store.js";
24
23
  import { MeasurementDataContext, MeasurementDataProvider, useMeasurementData } from "./facets/carbon-isotopes/data-provider.js";
25
24
  import { MergeSectionsMode, agesOverlap, createUnitSorter, ensureArray, ensureRealFloat, getPositionWithinUnit, getUnitHeightRange, unitsOverlap } from "./prepare-units/utils.js";
26
25
  import { PBDBFossilsColumn } from "./facets/fossils/index.js";
@@ -30,7 +29,6 @@ import { UnitDetailsPanelWithNavigation } from "./unit-details/modal-panel.js";
30
29
  import { UnitDetailsPopover, UnitSelectionPopover } from "./unit-details/popover.js";
31
30
  import { UnitKeyboardNavigation, UnitSelectionCallbackManager, allowUnitSelectionAtom, selectedUnitIDAtom, useAtomOverlayPosition, useColumnRef, useSelectedUnit, useUnitSelectionDispatch, useUnitSelectionTarget } from "./data-provider/unit-selection.js";
32
31
  import { buildColumnsStyle } from "./maps/_shared/styles.js";
33
- import { fetchAllColumns, fetchColumnUnits, fetchEnvironments, fetchIntervals, fetchLithologies, fetchRefs, fetchStratNames, fetchUnits, useColumnFeatures } from "./data-provider/fetch.js";
34
32
  import { getMixedUnitColor } from "./units/colors.js";
35
33
  import { parseLineFromString, stringifyLine } from "./correlation-chart/hash-string.js";
36
34
  import { preprocessUnits } from "./prepare-units/helpers.js";
@@ -79,11 +77,9 @@ export {
79
77
  LabelTrackerProvider,
80
78
  LegendPanelHeader,
81
79
  LithologiesProvider,
82
- MacrostratAPIProvider,
83
80
  MacrostratColumnDataProvider,
84
81
  MacrostratColumnProvider,
85
82
  MacrostratColumnStateProvider,
86
- MacrostratDataProvider,
87
83
  MeasurementDataContext,
88
84
  MeasurementDataProvider,
89
85
  MeasurementsLayer,
@@ -111,17 +107,11 @@ export {
111
107
  agesOverlap,
112
108
  allowUnitSelectionAtom,
113
109
  buildColumnsStyle,
110
+ columnUnitsAtom,
111
+ columnUnitsMapAtom,
114
112
  createUnitSorter,
115
113
  ensureArray,
116
114
  ensureRealFloat,
117
- fetchAllColumns,
118
- fetchColumnUnits,
119
- fetchEnvironments,
120
- fetchIntervals,
121
- fetchLithologies,
122
- fetchRefs,
123
- fetchStratNames,
124
- fetchUnits,
125
115
  getMixedUnitColor,
126
116
  getPositionWithinUnit,
127
117
  getUnitHeightRange,
@@ -130,28 +120,19 @@ export {
130
120
  parseLineFromString,
131
121
  prepareColumnUnits,
132
122
  preprocessUnits,
123
+ scope,
133
124
  selectedUnitIDAtom,
134
125
  standardizeMeasurementHeight,
135
126
  stringifyLine,
136
127
  unitsOverlap,
137
128
  useAtomOverlayPosition,
138
- useColumnFeatures,
139
129
  useColumnNav,
140
130
  useColumnRef,
141
131
  useColumnUnitsMap,
142
132
  useCompositeScale,
143
133
  useCorrelationMapStore,
144
- useEnvironments,
145
134
  useFossilData,
146
- useLithologies,
147
- useMacrostratBaseURL,
148
135
  useMacrostratColumnData,
149
- useMacrostratColumnInfo,
150
- useMacrostratColumns,
151
- useMacrostratData,
152
- useMacrostratDefs,
153
- useMacrostratFetch,
154
- useMacrostratStore,
155
136
  useMacrostratUnits,
156
137
  useMeasurementData,
157
138
  usePreparedColumnUnits,
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -8,7 +8,7 @@ const centroid = require("@turf/centroid");
8
8
  const React = require("react");
9
9
  const h = require("@macrostrat/hyper");
10
10
  const zustandComputed = require("zustand-computed");
11
- const base = require("../../data-provider/base.cjs");
11
+ const dataProvider = require("@macrostrat/data-provider");
12
12
  const buffer = require("@turf/buffer");
13
13
  const booleanPointInPolygon = require("@turf/boolean-point-in-polygon");
14
14
  const _interopDefault = (e) => e && e.__esModule ? e : { default: e };
@@ -54,7 +54,7 @@ function ColumnCorrelationProvider({
54
54
  })
55
55
  );
56
56
  });
57
- const _columns = base.useMacrostratColumns(projectID, inProcess);
57
+ const _columns = dataProvider.useMacrostratColumns(projectID, inProcess);
58
58
  React.useEffect(() => {
59
59
  if (_columns != null) {
60
60
  store.setState({ columns: _columns });
@@ -1 +1 @@
1
- {"version":3,"file":"state.cjs","sources":["../../../src/maps/column-correlation/state.ts"],"sourcesContent":["import { LineString, Point } from \"geojson\";\nimport { create, StoreApi, useStore } from \"zustand\";\nimport type { ColumnGeoJSONRecord } from \"@macrostrat/api-types\";\n// Turf intersection\nimport { lineIntersect } from \"@turf/line-intersect\";\nimport distance from \"@turf/distance\";\nimport { nearestPointOnLine } from \"@turf/nearest-point-on-line\";\nimport { centroid } from \"@turf/centroid\";\nimport {\n createContext,\n useState,\n useContext,\n ReactNode,\n useEffect,\n} from \"react\";\nimport h from \"@macrostrat/hyper\";\nimport { createComputed } from \"zustand-computed\";\nimport { useMacrostratColumns } from \"../../data-provider/base\";\nimport { buffer } from \"@turf/buffer\";\nimport { booleanPointInPolygon } from \"@turf/boolean-point-in-polygon\";\n\nexport interface CorrelationMapInput {\n columns: ColumnGeoJSONRecord[];\n focusedLine: LineString | null;\n}\n\nexport interface CorrelationMapStore extends CorrelationMapInput {\n onClickMap: (event: mapboxgl.MapMouseEvent, point: Point) => void;\n}\n\nexport interface CorrelationProviderProps extends CorrelationMapInput {\n projectID?: number;\n inProcess?: boolean;\n columns: ColumnGeoJSONRecord[] | null;\n children: ReactNode;\n onSelectColumns?: (\n columns: FocusedColumnGeoJSONRecord[],\n line: LineString | null,\n ) => void;\n}\n\nconst CorrelationStoreContext =\n createContext<StoreApi<CorrelationMapStore> | null>(null);\n\ntype ComputedStore = {\n focusedColumns: FocusedColumnGeoJSONRecord[];\n};\n\n/** A computed store that will automatically update when the state changes */\nconst computed = createComputed((state: CorrelationMapStore): ComputedStore => {\n return {\n // We compute the focused columns based on columns and focusedLine\n focusedColumns: buildCorrelationColumns(state.columns, state.focusedLine),\n };\n}) as any;\n\nexport function ColumnCorrelationProvider({\n children,\n columns,\n projectID,\n inProcess,\n focusedLine,\n onSelectColumns,\n}: CorrelationProviderProps) {\n const [store] = useState(() => {\n return create<CorrelationMapStore & ComputedStore>(\n computed((set, get): CorrelationMapStore => {\n return {\n focusedLine,\n projectID,\n columns: null,\n onClickMap(event: mapboxgl.MapMouseEvent, point: Point) {\n const state = get();\n // Check if shift key is pressed\n const shiftKeyPressed = event.originalEvent.shiftKey;\n let existingCoords = state.focusedLine?.coordinates ?? [];\n\n if (existingCoords.length >= 2 && !shiftKeyPressed) {\n // Reset the line to zero length\n existingCoords = [];\n }\n set({\n focusedLine: {\n type: \"LineString\",\n coordinates: [...existingCoords, point.coordinates],\n },\n });\n },\n };\n }),\n );\n });\n\n // Set up the store\n /** TODO: move the fetching of all columns to within the map */\n const _columns = useMacrostratColumns(projectID, inProcess);\n useEffect(() => {\n if (_columns != null) {\n store.setState({ columns: _columns });\n }\n }, [_columns]);\n\n // Kind of an awkward way to do this but we need to allow the selector to run\n const focusedColumns = useStore(store, (state) => state.focusedColumns);\n const _focusedLine = useStore(store, (state) => state.focusedLine);\n\n useEffect(() => {\n onSelectColumns?.(focusedColumns, _focusedLine);\n }, [focusedColumns, _focusedLine]);\n\n return h(CorrelationStoreContext.Provider, { value: store }, children);\n}\n\nexport function useCorrelationMapStore(\n selector: (state: CorrelationMapStore & ComputedStore) => any,\n) {\n const storeApi = useContext(CorrelationStoreContext);\n if (storeApi == null) {\n throw new Error(\"Missing CorrelationMapProvider\");\n }\n return useStore(storeApi, selector);\n}\n\nfunction buildCorrelationColumns(\n columns: ColumnGeoJSONRecord[],\n line: LineString,\n): FocusedColumnGeoJSONRecord[] {\n if (columns == null || line == null || line.coordinates.length < 2) {\n return [];\n }\n return orderColumnsByDistance(\n computeIntersectingColumns(columns, line),\n line,\n );\n}\n\nfunction computeIntersectingColumns(\n columns: ColumnGeoJSONRecord[],\n line: LineString,\n): ColumnGeoJSONRecord[] {\n if (columns == null || line == null) {\n return [];\n }\n\n /** eODP-focused process. Find buffers around line and then find columns intersecting that buffer */\n const bufferedLine = buffer(line, 1, { units: \"degrees\" });\n\n const nearbyPoints = columns.filter((col) => {\n if (col.geometry?.type != \"Point\") {\n return false;\n }\n return booleanPointInPolygon(col.geometry, bufferedLine);\n });\n\n const intersectingPolygons = columns.filter((col) => {\n const poly = col.geometry;\n\n // Some in-process datasets seem to have null geometries\n if (poly == null) return false;\n if (poly.type != \"Polygon\" && poly.type != \"MultiPolygon\") return false;\n\n const intersection = lineIntersect(line, poly);\n return intersection.features.length > 0;\n });\n\n return [...intersectingPolygons, ...nearbyPoints];\n}\n\ninterface FocusedColumnGeoJSONRecord extends ColumnGeoJSONRecord {\n properties: {\n centroid: Point;\n nearestPointOnLine: Point;\n distanceAlongLine: number;\n } & ColumnGeoJSONRecord[\"properties\"];\n}\n\nfunction orderColumnsByDistance(\n columns: ColumnGeoJSONRecord[],\n line: LineString,\n): FocusedColumnGeoJSONRecord[] {\n const centroids = columns.map((col) => centroid(col.geometry));\n const projectedPoints = centroids.map((point) =>\n nearestPointOnLine(line, point),\n );\n const distances = projectedPoints.map((point) =>\n distance(point.geometry.coordinates, line.coordinates[0]),\n );\n\n let newColumns = columns.map((col, i) => {\n return {\n ...col,\n properties: {\n ...col.properties,\n centroid: centroids[i],\n nearestPointOnLine: projectedPoints[i],\n distanceAlongLine: distances[i],\n },\n };\n });\n\n return sorted(newColumns, (d) => d.properties.distanceAlongLine);\n}\n\nfunction sorted(data, accessor: (d) => number) {\n return data.sort((a, b) => accessor(a) - accessor(b));\n}\n"],"names":["createContext","createComputed","useState","create","useMacrostratColumns","useEffect","useStore","h","useContext","buffer","booleanPointInPolygon","lineIntersect","centroid","nearestPointOnLine","distance"],"mappings":"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"}
1
+ {"version":3,"file":"state.cjs","sources":["../../../src/maps/column-correlation/state.ts"],"sourcesContent":["import { LineString, Point } from \"geojson\";\nimport { create, StoreApi, useStore } from \"zustand\";\nimport type { ColumnGeoJSONRecord } from \"@macrostrat/api-types\";\n// Turf intersection\nimport { lineIntersect } from \"@turf/line-intersect\";\nimport distance from \"@turf/distance\";\nimport { nearestPointOnLine } from \"@turf/nearest-point-on-line\";\nimport { centroid } from \"@turf/centroid\";\nimport {\n createContext,\n useState,\n useContext,\n ReactNode,\n useEffect,\n} from \"react\";\nimport h from \"@macrostrat/hyper\";\nimport { createComputed } from \"zustand-computed\";\nimport { useMacrostratColumns } from \"@macrostrat/data-provider\";\nimport { buffer } from \"@turf/buffer\";\nimport { booleanPointInPolygon } from \"@turf/boolean-point-in-polygon\";\n\nexport interface CorrelationMapInput {\n columns: ColumnGeoJSONRecord[];\n focusedLine: LineString | null;\n}\n\nexport interface CorrelationMapStore extends CorrelationMapInput {\n onClickMap: (event: mapboxgl.MapMouseEvent, point: Point) => void;\n projectID?: number;\n}\n\nexport interface CorrelationProviderProps extends CorrelationMapInput {\n projectID?: number;\n inProcess?: boolean;\n columns: ColumnGeoJSONRecord[] | null;\n children: ReactNode;\n onSelectColumns?: (\n columns: FocusedColumnGeoJSONRecord[],\n line: LineString | null,\n ) => void;\n}\n\nconst CorrelationStoreContext =\n createContext<StoreApi<CorrelationMapStore> | null>(null);\n\ntype ComputedStore = {\n focusedColumns: FocusedColumnGeoJSONRecord[];\n};\n\n/** A computed store that will automatically update when the state changes */\nconst computed = createComputed((state: CorrelationMapStore): ComputedStore => {\n return {\n // We compute the focused columns based on columns and focusedLine\n focusedColumns: buildCorrelationColumns(state.columns, state.focusedLine),\n };\n}) as any;\n\nexport function ColumnCorrelationProvider({\n children,\n columns,\n projectID,\n inProcess,\n focusedLine,\n onSelectColumns,\n}: CorrelationProviderProps) {\n const [store] = useState(() => {\n return create<CorrelationMapStore & ComputedStore>(\n computed((set, get): CorrelationMapStore => {\n return {\n focusedLine,\n projectID,\n columns: null,\n onClickMap(event: mapboxgl.MapMouseEvent, point: Point) {\n const state = get();\n // Check if shift key is pressed\n const shiftKeyPressed = event.originalEvent.shiftKey;\n let existingCoords = state.focusedLine?.coordinates ?? [];\n\n if (existingCoords.length >= 2 && !shiftKeyPressed) {\n // Reset the line to zero length\n existingCoords = [];\n }\n set({\n focusedLine: {\n type: \"LineString\",\n coordinates: [...existingCoords, point.coordinates],\n },\n });\n },\n };\n }),\n );\n });\n\n // Set up the store\n /** TODO: move the fetching of all columns to within the map */\n const _columns = useMacrostratColumns(projectID, inProcess);\n useEffect(() => {\n if (_columns != null) {\n store.setState({ columns: _columns });\n }\n }, [_columns]);\n\n // Kind of an awkward way to do this but we need to allow the selector to run\n const focusedColumns = useStore(store, (state) => state.focusedColumns);\n const _focusedLine = useStore(store, (state) => state.focusedLine);\n\n useEffect(() => {\n onSelectColumns?.(focusedColumns, _focusedLine);\n }, [focusedColumns, _focusedLine]);\n\n return h(CorrelationStoreContext.Provider, { value: store }, children);\n}\n\nexport function useCorrelationMapStore(\n selector: (state: CorrelationMapStore & ComputedStore) => any,\n) {\n const storeApi = useContext(CorrelationStoreContext);\n if (storeApi == null) {\n throw new Error(\"Missing CorrelationMapProvider\");\n }\n return useStore(storeApi, selector);\n}\n\nfunction buildCorrelationColumns(\n columns: ColumnGeoJSONRecord[],\n line: LineString,\n): FocusedColumnGeoJSONRecord[] {\n if (columns == null || line == null || line.coordinates.length < 2) {\n return [];\n }\n return orderColumnsByDistance(\n computeIntersectingColumns(columns, line),\n line,\n );\n}\n\nfunction computeIntersectingColumns(\n columns: ColumnGeoJSONRecord[],\n line: LineString,\n): ColumnGeoJSONRecord[] {\n if (columns == null || line == null) {\n return [];\n }\n\n /** eODP-focused process. Find buffers around line and then find columns intersecting that buffer */\n const bufferedLine = buffer(line, 1, { units: \"degrees\" });\n\n const nearbyPoints = columns.filter((col) => {\n if (col.geometry?.type != \"Point\") {\n return false;\n }\n return booleanPointInPolygon(col.geometry, bufferedLine);\n });\n\n const intersectingPolygons = columns.filter((col) => {\n const poly = col.geometry;\n\n // Some in-process datasets seem to have null geometries\n if (poly == null) return false;\n if (poly.type != \"Polygon\" && poly.type != \"MultiPolygon\") return false;\n\n const intersection = lineIntersect(line, poly);\n return intersection.features.length > 0;\n });\n\n return [...intersectingPolygons, ...nearbyPoints];\n}\n\ninterface FocusedColumnGeoJSONRecord extends ColumnGeoJSONRecord {\n properties: {\n centroid: Point;\n nearestPointOnLine: Point;\n distanceAlongLine: number;\n } & ColumnGeoJSONRecord[\"properties\"];\n}\n\nfunction orderColumnsByDistance(\n columns: ColumnGeoJSONRecord[],\n line: LineString,\n): FocusedColumnGeoJSONRecord[] {\n const centroids = columns.map((col) => centroid(col.geometry));\n const projectedPoints = centroids.map((point) =>\n nearestPointOnLine(line, point),\n );\n const distances = projectedPoints.map((point) =>\n distance(point.geometry.coordinates, line.coordinates[0]),\n );\n\n let newColumns = columns.map((col, i) => {\n return {\n ...col,\n properties: {\n ...col.properties,\n centroid: centroids[i],\n nearestPointOnLine: projectedPoints[i],\n distanceAlongLine: distances[i],\n },\n };\n });\n\n return sorted(newColumns, (d) => d.properties.distanceAlongLine);\n}\n\nfunction sorted(data, accessor: (d) => number) {\n return data.sort((a, b) => accessor(a) - accessor(b));\n}\n"],"names":["createContext","createComputed","useState","create","useMacrostratColumns","useEffect","useStore","h","useContext","buffer","booleanPointInPolygon","lineIntersect","centroid","nearestPointOnLine","distance"],"mappings":"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"}
@@ -8,6 +8,7 @@ export interface CorrelationMapInput {
8
8
  }
9
9
  export interface CorrelationMapStore extends CorrelationMapInput {
10
10
  onClickMap: (event: mapboxgl.MapMouseEvent, point: Point) => void;
11
+ projectID?: number;
11
12
  }
12
13
  export interface CorrelationProviderProps extends CorrelationMapInput {
13
14
  projectID?: number;
@@ -6,7 +6,7 @@ import { centroid } from "@turf/centroid";
6
6
  import { useState, useEffect, useContext, createContext } from "react";
7
7
  import h from "@macrostrat/hyper";
8
8
  import { createComputed } from "zustand-computed";
9
- import { useMacrostratColumns } from "../../data-provider/base.js";
9
+ import { useMacrostratColumns } from "@macrostrat/data-provider";
10
10
  import { buffer } from "@turf/buffer";
11
11
  import { booleanPointInPolygon } from "@turf/boolean-point-in-polygon";
12
12
  const CorrelationStoreContext = createContext(null);
@@ -1 +1 @@
1
- {"version":3,"file":"state.js","sources":["../../../src/maps/column-correlation/state.ts"],"sourcesContent":["import { LineString, Point } from \"geojson\";\nimport { create, StoreApi, useStore } from \"zustand\";\nimport type { ColumnGeoJSONRecord } from \"@macrostrat/api-types\";\n// Turf intersection\nimport { lineIntersect } from \"@turf/line-intersect\";\nimport distance from \"@turf/distance\";\nimport { nearestPointOnLine } from \"@turf/nearest-point-on-line\";\nimport { centroid } from \"@turf/centroid\";\nimport {\n createContext,\n useState,\n useContext,\n ReactNode,\n useEffect,\n} from \"react\";\nimport h from \"@macrostrat/hyper\";\nimport { createComputed } from \"zustand-computed\";\nimport { useMacrostratColumns } from \"../../data-provider/base\";\nimport { buffer } from \"@turf/buffer\";\nimport { booleanPointInPolygon } from \"@turf/boolean-point-in-polygon\";\n\nexport interface CorrelationMapInput {\n columns: ColumnGeoJSONRecord[];\n focusedLine: LineString | null;\n}\n\nexport interface CorrelationMapStore extends CorrelationMapInput {\n onClickMap: (event: mapboxgl.MapMouseEvent, point: Point) => void;\n}\n\nexport interface CorrelationProviderProps extends CorrelationMapInput {\n projectID?: number;\n inProcess?: boolean;\n columns: ColumnGeoJSONRecord[] | null;\n children: ReactNode;\n onSelectColumns?: (\n columns: FocusedColumnGeoJSONRecord[],\n line: LineString | null,\n ) => void;\n}\n\nconst CorrelationStoreContext =\n createContext<StoreApi<CorrelationMapStore> | null>(null);\n\ntype ComputedStore = {\n focusedColumns: FocusedColumnGeoJSONRecord[];\n};\n\n/** A computed store that will automatically update when the state changes */\nconst computed = createComputed((state: CorrelationMapStore): ComputedStore => {\n return {\n // We compute the focused columns based on columns and focusedLine\n focusedColumns: buildCorrelationColumns(state.columns, state.focusedLine),\n };\n}) as any;\n\nexport function ColumnCorrelationProvider({\n children,\n columns,\n projectID,\n inProcess,\n focusedLine,\n onSelectColumns,\n}: CorrelationProviderProps) {\n const [store] = useState(() => {\n return create<CorrelationMapStore & ComputedStore>(\n computed((set, get): CorrelationMapStore => {\n return {\n focusedLine,\n projectID,\n columns: null,\n onClickMap(event: mapboxgl.MapMouseEvent, point: Point) {\n const state = get();\n // Check if shift key is pressed\n const shiftKeyPressed = event.originalEvent.shiftKey;\n let existingCoords = state.focusedLine?.coordinates ?? [];\n\n if (existingCoords.length >= 2 && !shiftKeyPressed) {\n // Reset the line to zero length\n existingCoords = [];\n }\n set({\n focusedLine: {\n type: \"LineString\",\n coordinates: [...existingCoords, point.coordinates],\n },\n });\n },\n };\n }),\n );\n });\n\n // Set up the store\n /** TODO: move the fetching of all columns to within the map */\n const _columns = useMacrostratColumns(projectID, inProcess);\n useEffect(() => {\n if (_columns != null) {\n store.setState({ columns: _columns });\n }\n }, [_columns]);\n\n // Kind of an awkward way to do this but we need to allow the selector to run\n const focusedColumns = useStore(store, (state) => state.focusedColumns);\n const _focusedLine = useStore(store, (state) => state.focusedLine);\n\n useEffect(() => {\n onSelectColumns?.(focusedColumns, _focusedLine);\n }, [focusedColumns, _focusedLine]);\n\n return h(CorrelationStoreContext.Provider, { value: store }, children);\n}\n\nexport function useCorrelationMapStore(\n selector: (state: CorrelationMapStore & ComputedStore) => any,\n) {\n const storeApi = useContext(CorrelationStoreContext);\n if (storeApi == null) {\n throw new Error(\"Missing CorrelationMapProvider\");\n }\n return useStore(storeApi, selector);\n}\n\nfunction buildCorrelationColumns(\n columns: ColumnGeoJSONRecord[],\n line: LineString,\n): FocusedColumnGeoJSONRecord[] {\n if (columns == null || line == null || line.coordinates.length < 2) {\n return [];\n }\n return orderColumnsByDistance(\n computeIntersectingColumns(columns, line),\n line,\n );\n}\n\nfunction computeIntersectingColumns(\n columns: ColumnGeoJSONRecord[],\n line: LineString,\n): ColumnGeoJSONRecord[] {\n if (columns == null || line == null) {\n return [];\n }\n\n /** eODP-focused process. Find buffers around line and then find columns intersecting that buffer */\n const bufferedLine = buffer(line, 1, { units: \"degrees\" });\n\n const nearbyPoints = columns.filter((col) => {\n if (col.geometry?.type != \"Point\") {\n return false;\n }\n return booleanPointInPolygon(col.geometry, bufferedLine);\n });\n\n const intersectingPolygons = columns.filter((col) => {\n const poly = col.geometry;\n\n // Some in-process datasets seem to have null geometries\n if (poly == null) return false;\n if (poly.type != \"Polygon\" && poly.type != \"MultiPolygon\") return false;\n\n const intersection = lineIntersect(line, poly);\n return intersection.features.length > 0;\n });\n\n return [...intersectingPolygons, ...nearbyPoints];\n}\n\ninterface FocusedColumnGeoJSONRecord extends ColumnGeoJSONRecord {\n properties: {\n centroid: Point;\n nearestPointOnLine: Point;\n distanceAlongLine: number;\n } & ColumnGeoJSONRecord[\"properties\"];\n}\n\nfunction orderColumnsByDistance(\n columns: ColumnGeoJSONRecord[],\n line: LineString,\n): FocusedColumnGeoJSONRecord[] {\n const centroids = columns.map((col) => centroid(col.geometry));\n const projectedPoints = centroids.map((point) =>\n nearestPointOnLine(line, point),\n );\n const distances = projectedPoints.map((point) =>\n distance(point.geometry.coordinates, line.coordinates[0]),\n );\n\n let newColumns = columns.map((col, i) => {\n return {\n ...col,\n properties: {\n ...col.properties,\n centroid: centroids[i],\n nearestPointOnLine: projectedPoints[i],\n distanceAlongLine: distances[i],\n },\n };\n });\n\n return sorted(newColumns, (d) => d.properties.distanceAlongLine);\n}\n\nfunction sorted(data, accessor: (d) => number) {\n return data.sort((a, b) => accessor(a) - accessor(b));\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"state.js","sources":["../../../src/maps/column-correlation/state.ts"],"sourcesContent":["import { LineString, Point } from \"geojson\";\nimport { create, StoreApi, useStore } from \"zustand\";\nimport type { ColumnGeoJSONRecord } from \"@macrostrat/api-types\";\n// Turf intersection\nimport { lineIntersect } from \"@turf/line-intersect\";\nimport distance from \"@turf/distance\";\nimport { nearestPointOnLine } from \"@turf/nearest-point-on-line\";\nimport { centroid } from \"@turf/centroid\";\nimport {\n createContext,\n useState,\n useContext,\n ReactNode,\n useEffect,\n} from \"react\";\nimport h from \"@macrostrat/hyper\";\nimport { createComputed } from \"zustand-computed\";\nimport { useMacrostratColumns } from \"@macrostrat/data-provider\";\nimport { buffer } from \"@turf/buffer\";\nimport { booleanPointInPolygon } from \"@turf/boolean-point-in-polygon\";\n\nexport interface CorrelationMapInput {\n columns: ColumnGeoJSONRecord[];\n focusedLine: LineString | null;\n}\n\nexport interface CorrelationMapStore extends CorrelationMapInput {\n onClickMap: (event: mapboxgl.MapMouseEvent, point: Point) => void;\n projectID?: number;\n}\n\nexport interface CorrelationProviderProps extends CorrelationMapInput {\n projectID?: number;\n inProcess?: boolean;\n columns: ColumnGeoJSONRecord[] | null;\n children: ReactNode;\n onSelectColumns?: (\n columns: FocusedColumnGeoJSONRecord[],\n line: LineString | null,\n ) => void;\n}\n\nconst CorrelationStoreContext =\n createContext<StoreApi<CorrelationMapStore> | null>(null);\n\ntype ComputedStore = {\n focusedColumns: FocusedColumnGeoJSONRecord[];\n};\n\n/** A computed store that will automatically update when the state changes */\nconst computed = createComputed((state: CorrelationMapStore): ComputedStore => {\n return {\n // We compute the focused columns based on columns and focusedLine\n focusedColumns: buildCorrelationColumns(state.columns, state.focusedLine),\n };\n}) as any;\n\nexport function ColumnCorrelationProvider({\n children,\n columns,\n projectID,\n inProcess,\n focusedLine,\n onSelectColumns,\n}: CorrelationProviderProps) {\n const [store] = useState(() => {\n return create<CorrelationMapStore & ComputedStore>(\n computed((set, get): CorrelationMapStore => {\n return {\n focusedLine,\n projectID,\n columns: null,\n onClickMap(event: mapboxgl.MapMouseEvent, point: Point) {\n const state = get();\n // Check if shift key is pressed\n const shiftKeyPressed = event.originalEvent.shiftKey;\n let existingCoords = state.focusedLine?.coordinates ?? [];\n\n if (existingCoords.length >= 2 && !shiftKeyPressed) {\n // Reset the line to zero length\n existingCoords = [];\n }\n set({\n focusedLine: {\n type: \"LineString\",\n coordinates: [...existingCoords, point.coordinates],\n },\n });\n },\n };\n }),\n );\n });\n\n // Set up the store\n /** TODO: move the fetching of all columns to within the map */\n const _columns = useMacrostratColumns(projectID, inProcess);\n useEffect(() => {\n if (_columns != null) {\n store.setState({ columns: _columns });\n }\n }, [_columns]);\n\n // Kind of an awkward way to do this but we need to allow the selector to run\n const focusedColumns = useStore(store, (state) => state.focusedColumns);\n const _focusedLine = useStore(store, (state) => state.focusedLine);\n\n useEffect(() => {\n onSelectColumns?.(focusedColumns, _focusedLine);\n }, [focusedColumns, _focusedLine]);\n\n return h(CorrelationStoreContext.Provider, { value: store }, children);\n}\n\nexport function useCorrelationMapStore(\n selector: (state: CorrelationMapStore & ComputedStore) => any,\n) {\n const storeApi = useContext(CorrelationStoreContext);\n if (storeApi == null) {\n throw new Error(\"Missing CorrelationMapProvider\");\n }\n return useStore(storeApi, selector);\n}\n\nfunction buildCorrelationColumns(\n columns: ColumnGeoJSONRecord[],\n line: LineString,\n): FocusedColumnGeoJSONRecord[] {\n if (columns == null || line == null || line.coordinates.length < 2) {\n return [];\n }\n return orderColumnsByDistance(\n computeIntersectingColumns(columns, line),\n line,\n );\n}\n\nfunction computeIntersectingColumns(\n columns: ColumnGeoJSONRecord[],\n line: LineString,\n): ColumnGeoJSONRecord[] {\n if (columns == null || line == null) {\n return [];\n }\n\n /** eODP-focused process. Find buffers around line and then find columns intersecting that buffer */\n const bufferedLine = buffer(line, 1, { units: \"degrees\" });\n\n const nearbyPoints = columns.filter((col) => {\n if (col.geometry?.type != \"Point\") {\n return false;\n }\n return booleanPointInPolygon(col.geometry, bufferedLine);\n });\n\n const intersectingPolygons = columns.filter((col) => {\n const poly = col.geometry;\n\n // Some in-process datasets seem to have null geometries\n if (poly == null) return false;\n if (poly.type != \"Polygon\" && poly.type != \"MultiPolygon\") return false;\n\n const intersection = lineIntersect(line, poly);\n return intersection.features.length > 0;\n });\n\n return [...intersectingPolygons, ...nearbyPoints];\n}\n\ninterface FocusedColumnGeoJSONRecord extends ColumnGeoJSONRecord {\n properties: {\n centroid: Point;\n nearestPointOnLine: Point;\n distanceAlongLine: number;\n } & ColumnGeoJSONRecord[\"properties\"];\n}\n\nfunction orderColumnsByDistance(\n columns: ColumnGeoJSONRecord[],\n line: LineString,\n): FocusedColumnGeoJSONRecord[] {\n const centroids = columns.map((col) => centroid(col.geometry));\n const projectedPoints = centroids.map((point) =>\n nearestPointOnLine(line, point),\n );\n const distances = projectedPoints.map((point) =>\n distance(point.geometry.coordinates, line.coordinates[0]),\n );\n\n let newColumns = columns.map((col, i) => {\n return {\n ...col,\n properties: {\n ...col.properties,\n centroid: centroids[i],\n nearestPointOnLine: projectedPoints[i],\n distanceAlongLine: distances[i],\n },\n };\n });\n\n return sorted(newColumns, (d) => d.properties.distanceAlongLine);\n}\n\nfunction sorted(data, accessor: (d) => number) {\n return data.sort((a, b) => accessor(a) - accessor(b));\n}\n"],"names":[],"mappings":"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"}
@@ -3,7 +3,7 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const zustand = require("zustand");
4
4
  const React = require("react");
5
5
  const h = require("@macrostrat/hyper");
6
- const base = require("../../../data-provider/base.cjs");
6
+ const dataProvider = require("@macrostrat/data-provider");
7
7
  const _interopDefault = (e) => e && e.__esModule ? e : { default: e };
8
8
  const h__default = /* @__PURE__ */ _interopDefault(h);
9
9
  const NavigationStoreContext = React.createContext(
@@ -19,7 +19,7 @@ function ColumnNavigationProvider({
19
19
  onSelectColumn,
20
20
  onHoverColumn
21
21
  }) {
22
- base.useMacrostratStore((s) => s.getColumns);
22
+ dataProvider.useMacrostratStore((s) => s.getColumns);
23
23
  const [store] = React.useState(() => {
24
24
  return zustand.create((set, get) => {
25
25
  return {
@@ -41,7 +41,7 @@ function ColumnNavigationProvider({
41
41
  };
42
42
  });
43
43
  });
44
- let _columns = columns ?? base.useMacrostratColumns(projectID, inProcess);
44
+ let _columns = columns ?? dataProvider.useMacrostratColumns(projectID, inProcess);
45
45
  if (columnIDs?.length > 0) {
46
46
  _columns = React.useMemo(() => {
47
47
  return _columns?.filter((d) => columnIDs.includes(d.properties.col_id));
@@ -1 +1 @@
1
- {"version":3,"file":"state.cjs","sources":["../../../../src/maps/column-navigation/mapbox/state.ts"],"sourcesContent":["import { create, StoreApi, useStore } from \"zustand\";\nimport type { ColumnGeoJSONRecordWithID } from \"@macrostrat/api-types\";\nimport {\n createContext,\n useState,\n useContext,\n ReactNode,\n useEffect,\n useMemo,\n} from \"react\";\nimport h from \"@macrostrat/hyper\";\nimport {\n useMacrostratColumns,\n useMacrostratStore,\n} from \"../../../data-provider\";\n\nexport interface NavigationStore {\n columns: ColumnGeoJSONRecordWithID[];\n selectedColumn: number | null;\n hoveredColumn: number | null;\n selectColumn: (columnID: number | null) => void;\n setHoveredColumn: (columnID: number | null) => void;\n}\n\nexport interface NavigationProviderProps {\n projectID?: number;\n inProcess?: boolean;\n selectedColumn?: number | null;\n hoveredColumn?: number | null;\n columns?: ColumnGeoJSONRecordWithID[] | null;\n columnIDs?: number[] | null;\n children: ReactNode;\n onSelectColumn?: (col_id: number | null, column: any) => void;\n onHoverColumn?: (col_id: number | null, column: any) => void;\n}\n\nconst NavigationStoreContext = createContext<StoreApi<NavigationStore> | null>(\n null,\n);\n\nexport function ColumnNavigationProvider({\n children,\n columns,\n columnIDs,\n selectedColumn,\n projectID,\n inProcess,\n onSelectColumn,\n onHoverColumn,\n}: NavigationProviderProps) {\n const getColumns = useMacrostratStore((s) => s.getColumns);\n\n const [store] = useState(() => {\n return create<NavigationStore>((set, get): NavigationStore => {\n return {\n columns: null,\n selectedColumn: null,\n hoveredColumn: null,\n selectColumn(columnID: number | null) {\n set({ selectedColumn: columnID, hoveredColumn: null });\n const { columns } = get();\n const column = columns?.find((d) => d.id == columnID);\n onSelectColumn?.(columnID, column);\n },\n setHoveredColumn(columnID: number | null) {\n set({ hoveredColumn: columnID });\n const { columns } = get();\n const column = columns?.find((d) => d.id == columnID);\n onHoverColumn?.(columnID, column);\n },\n };\n });\n });\n\n // Set up the store\n /** TODO: unify handling of columns between parts of application */\n // useAsyncEffect(async () => {\n // let _columns = columns ?? (await getColumns(projectID, inProcess));\n // store.setState({ columns: _columns, selectedColumn });\n // }, [projectID, inProcess, columns, getColumns]);\n\n let _columns = columns ?? useMacrostratColumns(projectID, inProcess);\n\n // filter columns if specified\n if (columnIDs?.length > 0) {\n _columns = useMemo(() => {\n return _columns?.filter((d) => columnIDs.includes(d.properties.col_id));\n }, [columnIDs, _columns]);\n }\n\n useEffect(() => {\n if (_columns?.length > 0) {\n store.setState({ columns: _columns, selectedColumn });\n }\n }, [_columns]);\n // Update selected column if it is changed externally\n\n // Kind of an awkward way to do this but we need to allow the selector to run\n useEffect(() => {\n const { selectColumn, selectedColumn: _internalSelectedColumn } =\n store.getState();\n if (selectedColumn == _internalSelectedColumn) {\n return;\n }\n selectColumn(selectedColumn);\n }, [selectedColumn]);\n\n return h(NavigationStoreContext.Provider, { value: store }, children);\n}\n\nexport function useColumnNavigationStore(\n selector: (state: NavigationStore) => any,\n) {\n const storeApi = useContext(NavigationStoreContext);\n if (storeApi == null) {\n throw new Error(\"Missing ColumnNavigationProvider\");\n }\n return useStore(storeApi, selector);\n}\n"],"names":["createContext","useMacrostratStore","useState","create","columns","useMacrostratColumns","useMemo","useEffect","h","useContext","useStore"],"mappings":";;;;;;;;AAoCA,MAAM,yBAAyBA,MAAAA;AAAAA,EAC7B;AACF;AAEO,SAAS,yBAAyB;AAAA,EACvC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAA4B;AACPC,0BAAmB,CAAC,MAAM,EAAE,UAAU;AAEzD,QAAM,CAAC,KAAK,IAAIC,MAAAA,SAAS,MAAM;AAC7B,WAAOC,QAAAA,OAAwB,CAAC,KAAK,QAAyB;AAC5D,aAAO;AAAA,QACL,SAAS;AAAA,QACT,gBAAgB;AAAA,QAChB,eAAe;AAAA,QACf,aAAa,UAAyB;AACpC,cAAI,EAAE,gBAAgB,UAAU,eAAe,MAAM;AACrD,gBAAM,EAAE,SAAAC,SAAAA,IAAY,IAAA;AACpB,gBAAM,SAASA,UAAS,KAAK,CAAC,MAAM,EAAE,MAAM,QAAQ;AACpD,2BAAiB,UAAU,MAAM;AAAA,QACnC;AAAA,QACA,iBAAiB,UAAyB;AACxC,cAAI,EAAE,eAAe,UAAU;AAC/B,gBAAM,EAAE,SAAAA,SAAAA,IAAY,IAAA;AACpB,gBAAM,SAASA,UAAS,KAAK,CAAC,MAAM,EAAE,MAAM,QAAQ;AACpD,0BAAgB,UAAU,MAAM;AAAA,QAClC;AAAA,MAAA;AAAA,IAEJ,CAAC;AAAA,EACH,CAAC;AASD,MAAI,WAAW,WAAWC,0BAAqB,WAAW,SAAS;AAGnE,MAAI,WAAW,SAAS,GAAG;AACzB,eAAWC,MAAAA,QAAQ,MAAM;AACvB,aAAO,UAAU,OAAO,CAAC,MAAM,UAAU,SAAS,EAAE,WAAW,MAAM,CAAC;AAAA,IACxE,GAAG,CAAC,WAAW,QAAQ,CAAC;AAAA,EAC1B;AAEAC,QAAAA,UAAU,MAAM;AACd,QAAI,UAAU,SAAS,GAAG;AACxB,YAAM,SAAS,EAAE,SAAS,UAAU,gBAAgB;AAAA,IACtD;AAAA,EACF,GAAG,CAAC,QAAQ,CAAC;AAIbA,QAAAA,UAAU,MAAM;AACd,UAAM,EAAE,cAAc,gBAAgB,wBAAA,IACpC,MAAM,SAAA;AACR,QAAI,kBAAkB,yBAAyB;AAC7C;AAAA,IACF;AACA,iBAAa,cAAc;AAAA,EAC7B,GAAG,CAAC,cAAc,CAAC;AAEnB,SAAOC,WAAAA,QAAE,uBAAuB,UAAU,EAAE,OAAO,MAAA,GAAS,QAAQ;AACtE;AAEO,SAAS,yBACd,UACA;AACA,QAAM,WAAWC,MAAAA,WAAW,sBAAsB;AAClD,MAAI,YAAY,MAAM;AACpB,UAAM,IAAI,MAAM,kCAAkC;AAAA,EACpD;AACA,SAAOC,QAAAA,SAAS,UAAU,QAAQ;AACpC;;;"}
1
+ {"version":3,"file":"state.cjs","sources":["../../../../src/maps/column-navigation/mapbox/state.ts"],"sourcesContent":["import { create, StoreApi, useStore } from \"zustand\";\nimport type { ColumnGeoJSONRecordWithID } from \"@macrostrat/api-types\";\nimport {\n createContext,\n useState,\n useContext,\n ReactNode,\n useEffect,\n useMemo,\n} from \"react\";\nimport h from \"@macrostrat/hyper\";\nimport {\n useMacrostratColumns,\n useMacrostratStore,\n} from \"@macrostrat/data-provider\";\n\nexport interface NavigationStore {\n columns: ColumnGeoJSONRecordWithID[];\n selectedColumn: number | null;\n hoveredColumn: number | null;\n selectColumn: (columnID: number | null) => void;\n setHoveredColumn: (columnID: number | null) => void;\n}\n\nexport interface NavigationProviderProps {\n projectID?: number;\n inProcess?: boolean;\n selectedColumn?: number | null;\n hoveredColumn?: number | null;\n columns?: ColumnGeoJSONRecordWithID[] | null;\n columnIDs?: number[] | null;\n children: ReactNode;\n onSelectColumn?: (col_id: number | null, column: any) => void;\n onHoverColumn?: (col_id: number | null, column: any) => void;\n}\n\nconst NavigationStoreContext = createContext<StoreApi<NavigationStore> | null>(\n null,\n);\n\nexport function ColumnNavigationProvider({\n children,\n columns,\n columnIDs,\n selectedColumn,\n projectID,\n inProcess,\n onSelectColumn,\n onHoverColumn,\n}: NavigationProviderProps) {\n const getColumns = useMacrostratStore((s) => s.getColumns);\n\n const [store] = useState(() => {\n return create<NavigationStore>((set, get): NavigationStore => {\n return {\n columns: null,\n selectedColumn: null,\n hoveredColumn: null,\n selectColumn(columnID: number | null) {\n set({ selectedColumn: columnID, hoveredColumn: null });\n const { columns } = get();\n const column = columns?.find((d) => d.id == columnID);\n onSelectColumn?.(columnID, column);\n },\n setHoveredColumn(columnID: number | null) {\n set({ hoveredColumn: columnID });\n const { columns } = get();\n const column = columns?.find((d) => d.id == columnID);\n onHoverColumn?.(columnID, column);\n },\n };\n });\n });\n\n // Set up the store\n /** TODO: unify handling of columns between parts of application */\n // useAsyncEffect(async () => {\n // let _columns = columns ?? (await getColumns(projectID, inProcess));\n // store.setState({ columns: _columns, selectedColumn });\n // }, [projectID, inProcess, columns, getColumns]);\n\n let _columns = columns ?? useMacrostratColumns(projectID, inProcess);\n\n // filter columns if specified\n if (columnIDs?.length > 0) {\n _columns = useMemo(() => {\n return _columns?.filter((d) => columnIDs.includes(d.properties.col_id));\n }, [columnIDs, _columns]);\n }\n\n useEffect(() => {\n if (_columns?.length > 0) {\n store.setState({ columns: _columns, selectedColumn });\n }\n }, [_columns]);\n // Update selected column if it is changed externally\n\n // Kind of an awkward way to do this but we need to allow the selector to run\n useEffect(() => {\n const { selectColumn, selectedColumn: _internalSelectedColumn } =\n store.getState();\n if (selectedColumn == _internalSelectedColumn) {\n return;\n }\n selectColumn(selectedColumn);\n }, [selectedColumn]);\n\n return h(NavigationStoreContext.Provider, { value: store }, children);\n}\n\nexport function useColumnNavigationStore(\n selector: (state: NavigationStore) => any,\n) {\n const storeApi = useContext(NavigationStoreContext);\n if (storeApi == null) {\n throw new Error(\"Missing ColumnNavigationProvider\");\n }\n return useStore(storeApi, selector);\n}\n"],"names":["createContext","useMacrostratStore","useState","create","columns","useMacrostratColumns","useMemo","useEffect","h","useContext","useStore"],"mappings":";;;;;;;;AAoCA,MAAM,yBAAyBA,MAAAA;AAAAA,EAC7B;AACF;AAEO,SAAS,yBAAyB;AAAA,EACvC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAA4B;AACPC,kCAAmB,CAAC,MAAM,EAAE,UAAU;AAEzD,QAAM,CAAC,KAAK,IAAIC,MAAAA,SAAS,MAAM;AAC7B,WAAOC,QAAAA,OAAwB,CAAC,KAAK,QAAyB;AAC5D,aAAO;AAAA,QACL,SAAS;AAAA,QACT,gBAAgB;AAAA,QAChB,eAAe;AAAA,QACf,aAAa,UAAyB;AACpC,cAAI,EAAE,gBAAgB,UAAU,eAAe,MAAM;AACrD,gBAAM,EAAE,SAAAC,SAAAA,IAAY,IAAA;AACpB,gBAAM,SAASA,UAAS,KAAK,CAAC,MAAM,EAAE,MAAM,QAAQ;AACpD,2BAAiB,UAAU,MAAM;AAAA,QACnC;AAAA,QACA,iBAAiB,UAAyB;AACxC,cAAI,EAAE,eAAe,UAAU;AAC/B,gBAAM,EAAE,SAAAA,SAAAA,IAAY,IAAA;AACpB,gBAAM,SAASA,UAAS,KAAK,CAAC,MAAM,EAAE,MAAM,QAAQ;AACpD,0BAAgB,UAAU,MAAM;AAAA,QAClC;AAAA,MAAA;AAAA,IAEJ,CAAC;AAAA,EACH,CAAC;AASD,MAAI,WAAW,WAAWC,kCAAqB,WAAW,SAAS;AAGnE,MAAI,WAAW,SAAS,GAAG;AACzB,eAAWC,MAAAA,QAAQ,MAAM;AACvB,aAAO,UAAU,OAAO,CAAC,MAAM,UAAU,SAAS,EAAE,WAAW,MAAM,CAAC;AAAA,IACxE,GAAG,CAAC,WAAW,QAAQ,CAAC;AAAA,EAC1B;AAEAC,QAAAA,UAAU,MAAM;AACd,QAAI,UAAU,SAAS,GAAG;AACxB,YAAM,SAAS,EAAE,SAAS,UAAU,gBAAgB;AAAA,IACtD;AAAA,EACF,GAAG,CAAC,QAAQ,CAAC;AAIbA,QAAAA,UAAU,MAAM;AACd,UAAM,EAAE,cAAc,gBAAgB,wBAAA,IACpC,MAAM,SAAA;AACR,QAAI,kBAAkB,yBAAyB;AAC7C;AAAA,IACF;AACA,iBAAa,cAAc;AAAA,EAC7B,GAAG,CAAC,cAAc,CAAC;AAEnB,SAAOC,WAAAA,QAAE,uBAAuB,UAAU,EAAE,OAAO,MAAA,GAAS,QAAQ;AACtE;AAEO,SAAS,yBACd,UACA;AACA,QAAM,WAAWC,MAAAA,WAAW,sBAAsB;AAClD,MAAI,YAAY,MAAM;AACpB,UAAM,IAAI,MAAM,kCAAkC;AAAA,EACpD;AACA,SAAOC,QAAAA,SAAS,UAAU,QAAQ;AACpC;;;"}
@@ -1,7 +1,7 @@
1
1
  import { create, useStore } from "zustand";
2
2
  import { useState, useMemo, useEffect, createContext, useContext } from "react";
3
3
  import h from "@macrostrat/hyper";
4
- import { useMacrostratStore, useMacrostratColumns } from "../../../data-provider/base.js";
4
+ import { useMacrostratStore, useMacrostratColumns } from "@macrostrat/data-provider";
5
5
  const NavigationStoreContext = createContext(
6
6
  null
7
7
  );
@@ -1 +1 @@
1
- {"version":3,"file":"state.js","sources":["../../../../src/maps/column-navigation/mapbox/state.ts"],"sourcesContent":["import { create, StoreApi, useStore } from \"zustand\";\nimport type { ColumnGeoJSONRecordWithID } from \"@macrostrat/api-types\";\nimport {\n createContext,\n useState,\n useContext,\n ReactNode,\n useEffect,\n useMemo,\n} from \"react\";\nimport h from \"@macrostrat/hyper\";\nimport {\n useMacrostratColumns,\n useMacrostratStore,\n} from \"../../../data-provider\";\n\nexport interface NavigationStore {\n columns: ColumnGeoJSONRecordWithID[];\n selectedColumn: number | null;\n hoveredColumn: number | null;\n selectColumn: (columnID: number | null) => void;\n setHoveredColumn: (columnID: number | null) => void;\n}\n\nexport interface NavigationProviderProps {\n projectID?: number;\n inProcess?: boolean;\n selectedColumn?: number | null;\n hoveredColumn?: number | null;\n columns?: ColumnGeoJSONRecordWithID[] | null;\n columnIDs?: number[] | null;\n children: ReactNode;\n onSelectColumn?: (col_id: number | null, column: any) => void;\n onHoverColumn?: (col_id: number | null, column: any) => void;\n}\n\nconst NavigationStoreContext = createContext<StoreApi<NavigationStore> | null>(\n null,\n);\n\nexport function ColumnNavigationProvider({\n children,\n columns,\n columnIDs,\n selectedColumn,\n projectID,\n inProcess,\n onSelectColumn,\n onHoverColumn,\n}: NavigationProviderProps) {\n const getColumns = useMacrostratStore((s) => s.getColumns);\n\n const [store] = useState(() => {\n return create<NavigationStore>((set, get): NavigationStore => {\n return {\n columns: null,\n selectedColumn: null,\n hoveredColumn: null,\n selectColumn(columnID: number | null) {\n set({ selectedColumn: columnID, hoveredColumn: null });\n const { columns } = get();\n const column = columns?.find((d) => d.id == columnID);\n onSelectColumn?.(columnID, column);\n },\n setHoveredColumn(columnID: number | null) {\n set({ hoveredColumn: columnID });\n const { columns } = get();\n const column = columns?.find((d) => d.id == columnID);\n onHoverColumn?.(columnID, column);\n },\n };\n });\n });\n\n // Set up the store\n /** TODO: unify handling of columns between parts of application */\n // useAsyncEffect(async () => {\n // let _columns = columns ?? (await getColumns(projectID, inProcess));\n // store.setState({ columns: _columns, selectedColumn });\n // }, [projectID, inProcess, columns, getColumns]);\n\n let _columns = columns ?? useMacrostratColumns(projectID, inProcess);\n\n // filter columns if specified\n if (columnIDs?.length > 0) {\n _columns = useMemo(() => {\n return _columns?.filter((d) => columnIDs.includes(d.properties.col_id));\n }, [columnIDs, _columns]);\n }\n\n useEffect(() => {\n if (_columns?.length > 0) {\n store.setState({ columns: _columns, selectedColumn });\n }\n }, [_columns]);\n // Update selected column if it is changed externally\n\n // Kind of an awkward way to do this but we need to allow the selector to run\n useEffect(() => {\n const { selectColumn, selectedColumn: _internalSelectedColumn } =\n store.getState();\n if (selectedColumn == _internalSelectedColumn) {\n return;\n }\n selectColumn(selectedColumn);\n }, [selectedColumn]);\n\n return h(NavigationStoreContext.Provider, { value: store }, children);\n}\n\nexport function useColumnNavigationStore(\n selector: (state: NavigationStore) => any,\n) {\n const storeApi = useContext(NavigationStoreContext);\n if (storeApi == null) {\n throw new Error(\"Missing ColumnNavigationProvider\");\n }\n return useStore(storeApi, selector);\n}\n"],"names":["columns"],"mappings":";;;;AAoCA,MAAM,yBAAyB;AAAA,EAC7B;AACF;AAEO,SAAS,yBAAyB;AAAA,EACvC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAA4B;AACP,qBAAmB,CAAC,MAAM,EAAE,UAAU;AAEzD,QAAM,CAAC,KAAK,IAAI,SAAS,MAAM;AAC7B,WAAO,OAAwB,CAAC,KAAK,QAAyB;AAC5D,aAAO;AAAA,QACL,SAAS;AAAA,QACT,gBAAgB;AAAA,QAChB,eAAe;AAAA,QACf,aAAa,UAAyB;AACpC,cAAI,EAAE,gBAAgB,UAAU,eAAe,MAAM;AACrD,gBAAM,EAAE,SAAAA,SAAAA,IAAY,IAAA;AACpB,gBAAM,SAASA,UAAS,KAAK,CAAC,MAAM,EAAE,MAAM,QAAQ;AACpD,2BAAiB,UAAU,MAAM;AAAA,QACnC;AAAA,QACA,iBAAiB,UAAyB;AACxC,cAAI,EAAE,eAAe,UAAU;AAC/B,gBAAM,EAAE,SAAAA,SAAAA,IAAY,IAAA;AACpB,gBAAM,SAASA,UAAS,KAAK,CAAC,MAAM,EAAE,MAAM,QAAQ;AACpD,0BAAgB,UAAU,MAAM;AAAA,QAClC;AAAA,MAAA;AAAA,IAEJ,CAAC;AAAA,EACH,CAAC;AASD,MAAI,WAAW,WAAW,qBAAqB,WAAW,SAAS;AAGnE,MAAI,WAAW,SAAS,GAAG;AACzB,eAAW,QAAQ,MAAM;AACvB,aAAO,UAAU,OAAO,CAAC,MAAM,UAAU,SAAS,EAAE,WAAW,MAAM,CAAC;AAAA,IACxE,GAAG,CAAC,WAAW,QAAQ,CAAC;AAAA,EAC1B;AAEA,YAAU,MAAM;AACd,QAAI,UAAU,SAAS,GAAG;AACxB,YAAM,SAAS,EAAE,SAAS,UAAU,gBAAgB;AAAA,IACtD;AAAA,EACF,GAAG,CAAC,QAAQ,CAAC;AAIb,YAAU,MAAM;AACd,UAAM,EAAE,cAAc,gBAAgB,wBAAA,IACpC,MAAM,SAAA;AACR,QAAI,kBAAkB,yBAAyB;AAC7C;AAAA,IACF;AACA,iBAAa,cAAc;AAAA,EAC7B,GAAG,CAAC,cAAc,CAAC;AAEnB,SAAO,EAAE,uBAAuB,UAAU,EAAE,OAAO,MAAA,GAAS,QAAQ;AACtE;AAEO,SAAS,yBACd,UACA;AACA,QAAM,WAAW,WAAW,sBAAsB;AAClD,MAAI,YAAY,MAAM;AACpB,UAAM,IAAI,MAAM,kCAAkC;AAAA,EACpD;AACA,SAAO,SAAS,UAAU,QAAQ;AACpC;"}
1
+ {"version":3,"file":"state.js","sources":["../../../../src/maps/column-navigation/mapbox/state.ts"],"sourcesContent":["import { create, StoreApi, useStore } from \"zustand\";\nimport type { ColumnGeoJSONRecordWithID } from \"@macrostrat/api-types\";\nimport {\n createContext,\n useState,\n useContext,\n ReactNode,\n useEffect,\n useMemo,\n} from \"react\";\nimport h from \"@macrostrat/hyper\";\nimport {\n useMacrostratColumns,\n useMacrostratStore,\n} from \"@macrostrat/data-provider\";\n\nexport interface NavigationStore {\n columns: ColumnGeoJSONRecordWithID[];\n selectedColumn: number | null;\n hoveredColumn: number | null;\n selectColumn: (columnID: number | null) => void;\n setHoveredColumn: (columnID: number | null) => void;\n}\n\nexport interface NavigationProviderProps {\n projectID?: number;\n inProcess?: boolean;\n selectedColumn?: number | null;\n hoveredColumn?: number | null;\n columns?: ColumnGeoJSONRecordWithID[] | null;\n columnIDs?: number[] | null;\n children: ReactNode;\n onSelectColumn?: (col_id: number | null, column: any) => void;\n onHoverColumn?: (col_id: number | null, column: any) => void;\n}\n\nconst NavigationStoreContext = createContext<StoreApi<NavigationStore> | null>(\n null,\n);\n\nexport function ColumnNavigationProvider({\n children,\n columns,\n columnIDs,\n selectedColumn,\n projectID,\n inProcess,\n onSelectColumn,\n onHoverColumn,\n}: NavigationProviderProps) {\n const getColumns = useMacrostratStore((s) => s.getColumns);\n\n const [store] = useState(() => {\n return create<NavigationStore>((set, get): NavigationStore => {\n return {\n columns: null,\n selectedColumn: null,\n hoveredColumn: null,\n selectColumn(columnID: number | null) {\n set({ selectedColumn: columnID, hoveredColumn: null });\n const { columns } = get();\n const column = columns?.find((d) => d.id == columnID);\n onSelectColumn?.(columnID, column);\n },\n setHoveredColumn(columnID: number | null) {\n set({ hoveredColumn: columnID });\n const { columns } = get();\n const column = columns?.find((d) => d.id == columnID);\n onHoverColumn?.(columnID, column);\n },\n };\n });\n });\n\n // Set up the store\n /** TODO: unify handling of columns between parts of application */\n // useAsyncEffect(async () => {\n // let _columns = columns ?? (await getColumns(projectID, inProcess));\n // store.setState({ columns: _columns, selectedColumn });\n // }, [projectID, inProcess, columns, getColumns]);\n\n let _columns = columns ?? useMacrostratColumns(projectID, inProcess);\n\n // filter columns if specified\n if (columnIDs?.length > 0) {\n _columns = useMemo(() => {\n return _columns?.filter((d) => columnIDs.includes(d.properties.col_id));\n }, [columnIDs, _columns]);\n }\n\n useEffect(() => {\n if (_columns?.length > 0) {\n store.setState({ columns: _columns, selectedColumn });\n }\n }, [_columns]);\n // Update selected column if it is changed externally\n\n // Kind of an awkward way to do this but we need to allow the selector to run\n useEffect(() => {\n const { selectColumn, selectedColumn: _internalSelectedColumn } =\n store.getState();\n if (selectedColumn == _internalSelectedColumn) {\n return;\n }\n selectColumn(selectedColumn);\n }, [selectedColumn]);\n\n return h(NavigationStoreContext.Provider, { value: store }, children);\n}\n\nexport function useColumnNavigationStore(\n selector: (state: NavigationStore) => any,\n) {\n const storeApi = useContext(NavigationStoreContext);\n if (storeApi == null) {\n throw new Error(\"Missing ColumnNavigationProvider\");\n }\n return useStore(storeApi, selector);\n}\n"],"names":["columns"],"mappings":";;;;AAoCA,MAAM,yBAAyB;AAAA,EAC7B;AACF;AAEO,SAAS,yBAAyB;AAAA,EACvC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAA4B;AACP,qBAAmB,CAAC,MAAM,EAAE,UAAU;AAEzD,QAAM,CAAC,KAAK,IAAI,SAAS,MAAM;AAC7B,WAAO,OAAwB,CAAC,KAAK,QAAyB;AAC5D,aAAO;AAAA,QACL,SAAS;AAAA,QACT,gBAAgB;AAAA,QAChB,eAAe;AAAA,QACf,aAAa,UAAyB;AACpC,cAAI,EAAE,gBAAgB,UAAU,eAAe,MAAM;AACrD,gBAAM,EAAE,SAAAA,SAAAA,IAAY,IAAA;AACpB,gBAAM,SAASA,UAAS,KAAK,CAAC,MAAM,EAAE,MAAM,QAAQ;AACpD,2BAAiB,UAAU,MAAM;AAAA,QACnC;AAAA,QACA,iBAAiB,UAAyB;AACxC,cAAI,EAAE,eAAe,UAAU;AAC/B,gBAAM,EAAE,SAAAA,SAAAA,IAAY,IAAA;AACpB,gBAAM,SAASA,UAAS,KAAK,CAAC,MAAM,EAAE,MAAM,QAAQ;AACpD,0BAAgB,UAAU,MAAM;AAAA,QAClC;AAAA,MAAA;AAAA,IAEJ,CAAC;AAAA,EACH,CAAC;AASD,MAAI,WAAW,WAAW,qBAAqB,WAAW,SAAS;AAGnE,MAAI,WAAW,SAAS,GAAG;AACzB,eAAW,QAAQ,MAAM;AACvB,aAAO,UAAU,OAAO,CAAC,MAAM,UAAU,SAAS,EAAE,WAAW,MAAM,CAAC;AAAA,IACxE,GAAG,CAAC,WAAW,QAAQ,CAAC;AAAA,EAC1B;AAEA,YAAU,MAAM;AACd,QAAI,UAAU,SAAS,GAAG;AACxB,YAAM,SAAS,EAAE,SAAS,UAAU,gBAAgB;AAAA,IACtD;AAAA,EACF,GAAG,CAAC,QAAQ,CAAC;AAIb,YAAU,MAAM;AACd,UAAM,EAAE,cAAc,gBAAgB,wBAAA,IACpC,MAAM,SAAA;AACR,QAAI,kBAAkB,yBAAyB;AAC7C;AAAA,IACF;AACA,iBAAa,cAAc;AAAA,EAC7B,GAAG,CAAC,cAAc,CAAC;AAEnB,SAAO,EAAE,uBAAuB,UAAU,EAAE,OAAO,MAAA,GAAS,QAAQ;AACtE;AAEO,SAAS,yBACd,UACA;AACA,QAAM,WAAW,WAAW,sBAAsB;AAClD,MAAI,YAAY,MAAM;AACpB,UAAM,IAAI,MAAM,kCAAkC;AAAA,EACpD;AACA,SAAO,SAAS,UAAU,QAAQ;AACpC;"}
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const dataProvider = require("@macrostrat/data-provider");
4
+ const uiComponents = require("@macrostrat/ui-components");
5
+ function useColumnFeatures({
6
+ status_code,
7
+ project_id,
8
+ format = "geojson"
9
+ }) {
10
+ const fetch = dataProvider.useMacrostratFetch();
11
+ let statusCode = ["active"];
12
+ if (status_code == "in process") {
13
+ statusCode.push("in process");
14
+ }
15
+ return uiComponents.useAsyncMemo(async () => {
16
+ return await dataProvider.fetchAllColumns({
17
+ projectID: project_id,
18
+ statusCode,
19
+ format,
20
+ fetch
21
+ });
22
+ }, [project_id, status_code, format]);
23
+ }
24
+ exports.useColumnFeatures = useColumnFeatures;
25
+ //# sourceMappingURL=data-fetcher.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-fetcher.cjs","sources":["../../../../src/maps/column-navigation/svg/data-fetcher.ts"],"sourcesContent":["import {\n ColumnStatusCode,\n fetchAllColumns,\n useMacrostratFetch,\n} from \"@macrostrat/data-provider\";\nimport { useAsyncMemo } from \"@macrostrat/ui-components\";\n\nexport function useColumnFeatures({\n status_code,\n project_id,\n format = \"geojson\",\n}: {\n apiRoute?: string;\n status_code?: string;\n project_id?: number;\n format?: \"geojson\" | \"topojson\" | \"geojson_bare\";\n}) {\n /** Legacy fetcher for column features */\n const fetch = useMacrostratFetch();\n\n let statusCode: ColumnStatusCode[] = [\"active\"];\n if (status_code == \"in process\") {\n statusCode.push(\"in process\");\n }\n\n return useAsyncMemo(async () => {\n return await fetchAllColumns({\n projectID: project_id,\n statusCode: statusCode,\n format,\n fetch,\n });\n }, [project_id, status_code, format]);\n}\n"],"names":["useMacrostratFetch","useAsyncMemo","fetchAllColumns"],"mappings":";;;;AAOO,SAAS,kBAAkB;AAAA,EAChC;AAAA,EACA;AAAA,EACA,SAAS;AACX,GAKG;AAED,QAAM,QAAQA,aAAAA,mBAAA;AAEd,MAAI,aAAiC,CAAC,QAAQ;AAC9C,MAAI,eAAe,cAAc;AAC/B,eAAW,KAAK,YAAY;AAAA,EAC9B;AAEA,SAAOC,aAAAA,aAAa,YAAY;AAC9B,WAAO,MAAMC,aAAAA,gBAAgB;AAAA,MAC3B,WAAW;AAAA,MACX;AAAA,MACA;AAAA,MACA;AAAA,IAAA,CACD;AAAA,EACH,GAAG,CAAC,YAAY,aAAa,MAAM,CAAC;AACtC;;"}
@@ -0,0 +1,6 @@
1
+ export declare function useColumnFeatures({ status_code, project_id, format, }: {
2
+ apiRoute?: string;
3
+ status_code?: string;
4
+ project_id?: number;
5
+ format?: "geojson" | "topojson" | "geojson_bare";
6
+ }): import('@macrostrat/api-types').ColumnGeoJSONRecord[];
@@ -0,0 +1,25 @@
1
+ import { useMacrostratFetch, fetchAllColumns } from "@macrostrat/data-provider";
2
+ import { useAsyncMemo } from "@macrostrat/ui-components";
3
+ function useColumnFeatures({
4
+ status_code,
5
+ project_id,
6
+ format = "geojson"
7
+ }) {
8
+ const fetch = useMacrostratFetch();
9
+ let statusCode = ["active"];
10
+ if (status_code == "in process") {
11
+ statusCode.push("in process");
12
+ }
13
+ return useAsyncMemo(async () => {
14
+ return await fetchAllColumns({
15
+ projectID: project_id,
16
+ statusCode,
17
+ format,
18
+ fetch
19
+ });
20
+ }, [project_id, status_code, format]);
21
+ }
22
+ export {
23
+ useColumnFeatures
24
+ };
25
+ //# sourceMappingURL=data-fetcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-fetcher.js","sources":["../../../../src/maps/column-navigation/svg/data-fetcher.ts"],"sourcesContent":["import {\n ColumnStatusCode,\n fetchAllColumns,\n useMacrostratFetch,\n} from \"@macrostrat/data-provider\";\nimport { useAsyncMemo } from \"@macrostrat/ui-components\";\n\nexport function useColumnFeatures({\n status_code,\n project_id,\n format = \"geojson\",\n}: {\n apiRoute?: string;\n status_code?: string;\n project_id?: number;\n format?: \"geojson\" | \"topojson\" | \"geojson_bare\";\n}) {\n /** Legacy fetcher for column features */\n const fetch = useMacrostratFetch();\n\n let statusCode: ColumnStatusCode[] = [\"active\"];\n if (status_code == \"in process\") {\n statusCode.push(\"in process\");\n }\n\n return useAsyncMemo(async () => {\n return await fetchAllColumns({\n projectID: project_id,\n statusCode: statusCode,\n format,\n fetch,\n });\n }, [project_id, status_code, format]);\n}\n"],"names":[],"mappings":";;AAOO,SAAS,kBAAkB;AAAA,EAChC;AAAA,EACA;AAAA,EACA,SAAS;AACX,GAKG;AAED,QAAM,QAAQ,mBAAA;AAEd,MAAI,aAAiC,CAAC,QAAQ;AAC9C,MAAI,eAAe,cAAc;AAC/B,eAAW,KAAK,YAAY;AAAA,EAC9B;AAEA,SAAO,aAAa,YAAY;AAC9B,WAAO,MAAM,gBAAgB;AAAA,MAC3B,WAAW;AAAA,MACX;AAAA,MACA;AAAA,MACA;AAAA,IAAA,CACD;AAAA,EACH,GAAG,CAAC,YAAY,aAAa,MAAM,CAAC;AACtC;"}
@@ -5,8 +5,8 @@ const svgMapComponents = require("@macrostrat/svg-map-components");
5
5
  const uiComponents = require("@macrostrat/ui-components");
6
6
  const chroma = require("chroma-js");
7
7
  const React = require("react");
8
+ const dataFetcher = require("./data-fetcher.cjs");
8
9
  const keyboardNavigation = require("../utils/keyboard-navigation.cjs");
9
- const fetch = require("../../../data-provider/fetch.cjs");
10
10
  const _interopDefault = (e) => e && e.__esModule ? e : { default: e };
11
11
  const h__default = /* @__PURE__ */ _interopDefault(h);
12
12
  const chroma__default = /* @__PURE__ */ _interopDefault(chroma);
@@ -133,8 +133,7 @@ const Columns = (props) => {
133
133
  showDebugLayers = false,
134
134
  format = "topojson"
135
135
  } = props;
136
- let features = fetch.useColumnFeatures({
137
- apiRoute,
136
+ let features = dataFetcher.useColumnFeatures({
138
137
  status_code,
139
138
  project_id,
140
139
  format
@@ -1 +1 @@
1
- {"version":3,"file":"layers.cjs","sources":["../../../../src/maps/column-navigation/svg/layers.ts"],"sourcesContent":["import h from \"@macrostrat/hyper\";\nimport {\n Feature,\n FeatureLayer,\n MapContext,\n} from \"@macrostrat/svg-map-components\";\nimport { useAPIResult, useKeyHandler } from \"@macrostrat/ui-components\";\nimport chroma from \"chroma-js\";\nimport { ExtendedFeature } from \"d3-geo\";\nimport { Polygon } from \"geojson\";\nimport { useContext, useMemo } from \"react\";\nimport { useColumnFeatures } from \"../../../data-provider\";\nimport {\n buildKeyMapping,\n buildTriangulation,\n} from \"../utils/keyboard-navigation\";\n\nconst defaultStyle = {\n fill: \"rgb(239, 180, 249)\",\n stroke: \"magenta\",\n};\n\nexport function MeasurementsLayer(props) {\n const { style = defaultStyle, ...params } = props;\n const res: any = useAPIResult(\"/measurements\", {\n ...params,\n format: \"geojson\",\n response: \"light\",\n });\n if (res == null) return null;\n\n return h(FeatureLayer, {\n useCanvas: false,\n style,\n features: res.features?.filter((d) => d.properties.unit_id != null) ?? [],\n });\n}\n\ntype ColumnProps = { col_id: number };\n\ntype ColumnFeature = ExtendedFeature<Polygon, ColumnProps>;\n\nfunction ColumnFeatures(props) {\n const {\n features,\n onClick,\n color = \"rgba(150,150,150, 1)\",\n singleFeature = true,\n } = props;\n\n const c = chroma(color);\n\n return h(\n FeatureLayer,\n {\n className: \"columns\",\n useCanvas: onClick == null,\n style: {\n fill: c.alpha(0.2).css(),\n stroke: c.alpha(0.4).css(),\n },\n },\n features?.map((f) => {\n return h(Feature, {\n id: f.id ?? f.properties.col_id,\n onClick,\n feature: f,\n });\n }),\n );\n}\n\nenum MacrostratStatusCode {\n InProcess = \"in process\",\n}\n\ninterface ColumnNavProps {\n col_id: number;\n status_code?: MacrostratStatusCode;\n project_id?: number;\n onChange(col_id: number): void;\n}\n\ninterface KeyboardNavProps extends ColumnNavProps {\n features: ColumnFeature[];\n showLayers: boolean;\n}\n\nfunction ColumnKeyboardNavigation(props: KeyboardNavProps) {\n /** Keyboard navigation of columns using a Delaunay triangulation */\n const {\n features = [],\n col_id = null,\n onChange,\n showLayers = false,\n ...projectArgs\n } = props;\n const { projection } = useContext(MapContext);\n const { centroids, tri } = useMemo(\n () => buildTriangulation(features),\n [features],\n );\n\n const currentIndex = useMemo(() => {\n return features.findIndex((d) => d.properties.col_id == col_id);\n }, [features, col_id]);\n\n const neighbors = tri.delaunay.neighbors[currentIndex];\n\n const keyMapping = useMemo(() => {\n return buildKeyMapping(neighbors, centroids, currentIndex, projection);\n }, [neighbors, currentIndex]);\n\n useKeyHandler(\n (event) => {\n const nextColumnIx = keyMapping[event.keyCode];\n if (nextColumnIx == null) return;\n // @ts-ignore\n onChange(features[nextColumnIx]);\n },\n [keyMapping],\n );\n\n if (neighbors == null) return null;\n const neighborFeatures = neighbors.map((d) => features[d]);\n\n return h.if(showLayers)([\n h(FeatureLayer, {\n features: tri.links().features,\n useCanvas: false,\n style: {\n stroke: \"purple\",\n fill: \"transparent\",\n },\n }),\n h(FeatureLayer, {\n features: neighborFeatures,\n useCanvas: false,\n style: {\n stroke: \"rgb(93, 101, 212)\",\n strokeWidth: 3,\n fill: \"rgba(93, 101, 212, 0.5)\",\n },\n }),\n h(FeatureLayer, {\n features: [\n {\n type: \"Feature\",\n geometry: {\n type: \"MultiPoint\",\n coordinates: centroids,\n },\n },\n ],\n useCanvas: false,\n style: {\n r: 1,\n fill: \"purple\",\n },\n }),\n ]);\n}\n\ninterface ColumnExtraInfo {\n apiRoute?: string;\n color?: string;\n filterColumns?(d: ColumnFeature): boolean;\n showDebugLayers?: boolean;\n format?: \"topojson\" | \"geojson\";\n}\n\nconst Columns = (props: ColumnNavProps & ColumnExtraInfo) => {\n const {\n apiRoute = \"/columns\",\n onChange,\n col_id = null,\n status_code,\n project_id,\n color,\n filterColumns,\n showDebugLayers = false,\n format = \"topojson\",\n } = props;\n\n let features: any[] = useColumnFeatures({\n apiRoute,\n status_code,\n project_id,\n format,\n }) as any;\n\n if (features == null) return null;\n\n if (filterColumns != null) {\n features = features.filter(filterColumns);\n }\n\n return h([\n h(ColumnKeyboardNavigation, {\n features,\n col_id,\n onChange,\n status_code,\n project_id,\n showLayers: showDebugLayers,\n }),\n h(ColumnFeatures, { features, onClick: onChange, color }),\n ]);\n};\n\nconst ColumnCenters = (props: ColumnNavProps) => {\n return h(Columns, { apiRoute: \"/defs/columns\", ...props });\n};\n\nconst CurrentColumn = (props) => {\n const { feature } = props;\n return h(FeatureLayer, {\n features: [feature],\n style: {\n fill: \"rgba(255,0,0,0.4)\",\n stroke: \"rgba(255,0,0,0.6)\",\n strokeWidth: 2,\n },\n });\n};\n\nexport {\n Columns,\n CurrentColumn,\n ColumnCenters,\n ColumnFeatures,\n ColumnKeyboardNavigation,\n};\n"],"names":["useAPIResult","h","FeatureLayer","chroma","Feature","useContext","MapContext","useMemo","buildTriangulation","buildKeyMapping","useKeyHandler","useColumnFeatures"],"mappings":"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"}
1
+ {"version":3,"file":"layers.cjs","sources":["../../../../src/maps/column-navigation/svg/layers.ts"],"sourcesContent":["import h from \"@macrostrat/hyper\";\nimport {\n Feature,\n FeatureLayer,\n MapContext,\n} from \"@macrostrat/svg-map-components\";\nimport { useAPIResult, useKeyHandler } from \"@macrostrat/ui-components\";\nimport chroma from \"chroma-js\";\nimport { ExtendedFeature } from \"d3-geo\";\nimport { Polygon } from \"geojson\";\nimport { useContext, useMemo } from \"react\";\nimport { useColumnFeatures } from \"./data-fetcher\";\nimport {\n buildKeyMapping,\n buildTriangulation,\n} from \"../utils/keyboard-navigation\";\n\nconst defaultStyle = {\n fill: \"rgb(239, 180, 249)\",\n stroke: \"magenta\",\n};\n\nexport function MeasurementsLayer(props) {\n const { style = defaultStyle, ...params } = props;\n const res: any = useAPIResult(\"/measurements\", {\n ...params,\n format: \"geojson\",\n response: \"light\",\n });\n if (res == null) return null;\n\n return h(FeatureLayer, {\n useCanvas: false,\n style,\n features: res.features?.filter((d) => d.properties.unit_id != null) ?? [],\n });\n}\n\ntype ColumnProps = { col_id: number };\n\ntype ColumnFeature = ExtendedFeature<Polygon, ColumnProps>;\n\nfunction ColumnFeatures(props) {\n const {\n features,\n onClick,\n color = \"rgba(150,150,150, 1)\",\n singleFeature = true,\n } = props;\n\n const c = chroma(color);\n\n return h(\n FeatureLayer,\n {\n className: \"columns\",\n useCanvas: onClick == null,\n style: {\n fill: c.alpha(0.2).css(),\n stroke: c.alpha(0.4).css(),\n },\n },\n features?.map((f) => {\n return h(Feature, {\n id: f.id ?? f.properties.col_id,\n onClick,\n feature: f,\n });\n }),\n );\n}\n\nenum MacrostratStatusCode {\n InProcess = \"in process\",\n}\n\ninterface ColumnNavProps {\n col_id: number;\n status_code?: MacrostratStatusCode;\n project_id?: number;\n onChange(col_id: number): void;\n}\n\ninterface KeyboardNavProps extends ColumnNavProps {\n features: ColumnFeature[];\n showLayers: boolean;\n}\n\nfunction ColumnKeyboardNavigation(props: KeyboardNavProps) {\n /** Keyboard navigation of columns using a Delaunay triangulation */\n const {\n features = [],\n col_id = null,\n onChange,\n showLayers = false,\n ...projectArgs\n } = props;\n const { projection } = useContext(MapContext);\n const { centroids, tri } = useMemo(\n () => buildTriangulation(features),\n [features],\n );\n\n const currentIndex = useMemo(() => {\n return features.findIndex((d) => d.properties.col_id == col_id);\n }, [features, col_id]);\n\n const neighbors = tri.delaunay.neighbors[currentIndex];\n\n const keyMapping = useMemo(() => {\n return buildKeyMapping(neighbors, centroids, currentIndex, projection);\n }, [neighbors, currentIndex]);\n\n useKeyHandler(\n (event) => {\n const nextColumnIx = keyMapping[event.keyCode];\n if (nextColumnIx == null) return;\n // @ts-ignore\n onChange(features[nextColumnIx]);\n },\n [keyMapping],\n );\n\n if (neighbors == null) return null;\n const neighborFeatures = neighbors.map((d) => features[d]);\n\n return h.if(showLayers)([\n h(FeatureLayer, {\n features: tri.links().features,\n useCanvas: false,\n style: {\n stroke: \"purple\",\n fill: \"transparent\",\n },\n }),\n h(FeatureLayer, {\n features: neighborFeatures,\n useCanvas: false,\n style: {\n stroke: \"rgb(93, 101, 212)\",\n strokeWidth: 3,\n fill: \"rgba(93, 101, 212, 0.5)\",\n },\n }),\n h(FeatureLayer, {\n features: [\n {\n type: \"Feature\",\n geometry: {\n type: \"MultiPoint\",\n coordinates: centroids,\n },\n },\n ],\n useCanvas: false,\n style: {\n r: 1,\n fill: \"purple\",\n },\n }),\n ]);\n}\n\ninterface ColumnExtraInfo {\n apiRoute?: string;\n color?: string;\n filterColumns?(d: ColumnFeature): boolean;\n showDebugLayers?: boolean;\n format?: \"topojson\" | \"geojson\";\n}\n\nconst Columns = (props: ColumnNavProps & ColumnExtraInfo) => {\n const {\n apiRoute = \"/columns\",\n onChange,\n col_id = null,\n status_code,\n project_id,\n color,\n filterColumns,\n showDebugLayers = false,\n format = \"topojson\",\n } = props;\n\n let features: any[] = useColumnFeatures({\n apiRoute,\n status_code,\n project_id,\n format,\n }) as any;\n\n if (features == null) return null;\n\n if (filterColumns != null) {\n features = features.filter(filterColumns);\n }\n\n return h([\n h(ColumnKeyboardNavigation, {\n features,\n col_id,\n onChange,\n status_code,\n project_id,\n showLayers: showDebugLayers,\n }),\n h(ColumnFeatures, { features, onClick: onChange, color }),\n ]);\n};\n\nconst ColumnCenters = (props: ColumnNavProps) => {\n return h(Columns, { apiRoute: \"/defs/columns\", ...props });\n};\n\nconst CurrentColumn = (props) => {\n const { feature } = props;\n return h(FeatureLayer, {\n features: [feature],\n style: {\n fill: \"rgba(255,0,0,0.4)\",\n stroke: \"rgba(255,0,0,0.6)\",\n strokeWidth: 2,\n },\n });\n};\n\nexport {\n Columns,\n CurrentColumn,\n ColumnCenters,\n ColumnFeatures,\n ColumnKeyboardNavigation,\n};\n"],"names":["useAPIResult","h","FeatureLayer","chroma","Feature","useContext","MapContext","useMemo","buildTriangulation","buildKeyMapping","useKeyHandler","useColumnFeatures"],"mappings":"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"}
@@ -3,8 +3,8 @@ import { FeatureLayer, Feature, MapContext } from "@macrostrat/svg-map-component
3
3
  import { useKeyHandler, useAPIResult } from "@macrostrat/ui-components";
4
4
  import chroma from "chroma-js";
5
5
  import { useContext, useMemo } from "react";
6
+ import { useColumnFeatures } from "./data-fetcher.js";
6
7
  import { buildTriangulation, buildKeyMapping } from "../utils/keyboard-navigation.js";
7
- import { useColumnFeatures } from "../../../data-provider/fetch.js";
8
8
  const defaultStyle = {
9
9
  fill: "rgb(239, 180, 249)",
10
10
  stroke: "magenta"
@@ -129,7 +129,6 @@ const Columns = (props) => {
129
129
  format = "topojson"
130
130
  } = props;
131
131
  let features = useColumnFeatures({
132
- apiRoute,
133
132
  status_code,
134
133
  project_id,
135
134
  format
@@ -1 +1 @@
1
- {"version":3,"file":"layers.js","sources":["../../../../src/maps/column-navigation/svg/layers.ts"],"sourcesContent":["import h from \"@macrostrat/hyper\";\nimport {\n Feature,\n FeatureLayer,\n MapContext,\n} from \"@macrostrat/svg-map-components\";\nimport { useAPIResult, useKeyHandler } from \"@macrostrat/ui-components\";\nimport chroma from \"chroma-js\";\nimport { ExtendedFeature } from \"d3-geo\";\nimport { Polygon } from \"geojson\";\nimport { useContext, useMemo } from \"react\";\nimport { useColumnFeatures } from \"../../../data-provider\";\nimport {\n buildKeyMapping,\n buildTriangulation,\n} from \"../utils/keyboard-navigation\";\n\nconst defaultStyle = {\n fill: \"rgb(239, 180, 249)\",\n stroke: \"magenta\",\n};\n\nexport function MeasurementsLayer(props) {\n const { style = defaultStyle, ...params } = props;\n const res: any = useAPIResult(\"/measurements\", {\n ...params,\n format: \"geojson\",\n response: \"light\",\n });\n if (res == null) return null;\n\n return h(FeatureLayer, {\n useCanvas: false,\n style,\n features: res.features?.filter((d) => d.properties.unit_id != null) ?? [],\n });\n}\n\ntype ColumnProps = { col_id: number };\n\ntype ColumnFeature = ExtendedFeature<Polygon, ColumnProps>;\n\nfunction ColumnFeatures(props) {\n const {\n features,\n onClick,\n color = \"rgba(150,150,150, 1)\",\n singleFeature = true,\n } = props;\n\n const c = chroma(color);\n\n return h(\n FeatureLayer,\n {\n className: \"columns\",\n useCanvas: onClick == null,\n style: {\n fill: c.alpha(0.2).css(),\n stroke: c.alpha(0.4).css(),\n },\n },\n features?.map((f) => {\n return h(Feature, {\n id: f.id ?? f.properties.col_id,\n onClick,\n feature: f,\n });\n }),\n );\n}\n\nenum MacrostratStatusCode {\n InProcess = \"in process\",\n}\n\ninterface ColumnNavProps {\n col_id: number;\n status_code?: MacrostratStatusCode;\n project_id?: number;\n onChange(col_id: number): void;\n}\n\ninterface KeyboardNavProps extends ColumnNavProps {\n features: ColumnFeature[];\n showLayers: boolean;\n}\n\nfunction ColumnKeyboardNavigation(props: KeyboardNavProps) {\n /** Keyboard navigation of columns using a Delaunay triangulation */\n const {\n features = [],\n col_id = null,\n onChange,\n showLayers = false,\n ...projectArgs\n } = props;\n const { projection } = useContext(MapContext);\n const { centroids, tri } = useMemo(\n () => buildTriangulation(features),\n [features],\n );\n\n const currentIndex = useMemo(() => {\n return features.findIndex((d) => d.properties.col_id == col_id);\n }, [features, col_id]);\n\n const neighbors = tri.delaunay.neighbors[currentIndex];\n\n const keyMapping = useMemo(() => {\n return buildKeyMapping(neighbors, centroids, currentIndex, projection);\n }, [neighbors, currentIndex]);\n\n useKeyHandler(\n (event) => {\n const nextColumnIx = keyMapping[event.keyCode];\n if (nextColumnIx == null) return;\n // @ts-ignore\n onChange(features[nextColumnIx]);\n },\n [keyMapping],\n );\n\n if (neighbors == null) return null;\n const neighborFeatures = neighbors.map((d) => features[d]);\n\n return h.if(showLayers)([\n h(FeatureLayer, {\n features: tri.links().features,\n useCanvas: false,\n style: {\n stroke: \"purple\",\n fill: \"transparent\",\n },\n }),\n h(FeatureLayer, {\n features: neighborFeatures,\n useCanvas: false,\n style: {\n stroke: \"rgb(93, 101, 212)\",\n strokeWidth: 3,\n fill: \"rgba(93, 101, 212, 0.5)\",\n },\n }),\n h(FeatureLayer, {\n features: [\n {\n type: \"Feature\",\n geometry: {\n type: \"MultiPoint\",\n coordinates: centroids,\n },\n },\n ],\n useCanvas: false,\n style: {\n r: 1,\n fill: \"purple\",\n },\n }),\n ]);\n}\n\ninterface ColumnExtraInfo {\n apiRoute?: string;\n color?: string;\n filterColumns?(d: ColumnFeature): boolean;\n showDebugLayers?: boolean;\n format?: \"topojson\" | \"geojson\";\n}\n\nconst Columns = (props: ColumnNavProps & ColumnExtraInfo) => {\n const {\n apiRoute = \"/columns\",\n onChange,\n col_id = null,\n status_code,\n project_id,\n color,\n filterColumns,\n showDebugLayers = false,\n format = \"topojson\",\n } = props;\n\n let features: any[] = useColumnFeatures({\n apiRoute,\n status_code,\n project_id,\n format,\n }) as any;\n\n if (features == null) return null;\n\n if (filterColumns != null) {\n features = features.filter(filterColumns);\n }\n\n return h([\n h(ColumnKeyboardNavigation, {\n features,\n col_id,\n onChange,\n status_code,\n project_id,\n showLayers: showDebugLayers,\n }),\n h(ColumnFeatures, { features, onClick: onChange, color }),\n ]);\n};\n\nconst ColumnCenters = (props: ColumnNavProps) => {\n return h(Columns, { apiRoute: \"/defs/columns\", ...props });\n};\n\nconst CurrentColumn = (props) => {\n const { feature } = props;\n return h(FeatureLayer, {\n features: [feature],\n style: {\n fill: \"rgba(255,0,0,0.4)\",\n stroke: \"rgba(255,0,0,0.6)\",\n strokeWidth: 2,\n },\n });\n};\n\nexport {\n Columns,\n CurrentColumn,\n ColumnCenters,\n ColumnFeatures,\n ColumnKeyboardNavigation,\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"layers.js","sources":["../../../../src/maps/column-navigation/svg/layers.ts"],"sourcesContent":["import h from \"@macrostrat/hyper\";\nimport {\n Feature,\n FeatureLayer,\n MapContext,\n} from \"@macrostrat/svg-map-components\";\nimport { useAPIResult, useKeyHandler } from \"@macrostrat/ui-components\";\nimport chroma from \"chroma-js\";\nimport { ExtendedFeature } from \"d3-geo\";\nimport { Polygon } from \"geojson\";\nimport { useContext, useMemo } from \"react\";\nimport { useColumnFeatures } from \"./data-fetcher\";\nimport {\n buildKeyMapping,\n buildTriangulation,\n} from \"../utils/keyboard-navigation\";\n\nconst defaultStyle = {\n fill: \"rgb(239, 180, 249)\",\n stroke: \"magenta\",\n};\n\nexport function MeasurementsLayer(props) {\n const { style = defaultStyle, ...params } = props;\n const res: any = useAPIResult(\"/measurements\", {\n ...params,\n format: \"geojson\",\n response: \"light\",\n });\n if (res == null) return null;\n\n return h(FeatureLayer, {\n useCanvas: false,\n style,\n features: res.features?.filter((d) => d.properties.unit_id != null) ?? [],\n });\n}\n\ntype ColumnProps = { col_id: number };\n\ntype ColumnFeature = ExtendedFeature<Polygon, ColumnProps>;\n\nfunction ColumnFeatures(props) {\n const {\n features,\n onClick,\n color = \"rgba(150,150,150, 1)\",\n singleFeature = true,\n } = props;\n\n const c = chroma(color);\n\n return h(\n FeatureLayer,\n {\n className: \"columns\",\n useCanvas: onClick == null,\n style: {\n fill: c.alpha(0.2).css(),\n stroke: c.alpha(0.4).css(),\n },\n },\n features?.map((f) => {\n return h(Feature, {\n id: f.id ?? f.properties.col_id,\n onClick,\n feature: f,\n });\n }),\n );\n}\n\nenum MacrostratStatusCode {\n InProcess = \"in process\",\n}\n\ninterface ColumnNavProps {\n col_id: number;\n status_code?: MacrostratStatusCode;\n project_id?: number;\n onChange(col_id: number): void;\n}\n\ninterface KeyboardNavProps extends ColumnNavProps {\n features: ColumnFeature[];\n showLayers: boolean;\n}\n\nfunction ColumnKeyboardNavigation(props: KeyboardNavProps) {\n /** Keyboard navigation of columns using a Delaunay triangulation */\n const {\n features = [],\n col_id = null,\n onChange,\n showLayers = false,\n ...projectArgs\n } = props;\n const { projection } = useContext(MapContext);\n const { centroids, tri } = useMemo(\n () => buildTriangulation(features),\n [features],\n );\n\n const currentIndex = useMemo(() => {\n return features.findIndex((d) => d.properties.col_id == col_id);\n }, [features, col_id]);\n\n const neighbors = tri.delaunay.neighbors[currentIndex];\n\n const keyMapping = useMemo(() => {\n return buildKeyMapping(neighbors, centroids, currentIndex, projection);\n }, [neighbors, currentIndex]);\n\n useKeyHandler(\n (event) => {\n const nextColumnIx = keyMapping[event.keyCode];\n if (nextColumnIx == null) return;\n // @ts-ignore\n onChange(features[nextColumnIx]);\n },\n [keyMapping],\n );\n\n if (neighbors == null) return null;\n const neighborFeatures = neighbors.map((d) => features[d]);\n\n return h.if(showLayers)([\n h(FeatureLayer, {\n features: tri.links().features,\n useCanvas: false,\n style: {\n stroke: \"purple\",\n fill: \"transparent\",\n },\n }),\n h(FeatureLayer, {\n features: neighborFeatures,\n useCanvas: false,\n style: {\n stroke: \"rgb(93, 101, 212)\",\n strokeWidth: 3,\n fill: \"rgba(93, 101, 212, 0.5)\",\n },\n }),\n h(FeatureLayer, {\n features: [\n {\n type: \"Feature\",\n geometry: {\n type: \"MultiPoint\",\n coordinates: centroids,\n },\n },\n ],\n useCanvas: false,\n style: {\n r: 1,\n fill: \"purple\",\n },\n }),\n ]);\n}\n\ninterface ColumnExtraInfo {\n apiRoute?: string;\n color?: string;\n filterColumns?(d: ColumnFeature): boolean;\n showDebugLayers?: boolean;\n format?: \"topojson\" | \"geojson\";\n}\n\nconst Columns = (props: ColumnNavProps & ColumnExtraInfo) => {\n const {\n apiRoute = \"/columns\",\n onChange,\n col_id = null,\n status_code,\n project_id,\n color,\n filterColumns,\n showDebugLayers = false,\n format = \"topojson\",\n } = props;\n\n let features: any[] = useColumnFeatures({\n apiRoute,\n status_code,\n project_id,\n format,\n }) as any;\n\n if (features == null) return null;\n\n if (filterColumns != null) {\n features = features.filter(filterColumns);\n }\n\n return h([\n h(ColumnKeyboardNavigation, {\n features,\n col_id,\n onChange,\n status_code,\n project_id,\n showLayers: showDebugLayers,\n }),\n h(ColumnFeatures, { features, onClick: onChange, color }),\n ]);\n};\n\nconst ColumnCenters = (props: ColumnNavProps) => {\n return h(Columns, { apiRoute: \"/defs/columns\", ...props });\n};\n\nconst CurrentColumn = (props) => {\n const { feature } = props;\n return h(FeatureLayer, {\n features: [feature],\n style: {\n fill: \"rgba(255,0,0,0.4)\",\n stroke: \"rgba(255,0,0,0.6)\",\n strokeWidth: 2,\n },\n });\n};\n\nexport {\n Columns,\n CurrentColumn,\n ColumnCenters,\n ColumnFeatures,\n ColumnKeyboardNavigation,\n};\n"],"names":[],"mappings":"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"}
package/dist/section.cjs CHANGED
@@ -5,10 +5,10 @@ const timescale = require("@macrostrat/timescale");
5
5
  const columnComponents = require("@macrostrat/column-components");
6
6
  const h$1 = require("@macrostrat/hyper");
7
7
  const column_module = require("./column.module.sass.cjs");
8
+ const dataProvider = require("@macrostrat/data-provider");
8
9
  const dataComponents = require("@macrostrat/data-components");
9
10
  const store = require("./data-provider/store.cjs");
10
11
  const composite = require("./units/composite.cjs");
11
- const base = require("./data-provider/base.cjs");
12
12
  const panel = require("./unit-details/panel.cjs");
13
13
  const _interopDefault = (e) => e && e.__esModule ? e : { default: e };
14
14
  const h__default = /* @__PURE__ */ _interopDefault(h$1);
@@ -126,7 +126,7 @@ function SectionUnits(props) {
126
126
  "g.section",
127
127
  { className, style, transform: `translate(0 ${scaleInfo.offset})` },
128
128
  h(
129
- base.MacrostratColumnProvider,
129
+ store.MacrostratColumnProvider,
130
130
  {
131
131
  units,
132
132
  domain,
@@ -156,7 +156,7 @@ function CompositeTimescale(props) {
156
156
  }
157
157
  function CompositeTimescaleCore(props) {
158
158
  const { levels = 3, packages, unconformityLabels = false } = props;
159
- const baseURL = base.useMacrostratBaseURL();
159
+ const baseURL = dataProvider.useMacrostratBaseURL();
160
160
  const intervals = timescale.useMacrostratIntervals(baseURL);
161
161
  let _levels;
162
162
  if (typeof levels === "number") {