Proyectos de Subversion LeadersLinked - SPA

Rev

Rev 2846 | | Comparar con el anterior | Ultima modificación | Ver Log |

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