Clean up action bars, random exceptions

This commit is contained in:
Ben Gotow 2016-01-25 17:08:38 -08:00
parent e4553ffb1e
commit bb03e52e33
9 changed files with 41 additions and 36 deletions

View file

@ -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)

View file

@ -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}

View file

@ -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) =>

View file

@ -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

View file

@ -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 =

View file

@ -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

View file

@ -10,9 +10,7 @@ class FluxContainer extends React.Component
constructor: (@props) ->
@_unlisteners = []
componentWillMount: ->
@setState(@props.getStateFromStores())
@state = @props.getStateFromStores()
componentDidMount: ->
@setupListeners()

View file

@ -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

View file

@ -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()