Skip to content

Commit 6a5b67f

Browse files
fn-faisalfaisal154
andauthored
Improve cloud code legend for deployed and deploy pending (#431)
* code push fixes * revert config * cloud code legend Co-authored-by: Faisal Nadeem <[email protected]>
1 parent a820c0c commit 6a5b67f

File tree

4 files changed

+42
-75
lines changed

4 files changed

+42
-75
lines changed

src/components/B4ACodeTree/B4ACodeTree.react.js

Lines changed: 15 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import B4ACloudCodeView from 'components/B4ACloudCodeView/B4ACloudCo
99
import B4ATreeActions from 'components/B4ACodeTree/B4ATreeActions';
1010
import Swal from 'sweetalert2';
1111
import B4AAlert from 'components/B4AAlert/B4AAlert.react';
12-
12+
import CloudCodeChanges from 'lib/CloudCodeChanges';
1313
import 'jstree/dist/themes/default/style.css'
1414
import '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(){

src/dashboard/Data/CloudCode/B4ACloudCode.react.js

Lines changed: 9 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,7 @@ class B4ACloudCode extends CloudCode {
4343
unsavedChanges: false,
4444
modal: null,
4545
codeUpdated: false,
46-
47-
// updated cloudcode files.
48-
currentCode: [],
46+
updatedFiles: [],
4947

5048
// Parameters used to on/off alerts
5149
showTips: localStorage.getItem(this.alertTips) !== 'false',
@@ -98,7 +96,6 @@ class B4ACloudCode extends CloudCode {
9896

9997
componentDidUpdate() {
10098
if ( this.state.codeUpdated === true ) {
101-
console.log('code updated');
10299
this.onBeforeUnloadSaveCode = window.onbeforeunload = function() {
103100
return '';
104101
}
@@ -131,25 +128,10 @@ class B4ACloudCode extends CloudCode {
131128
})
132129
}
133130

134-
syncCurCode( nodesOnTree, currentCode ){
135-
return nodesOnTree.map( (node, idx) => {
136-
const code = currentCode.find( code => code.text === node.text );
137-
if ( node.type === 'folder' || node.type === 'new-folder' ) {
138-
node.children = this.syncCurCode(node.children, currentCode[idx].children);
139-
}
140-
else if ( code && node.data?.code !== code?.data?.code
141-
&& node.text == currentCode[idx]?.text) {
142-
node.data.code = currentCode[idx].data?.code;
143-
}
144-
145-
return node;
146-
});
147-
}
148-
149131
async uploadCode() {
150132
let tree = [];
151133
// Get current files on tree
152-
let currentCode = this.syncCurCode(getFiles(), this.state.currentCode);
134+
let currentCode = $('#tree').jstree().get_json();
153135
const missingFileModal = (
154136
<Modal
155137
type={Modal.Types.DANGER}
@@ -293,7 +275,7 @@ class B4ACloudCode extends CloudCode {
293275
description={alertWhatIsMessage} />
294276

295277
content = <B4ACodeTree
296-
setCurrentCode={(newCode) => this.setState({ currentCode: newCode })}
278+
setUpdatedFile={(updatedFiles) => this.setState({ updatedFiles })}
297279
setCodeUpdated={() => this.setState({ codeUpdated: true })}
298280
files={this.state.files}
299281
parentState={this.setState.bind(this)}
@@ -302,12 +284,12 @@ class B4ACloudCode extends CloudCode {
302284

303285
footer = <div className={styles.footer}>
304286
<div className={styles.footerContainer}>
305-
<div className={styles.ccStatusIcon}>
306-
<span className={styles.deployedCircle}></span> <small>Deployed</small>
307-
</div>
308-
<div className={styles.ccStatusIcon}>
309-
<span className={styles.undeployedCircle}></span> <small>Deploy pending</small>
310-
</div>
287+
{
288+
this.state.updatedFiles.length > 0 &&
289+
<div className={styles.ccStatusIcon}>
290+
<span className={styles.undeployedCircle}></span> <small>Files pending deploy ({this.state.updatedFiles.length})</small>
291+
</div>
292+
}
311293
</div>
312294
<div className={styles.footerContainer}>
313295
<Button

src/lib/CloudCodeChanges.js

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
2+
export default class CloudCodeChanges {
3+
4+
constructor(){
5+
this.files = [];
6+
}
7+
8+
addFile( fileName ) {
9+
this.files = this.files.filter(f => f !== fileName);
10+
this.files = [ ...this.files, fileName ];
11+
}
12+
13+
getFiles() {
14+
return this.files;
15+
}
16+
17+
}

src/lib/ColumnPreferences.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ export function getOrder(cols, appId, className, defaultPrefs) {
115115
if (typeof required === 'undefined') {
116116
order[i].required = false;
117117
}
118-
118+
119119
if (requested[name]) {
120120
filtered.push(order[i]);
121121
} else {

0 commit comments

Comments
 (0)