private IObservable <IEnumerable <AutocompleteSuggestion> > querySuggestions( IEnumerable <string> wordsToQuery, AutocompleteSuggestionType suggestionType) { var queryListIsEmpty = !wordsToQuery.Any(); switch (suggestionType) { case AutocompleteSuggestionType.Projects when queryListIsEmpty: return(database.Projects.GetAll() .Select(ProjectSuggestion.FromProjectsPrependingEmpty)); case AutocompleteSuggestionType.Projects: return(wordsToQuery .Aggregate(database.Projects.GetAll(), (obs, word) => obs.Select(filterProjectsByWord(word))) .Select(ProjectSuggestion.FromProjects)); case AutocompleteSuggestionType.Tags: return(wordsToQuery .Aggregate(database.Tags.GetAll(), (obs, word) => obs.Select(filterTagsByWord(word))) .Select(TagSuggestion.FromTags)); } if (queryListIsEmpty) { return(Observable.Return(QuerySymbolSuggestion.Suggestions)); } return(wordsToQuery .Aggregate(database.TimeEntries.GetAll(), (obs, word) => obs.Select(filterTimeEntriesByWord(word))) .Select(TimeEntrySuggestion.FromTimeEntries)); }
public IObservable <IEnumerable <AutocompleteSuggestion> > Query(string queryText, AutocompleteSuggestionType suggestionType) { var wordsToQuery = queryText.Split(' ').Where(word => !string.IsNullOrEmpty(word)).Distinct(); return(querySuggestions(wordsToQuery, suggestionType)); }
public QueryInfo(string text, AutocompleteSuggestionType suggestionType) { Text = text; SuggestionType = suggestionType; }