diff options
author | Eugen Rochko <eugen@zeonfederated.com> | 2016-11-13 13:04:18 +0100 |
---|---|---|
committer | Eugen Rochko <eugen@zeonfederated.com> | 2016-11-13 13:04:18 +0100 |
commit | f0bdfadab7e5293b3f7855b6707a1fa95ea76ca6 (patch) | |
tree | 21ea4e75a0e8398eed1f738c40eecab9c1ea65c9 /app/assets/javascripts/components/reducers/search.jsx | |
parent | 8152584cf57c2b5a797d73f5afac0bba3c904f6d (diff) |
Search component
Diffstat (limited to 'app/assets/javascripts/components/reducers/search.jsx')
-rw-r--r-- | app/assets/javascripts/components/reducers/search.jsx | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/app/assets/javascripts/components/reducers/search.jsx b/app/assets/javascripts/components/reducers/search.jsx new file mode 100644 index 000000000..f3ee17f60 --- /dev/null +++ b/app/assets/javascripts/components/reducers/search.jsx @@ -0,0 +1,60 @@ +import { + SEARCH_CHANGE, + SEARCH_SUGGESTIONS_READY, + SEARCH_RESET +} from '../actions/search'; +import Immutable from 'immutable'; + +const initialState = Immutable.Map({ + value: '', + loaded_value: '', + suggestions: [] +}); + +const normalizeSuggestions = (state, value, accounts) => { + let newSuggestions = [ + { + title: 'Account', + items: accounts.map(item => ({ + type: 'account', + id: item.id, + value: item.acct + })) + } + ]; + + if (value.indexOf('@') === -1) { + newSuggestions.push({ + title: 'Hashtag', + items: [ + { + type: 'hashtag', + id: value, + value: `#${value}` + } + ] + }); + } + + return state.withMutations(map => { + map.set('suggestions', newSuggestions); + map.set('loaded_value', value); + }); +}; + +export default function search(state = initialState, action) { + switch(action.type) { + case SEARCH_CHANGE: + return state.set('value', action.value); + case SEARCH_SUGGESTIONS_READY: + return normalizeSuggestions(state, action.value, action.accounts); + case SEARCH_RESET: + return state.withMutations(map => { + map.set('suggestions', []); + map.set('value', ''); + map.set('loaded_value', ''); + }); + default: + return state; + } +}; |