import React, { PropTypes } from 'react' import linkState from 'boost/linkState' import { updateUser } from 'boost/actions' const electron = require('electron') const ipc = electron.ipcRenderer const remote = electron.remote export default class AppSettingTab extends React.Component { constructor (props) { super(props) let keymap = remote.getGlobal('keymap') let userName = props.user != null ? props.user.name : null this.state = { user: { name: userName, alert: null }, userAlert: null, keymap: { toggleFinder: keymap.toggleFinder }, keymapAlert: null } } componentDidMount () { this.handleSettingDone = () => { this.setState({keymapAlert: { type: 'success', message: 'Successfully done!' }}) } this.handleSettingError = err => { this.setState({keymapAlert: { type: 'error', message: err.message != null ? err.message : 'Error occurs!' }}) } ipc.addListener('APP_SETTING_DONE', this.handleSettingDone) ipc.addListener('APP_SETTING_ERROR', this.handleSettingError) } componentWillUnmount () { ipc.removeListener('APP_SETTING_DONE', this.handleSettingDone) ipc.removeListener('APP_SETTING_ERROR', this.handleSettingError) } submitHotKey () { ipc.send('hotkeyUpdated', { toggleFinder: this.state.keymap.toggleFinder }) } handleSaveButtonClick (e) { this.submitHotKey() } handleKeyDown (e) { if (e.keyCode === 13) { this.submitHotKey() } } handleNameSaveButtonClick (e) { let { dispatch } = this.props dispatch(updateUser({name: this.state.user.name})) this.setState({ userAlert: { type: 'success', message: 'Successfully done!' } }) } render () { let keymapAlert = this.state.keymapAlert let keymapAlertElement = keymapAlert != null ? (

{keymapAlert.message}

) : null let userAlert = this.state.userAlert let userAlertElement = userAlert != null ? (

{userAlert.message}

) : null return (
User's info
{userAlertElement}
Hotkey
this.handleKeyDown(e)} valueLink={this.linkState('keymap.toggleFinder')} type='text'/>
{keymapAlertElement}
  • 0 to 9
  • A to Z
  • F1 to F24
  • Punctuations like ~, !, @, #, $, etc.
  • Plus
  • Space
  • Backspace
  • Delete
  • Insert
  • Return (or Enter as alias)
  • Up, Down, Left and Right
  • Home and End
  • PageUp and PageDown
  • Escape (or Esc for short)
  • VolumeUp, VolumeDown and VolumeMute
  • MediaNextTrack, MediaPreviousTrack, MediaStop and MediaPlayPause
) } } AppSettingTab.prototype.linkState = linkState AppSettingTab.propTypes = { dispatch: PropTypes.func }