Skip to content

Commit 2fa8559

Browse files
fn-faisalfaisal154
andauthored
new-file upload fix (#420)
Co-authored-by: Faisal Nadeem <[email protected]>
1 parent 95031c8 commit 2fa8559

File tree

2 files changed

+31
-6
lines changed

2 files changed

+31
-6
lines changed

src/components/B4ACodeTree/B4ACodeTree.react.js

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,20 @@ export default class B4ACodeTree extends React.Component {
6565
this.loadFile()
6666
}
6767

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+
6882
// load file and add on tree
6983
loadFile() {
7084
let file = this.state.newFile;
@@ -73,9 +87,13 @@ export default class B4ACodeTree extends React.Component {
7387
B4ATreeActions.addFilesOnTree(file, currentTree, this.state.selectedFolder)
7488
this.setState({ newFile: '', filesOnTree: file });
7589
this.handleTreeChanges()
90+
const updatedFiles = this.syncNewFileContent(this.state.files, file);
91+
this.props.setCurrentCode(updatedFiles);
7692
}
7793
}
7894

95+
96+
7997
deleteFile() {
8098
if (this.state.nodeId) {
8199
B4ATreeActions.remove(`#${this.state.nodeId}`, true);
@@ -211,6 +229,7 @@ export default class B4ACodeTree extends React.Component {
211229

212230
// current code.
213231
this.props.setCurrentCode(this.state.files);
232+
214233
}
215234

216235
render(){
@@ -297,7 +316,6 @@ export default class B4ACodeTree extends React.Component {
297316
if (value) {
298317
const parent = $('#tree').jstree('get_selected');
299318
$('#tree').jstree("create_node", parent, { data: {code: 'data:plain/text;base64,IA=='}, type: 'new-file', text: value }, 'inside', false, false);
300-
// console.log($('#tree').jstree('get_selected', true), this.state.files);
301319
this.setState({ files: $('#tree').jstree(true).get_json() });
302320
}
303321
})

src/components/B4ACodeTree/B4ATreeActions.js

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -141,16 +141,22 @@ const addFilesOnTree = async (files, currentCode, selectedFolder) => {
141141
// Select the folder to insert based on file extension. If is a js file,
142142
// insert on "cloud" folder, else insert on "public" folder. This logic is
143143
// a legacy from the old Cloud Code page
144-
folder = obj.children.find(f => f === selectedFolder);
144+
folder = obj.children[selectedFolder]
145145
}
146146
await verifyFileNames(folder, newTreeNodes[j]);
147-
const position = 'inside';
148-
const parent = $('#tree').jstree('get_selected');
149-
$('#tree').jstree("create_node", parent, { data: newTreeNodes[j].data, type: 'new-file', text: newTreeNodes[j].text.name }, position, false, false);
147+
addFileOnSelectedNode(newTreeNodes[j].text.name);
150148
}
151149
return currentCode;
152150
}
153151

152+
const addFileOnSelectedNode = ( name, data = {code: 'data:plain/text;base64,IA=='} ) => {
153+
let parent = $('#tree').jstree('get_selected');
154+
if ( ['default', 'file', 'new-file'].includes($('#tree').jstree().get_node(parent).type) ) {
155+
parent = $('#tree').jstree().get_node(parent).parent;
156+
}
157+
$('#tree').jstree("create_node", parent, { data, type: 'new-file', text: name }, 'inside', false, false);
158+
}
159+
154160
// Configure the menu that is shown on right-click based on files type
155161
const customMenu = node => {
156162
let items = $.jstree.defaults.contextmenu.items();
@@ -250,5 +256,6 @@ export default {
250256
encodeFile,
251257
updateTreeContent,
252258
getExtension,
253-
refreshEmptyFolderIcons
259+
refreshEmptyFolderIcons,
260+
addFileOnSelectedNode
254261
}

0 commit comments

Comments
 (0)