Advertisement
Guest User

Untitled

a guest
May 24th, 2017
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.69 KB | None | 0 0
  1. import { omit, remove } from 'lodash';
  2. import { ActionTypes } from '../util/ActionTypes';
  3. import {REHYDRATE} from 'redux-persist/constants';
  4. import update from 'immutability-helper';
  5.  
  6. export const initialState = {
  7. userFavorites: [],
  8. favoritesMap: {},
  9. };
  10.  
  11. export function FavoriteReducer(state = initialState, action) {
  12. switch (action.type) {
  13.  
  14. case ActionTypes.FETCH_FAVORITES_REQUEST_SUCCESS:
  15. const userFavorites = [];
  16. const favoritesMap = {};
  17. action.data.favorites.map((item) => {
  18. let key = item.favoritedUrl;
  19. key = key.split('/');
  20. key = key[key.length - 1];
  21. favoritesMap[key] = item;
  22. userFavorites.push(key);
  23. });
  24. return {
  25. ...state,
  26. userFavorites,
  27. favoritesMap,
  28. }
  29.  
  30. case ActionTypes.ADD_FAVORITE_FOR_USER: {
  31. const data = action.data;
  32. const favoritedUrl = data.favoritedUrl;
  33. let sessionId = favoritedUrl.split('/');
  34. sessionId = sessionId[sessionId.length - 1];
  35.  
  36. return update(state, {
  37. userFavorites: {$unshift: [sessionId]},
  38. favoritesMap: {$merge: {[sessionId]: data}},
  39. });
  40. }
  41.  
  42. case ActionTypes.DELETE_FAVORITE_FOR_USER: {
  43. const sessionId = action.sessionId;
  44. let userFavorites = state.userFavorites.slice();
  45. remove(userFavorites, (item) => {
  46. return item === sessionId;
  47. });
  48.  
  49. let favoritesMap = Object.assign({}, state.favoritesMap);
  50. favoritesMap = omit(favoritesMap, [sessionId]);
  51.  
  52. return update(state, {
  53. userFavorites: {$set: userFavorites},
  54. favoritesMap: {$set: favoritesMap},
  55. });
  56. }
  57.  
  58. case ActionTypes.LOGOUT:
  59. return initialState;
  60.  
  61. default:
  62. return state;
  63. }
  64. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement