/// <summary>
        /// Wrap BotBuilder action into AdaptiveCard submit action.
        /// </summary>
        /// <param name="action"> Target bot builder action to be adapted.</param>
        /// <returns> The wrapped adaptive card submit action.</returns>
        public static AdaptiveSubmitAction ToAdaptiveCardAction(this CardAction action)
        {
            var adaptiveCardAction = new AdaptiveSubmitAction();

            adaptiveCardAction.RepresentAsBotBuilderAction(action);
            return(adaptiveCardAction);
        }
        // Helper Method to modify the Adaptive Card template.
        static AdaptiveCard GetPackageAdaptiveCard(string packageName, string packagePrice, string packageDescription)
        {
            string            json = System.IO.File.ReadAllText(@"Resources\\carPackages.json");
            var               card = AdaptiveCards.AdaptiveCard.FromJson(json).Card;
            AdaptiveColumnSet adaptiveColumnSet = (AdaptiveColumnSet)card.Body[0];

            AdaptiveSubmitAction adaptiveSubmitAction = (AdaptiveSubmitAction)card.Actions[1];

            adaptiveSubmitAction.Data = packageName;

            // Get Column
            AdaptiveColumn adaptiveColumn = (AdaptiveCards.AdaptiveColumn)adaptiveColumnSet.Columns[0];

            // Set Tag Line
            AdaptiveTextBlock taglineBlock = (AdaptiveTextBlock)adaptiveColumn.Items[0];

            taglineBlock.Text = packageDescription;

            // Set Package Name
            AdaptiveTextBlock packageBlock = (AdaptiveTextBlock)adaptiveColumn.Items[1];

            packageBlock.Text = packageName;

            // Set Package Price
            AdaptiveTextBlock priceBlock = (AdaptiveTextBlock)adaptiveColumn.Items[2];

            priceBlock.Text = packagePrice;

            return(card);
        }
Exemplo n.º 3
0
        /// <summary>
        /// Build a prompt with multiple options.
        /// </summary>
        /// <param name="intro">The intro text or question.</param>
        /// <param name="options">All possible options.</param>
        /// <returns>The prompt.</returns>
        public static Attachment BuildOptionPrompt(string intro, params PromptOption[] options)
        {
            List <AdaptiveAction> buttons = new List <AdaptiveAction>();

            foreach (PromptOption o in options)
            {
                var button = new AdaptiveSubmitAction()
                {
                    Title = o.Title,
                    Data  = o.Text,
                };
                buttons.Add(button);
            }
            AdaptiveCard      card   = new AdaptiveCard(new AdaptiveSchemaVersion());
            AdaptiveTextBlock header = new AdaptiveTextBlock(intro)
            {
                Wrap = true
            };

            card.Body.Add(header);
            card.Actions = buttons;

            var attachement = new Attachment
            {
                ContentType = AdaptiveCard.ContentType,
                Content     = card
            };

            return(attachement);
        }
Exemplo n.º 4
0
        public void ActionSet()
        {
            AdaptiveActionSet actionSet = new AdaptiveActionSet
            {
                Height    = HeightType.Stretch,
                Id        = "ActionSetId",
                IsVisible = false,
                Separator = true,
                Spacing   = Spacing.ExtraLarge
            };

            ValidateBaseElementProperties(actionSet, "ActionSetId", false, true, Spacing.ExtraLarge, HeightType.Stretch);

            AdaptiveSubmitAction submitAction = new AdaptiveSubmitAction
            {
                Title = "Submit One"
            };

            actionSet.Actions.Add(submitAction);

            AdaptiveSubmitAction submitAction2 = new AdaptiveSubmitAction
            {
                Title = "Submit Two"
            };

            actionSet.Actions.Add(submitAction2);

            Assert.AreEqual("Submit One", actionSet.Actions[0].Title);
            Assert.AreEqual("Submit Two", actionSet.Actions[1].Title);

            var jsonString = actionSet.ToJson().ToString();

            Assert.AreEqual("{\"actions\":[{\"title\":\"Submit One\",\"type\":\"Action.Submit\"},{\"title\":\"Submit Two\",\"type\":\"Action.Submit\"}],\"height\":\"Stretch\",\"id\":\"ActionSetId\",\"isVisible\":false,\"separator\":true,\"spacing\":\"extraLarge\",\"type\":\"ActionSet\"}", jsonString);
        }
        private static AdaptiveSubmitAction getButtonAction(ButtonType type, Constants.DialogType dialog)
        {
            var action = new AdaptiveSubmitAction();
            var data   = "{'reply_type' : '";

            switch (type)
            {
            case ButtonType.PAGINATION:
                action.Title = "Ver Mais";
                data        += "pagination";
                break;

            case ButtonType.FILTER_AGAIN:
                action.Title = "Alterar Filtragem";
                data        += "filter_again";
                break;

            case ButtonType.ADD_PRODUCT:
                action.Title = "Adicionar Produto";
                data        += "add_product";
                break;

            case ButtonType.COMPARE:
                action.Title = "Comparar";
                data        += "compare";
                break;
            }

            data           += "', 'dialog' : '" + Constants.getDialogName(dialog) + "'}";
            action.DataJson = data;
            return(action);
        }
        /// <summary>
        /// Wrap BotBuilder action into AdaptiveCard submit action.
        /// </summary>
        /// <param name="action"> The instance of adaptive card submit action.</param>
        /// <param name="targetAction"> Target action to be adapted.</param>
        public static void RepresentAsBotBuilderAction(this AdaptiveSubmitAction action, CardAction targetAction)
        {
            if (action == null)
            {
                throw new ArgumentNullException(nameof(action));
            }

            if (targetAction == null)
            {
                throw new ArgumentNullException(nameof(targetAction));
            }

            var wrappedAction = new CardAction
            {
                Type        = targetAction.Type,
                Value       = targetAction.Value,
                Text        = targetAction.Text,
                DisplayText = targetAction.DisplayText,
            };

            var serializerSettings = new JsonSerializerSettings {
                NullValueHandling = NullValueHandling.Ignore
            };

            var    jsonStr  = action.DataJson ?? "{}";
            JToken dataJson = JObject.Parse(jsonStr);

            dataJson["msteams"] = JObject.FromObject(wrappedAction, JsonSerializer.Create(serializerSettings));

            action.Title    = targetAction.Title;
            action.DataJson = dataJson.ToString();
        }
Exemplo n.º 7
0
 protected static HtmlTag SubmitActionRender(AdaptiveSubmitAction action, AdaptiveRenderContext context)
 {
     return(new HtmlTag("button")
            .AddClass("btn")
            .AddClass("btn-primary")
            .Attr("type", "submit")
            .SetInnerText(action.Title));
 }
 public static AdaptiveSubmitAction SetSubmitTaskModule(this AdaptiveSubmitAction action, string title, string data)
 {
     action.Title = title;
     action.Data  = new AdaptiveCardTaskSubmitValue <string>()
     {
         Data = data
     };
     return(action);
 }
Exemplo n.º 9
0
        public static AdaptiveCard CreateHelloAdaptiveCard()
        {
            var card = new AdaptiveCard(new AdaptiveSchemaVersion(1, 0));
            AdaptiveSubmitAction submitAction = new AdaptiveSubmitAction();

            submitAction.Title = "Hello";
            submitAction.Data  = "Hello";

            card.Actions.Add(submitAction);
            return(card);
        }
        public static AdaptiveCard CreateHelloAdaptiveCard()
        {
            var card = new AdaptiveCard(new AdaptiveSchemaVersion(1, 0));
            AdaptiveSubmitAction submitAction = new AdaptiveSubmitAction();

            submitAction.Title = "Hello";
            submitAction.Data  = "hi";
            //var jsonString = @"{""Type"":""Details"",""Name"":""Rick"",""Company"":""West Wind"",
            //            ""Entered"":""2012-03-16T00:03:33.245-10:00""}";
            //submitAction.DataJson = jsonString;

            card.Actions.Add(submitAction);
            return(card);
        }
Exemplo n.º 11
0
        public AdaptiveCard GetAdaptiveCardForNewJobPosting(string description = null)
        {
            var locations      = _locationService.GetAllLocations().GetAwaiter().GetResult();
            var hiringManagers = _recruiterService.GetAllHiringManagers().GetAwaiter().GetResult();

            var command = new
            {
                commandId = AppCommands.OpenNewTicket
            };

            var wrapAction = new CardAction
            {
                Title = "Create ticket",
                Value = command
            };

            var action = new AdaptiveSubmitAction
            {
                Data = command
            };

            action.RepresentAsBotBuilderAction(wrapAction);

            return(new AdaptiveCard
            {
                Version = "1.0",
                Body = new List <AdaptiveElement>
                {
                    new AdaptiveTextBlock("Enter in ticket description")
                    {
                        IsSubtle = true,
                        Wrap = true,
                        Size = AdaptiveTextSize.Small
                    },
                    new AdaptiveTextBlock("Description"),
                    new AdaptiveTextInput
                    {
                        Id = "description",
                        IsMultiline = true,
                        Placeholder = "E.g There is an application error.",
                        Value = description
                    }
                },
                Actions = new List <AdaptiveAction>
                {
                    action
                }
            });
        }
Exemplo n.º 12
0
        private Attachment MakeAdaptiveCard(
            string text,
            string id,
            List <Tuple <string, string> > choices,
            Dictionary <string, string> requestData = null
            )
        {
            var card = new AdaptiveCard(new AdaptiveSchemaVersion(1, 0))
            {
                Body = new List <AdaptiveElement>()
                {
                    new AdaptiveTextBlock()
                    {
                        Text   = text,
                        Weight = AdaptiveTextWeight.Bolder
                    },
                    new AdaptiveChoiceSetInput()
                    {
                        Id      = id,
                        Style   = AdaptiveChoiceInputStyle.Expanded,
                        Choices = choices.Select(tup => new AdaptiveChoice
                        {
                            Title = tup.Item1,  // Player Name
                            Value = tup.Item2,  // Player Id
                        }).ToList(),
                    }
                },
            };

            var submitAction = new AdaptiveSubmitAction();

            if (requestData != null)
            {
                submitAction.Data = requestData;
            }
            card.Actions = new List <AdaptiveAction> {
                submitAction
            };

            // Prompt
            var cardAttachment = new Attachment
            {
                ContentType = AdaptiveCard.ContentType,
                // Convert the AdaptiveCard to a JObject
                Content = JObject.FromObject(card)
            };

            return(cardAttachment);
        }
Exemplo n.º 13
0
        /// <summary>
        /// Construct show card containing prompt values.
        /// </summary>
        /// <param name="prompts">Prompts associated with the current question.</param>
        /// <param name="questionId">questionId of the question.</param>
        /// <param name="userQuestion">User query asked as question.</param>
        /// <param name="startIndex">Starting index of values in prompts array.</param>
        /// <param name="maxPrompts">Maximum number of prompts allowed in one show card.</param>
        /// <returns>Response card.</returns>
        private static List <AdaptiveAction> AddPrompts(IList <PromptDTO> prompts, int questionId, string userQuestion, int startIndex, int maxPrompts)
        {
            List <AdaptiveAction> adaptiveSubmitAction = new List <AdaptiveAction>();
            int currentIndex = 0;
            int maxIndex     = startIndex + maxPrompts > prompts.Count ? prompts.Count : startIndex + maxPrompts;

            for (int i = startIndex; i < maxIndex; i++)
            {
                currentIndex = i;
                AdaptiveSubmitAction promptAction = new AdaptiveSubmitAction
                {
                    Title = prompts[i].DisplayText,
                    Data  = new ResponseCardPayload
                    {
                        MsTeams = new CardAction
                        {
                            Type        = ActionTypes.MessageBack,
                            DisplayText = prompts[i].DisplayText,
                            Text        = prompts[i].DisplayText,
                        },
                        UserQuestion        = prompts[i].DisplayText,
                        KnowledgeBaseAnswer = prompts[i].DisplayText,
                        QnAId = (int)prompts[i].QnaId,
                        PreviousQuestionId = questionId,
                        PreviousUserQuery  = userQuestion,
                    },
                };
                adaptiveSubmitAction.Add(promptAction);
            }

            if (prompts.Count - startIndex > maxPrompts)
            {
                adaptiveSubmitAction.Add(
                    new AdaptiveShowCardAction
                {
                    Title = Strings.MoreTitleText,
                    Card  = new AdaptiveCard("1.0")
                    {
                        Actions = AddPrompts(prompts, questionId, userQuestion, currentIndex + 1, maxPrompts),
                    },
                });
            }

            return(adaptiveSubmitAction);
        }
        /// <summary>
        /// Creates the specified submit action.
        /// </summary>
        /// <param name="action">The action.</param>
        /// <param name="tag">The tag.</param>
        /// <param name="renderContext">The render context.</param>
        public static void Create(AdaptiveSubmitAction action, HtmlTag tag, AdaptiveRenderContext renderContext)
        {
            var id = AdaptiveCardRenderer.GenerateRandomId();

            tag.Attr("id", id);
            tag.Attr("data-ac-submitData", JsonConvert.SerializeObject(action.Data, Formatting.None));

            if (action.AdditionalProperties.ContainsKey("name"))
            {
                tag.Attributes.Add("data-name", action.AdditionalProperties["name"].ToString());
            }
            else
            {
                tag.Attributes.Add("data-name", "Submit");
            }

            tag.Attributes.Add("onclick", "window.blazorAdaptiveCards.submitData(this, id)");
        }
Exemplo n.º 15
0
        public void SubmitAction()
        {
            JsonValue            dataJson     = JsonValue.CreateStringValue("foo");
            AdaptiveSubmitAction submitAction = new AdaptiveSubmitAction
            {
                DataJson = dataJson,
                IconUrl  = "http://www.stuff.com/icon.jpg",
                Id       = "OpenUrlId",
                Style    = "Destructive",
                Title    = "Title"
            };

            ValidateBaseActionProperties(submitAction, "http://www.stuff.com/icon.jpg", "OpenUrlId", "Title", "Destructive");
            Assert.AreEqual(dataJson, submitAction.DataJson);

            var jsonString = submitAction.ToJson().ToString();

            Assert.AreEqual("{\"data\":\"foo\",\"iconUrl\":\"http://www.stuff.com/icon.jpg\",\"id\":\"OpenUrlId\",\"style\":\"Destructive\",\"title\":\"Title\",\"type\":\"Action.Submit\"}", jsonString);
        }
Exemplo n.º 16
0
        public void TestObjectModelActionSetElement()
        {
            AdaptiveCard      card      = new AdaptiveCard(new AdaptiveSchemaVersion("1.2"));
            AdaptiveActionSet actionSet = new AdaptiveActionSet();

            card.Body.Add(actionSet);

            AdaptiveSubmitAction submitAction = new AdaptiveSubmitAction
            {
                Title    = "Action.Submit",
                DataJson = "{\"x\": 13}"
            };

            actionSet.Actions.Add(submitAction);

            AdaptiveOpenUrlAction openUrlAction = new AdaptiveOpenUrlAction
            {
                Title     = "OpenUrl",
                UrlString = "http://adaptivecards.io"
            };

            actionSet.Actions.Add(openUrlAction);

#pragma warning disable 0618
            AdaptiveShowCardAction showCardAction = new AdaptiveShowCardAction
            {
                Title = "ShowCard",
                Card  = new AdaptiveCard
                {
                    Body = new List <AdaptiveElement>
                    {
                        new AdaptiveTextBlock
                        {
                            Text = "This is a show card"
                        }
                    }
                }
            };
#pragma warning restore 0618

            actionSet.Actions.Add(showCardAction);

            AdaptiveToggleVisibilityAction toggleVisibilityAction = new AdaptiveToggleVisibilityAction
            {
                Title          = "Toggle",
                TargetElements = new List <AdaptiveTargetElement> {
                    "test"
                }
            };
            actionSet.Actions.Add(toggleVisibilityAction);

            // This lines are not indented so the comparisson doesn't fail due to extra spaces
            var expectedJson =
                @"{
  ""type"": ""AdaptiveCard"",
  ""version"": ""1.2"",
  ""body"": [
    {
      ""type"": ""ActionSet"",
      ""actions"": [
        {
          ""type"": ""Action.Submit"",
          ""data"": {
            ""x"": 13
          },
          ""title"": ""Action.Submit""
        },
        {
          ""type"": ""Action.OpenUrl"",
          ""url"": ""http://adaptivecards.io"",
          ""title"": ""OpenUrl""
        },
        {
          ""type"": ""Action.ShowCard"",
          ""card"": {
            ""type"": ""AdaptiveCard"",
            ""version"": ""1.0"",
            ""body"": [
              {
                ""type"": ""TextBlock"",
                ""text"": ""This is a show card""
              }
            ]
          },
          ""title"": ""ShowCard""
        },
        {
          ""type"": ""Action.ToggleVisibility"",
          ""targetElements"": [
            ""test""
          ],
          ""title"": ""Toggle""
        }
      ]
    }
  ]
}";

            var outputJson = card.ToJson();
            Assert.AreEqual(outputJson, expectedJson);
        }
Exemplo n.º 17
0
 public virtual void Visit(AdaptiveSubmitAction action)
 {
 }
Exemplo n.º 18
0
        public void Card()
        {
            AdaptiveCard card = new AdaptiveCard
            {
                BackgroundImage = new AdaptiveBackgroundImage
                {
                    Url = "https://www.stuff.com/background.jpg"
                },
                FallbackText             = "Fallback Text",
                Height                   = HeightType.Stretch,
                InputNecessityIndicators = InputNecessityIndicators.RequiredInputs,
                Language                 = "en",
                Speak   = "This is a card",
                Style   = ContainerStyle.Emphasis,
                Version = "1.3",
                VerticalContentAlignment = VerticalContentAlignment.Center,
            };

            Assert.AreEqual("https://www.stuff.com/background.jpg", card.BackgroundImage.Url);
            Assert.AreEqual("Fallback Text", card.FallbackText);
            Assert.AreEqual(HeightType.Stretch, card.Height);
            Assert.AreEqual(InputNecessityIndicators.RequiredInputs, card.InputNecessityIndicators);
            Assert.AreEqual("en", card.Language);
            Assert.AreEqual("This is a card", card.Speak);
            Assert.AreEqual(ContainerStyle.Emphasis, card.Style);
            Assert.AreEqual("1.3", card.Version);
            Assert.AreEqual(VerticalContentAlignment.Center, card.VerticalContentAlignment);

            card.SelectAction = new AdaptiveSubmitAction
            {
                Title = "Select Action"
            };
            Assert.IsNotNull(card.SelectAction);
            Assert.AreEqual("Select Action", card.SelectAction.Title);

            AdaptiveTextBlock textBlock = new AdaptiveTextBlock
            {
                Text = "This is a text block"
            };

            card.Body.Add(textBlock);

            AdaptiveTextBlock textBlock2 = new AdaptiveTextBlock
            {
                Text = "This is another text block"
            };

            card.Body.Add(textBlock2);

            Assert.AreEqual("This is a text block", (card.Body[0] as AdaptiveTextBlock).Text);
            Assert.AreEqual("This is another text block", (card.Body[1] as AdaptiveTextBlock).Text);

            AdaptiveSubmitAction submitAction = new AdaptiveSubmitAction
            {
                Title = "Submit One"
            };

            card.Actions.Add(submitAction);

            AdaptiveSubmitAction submitAction2 = new AdaptiveSubmitAction
            {
                Title = "Submit Two"
            };

            card.Actions.Add(submitAction2);

            Assert.AreEqual("Submit One", card.Actions[0].Title);
            Assert.AreEqual("Submit Two", card.Actions[1].Title);

            var jsonString = card.ToJson().ToString();

            Assert.AreEqual("{\"actions\":[{\"title\":\"Submit One\",\"type\":\"Action.Submit\"},{\"title\":\"Submit Two\",\"type\":\"Action.Submit\"}],\"backgroundImage\":\"https://www.stuff.com/background.jpg\",\"body\":[{\"text\":\"This is a text block\",\"type\":\"TextBlock\"},{\"text\":\"This is another text block\",\"type\":\"TextBlock\"}],\"fallbackText\":\"Fallback Text\",\"height\":\"Stretch\",\"inputNecessityIndicators\":\"RequiredInputs\",\"lang\":\"en\",\"speak\":\"This is a card\",\"style\":\"Emphasis\",\"type\":\"AdaptiveCard\",\"version\":\"1.3\",\"verticalContentAlignment\":\"Center\"}", jsonString);
        }
        public AdaptiveCard Convert(Candidate candidate, AdaptiveCard card, ResolutionContext context)
        {
            if (candidate is null)
            {
                return(null);
            }

            if (card is null)
            {
                card = new AdaptiveCard();
            }

            card.Version = "1.0";
            card.Body    = new List <AdaptiveElement>
            {
                new AdaptiveColumnSet
                {
                    Columns = new List <AdaptiveColumn>
                    {
                        new AdaptiveColumn
                        {
                            Width = "auto",
                            Items = new List <AdaptiveElement>
                            {
                                new AdaptiveImage(candidate.ProfilePicture)
                                {
                                    Size  = AdaptiveImageSize.Large,
                                    Style = AdaptiveImageStyle.Person
                                }
                            }
                        },
                        new AdaptiveColumn
                        {
                            Width = "stretch",
                            Items = new List <AdaptiveElement>
                            {
                                new AdaptiveTextBlock(candidate.Name)
                                {
                                    Weight = AdaptiveTextWeight.Bolder,
                                    Size   = AdaptiveTextSize.Medium
                                },
                                new AdaptiveTextBlock(candidate.Summary)
                                {
                                    Wrap = true
                                }
                            }
                        }
                    }
                },
                new AdaptiveFactSet
                {
                    Facts = new List <AdaptiveFact>
                    {
                        new AdaptiveFact("Current role:", candidate.CurrentRole),
                        new AdaptiveFact("Location:", candidate.Location.GetLocationString()),
                        new AdaptiveFact("Stage:", candidate.Stage.ToString()),
                        new AdaptiveFact("Position applied:", candidate.Position.Title),
                        new AdaptiveFact("Date applied:", candidate.DateApplied.ToLongDateString()),
                        new AdaptiveFact("Phone number:", candidate.Phone)
                    }
                }
            };

            card.Actions = new List <AdaptiveAction>();

            if (candidate.Stage != InterviewStageType.Offered)
            {
                card.Actions.Add(new AdaptiveShowCardAction
                {
                    Title = "Schedule an interview",
                    Card  = _templateService.GetAdaptiveCardForInterviewRequest(candidate, DateTime.Now.Date.AddDays(1.0))
                });
            }

            if (candidate.Comments.Any() || candidate.Interviews.Any())
            {
                var contentUrl = ConfigurationManager.AppSettings["BaseUrl"] + $"/StaticViews/CandidateFeedback.html?candidateId={candidate.CandidateId}";
                card.Actions.Add(new AdaptiveOpenUrlAction
                {
                    Title = "Open candidate feedback",
                    Url   = new Uri(string.Format(CommonConstants.TaskModuleUrlFormat, ConfigurationManager.AppSettings["TeamsAppId"],
                                                  contentUrl, "Feedback for " + candidate.Name,
                                                  ConfigurationManager.AppSettings["MicrosoftAppId"], "large", "large"))
                });
            }

            var leaveCommentCommand = new
            {
                commandId   = AppCommands.LeaveInternalComment,
                candidateId = candidate.CandidateId
            };

            var wrapAction = new CardAction
            {
                Title = "Submit",
                Value = leaveCommentCommand
            };

            var action = new AdaptiveSubmitAction
            {
                Data = leaveCommentCommand
            };

            action.RepresentAsBotBuilderAction(wrapAction);

            card.Actions.Add(new AdaptiveShowCardAction
            {
                Title = "Leave comment",
                Card  = new AdaptiveCard
                {
                    Body = new List <AdaptiveElement>
                    {
                        new AdaptiveTextInput
                        {
                            Id          = "comment",
                            Placeholder = "Leave an internal comment for this candidate",
                            IsMultiline = true
                        }
                    },
                    Actions = new List <AdaptiveAction>
                    {
                        action
                    }
                }
            });

            return(card);
        }
Exemplo n.º 20
0
        /// <summary>
        /// Get scrum start card when user clicks on update status button, end scrum button or scrum is started by background service.
        /// </summary>
        /// <param name="scrumSummary">Instance containing scrum related details.</param>
        /// <param name="membersActivityIdMap">Members id who are part of the scrum.</param>
        /// <param name="scrumMasterId">Unique identifier for scrum master details.</param>
        /// <param name="scrumStartActivityId">Scrum start card activity id. This will be used to refresh card if needed.</param>
        /// <param name="localizer">The current cultures' string localizer.</param>
        /// <param name="timeZone">Used to convert scrum start time as per specified time zone.</param>
        /// <returns>Scrum status update card attachment.</returns>
        public static Attachment GetScrumStartCard(ScrumSummary scrumSummary, Dictionary <string, string> membersActivityIdMap, string scrumMasterId, string scrumStartActivityId, IStringLocalizer <Strings> localizer, string timeZone)
        {
            string       userSpecifiedDateTime = FormatDateStringToAdaptiveCardDateFormat(scrumSummary?.ScrumStartTime, timeZone);
            string       scrumMembers          = JsonConvert.SerializeObject(membersActivityIdMap);
            string       isAnyUserResponded    = scrumSummary.RespondedUserCount == 0 ? localizer.GetString("StartScrumCardWelcomeText") : string.Format(CultureInfo.CurrentCulture, localizer.GetString("StartScrumCardBlockedText"), scrumSummary.BlockedUsersCount);
            AdaptiveCard getScrumStartCard     = new AdaptiveCard(Constants.AdaptiveCardVersion)
            {
                Body = new List <AdaptiveElement>
                {
                    new AdaptiveColumnSet
                    {
                        Columns = new List <AdaptiveColumn>
                        {
                            new AdaptiveColumn
                            {
                                VerticalContentAlignment = AdaptiveVerticalContentAlignment.Center,
                                Width = AdaptiveColumnWidth.Auto,
                                Items = new List <AdaptiveElement>
                                {
                                    new AdaptiveTextBlock
                                    {
                                        HorizontalAlignment = AdaptiveHorizontalAlignment.Left,
                                        Text   = scrumSummary.ScrumName,
                                        Weight = AdaptiveTextWeight.Bolder,
                                        Wrap   = true,
                                    },
                                },
                            },
                            new AdaptiveColumn
                            {
                                VerticalContentAlignment = AdaptiveVerticalContentAlignment.Center,
                                Width = AdaptiveColumnWidth.Stretch,
                                Items = new List <AdaptiveElement>
                                {
                                    new AdaptiveTextBlock
                                    {
                                        HorizontalAlignment = AdaptiveHorizontalAlignment.Right,
                                        Wrap  = true,
                                        Text  = scrumSummary.ScrumRunningStatus == ScrumRunningStatus.Active ? localizer.GetString("ScrumRunningStatusActive") : localizer.GetString("ScrumRunningStatusClosed"),
                                        Color = scrumSummary.ScrumRunningStatus == ScrumRunningStatus.Active ? AdaptiveTextColor.Good : AdaptiveTextColor.Default,
                                    },
                                },
                            },
                        },
                    },
                    new AdaptiveColumnSet
                    {
                        Columns = new List <AdaptiveColumn>
                        {
                            new AdaptiveColumn
                            {
                                VerticalContentAlignment = AdaptiveVerticalContentAlignment.Center,
                                Width = AdaptiveColumnWidth.Auto,
                                Items = new List <AdaptiveElement>
                                {
                                    new AdaptiveTextBlock
                                    {
                                        HorizontalAlignment = AdaptiveHorizontalAlignment.Left,
                                        Wrap = true,
                                        Text = string.Format(CultureInfo.CurrentCulture, localizer.GetString("ScrumDetailsRespondedVsTotalUserStatus"), scrumSummary.RespondedUserCount, scrumSummary.TotalUserCount),
                                    },
                                },
                            },
                            new AdaptiveColumn
                            {
                                VerticalContentAlignment = AdaptiveVerticalContentAlignment.Center,
                                Width = AdaptiveColumnWidth.Stretch,
                                Items = new List <AdaptiveElement>
                                {
                                    new AdaptiveTextBlock
                                    {
                                        HorizontalAlignment = AdaptiveHorizontalAlignment.Right,
                                        Text = userSpecifiedDateTime,
                                        Wrap = true,
                                    },
                                },
                            },
                        },
                    },
                    new AdaptiveColumnSet
                    {
                        Columns = new List <AdaptiveColumn>
                        {
                            new AdaptiveColumn
                            {
                                Width = AdaptiveColumnWidth.Stretch,
                                Items = new List <AdaptiveElement>
                                { // Represents empty column required for alignment.
                                },
                            },
                        },
                    },
                    new AdaptiveColumnSet
                    {
                        Columns = new List <AdaptiveColumn>
                        {
                            new AdaptiveColumn
                            {
                                Width = AdaptiveColumnWidth.Stretch,
                                Items = new List <AdaptiveElement>
                                { // Represents empty column required for alignment.
                                },
                            },
                        },
                    },
                    new AdaptiveColumnSet
                    {
                        Columns = new List <AdaptiveColumn>
                        {
                            new AdaptiveColumn
                            {
                                Items = new List <AdaptiveElement>
                                {
                                    new AdaptiveTextBlock
                                    {
                                        Size = AdaptiveTextSize.Medium,
                                        Wrap = true,
                                        Text = isAnyUserResponded,
                                        HorizontalAlignment = AdaptiveHorizontalAlignment.Left,
                                        Color     = scrumSummary.RespondedUserCount == 0 ? AdaptiveTextColor.Default : AdaptiveTextColor.Attention,
                                        Height    = AdaptiveHeight.Stretch,
                                        Separator = true,
                                    },
                                },
                                Spacing = AdaptiveSpacing.Medium,
                            },
                        },
                    },
                    new AdaptiveColumnSet
                    {
                        Columns = new List <AdaptiveColumn>
                        {
                            new AdaptiveColumn
                            {
                                Width = AdaptiveColumnWidth.Stretch,
                                Items = new List <AdaptiveElement>
                                { // Represents empty column required for alignment.
                                },
                            },
                        },
                    },
                    new AdaptiveColumnSet
                    {
                        Columns = new List <AdaptiveColumn>
                        {
                            new AdaptiveColumn
                            {
                                Width = AdaptiveColumnWidth.Stretch,
                                Items = new List <AdaptiveElement>
                                { // Represents empty column required for alignment.
                                },
                            },
                        },
                    },
                },
            };

            var scrumDetailsAdaptiveSubmitAction = new AdaptiveSubmitAction()
            {
                Title = localizer.GetString("ScrumDetailsButtonText"),
                Data  = new AdaptiveSubmitActionData
                {
                    MsTeams = new CardAction
                    {
                        Type = Constants.TaskModuleFetchType,
                    },
                    AdaptiveActionType   = Constants.ScrumDetailsTaskModuleCommand,
                    ScrumMasterId        = scrumMasterId,
                    ScrumStartActivityId = scrumStartActivityId,
                    ScrumMembers         = scrumMembers,
                },
            };

            if (scrumSummary.ScrumRunningStatus == ScrumRunningStatus.Active)
            {
                getScrumStartCard.Actions = new List <AdaptiveAction>
                {
                    new AdaptiveSubmitAction()
                    {
                        Title = localizer.GetString("UpdateStatusButtonText"),
                        Data  = new AdaptiveSubmitActionData
                        {
                            MsTeams = new CardAction
                            {
                                Type = Constants.TaskModuleFetchType,
                            },
                            AdaptiveActionType   = Constants.UpdateStatusTaskModuleCommand,
                            ScrumMasterId        = scrumMasterId,
                            ScrumStartActivityId = scrumStartActivityId,
                            ScrumMembers         = scrumMembers,
                        },
                    },
                    scrumDetailsAdaptiveSubmitAction,
                    new AdaptiveSubmitAction()
                    {
                        Title = localizer.GetString("EndScrumButtonText"),
                        Data  = new AdaptiveSubmitActionData
                        {
                            MsTeams = new CardAction
                            {
                                Type = ActionTypes.MessageBack,
                            },
                            AdaptiveActionType   = Constants.EndScrum,
                            ScrumMasterId        = scrumMasterId,
                            ScrumStartActivityId = scrumStartActivityId,
                            ScrumMembers         = scrumMembers,
                        },
                    },
                };
            }
            else
            {
                getScrumStartCard.Actions = new List <AdaptiveAction>
                {
                    scrumDetailsAdaptiveSubmitAction,
                };
            }

            var adaptiveCardAttachment = new Attachment()
            {
                ContentType = AdaptiveCard.ContentType,
                Content     = getScrumStartCard,
            };

            return(adaptiveCardAttachment);
        }
Exemplo n.º 21
0
        private AdaptiveCard SetCard()
        {
            AdaptiveCard _card = new AdaptiveCard("1.0");

            var _container = new AdaptiveContainer();

            var colum = new AdaptiveColumnSet();

            var _columnImage = new AdaptiveColumn()
            {
                Width = AdaptiveColumnWidth.Auto
            };

            _columnImage.Items.Add(new AdaptiveImage()
            {
                Url     = new Uri(this.UrlImage),
                Size    = AdaptiveImageSize.Small,
                Style   = AdaptiveImageStyle.Person,
                AltText = "Bootty"
            });

            var _columnContent = new AdaptiveColumn()
            {
                Width = AdaptiveColumnWidth.Stretch
            };

            _columnContent.Items.Add(new AdaptiveTextBlock()
            {
                Text    = "Booty",
                Size    = AdaptiveTextSize.Medium,
                Weight  = AdaptiveTextWeight.Default,
                Color   = AdaptiveTextColor.Default,
                Wrap    = true,
                Spacing = AdaptiveSpacing.Default
            });

            _columnContent.Items.Add(new AdaptiveTextBlock()
            {
                Text     = DateTime.Now.ToString(),
                Size     = AdaptiveTextSize.Small,
                Color    = AdaptiveTextColor.Default,
                Wrap     = true,
                IsSubtle = true,
                Spacing  = AdaptiveSpacing.None
            });

            var _textMessage = new AdaptiveTextBlock()
            {
                Text     = this.Title,
                Size     = AdaptiveTextSize.Medium,
                Color    = AdaptiveTextColor.Default,
                Weight   = AdaptiveTextWeight.Bolder,
                Wrap     = true,
                IsSubtle = false
            };

            var _textMessage2 = new AdaptiveTextBlock()
            {
                Text     = this.Description,
                Size     = AdaptiveTextSize.Small,
                Color    = AdaptiveTextColor.Default,
                Weight   = AdaptiveTextWeight.Default,
                Wrap     = true,
                IsSubtle = false
            };


            colum.Columns.Add(_columnImage);
            colum.Columns.Add(_columnContent);
            _container.Items.Add(colum);

            _card.Body.Add(_container);
            _card.Body.Add(_textMessage);
            _card.Body.Add(_textMessage2);

            //Form

            var _texDataSubtitle = new AdaptiveTextBlock()
            {
                Text   = "Tus Datos",
                Size   = AdaptiveTextSize.Medium,
                Color  = AdaptiveTextColor.Default,
                Weight = AdaptiveTextWeight.Bolder,
                HorizontalAlignment = AdaptiveHorizontalAlignment.Left
            };


            var _textTitleName = new AdaptiveTextBlock()
            {
                Text   = "Tú Nombre",
                Size   = AdaptiveTextSize.Small,
                Color  = AdaptiveTextColor.Default,
                Weight = AdaptiveTextWeight.Default
            };

            var _textName = new AdaptiveTextInput()
            {
                Id          = "UserName",
                Placeholder = "Apellido, Nombre"
            };

            var _textTitleEmail = new AdaptiveTextBlock()
            {
                Text   = "Dirección de correo",
                Size   = AdaptiveTextSize.Small,
                Color  = AdaptiveTextColor.Default,
                Weight = AdaptiveTextWeight.Default
            };

            var _textEmail = new AdaptiveTextInput()
            {
                Id          = "Email",
                Placeholder = "correo electronico"
            };

            var _texDatesSubtitle = new AdaptiveTextBlock()
            {
                Text   = "Fechas",
                Size   = AdaptiveTextSize.Medium,
                Color  = AdaptiveTextColor.Default,
                Weight = AdaptiveTextWeight.Bolder,
                HorizontalAlignment = AdaptiveHorizontalAlignment.Left
            };

            var _textTitleDeparture = new AdaptiveTextBlock()
            {
                Text   = "Fecha de salida",
                Size   = AdaptiveTextSize.Small,
                Color  = AdaptiveTextColor.Default,
                Weight = AdaptiveTextWeight.Default
            };

            var _textDeparture = new AdaptiveDateInput()
            {
                Id = "Departure"
            };

            var _textTitleArrival = new AdaptiveTextBlock()
            {
                Text   = "Fecha de regreso",
                Size   = AdaptiveTextSize.Small,
                Color  = AdaptiveTextColor.Default,
                Weight = AdaptiveTextWeight.Default
            };

            var _textArrival = new AdaptiveDateInput()
            {
                Id = "Arrival"
            };

            var _texOptionsSubtitle = new AdaptiveTextBlock()
            {
                Text   = "Tipo de viaje",
                Size   = AdaptiveTextSize.Normal,
                Color  = AdaptiveTextColor.Default,
                Weight = AdaptiveTextWeight.Bolder,
                HorizontalAlignment = AdaptiveHorizontalAlignment.Left
            };

            var _textTrasportOpciones = new AdaptiveTextBlock()
            {
                Text   = "Tipo de transporte",
                Size   = AdaptiveTextSize.Medium,
                Color  = AdaptiveTextColor.Default,
                Weight = AdaptiveTextWeight.Default
            };
            //traport
            var _transportChoice = new AdaptiveChoiceSetInput();

            _transportChoice.Id    = "TransporChoice";
            _transportChoice.Value = "bus";
            _transportChoice.Style = AdaptiveChoiceInputStyle.Expanded;
            _transportChoice.Choices.Add(new AdaptiveChoice()
            {
                Title = "Omnibus",
                Value = "Omnibus"
            });
            _transportChoice.Choices.Add(new AdaptiveChoice()
            {
                Title = "Avion",
                Value = "Avion"
            });

            var _textClassOpciones = new AdaptiveTextBlock()
            {
                Text   = "Clase",
                Size   = AdaptiveTextSize.Medium,
                Color  = AdaptiveTextColor.Default,
                Weight = AdaptiveTextWeight.Default
            };
            //traport
            var _classChoice = new AdaptiveChoiceSetInput();

            _classChoice.Id    = "ClassChoice";
            _classChoice.Value = "Economica";
            _classChoice.Style = AdaptiveChoiceInputStyle.Expanded;
            _classChoice.Choices.Add(new AdaptiveChoice()
            {
                Title = "Economica",
                Value = "Economica"
            });
            _classChoice.Choices.Add(new AdaptiveChoice()
            {
                Title = "Primera",
                Value = "Primera"
            });

            var _textCashOpciones = new AdaptiveTextBlock()
            {
                Text   = "¿Forma de Pago?",
                Size   = AdaptiveTextSize.Medium,
                Color  = AdaptiveTextColor.Default,
                Weight = AdaptiveTextWeight.Default
            };
            //traport
            var _cashChoice = new AdaptiveChoiceSetInput();

            _cashChoice.Id    = "CashChoice";
            _cashChoice.Value = "Efectivo";
            _cashChoice.Choices.Add(new AdaptiveChoice()
            {
                Title = "Efectivo",
                Value = "Efectivo"
            });
            _cashChoice.Choices.Add(new AdaptiveChoice()
            {
                Title = "Tarjeta de Credito",
                Value = "Tarjeta de Credito"
            });

            var _checkConditions = new AdaptiveToggleInput()
            {
                Id    = "checkConditions",
                Value = "accept",
                Title = "Acepto los terminos y condiciones."
            };

            var _submitButton = new AdaptiveSubmitAction()
            {
                Title    = "Contratar",
                DataJson = JsonConvert.SerializeObject(new JsonDataAux()
                {
                    From   = TypeCards.FORM.ToString(),
                    Action = "MDZFORM"
                })
            };

            _card.Body.Add(_texDataSubtitle);
            _card.Body.Add(_textTitleName);
            _card.Body.Add(_textName);
            _card.Body.Add(_textTitleEmail);
            _card.Body.Add(_textEmail);
            _card.Body.Add(_texDatesSubtitle);
            _card.Body.Add(_textTitleDeparture);
            _card.Body.Add(_textDeparture);
            _card.Body.Add(_textTitleArrival);
            _card.Body.Add(_textArrival);

            _card.Body.Add(_texOptionsSubtitle);
            _card.Body.Add(_textTrasportOpciones);
            _card.Body.Add(_transportChoice);
            _card.Body.Add(_textClassOpciones);
            _card.Body.Add(_classChoice);
            _card.Body.Add(_textCashOpciones);
            _card.Body.Add(_cashChoice);

            _card.Body.Add(_checkConditions);

            _card.Actions.Add(_submitButton);

            return(_card);
        }
Exemplo n.º 22
0
        /// <summary>
        /// Get success card after meeting creation.
        /// </summary>
        /// <param name="meeting">Meeting model containig meeting details which needs to be display to user.</param>
        /// <param name="timeZone">User local time zone.</param>
        /// <returns>Adaptive card attachment indicating successful meeting creation.</returns>
        public static Attachment GetSuccessAttachment(MeetingViewModel meeting, string timeZone)
        {
            string greenBar         = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAABhCAIAAACRaPz+AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAOwgAADsIBFShKgAAAABl0RVh0U29mdHdhcmUAcGFpbnQubmV0IDQuMC4yMfEgaZUAAAAcSURBVDhPY5h4KBAZjfJH+aP8Uf4ofyTyDwUCAAZTG+Jp0gBvAAAAAElFTkSuQmCC";
            var    startUTCDateTime = DateTime.Parse(meeting.StartDateTime, null, DateTimeStyles.RoundtripKind);
            var    endUTCDateTime   = DateTime.Parse(meeting.EndDateTime, null, DateTimeStyles.RoundtripKind);
            var    dateString       = string.Format(CultureInfo.CurrentCulture, Strings.DateFormat, "{{DATE(" + startUTCDateTime.ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'Z'", CultureInfo.InvariantCulture) + ", SHORT)}}", "{{TIME(" + startUTCDateTime.ToString("yyyy-MM-dd'T'HH:mm:ss'Z'", CultureInfo.InvariantCulture) + ")}}", endUTCDateTime.Subtract(startUTCDateTime).TotalMinutes);

            var cancelMeetingAction = new AdaptiveSubmitAction
            {
                Title = Strings.CancelMeeting,
                Data  = new AdaptiveSubmitActionData
                {
                    Msteams = new CardAction
                    {
                        Type  = ActionTypes.MessageBack,
                        Text  = BotCommands.CancelMeeting,
                        Value = JsonConvert.SerializeObject(new MeetingViewModel
                        {
                            MeetingId     = meeting.MeetingId,
                            StartDateTime = meeting.StartDateTime,
                            EndDateTime   = meeting.EndDateTime,
                            Subject       = Strings.MeetingSubject,
                            RoomName      = meeting.RoomName,
                            BuildingName  = meeting.BuildingName,
                        }),
                    },
                },
            };

            var card = new AdaptiveCard("1.0")
            {
                Body = new List <AdaptiveElement>
                {
                    new AdaptiveColumnSet
                    {
                        Columns = new List <AdaptiveColumn>
                        {
                            new AdaptiveColumn {
                                Width = AdaptiveColumnWidth.Auto, Items = new List <AdaptiveElement> {
                                    new AdaptiveImage {
                                        Url = new Uri(greenBar), PixelWidth = 4
                                    }
                                }
                            },
                            new AdaptiveColumn
                            {
                                Width = AdaptiveColumnWidth.Stretch,
                                Items = new List <AdaptiveElement>
                                {
                                    new AdaptiveTextBlock {
                                        Text = Strings.MeetingBooked, Wrap = true, Size = AdaptiveTextSize.Large, Weight = AdaptiveTextWeight.Bolder
                                    },
                                    new AdaptiveTextBlock {
                                        Text = meeting.RoomName, Wrap = true, Spacing = AdaptiveSpacing.Small
                                    },
                                    new AdaptiveTextBlock {
                                        Text = meeting.BuildingName, Wrap = true, Spacing = AdaptiveSpacing.Small
                                    },
                                    new AdaptiveTextBlock {
                                        Text = dateString, Wrap = true, Spacing = AdaptiveSpacing.Small
                                    },
                                },
                            },
                        },
                    },
                },
                Actions = new List <AdaptiveAction>(),
            };

            if (meeting.IsFavourite)
            {
                card.Actions = new List <AdaptiveAction>
                {
                    cancelMeetingAction,
                    new AdaptiveOpenUrlAction {
                        Title = Strings.Share, Url = new Uri(meeting.WebLink)
                    },
                };
            }
            else
            {
                card.Actions = new List <AdaptiveAction>
                {
                    cancelMeetingAction,
                    new AdaptiveSubmitAction
                    {
                        Title = Strings.AddFavorite,
                        Data  = new AdaptiveSubmitActionData
                        {
                            Msteams = new CardAction
                            {
                                Type  = ActionTypes.MessageBack,
                                Text  = BotCommands.AddFavorite,
                                Value = JsonConvert.SerializeObject(new MeetingViewModel
                                {
                                    RoomEmail     = meeting.RoomEmail,
                                    BuildingName  = meeting.BuildingName,
                                    RoomName      = meeting.RoomName,
                                    BuildingEmail = meeting.BuildingEmail,
                                }),
                            },
                        },
                    },
                    new AdaptiveOpenUrlAction {
                        Title = Strings.Share, Url = new Uri(meeting.WebLink)
                    },
                };
            }

            var adaptiveCardAttachment = new Attachment()
            {
                ContentType = AdaptiveCard.ContentType,
                Content     = card,
            };

            return(adaptiveCardAttachment);
        }
        public AdaptiveCard GetAdaptiveCardForNewJobPosting(string description = null)
        {
            var locations      = _locationService.GetAllLocations().GetAwaiter().GetResult();
            var hiringManagers = _recruiterService.GetAllHiringManagers().GetAwaiter().GetResult();

            var command = new
            {
                commandId = AppCommands.OpenNewPosition
            };

            var wrapAction = new CardAction
            {
                Title = "Create posting",
                Value = command
            };

            var action = new AdaptiveSubmitAction
            {
                Data = command
            };

            action.RepresentAsBotBuilderAction(wrapAction);

            return(new AdaptiveCard
            {
                Version = "1.0",
                Body = new List <AdaptiveElement>
                {
                    new AdaptiveTextBlock("Enter in basic information about this posting")
                    {
                        IsSubtle = true,
                        Wrap = true,
                        Size = AdaptiveTextSize.Small
                    },
                    new AdaptiveTextBlock("Title")
                    {
                        Wrap = true
                    },
                    new AdaptiveTextInput
                    {
                        Id = "jobTitle",
                        Placeholder = "E.g. Senior PM"
                    },
                    new AdaptiveColumnSet
                    {
                        Columns = new List <AdaptiveColumn>
                        {
                            new AdaptiveColumn
                            {
                                Width = "stretch",
                                Items = new List <AdaptiveElement>
                                {
                                    new AdaptiveTextBlock("Level")
                                    {
                                        Wrap = true
                                    },
                                    new AdaptiveChoiceSetInput
                                    {
                                        Id = "jobLevel",
                                        Style = AdaptiveChoiceInputStyle.Compact,
                                        Choices = Enumerable.Range(7, 4).Select(x =>
                                        {
                                            var s = x.ToString();
                                            return new AdaptiveChoice
                                            {
                                                Title = s,
                                                Value = s
                                            };
                                        }).ToList(),
                                        Value = "7"
                                    }
                                }
                            },

                            new AdaptiveColumn
                            {
                                Width = "stretch",
                                Items = new List <AdaptiveElement>
                                {
                                    new AdaptiveTextBlock("Post by")
                                    {
                                        Wrap = true
                                    },
                                    new AdaptiveDateInput
                                    {
                                        Id = "jobPostingDate",
                                        Placeholder = "Posting date",
                                        Value = DateTime.Now.ToShortDateString()
                                    }
                                }
                            }
                        }
                    },
                    new AdaptiveColumnSet
                    {
                        Columns = new List <AdaptiveColumn>
                        {
                            new AdaptiveColumn
                            {
                                Items = new List <AdaptiveElement>
                                {
                                    new AdaptiveTextBlock("Location"),
                                    new AdaptiveChoiceSetInput
                                    {
                                        Id = "jobLocation",
                                        Style = AdaptiveChoiceInputStyle.Compact,
                                        Choices = locations.Select(x => new AdaptiveChoice
                                        {
                                            Value = x.LocationId.ToString(),
                                            Title = x.City
                                        }).ToList(),
                                        Value = Convert.ToString(locations[0].LocationId)
                                    }
                                }
                            },
                            new AdaptiveColumn
                            {
                                Items = new List <AdaptiveElement>
                                {
                                    new AdaptiveTextBlock("Hiring manager"),
                                    new AdaptiveChoiceSetInput
                                    {
                                        Id = "jobHiringManager",
                                        Style = AdaptiveChoiceInputStyle.Compact,
                                        Choices = hiringManagers.Select(x => new AdaptiveChoice
                                        {
                                            Value = x.RecruiterId.ToString(),
                                            Title = x.Name
                                        }).ToList(),
                                        Value = Convert.ToString(hiringManagers[0].RecruiterId)
                                    }
                                }
                            }
                        }
                    },
                    new AdaptiveTextBlock("Description"),
                    new AdaptiveTextInput
                    {
                        Id = "jobDescription",
                        IsMultiline = true,
                        Placeholder = "E.g. Senior Product Manager in charge of driving complicated work and stuff.",
                        Value = description
                    }
                },
                Actions = new List <AdaptiveAction>
                {
                    action
                }
            });
        }
        public AdaptiveCard GetAdaptiveCardForInterviewRequest(Candidate candidate, DateTime interviewDate)
        {
            var interviewers = _recruiterService.GetAllInterviewers().GetAwaiter().GetResult();

            var command = new
            {
                commandId   = AppCommands.ScheduleInterview,
                candidateId = candidate.CandidateId
            };

            var wrapAction = new CardAction
            {
                Title = "Schedule",
                Value = command
            };

            var action = new AdaptiveSubmitAction
            {
                Data = command
            };

            action.RepresentAsBotBuilderAction(wrapAction);

            return(new AdaptiveCard
            {
                Version = "1.0",
                Body = new List <AdaptiveElement>
                {
                    new AdaptiveTextBlock
                    {
                        Text = $"Set interview date for {candidate.Name}",
                        Weight = AdaptiveTextWeight.Bolder,
                        Size = AdaptiveTextSize.Large
                    },
                    new AdaptiveColumnSet
                    {
                        Columns = new List <AdaptiveColumn>
                        {
                            new AdaptiveColumn
                            {
                                Width = AdaptiveColumnWidth.Auto,
                                Items = new List <AdaptiveElement>
                                {
                                    new AdaptiveImage
                                    {
                                        Url = new Uri(candidate.ProfilePicture),
                                        Size = AdaptiveImageSize.Medium,
                                        Style = AdaptiveImageStyle.Person
                                    }
                                }
                            },
                            new AdaptiveColumn
                            {
                                Width = AdaptiveColumnWidth.Stretch,
                                Items = new List <AdaptiveElement>
                                {
                                    new AdaptiveTextBlock
                                    {
                                        Text = $"Position: {candidate.Position.Title}",
                                        Wrap = true
                                    },
                                    new AdaptiveTextBlock
                                    {
                                        Text = $"Position ID: {candidate.Position.PositionExternalId}",
                                        Spacing = AdaptiveSpacing.None,
                                        Wrap = true,
                                        IsSubtle = true
                                    }
                                }
                            }
                        }
                    },
                    new AdaptiveChoiceSetInput
                    {
                        Id = "interviewerId",
                        Style = AdaptiveChoiceInputStyle.Compact,
                        Choices = interviewers.Select(x => new AdaptiveChoice
                        {
                            Value = x.RecruiterId.ToString(),
                            Title = x.Name
                        }).ToList(),
                        Value = Convert.ToString(interviewers[0].RecruiterId)
                    },
                    new AdaptiveDateInput
                    {
                        Id = "interviewDate", Placeholder = "Enter in a date for the interview", Value = interviewDate.ToShortDateString()
                    },
                    new AdaptiveChoiceSetInput
                    {
                        Id = "interviewType",
                        Style = AdaptiveChoiceInputStyle.Compact,
                        IsMultiSelect = false,
                        Choices = new List <AdaptiveChoice>
                        {
                            new AdaptiveChoice {
                                Title = "Phone screen", Value = "phoneScreen"
                            },
                            new AdaptiveChoice {
                                Title = "Full loop", Value = "fullLoop"
                            },
                            new AdaptiveChoice {
                                Title = "Follow-up", Value = "followUp"
                            }
                        },
                        Value = "phoneScreen"
                    },
                    new AdaptiveToggleInput {
                        Id = "isRemote", Title = "Remote interview"
                    }
                },
                Actions = new List <AdaptiveAction>
                {
                    action
                }
            });
        }
        /// <summary>
        /// Construct the subject selection card - select subject before asking question.
        /// </summary>
        /// <param name="subjects">the array of subjects.</param>
        /// <param name="currentSubject">current selected subject.</param>
        /// <param name="appBaseUri">The base URI where the app is hosted.</param>
        /// <returns>Response card.</returns>
        public static IEnumerable <Attachment> GetCards(Subject subjects, string currentSubject, string appBaseUri)
        {
            List <AdaptiveAction> projectActions = new List <AdaptiveAction>();

            if (subjects?.Project != null)
            {
                foreach (string subject in subjects.Project.Split(","))
                {
                    if (subject == currentSubject)
                    {
                        AdaptiveSubmitAction action = new AdaptiveSubmitAction();
                        action.Title = subject;
                        action.Data  = new SubjectSelectionCardPayload
                        {
                            MsTeams = new CardAction
                            {
                                Type        = ActionTypes.MessageBack,
                                DisplayText = subject,
                                Text        = subject,
                                Image       = appBaseUri + "/content/Star.png",
                            },
                            Subject = subject.Trim(),
                        };
                        action.AdditionalProperties.Add("iconUrl", appBaseUri + "/content/Star.png");
                        projectActions.Add(action);
                    }
                    else
                    {
                        projectActions.Add(
                            new AdaptiveSubmitAction
                        {
                            Title = subject,
                            Data  = new SubjectSelectionCardPayload
                            {
                                MsTeams = new CardAction
                                {
                                    Type        = ActionTypes.MessageBack,
                                    DisplayText = subject,
                                    Text        = subject,
                                },
                                Subject = subject.Trim(),
                            },
                        });
                    }
                }
            }

            AdaptiveCard projectCard = new AdaptiveCard(new AdaptiveSchemaVersion(1, 0))
            {
                Body = new List <AdaptiveElement>
                {
                    new AdaptiveTextBlock
                    {
                        Weight = AdaptiveTextWeight.Bolder,
                        Text   = Strings.SubjectSelectionGreetingText,
                        Wrap   = true,
                    },
                    new AdaptiveTextBlock
                    {
                        Text = Strings.SubjectSelectionHeaderText,
                        Wrap = true,
                    },
                    new AdaptiveImage
                    {
                        Type = "Image",

                        Url  = new Uri(appBaseUri + "/content/Project_V1.png"),
                        Size = AdaptiveImageSize.Stretch,
                    },
                },
                Actions = projectActions,
            };

            List <AdaptiveAction> otherActions = new List <AdaptiveAction>();

            if (subjects?.Other != null)
            {
                foreach (string subject in subjects.Other.Split(","))
                {
                    if (subject == currentSubject)
                    {
                        AdaptiveSubmitAction action = new AdaptiveSubmitAction();
                        action.Title = subject;
                        action.Data  = new SubjectSelectionCardPayload
                        {
                            MsTeams = new CardAction
                            {
                                Type        = ActionTypes.MessageBack,
                                DisplayText = subject,
                                Text        = subject,
                                Image       = appBaseUri + "/content/Star.png",
                            },
                            Subject = subject.Trim(),
                        };
                        action.AdditionalProperties.Add("iconUrl", appBaseUri + "/content/Star.png");
                        otherActions.Add(action);
                    }
                    else
                    {
                        otherActions.Add(
                            new AdaptiveSubmitAction
                        {
                            Title = subject,
                            Data  = new SubjectSelectionCardPayload
                            {
                                MsTeams = new CardAction
                                {
                                    Type        = ActionTypes.MessageBack,
                                    DisplayText = subject,
                                    Text        = subject,
                                },
                                Subject = subject.Trim(),
                            },
                        });
                    }
                }
            }

            AdaptiveCard otherCard = new AdaptiveCard(new AdaptiveSchemaVersion(1, 0))
            {
                Body = new List <AdaptiveElement>
                {
                    new AdaptiveImage
                    {
                        Type = "Image",

                        Url  = new Uri(appBaseUri + "/content/Subject_V4.png"),
                        Size = AdaptiveImageSize.Stretch,
                    },
                },
                Actions = otherActions,
            };

            List <Attachment> attachments = new List <Attachment>();

            attachments.Add(new Attachment()
            {
                ContentType = AdaptiveCard.ContentType,
                Content     = projectCard,
            });
            attachments.Add(new Attachment()
            {
                ContentType = AdaptiveCard.ContentType,
                Content     = otherCard,
            });
            return(attachments);
        }