sectionReducer.js
3.42 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
/**
* # guideReducer.js
*
* The reducer for all the actions from the various log states
*/
'use strict';
/**
* ## Imports
*
* InitialState
*/
import InitialState from './sectionInitialState';
import Immutable, {Map} from 'immutable';
const {
SECTION_HEADER_REQUEST,
SECTION_HEADER_SUCCESS,
SECTION_HEADER_FAILURE,
SECTION_NEW_POST_REQUEST,
SECTION_NEW_POST_SUCCESS,
SECTION_NEW_POST_FAILURE,
SECTION_HOT_POST_REQUEST,
SECTION_HOT_POST_SUCCESS,
SECTION_HOT_POST_FAILURE,
SECTION_SET_ACTIVE_TAB,
SECTION_CLEAN,
GO_TO_SECTION,
} = require('../../constants/actionTypes').default;
const initialState = new InitialState;
/**
* ## guideReducer function
* @param {Object} state - initialState
* @param {Object} action - type and payload
*/
export default function sectionReducer(state = initialState, action) {
if (!(state instanceof InitialState)) return initialState.merge(state);
switch (action.type) {
case SECTION_HEADER_REQUEST: {
let nextState = state.set('isFetching', true)
.set('error', null);
return nextState;
}
case SECTION_HEADER_SUCCESS: {
let {notice, header} = action.payload;
let nextState = state.set('isFetching', false)
.set('error', null)
.setIn(['header', 'uri'], header.uri)
.setIn(['header', 'title'], header.title)
.setIn(['header', 'post'], header.post)
.setIn(['header', 'comment'], header.comment)
.setIn(['header', 'like'], header.like)
.setIn(['notice', 'duration'], notice.duration)
.setIn(['notice', 'open'], notice.open)
.setIn(['notice', 'list'], Immutable.fromJS(notice.list));
return nextState;
}
case SECTION_HEADER_FAILURE: {
let nextState = state.set('isFetching', false)
.set('error', action.payload);
return nextState;
}
case SECTION_HOT_POST_REQUEST: {
let nextState = state.setIn(['hot', 'isFetching'], true)
.setIn(['hot', 'error'], null)
.set('ptr', action.payload);
return nextState;
}
case SECTION_HOT_POST_SUCCESS: {
let {lastedTime, list, endReached} = action.payload;
let nextState = state.setIn(['hot', 'isFetching'], false)
.setIn(['hot', 'error'], null)
.setIn(['hot', 'lastedTime'], lastedTime)
.setIn(['hot', 'endReached'], endReached)
.setIn(['hot', 'list'], Immutable.fromJS(list));
return nextState;
}
case SECTION_HOT_POST_FAILURE: {
let nextState = state.setIn(['hot', 'isFetching'], false)
.setIn(['hot', 'error'], action.payload);
return nextState;
}
case SECTION_NEW_POST_REQUEST: {
let nextState = state.setIn(['new', 'isFetching'], true)
.setIn(['new', 'error'], null)
.set('ptr', action.payload);
return nextState;
}
case SECTION_NEW_POST_SUCCESS: {
let {lastedTime, list, endReached} = action.payload;
let nextState = state.setIn(['new', 'isFetching'], false)
.setIn(['new', 'error'], null)
.setIn(['new', 'lastedTime'], lastedTime)
.setIn(['new', 'endReached'], endReached)
.setIn(['new', 'list'], Immutable.fromJS(list));
return nextState;
}
case SECTION_NEW_POST_FAILURE: {
let nextState = state.setIn(['new', 'isFetching'], false)
.setIn(['new', 'error'], action.payload);
return nextState;
}
case SECTION_SET_ACTIVE_TAB:
return state.set('activeTab', action.payload);
case GO_TO_SECTION:
return state.set('id', action.payload.id)
.set('name', action.payload.name);
case SECTION_CLEAN:
return initialState;
}
return state;
}