fix(drafts): Draft selection / deletion fixes

This commit is contained in:
Ben Gotow 2015-10-23 16:04:22 -07:00
parent ccbd494d64
commit 7e041be33c
4 changed files with 24 additions and 10 deletions

View file

@ -49,6 +49,6 @@ class DraftListStore extends NylasStore
return unless change.objectClass is Message.name return unless change.objectClass is Message.name
containsDraft = _.some(change.objects, (msg) -> msg.draft) containsDraft = _.some(change.objects, (msg) -> msg.draft)
return unless containsDraft and @_view return unless containsDraft and @_view
@_view.invalidate() @_view.invalidate({change: change, shallow: true})
module.exports = new DraftListStore() module.exports = new DraftListStore()

View file

@ -5,8 +5,10 @@ React = require 'react'
InjectedComponent} = require 'nylas-component-kit' InjectedComponent} = require 'nylas-component-kit'
{timestamp, subject} = require './formatting-utils' {timestamp, subject} = require './formatting-utils'
{Actions, {Actions,
FocusedContentStore,
DatabaseStore} = require 'nylas-exports' DatabaseStore} = require 'nylas-exports'
DraftListStore = require './draft-list-store' DraftListStore = require './draft-list-store'
EmptyState = require './empty-state'
class DraftList extends React.Component class DraftList extends React.Component
@displayName: 'DraftList' @displayName: 'DraftList'
@ -15,10 +17,14 @@ class DraftList extends React.Component
componentWillMount: => componentWillMount: =>
snippet = (html) => snippet = (html) =>
@draftSanitizer ?= document.createElement('div') return "" unless html and typeof(html) is 'string'
@draftSanitizer.innerHTML = html[0..400] try
text = @draftSanitizer.innerText @draftSanitizer ?= document.createElement('div')
text[0..200] @draftSanitizer.innerHTML = html[0..400]
text = @draftSanitizer.innerText
text[0..200]
catch
return ""
c1 = new ListTabular.Column c1 = new ListTabular.Column
name: "Name" name: "Name"
@ -50,7 +56,7 @@ class DraftList extends React.Component
@columns = [c1, c2, c3] @columns = [c1, c2, c3]
@commands = @commands =
'core:remove-from-view': @_onDelete 'core:remove-from-view': @_onRemoveFromView
render: => render: =>
<MultiselectList <MultiselectList
@ -58,6 +64,7 @@ class DraftList extends React.Component
columns={@columns} columns={@columns}
commands={@commands} commands={@commands}
onDoubleClick={@_onDoubleClick} onDoubleClick={@_onDoubleClick}
emptyComponent={EmptyState}
itemPropsProvider={ -> {} } itemPropsProvider={ -> {} }
itemHeight={39} itemHeight={39}
className="draft-list" className="draft-list"
@ -68,10 +75,10 @@ class DraftList extends React.Component
# Additional Commands # Additional Commands
_onDelete: ({focusedId}) => _onRemoveFromView: =>
item = DraftListStore.view().getById(focusedId) items = DraftListStore.view().selection.items()
return unless item for item in items
Actions.destroyDraft(item.clientId) Actions.destroyDraft(item.clientId)
module.exports = DraftList module.exports = DraftList

View file

@ -5,6 +5,7 @@ classNames = require 'classnames'
{DatabaseView, {DatabaseView,
NylasAPI, NylasAPI,
NylasSyncStatusStore, NylasSyncStatusStore,
Message,
WorkspaceStore} = require 'nylas-exports' WorkspaceStore} = require 'nylas-exports'
EmptyMessages = [{ EmptyMessages = [{
@ -80,6 +81,8 @@ class EmptyState extends React.Component
@_unlisteners = [] @_unlisteners = []
@_unlisteners.push WorkspaceStore.listen(@_onChange, @) @_unlisteners.push WorkspaceStore.listen(@_onChange, @)
@_unlisteners.push NylasSyncStatusStore.listen(@_onChange, @) @_unlisteners.push NylasSyncStatusStore.listen(@_onChange, @)
if @props.visible and not @state.active
@setState(active:true)
shouldComponentUpdate: (nextProps, nextState) -> shouldComponentUpdate: (nextProps, nextState) ->
# Avoid deep comparison of dataView, which is a very complex object # Avoid deep comparison of dataView, which is a very complex object
@ -103,6 +106,8 @@ class EmptyState extends React.Component
messageOverride = null messageOverride = null
if @props.dataView instanceof DatabaseView if @props.dataView instanceof DatabaseView
if @props.dataView.klass is Message
messageOverride = "No messages to display."
if @state.layoutMode is 'list' if @state.layoutMode is 'list'
ContentComponent = ContentQuotes ContentComponent = ContentQuotes
if @state.syncing if @state.syncing

View file

@ -156,6 +156,8 @@ class DatabaseView extends ModelView
@selection.updateModelReferences(items) @selection.updateModelReferences(items)
@selection.removeItemsNotMatching(@_matchers) @selection.removeItemsNotMatching(@_matchers)
if change.type is 'unpersist'
@selection.remove(item) for item in items
if items.length > 5 if items.length > 5
@log("invalidateAfterDatabaseChange on #{items.length} items would be expensive. Invalidating entire range.") @log("invalidateAfterDatabaseChange on #{items.length} items would be expensive. Invalidating entire range.")