@@ -37,6 +37,7 @@ import type { Edit, StaticModel } from '../services/data-model-storage';
37
37
import { UUID } from 'bson' ;
38
38
import DiagramEditorToolbar from './diagram-editor-toolbar' ;
39
39
import ExportDiagramModal from './export-diagram-modal' ;
40
+ import { useLogger } from '@mongodb-js/compass-logging/provider' ;
40
41
41
42
const loadingContainerStyles = css ( {
42
43
width : '100%' ,
@@ -132,6 +133,7 @@ const DiagramEditor: React.FunctionComponent<{
132
133
onApplyClick,
133
134
onApplyInitialLayout,
134
135
} ) => {
136
+ const { log, mongoLogId } = useLogger ( 'COMPASS-DATA-MODELING-DIAGRAM-EDITOR' ) ;
135
137
const isDarkMode = useDarkMode ( ) ;
136
138
const diagramContainerRef = useRef < HTMLDivElement | null > ( null ) ;
137
139
const diagram = useDiagram ( ) ;
@@ -217,19 +219,22 @@ const DiagramEditor: React.FunctionComponent<{
217
219
edges ,
218
220
'LEFT_RIGHT'
219
221
) ;
220
- setNodes ( positionedNodes ) ;
221
222
onApplyInitialLayout (
222
223
positionedNodes . reduce ( ( obj , node ) => {
223
224
obj [ node . id ] = [ node . position . x , node . position . y ] ;
224
225
return obj ;
225
226
} , { } as Record < string , [ number , number ] > )
226
227
) ;
227
228
} catch ( err ) {
228
- // eslint-disable-next-line no-console
229
- console . error ( 'Error applying layout:' , err ) ;
229
+ log . error (
230
+ mongoLogId ( 1_001_000_001 ) ,
231
+ 'DiagramEditor' ,
232
+ 'Error applying layout:' ,
233
+ err
234
+ ) ;
230
235
}
231
236
} ,
232
- [ setNodes ]
237
+ [ edges , log , mongoLogId , onApplyInitialLayout ]
233
238
) ;
234
239
235
240
useEffect ( ( ) => {
@@ -268,7 +273,16 @@ const DiagramEditor: React.FunctionComponent<{
268
273
return ;
269
274
}
270
275
setNodes ( storedNodes ) ;
271
- } , [ model ?. collections ] ) ;
276
+ } , [ model ?. collections , edges , diagram , applyInitialLayout ] ) ;
277
+
278
+ const nodesLoaded = useRef ( false ) ;
279
+ useEffect ( ( ) => {
280
+ // call fitView once the nodes are ready
281
+ if ( ! nodesLoaded . current && nodes . length > 0 ) {
282
+ void diagram . fitView ( ) ;
283
+ nodesLoaded . current = true ;
284
+ }
285
+ } , [ nodesLoaded , nodes , diagram ] ) ;
272
286
273
287
let content ;
274
288
@@ -318,6 +332,10 @@ const DiagramEditor: React.FunctionComponent<{
318
332
title = { diagramLabel }
319
333
edges = { edges }
320
334
nodes = { nodes }
335
+ fitViewOptions = { {
336
+ maxZoom : 1 ,
337
+ minZoom : 0.25 ,
338
+ } }
321
339
onEdgeClick = { ( evt , edge ) => {
322
340
setApplyInput (
323
341
JSON . stringify (
0 commit comments