11import imm from 'object-path-immutable' ;
22import {
33 get ,
4- map ,
5- keys ,
6- keyBy ,
74 isEmpty ,
5+ keyBy ,
6+ keys ,
7+ map ,
8+ pick ,
89 without ,
910} from 'lodash' ;
1011
@@ -15,21 +16,8 @@ import {
1516 CREATE ,
1617 UPDATE ,
1718 DELETE ,
18- AUTH_LOGIN ,
19- AUTH_LOGOUT ,
20- } from '../../api' ;
21-
22- import {
23- STARTED ,
24- SUCCESS ,
25- FAILED ,
26- actionType ,
2719} from './actions' ;
2820
29- const initialState = {
30- user : JSON . parse ( localStorage . getItem ( 'user' ) || '{}' ) ,
31- } ;
32-
3321const addNormalized = ( newState , payload ) => {
3422 keys ( payload . normalized ) . forEach ( ( key ) => {
3523 payload . normalized [ key ] . forEach ( ( item ) => {
@@ -39,57 +27,47 @@ const addNormalized = (newState, payload) => {
3927 return newState ;
4028} ;
4129
42- export default ( state = initialState , action ) => {
43- const { type, payload, meta } = action ;
30+ const initialState = { } ;
31+
32+ export default ( state = initialState , { type, payload, meta } ) => {
4433 const { key, list = 'list' } = meta || { } ;
4534 let newState = state ;
4635
4736 switch ( type ) {
48- case actionType ( GET_ONE , SUCCESS ) : {
37+ case GET_ONE . SUCCESS : {
4938 return addNormalized ( newState , payload ) ;
5039 }
51- case actionType ( GET_LIST , STARTED ) : {
40+ case GET_LIST . STARTED : {
5241 return imm . set ( newState , [ key , list , 'loading' ] , true ) ;
5342 }
54- case actionType ( GET_LIST , SUCCESS ) : {
43+ case GET_LIST . SUCCESS : {
5544 newState = addNormalized ( newState , payload ) ;
56- newState = imm . set ( newState , [ key , list , 'ids' ] , map ( payload . data , 'id' ) ) ;
57- newState = imm . set ( newState , [ key , list , 'params' ] , payload . params ) ;
58- newState = imm . set ( newState , [ key , list , 'links' ] , payload . links ) ;
59- newState = imm . set ( newState , [ key , list , 'meta' ] , payload . meta ) ;
60- newState = imm . set ( newState , [ key , list , 'loading' ] , false ) ;
61- return newState ;
45+ return imm . set ( newState , [ key , list ] , {
46+ ids : map ( payload . data , 'id' ) ,
47+ loading : false ,
48+ ...pick ( payload , [ 'params' , 'links' , 'meta' ] ) ,
49+ } ) ;
6250 }
63- case actionType ( GET_MANY , SUCCESS ) : {
51+ case GET_MANY . SUCCESS : {
6452 return addNormalized ( newState , payload ) ;
6553 }
66- case actionType ( CREATE , SUCCESS ) : {
54+ case CREATE . SUCCESS : {
6755 newState = addNormalized ( newState , payload ) ;
6856 if ( list ) {
6957 newState = imm . push ( newState , [ key , list , 'ids' ] , payload . data . id ) ;
7058 }
7159 return newState ;
7260 }
73- case actionType ( UPDATE , SUCCESS ) : {
61+ case UPDATE . SUCCESS : {
7462 return addNormalized ( newState , payload ) ;
7563 }
76- case actionType ( DELETE , SUCCESS ) : {
64+ case DELETE . SUCCESS : {
7765 newState = imm . del ( newState , [ key , 'byId' , payload . data . id ] ) ;
7866 newState = imm . set ( newState , [ key , list , 'ids' ] ,
7967 without ( get ( newState , [ key , list , 'ids' ] ) , payload . data . id ) ,
8068 ) ;
8169 return newState ;
8270 }
83- case actionType ( AUTH_LOGIN , SUCCESS ) : {
84- localStorage . setItem ( 'user' , JSON . stringify ( payload ) ) ;
85- newState = imm . set ( newState , [ 'user' ] , payload ) ;
86- return newState ;
87- }
88- case actionType ( AUTH_LOGOUT , SUCCESS ) : {
89- localStorage . removeItem ( 'user' ) ;
90- newState = imm . set ( newState , [ 'user' ] , { } ) ;
91- return newState ;
92- }
9371 default :
9472 return state ;
9573 }
0 commit comments