private async Task <DialogTurnResult> MetricPhase2Async(WaterfallStepContext stepContext, CancellationToken cancellationToken)
        {
            var createIdeaOptions = (CreateIdeaOptions)stepContext.Options;

            if (createIdeaOptions.Metric != null)
            {
                return(await stepContext.NextAsync(createIdeaOptions.Metric, cancellationToken));
            }

            var tokenResponse = (TokenResponse)stepContext.Result;

            if (tokenResponse?.Token == null)
            {
                await stepContext.Context.SendActivityAsync(MessageFactory.Text("Login was not successful please try again."), cancellationToken);

                return(await stepContext.ReplaceDialogAsync(nameof(WaterfallDialog), createIdeaOptions, cancellationToken));
            }

            var userProfile = await UserProfileAccessor.GetAsync(stepContext.Context);

            var service = new MetricsService(tokenResponse.Token, Configuration["BaseSPSiteUrl"]);
            var metrics = (await service.GetActiveMetricsAsync(userProfile.SelectedTeam.Id)).ToList();

            metrics.Add(new Metric {
                Id = 0, Name = "Other"
            });
            var promptOptions = new PromptOptions
            {
                Prompt  = MessageFactory.Text("What metric does this idea try to move?"),
                Choices = metrics.Select(i => new Choice(i.Name)).ToArray()
            };

            return(await stepContext.PromptAsync(nameof(ChoicePrompt), promptOptions, cancellationToken));
        }
Exemplo n.º 2
0
        private async Task SendMetricsCardAsync(IDialogContext context)
        {
            var clientContext = await AuthenticationHelper.GetAppOnlySharePointClientContextAsync();

            var metricsService = new MetricsService(clientContext);

            metrics = (await metricsService.GetActiveMetricsAsync(Team.Id))
                      .Union(new[] { Metric.Other })
                      .ToArray();

            var buttons = metrics
                          .Select((m, i) => new CardAction
            {
                Title = $"{i + 1}. {m.Name}",
                Value = m.Name,
                Type  = ActionTypes.ImBack
            })
                          .ToArray();
            var heroCard = new HeroCard(text: "What metric does this idea try to move?", buttons: buttons);

            var message = context.MakeMessage();

            message.Attachments.Add(heroCard.ToAttachment());
            await context.PostAsync(message);
        }
Exemplo n.º 3
0
        private async Task SendCreateIdeaCardAsync(IDialogContext context, IAwaitable <GraphServiceClient> result)
        {
            // Get team members
            var graphServiceClient = await result;
            var teamService        = new TeamService(graphServiceClient);
            var membersTask        = teamService.GetTeamMembersAsync(Team.Id);

            // Get active metrics
            var clientContext = await AuthenticationHelper.GetAppOnlySharePointClientContextAsync();

            var metricsService = new MetricsService(clientContext);
            var metrics        = (await metricsService.GetActiveMetricsAsync(Team.Id))
                                 .Union(new[] { Metric.Other })
                                 .ToArray();

            // Get create idea card
            var createIdeaCard = GetCreateIdeaCard(metrics, await membersTask);

            // Send card
            var message = context.MakeMessage();

            message.Attachments.Add(createIdeaCard.ToAttachment());
            await context.PostAsync(message);

            context.Done <object>(null);
        }