Proyectos de Subversion LeadersLinked - SPA

Rev

Rev 1661 | Rev 1665 | Ir a la última revisión | | Comparar con el anterior | Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
5 stevensc 1
import { feedActionTypes } from './feed.types'
2
 
3
const initialState = {
1650 stevensc 4
  feeds: {
5
    byId: {},
6
    allIds: []
7
  },
5 stevensc 8
  timelineUrl: '',
9
  currentFeed: null,
10
  loading: false,
11
  currentPage: 1,
764 stevensc 12
  pages: 1
5 stevensc 13
}
14
 
15
const feedReducer = (state = initialState, { type, payload }) => {
16
  switch (type) {
764 stevensc 17
    case feedActionTypes.SET_TIMELINE_URL: {
5 stevensc 18
      const newTimelineUrl = payload
19
      return { ...state, timelineUrl: newTimelineUrl }
764 stevensc 20
    }
21
 
22
    case feedActionTypes.LOAD_FEEDS: {
5 stevensc 23
      return { ...state, loading: true }
764 stevensc 24
    }
25
 
26
    case feedActionTypes.LOAD_FEEDS_SUCCESS: {
5 stevensc 27
      const { feeds, currentPage, pages } = payload
1650 stevensc 28
      const feedsById = {}
29
 
30
      feeds.forEach((feed) => {
1657 stevensc 31
        feedsById[feed.feed_unique] = {
32
          ...feed,
33
          comments: feed.comments.map((comment) => ({
34
            ...comment,
35
            feedId: feed.feed_unique
36
          }))
37
        }
1650 stevensc 38
      })
39
 
40
      const feedsIds = feeds.map((feed) => feed.feed_unique)
41
 
5 stevensc 42
      return {
43
        ...state,
1650 stevensc 44
        feeds: { byId: feedsById, allIds: feedsIds },
5 stevensc 45
        currentPage,
46
        pages,
764 stevensc 47
        loading: false
5 stevensc 48
      }
764 stevensc 49
    }
50
 
1650 stevensc 51
    case feedActionTypes.REMOVE_COMMENT: {
1661 stevensc 52
      const { feedId, commentId } = payload
1650 stevensc 53
      const feed = state.feeds.byId[feedId]
54
 
55
      return {
56
        ...state,
57
        feeds: {
58
          ...state.feeds,
1661 stevensc 59
          byId: {
60
            ...state.feeds.byId,
61
            [feedId]: {
62
              ...feed,
63
              comments: (feed.comments = feed.comments.filter(
1662 stevensc 64
                ({ unique }) => unique !== commentId
1661 stevensc 65
              )),
66
              owner_comments: feed.owner_comments - 1
67
            }
68
          }
1650 stevensc 69
        }
70
      }
71
    }
72
 
73
    case feedActionTypes.ADD_COMMENT: {
1661 stevensc 74
      const { feedId, comment } = payload
1650 stevensc 75
      const feed = state.feeds.byId[feedId]
76
 
77
      return {
78
        ...state,
79
        feeds: {
80
          ...state.feeds,
1656 stevensc 81
          byId: {
82
            ...state.feeds.byId,
83
            [feedId]: {
84
              ...feed,
1661 stevensc 85
              owner_comments: feed.owner_comments + 1,
86
              comments: [...feed.comments, comment]
1656 stevensc 87
            }
88
          }
1650 stevensc 89
        }
90
      }
91
    }
92
 
764 stevensc 93
    case feedActionTypes.LOAD_FEEDS_FAILURE: {
5 stevensc 94
      return state
764 stevensc 95
    }
96
 
97
    case feedActionTypes.ADD_FEED: {
1650 stevensc 98
      const { feedSharedId, feed } = payload
99
      const isShare = state.feeds.allIds.some((id) => id === feedSharedId)
100
 
101
      if (isShare) {
102
        const feedShared = state.feeds.byId[feedSharedId]
103
        feedShared.owner_comments = feedShared.owner_comments + 1
104
 
105
        return {
106
          ...state,
107
          feeds: {
108
            byId: {
109
              ...state.feeds.byId,
110
              [feed.feed_unique]: feed,
111
              [feedSharedId]: feedShared
112
            },
113
            allIds: [feed.feed_unique, ...state.feeds.allIds]
5 stevensc 114
          }
1650 stevensc 115
        }
5 stevensc 116
      }
1650 stevensc 117
 
118
      return {
119
        ...state,
120
        feeds: {
121
          byId: { ...state.feeds.byId, [feed.feed_unique]: feed },
122
          allIds: [feed.feed_unique, ...state.feeds.allIds]
123
        }
124
      }
764 stevensc 125
    }
126
 
127
    case feedActionTypes.UPDATE_FEED: {
5 stevensc 128
      const { feed, uuid } = payload
129
 
130
      return {
131
        ...state,
1650 stevensc 132
        feeds: {
133
          ...state.feeds,
134
          byId: { ...state.feeds.byId, [uuid]: feed }
135
        }
5 stevensc 136
      }
764 stevensc 137
    }
138
 
139
    case feedActionTypes.DELETE_FEED: {
1650 stevensc 140
      const feedId = payload
141
      const newIds = state.feeds.allIds.filter((id) => id !== feedId)
142
      const newFeeds = { ...state.feeds.byId, [feedId]: null }
143
 
5 stevensc 144
      return {
145
        ...state,
1650 stevensc 146
        feeds: {
147
          ...state.feeds,
148
          byId: newFeeds,
149
          allIds: newIds
150
        }
5 stevensc 151
      }
764 stevensc 152
    }
153
 
154
    case feedActionTypes.ADD_CURRENT_FEED: {
5 stevensc 155
      return { ...state, currentFeed: payload }
764 stevensc 156
    }
157
 
158
    case feedActionTypes.SET_CURRENT_PAGE: {
5 stevensc 159
      const newCurrentPage = payload
160
      return { ...state, currentPage: newCurrentPage }
764 stevensc 161
    }
162
 
5 stevensc 163
    default:
164
      return state
165
  }
166
}
167
 
168
export default feedReducer