From c8f7cb21101dbd541896f671f7fc8df1614d660d Mon Sep 17 00:00:00 2001 From: Alex Liebowitz Date: Fri, 12 May 2017 06:36:08 -0400 Subject: [PATCH] Update FormField to use new Electron file/directory selector --- ui/js/component/form.js | 31 +++++++++++++++++++++++++++---- 1 file changed, 27 insertions(+), 4 deletions(-) diff --git a/ui/js/component/form.js b/ui/js/component/form.js index f75310c92..d5deaf23c 100644 --- a/ui/js/component/form.js +++ b/ui/js/component/form.js @@ -1,7 +1,9 @@ import React from 'react'; +import FileSelector from './file-selector.js'; import {Icon} from './common.js'; var formFieldCounter = 0, + formFieldFileSelectorTypes = ['file', 'directory'], formFieldNestedLabelTypes = ['radio', 'checkbox']; function formFieldId() { @@ -19,6 +21,14 @@ export let FormField = React.createClass({ postfix: React.PropTypes.string, hasError: React.PropTypes.bool }, + handleFileChosen: function(path) { + this.refs.field.value = path; + if (this.props.onChange) { // Updating inputs programmatically doesn't generate an event, so we have to make our own + const event = new Event('change', {bubbles: true}) + this.refs.field.dispatchEvent(event); // This alone won't generate a React event, but we use it to attach the field as a target + this.props.onChange(event); + } + }, getInitialState: function() { return { isError: null, @@ -26,17 +36,29 @@ export let FormField = React.createClass({ } }, componentWillMount: function() { - if (['text', 'number', 'radio', 'checkbox', 'file'].includes(this.props.type)) { + if (['text', 'number', 'radio', 'checkbox'].includes(this.props.type)) { this._element = 'input'; this._type = this.props.type; } else if (this.props.type == 'text-number') { this._element = 'input'; this._type = 'text'; + } else if (formFieldFileSelectorTypes.includes(this.props.type)) { + this._element = 'input'; + this._type = 'hidden'; } else { // Non field, e.g.