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,48 @@ const addNormalized = (newState, payload) => {
3927 return newState ;
4028} ;
4129
30+ const initialState = { } ;
31+
4232export default ( state = initialState , action ) => {
4333 const { type, payload, meta } = action ;
4434 const { key, list = 'list' } = meta || { } ;
4535 let newState = state ;
4636
4737 switch ( type ) {
48- case actionType ( GET_ONE , SUCCESS ) : {
38+ case GET_ONE . SUCCESS : {
4939 return addNormalized ( newState , payload ) ;
5040 }
51- case actionType ( GET_LIST , STARTED ) : {
41+ case GET_LIST . STARTED : {
5242 return imm . set ( newState , [ key , list , 'loading' ] , true ) ;
5343 }
54- case actionType ( GET_LIST , SUCCESS ) : {
44+ case GET_LIST . SUCCESS : {
5545 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 ;
46+ return imm . set ( newState , [ key , list ] , {
47+ ids : map ( payload . data , 'id' ) ,
48+ loading : false ,
49+ ...pick ( payload , [ 'params' , 'links' , 'meta' ] ) ,
50+ } ) ;
6251 }
63- case actionType ( GET_MANY , SUCCESS ) : {
52+ case GET_MANY . SUCCESS : {
6453 return addNormalized ( newState , payload ) ;
6554 }
66- case actionType ( CREATE , SUCCESS ) : {
55+ case CREATE . SUCCESS : {
6756 newState = addNormalized ( newState , payload ) ;
6857 if ( list ) {
6958 newState = imm . push ( newState , [ key , list , 'ids' ] , payload . data . id ) ;
7059 }
7160 return newState ;
7261 }
73- case actionType ( UPDATE , SUCCESS ) : {
62+ case UPDATE . SUCCESS : {
7463 return addNormalized ( newState , payload ) ;
7564 }
76- case actionType ( DELETE , SUCCESS ) : {
65+ case DELETE . SUCCESS : {
7766 newState = imm . del ( newState , [ key , 'byId' , payload . data . id ] ) ;
7867 newState = imm . set ( newState , [ key , list , 'ids' ] ,
7968 without ( get ( newState , [ key , list , 'ids' ] ) , payload . data . id ) ,
8069 ) ;
8170 return newState ;
8271 }
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- }
9372 default :
9473 return state ;
9574 }
0 commit comments