private async Task ensureReturnsWorkspaceIdOfSuggestion(AutocompleteSuggestion suggestion) { await NavigationService.Received().Close( Arg.Is(ViewModel), Arg.Is <SelectProjectParameter>( parameter => parameter.WorkspaceId == suggestion.WorkspaceId)); }
private bool assertSuggestion(AutocompleteSuggestion suggestion, long selectedProjectId) { var projectSuggestion = (ProjectSuggestion)suggestion; return(projectSuggestion.Selected == false || projectSuggestion.ProjectId == selectedProjectId && projectSuggestion.Selected); }
private async Task selectProject(AutocompleteSuggestion suggestion) { if (suggestion is CreateEntitySuggestion createEntitySuggestion) { await createProject(createEntitySuggestion.EntityName); return; } if (suggestion.WorkspaceId == workspaceId || suggestion.WorkspaceId == 0) { setProject(suggestion); return; } var shouldSetProject = await dialogService.Confirm( Resources.DifferentWorkspaceAlertTitle, Resources.DifferentWorkspaceAlertMessage, Resources.Ok, Resources.Cancel ); if (!shouldSetProject) { return; } setProject(suggestion); }
private IEnumerable <AutocompleteSuggestion> includeTasksIfExpanded(AutocompleteSuggestion suggestion) { yield return(suggestion); if (suggestion is ProjectSuggestion projectSuggestion && expandedProjects.Value.Contains(projectSuggestion.ProjectId)) { var orderedTasks = projectSuggestion.Tasks .OrderBy(t => t.Name); foreach (var taskSuggestion in orderedTasks) { yield return(taskSuggestion); } } }
private void setProject(AutocompleteSuggestion suggestion) { workspaceId = suggestion.WorkspaceId; switch (suggestion) { case ProjectSuggestion projectSuggestion: projectId = projectSuggestion .ProjectId == 0 ? null : (long?)projectSuggestion.ProjectId; taskId = null; break; case TaskSuggestion taskSuggestion: projectId = taskSuggestion.ProjectId; taskId = taskSuggestion.TaskId; break; default: throw new ArgumentException($"{nameof(suggestion)} must be either of type {nameof(ProjectSuggestion)} or {nameof(TaskSuggestion)}."); } Close(new SelectProjectParameter(projectId, taskId, workspaceId)); }
private async Task selectSuggestion(AutocompleteSuggestion suggestion) { switch (suggestion) { case QuerySymbolSuggestion querySymbolSuggestion: if (querySymbolSuggestion.Symbol == QuerySymbols.ProjectsString) { analyticsService.StartViewTapped.Track(StartViewTapSource.PickEmptyStateProjectSuggestion); analyticsService.StartEntrySelectProject.Track(ProjectTagSuggestionSource.TableCellButton); } else if (querySymbolSuggestion.Symbol == QuerySymbols.TagsString) { analyticsService.StartViewTapped.Track(StartViewTapSource.PickEmptyStateTagSuggestion); analyticsService.StartEntrySelectTag.Track(ProjectTagSuggestionSource.TableCellButton); } textFieldInfo.Accept(textFieldInfo.Value.FromQuerySymbolSuggestion(querySymbolSuggestion)); break; case TimeEntrySuggestion timeEntrySuggestion: analyticsService.StartViewTapped.Track(StartViewTapSource.PickTimeEntrySuggestion); textFieldInfo.Accept(textFieldInfo.Value.FromTimeEntrySuggestion(timeEntrySuggestion)); break; case ProjectSuggestion projectSuggestion: analyticsService.StartViewTapped.Track(StartViewTapSource.PickProjectSuggestion); if (textFieldInfo.Value.WorkspaceId != projectSuggestion.WorkspaceId && await workspaceChangeDenied()) { return; } isSuggestingProjects.Accept(false); textFieldInfo.Accept(textFieldInfo.Value.FromProjectSuggestion(projectSuggestion)); queryByTypeSubject.OnNext(AutocompleteSuggestionType.None); break; case TaskSuggestion taskSuggestion: analyticsService.StartViewTapped.Track(StartViewTapSource.PickTaskSuggestion); if (textFieldInfo.Value.WorkspaceId != taskSuggestion.WorkspaceId && await workspaceChangeDenied()) { return; } isSuggestingProjects.Accept(false); textFieldInfo.Accept(textFieldInfo.Value.FromTaskSuggestion(taskSuggestion)); queryByTypeSubject.OnNext(AutocompleteSuggestionType.None); break; case TagSuggestion tagSuggestion: analyticsService.StartViewTapped.Track(StartViewTapSource.PickTagSuggestion); textFieldInfo.Accept(textFieldInfo.Value.FromTagSuggestion(tagSuggestion)); break; case CreateEntitySuggestion createEntitySuggestion: if (isSuggestingProjects.Value) { await createProject(); } else { await createTag(); } break; default: return; } IObservable <bool> workspaceChangeDenied() => View.Confirm( Resources.DifferentWorkspaceAlertTitle, Resources.DifferentWorkspaceAlertMessage, Resources.Ok, Resources.Cancel ).Select(Invert); }
private async Task ensureReturnsWorkspaceIdOfSuggestion(AutocompleteSuggestion suggestion) { (await ViewModel.Result) .WorkspaceId.Should().Be(suggestion.WorkspaceId); }
private void selectSuggestion(AutocompleteSuggestion suggestion) { switch (suggestion) { case QuerySymbolSuggestion querySymbolSuggestion: TextFieldInfo = TextFieldInfo.WithTextAndCursor(querySymbolSuggestion.Symbol, 1); break; case TimeEntrySuggestion timeEntrySuggestion: TextFieldInfo = TextFieldInfo.WithTextAndCursor( timeEntrySuggestion.Description, timeEntrySuggestion.Description.Length); if (!timeEntrySuggestion.ProjectId.HasValue) { TextFieldInfo = TextFieldInfo.RemoveProjectInfo(); return; } if (timeEntrySuggestion.TaskId == null) { TextFieldInfo = TextFieldInfo.WithProjectInfo( timeEntrySuggestion.ProjectId.Value, timeEntrySuggestion.ProjectName, timeEntrySuggestion.ProjectColor); break; } TextFieldInfo = TextFieldInfo.WithProjectAndTaskInfo( timeEntrySuggestion.ProjectId.Value, timeEntrySuggestion.ProjectName, timeEntrySuggestion.ProjectColor, timeEntrySuggestion.TaskId.Value, timeEntrySuggestion.TaskName); break; case ProjectSuggestion projectSuggestion: TextFieldInfo = TextFieldInfo .RemoveProjectQueryFromDescriptionIfNeeded() .WithProjectInfo( projectSuggestion.ProjectId, projectSuggestion.ProjectName, projectSuggestion.ProjectColor); break; case TaskSuggestion taskSuggestion: TextFieldInfo = TextFieldInfo .RemoveProjectQueryFromDescriptionIfNeeded() .WithProjectAndTaskInfo( taskSuggestion.ProjectId, taskSuggestion.ProjectName, taskSuggestion.ProjectColor, taskSuggestion.TaskId, taskSuggestion.Name ); break; case TagSuggestion tagSuggestion: TextFieldInfo = TextFieldInfo .RemoveTagQueryFromDescriptionIfNeeded() .AddTag(tagSuggestion); break; } }
private async Task selectSuggestion(AutocompleteSuggestion suggestion) { switch (suggestion) { case QuerySymbolSuggestion querySymbolSuggestion: TextFieldInfo = TextFieldInfo.WithTextAndCursor(querySymbolSuggestion.Symbol, 1); break; case TimeEntrySuggestion timeEntrySuggestion: TextFieldInfo = TextFieldInfo.WithTextAndCursor( timeEntrySuggestion.Description, timeEntrySuggestion.Description.Length); if (!timeEntrySuggestion.ProjectId.HasValue) { TextFieldInfo = TextFieldInfo.RemoveProjectInfo(); return; } if (timeEntrySuggestion.TaskId == null) { TextFieldInfo = TextFieldInfo.WithProjectInfo( timeEntrySuggestion.WorkspaceId, timeEntrySuggestion.ProjectId.Value, timeEntrySuggestion.ProjectName, timeEntrySuggestion.ProjectColor); break; } TextFieldInfo = TextFieldInfo.WithProjectAndTaskInfo( timeEntrySuggestion.WorkspaceId, timeEntrySuggestion.ProjectId.Value, timeEntrySuggestion.ProjectName, timeEntrySuggestion.ProjectColor, timeEntrySuggestion.TaskId.Value, timeEntrySuggestion.TaskName); break; case ProjectSuggestion projectSuggestion: if (TextFieldInfo.WorkspaceId == projectSuggestion.WorkspaceId) { setProject(projectSuggestion); break; } var shouldChangeProject = await dialogService.Confirm( Resources.DifferentWorkspaceAlertTitle, Resources.DifferentWorkspaceAlertMessage, Resources.Ok, Resources.Cancel); if (!shouldChangeProject) { break; } setProject(projectSuggestion); break; case TaskSuggestion taskSuggestion: if (TextFieldInfo.WorkspaceId == taskSuggestion.WorkspaceId) { setTask(taskSuggestion); break; } var shouldChangeTask = await dialogService.Confirm( Resources.DifferentWorkspaceAlertTitle, Resources.DifferentWorkspaceAlertMessage, Resources.Ok, Resources.Cancel); if (!shouldChangeTask) { break; } setTask(taskSuggestion); break; case TagSuggestion tagSuggestion: TextFieldInfo = TextFieldInfo .RemoveTagQueryFromDescriptionIfNeeded() .AddTag(tagSuggestion); break; } }