1
0
mirror of https://github.com/BoostIo/Boostnote synced 2025-12-13 17:56:25 +00:00

Add notification when not saved

This commit is contained in:
Paul Rosset
2017-12-01 15:23:23 +00:00
parent a6c7dde194
commit b4a7b547f0
5 changed files with 59 additions and 10 deletions

View File

@@ -76,8 +76,8 @@
color #1EC38B color #1EC38B
.error .error
color red color red
.warning
color #FFA500
.group-control-leftButton .group-control-leftButton
colorDefaultButton() colorDefaultButton()

View File

@@ -32,6 +32,10 @@ class HotkeyTab extends React.Component {
message: err.message != null ? err.message : 'Error occurs!' message: err.message != null ? err.message : 'Error occurs!'
}}) }})
} }
if (JSON.parse(localStorage.getItem('config'))) {
const {hotkey} = JSON.parse(localStorage.getItem('config'))
this.hotkey = hotkey
}
ipc.addListener('APP_SETTING_DONE', this.handleSettingDone) ipc.addListener('APP_SETTING_DONE', this.handleSettingDone)
ipc.addListener('APP_SETTING_ERROR', this.handleSettingError) ipc.addListener('APP_SETTING_ERROR', this.handleSettingError)
} }
@@ -53,6 +57,7 @@ class HotkeyTab extends React.Component {
config: newConfig config: newConfig
}) })
this.clearMessage() this.clearMessage()
this.props.haveToSave(null)
} }
handleHintToggleButtonClick (e) { handleHintToggleButtonClick (e) {
@@ -70,6 +75,15 @@ class HotkeyTab extends React.Component {
this.setState({ this.setState({
config config
}) })
if (JSON.stringify(this.hotkey) === JSON.stringify(config.hotkey)) {
this.props.haveToSave(null)
} else {
this.props.haveToSave({
tab: "Hotkey",
type: 'warning',
message: 'You have to save!'
})
}
} }
clearMessage () { clearMessage () {
@@ -161,7 +175,8 @@ class HotkeyTab extends React.Component {
} }
HotkeyTab.propTypes = { HotkeyTab.propTypes = {
dispatch: PropTypes.func dispatch: PropTypes.func,
haveToSave: PropTypes.func
} }
export default CSSModules(HotkeyTab, styles) export default CSSModules(HotkeyTab, styles)

View File

@@ -42,6 +42,10 @@ top-bar--height = 50px
background-color transparent background-color transparent
color $ui-text-color color $ui-text-color
font-size 16px font-size 16px
.saving--warning
color #FFA500
font-size 10px
margin-top 3px
.nav-button--active .nav-button--active
@extend .nav-button @extend .nav-button
@@ -49,6 +53,10 @@ top-bar--height = 50px
background-color $ui-button--active-backgroundColor background-color $ui-button--active-backgroundColor
&:hover &:hover
color $ui-text-color color $ui-text-color
.saving--warning
color #FFA500
font-size 10px
margin-top 3px
.nav-button-icon .nav-button-icon
display block display block

View File

@@ -20,7 +20,8 @@ class UiTab extends React.Component {
super(props) super(props)
this.state = { this.state = {
config: props.config, config: props.config,
codemirrorTheme: props.config.editor.theme codemirrorTheme: props.config.editor.theme,
haveToSave: null
} }
} }
@@ -37,12 +38,16 @@ class UiTab extends React.Component {
message: err.message != null ? err.message : 'Error occurs!' message: err.message != null ? err.message : 'Error occurs!'
}}) }})
} }
if (JSON.parse(localStorage.getItem('config'))) {
const {ui, editor, preview} = JSON.parse(localStorage.getItem('config'))
this.currentConfig = {ui, editor, preview}
}
ipc.addListener('APP_SETTING_DONE', this.handleSettingDone) ipc.addListener('APP_SETTING_DONE', this.handleSettingDone)
ipc.addListener('APP_SETTING_ERROR', this.handleSettingError) ipc.addListener('APP_SETTING_ERROR', this.handleSettingError)
} }
componentWillMount () { componentWillMount () {
CodeMirror.autoLoadMode(ReactCodeMirror, 'javascript') CodeMirror.autoLoadMode(ReactCodeMirror, 'javascript')
} }
componentWillUnmount () { componentWillUnmount () {
@@ -92,7 +97,18 @@ class UiTab extends React.Component {
checkHighLight.setAttribute('href', `../node_modules/codemirror/theme/${newCodemirrorTheme.split(' ')[0]}.css`) checkHighLight.setAttribute('href', `../node_modules/codemirror/theme/${newCodemirrorTheme.split(' ')[0]}.css`)
} }
this.setState({ config: newConfig, codemirrorTheme: newCodemirrorTheme }) this.setState({ config: newConfig, codemirrorTheme: newCodemirrorTheme },
() => {
if (JSON.stringify(this.currentConfig) === JSON.stringify(this.state.config)) {
this.props.haveToSave(null)
} else {
this.props.haveToSave({
tab: "UI",
type: 'warning',
message: 'You have to save!'
})
}
})
} }
handleSaveUIClick (e) { handleSaveUIClick (e) {
@@ -109,6 +125,7 @@ class UiTab extends React.Component {
config: newConfig config: newConfig
}) })
this.clearMessage() this.clearMessage()
this.props.haveToSave(null)
} }
clearMessage () { clearMessage () {
@@ -346,7 +363,8 @@ UiTab.propTypes = {
user: PropTypes.shape({ user: PropTypes.shape({
name: PropTypes.string name: PropTypes.string
}), }),
dispatch: PropTypes.func dispatch: PropTypes.func,
haveToSave: PropTypes.func
} }
export default CSSModules(UiTab, styles) export default CSSModules(UiTab, styles)

View File

@@ -17,7 +17,9 @@ class Preferences extends React.Component {
super(props) super(props)
this.state = { this.state = {
currentTab: 'STORAGES' currentTab: 'STORAGES',
UI: null,
Hotkey: null
} }
} }
@@ -58,6 +60,7 @@ class Preferences extends React.Component {
<HotkeyTab <HotkeyTab
dispatch={dispatch} dispatch={dispatch}
config={config} config={config}
haveToSave={msg => this.setState({Hotkey: msg})}
/> />
) )
case 'UI': case 'UI':
@@ -65,6 +68,7 @@ class Preferences extends React.Component {
<UiTab <UiTab
dispatch={dispatch} dispatch={dispatch}
config={config} config={config}
haveToSave={msg => this.setState({UI: msg})}
/> />
) )
case 'CROWDFUNDING': case 'CROWDFUNDING':
@@ -99,14 +103,15 @@ class Preferences extends React.Component {
const tabs = [ const tabs = [
{target: 'STORAGES', label: 'Storages'}, {target: 'STORAGES', label: 'Storages'},
{target: 'HOTKEY', label: 'Hotkey'}, {target: 'HOTKEY', label: 'Hotkey', Hotkey: this.state.Hotkey},
{target: 'UI', label: 'UI'}, {target: 'UI', label: 'UI', UI: this.state.UI},
{target: 'INFO', label: 'Community / Info'}, {target: 'INFO', label: 'Community / Info'},
{target: 'CROWDFUNDING', label: 'Crowdfunding'} {target: 'CROWDFUNDING', label: 'Crowdfunding'}
] ]
const navButtons = tabs.map((tab) => { const navButtons = tabs.map((tab) => {
const isActive = this.state.currentTab === tab.target const isActive = this.state.currentTab === tab.target
const isOk = typeof tab[tab.label] !== "undefined" && tab[tab.label] !== null
return ( return (
<button styleName={isActive <button styleName={isActive
? 'nav-button--active' ? 'nav-button--active'
@@ -118,6 +123,9 @@ class Preferences extends React.Component {
<span styleName='nav-button-label'> <span styleName='nav-button-label'>
{tab.label} {tab.label}
</span> </span>
{isOk && tab.label === tab[tab.label].tab
? <p styleName={`saving--${tab[tab.label].type}`}>{tab[tab.label].message}</p>
: null}
</button> </button>
) )
}) })