Skip to content

Instantly share code, notes, and snippets.

@aenario
Created August 31, 2016 07:37
Show Gist options
  • Save aenario/20d17f182a72ff6716c472dda1a93a3b to your computer and use it in GitHub Desktop.
Save aenario/20d17f182a72ff6716c472dda1a93a3b to your computer and use it in GitHub Desktop.
Exemple reselect getter/router
diff --git a/client/app/getters/router.coffee b/client/app/getters/router.coffee
index 50f0cb6..8bd9e24 100644
--- a/client/app/getters/router.coffee
+++ b/client/app/getters/router.coffee
@@ -1,6 +1,7 @@
Routes = require '../routes'
{MessageFilter} = require '../constants/app_constants'
Immutable = require 'immutable'
+{createSelector} = require 'reselect'
Routes = require '../routes'
{MessageActions, AccountActions} = require '../constants/app_constants'
@@ -12,7 +13,7 @@ RequestsGetter = require './requests'
Message = require '../models/message'
-module.exports =
+module.exports = RouterGetter =
getRouteObject: (state) -> state.get('route')
getDefaultAccount: (state) ->
@@ -105,16 +106,15 @@ module.exports =
return Routes.makeURL(action, params, forServer)
- getMessagesList: (state) ->
- mailboxID = @getMailboxID(state)
-
+ getSortOrder: (state) ->
sort = @getFilter(state).get('sort')
- sortOrder = parseInt "#{sort.charAt(0)}1", 10
-
- filterFunction = @getFilterFunction(state)
+ return parseInt "#{sort.charAt(0)}1", 10
+ getMessagesList: createSelector(
+ [RouterGetter.getMailboxID, RouterGetter.getSortOrder,
+ RouterGetter.getFilterFunction, MessageGetter.getAll],
+ (mailboxID, sortOrder, filterFunction, messages) ->
existingConversations = Immutable.Set()
- messages = MessageGetter.getAll(state)
messages = messages.filter (message) ->
# Display only last Message of conversation
@@ -136,6 +136,7 @@ module.exports =
messages = messages.reverse() if sortOrder is -1
return messages
+ )
getMessagesListWithIsDeleted: (state) ->
@getMessagesList(state).map (message) =>
@@ -168,14 +169,18 @@ module.exports =
message ?= @getPreviousConversation state
return message
- getFilterFunction: (state) ->
- return (message) =>
+ getFilterFunction: createSelector(
+ [RouterGetter.isFlagged, RouterGetter.isAttached,
+ RouterGetter.isUnread],
+ (isFlagged, isAttached, isUnread) ->
+ return (message) ->
unless message instanceof Message
throw new Error('message should be a Message')
- if @isFlagged(state) then return message.isFlagged()
- if @isAttached(state) then return message.isAttached()
- if @isUnread(state) then return message.isUnread()
+ if isFlagged then return message.isFlagged()
+ if isAttached then return message.isAttached()
+ if isUnread then return message.isUnread()
return true
+ )
getConversation: (state, conversationID, mailboxID) ->
mailboxID ?= @getMailboxID(state)
@@ -264,7 +269,10 @@ module.exports =
else t 'list empty'
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment