diff options
Diffstat (limited to 'client/components/Browser/Folders')
| -rw-r--r-- | client/components/Browser/Folders/FolderForm.jsx | 47 | ||||
| -rw-r--r-- | client/components/Browser/Folders/Folders.jsx | 56 |
2 files changed, 103 insertions, 0 deletions
diff --git a/client/components/Browser/Folders/FolderForm.jsx b/client/components/Browser/Folders/FolderForm.jsx new file mode 100644 index 0000000..ad3e321 --- /dev/null +++ b/client/components/Browser/Folders/FolderForm.jsx @@ -0,0 +1,47 @@ +import { h, Component } from 'preact' + +import client from '../../../client.js' + +export default class FolderForm extends Component { + constructor(props) { + super() + this.state = { + name: '', + } + this.updateState = this.updateState.bind(this) + this.handleSubmit = this.handleSubmit.bind(this) + } + updateState(event){ + const name = event.target.name + let value = event.target.value + console.log(name, value) + this.setState({ + [name]: value, + error: null, + }) + } + handleSubmit(event) { + event.preventDefault() + let rec = Object.assign({}, this.state) + delete rec.error + this.props.onClose() + client.folder.create( rec ).then( (data) => { + this.props.addFolder( data ) + }) + } + render() { + return ( + <div class='form'> + <h1>new folder</h1> + <div> + <label for='folders_folder_name'>Name</label> + <input type='text' id='folders_folder_name' name='name' value={this.state.name} onChange={this.updateState} /> + </div> + <div> + <label></label> + <button onClick={this.handleSubmit}>Create</button> + </div> + </div> + ) + } +} diff --git a/client/components/Browser/Folders/Folders.jsx b/client/components/Browser/Folders/Folders.jsx new file mode 100644 index 0000000..2c85e80 --- /dev/null +++ b/client/components/Browser/Folders/Folders.jsx @@ -0,0 +1,56 @@ +import { h, Component } from 'preact' + +import Modal from '../../UI/Modal.jsx' +import FolderForm from './FolderForm.jsx' + +import client from '../../../client.js' + +export default class Folders extends Component { + constructor(props) { + super() + this.state = { + adding: false, + } + } + openModal() { + this.setState({ adding: true }) + } + closeModal() { + this.setState({ adding: false }) + } + toggle(folder) { + 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) + }) + } + } + render() { + const folders = (this.props.folders || []).map( (folder,i) => { + return ( + <div key={i} onClick={() => this.toggle(folder)}> + <span class='name'>{folder.name}</span> + </div> + ) + }) + return ( + <div class='window'> + <div class='heading'> + <b>browser</b> + <div class='buttons'> + <button onClick={() => this.openModal()}>+ folder</button> + </div> + </div> + <div class='list'> + {folders} + </div> + <Modal visible={this.state.adding} onClose={() => this.closeModal()}> + <FolderForm addFolder={this.props.addFolder} onClose={() => this.closeModal()} /> + </Modal> + </div> + ) + } +} |
