Mailspring/internal_packages/draft-list/lib/draft-list-store.coffee
Ben Gotow 237bad59d8 feat(unread/spam): New items in the sidebar for unread and spam
Summary:
Adds a new unified "Spam" folder and a unified "Unread" view,
which shows all the messages in your inbox which are unread.

Test Plan: Run tests

Reviewers: evan, juan

Reviewed By: juan

Differential Revision: https://phab.nylas.com/D2901
2016-04-19 11:32:33 -07:00

71 lines
2.2 KiB
CoffeeScript

NylasStore = require 'nylas-store'
Rx = require 'rx-lite'
_ = require 'underscore'
{Message,
OutboxStore,
MutableQueryResultSet,
MutableQuerySubscription,
ObservableListDataSource,
FocusedPerspectiveStore,
DatabaseStore} = require 'nylas-exports'
{ListTabular} = require 'nylas-component-kit'
class DraftListStore extends NylasStore
constructor: ->
@listenTo FocusedPerspectiveStore, @_onPerspectiveChanged
@_createListDataSource()
dataSource: =>
@_dataSource
selectionObservable: =>
return Rx.Observable.fromListSelection(@)
# Inbound Events
_onPerspectiveChanged: =>
@_createListDataSource()
# Internal
_createListDataSource: =>
mailboxPerspective = FocusedPerspectiveStore.current()
if mailboxPerspective.drafts
query = DatabaseStore.findAll(Message)
.include(Message.attributes.body)
.order(Message.attributes.date.descending())
.where(draft: true, accountId: mailboxPerspective.accountIds)
.page(0, 1)
subscription = new MutableQuerySubscription(query, {emitResultSet: true})
$resultSet = Rx.Observable.fromNamedQuerySubscription('draft-list', subscription)
$resultSet = Rx.Observable.combineLatest [
$resultSet,
Rx.Observable.fromStore(OutboxStore)
], (resultSet, outbox) =>
# Generate a new result set that includes additional information on
# the draft objects. This is similar to what we do in the thread-list,
# where we set thread.metadata to the message array.
resultSetWithTasks = new MutableQueryResultSet(resultSet)
mailboxPerspective.accountIds.forEach (aid) =>
OutboxStore.itemsForAccount(aid).forEach (task) =>
draft = resultSet.modelWithId(task.draftClientId)
if draft
draft = draft.clone()
draft.uploadTaskId = task.id
draft.uploadProgress = task.progress
resultSetWithTasks.replaceModel(draft)
return resultSetWithTasks.immutableClone()
@_dataSource = new ObservableListDataSource($resultSet, subscription.replaceRange)
else
@_dataSource = new ListTabular.DataSource.Empty()
@trigger(@)
module.exports = new DraftListStore()