You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

51 lines
1.5 KiB

7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
  1. import {
  2. SEARCH_CHANGE,
  3. SEARCH_CLEAR,
  4. SEARCH_FETCH_SUCCESS,
  5. SEARCH_SHOW,
  6. SEARCH_EXPAND_SUCCESS,
  7. } from '../actions/search';
  8. import {
  9. COMPOSE_MENTION,
  10. COMPOSE_REPLY,
  11. COMPOSE_DIRECT,
  12. } from '../actions/compose';
  13. import { Map as ImmutableMap, List as ImmutableList, fromJS } from 'immutable';
  14. const initialState = ImmutableMap({
  15. value: '',
  16. submitted: false,
  17. hidden: false,
  18. results: ImmutableMap(),
  19. searchTerm: '',
  20. });
  21. export default function search(state = initialState, action) {
  22. switch(action.type) {
  23. case SEARCH_CHANGE:
  24. return state.set('value', action.value);
  25. case SEARCH_CLEAR:
  26. return state.withMutations(map => {
  27. map.set('value', '');
  28. map.set('results', ImmutableMap());
  29. map.set('submitted', false);
  30. map.set('hidden', false);
  31. });
  32. case SEARCH_SHOW:
  33. return state.set('hidden', false);
  34. case COMPOSE_REPLY:
  35. case COMPOSE_MENTION:
  36. case COMPOSE_DIRECT:
  37. return state.set('hidden', true);
  38. case SEARCH_FETCH_SUCCESS:
  39. return state.set('results', ImmutableMap({
  40. accounts: ImmutableList(action.results.accounts.map(item => item.id)),
  41. statuses: ImmutableList(action.results.statuses.map(item => item.id)),
  42. hashtags: fromJS(action.results.hashtags),
  43. })).set('submitted', true).set('searchTerm', action.searchTerm);
  44. case SEARCH_EXPAND_SUCCESS:
  45. return state.updateIn(['results', action.searchType], list => list.concat(action.results[action.searchType].map(item => item.id)));
  46. default:
  47. return state;
  48. }
  49. };