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
containsDraft = _.some(change.objects, (msg) -> msg.draft)
return unless containsDraft and @_view
@_view.invalidate()
@_view.invalidate({change: change, shallow: true})
module.exports = new DraftListStore()

View file

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

View file

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

View file

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