diff options
Diffstat (limited to 'client/components')
| -rw-r--r-- | client/components/App.jsx | 8 | ||||
| -rw-r--r-- | client/components/Folder/FileUploadButton.jsx | 44 | ||||
| -rw-r--r-- | client/components/Folder/Folder.jsx | 28 | ||||
| -rw-r--r-- | client/components/Folders/FolderForm.jsx | 2 | ||||
| -rw-r--r-- | client/components/Folders/Folders.jsx | 4 |
5 files changed, 69 insertions, 17 deletions
diff --git a/client/components/App.jsx b/client/components/App.jsx index f7122b2..0ed9288 100644 --- a/client/components/App.jsx +++ b/client/components/App.jsx @@ -12,9 +12,10 @@ import client from '../client' class App extends Component { constructor(props) { super() + let openFolders = JSON.parse( localStorage['openFolders'] || 'null' ) this.state = { folders: null, - openFolders: [], + openFolders: openFolders || [], } client.folder.index().then( folders => this.setState({ folders }) ) } @@ -23,6 +24,9 @@ class App extends Component { this.setState({ openFolders: this.state.openFolders.concat([folder]) }) } } + addFolder(folder) { + this.setState({ folders: this.state.folders.concat([folder]) }) + } render() { const openFolders = this.state.openFolders.map((folder) => { return ( @@ -32,7 +36,7 @@ class App extends Component { return ( <div> <Header /> - <Folders folders={this.state.folders} openFolder={(folder) => this.openFolder(folder)} /> + <Folders folders={this.state.folders} openFolder={(folder) => this.openFolder(folder)} addFolder={(folder) => this.addFolder(folder)} /> {openFolders} </div> ) diff --git a/client/components/Folder/FileUploadButton.jsx b/client/components/Folder/FileUploadButton.jsx new file mode 100644 index 0000000..8c7d170 --- /dev/null +++ b/client/components/Folder/FileUploadButton.jsx @@ -0,0 +1,44 @@ +import { h, Component } from 'preact' +import { Link } from 'react-router-dom' + +import Modal from '../Modal.jsx' + +import client from '../../client.js' + +import FileUploadButton from './FileUploadButton.jsx' + +export default class Folder extends Component { + constructor(props) { + super() + this.state = { + } + this.updateFiles = this.updateFiles.bind(this) + } + updateFiles(event){ + const name = event.target.name + const files = event.target.files + console.log(name, files) + + client.upload(this.props.folder.id, files).then( got_files => { + console.log(got_files) + this.props.addFiles(got_files) + }) + } + + render() { + console.log(this.props) + const files = (this.props.folder.files || []).map( (file, i) => { + return ( + <div key={i}> + {file.name} + </div> + ) + }) + return ( + <div class='fileUploadButton'> + <input type='file' multiple name='files' onChange={this.updateFiles} /> + <span>+ file</span> + </div> + ) + } +} diff --git a/client/components/Folder/Folder.jsx b/client/components/Folder/Folder.jsx index 891451c..e39b40d 100644 --- a/client/components/Folder/Folder.jsx +++ b/client/components/Folder/Folder.jsx @@ -5,34 +5,36 @@ import Modal from '../Modal.jsx' import client from '../../client.js' +import FileUploadButton from './FileUploadButton.jsx' + export default class Folder extends Component { constructor(props) { super() this.state = { - adding: false, + files: props.folder.files || [], } + this.addFiles = this.addFiles.bind(this) } - toggle(folder) { - folder.open = ! folder.open - if (folder.open && ! folder.files) { - client.files.index({ 'folder_id': folder.id }).then( files => { - this.props.openFolder(folder) - }) - } + addFiles(newFiles) { + console.log(newFiles) + if (! newFiles) return + const files = this.state.files.concat(newFiles).sort( (a,b) => { return b.id - a.id } ) + this.setState({ files }) } render() { console.log(this.props) - const folders = (this.props.folders || []).map( (folder,i) => { + const files = (this.state.files).map( (file, i) => { + if (! file) return return ( - <div key={i} onClick={() => this.toggle(folder)}> - {folder.name} + <div key={i}> + {file.name} </div> ) }) return ( <div class='folders'> - <b>{this.props.folder.name}</b> <button onClick={() => {}}>+ file</button> - {folders} + <b>{this.props.folder.name}</b> <FileUploadButton folder={this.props.folder} addFiles={this.addFiles} /> + {files} </div> ) } diff --git a/client/components/Folders/FolderForm.jsx b/client/components/Folders/FolderForm.jsx index 6068400..b89e2a0 100644 --- a/client/components/Folders/FolderForm.jsx +++ b/client/components/Folders/FolderForm.jsx @@ -26,7 +26,7 @@ export default class FolderForm extends Component { let rec = Object.assign({}, this.state) delete rec.error client.folder.create( rec ).then( (data) => { - console.log(data) + this.props.addFolder( data ) }) } render() { diff --git a/client/components/Folders/Folders.jsx b/client/components/Folders/Folders.jsx index e5d5d76..0d34f58 100644 --- a/client/components/Folders/Folders.jsx +++ b/client/components/Folders/Folders.jsx @@ -23,6 +23,8 @@ export default class Folders extends Component { folder.open = ! folder.open if (folder.open && ! folder.files) { client.file.index({ 'folder_id': folder.id }).then( files => { + console.log(files) + folder.files = files this.props.openFolder(folder) }) } @@ -41,7 +43,7 @@ export default class Folders extends Component { <b>folders</b> <button onClick={() => this.openModal()}>+ folder</button> {folders} <Modal visible={this.state.adding} onClose={() => this.closeModal()}> - <FolderForm /> + <FolderForm addFolder={this.props.addFolder} /> </Modal> </div> ) |
