fix(draft): drafts order newest to oldest

Summary: Fixes T1192: Allow ordering in database view. Fixes draft list ordering

Test Plan: edgehill --test

Reviewers: bengotow

Reviewed By: bengotow

Maniphest Tasks: T1192

Differential Revision: https://review.inboxapp.com/D1514
This commit is contained in:
Evan Morikawa 2015-05-15 13:16:34 -07:00
parent e9e88c2cf6
commit a237d69327
4 changed files with 24 additions and 1 deletions

View file

@ -12,6 +12,7 @@ DraftListStore = Reflux.createStore
@_view = new DatabaseView Message,
matchers: [Message.attributes.draft.equal(true)],
includes: [Message.attributes.body]
orders: [Message.attributes.date.descending()]
@listenTo @_view, => @trigger({})

View file

@ -5,7 +5,7 @@
outline:none;
}
.thread-list {
.thread-list, .draft-list {
order: 3;
flex: 1;
position:relative;

View file

@ -32,6 +32,12 @@ describe "DatabaseView", ->
expect(view._matchers).toEqual(config.matchers)
expect(view._includes).toEqual(config.includes)
it "should optionally populate ordering", ->
config =
orders: [Message.attributes.date.descending()]
view = new DatabaseView(Message, config)
expect(view._orders).toEqual(config.orders)
it "should optionally accept a metadata provider", ->
provider = ->
view = new DatabaseView(Message, {}, provider)
@ -243,6 +249,7 @@ describe "DatabaseView", ->
beforeEach ->
@config =
matchers: [Message.attributes.namespaceId.equal('asd')]
orders: [Message.attributes.date.descending()]
@view = new DatabaseView(Message, @config)
@queries = []
@ -258,6 +265,11 @@ describe "DatabaseView", ->
expect(@queries[0]._range).toEqual({offset: @view._pageSize * 2, limit: @view._pageSize})
expect(@queries[0]._matchers).toEqual(@config.matchers)
it "should order results properly", ->
@view.retrievePage(2)
expect(@queries.length).toBe(1)
expect(@queries[0]._orders).toEqual(@config.orders)
describe "once the database request has completed", ->
beforeEach ->
@view.retrievePage(0)

View file

@ -36,6 +36,7 @@ class DatabaseView extends ModelView
@_pageSize = 100
@_matchers = config.matchers ? []
@_includes = config.includes ? []
@_orders = config.orders ? []
@_count = -1
@invalidate()
@ -73,6 +74,14 @@ class DatabaseView extends ModelView
@_pages = {}
@invalidate()
orders: ->
@_orders
setOrders: (orders) ->
@_orders = orders
@_pages = {}
@invalidate()
# Accessing Data
count: ->
@ -250,6 +259,7 @@ class DatabaseView extends ModelView
query = DatabaseStore.findAll(@klass).where(@_matchers)
query.offset(idx * @_pageSize).limit(@_pageSize)
query.include(attr) for attr in @_includes
query.order(@_orders) if @_orders.length > 0
query.then (items) =>
# If the page is no longer in the cache at all, it may have fallen out of the