1
1
import * as React from "react" ;
2
2
import { useState , useEffect } from "react" ;
3
3
import { createRender , useModelState , useModel } from "@anywidget/react" ;
4
- import type { Initialize , Render } from "@anywidget/types" ;
4
+ import type { Initialize , InitializeProps , Render } from "@anywidget/types" ;
5
5
import Map from "react-map-gl/maplibre" ;
6
6
import DeckGL from "@deck.gl/react/typed" ;
7
7
import { MapViewState , type Layer } from "@deck.gl/core/typed" ;
8
8
import { BaseLayerModel , initializeLayer } from "./model/index.js" ;
9
9
import type { WidgetModel } from "@jupyter-widgets/base" ;
10
- import { useParquetWasm } from "./parquet.js" ;
10
+ import { initParquetWasmFromBinary } from "./parquet.js" ;
11
11
import { getTooltip } from "./tooltip/index.js" ;
12
12
import { isDefined , loadChildModels } from "./util.js" ;
13
13
import { v4 as uuidv4 } from "uuid" ;
@@ -63,10 +63,6 @@ async function getChildModelState(
63
63
function App ( ) {
64
64
let model = useModel ( ) ;
65
65
66
- let [ parquetWasmBinary ] = useModelState < DataView | null > (
67
- "_parquet_wasm_content" ,
68
- ) ;
69
- let [ parquetWasmReady ] = useParquetWasm ( parquetWasmBinary ) ;
70
66
let [ mapStyle ] = useModelState < string > ( "basemap_style" ) ;
71
67
let [ mapHeight ] = useModelState < number > ( "_height" ) ;
72
68
let [ showTooltip ] = useModelState < boolean > ( "show_tooltip" ) ;
@@ -110,15 +106,7 @@ function App() {
110
106
let [ stateCounter , setStateCounter ] = useState < Date > ( new Date ( ) ) ;
111
107
112
108
useEffect ( ( ) => {
113
- if ( ! parquetWasmReady ) {
114
- return ;
115
- }
116
-
117
109
const callback = async ( ) => {
118
- if ( ! parquetWasmReady ) {
119
- throw new Error ( "inside callback but parquetWasm not ready!" ) ;
120
- }
121
-
122
110
const childModels = await loadChildModels (
123
111
model . widget_manager ,
124
112
childLayerIds ,
@@ -132,7 +120,7 @@ function App() {
132
120
setSubModelState ( newSubModelState ) ;
133
121
} ;
134
122
callback ( ) . catch ( console . error ) ;
135
- } , [ parquetWasmReady , childLayerIds ] ) ;
123
+ } , [ childLayerIds ] ) ;
136
124
137
125
const layers : Layer [ ] = [ ] ;
138
126
for ( const subModel of Object . values ( subModelState ) ) {
@@ -200,7 +188,13 @@ function App() {
200
188
) ;
201
189
}
202
190
191
+ async function initialize ( { model } : InitializeProps ) : Promise < void > {
192
+ const parquetWasmBinary : DataView = model . get ( "_parquet_wasm_content" ) ;
193
+ await initParquetWasmFromBinary ( parquetWasmBinary ) ;
194
+ }
195
+
203
196
const module : { render : Render ; initialize ?: Initialize } = {
197
+ initialize,
204
198
render : createRender ( App ) ,
205
199
} ;
206
200
0 commit comments