Proyectos de Subversion LeadersLinked - SPA

Rev

Rev 1656 | Rev 1661 | 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: {
52
      const { feedId, commentId, totalComments } = payload
53
      const feed = state.feeds.byId[feedId]
54
      feed.owner_comments = totalComments
55
      feed.comments = feed.comments.filter(
56
        (comment) => comment.id !== commentId
57
      )
58
 
59
      return {
60
        ...state,
61
        feeds: {
62
          ...state.feeds,
63
          byId: { ...state.feeds.byId, [feedId]: feed }
64
        }
65
      }
66
    }
67
 
68
    case feedActionTypes.ADD_COMMENT: {
69
      const { feedId, comment, totalComments } = payload
70
      const feed = state.feeds.byId[feedId]
71
 
72
      return {
73
        ...state,
74
        feeds: {
75
          ...state.feeds,
1656 stevensc 76
          byId: {
77
            ...state.feeds.byId,
78
            [feedId]: {
79
              ...feed,
80
              owner_comments: totalComments,
81
              comments: [comment, ...feed.comments]
82
            }
83
          }
1650 stevensc 84
        }
85
      }
86
    }
87
 
764 stevensc 88
    case feedActionTypes.LOAD_FEEDS_FAILURE: {
5 stevensc 89
      return state
764 stevensc 90
    }
91
 
92
    case feedActionTypes.ADD_FEED: {
1650 stevensc 93
      const { feedSharedId, feed } = payload
94
      const isShare = state.feeds.allIds.some((id) => id === feedSharedId)
95
 
96
      if (isShare) {
97
        const feedShared = state.feeds.byId[feedSharedId]
98
        feedShared.owner_comments = feedShared.owner_comments + 1
99
 
100
        return {
101
          ...state,
102
          feeds: {
103
            byId: {
104
              ...state.feeds.byId,
105
              [feed.feed_unique]: feed,
106
              [feedSharedId]: feedShared
107
            },
108
            allIds: [feed.feed_unique, ...state.feeds.allIds]
5 stevensc 109
          }
1650 stevensc 110
        }
5 stevensc 111
      }
1650 stevensc 112
 
113
      return {
114
        ...state,
115
        feeds: {
116
          byId: { ...state.feeds.byId, [feed.feed_unique]: feed },
117
          allIds: [feed.feed_unique, ...state.feeds.allIds]
118
        }
119
      }
764 stevensc 120
    }
121
 
122
    case feedActionTypes.UPDATE_FEED: {
5 stevensc 123
      const { feed, uuid } = payload
124
 
125
      return {
126
        ...state,
1650 stevensc 127
        feeds: {
128
          ...state.feeds,
129
          byId: { ...state.feeds.byId, [uuid]: feed }
130
        }
5 stevensc 131
      }
764 stevensc 132
    }
133
 
134
    case feedActionTypes.DELETE_FEED: {
1650 stevensc 135
      const feedId = payload
136
      const newIds = state.feeds.allIds.filter((id) => id !== feedId)
137
      const newFeeds = { ...state.feeds.byId, [feedId]: null }
138
 
5 stevensc 139
      return {
140
        ...state,
1650 stevensc 141
        feeds: {
142
          ...state.feeds,
143
          byId: newFeeds,
144
          allIds: newIds
145
        }
5 stevensc 146
      }
764 stevensc 147
    }
148
 
149
    case feedActionTypes.ADD_CURRENT_FEED: {
5 stevensc 150
      return { ...state, currentFeed: payload }
764 stevensc 151
    }
152
 
153
    case feedActionTypes.SET_CURRENT_PAGE: {
5 stevensc 154
      const newCurrentPage = payload
155
      return { ...state, currentPage: newCurrentPage }
764 stevensc 156
    }
157
 
5 stevensc 158
    default:
159
      return state
160
  }
161
}
162
 
163
export default feedReducer