1
- import ModalAction from './ModalAction' ;
1
+ import ModalAction , { ActionUnion } from './ModalAction' ;
2
2
import IModalReducerState from './IModalReducerState' ;
3
3
import IAction from '../IAction' ;
4
4
@@ -9,39 +9,33 @@ export default class ModalReducer {
9
9
modals : [ ] ,
10
10
} ;
11
11
12
- public static reducer ( state : IModalReducerState = ModalReducer . _initialState , action : IAction < any > ) : IModalReducerState {
12
+ public static reducer ( state : IModalReducerState = ModalReducer . _initialState , action : IAction < ActionUnion > ) : IModalReducerState {
13
13
switch ( action . type ) {
14
14
case ModalAction . ADD_MODAL :
15
- return ModalReducer . _addModal ( state , action ) ;
15
+ const modal : JSX . Element = action . payload as JSX . Element ;
16
+
17
+ return {
18
+ ...state ,
19
+ currentModal : modal ,
20
+ modals : [ ...state . modals , modal ] ,
21
+ } ;
16
22
case ModalAction . REMOVE_MODAL :
17
- return ModalReducer . _closeCurrentModal ( state , action ) ;
23
+ const currentModal : JSX . Element = state . currentModal ;
24
+ const modalIndex : number = state . modals . indexOf ( currentModal ) ;
25
+ const modals = [
26
+ ...state . modals . slice ( 0 , modalIndex ) ,
27
+ ...state . modals . slice ( modalIndex + 1 ) ,
28
+ ] ;
29
+ const previousModal : JSX . Element = modals [ modals . length - 1 ] ;
30
+
31
+ return {
32
+ ...state ,
33
+ currentModal : previousModal || null ,
34
+ modals,
35
+ } ;
18
36
default :
19
37
return state ;
20
38
}
21
39
}
22
40
23
- private static _addModal ( state : IModalReducerState , action : IAction < JSX . Element > ) : IModalReducerState {
24
- return {
25
- ...state ,
26
- currentModal : action . payload ,
27
- modals : [ ...state . modals , action . payload ] ,
28
- } ;
29
- }
30
-
31
- private static _closeCurrentModal ( state : IModalReducerState , action : IAction < void > ) : IModalReducerState {
32
- const currentModal : JSX . Element = state . currentModal ;
33
- const modalIndex : number = state . modals . indexOf ( currentModal ) ;
34
- const modals = [
35
- ...state . modals . slice ( 0 , modalIndex ) ,
36
- ...state . modals . slice ( modalIndex + 1 ) ,
37
- ] ;
38
- const previousModal : JSX . Element = modals [ modals . length - 1 ] ;
39
-
40
- return {
41
- ...state ,
42
- currentModal : previousModal || null ,
43
- modals,
44
- } ;
45
- }
46
-
47
41
}
0 commit comments