The code powering m.abunchtell.com https://m.abunchtell.com
Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.
 
 
 
 

53 wiersze
1.6 KiB

  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. const results = action.searchType === 'hashtags' ? fromJS(action.results.hashtags) : action.results[action.searchType].map(item => item.id);
  46. return state.updateIn(['results', action.searchType], list => list.concat(results));
  47. default:
  48. return state;
  49. }
  50. };