| 
									
										
										
										
											2016-11-13 13:04:18 +01:00
										 |  |  | 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 = [ | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2016-11-18 15:36:16 +01:00
										 |  |  |       title: 'account', | 
					
						
							| 
									
										
										
										
											2016-11-13 13:04:18 +01:00
										 |  |  |       items: accounts.map(item => ({ | 
					
						
							|  |  |  |         type: 'account', | 
					
						
							|  |  |  |         id: item.id, | 
					
						
							|  |  |  |         value: item.acct | 
					
						
							|  |  |  |       })) | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   ]; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-01-15 14:45:43 +01:00
										 |  |  |   if (value.indexOf('@') === -1 && value.indexOf(' ') === -1) { | 
					
						
							| 
									
										
										
										
											2016-11-13 13:04:18 +01:00
										 |  |  |     newSuggestions.push({ | 
					
						
							| 
									
										
										
										
											2016-11-18 15:36:16 +01:00
										 |  |  |       title: 'hashtag', | 
					
						
							| 
									
										
										
										
											2016-11-13 13:04:18 +01:00
										 |  |  |       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; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | }; |