@@ -9,7 +9,7 @@ import B4ACloudCodeView from 'components/B4ACloudCodeView/B4ACloudCo
99import B4ATreeActions from 'components/B4ACodeTree/B4ATreeActions' ;
1010import Swal from 'sweetalert2' ;
1111import B4AAlert from 'components/B4AAlert/B4AAlert.react' ;
12-
12+ import CloudCodeChanges from 'lib/CloudCodeChanges' ;
1313import 'jstree/dist/themes/default/style.css'
1414import 'components/B4ACodeTree/B4AJsTree.css'
1515
@@ -40,9 +40,10 @@ export default class B4ACodeTree extends React.Component {
4040 isImage : false ,
4141 selectedFolder : 0 ,
4242 isFolderSelected : true ,
43- updatedFiles : [ ] ,
4443 selectedNodeData : null
4544 }
45+
46+ this . cloudCodeChanges = new CloudCodeChanges ( ) ;
4647 }
4748
4849 getFileType ( file ) {
@@ -65,20 +66,6 @@ export default class B4ACodeTree extends React.Component {
6566 this . loadFile ( )
6667 }
6768
68- syncNewFileContent ( tree , file ) {
69- return tree . map ( ( node ) => {
70- if ( node . type === 'folder' || node . type === 'new-folder' ) {
71- node . children = this . syncNewFileContent ( node . children , file ) ;
72- }
73- else if ( file && node . data ?. code !== file ?. base64 [ 0 ]
74- && node . text == file . fileList [ 0 ] . name ) {
75- node . data . code = file . base64 [ 0 ] ;
76- }
77-
78- return node ;
79- } ) ;
80- }
81-
8269 // load file and add on tree
8370 async loadFile ( ) {
8471 let file = this . state . newFile ;
@@ -88,14 +75,10 @@ export default class B4ACodeTree extends React.Component {
8875 if ( overwrite === true ) {
8976 this . setState ( { newFile : '' , filesOnTree : file } ) ;
9077 this . handleTreeChanges ( )
91- const updatedFiles = this . syncNewFileContent ( this . state . files , file ) ;
92- this . props . setCurrentCode ( updatedFiles ) ;
9378 }
9479 }
9580 }
9681
97-
98-
9982 deleteFile ( ) {
10083 if ( this . state . nodeId ) {
10184 B4ATreeActions . remove ( `#${ this . state . nodeId } ` , true ) ;
@@ -133,8 +116,6 @@ export default class B4ACodeTree extends React.Component {
133116 selectedFile = selected . text ;
134117 nodeId = selected . id
135118 extension = B4ATreeActions . getExtension ( selectedFile )
136- const fileUpdated = this . state . updatedFiles . find ( f => f . file === this . state . selectedFile ) ;
137- source = fileUpdated ? fileUpdated . updatedContent : source ;
138119 this . setState ( { source, selectedFile, nodeId, extension, isImage } )
139120 }
140121 fr . readAsText ( selectedFile ) ;
@@ -163,8 +144,6 @@ export default class B4ACodeTree extends React.Component {
163144 }
164145 }
165146 }
166- const fileUpdated = this . state . updatedFiles . find ( f => f . file === this . state . selectedFile ) ;
167- source = fileUpdated ? fileUpdated . updatedContent : source ;
168147 this . setState ( { source, selectedFile, nodeId, extension, isImage, selectedFolder, isFolderSelected : selected . type == 'folder' || selected . type == 'new-folder' } )
169148 }
170149
@@ -181,37 +160,29 @@ export default class B4ACodeTree extends React.Component {
181160 return this . props . parentState ( { unsavedChanges : true } )
182161 }
183162
184- getUpdatedFiles ( files , value ) {
185- return files . map ( ( file ) => {
186- if ( file . type === 'folder' || file . type === 'new-folder' ) {
187- file . children = this . getUpdatedFiles ( file . children , value ) ;
188- }
189- else if ( this . state . selectedFile === file . text && file . data ) {
190- file . data . code = value ;
191- }
192- // children.
193- return file ;
194- } ) ;
195- }
196-
197163 async updateSelectedFileContent ( value ) {
198- const updatedData = { file : this . state . selectedFile , updatedContent : value } ;
199164 const ecodedValue = await B4ATreeActions . encodeFile ( value , 'data:plain/text;base64' ) ;
200- let updatedFiles = this . getUpdatedFiles (
201- this . state . files ,
202- ecodedValue
203- ) ;
204- this . setState ( { updatedFiles : [ ...this . state . updatedFiles . filter ( f => f . file !== this . state . selectedFile ) , updatedData ] , files : updatedFiles , source : value } ) ;
205- this . props . setCurrentCode ( updatedFiles ) ;
165+ this . setState ( { source : value } ) ;
206166
207167 this . props . setCodeUpdated ( true ) ;
208168 this . state . selectedNodeData ?. instance . set_icon ( this . state . selectedNodeData . node , require ( './icons/file.png' ) . default ) ;
169+
170+ $ ( '#tree' ) . jstree ( 'get_selected' , true ) . pop ( ) . data . code = ecodedValue ;
171+ $ ( '#tree' ) . jstree ( ) . redraw ( true ) ;
172+
173+ // set updated files.
174+ this . cloudCodeChanges . addFile ( $ ( '#tree' ) . jstree ( 'get_selected' , true ) . pop ( ) . text ) ;
175+ this . props . setUpdatedFile ( this . cloudCodeChanges . getFiles ( ) ) ;
209176 }
210177
211178 updateCodeOnNewFile ( type ) {
212179 if ( type === 'new-file' ) {
213180 this . props . setCodeUpdated ( true ) ;
214181 }
182+
183+ // set updated files.
184+ this . cloudCodeChanges . addFile ( $ ( '#tree' ) . jstree ( 'get_selected' , true ) . pop ( ) . text ) ;
185+ this . props . setUpdatedFile ( this . cloudCodeChanges . getFiles ( ) ) ;
215186 }
216187
217188 componentDidMount ( ) {
@@ -229,9 +200,6 @@ export default class B4ACodeTree extends React.Component {
229200 $ ( '#tree' ) . on ( 'rename_node.jstree' , ( node , parent ) => this . updateCodeOnNewFile ( parent ?. node ?. type ) ) ;
230201 $ ( '#tree' ) . on ( 'delete_node.jstree' , ( node , parent ) => this . updateCodeOnNewFile ( parent ?. node ?. type ) ) ;
231202
232- // current code.
233- this . props . setCurrentCode ( this . state . files ) ;
234-
235203 }
236204
237205 render ( ) {
0 commit comments