public override async Task Initialize() { await base.Initialize(); navigationFromEditTimeEntryViewModelStopwatch = stopwatchProvider.Get(MeasuredOperation.OpenSelectProjectFromEditView); stopwatchProvider.Remove(MeasuredOperation.OpenSelectProjectFromEditView); var workspaces = await interactorFactory.GetAllWorkspaces().Execute(); shouldShowProjectCreationSuggestion = workspaces.Any(ws => ws.IsEligibleForProjectCreation()); allWorkspaces = workspaces.ToList(); UseGrouping = allWorkspaces.Count > 1; dataSource.Projects .GetAll() .Select(projects => projects.Any()) .Subscribe(hasProjects => IsEmpty = !hasProjects); infoSubject.AsObservable() .StartWith(Text) .Select(text => text.SplitToQueryWords()) .ObserveOn(schedulerProvider.BackgroundScheduler) .SelectMany(query => interactorFactory.GetProjectsAutocompleteSuggestions(query).Execute()) .SubscribeOn(schedulerProvider.MainScheduler) .Select(suggestions => suggestions.Cast <ProjectSuggestion>()) .Select(setSelectedProject) .Subscribe(onSuggestions); }
public IObservable <IEnumerable <AutocompleteSuggestion> > Execute() { var wordsToQuery = queryInfo.Text.SplitToQueryWords(); switch (queryInfo.SuggestionType) { case AutocompleteSuggestionType.Projects: return(interactorFactory.GetProjectsAutocompleteSuggestions(wordsToQuery).Execute()); case AutocompleteSuggestionType.Tags: return(interactorFactory.GetTagsAutocompleteSuggestions(wordsToQuery).Execute()); } return(wordsToQuery.Count == 0 ? Observable.Return(QuerySymbolSuggestion.Suggestions) : interactorFactory.GetTimeEntriesAutocompleteSuggestions(wordsToQuery).Execute()); }
public override async Task Initialize(SelectProjectParameter parameter) { await base.Initialize(parameter); creationEnabled = parameter.CreationEnabled; taskId = parameter.TaskId; projectId = parameter.ProjectId; workspaceId = parameter.WorkspaceId; var workspaces = await interactorFactory.GetAllWorkspaces().Execute(); projectCreationSuggestionsAreEnabled = workspaces.Any(ws => ws.IsEligibleForProjectCreation()); UseGrouping = workspaces.Count() > 1; FilterText.Subscribe(async text => { var suggestions = interactorFactory.GetProjectsAutocompleteSuggestions(text.SplitToQueryWords()).Execute().SelectMany(x => x).ToEnumerable() .Cast <ProjectSuggestion>() .Select(setSelectedProject); var collectionSections = suggestions .GroupBy(project => project.WorkspaceId) .Select(grouping => grouping.OrderBy(projectSuggestion => projectSuggestion.ProjectName)) .OrderBy(grouping => grouping.First().WorkspaceName) .Select(grouping => collectionSection(grouping, prependNoProject: string.IsNullOrEmpty(text))) .ToList(); if (creationEnabled && shouldSuggestCreation(text)) { var createEntitySuggestion = new CreateEntitySuggestion(Resources.CreateProject, text); var section = new SectionModel <string, AutocompleteSuggestion>(null, new[] { createEntitySuggestion }); collectionSections.Insert(0, section); } if (collectionSections.None()) { var workspace = await interactorFactory.GetWorkspaceById(workspaceId).Execute(); var noProjectSuggestion = ProjectSuggestion.NoProject(workspace.Id, workspace.Name); collectionSections.Add( new SectionModel <string, AutocompleteSuggestion>(null, new[] { noProjectSuggestion }) ); } suggestionsSubject.OnNext(collectionSections.ToImmutableList()); }); }
public override async Task Initialize() { await base.Initialize(); var workspaces = await interactorFactory.GetAllWorkspaces().Execute(); allWorkspaces = workspaces.ToList(); UseGrouping = allWorkspaces.Count > 1; dataSource.Projects .GetAll() .Select(projects => projects.Any()) .Subscribe(hasProjects => IsEmpty = !hasProjects); infoSubject.AsObservable() .StartWith(Text) .Select(text => text.SplitToQueryWords()) .SelectMany(query => interactorFactory.GetProjectsAutocompleteSuggestions(query).Execute()) .Select(suggestions => suggestions.Cast <ProjectSuggestion>()) .Select(setSelectedProject) .Subscribe(onSuggestions); }