From 256e7372d4a96079b993115eabde8b33d400c7c8 Mon Sep 17 00:00:00 2001 From: Shin'ya Ueoka Date: Sun, 26 Nov 2017 08:25:23 +0900 Subject: [PATCH] settings migration between json and form --- .../components/form/blacklist-form.jsx | 2 +- src/settings/components/index.jsx | 23 +++++++++++++++++-- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/src/settings/components/form/blacklist-form.jsx b/src/settings/components/form/blacklist-form.jsx index 9cb547b..4333929 100644 --- a/src/settings/components/form/blacklist-form.jsx +++ b/src/settings/components/form/blacklist-form.jsx @@ -34,7 +34,7 @@ class BlacklistForm extends Component { let name = e.target.name; let index = e.target.getAttribute('data-index'); - let next = this.props.value.slice(); + let next = this.props.value ? this.props.value.slice() : []; if (name === 'url') { next[index] = e.target.value; diff --git a/src/settings/components/index.jsx b/src/settings/components/index.jsx index fb25df6..ae7cd31 100644 --- a/src/settings/components/index.jsx +++ b/src/settings/components/index.jsx @@ -6,6 +6,7 @@ import KeymapsForm from './form/keymaps-form'; import BlacklistForm from './form/blacklist-form'; import * as settingActions from 'settings/actions/setting'; import * as validator from 'shared/validators/setting'; +import * as settingsValues from 'shared/settings/values'; class SettingsComponent extends Component { constructor(props, context) { @@ -95,7 +96,7 @@ class SettingsComponent extends Component { label='Use form' checked={this.state.settings.source === 'form'} value='form' - onChange={this.bindValue.bind(this)} /> + onChange={this.bindSource.bind(this)} /> + onChange={this.bindSource.bind(this)} /> { fields } @@ -143,6 +144,24 @@ class SettingsComponent extends Component { this.setState(next); this.context.store.dispatch(settingActions.save(next.settings)); } + + bindSource(e) { + let from = this.state.settings.source; + let to = e.target.value; + + let next = Object.assign({}, this.state); + if (from === 'form' && to === 'json') { + next.settings.json = + settingsValues.jsonFromForm(this.state.settings.form); + } else if (from === 'json' && to === 'form') { + next.settings.form = + settingsValues.formFromJson(this.state.settings.json); + } + next.settings.source = to; + + this.setState(next); + this.context.store.dispatch(settingActions.save(next.settings)); + } } export default SettingsComponent;