const React = require('react'); const { connect } = require('react-redux'); const { reg } = require('lib/registry.js'); const Setting = require('lib/models/Setting.js'); const { bridge } = require('electron').remote.require('./bridge'); const { Header } = require('./Header.min.js'); const { themeStyle } = require('../theme.js'); const pathUtils = require('lib/path-utils.js'); const { _ } = require('lib/locale.js'); class ConfigScreenComponent extends React.Component { constructor() { super(); this.state = { settings: {}, }; } componentWillMount() { this.setState({ settings: this.props.settings }); } settingToComponent(key, value) { const theme = themeStyle(this.props.theme); let output = null; const rowStyle = { marginBottom: 10, }; const labelStyle = Object.assign({}, theme.textStyle, { display: 'inline-block', marginRight: 10, }); const controlStyle = { display: 'inline-block', }; const updateSettingValue = (key, value) => { const settings = Object.assign({}, this.state.settings); settings[key] = value; this.setState({ settings: settings }); } // Component key needs to be key+value otherwise it doesn't update when the settings change. const md = Setting.settingMetadata(key); if (md.isEnum) { let items = []; const settingOptions = md.options(); for (let k in settingOptions) { if (!settingOptions.hasOwnProperty(k)) continue; items.push(); } return (
); } else if (md.type === Setting.TYPE_BOOL) { const onCheckboxClick = (event) => { updateSettingValue(key, !value) } return (
{ onCheckboxClick(event) }}/>
); } else if (md.type === Setting.TYPE_STRING) { const onTextChange = (event) => { const settings = Object.assign({}, this.state.settings); settings[key] = event.target.value; this.setState({ settings: settings }); } return (
{onTextChange(event)}} />
); } else { console.warn('Type not implemented: ' + key); } return output; } onSaveClick() { for (let n in this.state.settings) { if (!this.state.settings.hasOwnProperty(n)) continue; Setting.setValue(n, this.state.settings[n]); } this.props.dispatch({ type: 'NAV_BACK' }); } onCancelClick() { this.props.dispatch({ type: 'NAV_BACK' }); } render() { const theme = themeStyle(this.props.theme); const style = this.props.style; const settings = this.state.settings; const headerStyle = { width: style.width, }; const containerStyle = { padding: 10, }; const buttonStyle = { display: this.state.settings === this.props.settings ? 'none' : 'inline-block', marginRight: 10, } let settingComps = []; let keys = Setting.keys(true, 'desktop'); for (let i = 0; i < keys.length; i++) { const key = keys[i]; if (!(key in settings)) { console.warn('Missing setting: ' + key); continue; } const md = Setting.settingMetadata(key); if (md.show && !md.show(settings)) continue; const comp = this.settingToComponent(key, settings[key]); if (!comp) continue; settingComps.push(comp); } return (
{_('Notes and settings are stored in: %s', pathUtils.toSystemSlashes(Setting.value('profileDir'), process.platform))}
{ settingComps }
); } } const mapStateToProps = (state) => { return { theme: state.settings.theme, settings: state.settings, locale: state.settings.locale, }; }; const ConfigScreen = connect(mapStateToProps)(ConfigScreenComponent); module.exports = { ConfigScreen };