-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathscript.js
More file actions
54 lines (46 loc) · 1.54 KB
/
script.js
File metadata and controls
54 lines (46 loc) · 1.54 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
const socket = io();
class ExplorerView extends React.Component {
constructor(props) {
super(props);
this.state = {
folder: props.folder,
files: props.files
};
socket.on('FolderResponse', ({folder, files}) => {
this.setState({ folder: folder, files: files });
});
}
handleDoubleClick(file) {
if (file.type == 'folder') {
socket.emit('FolderRequest', { folder: this.state.folder, file: file.name });
}
}
goBack(howMany) {
const folder = this.state.folder;
socket.emit('FolderRequest', {
folder: (howMany <= folder.length) ? folder.slice(0, -howMany) : null,
file: (howMany > 1) ? folder.slice(-howMany, 1-howMany)[0] : folder.slice(-1)
});
}
buildFileItem(file) {
return (
React.createElement('div', { 'class': file.type, onDoubleClick: () => this.handleDoubleClick(file) },
React.createElement('div', { 'class': 'label' },
React.createElement('span', null, file.name)))
);
}
render() {
return (
React.createElement("div", null,
React.createElement("div", { id: "path" },
[].concat(...['Explorer', ...this.state.folder].map((folder, index, self) => [React.createElement('span', {
onClick: () => this.goBack(self.length - index)
}, folder), React.createElement('div')])).slice(0, -1)),
React.createElement("div", { id: "explorer" },
this.state.files.map(file => this.buildFileItem(file))))
);
}
}
socket.on("ExplorerInit", ({folder, files}) => {
ReactDOM.render(React.createElement(ExplorerView, { folder: folder, files: files }), document.getElementById('root'));
});