/// <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); }
/// <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); }
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(); }
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); }
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); }
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 } }); }
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); }
/// <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)"); }
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); }
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); }
public virtual void Visit(AdaptiveSubmitAction action) { }
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); }
/// <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); }
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); }
/// <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); }