Proyectos de Subversion LeadersLinked - SPA

Rev

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