@@ -75,23 +75,38 @@ const downloadImg = (state, setState, format) => {
7575 getGraphFun ( state ) . downloadImg ( format ) ;
7676} ;
7777
78- // TODO
79- // const saveLocal = (state, d) => {
80- // };
81-
8278const saveAction = ( state , d , fileName ) => {
8379 getGraphFun ( state ) . saveToDisk ( fileName ) ;
8480} ;
8581
86- const readFile = ( state , setState , file ) => {
82+ async function saveGraphMLFile ( state ) {
83+ if ( state . curGraphInstance ) {
84+ const graph = state . graphs [ state . curGraphIndex ] ;
85+ if ( graph . fileHandle ) {
86+ const stream = await graph . fileHandle . createWritable ( ) ;
87+ await stream . write ( getGraphFun ( state ) . saveToFolder ( ) ) ;
88+ await stream . close ( ) ;
89+ } else {
90+ // eslint-disable-next-line no-alert
91+ alert ( 'Switch to Edge/Chrome!' ) ;
92+ }
93+ } else {
94+ // eslint-disable-next-line no-alert
95+ alert ( 'Switch to Edge/Chrome!' ) ;
96+ }
97+ }
98+
99+ const readFile = ( state , setState , file , fileHandle ) => {
87100 if ( file ) {
88101 const fr = new FileReader ( ) ;
89102 const projectName = file . name ;
90103 if ( file . name . split ( '.' ) . pop ( ) === 'graphml' ) {
91104 fr . onload = ( x ) => {
92105 setState ( {
93106 type : T . ADD_GRAPH ,
94- payload : { projectName, graphML : x . target . result } ,
107+ payload : {
108+ projectName, graphML : x . target . result , fileHandle, fileName : file . name ,
109+ } ,
95110 } ) ;
96111 } ;
97112 fr . readAsText ( file ) ;
@@ -151,7 +166,7 @@ const toggleServer = (state, dispatcher) => {
151166} ;
152167
153168export {
154- createNode , editElement , deleteElem , downloadImg , saveAction ,
169+ createNode , editElement , deleteElem , downloadImg , saveAction , saveGraphMLFile ,
155170 readFile , readTextFile , newProject , clearAll , editDetails , undo , redo ,
156171 openShareModal , openSettingModal , viewHistory ,
157172 toggleServer ,
0 commit comments