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);
                }
            }
        }
Exemple #5
0
        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;
            }
        }
Exemple #9
0
        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;
            }
        }