@@ -56,7 +56,7 @@ export default function Canvas() {
56
56
} = useSelect ( ) ;
57
57
const [ dragging , setDragging ] = useState ( {
58
58
element : ObjectType . NONE ,
59
- id : - 1 ,
59
+ id : null ,
60
60
prevX : 0 ,
61
61
prevY : 0 ,
62
62
initialPositions : [ ] ,
@@ -74,8 +74,8 @@ export default function Canvas() {
74
74
} ) ;
75
75
const [ grabOffset , setGrabOffset ] = useState ( { x : 0 , y : 0 } ) ;
76
76
const [ hoveredTable , setHoveredTable ] = useState ( {
77
- tableId : - 1 ,
78
- field : - 2 ,
77
+ tableId : null ,
78
+ fieldId : null ,
79
79
} ) ;
80
80
const [ panning , setPanning ] = useState ( {
81
81
isPanning : false ,
@@ -168,7 +168,7 @@ export default function Canvas() {
168
168
const getElement = ( element ) => {
169
169
switch ( element . type ) {
170
170
case ObjectType . TABLE :
171
- return tables [ element . id ] ;
171
+ return tables . find ( ( t ) => t . id === element . id ) ;
172
172
case ObjectType . AREA :
173
173
return areas [ element . id ] ;
174
174
case ObjectType . NOTE :
@@ -265,7 +265,7 @@ export default function Canvas() {
265
265
} ) ;
266
266
} else if (
267
267
dragging . element !== ObjectType . NONE &&
268
- dragging . id >= 0 &&
268
+ dragging . id !== null &&
269
269
bulkSelectedElements . length
270
270
) {
271
271
const currentX = pointer . spaces . diagram . x + grabOffset . x ;
@@ -275,9 +275,10 @@ export default function Canvas() {
275
275
276
276
for ( const element of bulkSelectedElements ) {
277
277
if ( element . type === ObjectType . TABLE ) {
278
+ const { x, y } = tables . find ( ( e ) => e . id === element . id ) ;
278
279
updateTable ( element . id , {
279
- x : tables [ element . id ] . x + deltaX ,
280
- y : tables [ element . id ] . y + deltaY ,
280
+ x : x + deltaX ,
281
+ y : y + deltaY ,
281
282
} ) ;
282
283
}
283
284
if ( element . type === ObjectType . AREA ) {
@@ -318,21 +319,21 @@ export default function Canvas() {
318
319
( panning . cursorStart . y - pointer . spaces . screen . y ) / transform . zoom ,
319
320
} ,
320
321
} ) ) ;
321
- } else if ( dragging . element === ObjectType . TABLE && dragging . id >= 0 ) {
322
+ } else if ( dragging . element === ObjectType . TABLE && dragging . id !== null ) {
322
323
updateTable ( dragging . id , {
323
324
x : pointer . spaces . diagram . x + grabOffset . x ,
324
325
y : pointer . spaces . diagram . y + grabOffset . y ,
325
326
} ) ;
326
327
} else if (
327
328
dragging . element === ObjectType . AREA &&
328
- dragging . id >= 0 &&
329
+ dragging . id !== null &&
329
330
areaResize . id === - 1
330
331
) {
331
332
updateArea ( dragging . id , {
332
333
x : pointer . spaces . diagram . x + grabOffset . x ,
333
334
y : pointer . spaces . diagram . y + grabOffset . y ,
334
335
} ) ;
335
- } else if ( dragging . element === ObjectType . NOTE && dragging . id >= 0 ) {
336
+ } else if ( dragging . element === ObjectType . NOTE && dragging . id !== null ) {
336
337
updateNote ( dragging . id , {
337
338
x : pointer . spaces . diagram . x + grabOffset . x ,
338
339
y : pointer . spaces . diagram . y + grabOffset . y ,
@@ -442,7 +443,10 @@ export default function Canvas() {
442
443
} ;
443
444
444
445
const didPan = ( ) =>
445
- ! ( transform . pan . x === panning . panStart . x && transform . pan . y === panning . panStart . y ) ;
446
+ ! (
447
+ transform . pan . x === panning . panStart . x &&
448
+ transform . pan . y === panning . panStart . y
449
+ ) ;
446
450
447
451
/**
448
452
* @param {PointerEvent } e
@@ -504,7 +508,7 @@ export default function Canvas() {
504
508
}
505
509
setDragging ( {
506
510
element : ObjectType . NONE ,
507
- id : - 1 ,
511
+ id : null ,
508
512
prevX : 0 ,
509
513
prevY : 0 ,
510
514
initialPositions : [ ] ,
@@ -586,7 +590,7 @@ export default function Canvas() {
586
590
setPanning ( ( old ) => ( { ...old , isPanning : false } ) ) ;
587
591
setDragging ( {
588
592
element : ObjectType . NONE ,
589
- id : - 1 ,
593
+ id : null ,
590
594
prevX : 0 ,
591
595
prevY : 0 ,
592
596
initialPositions : [ ] ,
@@ -595,28 +599,36 @@ export default function Canvas() {
595
599
} ;
596
600
597
601
const handleLinking = ( ) => {
598
- if ( hoveredTable . tableId < 0 ) return ;
599
- if ( hoveredTable . field < 0 ) return ;
600
- if (
601
- ! areFieldsCompatible (
602
- database ,
603
- tables [ linkingLine . startTableId ] . fields [ linkingLine . startFieldId ] ,
604
- tables [ hoveredTable . tableId ] . fields [ hoveredTable . field ] ,
605
- )
606
- ) {
602
+ if ( hoveredTable . tableId === null ) return ;
603
+ if ( hoveredTable . fieldId === null ) return ;
604
+
605
+ const { fields : startTableFields } = tables . find (
606
+ ( t ) => t . id === linkingLine . startTableId ,
607
+ ) ;
608
+ const { type : startType } = startTableFields . find (
609
+ ( f ) => f . id === linkingLine . startFieldId ,
610
+ ) ;
611
+ const { fields : endTableFields } = tables . find (
612
+ ( t ) => t . id === hoveredTable . tableId ,
613
+ ) ;
614
+ const { type : endType } = endTableFields . find (
615
+ ( f ) => f . id === hoveredTable . fieldId ,
616
+ ) ;
617
+
618
+ if ( ! areFieldsCompatible ( database , startType , endType ) ) {
607
619
Toast . info ( t ( "cannot_connect" ) ) ;
608
620
return ;
609
621
}
610
622
if (
611
623
linkingLine . startTableId === hoveredTable . tableId &&
612
- linkingLine . startFieldId === hoveredTable . field
624
+ linkingLine . startFieldId === hoveredTable . fieldId
613
625
)
614
626
return ;
615
627
616
628
const newRelationship = {
617
629
...linkingLine ,
618
630
endTableId : hoveredTable . tableId ,
619
- endFieldId : hoveredTable . field ,
631
+ endFieldId : hoveredTable . fieldId ,
620
632
cardinality : Cardinality . ONE_TO_ONE ,
621
633
updateConstraint : Constraint . NONE ,
622
634
deleteConstraint : Constraint . NONE ,
0 commit comments