mirror of
https://github.com/Foundry376/Mailspring.git
synced 2025-02-21 14:46:31 +08:00
fix(drafts): Draft selection / deletion fixes
This commit is contained in:
parent
ccbd494d64
commit
7e041be33c
4 changed files with 24 additions and 10 deletions
|
@ -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()
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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.")
|
||||
|
|
Loading…
Reference in a new issue