@@ -176,75 +176,92 @@ const DockviewDemo = (props: { theme?: string }) => {
176
176
setPending ( [ ] ) ;
177
177
} , [ pending ] ) ;
178
178
179
- const onReady = ( event : DockviewReadyEvent ) => {
180
- setApi ( event . api ) ;
181
-
182
- event . api . onDidAddPanel ( ( event ) => {
183
- setPanels ( ( _ ) => [ ..._ , event . id ] ) ;
184
- addLogLine ( `Panel Added ${ event . id } ` ) ;
185
- } ) ;
186
- event . api . onDidActivePanelChange ( ( event ) => {
187
- setActivePanel ( event ?. id ) ;
188
- addLogLine ( `Panel Activated ${ event ?. id } ` ) ;
189
- } ) ;
190
- event . api . onDidRemovePanel ( ( event ) => {
191
- setPanels ( ( _ ) => {
192
- const next = [ ..._ ] ;
193
- next . splice (
194
- next . findIndex ( ( x ) => x === event . id ) ,
195
- 1
196
- ) ;
179
+ React . useEffect ( ( ) => {
180
+ if ( ! api ) {
181
+ return ;
182
+ }
197
183
198
- return next ;
199
- } ) ;
200
- addLogLine ( `Panel Removed ${ event . id } ` ) ;
201
- } ) ;
202
-
203
- event . api . onDidAddGroup ( ( event ) => {
204
- setGroups ( ( _ ) => [ ..._ , event . id ] ) ;
205
- addLogLine ( `Group Added ${ event . id } ` ) ;
206
- } ) ;
207
-
208
- event . api . onDidMovePanel ( ( event ) => {
209
- addLogLine ( `Panel Moved ${ event . panel . id } ` ) ;
210
- } ) ;
211
-
212
- event . api . onDidMaximizedGroupChange ( ( event ) => {
213
- addLogLine (
214
- `Group Maximized Changed ${ event . group . api . id } [${ event . isMaximized } ]`
215
- ) ;
216
- } ) ;
217
-
218
- event . api . onDidRemoveGroup ( ( event ) => {
219
- setGroups ( ( _ ) => {
220
- const next = [ ..._ ] ;
221
- next . splice (
222
- next . findIndex ( ( x ) => x === event . id ) ,
223
- 1
184
+ const disposables = [
185
+ api . onDidAddPanel ( ( event ) => {
186
+ setPanels ( ( _ ) => [ ..._ , event . id ] ) ;
187
+ addLogLine ( `Panel Added ${ event . id } ` ) ;
188
+ } ) ,
189
+ api . onDidActivePanelChange ( ( event ) => {
190
+ setActivePanel ( event ?. id ) ;
191
+ addLogLine ( `Panel Activated ${ event ?. id } ` ) ;
192
+ } ) ,
193
+ api . onDidRemovePanel ( ( event ) => {
194
+ setPanels ( ( _ ) => {
195
+ const next = [ ..._ ] ;
196
+ next . splice (
197
+ next . findIndex ( ( x ) => x === event . id ) ,
198
+ 1
199
+ ) ;
200
+
201
+ return next ;
202
+ } ) ;
203
+ addLogLine ( `Panel Removed ${ event . id } ` ) ;
204
+ } ) ,
205
+
206
+ api . onDidAddGroup ( ( event ) => {
207
+ setGroups ( ( _ ) => [ ..._ , event . id ] ) ;
208
+ addLogLine ( `Group Added ${ event . id } ` ) ;
209
+ } ) ,
210
+
211
+ api . onDidMovePanel ( ( event ) => {
212
+ addLogLine ( `Panel Moved ${ event . panel . id } ` ) ;
213
+ } ) ,
214
+
215
+ api . onDidMaximizedGroupChange ( ( event ) => {
216
+ addLogLine (
217
+ `Group Maximized Changed ${ event . group . api . id } [${ event . isMaximized } ]`
224
218
) ;
219
+ } ) ,
220
+
221
+ api . onDidRemoveGroup ( ( event ) => {
222
+ setGroups ( ( _ ) => {
223
+ const next = [ ..._ ] ;
224
+ next . splice (
225
+ next . findIndex ( ( x ) => x === event . id ) ,
226
+ 1
227
+ ) ;
228
+
229
+ return next ;
230
+ } ) ;
231
+ addLogLine ( `Group Removed ${ event . id } ` ) ;
232
+ } ) ,
233
+
234
+ api . onDidActiveGroupChange ( ( event ) => {
235
+ setActiveGroup ( event ?. id ) ;
236
+ addLogLine ( `Group Activated ${ event ?. id } ` ) ;
237
+ } ) ,
238
+ ] ;
239
+
240
+ const loadLayout = ( ) => {
241
+ const state = localStorage . getItem ( 'dv-demo-state' ) ;
242
+
243
+ if ( state ) {
244
+ try {
245
+ api . fromJSON ( JSON . parse ( state ) ) ;
246
+ return ;
247
+ } catch {
248
+ localStorage . removeItem ( 'dv-demo-state' ) ;
249
+ }
250
+ return ;
251
+ }
225
252
226
- return next ;
227
- } ) ;
228
- addLogLine ( `Group Removed ${ event . id } ` ) ;
229
- } ) ;
253
+ defaultConfig ( api ) ;
254
+ } ;
230
255
231
- event . api . onDidActiveGroupChange ( ( event ) => {
232
- setActiveGroup ( event ?. id ) ;
233
- addLogLine ( `Group Activated ${ event ?. id } ` ) ;
234
- } ) ;
256
+ loadLayout ( ) ;
235
257
236
- const state = localStorage . getItem ( 'dv-demo-state' ) ;
237
- if ( state ) {
238
- try {
239
- event . api . fromJSON ( JSON . parse ( state ) ) ;
240
- return ;
241
- } catch {
242
- localStorage . removeItem ( 'dv-demo-state' ) ;
243
- }
244
- return ;
245
- }
258
+ return ( ) => {
259
+ disposables . forEach ( ( disposable ) => disposable . dispose ( ) ) ;
260
+ } ;
261
+ } , [ api ] ) ;
246
262
247
- defaultConfig ( event . api ) ;
263
+ const onReady = ( event : DockviewReadyEvent ) => {
264
+ setApi ( event . api ) ;
248
265
} ;
249
266
250
267
const [ watermark , setWatermark ] = React . useState < boolean > ( false ) ;
0 commit comments