mirror of
https://github.com/Foundry376/Mailspring.git
synced 2025-03-11 15:34:27 +08:00
Clean up action bars, random exceptions
This commit is contained in:
parent
e4553ffb1e
commit
bb03e52e33
9 changed files with 41 additions and 36 deletions
|
@ -34,7 +34,7 @@ class SidebarSection
|
|||
.map (cat) => SidebarItem.forCategories([cat])
|
||||
|
||||
starredItem = SidebarItem.forStarred([account.id])
|
||||
draftsItem = SidebarItem.forDrafts({accountId: account.id})
|
||||
draftsItem = SidebarItem.forDrafts([account.id])
|
||||
|
||||
# Order correctly: Inbox, Starred, rest... , Drafts
|
||||
items.splice(1, 0, starredItem)
|
||||
|
|
|
@ -22,5 +22,6 @@ class DraftDeleteButton extends React.Component
|
|||
for item in @props.selection.items()
|
||||
Actions.queueTask(new DestroyDraftTask(draftClientId: item.clientId))
|
||||
@props.selection.clear()
|
||||
return
|
||||
|
||||
module.exports = {DraftDeleteButton}
|
||||
|
|
|
@ -24,16 +24,16 @@ class DraftList extends React.Component
|
|||
<FocusContainer collection="draft">
|
||||
<MultiselectList
|
||||
columns={DraftListColumns.Wide}
|
||||
commands={@_keymapHandlers()}
|
||||
onDoubleClick={@_onDoubleClick}
|
||||
emptyComponent={EmptyState}
|
||||
keymapHandlers={@_keymapHandlers()}
|
||||
itemPropsProvider={ -> {} }
|
||||
itemHeight={39}
|
||||
className="draft-list" />
|
||||
</FocusContainer>
|
||||
</FluxContainer>
|
||||
|
||||
_keymapHandlers: ->
|
||||
_keymapHandlers: =>
|
||||
'core:remove-from-view': @_onRemoveFromView
|
||||
|
||||
_onDoubleClick: (item) =>
|
||||
|
|
|
@ -1,14 +1,19 @@
|
|||
React = require "react/addons"
|
||||
DraftListStore = require './draft-list-store'
|
||||
{MultiselectActionBar} = require 'nylas-component-kit'
|
||||
{MultiselectActionBar, FluxContainer} = require 'nylas-component-kit'
|
||||
|
||||
class DraftSelectionBar extends React.Component
|
||||
@displayName: 'DraftSelectionBar'
|
||||
|
||||
render: =>
|
||||
<MultiselectActionBar
|
||||
dataStore={DraftListStore}
|
||||
className="draft-list"
|
||||
collection="draft" />
|
||||
<FluxContainer
|
||||
stores={[DraftListStore]}
|
||||
getStateFromStores={ ->
|
||||
dataSource: DraftListStore.dataSource()
|
||||
}>
|
||||
<MultiselectActionBar
|
||||
className="draft-list"
|
||||
collection="draft" />
|
||||
</FluxContainer>
|
||||
|
||||
module.exports = DraftSelectionBar
|
||||
|
|
|
@ -32,6 +32,7 @@ class ThreadBulkArchiveButton extends React.Component
|
|||
threads: @props.selection.items(),
|
||||
fromPerspective: FocusedPerspectiveStore.current()
|
||||
Actions.queueTasks(tasks)
|
||||
return
|
||||
|
||||
class ThreadBulkTrashButton extends React.Component
|
||||
@displayName: 'ThreadBulkTrashButton'
|
||||
|
@ -56,6 +57,7 @@ class ThreadBulkTrashButton extends React.Component
|
|||
threads: @props.selection.items(),
|
||||
fromPerspective: FocusedPerspectiveStore.current()
|
||||
Actions.queueTasks(tasks)
|
||||
return
|
||||
|
||||
|
||||
class ThreadBulkStarButton extends React.Component
|
||||
|
@ -79,6 +81,7 @@ class ThreadBulkStarButton extends React.Component
|
|||
_onStar: =>
|
||||
task = TaskFactory.taskForInvertingStarred(threads: @props.selection.items())
|
||||
Actions.queueTask(task)
|
||||
return
|
||||
|
||||
|
||||
class ThreadBulkToggleUnreadButton extends React.Component
|
||||
|
@ -103,6 +106,7 @@ class ThreadBulkToggleUnreadButton extends React.Component
|
|||
_onClick: =>
|
||||
task = TaskFactory.taskForInvertingUnread(threads: @props.selection.items())
|
||||
Actions.queueTask(task)
|
||||
return
|
||||
|
||||
|
||||
ThreadNavButtonMixin =
|
||||
|
|
|
@ -1,14 +1,19 @@
|
|||
React = require "react/addons"
|
||||
ThreadListStore = require './thread-list-store'
|
||||
{MultiselectActionBar} = require 'nylas-component-kit'
|
||||
{MultiselectActionBar, FluxContainer} = require 'nylas-component-kit'
|
||||
|
||||
class ThreadSelectionBar extends React.Component
|
||||
@displayName: 'ThreadSelectionBar'
|
||||
|
||||
render: =>
|
||||
<MultiselectActionBar
|
||||
dataStore={ThreadListStore}
|
||||
className="thread-list"
|
||||
collection="thread" />
|
||||
<FluxContainer
|
||||
stores={[ThreadListStore]}
|
||||
getStateFromStores={ ->
|
||||
dataSource: ThreadListStore.dataSource()
|
||||
}>
|
||||
<MultiselectActionBar
|
||||
className="thread-list"
|
||||
collection="thread" />
|
||||
</FluxContainer>
|
||||
|
||||
module.exports = ThreadSelectionBar
|
||||
|
|
|
@ -10,9 +10,7 @@ class FluxContainer extends React.Component
|
|||
|
||||
constructor: (@props) ->
|
||||
@_unlisteners = []
|
||||
|
||||
componentWillMount: ->
|
||||
@setState(@props.getStateFromStores())
|
||||
@state = @props.getStateFromStores()
|
||||
|
||||
componentDidMount: ->
|
||||
@setupListeners()
|
||||
|
|
|
@ -50,7 +50,7 @@ class MultiselectActionBar extends React.Component
|
|||
###
|
||||
@propTypes:
|
||||
collection: React.PropTypes.string.isRequired
|
||||
dataStore: React.PropTypes.object.isRequired
|
||||
dataSource: React.PropTypes.object.isRequired
|
||||
|
||||
constructor: (@props) ->
|
||||
@state = @_getStateFromStores()
|
||||
|
@ -68,13 +68,13 @@ class MultiselectActionBar extends React.Component
|
|||
@teardownForProps()
|
||||
|
||||
teardownForProps: =>
|
||||
return unless @unsubscribers
|
||||
unsubscribe() for unsubscribe in @unsubscribers
|
||||
return unless @_unsubscribers
|
||||
unsubscribe() for unsubscribe in @_unsubscribers
|
||||
|
||||
setupForProps: (props) =>
|
||||
@unsubscribers = []
|
||||
@unsubscribers.push props.dataStore.listen @_onChange
|
||||
@unsubscribers.push WorkspaceStore.listen @_onChange
|
||||
@_unsubscribers = []
|
||||
@_unsubscribers.push WorkspaceStore.listen @_onChange
|
||||
@_unsubscribers.push @props.dataSource.listen @_onChange
|
||||
|
||||
shouldComponentUpdate: (nextProps, nextState) =>
|
||||
not Utils.isEqualReact(nextProps, @props) or
|
||||
|
@ -108,9 +108,9 @@ class MultiselectActionBar extends React.Component
|
|||
</div>
|
||||
|
||||
_renderActions: =>
|
||||
return <div></div> unless @state.dataSource
|
||||
return <div></div> unless @props.dataSource
|
||||
<InjectedComponentSet matching={role:"#{@props.collection}:BulkAction"}
|
||||
exposedProps={selection: @state.dataSource.selection, items: @state.items} />
|
||||
exposedProps={selection: @props.dataSource.selection, items: @state.items} />
|
||||
|
||||
_label: =>
|
||||
if @state.items.length > 1
|
||||
|
@ -120,21 +120,14 @@ class MultiselectActionBar extends React.Component
|
|||
else
|
||||
""
|
||||
|
||||
_getStateFromStores: (props) =>
|
||||
props ?= @props
|
||||
dataSource = props.dataStore.dataSource()
|
||||
items = dataSource?.selection.items() ? []
|
||||
|
||||
return {
|
||||
dataSource: dataSource
|
||||
items: items
|
||||
}
|
||||
_getStateFromStores: (props = @props) =>
|
||||
items: props.dataSource.selection.items() ? []
|
||||
|
||||
_onChange: =>
|
||||
@setState(@_getStateFromStores())
|
||||
|
||||
_onClearSelection: =>
|
||||
@state.dataSource.selection.clear()
|
||||
@props.dataSource.selection.clear()
|
||||
|
||||
|
||||
module.exports = MultiselectActionBar
|
||||
|
|
|
@ -174,8 +174,7 @@ class MultiselectList extends React.Component
|
|||
event.stopPropagation()
|
||||
<div className="checkmark" onClick={toggle}><div className="inner"></div></div>
|
||||
|
||||
_getStateFromStores: (props) =>
|
||||
props ?= @props
|
||||
_getStateFromStores: (props = @props) =>
|
||||
state = @state ? {}
|
||||
|
||||
layoutMode = WorkspaceStore.layoutMode()
|
||||
|
|
Loading…
Reference in a new issue