@@ -21,15 +21,8 @@ import {
21
21
Toast ,
22
22
Popconfirm ,
23
23
} from "@douyinfe/semi-ui" ;
24
- import { toPng , toJpeg , toSvg } from "html-to-image" ;
24
+ import { toPng , toJpeg } from "html-to-image" ;
25
25
import { saveAs } from "file-saver" ;
26
- import {
27
- jsonToMySQL ,
28
- jsonToPostgreSQL ,
29
- jsonToSQLite ,
30
- jsonToMariaDB ,
31
- jsonToSQLServer ,
32
- } from "../../utils/toSQL" ;
33
26
import {
34
27
ObjectType ,
35
28
Action ,
@@ -60,8 +53,8 @@ import useSaveState from "../../hooks/useSaveState";
60
53
import { IconAddArea , IconAddNote , IconAddTable } from "../../icons" ;
61
54
import LayoutDropdown from "./LayoutDropdown" ;
62
55
import Sidesheet from "./SideSheet/Sidesheet" ;
63
- import Modal from "./Modal/Modal" ;
64
56
import { useTranslation } from "react-i18next" ;
57
+ import ModalManager from "./ModalManager" ;
65
58
66
59
export default function ControlPanel ( {
67
60
diagramId,
@@ -72,13 +65,7 @@ export default function ControlPanel({
72
65
} ) {
73
66
const [ modal , setModal ] = useState ( MODAL . NONE ) ;
74
67
const [ sidesheet , setSidesheet ] = useState ( SIDESHEET . NONE ) ;
75
- const [ prevTitle , setPrevTitle ] = useState ( title ) ;
76
68
const [ showEditName , setShowEditName ] = useState ( false ) ;
77
- const [ exportData , setExportData ] = useState ( {
78
- data : null ,
79
- filename : `${ title } _${ new Date ( ) . toISOString ( ) } ` ,
80
- extension : "" ,
81
- } ) ;
82
69
const { saveState, setSaveState } = useSaveState ( ) ;
83
70
const { layout, setLayout } = useLayout ( ) ;
84
71
const { settings, setSettings } = useSettings ( ) ;
@@ -452,7 +439,7 @@ export default function ControlPanel({
452
439
}
453
440
} ;
454
441
455
- const fileImport = ( ) => setModal ( MODAL . IMPORT ) ;
442
+ const importDiagram = ( ) => setModal ( MODAL . IMPORT_DIAGRAM ) ;
456
443
const viewGrid = ( ) =>
457
444
setSettings ( ( prev ) => ( { ...prev , showGrid : ! prev . showGrid } ) ) ;
458
445
const zoomIn = ( ) =>
@@ -704,7 +691,6 @@ export default function ControlPanel({
704
691
rename : {
705
692
function : ( ) => {
706
693
setModal ( MODAL . RENAME ) ;
707
- setPrevTitle ( title ) ;
708
694
} ,
709
695
} ,
710
696
delete_diagram : {
@@ -730,7 +716,7 @@ export default function ControlPanel({
730
716
} ,
731
717
} ,
732
718
import_diagram : {
733
- function : fileImport ,
719
+ function : importDiagram ,
734
720
shortcut : "Ctrl+I" ,
735
721
} ,
736
722
import_from_source : {
@@ -739,66 +725,8 @@ export default function ControlPanel({
739
725
export_as : {
740
726
children : [
741
727
{
742
- PNG : ( ) => {
743
- toPng ( document . getElementById ( "canvas" ) ) . then ( function ( dataUrl ) {
744
- setExportData ( ( prev ) => ( {
745
- ...prev ,
746
- data : dataUrl ,
747
- extension : "png" ,
748
- } ) ) ;
749
- } ) ;
750
- setModal ( MODAL . IMG ) ;
751
- } ,
752
- } ,
753
- {
754
- JPEG : ( ) => {
755
- toJpeg ( document . getElementById ( "canvas" ) , { quality : 0.95 } ) . then (
756
- function ( dataUrl ) {
757
- setExportData ( ( prev ) => ( {
758
- ...prev ,
759
- data : dataUrl ,
760
- extension : "jpeg" ,
761
- } ) ) ;
762
- } ,
763
- ) ;
764
- setModal ( MODAL . IMG ) ;
765
- } ,
766
- } ,
767
- {
768
- JSON : ( ) => {
769
- setModal ( MODAL . CODE ) ;
770
- const result = JSON . stringify (
771
- {
772
- tables : tables ,
773
- relationships : relationships ,
774
- notes : notes ,
775
- subjectAreas : areas ,
776
- types : types ,
777
- title : title ,
778
- } ,
779
- null ,
780
- 2 ,
781
- ) ;
782
- setExportData ( ( prev ) => ( {
783
- ...prev ,
784
- data : result ,
785
- extension : "json" ,
786
- } ) ) ;
787
- } ,
788
- } ,
789
- {
790
- SVG : ( ) => {
791
- const filter = ( node ) => node . tagName !== "i" ;
792
- toSvg ( document . getElementById ( "canvas" ) , { filter : filter } ) . then (
793
- function ( dataUrl ) {
794
- setExportData ( ( prev ) => ( {
795
- ...prev ,
796
- data : dataUrl ,
797
- extension : "svg" ,
798
- } ) ) ;
799
- } ,
800
- ) ;
801
- setModal ( MODAL . IMG ) ;
728
+ IMAGE : ( ) => {
729
+ setModal ( MODAL . EXPORT_IMG ) ;
802
730
} ,
803
731
} ,
804
732
{
@@ -817,10 +745,20 @@ export default function ControlPanel({
817
745
canvas . offsetWidth ,
818
746
canvas . offsetHeight ,
819
747
) ;
820
- doc . save ( `${ exportData . filename } .pdf` ) ;
748
+ doc . save ( `${ title } _ ${ new Date ( ) . toISOString ( ) } .pdf` ) ;
821
749
} ) ;
822
750
} ,
823
751
} ,
752
+ {
753
+ SQL : ( ) => {
754
+ setModal ( MODAL . EXPORT_SQL ) ;
755
+ } ,
756
+ } ,
757
+ {
758
+ JSON : ( ) => {
759
+ setModal ( MODAL . EXPORT_JSON ) ;
760
+ } ,
761
+ } ,
824
762
{
825
763
DRAWDB : ( ) => {
826
764
const result = JSON . stringify (
@@ -840,88 +778,8 @@ export default function ControlPanel({
840
778
const blob = new Blob ( [ result ] , {
841
779
type : "text/plain;charset=utf-8" ,
842
780
} ) ;
843
- saveAs ( blob , `${ exportData . filename } .ddb` ) ;
844
- } ,
845
- } ,
846
- ] ,
847
- function : ( ) => { } ,
848
- } ,
849
- export_source : {
850
- children : [
851
- {
852
- MySQL : ( ) => {
853
- setModal ( MODAL . CODE ) ;
854
- const src = jsonToMySQL ( {
855
- tables : tables ,
856
- references : relationships ,
857
- types : types ,
858
- } ) ;
859
- setExportData ( ( prev ) => ( {
860
- ...prev ,
861
- data : src ,
862
- extension : "sql" ,
863
- } ) ) ;
864
- } ,
865
- } ,
866
- {
867
- PostgreSQL : ( ) => {
868
- setModal ( MODAL . CODE ) ;
869
- const src = jsonToPostgreSQL ( {
870
- tables : tables ,
871
- references : relationships ,
872
- types : types ,
873
- } ) ;
874
- setExportData ( ( prev ) => ( {
875
- ...prev ,
876
- data : src ,
877
- extension : "sql" ,
878
- } ) ) ;
879
- } ,
880
- } ,
881
- {
882
- SQLite : ( ) => {
883
- setModal ( MODAL . CODE ) ;
884
- const src = jsonToSQLite ( {
885
- tables : tables ,
886
- references : relationships ,
887
- types : types ,
888
- } ) ;
889
- setExportData ( ( prev ) => ( {
890
- ...prev ,
891
- data : src ,
892
- extension : "sql" ,
893
- } ) ) ;
894
- } ,
895
- } ,
896
- {
897
- MariaDB : ( ) => {
898
- setModal ( MODAL . CODE ) ;
899
- const src = jsonToMariaDB ( {
900
- tables : tables ,
901
- references : relationships ,
902
- types : types ,
903
- } ) ;
904
- setExportData ( ( prev ) => ( {
905
- ...prev ,
906
- data : src ,
907
- extension : "sql" ,
908
- } ) ) ;
909
- } ,
910
- } ,
911
- {
912
- MSSQL : ( ) => {
913
- setModal ( MODAL . CODE ) ;
914
- const src = jsonToSQLServer ( {
915
- tables : tables ,
916
- references : relationships ,
917
- types : types ,
918
- } ) ;
919
- setExportData ( ( prev ) => ( {
920
- ...prev ,
921
- data : src ,
922
- extension : "sql" ,
923
- } ) ) ;
924
- } ,
781
+ saveAs ( blob , `${ title } _${ new Date ( ) . toISOString ( ) } .ddb` ) ;
782
+ }
925
783
} ,
926
784
] ,
927
785
function : ( ) => { } ,
@@ -1166,7 +1024,7 @@ export default function ControlPanel({
1166
1024
} ,
1167
1025
} ;
1168
1026
1169
- useHotkeys ( "ctrl+i, meta+i" , fileImport , { preventDefault : true } ) ;
1027
+ useHotkeys ( "ctrl+i, meta+i" , importDiagram , { preventDefault : true } ) ;
1170
1028
useHotkeys ( "ctrl+z, meta+z" , undo , { preventDefault : true } ) ;
1171
1029
useHotkeys ( "ctrl+y, meta+y" , redo , { preventDefault : true } ) ;
1172
1030
useHotkeys ( "ctrl+s, meta+s" , save , { preventDefault : true } ) ;
@@ -1196,20 +1054,21 @@ export default function ControlPanel({
1196
1054
} ) ;
1197
1055
useHotkeys ( "ctrl+alt+w, meta+alt+w" , fitWindow , { preventDefault : true } ) ;
1198
1056
1057
+ const hideModal = ( ) => {
1058
+ setModal ( MODAL . NONE ) ;
1059
+ } ;
1060
+
1199
1061
return (
1200
1062
< >
1201
1063
{ layout . header && header ( ) }
1202
1064
{ layout . toolbar && toolbar ( ) }
1203
- < Modal
1065
+ < ModalManager
1204
1066
modal = { modal }
1205
- exportData = { exportData }
1206
- setExportData = { setExportData }
1067
+ hideModal = { hideModal }
1207
1068
title = { title }
1208
1069
setTitle = { setTitle }
1209
- setPrevTitle = { setPrevTitle }
1210
1070
setDiagramId = { setDiagramId }
1211
1071
setModal = { setModal }
1212
- prevTitle = { prevTitle }
1213
1072
/>
1214
1073
< Sidesheet
1215
1074
type = { sidesheet }
0 commit comments