Proyectos de Subversion LeadersLinked - SPA

Rev

Rev 5 | Rev 1650 | Ir a la última revisión | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |

import { feedActionTypes } from './feed.types'

const initialState = {
  timelineUrl: '',
  allFeeds: [],
  currentFeed: null,
  loading: false,
  currentPage: 1,
  pages: 1
}

const feedReducer = (state = initialState, { type, payload }) => {
  switch (type) {
    case feedActionTypes.SET_TIMELINE_URL: {
      const newTimelineUrl = payload
      return { ...state, timelineUrl: newTimelineUrl }
    }

    case feedActionTypes.LOAD_FEEDS: {
      return { ...state, loading: true }
    }

    case feedActionTypes.LOAD_FEEDS_SUCCESS: {
      const { feeds, currentPage, pages } = payload
      return {
        ...state,
        allFeeds: feeds,
        currentPage,
        pages,
        loading: false
      }
    }

    case feedActionTypes.LOAD_FEEDS_FAILURE: {
      return state
    }

    case feedActionTypes.ADD_FEED: {
      if (payload.feedSharedId) {
        const newFeed = payload.feed
        const oldFeeds = state.allFeeds.map((feed) => {
          if (feed.feed_unique === payload.feedSharedId) {
            feed.owner_shared = (parseInt(feed.owner_shared) + 1).toString()
          }
          return feed
        })
        const newAllFeeds = [newFeed, ...oldFeeds]
        return { ...state, allFeeds: newAllFeeds }
      } else {
        const newFeed = payload.feed
        const newAllFeeds = [newFeed, ...state.allFeeds]
        return { ...state, allFeeds: newAllFeeds }
      }
    }

    case feedActionTypes.UPDATE_FEED: {
      const { feed, uuid } = payload
      const currentFeedIndex = state.allFeeds.findIndex(
        (feed) => feed.feed_uuid === uuid
      )

      const newFeeds = structuredClone(state.allFeeds)
      newFeeds[currentFeedIndex] = feed

      return {
        ...state,
        allFeeds: newFeeds
      }
    }

    case feedActionTypes.DELETE_FEED: {
      return {
        ...state,
        allFeeds: state.allFeeds.filter((feed) => feed.feed_unique !== payload)
      }
    }

    case feedActionTypes.ADD_CURRENT_FEED: {
      return { ...state, currentFeed: payload }
    }

    case feedActionTypes.SET_CURRENT_PAGE: {
      const newCurrentPage = payload
      return { ...state, currentPage: newCurrentPage }
    }

    default:
      return state
  }
}

export default feedReducer