import './site.scss'; import React from 'react'; import { connect } from 'react-redux'; import Input from './ui/Input'; import SearchForm from './form/SearchForm'; import KeymapsForm from './form/KeymapsForm'; import BlacklistForm from './form/BlacklistForm'; import PropertiesForm from './form/PropertiesForm'; import * as properties from '../../shared/settings/properties'; import * as settingActions from '../../settings/actions/setting'; const DO_YOU_WANT_TO_CONTINUE = 'Some settings in JSON can be lost when migrating. ' + 'Do you want to continue?'; interface Props { source: string; json: string; form: any; error: string; // FIXME store: any; } class SettingsComponent extends React.Component { componentDidMount() { this.props.dispatch(settingActions.load()); } renderFormFields(form: any) { return
Keybindings this.bindForm('keymaps', value)} onBlur={this.save.bind(this)} />
Search Engines this.bindForm('search', value)} onBlur={this.save.bind(this)} />
Blacklist this.bindForm('blacklist', value)} onBlur={this.save.bind(this)} />
Properties this.bindForm('properties', value)} onBlur={this.save.bind(this)} />
; } renderJsonFields(json: string, error: string) { return
; } render() { let fields = null; let disabled = this.props.error.length > 0; if (this.props.source === 'form') { fields = this.renderFormFields(this.props.form); } else if (this.props.source === 'json') { fields = this.renderJsonFields(this.props.json, this.props.error); } return (

Configure Vim-Vixen

{ fields }
); } bindForm(name: string, value: any) { let settings = { source: this.props.source, json: this.props.json, form: { ...this.props.form }, }; settings.form[name] = value; this.props.dispatch(settingActions.set(settings)); } bindJson(_name: string, value: string) { let settings = { source: this.props.source, json: value, form: this.props.form, }; this.props.dispatch(settingActions.set(settings)); } bindSource(_name: string, value: string) { let from = this.props.source; if (from === 'form' && value === 'json') { this.props.dispatch(settingActions.switchToJson(this.props.form)); } else if (from === 'json' && value === 'form') { let b = window.confirm(DO_YOU_WANT_TO_CONTINUE); if (!b) { this.forceUpdate(); return; } this.props.dispatch(settingActions.switchToForm(this.props.json)); } } save() { let settings = this.props.store.getState(); this.props.dispatch(settingActions.save(settings)); } } const mapStateToProps = (state: any) => state; export default connect(mapStateToProps)(SettingsComponent);