Proyectos de Subversion LeadersLinked - SPA

Rev

Rev 1126 | Rev 1133 | 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
 
1132 stevensc 47
      const slidesIds = new Set([...state.slidesAllIds, slide.uuid])
48
 
1126 stevensc 49
      return {
50
        ...state,
51
        slideById: {
1132 stevensc 52
          ...state.slideById,
1126 stevensc 53
          [slide.uuid]: { ...slide, capsuleId }
54
        },
1132 stevensc 55
        slidesAllIds: Array.from(slidesIds)
1126 stevensc 56
      }
57
    }
58
 
1132 stevensc 59
    case TOPIC_ACTIONS.COMPLETE_TOPIC: {
60
      const { uuid } = payload
61
      const completedTopic = { ...state.topicById[uuid], completed: 1 }
62
 
63
      return {
64
        ...state,
65
        topicById: {
66
          ...state.topicById,
67
          [uuid]: completedTopic
68
        }
69
      }
70
    }
71
 
72
    case TOPIC_ACTIONS.COMPLETE_CAPSULE: {
73
      const { uuid } = payload
74
      const completedCapsule = { ...state.capsuleById[uuid], completed: 1 }
75
 
76
      return {
77
        ...state,
78
        capsuleById: {
79
          ...state.capsuleById,
80
          [uuid]: completedCapsule
81
        }
82
      }
83
    }
84
 
85
    case TOPIC_ACTIONS.COMPLETE_SLIDE: {
86
      const { uuid } = payload
87
      const completedSlide = { ...state.slideById[uuid], completed: 1 }
88
 
89
      return {
90
        ...state,
91
        slideById: {
92
          ...state.slideById,
93
          [uuid]: completedSlide
94
        }
95
      }
96
    }
97
 
1118 stevensc 98
    default:
99
      return state
100
  }
101
}
102
 
103
export default topicsReducer