diff options
author | Shin'ya Ueoka <ueokande@i-beam.org> | 2017-11-28 21:26:01 +0900 |
---|---|---|
committer | Shin'ya Ueoka <ueokande@i-beam.org> | 2017-11-28 21:26:01 +0900 |
commit | a69f33f569f97791c712234971f943288df8778a (patch) | |
tree | dabdca517145377cb5cea836739d25de74230fde /src/settings/components/index.jsx | |
parent | e1060f9bb218202d13a4382584f220d47173194c (diff) |
cancel migrate on failure
Diffstat (limited to 'src/settings/components/index.jsx')
-rw-r--r-- | src/settings/components/index.jsx | 56 |
1 files changed, 41 insertions, 15 deletions
diff --git a/src/settings/components/index.jsx b/src/settings/components/index.jsx index 38f7db8..73520ca 100644 --- a/src/settings/components/index.jsx +++ b/src/settings/components/index.jsx @@ -148,15 +148,54 @@ class SettingsComponent extends Component { bindValue(e) { let next = Object.assign({}, this.state); + let error = false; next.errors.json = ''; try { this.validate(e.target); } catch (err) { next.errors.json = err.message; + error = true; } next.settings[e.target.name] = e.target.value; + this.setState(this.state); + if (!error) { + this.context.store.dispatch(settingActions.save(next.settings)); + } + } + + migrateToForm() { + let b = window.confirm(DO_YOU_WANT_TO_CONTINUE); + if (!b) { + this.setState(this.state); + return; + } + try { + validator.validate(JSON.parse(this.state.settings.json)); + } catch (err) { + this.setState(this.state); + return; + } + + let form = settingsValues.formFromJson( + this.state.settings.json, KeymapsForm.AllowdOps); + let next = Object.assign({}, this.state); + next.settings.form = form; + next.settings.source = 'form'; + next.errors.json = ''; + + this.setState(next); + this.context.store.dispatch(settingActions.save(next.settings)); + } + + migrateToJson() { + let json = settingsValues.jsonFromForm(this.state.settings.form); + let next = Object.assign({}, this.state); + next.settings.json = json; + next.settings.source = 'json'; + next.errors.json = ''; + this.setState(next); this.context.store.dispatch(settingActions.save(next.settings)); } @@ -165,24 +204,11 @@ class SettingsComponent extends Component { 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); + this.migrateToJson(); } else if (from === 'json' && to === 'form') { - let b = window.confirm(DO_YOU_WANT_TO_CONTINUE); - if (!b) { - this.setState(this.state); - return; - } - next.settings.form = - settingsValues.formFromJson( - this.state.settings.json, KeymapsForm.AllowdOps); + this.migrateToForm(); } - next.settings.source = to; - - this.setState(next); - this.context.store.dispatch(settingActions.save(next.settings)); } } |