mirror of
https://github.com/Foundry376/Mailspring.git
synced 2024-11-14 13:44:41 +08:00
63 lines
1.6 KiB
CoffeeScript
63 lines
1.6 KiB
CoffeeScript
NylasStore = require 'nylas-store'
|
|
Reflux = require 'reflux'
|
|
_ = require 'underscore'
|
|
{Message,
|
|
Actions,
|
|
DatabaseStore,
|
|
AccountStore,
|
|
FocusedContentStore,
|
|
DestroyDraftTask,
|
|
DatabaseView} = require 'nylas-exports'
|
|
|
|
class DraftListStore extends NylasStore
|
|
constructor: ->
|
|
@listenTo DatabaseStore, @_onDataChanged
|
|
@listenTo AccountStore, @_onAccountChanged
|
|
@listenTo Actions.deleteSelection, @_onDeleteSelection
|
|
|
|
# It's important to listen to sendDraftSuccess because the
|
|
# _onDataChanged method will ignore our newly created draft because it
|
|
# has its draft bit set to false (since it's now a message)!
|
|
@listenTo Actions.sendDraftSuccess, => @_view.invalidate()
|
|
@_createView()
|
|
|
|
view: =>
|
|
@_view
|
|
|
|
_createView: =>
|
|
account = AccountStore.current()
|
|
|
|
if @unlisten
|
|
@unlisten()
|
|
@_view = null
|
|
|
|
return unless account
|
|
|
|
@_view = new DatabaseView Message,
|
|
matchers: [
|
|
Message.attributes.accountId.equal(account.id)
|
|
Message.attributes.draft.equal(true)
|
|
],
|
|
includes: [Message.attributes.body]
|
|
orders: [Message.attributes.date.descending()]
|
|
|
|
@unlisten = @_view.listen => @trigger({})
|
|
|
|
_onAccountChanged: =>
|
|
@_createView()
|
|
|
|
_onDataChanged: (change) =>
|
|
return unless change.objectClass is Message.name
|
|
containsDraft = _.some(change.objects, (msg) -> msg.draft)
|
|
return unless containsDraft and @_view
|
|
@_view.invalidate()
|
|
|
|
_onDeleteSelection: =>
|
|
selected = @_view.selection.items()
|
|
|
|
for item in selected
|
|
Actions.queueTask(new DestroyDraftTask(draftClientId: item.clientId))
|
|
|
|
@_view.selection.clear()
|
|
|
|
module.exports = new DraftListStore()
|