index.js 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. import thunk from 'redux-thunk'
  2. import {createStore, combineReducers,applyMiddleware } from 'redux';
  3. import { actionFindUser , actionSnippetFindByOwner} from '../actions';
  4. function promiseReducer(state , {type, name ,status , payload, error}) {
  5. if (!state){
  6. return {} //{status , payload , error}
  7. }
  8. if (type === 'PROMISE') {
  9. return {
  10. ...state,
  11. [name]: {status,payload , error}
  12. }
  13. }
  14. return state
  15. }
  16. function authReducer(state, action){ //....
  17. if (state === undefined){
  18. if (!localStorage.authToken){
  19. return {}
  20. }
  21. action.token = localStorage.authToken
  22. action.type = 'LOGIN'
  23. // добавить в action token из localStorage, и проимитировать LOGIN
  24. }
  25. if (action.type === 'LOGIN'){
  26. localStorage.authToken = action.token
  27. function jwt_decode (token) {
  28. var start64Url = token.split('.')[1]
  29. return JSON.parse(atob(start64Url))
  30. }
  31. return {token: action.token, payload: jwt_decode(action.token)}
  32. }
  33. if (action.type === 'LOGOUT'){
  34. localStorage.removeItem("authToken")
  35. //вернуть пустой объект
  36. return {}
  37. }
  38. return state
  39. }
  40. export const reducers = {
  41. promise:promiseReducer,
  42. auth:authReducer
  43. }
  44. export const store = createStore(combineReducers(reducers), applyMiddleware(thunk))
  45. const unsubscribe = store.subscribe(() => console.log('result here',store.getState()))
  46. if (localStorage.authToken) {
  47. store.dispatch(actionFindUser())
  48. store.dispatch(actionSnippetFindByOwner(store.getState().auth.payload.sub.id))
  49. }
  50. export default store