mirror of
https://github.com/Foundry376/Mailspring.git
synced 2025-02-22 15:15:12 +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
|
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()
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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.")
|
||||||
|
|
Loading…
Reference in a new issue