diff --git a/browser/main/StatusBar/index.js b/browser/main/StatusBar/index.js
index 2106a230..49c1b40c 100644
--- a/browser/main/StatusBar/index.js
+++ b/browser/main/StatusBar/index.js
@@ -63,7 +63,7 @@ class StatusBar extends React.Component {
{status.updateReady
?
+
: null
}
diff --git a/browser/main/modals/PreferencesModal/ConfigTab.styl b/browser/main/modals/PreferencesModal/ConfigTab.styl
index ae54218c..ea26af08 100644
--- a/browser/main/modals/PreferencesModal/ConfigTab.styl
+++ b/browser/main/modals/PreferencesModal/ConfigTab.styl
@@ -76,8 +76,8 @@
color #1EC38B
.error
color red
-
-
+ .warning
+ color #FFA500
.group-control-leftButton
colorDefaultButton()
diff --git a/browser/main/modals/PreferencesModal/HotkeyTab.js b/browser/main/modals/PreferencesModal/HotkeyTab.js
index 9a15e79f..4b4a3060 100644
--- a/browser/main/modals/PreferencesModal/HotkeyTab.js
+++ b/browser/main/modals/PreferencesModal/HotkeyTab.js
@@ -32,6 +32,7 @@ class HotkeyTab extends React.Component {
message: err.message != null ? err.message : 'Error occurs!'
}})
}
+ this.oldHotkey = this.state.config.hotkey
ipc.addListener('APP_SETTING_DONE', this.handleSettingDone)
ipc.addListener('APP_SETTING_ERROR', this.handleSettingError)
}
@@ -53,6 +54,7 @@ class HotkeyTab extends React.Component {
config: newConfig
})
this.clearMessage()
+ this.props.haveToSave()
}
handleHintToggleButtonClick (e) {
@@ -70,6 +72,15 @@ class HotkeyTab extends React.Component {
this.setState({
config
})
+ if (_.isEqual(this.oldHotkey, config.hotkey)) {
+ this.props.haveToSave()
+ } else {
+ this.props.haveToSave({
+ tab: 'Hotkey',
+ type: 'warning',
+ message: 'You have to save!'
+ })
+ }
}
clearMessage () {
@@ -161,7 +172,8 @@ class HotkeyTab extends React.Component {
}
HotkeyTab.propTypes = {
- dispatch: PropTypes.func
+ dispatch: PropTypes.func,
+ haveToSave: PropTypes.func
}
export default CSSModules(HotkeyTab, styles)
diff --git a/browser/main/modals/PreferencesModal/PreferencesModal.styl b/browser/main/modals/PreferencesModal/PreferencesModal.styl
index 4a280a38..57b5dbad 100644
--- a/browser/main/modals/PreferencesModal/PreferencesModal.styl
+++ b/browser/main/modals/PreferencesModal/PreferencesModal.styl
@@ -42,6 +42,8 @@ top-bar--height = 50px
background-color transparent
color $ui-text-color
font-size 16px
+ .saving--warning
+ haveToSave()
.nav-button--active
@extend .nav-button
@@ -49,6 +51,8 @@ top-bar--height = 50px
background-color $ui-button--active-backgroundColor
&:hover
color $ui-text-color
+ .saving--warning
+ haveToSave()
.nav-button-icon
display block
diff --git a/browser/main/modals/PreferencesModal/Tab.styl b/browser/main/modals/PreferencesModal/Tab.styl
index e5fc48da..a316f3eb 100644
--- a/browser/main/modals/PreferencesModal/Tab.styl
+++ b/browser/main/modals/PreferencesModal/Tab.styl
@@ -20,3 +20,8 @@ $tab--dark-text-color = #E5E5E5
body[data-theme="dark"]
.header
color $tab--dark-text-color
+
+haveToSave()
+ color #FFA500
+ font-size 10px
+ margin-top 3px
\ No newline at end of file
diff --git a/browser/main/modals/PreferencesModal/UiTab.js b/browser/main/modals/PreferencesModal/UiTab.js
index 42afd8f4..a1bab45b 100644
--- a/browser/main/modals/PreferencesModal/UiTab.js
+++ b/browser/main/modals/PreferencesModal/UiTab.js
@@ -7,11 +7,10 @@ import store from 'browser/main/store'
import consts from 'browser/lib/consts'
import ReactCodeMirror from 'react-codemirror'
import CodeMirror from 'codemirror'
+import _ from 'lodash'
const OSX = global.process.platform === 'darwin'
-import _ from 'lodash'
-
const electron = require('electron')
const ipc = electron.ipcRenderer
@@ -93,8 +92,19 @@ class UiTab extends React.Component {
if (newCodemirrorTheme !== codemirrorTheme) {
checkHighLight.setAttribute('href', `../node_modules/codemirror/theme/${newCodemirrorTheme.split(' ')[0]}.css`)
}
-
- this.setState({ config: newConfig, codemirrorTheme: newCodemirrorTheme })
+ this.setState({ config: newConfig, codemirrorTheme: newCodemirrorTheme }, () => {
+ const {ui, editor, preview} = this.props.config
+ this.currentConfig = {ui, editor, preview}
+ if (_.isEqual(this.currentConfig, this.state.config)) {
+ this.props.haveToSave()
+ } else {
+ this.props.haveToSave({
+ tab: 'UI',
+ type: 'warning',
+ message: 'You have to save!'
+ })
+ }
+ })
}
handleSaveUIClick (e) {
@@ -111,6 +121,7 @@ class UiTab extends React.Component {
config: newConfig
})
this.clearMessage()
+ this.props.haveToSave()
}
clearMessage () {
@@ -412,7 +423,8 @@ UiTab.propTypes = {
user: PropTypes.shape({
name: PropTypes.string
}),
- dispatch: PropTypes.func
+ dispatch: PropTypes.func,
+ haveToSave: PropTypes.func
}
export default CSSModules(UiTab, styles)
diff --git a/browser/main/modals/PreferencesModal/index.js b/browser/main/modals/PreferencesModal/index.js
index 2fff0364..09885e1c 100644
--- a/browser/main/modals/PreferencesModal/index.js
+++ b/browser/main/modals/PreferencesModal/index.js
@@ -17,7 +17,9 @@ class Preferences extends React.Component {
super(props)
this.state = {
- currentTab: 'STORAGES'
+ currentTab: 'STORAGES',
+ UIAlert: '',
+ HotkeyAlert: ''
}
}
@@ -58,6 +60,7 @@ class Preferences extends React.Component {
this.setState({HotkeyAlert: alert})}
/>
)
case 'UI':
@@ -65,6 +68,7 @@ class Preferences extends React.Component {
this.setState({UIAlert: alert})}
/>
)
case 'CROWDFUNDING':
@@ -94,19 +98,26 @@ class Preferences extends React.Component {
return node.getBoundingClientRect()
}
+ haveToSaveNotif (type, message) {
+ return (
+ {message}
+ )
+ }
+
render () {
const content = this.renderContent()
const tabs = [
{target: 'STORAGES', label: 'Storages'},
- {target: 'HOTKEY', label: 'Hotkey'},
- {target: 'UI', label: 'UI'},
+ {target: 'HOTKEY', label: 'Hotkey', Hotkey: this.state.HotkeyAlert},
+ {target: 'UI', label: 'UI', UI: this.state.UIAlert},
{target: 'INFO', label: 'Community / Info'},
{target: 'CROWDFUNDING', label: 'Crowdfunding'}
]
const navButtons = tabs.map((tab) => {
const isActive = this.state.currentTab === tab.target
+ const isUiHotkeyTab = _.isObject(tab[tab.label]) && tab.label === tab[tab.label].tab
return (
)
})