Proyectos de Subversion LeadersLinked - SPA

Rev

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

import { TOPIC_ACTIONS } from './topics.types'

const initialState = {
  topicsAllIds: [],
  topicById: {},
  capsulesAllIds: [],
  capsuleById: {},
  slidesAllIds: [],
  slideById: {}
}

const topicsReducer = (state = initialState, { type, payload }) => {
  switch (type) {
    case TOPIC_ACTIONS.ADD_TOPIC: {
      const { uuid, ...topic } = payload

      const topicsIds = new Set([...state.topicsAllIds, uuid])

      return {
        ...state,
        topicById: {
          ...state.topicById,
          [uuid]: { ...topic, uuid }
        },
        topicsAllIds: Array.from(topicsIds)
      }
    }

    case TOPIC_ACTIONS.ADD_CAPSULE: {
      const { topicId, capsule } = payload

      const capsulesIds = new Set([...state.capsulesAllIds, capsule.uuid])

      return {
        ...state,
        capsuleById: {
          ...state.capsuleById,
          [capsule.uuid]: { ...capsule, topicId }
        },
        capsulesAllIds: Array.from(capsulesIds)
      }
    }

    case TOPIC_ACTIONS.ADD_SLIDE: {
      const { capsuleId, slide } = payload

      const topicId = state.capsuleById[capsuleId].topicId
      const slidesIds = new Set([...state.slidesAllIds, slide.uuid])

      return {
        ...state,
        slideById: {
          ...state.slideById,
          [slide.uuid]: { ...slide, capsuleId, topicId }
        },
        slidesAllIds: Array.from(slidesIds)
      }
    }

    case TOPIC_ACTIONS.COMPLETE_TOPIC: {
      const uuid = payload
      const completedTopic = { ...state.topicById[uuid], completed: 1 }

      return {
        ...state,
        topicById: {
          ...state.topicById,
          [uuid]: completedTopic
        }
      }
    }

    case TOPIC_ACTIONS.COMPLETE_CAPSULE: {
      const uuid = payload
      const completedCapsule = { ...state.capsuleById[uuid], completed: 1 }

      return {
        ...state,
        capsuleById: {
          ...state.capsuleById,
          [uuid]: completedCapsule
        }
      }
    }

    case TOPIC_ACTIONS.COMPLETE_SLIDE: {
      const uuid = payload
      const completedSlide = { ...state.slideById[uuid], completed: 1 }

      return {
        ...state,
        slideById: {
          ...state.slideById,
          [uuid]: completedSlide
        }
      }
    }

    default:
      return state
  }
}

export default topicsReducer