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 PartialBlacklistForm from './form/PartialBlacklistForm'; import * as settingActions from '../../settings/actions/setting'; import SettingData, { FormKeymaps, FormSearch, FormSettings, JSONTextSettings, } from '../../shared/SettingData'; import { State as AppState } from '../reducers/setting'; import Properties from '../../shared/settings/Properties'; import Blacklist from '../../shared/settings/Blacklist'; const DO_YOU_WANT_TO_CONTINUE = 'Some settings in JSON can be lost when migrating. ' + 'Do you want to continue?'; type StateProps = ReturnType; interface DispatchProps { dispatch: (action: any) => void, } type Props = StateProps & DispatchProps & { // FIXME store: any; }; class SettingsComponent extends React.Component { componentDidMount() { this.props.dispatch(settingActions.load()); } renderFormFields(form: FormSettings) { return
Keybindings
Search Engines
Blacklist
Partial blacklist
Properties
; } renderJsonFields(json: JSONTextSettings, error: string) { return
; } render() { let fields = null; const 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 }
); } bindKeymapsForm(value: FormKeymaps) { const data = new SettingData({ source: this.props.source, form: (this.props.form as FormSettings).buildWithKeymaps(value), }); this.props.dispatch(settingActions.set(data)); } bindSearchForm(value: any) { const data = new SettingData({ source: this.props.source, form: (this.props.form as FormSettings).buildWithSearch( FormSearch.fromJSON(value)), }); this.props.dispatch(settingActions.set(data)); } bindBlacklistForm(blacklist: Blacklist) { const data = new SettingData({ source: this.props.source, form: (this.props.form as FormSettings).buildWithBlacklist(blacklist), }); this.props.dispatch(settingActions.set(data)); } bindPropertiesForm(value: any) { const data = new SettingData({ source: this.props.source, form: (this.props.form as FormSettings).buildWithProperties( Properties.fromJSON(value)) }); this.props.dispatch(settingActions.set(data)); } bindJson(_name: string, value: string) { const data = new SettingData({ source: this.props.source, json: JSONTextSettings.fromText(value), }); this.props.dispatch(settingActions.set(data)); } bindSource(_name: string, value: string) { const from = this.props.source; if (from === 'form' && value === 'json') { this.props.dispatch(settingActions.switchToJson( this.props.form as FormSettings)); this.save(); } else if (from === 'json' && value === 'form') { const b = window.confirm(DO_YOU_WANT_TO_CONTINUE); if (!b) { this.forceUpdate(); return; } this.props.dispatch( settingActions.switchToForm(this.props.json as JSONTextSettings)); this.save(); } } save() { const { source, json, form } = this.props.store.getState(); this.props.dispatch(settingActions.save( new SettingData({ source, json, form }), )); } } const mapStateToProps = (state: AppState) => ({ ...state }); export default connect(mapStateToProps)(SettingsComponent);