11import React , { PropTypes } from 'react'
22import ReactDOM from 'react-dom'
33import ExternalLink from 'browser/components/ExternalLink'
4- import { setSearchFilter , clearSearch , toggleOnlyUnsavedFilter , toggleTutorial } from '../actions'
4+ import { setSearchFilter , clearSearch , toggleOnlyUnsavedFilter , toggleTutorial , saveAllArticles , switchArticle } from '../actions'
5+ import store from '../store'
6+
7+ const electron = require ( 'electron' )
8+ const remote = electron . remote
9+ const Menu = remote . Menu
10+ const MenuItem = remote . MenuItem
11+
12+ var menu = new Menu ( )
13+ var lastIndex = - 1
14+ menu . append ( new MenuItem ( {
15+ label : 'Show only unsaved' ,
16+ click : function ( ) {
17+ store . dispatch ( setSearchFilter ( '--unsaved' ) )
18+ }
19+ } ) )
20+ menu . append ( new MenuItem ( {
21+ label : 'Go to an unsaved article' ,
22+ click : function ( ) {
23+ lastIndex ++
24+ let state = store . getState ( )
25+ let modified = state . articles . modified
26+ if ( modified . length === 0 ) return
27+ if ( modified . length <= lastIndex ) {
28+ lastIndex = 0
29+ }
30+ store . dispatch ( switchArticle ( modified [ lastIndex ] . key ) )
31+ }
32+ } ) )
533
634const BRAND_COLOR = '#18AF90'
735
@@ -111,19 +139,28 @@ export default class ArticleTopBar extends React.Component {
111139 dispatch ( toggleOnlyUnsavedFilter ( ) )
112140 }
113141
142+ handleSaveAllButtonClick ( e ) {
143+ let { dispatch } = this . props
144+
145+ dispatch ( saveAllArticles ( ) )
146+ }
147+
148+ handleSaveMenuButtonClick ( e ) {
149+ menu . popup ( 590 , 45 )
150+ }
151+
114152 handleTutorialButtonClick ( e ) {
115153 let { dispatch } = this . props
116- console . log ( e . target . value )
117154
118155 dispatch ( toggleTutorial ( ) )
119156 }
120157
121158 render ( ) {
122- let { status } = this . props
159+ let { status, modified } = this . props
123160 return (
124161 < div className = 'ArticleTopBar' >
125- < div className = 'left' >
126- < div className = 'search' >
162+ < div className = 'ArticleTopBar- left' >
163+ < div className = 'ArticleTopBar-left- search' >
127164 < i className = 'fa fa-search fa-fw' />
128165 < input
129166 ref = 'searchInput'
@@ -142,16 +179,25 @@ export default class ArticleTopBar extends React.Component {
142179 < div className = { 'tooltip' + ( this . state . isTooltipHidden ? ' hide' : '' ) } >
143180 < ul >
144181 < li > - Search by tag : #{ '{string}' } </ li >
145- < li > - Search by folder : /{ '{folder_name}' } </ li >
146- < li > < small > exact match : // { '{folder_name}' } </ small > </ li >
182+ < li > - Search by folder : /{ '{folder_name}' } < br /> < small > exact match : // { '{folder_name}' } </ small > < /li >
183+ < li > - Only unsaved : --unsaved </ li >
147184 </ ul >
148185 </ div >
149186 </ div >
150187
151188 { status . isTutorialOpen ? searchTutorialElement : null }
152- < label className = 'only-unsaved' > < input value = { status . onlyUnsaved } onChange = { e => this . handleOnlyUnsavedChange ( e ) } type = 'checkbox' /> only unsaved</ label >
189+
190+ < div className = { 'ArticleTopBar-left-unsaved' } >
191+ < button onClick = { e => this . handleSaveAllButtonClick ( e ) } className = 'ArticleTopBar-left-unsaved-save-button' disabled = { modified . length === 0 } >
192+ < i className = 'fa fa-save' />
193+ < span className = { 'ArticleTopBar-left-unsaved-save-button-count' + ( modified . length === 0 ? ' hide' : '' ) } children = { modified . length } />
194+ < span className = 'ArticleTopBar-left-unsaved-save-button-tooltip' children = { `Save all ${ modified . length } articles (⌘ + Shift + s)` } > </ span >
195+ </ button >
196+ < button onClick = { e => this . handleSaveMenuButtonClick ( e ) } className = 'ArticleTopBar-left-unsaved-menu-button' > < i className = 'fa fa-angle-down' /> </ button >
197+ </ div >
153198 </ div >
154- < div className = 'right' >
199+
200+ < div className = 'ArticleTopBar-right' >
155201 < button onClick = { e => this . handleTutorialButtonClick ( e ) } > ?< span className = 'tooltip' > How to use</ span >
156202 </ button >
157203 < a ref = 'links' className = 'linksBtn' href >
@@ -198,5 +244,6 @@ ArticleTopBar.propTypes = {
198244 dispatch : PropTypes . func ,
199245 status : PropTypes . shape ( {
200246 search : PropTypes . string
201- } )
247+ } ) ,
248+ modified : PropTypes . array
202249}
0 commit comments