[DPF]: Abstracted contract between data providers and visualization - #1498
[DPF]: Abstracted contract between data providers and visualization#1498rubenthoms wants to merge 2 commits into
Conversation
data providers are no longer directly consumed in visualization assembler but provide a view object
There was a problem hiding this comment.
Pull request overview
This PR refactors the Data Provider Framework so visualizations no longer consume providers/settings directly, but instead consume a provider-produced “snapshot/view” object (ProviderSnapshot/StateSnapshot). This decouples visualization assembly from provider implementation details and enables broader provider implementations (incl. future operation groups).
Changes:
- Introduces
ProviderSnapshot/ItemViewcontracts and updatesVisualizationAssembler+ all transformers to usestate.snapshotinstead ofgetData/getSetting/getStoredData. - Adds per-provider
makeProviderSnapshot(...)implementations to expose only the visualization-relevant meta/data/range/label. - Removes the legacy
DeltaSurfaceUI/group integration and adjusts related manager/UI components.
Reviewed changes
Copilot reviewed 80 out of 80 changed files in this pull request and generated 3 comments.
Show a summary per file
| File | Description |
|---|---|
| frontend/src/modules/_shared/DataProviderFramework/visualization/sharedMetaTypes/realizationGrid.ts | Adds shared meta type for realization grid snapshots. |
| frontend/src/modules/_shared/DataProviderFramework/visualization/deckgl/makeSeismicSurfaceLayer.ts | Uses state.snapshot meta/data for seismic surface layer creation. |
| frontend/src/modules/_shared/DataProviderFramework/visualization/deckgl/makeRealizationGridLayer.ts | Uses snapshot meta/data for grid layer (color scale, lines, opacity). |
| frontend/src/modules/_shared/DataProviderFramework/visualization/deckgl/makePolygonsLayer.ts | Switches polygon layer to snapshot-driven meta (visualization spec). |
| frontend/src/modules/_shared/DataProviderFramework/visualization/deckgl/makeDrilledWellborePicksLayer.ts | Reads wellbore picks from state.snapshot.data. |
| frontend/src/modules/_shared/DataProviderFramework/visualization/deckgl/makeDrilledWellTrajectoriesLayer.ts | Reads trajectories from state.snapshot.data. |
| frontend/src/modules/_shared/DataProviderFramework/visualization/deckgl/makeDepthSurfaceLayer.ts | Uses snapshot meta/data for depth surface layer creation. |
| frontend/src/modules/_shared/DataProviderFramework/visualization/deckgl/makeAttributeSurfaceLayer.ts | Uses snapshot meta/data for attribute surface layer creation. |
| frontend/src/modules/_shared/DataProviderFramework/visualization/deckgl/boundingBoxes/makeDrilledWellborePicksBoundingBox.ts | Bounding box now computed from state.snapshot.data. |
| frontend/src/modules/_shared/DataProviderFramework/visualization/deckgl/boundingBoxes/makeDrilledWellTrajectoriesBoundingBox.ts | Bounding box now computed from state.snapshot.data. |
| frontend/src/modules/_shared/DataProviderFramework/visualization/boundingBoxes/makeSurfaceLayerBoundingBox.ts | Surface bounding box reads from state.snapshot.data. |
| frontend/src/modules/_shared/DataProviderFramework/visualization/boundingBoxes/makeRealizationGridBoundingBox.ts | Grid bounding box reads from state.snapshot.data. |
| frontend/src/modules/_shared/DataProviderFramework/visualization/boundingBoxes/makePolygonDataBoundingBox.ts | Polygon bounding box reads from state.snapshot.data. |
| frontend/src/modules/_shared/DataProviderFramework/visualization/annotations/makeSeismicColorScaleAnnotation.ts | Annotation now uses snapshot meta + snapshot.valueRange. |
| frontend/src/modules/_shared/DataProviderFramework/visualization/annotations/makeDepthColorScaleAnnotation.ts | Annotation now uses snapshot meta + snapshot.valueRange. |
| frontend/src/modules/_shared/DataProviderFramework/visualization/annotations/makeColorScaleAnnotation.ts | General color scale annotation now uses snapshot meta/valueRange. |
| frontend/src/modules/_shared/DataProviderFramework/visualization/VisualizationAssembler.ts | Core refactor: transformers consume state: StateSnapshot, caching keyed by ItemView. |
| frontend/src/modules/_shared/DataProviderFramework/interfacesAndTypes/customSettingsHandler.ts | Adds elevatableSettings support for cross-provider operations. |
| frontend/src/modules/_shared/DataProviderFramework/interfacesAndTypes/customOperationGroupImplementation.ts | New contract for operation groups (shared settings + snapshot production). |
| frontend/src/modules/_shared/DataProviderFramework/interfacesAndTypes/customGroupImplementation.ts | Minor docstring correction. |
| frontend/src/modules/_shared/DataProviderFramework/interfacesAndTypes/customDataProviderImplementation.ts | Adds DataProviderMeta, ProviderSnapshot, and requires makeProviderSnapshot. |
| frontend/src/modules/_shared/DataProviderFramework/interfacesAndTypes/ItemView.ts | Introduces ItemView + StateSnapshot interface for assembler consumption. |
| frontend/src/modules/_shared/DataProviderFramework/framework/utils/makeSortableListItemComponent.tsx | Removes DeltaSurface rendering branch. |
| frontend/src/modules/_shared/DataProviderFramework/framework/DeltaSurface/DeltaSurfaceComponent.tsx | Removes DeltaSurface component (deleted). |
| frontend/src/modules/_shared/DataProviderFramework/framework/DeltaSurface/DeltaSurface.ts | Removes DeltaSurface group (deleted). |
| frontend/src/modules/_shared/DataProviderFramework/framework/DataProviderManager/DataProviderManagerComponent.tsx | Updates action/move callbacks; memoizes handlers. |
| frontend/src/modules/_shared/DataProviderFramework/framework/DataProvider/DataProviderComponent.tsx | Hides elevated settings when subordinated; shows subordination prefix. |
| frontend/src/modules/_shared/DataProviderFramework/framework/DataProvider/DataProvider.ts | Implements ItemView, adds cached StateSnapshot, adds AWAITING_OPERATION, snapshot production. |
| frontend/src/modules/_shared/DataProviderFramework/delegates/SettingsContextDelegate.ts | Exposes getElevatableSettings(). |
| frontend/src/modules/_shared/DataProviderFramework/delegates/ItemDelegate.ts | Adds revision tracking + topic; revision increments publish manager data revision. |
| frontend/src/modules/_shared/DataProviderFramework/dataProviders/implementations/surfaceProviders/SeismicSurfaceProvider.ts | Adds SurfaceProviderMeta + makeProviderSnapshot. |
| frontend/src/modules/_shared/DataProviderFramework/dataProviders/implementations/surfaceProviders/DepthSurfaceProvider.ts | Adds SurfaceProviderMeta, makeProviderSnapshot, and elevatable settings. |
| frontend/src/modules/_shared/DataProviderFramework/dataProviders/implementations/surfaceProviders/AttributeSurfaceProvider.ts | Adds SurfaceProviderMeta + makeProviderSnapshot. |
| frontend/src/modules/_shared/DataProviderFramework/dataProviders/implementations/RealizationPolygonsProvider.ts | Adds provider meta + makeProviderSnapshot. |
| frontend/src/modules/_shared/DataProviderFramework/dataProviders/implementations/IntersectionRealizationSeismicProvider.ts | Adds provider meta + makeProviderSnapshot (meta contains polyline/opacity/range inputs). |
| frontend/src/modules/_shared/DataProviderFramework/dataProviders/implementations/IntersectionRealizationGridProvider.ts | Adds provider meta + makeProviderSnapshot (incl. derived extension length & polyline ids). |
| frontend/src/modules/_shared/DataProviderFramework/dataProviders/implementations/FaultPolygonsProvider.ts | Adds provider meta + makeProviderSnapshot. |
| frontend/src/modules/_shared/DataProviderFramework/dataProviders/implementations/DrilledWellborePicksProvider.ts | Adds makeProviderSnapshot returning minimal snapshot. |
| frontend/src/modules/_shared/DataProviderFramework/dataProviders/implementations/DrilledWellTrajectoriesProvider.ts | Adds makeProviderSnapshot returning minimal snapshot. |
| frontend/src/modules/WellLogViewer/DataProviderFramework/visualizations/wellpicks.ts | Uses snapshot meta instead of settings accessors. |
| frontend/src/modules/WellLogViewer/DataProviderFramework/visualizations/plots.ts | Uses snapshot meta/data for plot config + accumulator. |
| frontend/src/modules/WellLogViewer/DataProviderFramework/dataProviders/wellpicks/WellPicksProvider.ts | Adds meta + makeProviderSnapshot. |
| frontend/src/modules/WellLogViewer/DataProviderFramework/dataProviders/plots/_shared.ts | Defines plot provider meta + snapshot type alias. |
| frontend/src/modules/WellLogViewer/DataProviderFramework/dataProviders/plots/StackedPlotProvider.ts | Adds makeProviderSnapshot for stacked plots. |
| frontend/src/modules/WellLogViewer/DataProviderFramework/dataProviders/plots/LinearPlotProvider.ts | Adds makeProviderSnapshot for linear plots. |
| frontend/src/modules/WellLogViewer/DataProviderFramework/dataProviders/plots/DiffPlotProvider.ts | Adds makeProviderSnapshot for diff plots. |
| frontend/src/modules/WellLogViewer/DataProviderFramework/dataProviders/plots/AreaPlotProvider.ts | Adds makeProviderSnapshot for area plots. |
| frontend/src/modules/Intersection/DataProviderFramework/visualization/createWellborePicksLayerItemsMaker.ts | Switches to snapshot data; normalizes optional confidence to null. |
| frontend/src/modules/Intersection/DataProviderFramework/visualization/createSurfacesUncertaintiesLayerItemsMaker.ts | Uses snapshot meta for polyline lengths + colors. |
| frontend/src/modules/Intersection/DataProviderFramework/visualization/createSurfacesLayerItemsMaker.ts | Uses snapshot meta for color set and data. |
| frontend/src/modules/Intersection/DataProviderFramework/visualization/createSeismicLayerItemsMaker.ts | Uses snapshot meta/valueRange instead of settings/stored data accessors. |
| frontend/src/modules/Intersection/DataProviderFramework/visualization/createGridLayerItemsMaker.ts | Uses snapshot meta/valueRange instead of settings/stored data accessors. |
| frontend/src/modules/Intersection/DataProviderFramework/customDataProviderImplementations/SurfacesPerRealizationValuesProvider.ts | Adds provider meta + makeProviderSnapshot. |
| frontend/src/modules/Intersection/DataProviderFramework/customDataProviderImplementations/RealizationSurfacesProvider.ts | Adds provider meta + makeProviderSnapshot. |
| frontend/src/modules/Intersection/DataProviderFramework/customDataProviderImplementations/EnsembleWellborePicksProvider.ts | Adds makeProviderSnapshot. |
| frontend/src/modules/Intersection/DataProviderFramework/boundingBoxes/makeSurfacesUncertaintiesBoundingBox.ts | Bounding box uses snapshot meta polyline data. |
| frontend/src/modules/Intersection/DataProviderFramework/boundingBoxes/makeSurfacesBoundingBox.ts | Bounding box uses snapshot meta polyline data. |
| frontend/src/modules/Intersection/DataProviderFramework/boundingBoxes/makeSeismicBoundingBox.ts | Bounding box uses snapshot meta polyline + extension length. |
| frontend/src/modules/Intersection/DataProviderFramework/boundingBoxes/makeGridBoundingBox.ts | Bounding box uses snapshot meta polyline + extension length. |
| frontend/src/modules/Intersection/DataProviderFramework/annotations/makeColorScaleAnnotation.ts | Intersection annotations now use snapshot meta/valueRange/dataLabel. |
| frontend/src/modules/3DViewer/view/components/VisualizationAssemblerWrapper.tsx | Updates assembler registration to new registerDataProviderTransformers signature. |
| frontend/src/modules/3DViewer/settings/components/dataProviderManagerWrapper.tsx | Removes DeltaSurface actions; simplifies move constraints. |
| frontend/src/modules/3DViewer/DataProviderFramework/visualization/makeSeismicSlicesLayer.ts | Uses snapshot meta/data for seismic slices rendering. |
| frontend/src/modules/3DViewer/DataProviderFramework/visualization/makeSeismicIntersectionMeshLayer.ts | Uses snapshot meta polyline + opacity/color scale. |
| frontend/src/modules/3DViewer/DataProviderFramework/visualization/makeIntersectionRealizationGridLayer.ts | Uses snapshot meta for grid settings instead of direct settings access. |
| frontend/src/modules/3DViewer/DataProviderFramework/visualization/makeDrilledWellTrajectoriesLayer.ts | Reads trajectories from state.snapshot.data. |
| frontend/src/modules/3DViewer/DataProviderFramework/visualization/makeDrilledWellTrajectoriesHoverVisualizationFunctions.ts | Reads trajectories from state.snapshot.data. |
| frontend/src/modules/3DViewer/DataProviderFramework/customDataProviderImplementations/RealizationSeismicSlicesProvider.ts | Adds provider meta + makeProviderSnapshot. |
| frontend/src/modules/3DViewer/DataProviderFramework/customDataProviderImplementations/RealizationGridProvider.ts | Adds provider meta + makeProviderSnapshot (valueRange + label). |
| frontend/src/modules/3DViewer/DataProviderFramework/boundingBoxes/makeRealizationSeismicSlicesBoundingBox.ts | Bounding box reads seismic cube meta from snapshot meta. |
| frontend/src/modules/3DViewer/DataProviderFramework/boundingBoxes/makeIntersectionRealizationSeismicBoundingBox.ts | Bounding box uses snapshot meta polyline array. |
| frontend/src/modules/3DViewer/DataProviderFramework/boundingBoxes/makeIntersectionRealizationGridBoundingBox.ts | Bounding box reads from state.snapshot.data. |
| frontend/src/modules/3DViewer/DataProviderFramework/accumulators/polylineIdsAccumulator.ts | Accumulator uses snapshot meta custom polyline id. |
| frontend/src/modules/2DViewer/view/components/VisualizationAssemblerWrapper.tsx | Updates assembler registrations to new snapshot-based transformer API. |
| frontend/src/modules/2DViewer/settings/components/dataProviderManagerWrapper.tsx | Refactors action handling; removes DeltaSurface actions; view-in-view move restriction. |
| frontend/src/modules/2DViewer/DataProviderFramework/visualization/makeDrilledWellborePicksLayer2D.ts | Updates transformer args to snapshot-based signature. |
| frontend/src/modules/2DViewer/DataProviderFramework/visualization/makeDrilledWellTrajectoriesLayer2D.ts | Updates transformer args to snapshot-based signature. |
| frontend/src/modules/2DViewer/DataProviderFramework/visualization/makeDrilledWellTrajectoriesHoverVisualizationFunctions.ts | Updates transformer args to snapshot-based signature. |
| frontend/src/modules/2DViewer/DataProviderFramework/customDataProviderImplementations/RealizationGridProvider.ts | Adds provider meta + makeProviderSnapshot. |
| frontend/src/lib/components/SortableList/sortableList.tsx | Fixes stale closure by switching no-drop-zone set to a ref. |
Comments suppressed due to low confidence (1)
frontend/src/modules/_shared/DataProviderFramework/visualization/VisualizationAssembler.ts:232
- Duplicate-registration guard is checking
this._dataProviderTransformers.has(dataProviderCtor.name), but the map is keyed bydataProviderName(you set viaset(dataProviderName, transformers)). This means duplicates for the samedataProviderNamewill silently overwrite, and the guard won’t trigger as intended. Consider checkinghas(dataProviderName)(and/or also guarding against reusing the same ctor if that matters).
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| return { | ||
| id: dataProvider.getItemDelegate().getId(), | ||
| name: dataProvider.getItemDelegate().getName(), | ||
| isLoading: dataProvider.getStatus() === DataProviderStatus.LOADING, | ||
| id: itemView.getId(), | ||
| name: itemView.getName(), | ||
| isLoading: itemView.getStatus() === DataProviderStatus.LOADING, | ||
| getInjectedData: getInjectedData.bind(this), | ||
| getDataValueRange: dataProvider.getDataValueRange.bind(dataProvider), | ||
| ...dataProvider.makeAccessors(), | ||
| state: itemView.getStateSnapshot(), | ||
| }; |
There was a problem hiding this comment.
TransformerArgs.isLoading is derived only from status === DataProviderStatus.LOADING. If a provider is AWAITING_OPERATION, downstream transformers will see isLoading === false even though no snapshot is available yet. Consider treating AWAITING_OPERATION as loading (or deriving isLoading from the state snapshot status field).
| AttributeSurfaceProvider, | ||
| { | ||
| transformToVisualization: makeAttributeSurfaceLayer, | ||
| transformToVisualization: makeSeismicSurfaceLayer, |
There was a problem hiding this comment.
The ATTRIBUTE_STATIC_SURFACE provider is registered to use makeSeismicSurfaceLayer as its visualization transformer, while the other AttributeSurfaceProvider registrations use makeAttributeSurfaceLayer. This looks inconsistent and likely renders the wrong layer behavior for static attribute surfaces. Consider switching this transformer to makeAttributeSurfaceLayer (or documenting why static attribute surfaces should be treated as seismic surfaces).
| transformToVisualization: makeSeismicSurfaceLayer, | |
| transformToVisualization: makeAttributeSurfaceLayer, |
| private _type: string; | ||
| private _customDataProviderImpl: CustomDataProviderImplementation< | ||
| TSettings, | ||
| TData, | ||
| TStoredData, | ||
| TMeta, | ||
| TSettingTypes, | ||
| TSettingKey | ||
| >; | ||
| private _customDataProviderImplementation: CustomDataProviderImplementation< | ||
| TSettings, | ||
| TData, | ||
| TStoredData, | ||
| TMeta, | ||
| TSettingTypes, | ||
| TSettingKey | ||
| >; |
There was a problem hiding this comment.
DataProvider now stores the same implementation instance in both _customDataProviderImpl and _customDataProviderImplementation, and different methods read from each. This duplication makes it easier to introduce inconsistencies later and adds cognitive overhead. Consider keeping a single field and using it consistently throughout the class.
Data providers are no longer directly consumed in visualization assembler but provide a view object. This way, any implementation in the DPF can provide such a view and be consumed in the assembler.