trends.js 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. import {
  2. TRENDS_TAGS_FETCH_REQUEST,
  3. TRENDS_TAGS_FETCH_SUCCESS,
  4. TRENDS_TAGS_FETCH_FAIL,
  5. TRENDS_LINKS_FETCH_REQUEST,
  6. TRENDS_LINKS_FETCH_SUCCESS,
  7. TRENDS_LINKS_FETCH_FAIL,
  8. } from 'mastodon/actions/trends';
  9. import { Map as ImmutableMap, List as ImmutableList, fromJS } from 'immutable';
  10. const initialState = ImmutableMap({
  11. tags: ImmutableMap({
  12. items: ImmutableList(),
  13. isLoading: false,
  14. }),
  15. links: ImmutableMap({
  16. items: ImmutableList(),
  17. isLoading: false,
  18. }),
  19. });
  20. export default function trendsReducer(state = initialState, action) {
  21. switch(action.type) {
  22. case TRENDS_TAGS_FETCH_REQUEST:
  23. return state.setIn(['tags', 'isLoading'], true);
  24. case TRENDS_TAGS_FETCH_SUCCESS:
  25. return state.withMutations(map => {
  26. map.setIn(['tags', 'items'], fromJS(action.trends));
  27. map.setIn(['tags', 'isLoading'], false);
  28. });
  29. case TRENDS_TAGS_FETCH_FAIL:
  30. return state.setIn(['tags', 'isLoading'], false);
  31. case TRENDS_LINKS_FETCH_REQUEST:
  32. return state.setIn(['links', 'isLoading'], true);
  33. case TRENDS_LINKS_FETCH_SUCCESS:
  34. return state.withMutations(map => {
  35. map.setIn(['links', 'items'], fromJS(action.trends));
  36. map.setIn(['links', 'isLoading'], false);
  37. });
  38. case TRENDS_LINKS_FETCH_FAIL:
  39. return state.setIn(['links', 'isLoading'], false);
  40. default:
  41. return state;
  42. }
  43. };