index.js 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. import {createStore, applyMiddleware, combineReducers} from 'redux';
  2. import thunk from 'redux-thunk';
  3. function promiseReducer(state={}, {type,name,status,payload,error}){
  4. /* delay1000:{status, payload,error}
  5. delay2000: {status, payload,error}*/
  6. /* if(!state){
  7. delay1000:{status,payload,error}
  8. delay2000:{status,payload,error}
  9. } */
  10. if(type === 'PROMISE'){
  11. return{
  12. ...state,
  13. [name]:{status,payload,error}
  14. }
  15. }
  16. return state
  17. }
  18. function jwtDecode(token){
  19. try{
  20. let payload = JSON.parse(atob(token.split('.')[1]));
  21. return payload;
  22. } catch(e){
  23. }
  24. }
  25. function authReducer(state,{type, token}){
  26. if(state === undefined){
  27. if(localStorage.authToken){
  28. type = 'AUTH_LOGIN';
  29. token = localStorage.authToken
  30. }
  31. }
  32. if(type === 'AUTH_LOGIN'){
  33. let payload = jwtDecode(token);
  34. if(payload){
  35. localStorage.authToken = token;
  36. return {token,payload}
  37. }
  38. }
  39. if(type === 'AUTH_LOGOUT'){
  40. localStorage.authToken = '';
  41. return {};
  42. }
  43. return state || {};
  44. }
  45. const store = createStore(combineReducers({promise: promiseReducer, auth: authReducer}), applyMiddleware(thunk))
  46. store.subscribe(() => console.log(store.getState()));
  47. export default store;