store.js 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. //import {promiseReducer} from "./promiseReducer";
  2. //import {authReducer} from "./authReducer";
  3. import {createStore, combineReducers, applyMiddleware} from "redux";
  4. import thunk from "redux-thunk";
  5. const jwtDecode = token => {
  6. try {
  7. let arrToken = token.split('.')
  8. let base64Token = atob(arrToken[1])
  9. return JSON.parse(base64Token)
  10. }
  11. catch (e) {
  12. console.log('Лажа, Бро ' + e);
  13. }
  14. }
  15. function authReducer(state, { type, token }) {
  16. if (!state) {
  17. if (localStorage.authToken) {
  18. type = 'AUTH_LOGIN'
  19. token = localStorage.authToken
  20. } else state = {}
  21. }
  22. if (type === 'AUTH_LOGIN') {
  23. localStorage.setItem('authToken', token)
  24. let payload = jwtDecode(token)
  25. if (typeof payload === 'object') {
  26. return {
  27. ...state,
  28. token,
  29. payload
  30. }
  31. } else return state
  32. }
  33. if (type === 'AUTH_LOGOUT') {
  34. localStorage.removeItem('authToken')
  35. return {}
  36. }
  37. return state
  38. }
  39. function promiseReducer(state = {}, { type, status, payload, error, name }) {
  40. if (type === 'PROMISE') {
  41. return {
  42. ...state,
  43. [name]: { status, payload, error }
  44. }
  45. }
  46. return state;
  47. }
  48. export const store = createStore(
  49. combineReducers({promise: promiseReducer, auth: authReducer}),
  50. applyMiddleware(thunk)
  51. );