Proyectos de Subversion LeadersLinked - SPA

Rev

Rev 5 | Rev 1650 | 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 = {
4
  timelineUrl: '',
5
  allFeeds: [],
6
  currentFeed: null,
7
  loading: false,
8
  currentPage: 1,
764 stevensc 9
  pages: 1
5 stevensc 10
}
11
 
12
const feedReducer = (state = initialState, { type, payload }) => {
13
  switch (type) {
764 stevensc 14
    case feedActionTypes.SET_TIMELINE_URL: {
5 stevensc 15
      const newTimelineUrl = payload
16
      return { ...state, timelineUrl: newTimelineUrl }
764 stevensc 17
    }
18
 
19
    case feedActionTypes.LOAD_FEEDS: {
5 stevensc 20
      return { ...state, loading: true }
764 stevensc 21
    }
22
 
23
    case feedActionTypes.LOAD_FEEDS_SUCCESS: {
5 stevensc 24
      const { feeds, currentPage, pages } = payload
25
      return {
26
        ...state,
27
        allFeeds: feeds,
28
        currentPage,
29
        pages,
764 stevensc 30
        loading: false
5 stevensc 31
      }
764 stevensc 32
    }
33
 
34
    case feedActionTypes.LOAD_FEEDS_FAILURE: {
5 stevensc 35
      return state
764 stevensc 36
    }
37
 
38
    case feedActionTypes.ADD_FEED: {
5 stevensc 39
      if (payload.feedSharedId) {
40
        const newFeed = payload.feed
41
        const oldFeeds = state.allFeeds.map((feed) => {
42
          if (feed.feed_unique === payload.feedSharedId) {
43
            feed.owner_shared = (parseInt(feed.owner_shared) + 1).toString()
44
          }
45
          return feed
46
        })
47
        const newAllFeeds = [newFeed, ...oldFeeds]
48
        return { ...state, allFeeds: newAllFeeds }
49
      } else {
50
        const newFeed = payload.feed
51
        const newAllFeeds = [newFeed, ...state.allFeeds]
52
        return { ...state, allFeeds: newAllFeeds }
53
      }
764 stevensc 54
    }
55
 
56
    case feedActionTypes.UPDATE_FEED: {
5 stevensc 57
      const { feed, uuid } = payload
58
      const currentFeedIndex = state.allFeeds.findIndex(
59
        (feed) => feed.feed_uuid === uuid
60
      )
61
 
62
      const newFeeds = structuredClone(state.allFeeds)
63
      newFeeds[currentFeedIndex] = feed
64
 
65
      return {
66
        ...state,
764 stevensc 67
        allFeeds: newFeeds
5 stevensc 68
      }
764 stevensc 69
    }
70
 
71
    case feedActionTypes.DELETE_FEED: {
5 stevensc 72
      return {
73
        ...state,
764 stevensc 74
        allFeeds: state.allFeeds.filter((feed) => feed.feed_unique !== payload)
5 stevensc 75
      }
764 stevensc 76
    }
77
 
78
    case feedActionTypes.ADD_CURRENT_FEED: {
5 stevensc 79
      return { ...state, currentFeed: payload }
764 stevensc 80
    }
81
 
82
    case feedActionTypes.SET_CURRENT_PAGE: {
5 stevensc 83
      const newCurrentPage = payload
84
      return { ...state, currentPage: newCurrentPage }
764 stevensc 85
    }
86
 
5 stevensc 87
    default:
88
      return state
89
  }
90
}
91
 
92
export default feedReducer