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