diff --git a/typescript/packages/subsurface-viewer/src/SubsurfaceViewer.stories.tsx b/typescript/packages/subsurface-viewer/src/SubsurfaceViewer.stories.tsx index b3f9e2026..aa08153d7 100644 --- a/typescript/packages/subsurface-viewer/src/SubsurfaceViewer.stories.tsx +++ b/typescript/packages/subsurface-viewer/src/SubsurfaceViewer.stories.tsx @@ -505,7 +505,7 @@ ViewStateSynchronization.argTypes = { }, }; -export const IsLoadedCallback = (args: SubsurfaceViewerProps) => { +export const IsRenderedCallback = (args: SubsurfaceViewerProps) => { const [layers, setLayers] = React.useState([defaultWellsLayer] as [ WellsLayer, MapLayer?, @@ -515,6 +515,8 @@ export const IsLoadedCallback = (args: SubsurfaceViewerProps) => { const handleChange = () => { if (layers.length === 1) { setLayers([defaultWellsLayer, meshMapLayerBig]); + } else if (layers.length === 2) { + setLayers([]); } else { setLayers([defaultWellsLayer]); } @@ -522,8 +524,8 @@ export const IsLoadedCallback = (args: SubsurfaceViewerProps) => { const props = { ...args, - isLoadedCallback: (isLoaded: boolean) => { - console.log("isLoadedCallback", isLoaded); + isRenderedCallback: (isLoaded: boolean) => { + console.log("isRenderedCallback", isLoaded); setLabel(isLoaded ? "LOADED" : "NOT LOADED"); return; }, @@ -542,7 +544,7 @@ export const IsLoadedCallback = (args: SubsurfaceViewerProps) => { ); }; -IsLoadedCallback.args = { +IsRenderedCallback.args = { id: "DeckGL-Map", layers: [meshMapLayerBig, defaultWellsLayer], bounds: [432150, 6475800, 439400, 6481501], @@ -557,12 +559,12 @@ IsLoadedCallback.args = { }, }; -IsLoadedCallback.parameters = { +IsRenderedCallback.parameters = { docs: { inlineStories: false, iframeHeight: 500, description: { - story: "IsLoadedCallback will report in console when triggered", + story: "IsRenderedCallback will report in console when triggered", }, }, }; diff --git a/typescript/packages/subsurface-viewer/src/SubsurfaceViewer.tsx b/typescript/packages/subsurface-viewer/src/SubsurfaceViewer.tsx index 9980732ce..e0bf344d4 100644 --- a/typescript/packages/subsurface-viewer/src/SubsurfaceViewer.tsx +++ b/typescript/packages/subsurface-viewer/src/SubsurfaceViewer.tsx @@ -97,9 +97,9 @@ export interface SubsurfaceViewerProps { getCameraPosition?: (input: ViewStateType) => void; /** - * Will be called after all layers have finished loading data. + * Will be called after all layers have rendered data. */ - isLoadedCallback?: (arg: boolean) => void; + isRenderedCallback?: (arg: boolean) => void; onDragStart?: (info: PickingInfo, event: MjolnirGestureEvent) => void; onDragEnd?: (info: PickingInfo, event: MjolnirGestureEvent) => void; @@ -154,7 +154,7 @@ const SubsurfaceViewer: React.FC = ({ getTooltip, cameraPosition, getCameraPosition, - isLoadedCallback, + isRenderedCallback: isRenderedCallback, onDragStart, onDragEnd, triggerHome, @@ -240,7 +240,7 @@ const SubsurfaceViewer: React.FC = ({ getTooltip={getTooltip} cameraPosition={cameraPosition} getCameraPosition={getCameraPosition} - isLoadedCallback={isLoadedCallback} + isRenderedCallback={isRenderedCallback} onDragStart={onDragStart} onDragEnd={onDragEnd} triggerHome={triggerHome} diff --git a/typescript/packages/subsurface-viewer/src/components/Map.tsx b/typescript/packages/subsurface-viewer/src/components/Map.tsx index e8bc3cb4d..b7577464b 100644 --- a/typescript/packages/subsurface-viewer/src/components/Map.tsx +++ b/typescript/packages/subsurface-viewer/src/components/Map.tsx @@ -394,9 +394,9 @@ export interface MapProps { getCameraPosition?: (input: ViewStateType) => void; /** - * Will be called after all layers have finished loading data. + * Will be called after all layers have rendered data. */ - isLoadedCallback?: (arg: boolean) => void; + isRenderedCallback?: (arg: boolean) => void; onDragStart?: (info: PickingInfo, event: MjolnirGestureEvent) => void; onDragEnd?: (info: PickingInfo, event: MjolnirGestureEvent) => void; @@ -578,7 +578,7 @@ const Map: React.FC = ({ getTooltip = defaultTooltip, cameraPosition, getCameraPosition, - isLoadedCallback, + isRenderedCallback: isLoadedCallback, onDragStart, onDragEnd, triggerHome, @@ -708,6 +708,7 @@ const Map: React.FC = ({ // Empty layers array makes deck.gl set deckRef to undefined (no opengl context). // Hence insert dummy layer. const dummy_layer = new LineLayer({ + id: "webviz_internal_dummy_layer", visible: false, }); layers.push(dummy_layer); @@ -917,13 +918,18 @@ const Map: React.FC = ({ const [isLoaded, setIsLoaded] = useState(false); const onAfterRender = useCallback(() => { if (deckGLLayers) { - const state = deckGLLayers.every((layer) => { + const loadedState = deckGLLayers.every((layer) => { return (layer as Layer).isLoaded; }); - setIsLoaded(state); + const emptyLayers = // There will always be a dummy layer. Deck.gl does not like empty array of layers. + deckGLLayers.length == 1 && + (deckGLLayers[0] as LineLayer).id === + "webviz_internal_dummy_layer"; + + setIsLoaded(loadedState || emptyLayers); if (typeof isLoadedCallback !== "undefined") { - isLoadedCallback(state); + isLoadedCallback(loadedState); } } }, [deckGLLayers, isLoadedCallback]);