diff options
Diffstat (limited to 'app/client/dataset/dataset.form.js')
| -rw-r--r-- | app/client/dataset/dataset.form.js | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/app/client/dataset/dataset.form.js b/app/client/dataset/dataset.form.js new file mode 100644 index 0000000..fd00518 --- /dev/null +++ b/app/client/dataset/dataset.form.js @@ -0,0 +1,87 @@ +import { h, Component } from 'preact' +import { bindActionCreators } from 'redux' +import { connect } from 'react-redux' + +import * as datasetActions from './dataset.actions' + +import Group from '../common/group.component' +import Param from '../common/param.component' +import { FileList } from '../common/fileList.component' +import FileUpload from '../common/fileUpload.component' +import TextInput from '../common/textInput.component' + +class DatasetForm extends Component { + constructor(props){ + super() + } + render(){ + const { + loading, status, error, + module, folder, + canRename, canUpload, canAddURL + } = this.props + // sort files?? + + if (!folder.id) { + return ( + <div className='dataset'> + <div className='params row'> + <div className='column'> + {canRename + ? this.renderFolderNameInput(folder.name) + : <h2>{folder.name}</h2>} + </div> + </div> + </div> + ) + } + return ( + <div className='params row'> + <div className='col'> + <Group title={title || 'Dataset'}> + {canRename + ? this.renderFolderNameInput(folder.name) + : <Param title='Dataset name'>{folder.name}</Param>} + {folder.id && canUpload && this.renderUploadInput()} + {folder.id && canAddURL && this.renderURLInput()} + </Group> + </div> + </div> + ) + } + curry(action) { + const { module, folder } = this.props + return (param) => action(module, folder, param) + } + renderFolderNameInput(name){ + return <TextInput + title={!this.props.folder.id ? 'Create a new dataset' : 'Dataset name'} + value={name} + onSave={this.curry(this.props.actions.dataset.createOrUpdateFolder)} + /> + } + renderUploadInput(){ + return <FileUpload + title='Upload a file' + mime='image.*' + onUpload={this.curry(this.props.actions.dataset.uploadFile)} + /> + } + renderURLInput(){ + return <TextInput + title='Fetch a URL' + placeholder='http://' + onSave={this.curry(this.props.actions.dataset.handleURL)} + /> + } +} + +const mapStateToProps = state => state.dataset + +const mapDispatchToProps = (dispatch, ownProps) => ({ + actions: { + dataset: bindActionCreators(datasetActions, dispatch), + } +}) + +export default connect(mapStateToProps, mapDispatchToProps)(DatasetForm) |
