You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			54 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			TypeScript
		
	
			
		
		
	
	
			54 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			TypeScript
		
	
| import { compact } from 'lodash';
 | |
| import { createSelector } from 'reselect';
 | |
| 
 | |
| import { StateType } from '../reducer';
 | |
| 
 | |
| import { SearchStateType } from '../ducks/search';
 | |
| import { getConversationLookup, getSelectedConversationKey } from './conversations';
 | |
| import { ConversationLookupType } from '../ducks/conversations';
 | |
| 
 | |
| export const getSearch = (state: StateType): SearchStateType => state.search;
 | |
| 
 | |
| export const getQuery = createSelector(getSearch, (state: SearchStateType): string => state.query);
 | |
| 
 | |
| export const isSearching = createSelector(getSearch, (state: SearchStateType) => {
 | |
|   const { query } = state;
 | |
| 
 | |
|   return Boolean(query && query.trim().length > 1);
 | |
| });
 | |
| 
 | |
| export const getSearchResults = createSelector(
 | |
|   [getSearch, getConversationLookup, getSelectedConversationKey],
 | |
|   (searchState: SearchStateType, lookup: ConversationLookupType, selectedConversation?: string) => {
 | |
|     return {
 | |
|       contactsAndGroups: compact(
 | |
|         searchState.contactsAndGroups.map(id => {
 | |
|           const value = lookup[id];
 | |
| 
 | |
|           // on some edges cases, we have an id but no corresponding convo because it matches a query but the conversation was removed.
 | |
|           if (!value) {
 | |
|             return null;
 | |
|           }
 | |
| 
 | |
|           // Don't return anything when activeAt is unset (i.e. no current conversations with this user)
 | |
|           if (value.activeAt === undefined || value.activeAt === 0) {
 | |
|             //activeAt can be 0 when linking device
 | |
|             return null;
 | |
|           }
 | |
| 
 | |
|           if (value && id === selectedConversation) {
 | |
|             return {
 | |
|               ...value,
 | |
|               isSelected: true,
 | |
|             };
 | |
|           }
 | |
| 
 | |
|           return value;
 | |
|         })
 | |
|       ),
 | |
|       messages: compact(searchState.messages),
 | |
|       searchTerm: searchState.query,
 | |
|     };
 | |
|   }
 | |
| );
 |