@@ -8,6 +8,7 @@ import { useEditorStore } from "./editorStore";
88import { Node } from "@xyflow/react" ;
99import { NodeData } from "./types" ;
1010import { useJsonStore } from "./useJsonStore" ;
11+ import { useFileOperations } from "./useFileOperations" ;
1112
1213interface EditorToolbarProps {
1314 defaultLanguage ?: string ;
@@ -32,10 +33,10 @@ export const EditorToolbar: React.FC<EditorToolbarProps> = ({
3233 const setShowUnlockAfter = useEditorStore ( state => state . setShowUnlockAfter ) ;
3334 const addNode = useEditorStore ( state => state . addNode ) ;
3435 const setSettingsDrawerOpen = useEditorStore ( state => state . setSettingsDrawerOpen ) ;
35- const getRoadmapData = useEditorStore ( state => state . getRoadmapData ) ;
3636 const reset = useEditorStore ( state => state . reset ) ;
3737
38- const [ _ , postToJsonStore ] = useJsonStore ( ) ; ;
38+ const [ _ , postToJsonStore ] = useJsonStore ( ) ;
39+ const { downloadRoadmap, openRoadmap } = useFileOperations ( ) ;
3940
4041 const language = settings ?. language || defaultLanguage ;
4142 const t = getTranslations ( language ) ;
@@ -62,39 +63,6 @@ export const EditorToolbar: React.FC<EditorToolbarProps> = ({
6263
6364 const onOpenSettingsDrawer = ( ) => setSettingsDrawerOpen ( true ) ;
6465
65- const onDownload = ( ) => {
66- const roadmapData = getRoadmapData ( ) ;
67- const dataStr = "data:text/json;charset=utf-8," + encodeURIComponent ( JSON . stringify ( roadmapData , null , 2 ) ) ;
68- const downloadAnchorNode = document . createElement ( 'a' ) ;
69- downloadAnchorNode . setAttribute ( "href" , dataStr ) ;
70- downloadAnchorNode . setAttribute ( "download" , "learningmap.json" ) ;
71- document . body . appendChild ( downloadAnchorNode ) ;
72- downloadAnchorNode . click ( ) ;
73- downloadAnchorNode . remove ( ) ;
74- } ;
75-
76- const onOpen = ( ) => {
77- const input = document . createElement ( 'input' ) ;
78- input . type = 'file' ;
79- input . accept = 'application/json' ;
80- input . onchange = ( e : any ) => {
81- const file = e . target . files [ 0 ] ;
82- if ( file ) {
83- const reader = new FileReader ( ) ;
84- reader . onload = ( e : any ) => {
85- try {
86- const data = JSON . parse ( e . target . result ) ;
87- useEditorStore . getState ( ) . loadRoadmapData ( data ) ;
88- } catch ( error ) {
89- console . error ( "Failed to parse JSON file" , error ) ;
90- }
91- } ;
92- reader . readAsText ( file ) ;
93- }
94- } ;
95- input . click ( ) ;
96- } ;
97-
9866 const onReset = ( ) => {
9967 if ( confirm ( t . resetMapWarning ) ) {
10068 reset ( ) ;
@@ -128,10 +96,10 @@ export const EditorToolbar: React.FC<EditorToolbarProps> = ({
12896 </ div >
12997 < div className = "toolbar-group" >
13098 < Menu menuButton = { < MenuButton className = "toolbar-button" > < MenuI /> </ MenuButton > } >
131- < MenuItem onClick = { onOpen } >
99+ < MenuItem onClick = { openRoadmap } >
132100 < FolderOpen size = { 16 } /> < span > { t . open } </ span >
133101 </ MenuItem >
134- < MenuItem onClick = { onDownload } >
102+ < MenuItem onClick = { downloadRoadmap } >
135103 < Download size = { 16 } /> < span > { t . download } </ span >
136104 </ MenuItem >
137105 < MenuItem onClick = { postToJsonStore } >
0 commit comments