Proyectos de Subversion LeadersLinked - SPA

Rev

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

Rev Autor Línea Nro. Línea
1118 stevensc 1
import { TOPIC_ACTIONS } from './topics.types'
2
 
3
const initialState = {
4
  topicsAllIds: [],
5
  topicById: {},
6
  capsulesAllIds: [],
1126 stevensc 7
  capsuleById: {},
8
  slidesAllIds: [],
9
  slideById: {}
1118 stevensc 10
}
11
 
12
const topicsReducer = (state = initialState, { type, payload }) => {
13
  switch (type) {
14
    case TOPIC_ACTIONS.ADD_TOPIC: {
15
      const { uuid, ...topic } = payload
16
 
1132 stevensc 17
      const topicsIds = new Set([...state.topicsAllIds, uuid])
18
 
1118 stevensc 19
      return {
20
        ...state,
21
        topicById: {
22
          ...state.topicById,
1120 stevensc 23
          [uuid]: { ...topic, uuid }
1118 stevensc 24
        },
1132 stevensc 25
        topicsAllIds: Array.from(topicsIds)
1118 stevensc 26
      }
27
    }
28
 
29
    case TOPIC_ACTIONS.ADD_CAPSULE: {
1125 stevensc 30
      const { topicId, capsule } = payload
1118 stevensc 31
 
1132 stevensc 32
      const capsulesIds = new Set([...state.capsulesAllIds, capsule.uuid])
33
 
1118 stevensc 34
      return {
35
        ...state,
36
        capsuleById: {
37
          ...state.capsuleById,
38
          [capsule.uuid]: { ...capsule, topicId }
39
        },
1132 stevensc 40
        capsulesAllIds: Array.from(capsulesIds)
1118 stevensc 41
      }
42
    }
43
 
1126 stevensc 44
    case TOPIC_ACTIONS.ADD_SLIDE: {
45
      const { capsuleId, slide } = payload
46
 
1133 stevensc 47
      const topicId = state.capsuleById[capsuleId].topicId
1132 stevensc 48
      const slidesIds = new Set([...state.slidesAllIds, slide.uuid])
49
 
1126 stevensc 50
      return {
51
        ...state,
52
        slideById: {
1132 stevensc 53
          ...state.slideById,
1133 stevensc 54
          [slide.uuid]: { ...slide, capsuleId, topicId }
1126 stevensc 55
        },
1132 stevensc 56
        slidesAllIds: Array.from(slidesIds)
1126 stevensc 57
      }
58
    }
59
 
1132 stevensc 60
    case TOPIC_ACTIONS.COMPLETE_TOPIC: {
1133 stevensc 61
      const uuid = payload
1132 stevensc 62
      const completedTopic = { ...state.topicById[uuid], completed: 1 }
63
 
64
      return {
65
        ...state,
66
        topicById: {
67
          ...state.topicById,
68
          [uuid]: completedTopic
69
        }
70
      }
71
    }
72
 
73
    case TOPIC_ACTIONS.COMPLETE_CAPSULE: {
1133 stevensc 74
      const uuid = payload
1132 stevensc 75
      const completedCapsule = { ...state.capsuleById[uuid], completed: 1 }
76
 
77
      return {
78
        ...state,
79
        capsuleById: {
80
          ...state.capsuleById,
81
          [uuid]: completedCapsule
82
        }
83
      }
84
    }
85
 
86
    case TOPIC_ACTIONS.COMPLETE_SLIDE: {
1133 stevensc 87
      const uuid = payload
1132 stevensc 88
      const completedSlide = { ...state.slideById[uuid], completed: 1 }
89
 
90
      return {
91
        ...state,
92
        slideById: {
93
          ...state.slideById,
94
          [uuid]: completedSlide
95
        }
96
      }
97
    }
98
 
1118 stevensc 99
    default:
100
      return state
101
  }
102
}
103
 
104
export default topicsReducer