/// <summary> /// 為AdaptiveCard新增AdaptiveContainer /// </summary> /// <param name="card">要被加入元素的AdaptiveCard</param> /// <param name="container">即將加入的AdaptiveContainer</param> /// <returns>原先的AdaptiveCard</returns> public static AdaptiveCard AddContainer(this AdaptiveCard card, AdaptiveContainer container) { card.Body.Add(container); return(card); }
public static FrameworkElement Render(AdaptiveContainer container, AdaptiveRenderContext context) { var uiContainer = new Grid(); uiContainer.Style = context.GetStyle("Adaptive.Container"); uiContainer.SetBackgroundSource(container.BackgroundImage, context); // Keep track of ContainerStyle.ForegroundColors before Container is rendered var parentRenderArgs = context.RenderArgs; // This is the renderArgs that will be passed down to the children var childRenderArgs = new AdaptiveRenderArgs(parentRenderArgs); Grid uiOuterContainer = new Grid(); uiOuterContainer.Children.Add(uiContainer); Border border = new Border(); border.Child = uiOuterContainer; RendererUtil.ApplyVerticalContentAlignment(uiContainer, container); RendererUtil.ApplyIsVisible(border, container); uiContainer.MinHeight = container.PixelMinHeight; bool inheritsStyleFromParent = !container.Style.HasValue; bool hasPadding = false; if (!inheritsStyleFromParent) { hasPadding = ApplyPadding(border, uiOuterContainer, container, parentRenderArgs, context); // Apply background color ContainerStyleConfig containerStyle = context.Config.ContainerStyles.GetContainerStyleConfig(container.Style); border.Background = context.GetColorBrush(containerStyle.BackgroundColor); childRenderArgs.ForegroundColors = containerStyle.ForegroundColors; } switch (container.VerticalContentAlignment) { case AdaptiveVerticalContentAlignment.Center: uiContainer.VerticalAlignment = VerticalAlignment.Center; break; case AdaptiveVerticalContentAlignment.Bottom: uiContainer.VerticalAlignment = VerticalAlignment.Bottom; break; case AdaptiveVerticalContentAlignment.Top: default: break; } if (hasPadding) { childRenderArgs.BleedDirection = BleedDirection.Both; } // Modify context outer parent style so padding necessity can be determined childRenderArgs.ParentStyle = (inheritsStyleFromParent) ? parentRenderArgs.ParentStyle : container.Style.Value; childRenderArgs.HasParentWithPadding = (hasPadding || parentRenderArgs.HasParentWithPadding); context.RenderArgs = childRenderArgs; AddContainerElements(uiContainer, container.Items, context); // Revert context's value to that of outside the Container context.RenderArgs = parentRenderArgs; return(RendererUtil.ApplySelectAction(border, container, context)); }
private async Task Interviewcard(ITurnContext turnContext, CancellationToken cancellationToken) { var summaries = await this.jobApplicationManager.GetUpcomingInterviews(this.userOID, DateTime.Now); string[] staticdata = { "Interview Schedule", "Hello " + turnContext.Activity.From.Name, "Here are some Interview Schedule for next 7 days" }; var attachments = new List <Attachment>(); IMessageActivity replyincarousel; summaries?.ToList()?.ForEach(summary => { var Interviewcard = new AdaptiveCard("1.2"); for (int i = 0; i < 3; i++) { Interviewcard.Body.Add(new AdaptiveTextBlock() { Text = staticdata[i], Weight = AdaptiveTextWeight.Bolder, Size = AdaptiveTextSize.Medium, }); } //Static Container var Staticcontainer = new AdaptiveContainer(); Staticcontainer.Items = new List <AdaptiveElement>() { new AdaptiveTextBlock() { Text = summary.PositionTitle, Size = AdaptiveTextSize.Large, Weight = AdaptiveTextWeight.Bolder, Color = AdaptiveTextColor.Accent, }, new AdaptiveColumnSet() { Columns = new List <AdaptiveColumn>() { new AdaptiveColumn() { Items = new List <AdaptiveElement>() { new AdaptiveTextBlock() { Text = "Full Name", } } }, new AdaptiveColumn() { Items = new List <AdaptiveElement>() { new AdaptiveTextBlock() { Text = "Date", } } }, new AdaptiveColumn() { Items = new List <AdaptiveElement>() { new AdaptiveTextBlock() { Text = "Time", } } } } } }; Interviewcard.Body.Add(Staticcontainer); //Static Container summary.ScheduleSummaries?.ToList()?.ForEach(scheduleData => { var Dynamiccontainer = new AdaptiveContainer(); Dynamiccontainer.Items = new List <AdaptiveElement>() { new AdaptiveColumnSet() { Columns = new List <AdaptiveColumn>() { new AdaptiveColumn() { Items = new List <AdaptiveElement>() { new AdaptiveTextBlock() { Text = scheduleData.CandidateName, } } }, new AdaptiveColumn() { Items = new List <AdaptiveElement>() { new AdaptiveTextBlock() { Text = scheduleData.ScheduleStartDateTime?.ToString("MM/dd/yyyy"), } } }, new AdaptiveColumn() { Items = new List <AdaptiveElement>() { new AdaptiveTextBlock() { Text = scheduleData.ScheduleStartDateTime?.ToString("h:mm tt"), } } } } } }; Interviewcard.Body.Add(Dynamiccontainer); }); attachments.Add(convertAdaptivetoAttacment(Interviewcard)); }); replyincarousel = MessageFactory.Carousel(attachments); await turnContext.SendActivityAsync(replyincarousel, cancellationToken); }
/// <summary> /// This method builds the body of the response card, and helps to render the follow up prompts if the response contains any. /// </summary> /// <param name="questionsList">Question list to build the card.</param> /// <param name="appBaseUri">The base URI where the app is hosted.</param> /// <returns>A list of adaptive elements which makes up the body of the adaptive card.</returns> private static List <AdaptiveElement> BuildRecommendCardBody(List <string> questionsList, string appBaseUri) { var cardBodyToConstruct = new List <AdaptiveElement>() { new AdaptiveTextBlock { Text = Strings.RecommendMessage, Wrap = true, Spacing = AdaptiveSpacing.Medium, }, }; // If there follow up prompts, then the follow up prompts will render accordingly. if (questionsList.Count > 0) { foreach (var item in questionsList) { var container = new AdaptiveContainer { Items = new List <AdaptiveElement>() { new AdaptiveColumnSet { Columns = new List <AdaptiveColumn>() { new AdaptiveColumn { Width = AdaptiveColumnWidth.Stretch, VerticalContentAlignment = AdaptiveVerticalContentAlignment.Center, Items = new List <AdaptiveElement>() { new AdaptiveTextBlock { Wrap = true, Text = string.Format(Strings.SelectActionItemDisplayTextFormatting, item), HorizontalAlignment = AdaptiveHorizontalAlignment.Center, }, }, Spacing = AdaptiveSpacing.Padding, BackgroundImage = new AdaptiveBackgroundImage { Url = new Uri(appBaseUri + "/content/Followupicon3.3.png"), HorizontalAlignment = AdaptiveHorizontalAlignment.Left, VerticalAlignment = AdaptiveVerticalAlignment.Center, }, }, }, }, }, SelectAction = new AdaptiveSubmitAction { Title = item, Data = new RecommendCardPayload { MsTeams = new CardAction { Type = ActionTypes.MessageBack, DisplayText = item, Text = item, }, Question = item, }, }, Separator = true, }; cardBodyToConstruct.Add(container); } } cardBodyToConstruct.Add(new AdaptiveColumnSet { Separator = true, Columns = new List <AdaptiveColumn> { new AdaptiveColumn { Items = new List <AdaptiveElement> { new AdaptiveTextBlock { Weight = AdaptiveTextWeight.Lighter, Text = Strings.ResponseFooterText, Wrap = true, }, }, }, }, }); return(cardBodyToConstruct); }
/// <summary> /// Creates the stock adaptive card. /// </summary> /// <param name="facts">The facts.</param> /// <returns></returns> private Attachment CreateStockAdaptiveCard(List <AdaptiveColumn> facts, FindStockDetails stockDetails) { var card = new AdaptiveCard("1.0"); string FactHeader = ""; string SearchValue = $"Garment = {stockDetails.Garment}{Environment.NewLine}"; if (!string.IsNullOrWhiteSpace(stockDetails.Brand)) { SearchValue = $"{SearchValue}Brand = {stockDetails.Brand}{Environment.NewLine}"; } else { FactHeader = $"**Brand** "; } if (!string.IsNullOrWhiteSpace(stockDetails.Style)) { SearchValue = $"{SearchValue}Style = {stockDetails.Style}{Environment.NewLine}"; } else { FactHeader = $"{FactHeader} **Style** "; } if (!string.IsNullOrWhiteSpace(stockDetails.Color)) { SearchValue = $"{SearchValue}Color = {stockDetails.Color}{Environment.NewLine}"; } else { FactHeader = $"{FactHeader} **Color** "; } if (!string.IsNullOrWhiteSpace(stockDetails.Size)) { SearchValue = $"{SearchValue}Size = {stockDetails.Size}{Environment.NewLine}"; } else { FactHeader = $"{FactHeader} **Size** "; } List <AdaptiveElement> adaptiveElements = new List <AdaptiveElement>() { new AdaptiveColumnSet { Columns = new List <AdaptiveColumn>() { new AdaptiveColumn { Items = new List <AdaptiveElement> { new AdaptiveImage { Url = new Uri("https://github.com/enablers104/chatbot/blob/master/Images/Logo.png?raw=true"), Size = AdaptiveImageSize.Small }, new AdaptiveTextBlock { Text = "Inventory search", Spacing = AdaptiveSpacing.Medium, Size = AdaptiveTextSize.Default, Weight = AdaptiveTextWeight.Bolder, Wrap = true, MaxLines = 0 }, new AdaptiveTextBlock { Text = "Based on:" + Environment.NewLine + SearchValue + "We have the following in stock:", Size = AdaptiveTextSize.Default, IsSubtle = true, Wrap = true, MaxLines = 0 }, new AdaptiveColumnSet { Columns = facts, Bleed = true, } }, Separator = true } } } }; AdaptiveContainer container = new AdaptiveContainer { Items = adaptiveElements }; card.Body.Add(container); var attachment = new Attachment() { ContentType = AdaptiveCard.ContentType, Content = card }; return(attachment); }
protected Attachment ToAdaptiveCardForPreviousPage( List <TaskItem> todos, int toBeReadTasksCount) { var toDoCard = new AdaptiveCard(); var speakText = Format(ShowToDoResponses.ShowPreviousToDoTasks.Reply.Speak, new StringDictionary() { }) + Format(ShowToDoResponses.FirstToDoTasks.Reply.Speak, new StringDictionary() { { "taskCount", toBeReadTasksCount.ToString() } }); toDoCard.Speak = speakText; var body = new List <AdaptiveElement>(); var showText = Format(ShowToDoResponses.ShowPreviousToDoTasks.Reply.Text, new StringDictionary() { }); var textBlock = new AdaptiveTextBlock { Text = showText, }; body.Add(textBlock); var container = new AdaptiveContainer(); var index = 0; foreach (var todo in todos) { var columnSet = new AdaptiveColumnSet(); var icon = new AdaptiveImage(); icon.UrlString = todo.IsCompleted ? IconImageSource.CheckIconSource : IconImageSource.UncheckIconSource; var iconColumn = new AdaptiveColumn(); iconColumn.Width = "auto"; iconColumn.Items.Add(icon); columnSet.Columns.Add(iconColumn); var content = new AdaptiveTextBlock(todo.Topic); var contentColumn = new AdaptiveColumn(); iconColumn.Width = "auto"; contentColumn.Items.Add(content); columnSet.Columns.Add(contentColumn); container.Items.Add(columnSet); if (index < toBeReadTasksCount) { toDoCard.Speak += (++index) + " " + todo.Topic + " "; } } body.Add(container); toDoCard.Body = body; var attachment = new Attachment() { ContentType = AdaptiveCard.ContentType, Content = toDoCard, }; return(attachment); }
public static Attachment Create(string countryCode) { var adaptiveCard = new AdaptiveCard(new AdaptiveSchemaVersion(1, 0)); var container = new AdaptiveContainer(); container.Items.Add(new AdaptiveTextBlock { Text = "Please select your time zone", HorizontalAlignment = AdaptiveHorizontalAlignment.Center, Weight = AdaptiveTextWeight.Bolder, Size = AdaptiveTextSize.Large, }); var choices = new List <AdaptiveChoice>(); var timezones = TZNames.GetTimeZonesForCountry(countryCode, "en-us"); var defaultChoice = new AdaptiveChoice { Title = "Universal Co-ordinated Time", Value = "Etc/GMT", }; if (timezones.Any()) { foreach (var timezone in timezones) { var choice = new AdaptiveChoice { Title = timezone.Value, Value = timezone.Key, }; choices.Add(choice); } } else { choices.Add(defaultChoice); } container.Items.Add(new AdaptiveChoiceSetInput { Id = "tz", Style = AdaptiveChoiceInputStyle.Compact, Choices = choices, Value = choices.First().Value, }); adaptiveCard.Body.Add(container); adaptiveCard.Actions.Add(new AdaptiveSubmitAction { Id = "tz-submit", Title = "Submit", Type = "Action.Submit", }); var attachment = new Attachment { Content = adaptiveCard, ContentType = "application/vnd.microsoft.card.adaptive", }; return(attachment); }
private static void AddCurrentWeather(AirQuality model, AdaptiveCard card) { var headerContainer = new AdaptiveContainer(); var header = new AdaptiveColumnSet(); card.Body.Add(headerContainer); var headerColumn = new AdaptiveColumn(); var textHeader = new AdaptiveTextBlock(); textHeader.Size = AdaptiveTextSize.Medium; textHeader.Weight = AdaptiveTextWeight.Bolder; textHeader.Text = "AQMD Air Quality"; headerColumn.Width = AdaptiveColumnWidth.Stretch; headerColumn.Items.Add(textHeader); header.Columns.Add(headerColumn); headerContainer.Bleed = true; headerContainer.Style = AdaptiveContainerStyle.Default; headerContainer.Items.Add(header); var bodyContainer = new AdaptiveContainer(); var data = new AdaptiveFactSet(); data.Spacing = AdaptiveSpacing.ExtraLarge; data.Facts.Add(new AdaptiveFact() { Title = "Area Number", Value = model.AreaNumber.ToString() }); data.Facts.Add(new AdaptiveFact() { Title = "Area Name", Value = model.AreaName.ToString() }); data.Facts.Add(new AdaptiveFact() { Title = "AQI Value", Value = model.AQI.ToString() }); data.Facts.Add(new AdaptiveFact() { Title = "Reading Date", Value = model.ForecastDateTime.ToString() }); data.Facts.Add(new AdaptiveFact() { Title = "AQI Category", Value = model.AQICategory.ToString() }); data.Facts.Add(new AdaptiveFact() { Title = "Pollutants", Value = model.Pollutant.ToString() }); bodyContainer.Items.Add(data); card.Body.Add(bodyContainer); var detailContainer = new AdaptiveContainer(); detailContainer.Id = "details1"; var info = new AdaptiveFactSet(); info.Spacing = AdaptiveSpacing.ExtraLarge; info.Facts.Add(new AdaptiveFact() { Title = "Ozone", Value = model.Ozone.ToString() }); info.Facts.Add(new AdaptiveFact() { Title = "PM 10", Value = model.PMTen.ToString() }); info.Facts.Add(new AdaptiveFact() { Title = "PM 2.5", Value = model.PMTwoFive.ToString() }); detailContainer.Items.Add(info); card.Body.Add(detailContainer); // body.Facts.Add(new AdaptiveFact() { Title = "Area Name", Value = model.AreaNumber.ToString() }); //card.Actions.Add(new AdaptiveToggleVisibilityAction { Title = "Show Detail", TargetElements = new List<AdaptiveTargetElement> { "details1" } }); //var showdetailContainer = new AdaptiveContainer(); //var showDetailColumnSet = new AdaptiveColumnSet(); //card.Body.Add(showdetailContainer); //var showDetailColumn = new AdaptiveColumn(); //showDetailColumn.Id = "chevronDown4"; //showDetailColumn.SelectAction.Type = "Action.ToggleVisibility"; //showDetailColumn.SelectAction.Title = "show detail"; //showDetailColumn.SelectAction. = "show detail"; //var textHeader = new AdaptiveTextBlock(); //textHeader.Size = AdaptiveTextSize.Medium; //textHeader.Weight = AdaptiveTextWeight.Bolder; //textHeader.Text = "AQMD Air Quality"; //headerColumn.Width = AdaptiveColumnWidth.Stretch; //headerColumn.Items.Add(textHeader); //header.Columns.Add(headerColumn); //headerContainer.Bleed = true; //headerContainer.Style = AdaptiveContainerStyle.Default; //headerContainer.Items.Add(header); //card.Body.Add(headerContainer); //var headerColumn = new AdaptiveColumn(); //var textHeader = new AdaptiveTextBlock(); //textHeader.Size = AdaptiveTextSize.Medium; //textHeader.Weight = AdaptiveTextWeight.Bolder; //textHeader.Text = "AQMD Air Quality"; //headerColumn.Width = AdaptiveColumnWidth.Auto; //headerColumn.Items.Add(textHeader); //header.Columns.Add(headerColumn); //headerContainer.Items.Add(header); //var currentContainer = new AdaptiveContainer(); //currentContainer.Style = AdaptiveContainerStyle.Emphasis; //var current = new AdaptiveColumnSet(); //card.Body.Add(currentContainer); //var currentColumn2 = new Column(); //current.Columns.Add(currentColumn2); //currentColumn2.Size = "65"; //string date = DateTime.Parse(model.current.last_updated).DayOfWeek.ToString(); //AddTextBlock(currentColumn2, $"{model.location.name} ({date})", TextSize.Large, false); //AddTextBlock(currentColumn2, $"{model.current.temp_f.ToString().Split('.')[0]}° F", TextSize.Large); //AddTextBlock(currentColumn2, $"{model.current.condition.text}", TextSize.Medium); //AddTextBlock(currentColumn2, $"Winds {model.current.wind_mph} mph {model.current.wind_dir}", TextSize.Medium); }
private AdaptiveCard SetCard() { AdaptiveCard _card = new AdaptiveCard("1.0"); var _container = new AdaptiveContainer(); _container.Items.Add(new AdaptiveImage() { Url = new Uri("http://localhost:3978/img/bot-avatar_.png"), Size = AdaptiveImageSize.Stretch, Style = AdaptiveImageStyle.Person, PixelHeight = 200, PixelWidth = 200, HorizontalAlignment = AdaptiveHorizontalAlignment.Center, AltText = "Botty" }); _container.Items.Add(new AdaptiveTextBlock() { Text = this.BotName, Size = AdaptiveTextSize.Large, Weight = AdaptiveTextWeight.Bolder, Color = AdaptiveTextColor.Default, Wrap = true, Spacing = AdaptiveSpacing.Default, HorizontalAlignment = AdaptiveHorizontalAlignment.Center }); _container.Items.Add(new AdaptiveTextBlock() { Text = this.Title, Size = AdaptiveTextSize.ExtraLarge, Weight = AdaptiveTextWeight.Bolder, Color = AdaptiveTextColor.Default, Wrap = true, Spacing = AdaptiveSpacing.Default }); _container.Items.Add(new AdaptiveTextBlock() { Text = DateTime.Now.ToString(), Size = AdaptiveTextSize.Small, Color = AdaptiveTextColor.Default, Wrap = true, Spacing = AdaptiveSpacing.Default, }); _container.Items.Add(new AdaptiveTextBlock() { Text = this.Description, Size = AdaptiveTextSize.Normal, Weight = AdaptiveTextWeight.Normal, Color = AdaptiveTextColor.Default, Wrap = true, Spacing = AdaptiveSpacing.Default }); //GenerateActionFromOptions(this.Order); _card.Body.Add(_container); _card.Actions.AddRange(this.GetAdaptiveActions()); return(_card); }
private AdaptiveCard SetCard() { AdaptiveCard _card = new AdaptiveCard("1.1"); 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); var video = this.Actions.Where(p => p.TypeCard == TypeCards.VIDEO).SingleOrDefault(); if (video != null) { var _video = new AdaptiveMedia(); _video.Sources.Add(new AdaptiveMediaSource() { MimeType = "video/mp4", Url = video.Result }); _card.Body.Add(_video); } _card.Actions.AddRange(this.GetAdaptiveActions()); return(_card); }
// Create AdaptiveCard from ReceiptCard public static AdaptiveCard CreateReceiptCard(ReceiptCard card, string totalTitle = "Total", string vatTitle = "VAT", string taxTitle = "Tax", string version = "1.0") { var adaptiveCard = new AdaptiveCard(); var body = new AdaptiveContainer() { Items = new List <AdaptiveElement>() }; // Add Title body.Items.AddRange(AdaptiveElementBuilder.CreateTitle(card.Title)); // Add Receipt Fact if (card.Facts != null && card.Facts.Count != 0) { body.Items.AddRange(CreateReceiptFactSet(card.Facts)); } // Add Separator body.Items.Add(CreateReceiptSeparator()); // Add Receipt Item if (card.Items != null && card.Items.Count != 0) { body.Items.AddRange(CreateReceiptItems(card.Items.ToList())); } // Add Separator body.Items.Add(CreateReceiptSeparator()); // Add VAT if (!string.IsNullOrEmpty(card.Vat)) { body.Items.Add(CreateReceiptOtherInfo(vatTitle, card.Vat, "Vat")); } // Add Tax if (!string.IsNullOrEmpty(card.Tax)) { body.Items.Add(CreateReceiptOtherInfo(taxTitle, card.Tax, "Tax")); } // Add Total if (!string.IsNullOrEmpty(card.Total)) { body.Items.Add(CreateReceiptTotalInfo(totalTitle, card.Total)); } // Set Tap Action if (card.Tap != null) { body.SelectAction = AdaptiveElementBuilder.CreateAction(card.Tap); } // Set Body and Actions adaptiveCard.Body = new List <AdaptiveElement>() { body }; adaptiveCard.Actions = AdaptiveElementBuilder.CreateActions(card.Buttons); adaptiveCard.Version = version; return(adaptiveCard); }
public static HtmlTag CallContainerRender(AdaptiveContainer element, AdaptiveRenderContext context) { return(ContainerRender(element, context)); }
/// <summary> /// Get container for team ideas. /// </summary> /// <param name="teamIdea">Team post entity object.</param> /// <returns>Return a container for team ideas.</returns> private AdaptiveContainer GetPostTypeContainer(IdeaEntity teamIdea) { string applicationBasePath = this.options.Value.AppBaseUri; var postTypeContainer = new AdaptiveContainer { Items = new List <AdaptiveElement> { new AdaptiveColumnSet { Columns = new List <AdaptiveColumn> { new AdaptiveColumn { Width = AdaptiveColumnWidth.Auto, VerticalContentAlignment = AdaptiveVerticalContentAlignment.Center, Items = new List <AdaptiveElement> { new AdaptiveTextBlock { Text = $"**{this.localizer.GetString("IdeatorLabelText")}:**", Wrap = true, }, }, Spacing = AdaptiveSpacing.Small, }, new AdaptiveColumn { Width = AdaptiveColumnWidth.Auto, Items = new List <AdaptiveElement> { new AdaptiveImage { Url = new Uri($"{applicationBasePath}/Artifacts/peopleAvatar.png"), Size = AdaptiveImageSize.Auto, Style = AdaptiveImageStyle.Person, AltText = "User Image", }, }, Spacing = AdaptiveSpacing.Small, }, new AdaptiveColumn { Width = AdaptiveColumnWidth.Stretch, VerticalContentAlignment = AdaptiveVerticalContentAlignment.Center, Items = new List <AdaptiveElement> { new AdaptiveTextBlock { Text = teamIdea.CreatedByName.Length > AdaptiveCardUserNameMaxCharacterLength ? $"{teamIdea.CreatedByName.Substring(0, AdaptiveCardUserNameMaxCharacterLength - 1)} ..." : teamIdea.CreatedByName, Wrap = true, }, }, Spacing = AdaptiveSpacing.Small, }, new AdaptiveColumn { Width = AdaptiveColumnWidth.Auto, VerticalContentAlignment = AdaptiveVerticalContentAlignment.Center, Items = new List <AdaptiveElement> { new AdaptiveTextBlock { Text = $"{teamIdea.TotalVotes} ", Wrap = true, }, }, Spacing = AdaptiveSpacing.Small, }, new AdaptiveColumn { Width = AdaptiveColumnWidth.Auto, VerticalContentAlignment = AdaptiveVerticalContentAlignment.Center, Items = new List <AdaptiveElement> { new AdaptiveImage { Url = new Uri($"{applicationBasePath}/Artifacts/voteIcon.png"), PixelWidth = VoteIconWidth, PixelHeight = VoteIconHeight, Style = AdaptiveImageStyle.Default, }, }, Spacing = AdaptiveSpacing.Small, }, }, }, }, }; return(postTypeContainer); }
/// <summary> /// 為AdaptiveCard新增AdaptiveColumnSet /// </summary> /// <param name="container">要被加入元素的AdaptiveContainer</param> /// <param name="row">即將加入的AdaptiveColumnSet</param> /// <returns>原先的AdaptiveContainer</returns> public static AdaptiveContainer AddRow(this AdaptiveContainer container, AdaptiveColumnSet row) { container.Items.Add(row); return(container); }
private IMessageActivity CreateAdaptiveCard(IDialogContext context, Response viewBalanceResponse, string personalHours, string vacationHours, string sickHours) { var message = context.MakeMessage(); AdaptiveCard card = new AdaptiveCard("1.0"); var container = new AdaptiveContainer(); var items = new List <AdaptiveElement>(); var title = new AdaptiveTextBlock { Size = AdaptiveTextSize.Medium, Weight = AdaptiveTextWeight.Bolder, Text = KronosResourceText.VacationBalanceCardTitleText, }; var subTitle = new AdaptiveTextBlock { Text = $"{KronosResourceText.VacationBalanceCardSubtitleText} {context.Activity.LocalTimestamp.Value.DateTime.ToString("MMM d, yyyy", CultureInfo.InvariantCulture)}", Wrap = true, }; var balanceColumnSet = new AdaptiveColumnSet { Columns = new List <AdaptiveColumn> { new AdaptiveColumn { Items = new List <AdaptiveElement> { new AdaptiveTextBlock { HorizontalAlignment = AdaptiveHorizontalAlignment.Right, Text = KronosResourceText.VacationBalanceCardAvailableText, IsSubtle = true, }, }, Width = "stretch", }, }, }; items.Add(title); items.Add(subTitle); items.Add(balanceColumnSet); container.Items = items; var personalColumnSet = new AdaptiveColumnSet { Separator = true, Columns = new List <AdaptiveColumn> { new AdaptiveColumn { Items = new List <AdaptiveElement> { new AdaptiveTextBlock { Text = KronosResourceText.VacationBalanceCardPersonalLabel, }, }, Width = "stretch", }, new AdaptiveColumn { Items = new List <AdaptiveElement> { new AdaptiveTextBlock { HorizontalAlignment = AdaptiveHorizontalAlignment.Right, Text = personalHours, }, }, Width = "stretch", }, }, }; var vacationColumnSet = new AdaptiveColumnSet { Separator = true, Columns = new List <AdaptiveColumn> { new AdaptiveColumn { Items = new List <AdaptiveElement> { new AdaptiveTextBlock { Text = KronosResourceText.VacationBalanceCodeVacation, }, }, Width = "stretch", }, new AdaptiveColumn { Items = new List <AdaptiveElement> { new AdaptiveTextBlock { HorizontalAlignment = AdaptiveHorizontalAlignment.Right, Text = vacationHours, }, }, Width = "stretch", }, }, }; var sickColumnSet = new AdaptiveColumnSet { Separator = true, Columns = new List <AdaptiveColumn> { new AdaptiveColumn { Items = new List <AdaptiveElement> { new AdaptiveTextBlock { Text = KronosResourceText.VacationBalanceCardSCKLabel, }, }, Width = "stretch", }, new AdaptiveColumn { Items = new List <AdaptiveElement> { new AdaptiveTextBlock { HorizontalAlignment = AdaptiveHorizontalAlignment.Right, Text = sickHours, }, }, Width = "stretch", }, }, }; card.Body.Add(container); card.Body.Add(personalColumnSet); card.Body.Add(vacationColumnSet); card.Body.Add(sickColumnSet); if (!string.IsNullOrEmpty(personalHours)) { card.Actions.Add( new AdaptiveShowCardAction() { Title = KronosResourceText.VacationBalanceCardPersonalLabel, Card = this.ShowDetailsCard(context, viewBalanceResponse, "Personal"), }); } if (!string.IsNullOrEmpty(vacationHours)) { card.Actions.Add( new AdaptiveShowCardAction() { Title = KronosResourceText.VacationBalanceCodeVacation, Card = this.ShowDetailsCard(context, viewBalanceResponse, "Vacation"), }); } if (!string.IsNullOrEmpty(sickHours)) { card.Actions.Add( new AdaptiveShowCardAction() { Title = KronosResourceText.VacationBalanceCardSCKLabel, Card = this.ShowDetailsCard(context, viewBalanceResponse, "Sick"), }); } if (message.Attachments == null) { message.Attachments = new List <Attachment>(); } message.Attachments.Add(new Attachment() { Content = card, ContentType = "application/vnd.microsoft.card.adaptive", Name = "Show Vacation Balance", }); return(message); }
public async Task <string> GetGenerated() { var card = new AdaptiveCard("1.1"); var container = new AdaptiveContainer(); var colSet = new AdaptiveColumnSet(); var column = new AdaptiveColumn(); var image = new AdaptiveImage() { Style = AdaptiveImageStyle.Person, Url = new Uri("https://www.google.de") }; column.Items.Add(image); column = new AdaptiveColumn(); var textBlock = new AdaptiveTextBlock("Updated his Status") { Weight = AdaptiveTextWeight.Bolder, Wrap = true }; column.Items.Add(image); colSet.Columns.Add(column); column = new AdaptiveColumn(); textBlock = new AdaptiveTextBlock("Updated his Status") { Spacing = AdaptiveSpacing.None, Weight = AdaptiveTextWeight.Bolder, Wrap = true }; column.Items.Add(image); column.Items.Add(textBlock); colSet.Columns.Add(column); container.Items.Add(colSet); card.Body.Add(colSet); container = new AdaptiveContainer(); colSet = new AdaptiveColumnSet(); column = new AdaptiveColumn(); image = new AdaptiveImage() { HorizontalAlignment = AdaptiveHorizontalAlignment.Right, Url = new Uri("https://www.google.de"), }; column.Items.Add(image); column = new AdaptiveColumn(); textBlock = new AdaptiveTextBlock("Status Message") { Weight = AdaptiveTextWeight.Bolder, Wrap = true }; column.Items.Add(image); column.Items.Add(textBlock); colSet.Columns.Add(column); column = new AdaptiveColumn(); textBlock = new AdaptiveTextBlock("Updated his Status") { Spacing = AdaptiveSpacing.None, Weight = AdaptiveTextWeight.Bolder, Wrap = true }; column.Items.Add(image); colSet.Columns.Add(column); container.Items.Add(colSet); card.Body.Add(colSet); var returndata = JsonConvert.SerializeObject(card); return(returndata); }
/// <summary> /// This method builds the body of the response card, and helps to render the follow up prompts if the response contains any. /// </summary> /// <param name="response">The QnA response model.</param> /// /// <param name="userQuestion">The user question - the actual question asked to the bot.</param> /// <param name="answer">The answer string.</param> /// <param name="appBaseUri">The base URI where the app is hosted.</param> /// <param name="payload">The response card payload.</param> /// <param name="isRichCard">Boolean value where true represent it is a rich card while false represent it is a normal card.</param> /// <returns>A list of adaptive elements which makes up the body of the adaptive card.</returns> private static List <AdaptiveElement> BuildResponseCardBody(QnASearchResult response, string userQuestion, string answer, string appBaseUri, ResponseCardPayload payload, bool isRichCard) { var answerModel = isRichCard ? JsonConvert.DeserializeObject <AnswerModel>(response?.Answer) : new AnswerModel(); var cardBodyToConstruct = new List <AdaptiveElement>() { new AdaptiveTextBlock { Weight = AdaptiveTextWeight.Bolder, Text = Strings.ResponseHeaderText, Wrap = true, }, new AdaptiveTextBlock { Size = AdaptiveTextSize.Default, Wrap = true, Text = response?.Questions[0], IsVisible = isRichCard, }, new AdaptiveTextBlock { Wrap = true, Text = answerModel.Title ?? string.Empty, Size = AdaptiveTextSize.Large, Weight = AdaptiveTextWeight.Bolder, }, new AdaptiveTextBlock { Text = answerModel.Subtitle ?? string.Empty, Size = AdaptiveTextSize.Medium, }, }; if (!string.IsNullOrWhiteSpace(answerModel?.ImageUrl)) { cardBodyToConstruct.Add(new AdaptiveImage { Url = new Uri(answerModel.ImageUrl.Trim()), Size = AdaptiveImageSize.Auto, Style = AdaptiveImageStyle.Default, AltText = answerModel.Title, IsVisible = isRichCard, }); } cardBodyToConstruct.Add(new AdaptiveTextBlock { Text = answer, Wrap = true, Size = isRichCard ? AdaptiveTextSize.Small : AdaptiveTextSize.Default, Spacing = AdaptiveSpacing.Medium, }); // If there follow up prompts, then the follow up prompts will render accordingly. if (response?.Context.Prompts.Count > 0) { List <QnADTO> previousQuestions = BuildListOfPreviousQuestions((int)response.Id, userQuestion, answer, payload); foreach (var item in response.Context.Prompts) { var container = new AdaptiveContainer { Items = new List <AdaptiveElement>() { new AdaptiveColumnSet { Columns = new List <AdaptiveColumn>() { // This column will be for the icon. new AdaptiveColumn { Width = AdaptiveColumnWidth.Auto, VerticalContentAlignment = AdaptiveVerticalContentAlignment.Center, Items = new List <AdaptiveElement>() { new AdaptiveImage { Url = new Uri(appBaseUri + "/content/Followupicon.png"), PixelWidth = IconWidth, PixelHeight = IconHeight, }, }, Spacing = AdaptiveSpacing.Small, }, new AdaptiveColumn { Width = AdaptiveColumnWidth.Stretch, VerticalContentAlignment = AdaptiveVerticalContentAlignment.Center, Items = new List <AdaptiveElement>() { new AdaptiveTextBlock { Wrap = true, Text = string.Format(Strings.SelectActionItemDisplayTextFormatting, item.DisplayText?.Trim()), }, }, Spacing = AdaptiveSpacing.Small, }, }, }, }, SelectAction = new AdaptiveSubmitAction { Title = item.DisplayText, Data = new ResponseCardPayload { MsTeams = new CardAction { Type = ActionTypes.MessageBack, DisplayText = item.DisplayText, Text = item.DisplayText, }, PreviousQuestions = previousQuestions, IsPrompt = true, }, }, Separator = true, }; cardBodyToConstruct.Add(container); } } return(cardBodyToConstruct); }
public AdaptiveCard ToCard() { AdaptiveCard json = new AdaptiveCard(); var monthContainer = new AdaptiveContainer(); monthContainer.Style = AdaptiveContainerStyle.Default; monthContainer.Items.Add(new AdaptiveTextBlock() { Text = this.monthName + " →", Weight = AdaptiveTextWeight.Bolder }); var submitJson = JsonConvert.SerializeObject(new { PreviousDate = this.firstDay }); monthContainer.SelectAction = new AdaptiveSubmitAction() { DataJson = submitJson }; json.Body.Add(monthContainer); json.Body.Add(new AdaptiveColumnSet()); AdaptiveColumnSet columnSet = (AdaptiveColumnSet)json.Body[1]; for (int cols = 0; cols < 7; cols++) { columnSet.Columns.Add(new AdaptiveColumn()); for (int rows = 0; rows < 7; rows++) { var row = new AdaptiveTextBlock(); if (rows == 0) { columnSet.Columns[cols].Items.Add(row); row.Text = abbreviatedDayNames[cols]; row.Weight = AdaptiveTextWeight.Bolder; } else { var day = days[(rows - 1) * 7 + cols]; row.Text = day.Date.Day.ToString(); if (day.Status == Day.CalendarStatus.Proposed) { columnSet.Columns[cols].Items.Add(row); row.Color = AdaptiveTextColor.Accent; } else if (day.Status == Day.CalendarStatus.Unavailable) { columnSet.Columns[cols].Items.Add(row); row.Color = AdaptiveTextColor.Warning; } else if (day.Status == Day.CalendarStatus.Available) { var container = new AdaptiveContainer(); container.Style = AdaptiveContainerStyle.Default; container.Items.Add(row); columnSet.Columns[cols].Items.Add(container); container.SelectAction = new AdaptiveSubmitAction() { DataJson = JsonConvert.SerializeObject(new { scheduleDate = day.Date }) }; //row.Color = AdaptiveTextColor.Good; } } } } return(json); }
protected Attachment ToAdaptiveCardForOtherFlows( List <TaskItem> todos, int allTaskCount, string taskContent, BotResponse botResponse1, BotResponse botResponse2) { var toDoCard = new AdaptiveCard(); var showText = Format(botResponse2.Reply.Text, new StringDictionary() { { "taskCount", allTaskCount.ToString() } }); var speakText = Format(botResponse1.Reply.Speak, new StringDictionary() { { "taskContent", taskContent } }) + Format(botResponse2.Reply.Speak, new StringDictionary() { { "taskCount", allTaskCount.ToString() } }); toDoCard.Speak = speakText; var body = new List <AdaptiveElement>(); var textBlock = new AdaptiveTextBlock { Text = showText, }; body.Add(textBlock); var container = new AdaptiveContainer(); foreach (var todo in todos) { var columnSet = new AdaptiveColumnSet(); var icon = new AdaptiveImage(); icon.UrlString = todo.IsCompleted ? IconImageSource.CheckIconSource : IconImageSource.UncheckIconSource; var iconColumn = new AdaptiveColumn(); iconColumn.Width = "auto"; iconColumn.Items.Add(icon); columnSet.Columns.Add(iconColumn); var content = new AdaptiveTextBlock(todo.Topic); var contentColumn = new AdaptiveColumn(); iconColumn.Width = "auto"; contentColumn.Items.Add(content); columnSet.Columns.Add(contentColumn); container.Items.Add(columnSet); } body.Add(container); toDoCard.Body = body; var attachment = new Attachment() { ContentType = AdaptiveCard.ContentType, Content = toDoCard, }; return(attachment); }
/// <summary> /// updated answer card. /// </summary> /// <param name="question">question.</param> /// <param name="answer">answer.</param> /// <param name="editedBy">editedby.</param> /// <param name="isTest">boolean environment.</param> /// <returns>attachment.</returns> public Attachment AddedAnswer(string question, string answer, string editedBy, bool isTest) { if (!string.IsNullOrWhiteSpace(answer)) { answer = answer.Equals(Constants.Unanswered) ? string.Empty : answer; } AdaptiveCard card = new AdaptiveCard("1.0"); var container = new AdaptiveContainer() { Items = new List <AdaptiveElement> { new AdaptiveTextBlock { Size = AdaptiveTextSize.Default, Wrap = true, Text = $"**{Strings.QuestionTitle}:** {question}", }, new AdaptiveTextBlock { Size = AdaptiveTextSize.Default, Wrap = true, Text = string.IsNullOrWhiteSpace(answer) ? answer : $"**{Strings.AnswerTitle}:** {answer}", }, new AdaptiveTextBlock { Size = AdaptiveTextSize.Small, Wrap = true, Text = string.Format(Strings.LastEdited, editedBy), }, }, }; if (isTest) { container.Items.Add(new AdaptiveTextBlock { Size = AdaptiveTextSize.Small, Wrap = true, Text = Strings.WaitMessageAnswer, }); } card.Body.Add(container); card.Actions.Add( new AdaptiveShowCardAction() { Title = Strings.UpdateEntryTitle, Card = this.UpdateEntry(question, answer), }); card.Actions.Add( new AdaptiveShowCardAction() { Title = Strings.DeleteEntryTitle, Card = this.DeleteEntry(question), }); var adaptiveCardAttachment = new Attachment() { ContentType = AdaptiveCard.ContentType, Content = card, }; return(adaptiveCardAttachment); }
public static AdaptiveCard CreateAdaptiveCard_WithDynamicContent() { List <string> city = new List <string>() { "Delhi", "Bangalore", "Mumbai" }; List <string> date = new List <string>() { "1-Jan", "26-Jan", "15-Aug" }; List <string> des = new List <string>() { "New Year", "Republic Day", "Independence Day" }; List <string> date1 = new List <string>() { "1-Jan", "26-Jan", "15-Aug", "25-Dec" }; List <string> des1 = new List <string>() { "New Year", "Republic Day", "Independence Day", "Christmas Day" }; List <string> date2 = new List <string>() { "1-Jan", "25-Dec" }; List <string> des2 = new List <string>() { "New Year", "Christmas Day" }; List <AdaptiveCard> cards = new List <AdaptiveCard>(); cards.Add(HolidayListAdaptiveCard(date, des)); cards.Add(HolidayListAdaptiveCard(date1, des1)); cards.Add(HolidayListAdaptiveCard(date2, des2)); var mainCard = new AdaptiveCard(new AdaptiveSchemaVersion(1, 0)); var column3 = new AdaptiveColumn(); column3.Items.Add(new AdaptiveTextBlock() { Text = "Holiday City", Weight = AdaptiveTextWeight.Bolder }); var columnSet1 = new AdaptiveColumnSet(); columnSet1.Columns.Add(column3); var container1 = new AdaptiveContainer(); container1.Style = AdaptiveContainerStyle.Emphasis; container1.Items.Add(columnSet1); mainCard.Body.Add(container1); List <AdaptiveShowCardAction> adaptiveShowCardActions = new List <AdaptiveShowCardAction>(); for (int i = 0; i < city.Count; i++) { //mainCard.Actions.Add(new AdaptiveShowCardAction() { Title = city[i], Card = cards[i] }); //mainCard.Actions.Add(new AdaptiveSubmitAction() {Title="Submit",Data= "Submit" }); mainCard.Actions.Add(new AdaptiveSubmitAction() { Title = "Submit", Data = "Submit" }); //{ \"Type\": \"GetPPTNo\" } //mainCard.Actions.Add(new AdaptiveOpenUrlAction() { Title = "OpenUrl", Url = new Uri("https://adaptivecards.io/explorer/Action.OpenUrl.html") }); } var attachment = new Attachment { ContentType = AdaptiveCard.ContentType, Content = mainCard }; return(mainCard); //var reply = MessageFactory.Attachment(attachment); //await stepContext.Context.SendActivityAsync(reply); //return new DialogTurnResult(DialogTurnStatus.Waiting); }
/// <summary> /// Add question card task module. /// </summary> /// <param name="isValid">validation flag.</param> /// <returns>card.</returns> public Attachment AddQuestionActionCard(bool isValid) { AdaptiveCard card = new AdaptiveCard("1.0"); var container = new AdaptiveContainer() { Items = new List <AdaptiveElement> { new AdaptiveTextBlock { Text = Strings.QuestionTitle, Size = AdaptiveTextSize.Small, }, new AdaptiveTextInput { Id = "question", Placeholder = Strings.PlaceholderQuestion, MaxLength = QuestionMaxInputLength, Style = AdaptiveTextInputStyle.Text, }, new AdaptiveTextBlock { Text = Strings.AnswerTitle, Size = AdaptiveTextSize.Small, }, new AdaptiveTextInput { Id = "answer", Placeholder = Strings.PlaceholderAnswer, IsMultiline = true, MaxLength = AnswerMaxInputLength, Style = AdaptiveTextInputStyle.Text, }, }, }; if (!isValid) { container.Items.Add(new AdaptiveTextBlock { Text = Strings.EmptyQnaValidation, Size = AdaptiveTextSize.Small, Color = AdaptiveTextColor.Attention, }); } card.Body.Add(container); card.Actions.Add( new AdaptiveSubmitAction() { Title = Strings.SubmitTitle, }); var adaptiveCardAttachment = new Attachment() { ContentType = AdaptiveCard.ContentType, Content = card, }; return(adaptiveCardAttachment); }
/// <summary> /// Gets add note card on task module through bot command or button click. /// </summary> /// <param name="personalGoalNoteDetail">Holds personal goal note detail entity data.</param> /// <param name="personalGoalDetail">Holds collection of personal goal detail entity data.</param> /// <param name="localizer">The current cultures' string localizer.</param> /// <param name="isNoteEmpty">Determines whether note is empty.</param> /// /// <param name="isPersonalGoalEmpty">Determines whether personal goal is empty.</param> /// <param name="isNoteCountExceedsTen">Determines whether note count exceeds ten.</param> /// <returns>Returns an attachment of card.</returns> public static Attachment GetAddNoteCardInTaskModule(PersonalGoalNoteDetail personalGoalNoteDetail, IEnumerable <PersonalGoalDetail> personalGoalDetail, IStringLocalizer <Strings> localizer, bool isNoteEmpty = false, bool isPersonalGoalEmpty = false, bool isNoteCountExceedsTen = false) { personalGoalDetail = personalGoalDetail ?? throw new ArgumentNullException(nameof(personalGoalDetail)); List <AdaptiveChoice> personalGoalList = new List <AdaptiveChoice>(); foreach (var personalGoal in personalGoalDetail) { string truncatedGoalName = personalGoal.GoalName.Length <= TruncateThresholdLength ? personalGoal.GoalName : personalGoal.GoalName.Substring(0, 80) + "..."; personalGoalList.Add(new AdaptiveChoice { Title = truncatedGoalName, Value = personalGoal.PersonalGoalId, }); } AdaptiveCard addNoteCard = new AdaptiveCard(new AdaptiveSchemaVersion(1, 0)); { var container = new AdaptiveContainer() { PixelMinHeight = NotesCardContainerHeight, Items = new List <AdaptiveElement> { new AdaptiveColumnSet { Columns = new List <AdaptiveColumn> { new AdaptiveColumn { Width = AdaptiveColumnWidth.Stretch, Items = new List <AdaptiveElement> { new AdaptiveTextBlock { Size = AdaptiveTextSize.Medium, Wrap = true, Text = localizer.GetString("GoalBucketText"), Spacing = AdaptiveSpacing.None, }, }, }, new AdaptiveColumn { Width = AdaptiveColumnWidth.Auto, Items = new List <AdaptiveElement> { new AdaptiveTextBlock { Size = AdaptiveTextSize.Medium, Wrap = true, Text = localizer.GetString("AddNoteEmptyGoalError"), HorizontalAlignment = AdaptiveHorizontalAlignment.Right, Color = AdaptiveTextColor.Attention, IsVisible = isPersonalGoalEmpty, }, }, }, new AdaptiveColumn { Width = AdaptiveColumnWidth.Auto, Items = new List <AdaptiveElement> { new AdaptiveTextBlock { Size = AdaptiveTextSize.Medium, HorizontalAlignment = AdaptiveHorizontalAlignment.Right, Color = AdaptiveTextColor.Attention, Text = localizer.GetString("AddNoteMaximumNoteError"), IsVisible = isNoteCountExceedsTen, Wrap = true, }, }, }, }, }, new AdaptiveChoiceSetInput { Value = personalGoalNoteDetail?.PersonalGoalId, Choices = personalGoalList, IsMultiSelect = false, Id = "personalgoalid", Style = AdaptiveChoiceInputStyle.Compact, }, new AdaptiveColumnSet { Columns = new List <AdaptiveColumn> { new AdaptiveColumn { Width = AdaptiveColumnWidth.Stretch, Items = new List <AdaptiveElement> { new AdaptiveTextBlock { Size = AdaptiveTextSize.Medium, Text = localizer.GetString("NoteText"), Spacing = AdaptiveSpacing.None, }, }, }, new AdaptiveColumn { Width = AdaptiveColumnWidth.Auto, Items = new List <AdaptiveElement> { new AdaptiveTextBlock { Size = AdaptiveTextSize.Medium, Wrap = true, Text = localizer.GetString("AddNoteEmptyNoteError"), HorizontalAlignment = AdaptiveHorizontalAlignment.Right, Color = AdaptiveTextColor.Attention, IsVisible = isNoteEmpty, }, }, }, }, }, new AdaptiveTextInput { Spacing = AdaptiveSpacing.Small, Id = "personalgoalnotedescription", MaxLength = NotesInputMaximumLength, IsMultiline = true, Placeholder = localizer.GetString("AddNotePlaceHolder"), Value = personalGoalNoteDetail?.PersonalGoalNoteDescription, }, new AdaptiveTextBlock { Text = localizer.GetString("SourceText"), HorizontalAlignment = AdaptiveHorizontalAlignment.Left, Wrap = true, }, new AdaptiveTextInput { Spacing = AdaptiveSpacing.Small, Id = "sourcename", MaxLength = SourceInputMaximumLength, Placeholder = localizer.GetString("SourceNamePlaceHolder"), Value = personalGoalNoteDetail?.SourceName, }, }, }; addNoteCard.Body.Add(container); addNoteCard.Actions = new List <AdaptiveAction> { new AdaptiveSubmitAction { Title = localizer.GetString("SubmitActionText"), Data = new AdaptiveSubmitActionData { MsTeams = new CardAction { Type = Constants.TaskModuleSubmitType, }, AdaptiveActionType = Constants.AddNoteCommand, GoalNoteId = personalGoalNoteDetail.PersonalGoalNoteId, }, }, }; return(new Attachment { ContentType = AdaptiveCard.ContentType, Content = addNoteCard, }); } }
public static AdaptiveCard CreateFullCardForCandidate(Candidate c) { AdaptiveCard card = new AdaptiveCard(); card.Body = new List <AdaptiveElement>(); AdaptiveContainer header = new AdaptiveContainer(); card.Body.Add(header); header.Items = new List <AdaptiveElement>(); header.Items.Add(new AdaptiveTextBlock() { Text = c.Name, Weight = AdaptiveTextWeight.Bolder, Size = AdaptiveTextSize.Large }); AdaptiveColumnSet headerDetails = new AdaptiveColumnSet(); header.Items.Add(headerDetails); AdaptiveColumn col1 = new AdaptiveColumn(); col1.Width = AdaptiveColumnWidth.Auto; col1.Items = new List <AdaptiveElement> { new AdaptiveImage() { Url = new Uri(c.ProfilePicture), Size = AdaptiveImageSize.Small, Style = AdaptiveImageStyle.Person } }; AdaptiveColumn col2 = new AdaptiveColumn(); col2.Width = AdaptiveColumnWidth.Stretch; col2.Items = new List <AdaptiveElement> { new AdaptiveTextBlock() { Text = $"Applied {DateTime.Today.ToString("MM/dd/yyyy")}", Wrap = true }, new AdaptiveTextBlock() { Text = $"Current role {c.CurrentRole}", Spacing = AdaptiveSpacing.None, Wrap = true, IsSubtle = true } }; headerDetails.Columns = new List <AdaptiveColumn> { col1, col2 }; AdaptiveContainer details = new AdaptiveContainer(); AdaptiveTextBlock candidateSummary = new AdaptiveTextBlock() { Text = new CandidatesDataController().GetCandidateBio(c), Wrap = true }; AdaptiveFactSet factsCol1 = new AdaptiveFactSet(); factsCol1.Facts = new List <AdaptiveFact> { new AdaptiveFact("Applied to position", c.ReqId), new AdaptiveFact("Interview date", "Not set") }; AdaptiveFactSet factsCol2 = new AdaptiveFactSet(); factsCol2.Facts = new List <AdaptiveFact> { new AdaptiveFact("Hires", c.Hires.ToString()), new AdaptiveFact("No hires", c.NoHires.ToString()) }; AdaptiveColumnSet factColumns = new AdaptiveColumnSet() { Columns = new List <AdaptiveColumn> { new AdaptiveColumn() { Items = new List <AdaptiveElement> { factsCol1 }, Width = AdaptiveColumnWidth.Stretch }, new AdaptiveColumn() { Items = new List <AdaptiveElement> { factsCol2 }, Width = AdaptiveColumnWidth.Stretch } } }; details.Items = new List <AdaptiveElement> { candidateSummary, factColumns }; card.Body.Add(details); AdaptiveImageSet referrals = new AdaptiveImageSet(); referrals.ImageSize = AdaptiveImageSize.Small; referrals.Images = new List <AdaptiveImage>(); foreach (Candidate referral in new CandidatesDataController().GetReferrals(c)) { referrals.Images.Add(new AdaptiveImage() { Url = new Uri(referral.ProfilePicture), Style = AdaptiveImageStyle.Person }); } card.Body.Add(new AdaptiveTextBlock() { Text = "Referrals", Size = AdaptiveTextSize.Large }); card.Body.Add(referrals); AdaptiveAction setInterview = new AdaptiveShowCardAction() { Title = "Set interview date", Card = new AdaptiveCard() { Body = new List <AdaptiveElement> { new AdaptiveDateInput() { Id = "InterviewDate", Placeholder = "Enter in a date for the interview" } }, Actions = new List <AdaptiveAction> { new AdaptiveSubmitAction() { Title = "OK" } } } }; AdaptiveAction setComment = new AdaptiveShowCardAction() { Title = "Add comment", Card = new AdaptiveCard() { Body = new List <AdaptiveElement> { new AdaptiveTextInput() { Id = "Comment", Placeholder = "Add a comment for this candidate", IsMultiline = true } }, Actions = new List <AdaptiveAction> { new AdaptiveSubmitAction() { Title = "OK" } } } }; card.Actions = new List <AdaptiveAction> { setInterview, setComment }; return(card); }
/// <summary> /// Creates the brand adaptive card. /// </summary> /// <returns></returns> private Attachment CreateBrandAdaptiveCard() { var card = new AdaptiveCard("1.0"); List <AdaptiveElement> adaptiveElements = new List <AdaptiveElement>() { new AdaptiveColumnSet { Columns = new List <AdaptiveColumn>() { new AdaptiveColumn { Items = new List <AdaptiveElement> { new AdaptiveImage { Url = new Uri("https://github.com/enablers104/LiRi/blob/master/Images/sterns.png?raw=true"), Size = AdaptiveImageSize.Large }, new AdaptiveImage { Url = new Uri("https://github.com/enablers104/LiRi/blob/master/Images/the_fix.png?raw=true"), Size = AdaptiveImageSize.Large }, new AdaptiveImage { Url = new Uri("https://github.com/enablers104/LiRi/blob/master/Images/hi.png?raw=true"), Size = AdaptiveImageSize.Large }, new AdaptiveImage { Url = new Uri("https://github.com/enablers104/LiRi/blob/master/Images/g-star-raw.png?raw=true"), Size = AdaptiveImageSize.Large }, }, Separator = true }, new AdaptiveColumn { Items = new List <AdaptiveElement> { //new AdaptiveImage //{ // Url = new Uri("https://github.com/enablers104/LiRi/blob/master/Images/american-swiss.jpg?raw=true"), // Size = AdaptiveImageSize.Large //}, new AdaptiveImage { Url = new Uri("https://github.com/enablers104/LiRi/blob/master/Images/at_home.png?raw=true"), Size = AdaptiveImageSize.Large }, //new AdaptiveImage //{ // Url = new Uri("https://github.com/enablers104/LiRi/blob/master/Images/charles_keith.png?raw=true"), // Size = AdaptiveImageSize.Large //}, new AdaptiveImage { Url = new Uri("https://github.com/enablers104/LiRi/blob/master/Images/donna.png?raw=true"), Size = AdaptiveImageSize.Large }, new AdaptiveImage { Url = new Uri("https://github.com/enablers104/LiRi/blob/master/Images/mat_may.png?raw=true"), Size = AdaptiveImageSize.Large }, new AdaptiveImage { Url = new Uri("https://github.com/enablers104/LiRi/blob/master/Images/soda_bloc.png?raw=true"), Size = AdaptiveImageSize.Large }, }, Separator = true }, new AdaptiveColumn { Items = new List <AdaptiveElement> { new AdaptiveImage { Url = new Uri("https://github.com/enablers104/LiRi/blob/master/Images/markham.jpg?raw=true"), Size = AdaptiveImageSize.Large }, new AdaptiveImage { Url = new Uri("https://github.com/enablers104/LiRi/blob/master/Images/fabiani.jpg?raw=true"), Size = AdaptiveImageSize.Large }, new AdaptiveImage { Url = new Uri("https://github.com/enablers104/LiRi/blob/master/Images/sportscene.jpg?raw=true"), Size = AdaptiveImageSize.Large }, new AdaptiveImage { Url = new Uri("https://github.com/enablers104/LiRi/blob/master/Images/Foschini.jpg?raw=true"), Size = AdaptiveImageSize.Large }, //new AdaptiveImage //{ // Url = new Uri("https://github.com/enablers104/LiRi/blob/master/Images/totalsports_bw.png?raw=true"), // Size = AdaptiveImageSize.Large //}, }, Separator = true } } } }; AdaptiveContainer container = new AdaptiveContainer { Items = adaptiveElements }; card.Body.Add(container); var attachment = new Attachment() { ContentType = AdaptiveCard.ContentType, Content = card }; return(attachment); }
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 = "Brainy" }); var _columnContent = new AdaptiveColumn() { Width = AdaptiveColumnWidth.Stretch }; _columnContent.Items.Add(new AdaptiveTextBlock() { Text = "Brainy", 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); }
private async Task SendApplicationsSummaryCard(ITurnContext turnContext, CancellationToken cancellationToken) { var jobOpeningSummaries = await this.jobApplicationQuery.GetActiveJobApplications("24c4e3d5-821b-4b24-8be7-eaf530706f1d"); string[] summaryNames = { "Total Applications", "Dispositioned Applications", "Applications In Review", "Interview Applications", "Applications in Assessment" }; IMessageActivity replyincarousel; var attachments = new List <Attachment>(); jobOpeningSummaries?.ForEach(jo => { var card = new AdaptiveCard("1.2"); card.Body.Add(new AdaptiveTextBlock() { Text = jo.ExternalJobOpeningID + ": " + jo.PositionTitle, Size = AdaptiveTextSize.ExtraLarge, Color = AdaptiveTextColor.Accent, Weight = AdaptiveTextWeight.Bolder, }); card.Body.Add(new AdaptiveTextBlock() { Text = "Summary", Size = AdaptiveTextSize.Medium, Weight = AdaptiveTextWeight.Bolder, }); string[] summarydata = { jo.TotalApplications.ToString(), jo.DispositionedApplications.ToString(), jo.ReviewApplications?.Count.ToString(), jo.InterviewApplications.ToString(), jo.AssessmentApplications.ToString() }; for (int i = 0; i < summaryNames.Length; i++) { List <AdaptiveElement> AdaptiveStaticElement = new List <AdaptiveElement> { new AdaptiveColumnSet() { Columns = new List <AdaptiveColumn>() { new AdaptiveColumn() { Items = new List <AdaptiveElement>() { new AdaptiveTextBlock() { Text = summaryNames[i], Weight = AdaptiveTextWeight.Bolder, Separator = true, Size = AdaptiveTextSize.Small, Wrap = true, } } }, new AdaptiveColumn() { Items = new List <AdaptiveElement>() { new AdaptiveTextBlock() { Text = summarydata[i], Weight = AdaptiveTextWeight.Bolder, Separator = true, Size = AdaptiveTextSize.Small, } } } } } }; AdaptiveContainer adaptiveStaticContainer = new AdaptiveContainer(); adaptiveStaticContainer.Items = AdaptiveStaticElement; card.Body.Add(adaptiveStaticContainer); } // var subcard = new AdaptiveCard("1.2"); card.Body.Add(new AdaptiveTextBlock() { Text = "Applications For Review", Size = AdaptiveTextSize.ExtraLarge, Color = AdaptiveTextColor.Accent, }); List <AdaptiveElement> AdaptiveStaticElement1 = new List <AdaptiveElement> { new AdaptiveColumnSet() { Columns = new List <AdaptiveColumn>() { new AdaptiveColumn() { Items = new List <AdaptiveElement>() { new AdaptiveTextBlock() { Text = "Cadidate Name", Weight = AdaptiveTextWeight.Bolder, Separator = true, Size = AdaptiveTextSize.Small, Wrap = true, } } }, new AdaptiveColumn() { Items = new List <AdaptiveElement>() { new AdaptiveTextBlock() { Text = "Email", Weight = AdaptiveTextWeight.Bolder, Separator = true, Size = AdaptiveTextSize.Small, } } }, new AdaptiveColumn() { // Width=AdaptiveColumnWidth.Auto, Items = new List <AdaptiveElement>() { new AdaptiveTextBlock() { Text = "Resume", Weight = AdaptiveTextWeight.Bolder, Separator = true, Size = AdaptiveTextSize.Small, } } }, new AdaptiveColumn() { // Width=AdaptiveColumnWidth.Auto, Items = new List <AdaptiveElement>() { new AdaptiveTextBlock() { Text = "Current Stage", Weight = AdaptiveTextWeight.Bolder, Separator = true, Size = AdaptiveTextSize.Small, Wrap = true, } } }, new AdaptiveColumn() { Items = new List <AdaptiveElement>() { new AdaptiveTextBlock() { Text = "", Weight = AdaptiveTextWeight.Bolder, Separator = true, Size = AdaptiveTextSize.Small, } } } } } }; AdaptiveContainer adaptiveStaticContainer1 = new AdaptiveContainer(); adaptiveStaticContainer1.Items = AdaptiveStaticElement1; card.Body.Add(adaptiveStaticContainer1); card.Actions.Add(new AdaptiveSubmitAction() { Title = "<", }); card.Actions.Add(new AdaptiveSubmitAction() { Title = ">", }); int reviewApplicationCount = 0; jo.ReviewApplications?.ForEach((reviewApplication) => { { List <AdaptiveElement> AdaptiveDynamicElements = new List <AdaptiveElement> { new AdaptiveColumnSet() { Columns = new List <AdaptiveColumn>() { new AdaptiveColumn() { Width = AdaptiveColumnWidth.Stretch, Items = new List <AdaptiveElement>() { new AdaptiveTextBlock() { Text = reviewApplication.Candidate?.FullName?.GivenName + " " + reviewApplication.Candidate?.FullName?.Surname, Weight = AdaptiveTextWeight.Lighter, Separator = true, Size = AdaptiveTextSize.Small, } } }, new AdaptiveColumn() { Width = AdaptiveColumnWidth.Stretch, Items = new List <AdaptiveElement>() { new AdaptiveTextBlock() { Text = "[" + reviewApplication.Candidate?.EmailPrimary + "]" + "(https://docs.microsoft.com/en-us/adaptive-cards/templating/)", //"[[email protected]](https://docs.microsoft.com/en-us/adaptive-cards/templating/)", Weight = AdaptiveTextWeight.Lighter, Separator = true, Size = AdaptiveTextSize.Small, } }, }, new AdaptiveColumn() { Width = AdaptiveColumnWidth.Auto, Items = new List <AdaptiveElement>() { new AdaptiveActionSet() { Actions = new List <AdaptiveAction>() { new AdaptiveSubmitAction() { Title = "Open", Data = new JObject { { "Action", "Resume" } }, } } } }, }, new AdaptiveColumn() { Width = AdaptiveColumnWidth.Stretch, Items = new List <AdaptiveElement>() { new AdaptiveTextBlock() { Text = reviewApplication.CurrentJobOpeningStage.ToString(), Weight = AdaptiveTextWeight.Lighter, Separator = true, Size = AdaptiveTextSize.Small, } } }, new AdaptiveColumn() { Width = AdaptiveColumnWidth.Auto, Items = new List <AdaptiveElement>() { new AdaptiveActionSet() { Actions = new List <AdaptiveAction>() { new AdaptiveToggleVisibilityAction() { Title = "v", Type = AdaptiveToggleVisibilityAction.TypeName, TargetElements = new List <AdaptiveTargetElement>() { new AdaptiveTargetElement() { ElementId = reviewApplicationCount.ToString() }, new AdaptiveTargetElement() { ElementId = "fullname", } } } } } } } } } }; AdaptiveContainer adaptiveDynamicContainer = new AdaptiveContainer(); adaptiveDynamicContainer.Items = AdaptiveDynamicElements; List <AdaptiveElement> ToggleElements = new List <AdaptiveElement> { new AdaptiveColumnSet() { Columns = new List <AdaptiveColumn>() { new AdaptiveColumn() { Items = new List <AdaptiveElement>() { new AdaptiveTextInput() { Id = "InputText" + reviewApplicationCount, Placeholder = "Comments", }, new AdaptiveTextBlock() { Text = "Stage Change", Weight = AdaptiveTextWeight.Bolder, Separator = true, Size = AdaptiveTextSize.Small, }, new AdaptiveChoiceSetInput() { Id = "InputCoice" + reviewApplicationCount, Choices = new List <AdaptiveChoice>() { new AdaptiveChoice() { Title = "Schedule Interview", Value = "1", }, new AdaptiveChoice() { Title = "Disposition", Value = "2", }, } }, new AdaptiveActionSet() { Actions = new List <AdaptiveAction>() { new AdaptiveSubmitAction() { Title = "Submit", } } } } }, } } }; AdaptiveContainer toggleContainer = new AdaptiveContainer(); toggleContainer.Id = reviewApplicationCount.ToString(); toggleContainer.Items = ToggleElements; toggleContainer.IsVisible = false; // adding new rows in card body card.Body.Add(adaptiveDynamicContainer); card.Body.Add(toggleContainer); } reviewApplicationCount++; }); attachments.Add(convertAdaptivetoAttacment(card)); }); replyincarousel = MessageFactory.Carousel(attachments); await turnContext.SendActivityAsync(replyincarousel, cancellationToken); }
private AdaptiveCard ShowDetailsCard(IDialogContext context, Response viewBalanceResponse, string accrualCodeName) { var message = context.MakeMessage(); var vacationBalance = viewBalanceResponse?.AccrualData?.AccrualBalances?.AccrualBalanceSummary?.Find(x => x.AccrualCodeName == accrualCodeName); AdaptiveCard card = new AdaptiveCard("1.0"); var container = new AdaptiveContainer(); var items = new List <AdaptiveElement>(); var title = new AdaptiveTextBlock { Size = AdaptiveTextSize.Medium, Weight = AdaptiveTextWeight.Bolder, Text = accrualCodeName == KronosResourceText.VacationBalanceCodePersonal ? KronosResourceText.VacationBalanceCardPersonalLabel : accrualCodeName, }; var factList = new List <AdaptiveFact> { new AdaptiveFact { Title = KronosResourceText.VacationBalanceCardVestedHoursLabel, Value = $"{vacationBalance.VestedBalanceInTime} hours", }, new AdaptiveFact { Title = KronosResourceText.VacationBalanceCardProbationHoursLabel, Value = $"{vacationBalance.ProbationaryBalanceInTime ?? "0:00"} hours", }, new AdaptiveFact { Title = KronosResourceText.VacationBalanceCardPlannedTakingsLabel, Value = $"{vacationBalance.ProjectedTakingAmountInTime} hours", }, new AdaptiveFact { Title = KronosResourceText.VacationBalanceCardPendingGrantsLabel, Value = $"{vacationBalance.ProjectedGrantAmountInTime} hours", }, }; var facts = new AdaptiveFactSet { Facts = factList, }; items.Add(title); items.Add(facts); container.Items = items; card.Body.Add(container); card.Actions.Add( new AdaptiveSubmitAction() { Title = KronosResourceText.RequestTimeOff, Data = new AdaptiveCardAction { msteams = new Msteams { type = "messageBack", displayText = KronosResourceText.TimeOffRequest, text = Constants.CreateTimeOff, }, }, }); if (message.Attachments == null) { message.Attachments = new List <Attachment>(); } message.Attachments.Add(new Attachment() { Content = card, ContentType = "application/vnd.microsoft.card.adaptive", Name = "Show Vacation Balance Details", }); return(card); }
public void BackgroundImage() { var card = new AdaptiveCard("1.2"); card.BackgroundImage = new AdaptiveBackgroundImage("http://adaptivecards.io/content/cats/1.png", AdaptiveBackgroundImageMode.Repeat, AdaptiveHorizontalAlignment.Right, AdaptiveVerticalAlignment.Bottom); var columnSet = new AdaptiveColumnSet(); var column1 = new AdaptiveColumn(); column1.BackgroundImage = new AdaptiveBackgroundImage("http://adaptivecards.io/content/cats/1.png", AdaptiveBackgroundImageMode.RepeatVertically, AdaptiveHorizontalAlignment.Center, AdaptiveVerticalAlignment.Top); columnSet.Columns.Add(column1); var column2 = new AdaptiveColumn(); column2.BackgroundImage = new AdaptiveBackgroundImage("http://adaptivecards.io/content/cats/2.png", AdaptiveBackgroundImageMode.Stretch, AdaptiveHorizontalAlignment.Right, AdaptiveVerticalAlignment.Bottom); columnSet.Columns.Add(column2); card.Body.Add(columnSet); var container1 = new AdaptiveContainer(); container1.BackgroundImage = new AdaptiveBackgroundImage("http://adaptivecards.io/content/cats/2.png", AdaptiveBackgroundImageMode.RepeatHorizontally, AdaptiveHorizontalAlignment.Left, AdaptiveVerticalAlignment.Center); card.Body.Add(container1); var container2 = new AdaptiveContainer(); container2.BackgroundImage = new AdaptiveBackgroundImage("http://adaptivecards.io/content/cats/3.png"); card.Body.Add(container2); var expected = @"{ ""type"": ""AdaptiveCard"", ""version"": ""1.2"", ""backgroundImage"": { ""url"": ""http://adaptivecards.io/content/cats/1.png"", ""mode"": ""repeat"", ""horizontalAlignment"": ""right"", ""verticalAlignment"": ""bottom"" }, ""body"": [ { ""type"": ""ColumnSet"", ""columns"": [ { ""type"": ""Column"", ""backgroundImage"": { ""url"": ""http://adaptivecards.io/content/cats/1.png"", ""mode"": ""repeatVertically"", ""horizontalAlignment"": ""center"" }, ""items"": [] }, { ""type"": ""Column"", ""backgroundImage"": { ""url"": ""http://adaptivecards.io/content/cats/2.png"", ""horizontalAlignment"": ""right"", ""verticalAlignment"": ""bottom"" }, ""items"": [] } ] }, { ""type"": ""Container"", ""backgroundImage"": { ""url"": ""http://adaptivecards.io/content/cats/2.png"", ""mode"": ""repeatHorizontally"", ""verticalAlignment"": ""center"" }, ""items"": [] }, { ""type"": ""Container"", ""backgroundImage"": ""http://adaptivecards.io/content/cats/3.png"", ""items"": [] } ] }"; Assert.AreEqual(expected, card.ToJson()); }
/// <summary> /// Creates the stock adaptive card. /// </summary> /// <returns></returns> private Attachment CreateJobListAdaptiveCard() { var card = new AdaptiveCard("1.0"); List <AdaptiveFact> facts = new List <AdaptiveFact> { new AdaptiveFact { Title = "[Senior Manager Business Development Manufacturing](https://careers.peopleclick.eu.com/careerscp/client_thefoschinigroup/external/jobDetails/jobDetail.html?jobPostId=9754&localeCode=en-us)" }, new AdaptiveFact { Value = "[Senior Manager: QA and Testing](https://careers.peopleclick.eu.com/careerscp/client_thefoschinigroup/external/jobDetails/jobDetail.html?jobPostId=8012&localeCode=en-us)" }, new AdaptiveFact { Value = "[Service Desk Team Manager](https://careers.peopleclick.eu.com/careerscp/client_thefoschinigroup/external/jobDetails/jobDetail.html?jobPostId=9555&localeCode=en-us)" }, new AdaptiveFact { Title = "[Software Developer - eCommerce](https://careers.peopleclick.eu.com/careerscp/client_thefoschinigroup/external/jobDetails/jobDetail.html?jobPostId=9829&localeCode=en-us)" }, new AdaptiveFact { Title = "[Test Analyst](https://careers.peopleclick.eu.com/careerscp/client_thefoschinigroup/external/jobDetails/jobDetail.html?jobPostId=9462&localeCode=en-us)", }, new AdaptiveFact { Title = "[Scrum Master - Intelligent Automation](https://careers.peopleclick.eu.com/careerscp/client_thefoschinigroup/external/jobDetails/jobDetail.html?jobPostId=9372&localeCode=en-us)" }, new AdaptiveFact { Title = "[Development Team Manager](https://careers.peopleclick.eu.com/careerscp/client_thefoschinigroup/external/jobDetails/jobDetail.html?jobPostId=9354&localeCode=en-us)" }, new AdaptiveFact { Title = "[Front-end Developer](https://careers.peopleclick.eu.com/careerscp/client_thefoschinigroup/external/jobDetails/jobDetail.html?jobPostId=9341&localeCode=en-us)" }, new AdaptiveFact { Title = "[Graphic Designer](https://careers.peopleclick.eu.com/careerscp/client_thefoschinigroup/external/jobDetails/jobDetail.html?jobPostId=9343&localeCode=en-us)" }, new AdaptiveFact { Title = "[Senior Software Engineer-Manufacturing & Logistics](https://careers.peopleclick.eu.com/careerscp/client_thefoschinigroup/external/jobDetails/jobDetail.html?jobPostId=9075&localeCode=en-us)" }, new AdaptiveFact { Title = "[Team Lead – Finance Systems Operations](https://careers.peopleclick.eu.com/careerscp/client_thefoschinigroup/external/jobDetails/jobDetail.html?jobPostId=9001&localeCode=en-us)" }, new AdaptiveFact { Title = "[Senior Manager: QA and Testing](https://careers.peopleclick.eu.com/careerscp/client_thefoschinigroup/external/jobDetails/jobDetail.html?jobPostId=8012&localeCode=en-us)" } }; List <AdaptiveElement> adaptiveElements = new List <AdaptiveElement>() { new AdaptiveColumnSet { Columns = new List <AdaptiveColumn>() { new AdaptiveColumn { Items = new List <AdaptiveElement> { new AdaptiveImage { Url = new Uri("https://github.com/enablers104/chatbot/blob/master/Images/Logo.png?raw=true"), Size = AdaptiveImageSize.Small }, new AdaptiveTextBlock { Text = "Job listing", Spacing = AdaptiveSpacing.Medium, Size = AdaptiveTextSize.Default, Weight = AdaptiveTextWeight.Bolder, Wrap = true, MaxLines = 0 } , CreateTextBlock("[Senior Manager Business Development Manufacturing](https://careers.peopleclick.eu.com/careerscp/client_thefoschinigroup/external/jobDetails/jobDetail.html?jobPostId=9754&localeCode=en-us)") , CreateTextBlock("[Senior Manager: QA and Testing](https://careers.peopleclick.eu.com/careerscp/client_thefoschinigroup/external/jobDetails/jobDetail.html?jobPostId=8012&localeCode=en-us)") , CreateTextBlock("[Service Desk Team Manager](https://careers.peopleclick.eu.com/careerscp/client_thefoschinigroup/external/jobDetails/jobDetail.html?jobPostId=9555&localeCode=en-us)") , CreateTextBlock("[Software Developer - eCommerce](https://careers.peopleclick.eu.com/careerscp/client_thefoschinigroup/external/jobDetails/jobDetail.html?jobPostId=9829&localeCode=en-us)") , CreateTextBlock("[Test Analyst](https://careers.peopleclick.eu.com/careerscp/client_thefoschinigroup/external/jobDetails/jobDetail.html?jobPostId=9462&localeCode=en-us)") , CreateTextBlock("[Scrum Master - Intelligent Automation](https://careers.peopleclick.eu.com/careerscp/client_thefoschinigroup/external/jobDetails/jobDetail.html?jobPostId=9372&localeCode=en-us)") , CreateTextBlock("[Development Team Manager](https://careers.peopleclick.eu.com/careerscp/client_thefoschinigroup/external/jobDetails/jobDetail.html?jobPostId=9354&localeCode=en-us)") , CreateTextBlock("[Front-end Developer](https://careers.peopleclick.eu.com/careerscp/client_thefoschinigroup/external/jobDetails/jobDetail.html?jobPostId=9341&localeCode=en-us)") , CreateTextBlock("[Graphic Designer](https://careers.peopleclick.eu.com/careerscp/client_thefoschinigroup/external/jobDetails/jobDetail.html?jobPostId=9343&localeCode=en-us)") , CreateTextBlock("[Senior Software Engineer-Manufacturing & Logistics](https://careers.peopleclick.eu.com/careerscp/client_thefoschinigroup/external/jobDetails/jobDetail.html?jobPostId=9075&localeCode=en-us)") , CreateTextBlock("[Team Lead – Finance Systems Operations](https://careers.peopleclick.eu.com/careerscp/client_thefoschinigroup/external/jobDetails/jobDetail.html?jobPostId=9001&localeCode=en-us)") , CreateTextBlock("[Senior Manager: QA and Testing](https://careers.peopleclick.eu.com/careerscp/client_thefoschinigroup/external/jobDetails/jobDetail.html?jobPostId=8012&localeCode=en-us)") }, Separator = true } } } }; AdaptiveContainer container = new AdaptiveContainer { Items = adaptiveElements }; card.Body.Add(container); var attachment = new Attachment() { ContentType = AdaptiveCard.ContentType, Content = card }; return(attachment); }