From ae3ae2830322aad6bfed3796f1bbf9334d7e99f6 Mon Sep 17 00:00:00 2001 From: yukun-dong Date: Fri, 9 Aug 2024 14:04:10 +0800 Subject: [PATCH 1/3] feat: remove adaptivecards-tools dependency --- .../package.json | 3 ++- adaptive-card-notification/package.json | 3 ++- .../src/columnsetNotificationHttpTrigger.ts | 4 ++-- .../src/defaultNotificationHttpTrigger.ts | 4 ++-- .../src/factsetNotificationHttpTrigger.ts | 4 ++-- .../src/listNotificationHttpTrigger.ts | 4 ++-- .../src/mentionNotificationHttpTrigger.ts | 4 ++-- hello-world-bot-with-tab/bot/package.json | 4 +++- hello-world-bot-with-tab/bot/teamsBot.ts | 12 +++++------- incoming-webhook-notification/package.json | 4 +++- incoming-webhook-notification/src/index.ts | 19 ++++++++++--------- large-scale-notification/package.json | 4 +++- large-scale-notification/src/httpTrigger.ts | 6 ++++-- notification-codespaces/package.json | 3 ++- notification-codespaces/src/index.js | 14 ++++++++------ stocks-update-notification-bot/package.json | 4 +++- .../src/timerTrigger.ts | 8 ++++---- test-tool-sample-app/package.json | 4 +++- .../assignIncidentActionHandler.ts | 2 +- .../src/cardActions/doStuffActionHandler.ts | 2 +- .../src/cardActions/userLikeActionHandler.ts | 4 ++-- .../src/commands/helloworldCommandHandler.ts | 4 ++-- .../src/commands/helpCommandHandler.ts | 4 ++-- .../src/commands/heroCardCommandHandler.ts | 1 - .../src/commands/learnCommandHandler.ts | 4 ++-- .../commands/reportIncidentCommandHandler.ts | 5 ++--- .../src/commands/showCardCommandHandler.ts | 4 ++-- .../src/commands/submitCommandHandler.ts | 4 ++-- test-tool-sample-app/src/index.ts | 2 +- test-tool-sample-app/src/simpleBot.ts | 16 ++++++++-------- 30 files changed, 87 insertions(+), 73 deletions(-) diff --git a/NPM-search-message-extension-codespaces/package.json b/NPM-search-message-extension-codespaces/package.json index 23a0d314..25e8fc85 100644 --- a/NPM-search-message-extension-codespaces/package.json +++ b/NPM-search-message-extension-codespaces/package.json @@ -19,7 +19,8 @@ "test": "echo \"Error: no test specified\" && exit 1" }, "dependencies": { - "@microsoft/adaptivecards-tools": "^1.0.0", + "adaptivecards-templating": "^2.3.1", + "adaptive-expressions": "^4.22.3", "botbuilder": "^4.18.0", "isomorphic-fetch": "^3.0.0", "restify": "^10.0.0" diff --git a/adaptive-card-notification/package.json b/adaptive-card-notification/package.json index eb113ede..859a6f38 100644 --- a/adaptive-card-notification/package.json +++ b/adaptive-card-notification/package.json @@ -24,12 +24,13 @@ "dependencies": { "@azure/storage-blob": "^12.9.0", "@azure/identity": "^4.4.0", - "@microsoft/adaptivecards-tools": "^1.0.0", + "adaptivecards-templating": "^2.3.1", "@microsoft/teamsfx": "^2.0.0", "botbuilder": "^4.18.0" }, "devDependencies": { "@azure/functions": "^1.2.3", + "@types/json-schema": "^7.0.15", "@types/chai": "^4.3.0", "@types/mocha": "^9.1.0", "@types/node": "^14.0.0", diff --git a/adaptive-card-notification/src/columnsetNotificationHttpTrigger.ts b/adaptive-card-notification/src/columnsetNotificationHttpTrigger.ts index 1feb8bc3..75e51eaa 100644 --- a/adaptive-card-notification/src/columnsetNotificationHttpTrigger.ts +++ b/adaptive-card-notification/src/columnsetNotificationHttpTrigger.ts @@ -1,5 +1,5 @@ import { AzureFunction, Context, HttpRequest } from "@azure/functions"; -import { AdaptiveCards } from "@microsoft/adaptivecards-tools"; +import * as ACData from "adaptivecards-templating"; import { notificationApp } from "./internal/initialize"; import notificationTemplate from "./adaptiveCards/notification-columnset.json"; import { ColumnsetData } from "./cardModels"; @@ -41,7 +41,7 @@ const httpTrigger: AzureFunction = async function ( const targets = pagedInstallations.data; for (const target of targets) { await target.sendAdaptiveCard( - AdaptiveCards.declare(notificationTemplate).render(data) + new ACData.Template(notificationTemplate).expand({ $root: data }) ); } } while (continuationToken); diff --git a/adaptive-card-notification/src/defaultNotificationHttpTrigger.ts b/adaptive-card-notification/src/defaultNotificationHttpTrigger.ts index da873aef..2a7624af 100644 --- a/adaptive-card-notification/src/defaultNotificationHttpTrigger.ts +++ b/adaptive-card-notification/src/defaultNotificationHttpTrigger.ts @@ -1,5 +1,5 @@ import { AzureFunction, Context, HttpRequest } from "@azure/functions"; -import { AdaptiveCards } from "@microsoft/adaptivecards-tools"; +import * as ACData from "adaptivecards-templating"; import { notificationApp } from "./internal/initialize"; import notificationTemplate from "./adaptiveCards/notification-default.json"; import { CardData } from "./cardModels"; @@ -24,7 +24,7 @@ const httpTrigger: AzureFunction = async function ( const targets = pagedInstallations.data; for (const target of targets) { await target.sendAdaptiveCard( - AdaptiveCards.declare(notificationTemplate).render(data) + new ACData.Template(notificationTemplate).expand({ $root: data }) ); } } while (continuationToken); diff --git a/adaptive-card-notification/src/factsetNotificationHttpTrigger.ts b/adaptive-card-notification/src/factsetNotificationHttpTrigger.ts index 8551c0d0..43850404 100644 --- a/adaptive-card-notification/src/factsetNotificationHttpTrigger.ts +++ b/adaptive-card-notification/src/factsetNotificationHttpTrigger.ts @@ -1,5 +1,5 @@ import { AzureFunction, Context, HttpRequest } from "@azure/functions"; -import { AdaptiveCards } from "@microsoft/adaptivecards-tools"; +import * as ACData from "adaptivecards-templating"; import { notificationApp } from "./internal/initialize"; import notificationTemplate from "./adaptiveCards/notification-factset.json"; import { FactsetData } from "./cardModels"; @@ -29,7 +29,7 @@ const httpTrigger: AzureFunction = async function ( const targets = pagedInstallations.data; for (const target of targets) { await target.sendAdaptiveCard( - AdaptiveCards.declare(notificationTemplate).render(data) + new ACData.Template(notificationTemplate).expand({ $root: data }) ); } } while (continuationToken); diff --git a/adaptive-card-notification/src/listNotificationHttpTrigger.ts b/adaptive-card-notification/src/listNotificationHttpTrigger.ts index d84ece76..c3371e27 100644 --- a/adaptive-card-notification/src/listNotificationHttpTrigger.ts +++ b/adaptive-card-notification/src/listNotificationHttpTrigger.ts @@ -1,5 +1,5 @@ import { AzureFunction, Context, HttpRequest } from "@azure/functions"; -import { AdaptiveCards } from "@microsoft/adaptivecards-tools"; +import * as ACData from "adaptivecards-templating"; import { notificationApp } from "./internal/initialize"; import notificationTemplate from "./adaptiveCards/notification-list.json"; import { ListData } from "./cardModels"; @@ -29,7 +29,7 @@ const httpTrigger: AzureFunction = async function ( const targets = pagedInstallations.data; for (const target of targets) { await target.sendAdaptiveCard( - AdaptiveCards.declare(notificationTemplate).render(data) + new ACData.Template(notificationTemplate).expand({ $root: data }) ); } } while (continuationToken); diff --git a/adaptive-card-notification/src/mentionNotificationHttpTrigger.ts b/adaptive-card-notification/src/mentionNotificationHttpTrigger.ts index f6f79816..89a7409f 100644 --- a/adaptive-card-notification/src/mentionNotificationHttpTrigger.ts +++ b/adaptive-card-notification/src/mentionNotificationHttpTrigger.ts @@ -1,5 +1,5 @@ import { AzureFunction, Context, HttpRequest } from "@azure/functions"; -import { AdaptiveCards } from "@microsoft/adaptivecards-tools"; +import * as ACData from "adaptivecards-templating"; import { notificationApp } from "./internal/initialize"; import notificationTemplate from "./adaptiveCards/notification-mention.json"; import { MentionData } from "./cardModels"; @@ -26,7 +26,7 @@ const httpTrigger: AzureFunction = async function ( const targets = pagedInstallations.data; for (const target of targets) { await target.sendAdaptiveCard( - AdaptiveCards.declare(notificationTemplate).render(data) + new ACData.Template(notificationTemplate).expand({ $root: data }) ); /** List all members then notify each member diff --git a/hello-world-bot-with-tab/bot/package.json b/hello-world-bot-with-tab/bot/package.json index 7ce7746d..43dd9c6f 100644 --- a/hello-world-bot-with-tab/bot/package.json +++ b/hello-world-bot-with-tab/bot/package.json @@ -21,12 +21,14 @@ "url": "https://github.com" }, "dependencies": { - "@microsoft/adaptivecards-tools": "^1.0.0", + "adaptivecards-templating": "^2.3.1", + "adaptive-expressions": "^4.22.3", "botbuilder": "^4.17.0", "restify": "^11.1.0" }, "devDependencies": { "@types/restify": "8.5.5", + "@types/json-schema": "^7.0.15", "@types/node": "^14.0.0", "env-cmd": "^10.1.0", "ts-node": "^10.4.0", diff --git a/hello-world-bot-with-tab/bot/teamsBot.ts b/hello-world-bot-with-tab/bot/teamsBot.ts index c967f2ca..6044e9cb 100644 --- a/hello-world-bot-with-tab/bot/teamsBot.ts +++ b/hello-world-bot-with-tab/bot/teamsBot.ts @@ -7,7 +7,7 @@ import { } from "botbuilder"; import rawWelcomeCard from "./adaptiveCards/welcome.json"; import rawLearnCard from "./adaptiveCards/learn.json"; -import { AdaptiveCards } from "@microsoft/adaptivecards-tools"; +import * as ACData from "adaptivecards-templating"; export interface DataInterface { likeCount: number; @@ -35,13 +35,12 @@ export class TeamsBot extends TeamsActivityHandler { // Trigger command by IM text switch (txt) { case "welcome": { - const card = AdaptiveCards.declareWithoutData(rawWelcomeCard).render(); - await context.sendActivity({ attachments: [CardFactory.adaptiveCard(card)] }); + await context.sendActivity({ attachments: [CardFactory.adaptiveCard(rawWelcomeCard)] }); break; } case "learn": { this.likeCountObj.likeCount = 0; - const card = AdaptiveCards.declare(rawLearnCard).render(this.likeCountObj); + const card = new ACData.Template(rawLearnCard).expand({ $root: this.likeCountObj }); await context.sendActivity({ attachments: [CardFactory.adaptiveCard(card)] }); break; } @@ -61,8 +60,7 @@ export class TeamsBot extends TeamsActivityHandler { const membersAdded = context.activity.membersAdded; for (let cnt = 0; cnt < membersAdded.length; cnt++) { if (membersAdded[cnt].id) { - const card = AdaptiveCards.declareWithoutData(rawWelcomeCard).render(); - await context.sendActivity({ attachments: [CardFactory.adaptiveCard(card)] }); + await context.sendActivity({ attachments: [CardFactory.adaptiveCard(rawWelcomeCard)] }); break; } } @@ -79,7 +77,7 @@ export class TeamsBot extends TeamsActivityHandler { // The verb "userlike" is sent from the Adaptive Card defined in adaptiveCards/learn.json if (invokeValue.action.verb === "userlike") { this.likeCountObj.likeCount++; - const card = AdaptiveCards.declare(rawLearnCard).render(this.likeCountObj); + const card = new ACData.Template(rawLearnCard).expand({ $root: this.likeCountObj }); await context.updateActivity({ type: "message", id: context.activity.replyToId, diff --git a/incoming-webhook-notification/package.json b/incoming-webhook-notification/package.json index a39ca2ea..f0dadc66 100644 --- a/incoming-webhook-notification/package.json +++ b/incoming-webhook-notification/package.json @@ -19,10 +19,12 @@ "url": "https://github.com" }, "dependencies": { - "@microsoft/adaptivecards-tools": "^1.0.0", + "adaptivecards-templating": "^2.3.1", + "adaptive-expressions": "^4.22.3", "axios": "^0.26.1" }, "devDependencies": { + "@types/json-schema": "^7.0.15", "nodemon": "^2.0.7", "ts-node": "^10.4.0", "typescript": "^4.4.4" diff --git a/incoming-webhook-notification/src/index.ts b/incoming-webhook-notification/src/index.ts index 19998fc2..d6946497 100644 --- a/incoming-webhook-notification/src/index.ts +++ b/incoming-webhook-notification/src/index.ts @@ -1,4 +1,4 @@ -import { AdaptiveCards } from "@microsoft/adaptivecards-tools"; +import * as ACData from "adaptivecards-templating"; import { WebhookTarget } from "./webhookTarget"; import template from "./adaptiveCards/notification-default.json"; @@ -12,12 +12,13 @@ const webhookTarget = new WebhookTarget(new URL(webhookUrl)); * Send adaptive cards. */ webhookTarget.sendAdaptiveCard( - AdaptiveCards.declare(template).render( - { - "title": "New Event Occurred!", - "appName": "Contoso App", - "description": "Detailed description of what happened so the user knows what's going on.", - "notificationUrl" : "https://www.adaptivecards.io/" + new ACData.Template(template).expand({ + $root: { + "title": "New Event Occurred!", + "appName": "Contoso App", + "description": "Detailed description of what happened so the user knows what's going on.", + "notificationUrl": "https://www.adaptivecards.io/" + }, })) -.then(() => console.log("Send adaptive card successfully.")) -.catch(e => console.log(`Failed to send adaptive card. ${e}`)); + .then(() => console.log("Send adaptive card successfully.")) + .catch(e => console.log(`Failed to send adaptive card. ${e}`)); diff --git a/large-scale-notification/package.json b/large-scale-notification/package.json index a2f4c0d5..f1826d2a 100644 --- a/large-scale-notification/package.json +++ b/large-scale-notification/package.json @@ -25,7 +25,8 @@ "dependencies": { "@azure/data-tables": "^13.2.2", "@azure/service-bus": "^7.9.0", - "@microsoft/adaptivecards-tools": "^1.0.0", + "adaptivecards-templating": "^2.3.1", + "adaptive-expressions": "^4.22.3", "@microsoft/teamsfx": "^2.3.0", "botbuilder": "^4.18.0", "durable-functions": "^2.1.2", @@ -33,6 +34,7 @@ }, "devDependencies": { "@azure/functions": "^3.5.0", + "@types/json-schema": "^7.0.15", "@types/luxon": "^3.3.0", "axios": "^1.4.0", "azurite": "^3.16.0", diff --git a/large-scale-notification/src/httpTrigger.ts b/large-scale-notification/src/httpTrigger.ts index a5e0abb2..9a40223b 100644 --- a/large-scale-notification/src/httpTrigger.ts +++ b/large-scale-notification/src/httpTrigger.ts @@ -1,5 +1,5 @@ import { AzureFunction, Context, HttpRequest } from "@azure/functions"; -import { AdaptiveCards } from "@microsoft/adaptivecards-tools"; +import * as ACData from "adaptivecards-templating"; import notificationTemplate from "./adaptiveCards/notification-default.json"; import { CardData } from "./cardModels"; import { notificationApp } from "./internal/initialize"; @@ -23,11 +23,13 @@ const httpTrigger: AzureFunction = async function ( // to every installation. for (const target of await notificationApp.notification.installations()) { await target.sendAdaptiveCard( - AdaptiveCards.declare(notificationTemplate).render({ + new ACData.Template(notificationTemplate).expand({ + $root:{ title: "New Event Occurred!", appName: "Contoso App Notification", description: `This is a sample http-triggered notification to ${target.type}`, notificationUrl: "https://aka.ms/teamsfx-notification-new", + } }) ); diff --git a/notification-codespaces/package.json b/notification-codespaces/package.json index 1a50bed4..7094418b 100644 --- a/notification-codespaces/package.json +++ b/notification-codespaces/package.json @@ -20,7 +20,8 @@ "url": "https://github.com" }, "dependencies": { - "@microsoft/adaptivecards-tools": "^1.0.0", + "adaptivecards-templating": "^2.3.1", + "adaptive-expressions": "^4.22.3", "@microsoft/teamsfx": "^2.2.0", "botbuilder": "^4.18.0", "restify": "^10.0.0" diff --git a/notification-codespaces/src/index.js b/notification-codespaces/src/index.js index 57afc912..daf197d3 100644 --- a/notification-codespaces/src/index.js +++ b/notification-codespaces/src/index.js @@ -1,6 +1,6 @@ const notificationTemplate = require("./adaptiveCards/notification-default.json"); const { notificationApp } = require("./internal/initialize"); -const { AdaptiveCards } = require("@microsoft/adaptivecards-tools"); +const ACData = require("adaptivecards-templating"); const { TeamsBot } = require("./teamsBot"); const restify = require("restify"); @@ -29,11 +29,13 @@ server.post( for (const target of installations) { await target.sendAdaptiveCard( - AdaptiveCards.declare(notificationTemplate).render({ - title: "New Event Occurred!", - appName: "Contoso App Notification", - description: `This is a sample http-triggered notification to ${target.type}`, - notificationUrl: "https://aka.ms/teamsfx-notification-new", + new ACData.Template(notificationTemplate).expand({ + $root: { + title: "New Event Occurred!", + appName: "Contoso App Notification", + description: `This is a sample time-triggered notification (${timeStamp}).`, + notificationUrl: "https://aka.ms/teamsfx-notification-new", + } }) ); diff --git a/stocks-update-notification-bot/package.json b/stocks-update-notification-bot/package.json index 6d396a91..f433067c 100644 --- a/stocks-update-notification-bot/package.json +++ b/stocks-update-notification-bot/package.json @@ -23,13 +23,15 @@ "url": "https://github.com" }, "dependencies": { - "@microsoft/adaptivecards-tools": "^1.0.0", + "adaptivecards-templating": "^2.3.1", + "adaptive-expressions": "^4.22.3", "@microsoft/teamsfx": "^2.0.0", "botbuilder": "^4.18.0", "lodash": "^4.17.21" }, "devDependencies": { "@azure/functions": "^1.2.3", + "@types/json-schema": "^7.0.15", "@types/lodash": "^4.14.182", "@types/node": "^14.0.0", "azurite": "^3.16.0", diff --git a/stocks-update-notification-bot/src/timerTrigger.ts b/stocks-update-notification-bot/src/timerTrigger.ts index 3a862774..b13788a7 100644 --- a/stocks-update-notification-bot/src/timerTrigger.ts +++ b/stocks-update-notification-bot/src/timerTrigger.ts @@ -1,5 +1,5 @@ import { AzureFunction, Context } from '@azure/functions'; -import { AdaptiveCards } from '@microsoft/adaptivecards-tools'; +import * as ACData from "adaptivecards-templating"; import { AxiosInstance, BotBuilderCloudAdapter } from '@microsoft/teamsfx'; import ConversationBot = BotBuilderCloudAdapter.ConversationBot; import TeamsBotInstallation = BotBuilderCloudAdapter.TeamsBotInstallation; @@ -19,7 +19,7 @@ const timerTrigger: AzureFunction = async function (context: Context, myTimer: a .then(quote => addCompanyName(quote)('Microsoft Corporation')) .then(quote => getInstallations(notificationApp) - .then(targets => targets.map(target => sendCard(target)(AdaptiveCards)(template)(quote))) + .then(targets => targets.map(target => sendCard(target)()(template)(quote))) ) .catch(err => handleError(err)(context)); @@ -89,10 +89,10 @@ const getInstallations = const sendCard = (target: TeamsBotInstallation) => - (ac: typeof AdaptiveCards) => + () => (template: object) => (quote: GlobalQuote): Promise => - target.sendAdaptiveCard(ac.declare(template).render(quote as T)); + target.sendAdaptiveCard(new ACData.Template(template).expand({ $root: quote })); const handleError = (err: Error) => diff --git a/test-tool-sample-app/package.json b/test-tool-sample-app/package.json index babbbde3..b897230e 100644 --- a/test-tool-sample-app/package.json +++ b/test-tool-sample-app/package.json @@ -20,7 +20,8 @@ "url": "https://github.com" }, "dependencies": { - "@microsoft/adaptivecards-tools": "^1.0.0", + "adaptivecards-templating": "^2.3.1", + "adaptive-expressions": "^4.22.3", "@microsoft/teamsfx": "^2.3.1", "botbuilder": "^4.18.0", "restify": "^10", @@ -29,6 +30,7 @@ }, "devDependencies": { "@types/restify": "8.4.2", + "@types/json-schema": "^7.0.15", "env-cmd": "^10.1.0", "nodemon": "^2.0.7", "shx": "^0.3.4", diff --git a/test-tool-sample-app/src/cardActions/assignIncidentActionHandler.ts b/test-tool-sample-app/src/cardActions/assignIncidentActionHandler.ts index 7e5f388c..be54218c 100644 --- a/test-tool-sample-app/src/cardActions/assignIncidentActionHandler.ts +++ b/test-tool-sample-app/src/cardActions/assignIncidentActionHandler.ts @@ -1,4 +1,4 @@ -import { AdaptiveCards } from "@microsoft/adaptivecards-tools"; +import * as ACData from "adaptivecards-templating"; import { TurnContext, InvokeResponse, TeamsInfo } from "botbuilder"; import { TeamsFxAdaptiveCardActionHandler, InvokeResponseFactory } from "@microsoft/teamsfx"; import responseCard from "../adaptiveCards/incidentReportedResponse.json"; diff --git a/test-tool-sample-app/src/cardActions/doStuffActionHandler.ts b/test-tool-sample-app/src/cardActions/doStuffActionHandler.ts index abb99f6b..18cd1666 100644 --- a/test-tool-sample-app/src/cardActions/doStuffActionHandler.ts +++ b/test-tool-sample-app/src/cardActions/doStuffActionHandler.ts @@ -1,4 +1,4 @@ -import { AdaptiveCards } from "@microsoft/adaptivecards-tools"; +import * as ACData from "adaptivecards-templating"; import { TurnContext, InvokeResponse } from "botbuilder"; import { TeamsFxAdaptiveCardActionHandler, InvokeResponseFactory } from "@microsoft/teamsfx"; import responseCard from "../adaptiveCards/doStuffActionResponse.json"; diff --git a/test-tool-sample-app/src/cardActions/userLikeActionHandler.ts b/test-tool-sample-app/src/cardActions/userLikeActionHandler.ts index 96845f72..4f5ab7c5 100644 --- a/test-tool-sample-app/src/cardActions/userLikeActionHandler.ts +++ b/test-tool-sample-app/src/cardActions/userLikeActionHandler.ts @@ -1,4 +1,4 @@ -import { AdaptiveCards } from "@microsoft/adaptivecards-tools"; +import * as ACData from "adaptivecards-templating"; import { TurnContext, InvokeResponse } from "botbuilder"; import { TeamsFxAdaptiveCardActionHandler, InvokeResponseFactory, AdaptiveCardResponse } from "@microsoft/teamsfx"; import learnCard from "../adaptiveCards/learn.json"; @@ -14,7 +14,7 @@ export class UserLikeActionHandler implements TeamsFxAdaptiveCardActionHandler { async handleActionInvoked(context: TurnContext, actionData: any): Promise { console.log(actionData); const count = parseInt(actionData['likeCount'], 10); - const cardJson = AdaptiveCards.declare(learnCard).render({'likeCount': `${count+1}`}); + const cardJson = new ACData.Template(learnCard).expand({ $root: {'likeCount': `${count+1}`} }); return InvokeResponseFactory.adaptiveCard(cardJson); } } diff --git a/test-tool-sample-app/src/commands/helloworldCommandHandler.ts b/test-tool-sample-app/src/commands/helloworldCommandHandler.ts index 9fc8ef30..245b6756 100644 --- a/test-tool-sample-app/src/commands/helloworldCommandHandler.ts +++ b/test-tool-sample-app/src/commands/helloworldCommandHandler.ts @@ -1,6 +1,6 @@ import { Activity, CardFactory, MessageFactory, TurnContext } from "botbuilder"; import { CommandMessage, TeamsFxBotCommandHandler, TriggerPatterns } from "@microsoft/teamsfx"; -import { AdaptiveCards } from "@microsoft/adaptivecards-tools"; +import * as ACData from "adaptivecards-templating"; import helloWorldCard from "../adaptiveCards/helloworldCommandResponse.json"; import { HelloWorldCardData } from "../cardModels"; @@ -23,7 +23,7 @@ export class HelloWorldCommandHandler implements TeamsFxBotCommandHandler { body: "Congratulations! Your hello world bot is running. Click the button below to trigger an action.", }; - const cardJson = AdaptiveCards.declare(helloWorldCard).render(cardData); + const cardJson = new ACData.Template(helloWorldCard).expand({ $root: cardData }); return MessageFactory.attachment(CardFactory.adaptiveCard(cardJson)); } } diff --git a/test-tool-sample-app/src/commands/helpCommandHandler.ts b/test-tool-sample-app/src/commands/helpCommandHandler.ts index 97dfb40c..f9057a08 100644 --- a/test-tool-sample-app/src/commands/helpCommandHandler.ts +++ b/test-tool-sample-app/src/commands/helpCommandHandler.ts @@ -1,7 +1,7 @@ import { Activity, CardFactory, MessageFactory, TurnContext } from "botbuilder"; import { CommandMessage, TeamsFxBotCommandHandler, TriggerPatterns } from "@microsoft/teamsfx"; import helpResponse from "../adaptiveCards/helpResponse.json"; -import { AdaptiveCards } from "@microsoft/adaptivecards-tools"; +import * as ACData from "adaptivecards-templating"; import { ActionCommands } from "../messageExtension/actionCommands"; import { SearchCommands } from "../messageExtension/searchCommands"; @@ -54,7 +54,7 @@ export class HelpCommandHandler implements TeamsFxBotCommandHandler { ] } - const cardJson = AdaptiveCards.declare(helpResponse).render(data); + const cardJson = new ACData.Template(helpResponse).expand({ $root: data }); return MessageFactory.attachment(CardFactory.adaptiveCard(cardJson)); } } diff --git a/test-tool-sample-app/src/commands/heroCardCommandHandler.ts b/test-tool-sample-app/src/commands/heroCardCommandHandler.ts index 7ad88173..cb8d1ba6 100644 --- a/test-tool-sample-app/src/commands/heroCardCommandHandler.ts +++ b/test-tool-sample-app/src/commands/heroCardCommandHandler.ts @@ -1,7 +1,6 @@ import { Activity, CardFactory, MessageFactory, TurnContext } from "botbuilder"; import { CommandMessage, TeamsFxBotCommandHandler, TriggerPatterns } from "@microsoft/teamsfx"; import * as helpResponse from "../adaptiveCards/helpResponse.json"; -import { AdaptiveCards } from "@microsoft/adaptivecards-tools"; export class HeroCardCommandHandler implements TeamsFxBotCommandHandler { triggerPatterns: TriggerPatterns = "herocard"; diff --git a/test-tool-sample-app/src/commands/learnCommandHandler.ts b/test-tool-sample-app/src/commands/learnCommandHandler.ts index 6d7bbe9e..19e027d0 100644 --- a/test-tool-sample-app/src/commands/learnCommandHandler.ts +++ b/test-tool-sample-app/src/commands/learnCommandHandler.ts @@ -1,6 +1,6 @@ import { Activity, CardFactory, MessageFactory, TurnContext } from "botbuilder"; import { CommandMessage, TeamsFxBotCommandHandler, TriggerPatterns } from "@microsoft/teamsfx"; -import { AdaptiveCards } from "@microsoft/adaptivecards-tools"; +import * as ACData from "adaptivecards-templating"; import learnCard from "../adaptiveCards/learn.json"; export class LearnCommandHandler implements TeamsFxBotCommandHandler { @@ -16,7 +16,7 @@ export class LearnCommandHandler implements TeamsFxBotCommandHandler { "likeCount": '0' }; - const cardJson = AdaptiveCards.declare(learnCard).render(cardData); + const cardJson = new ACData.Template(learnCard).expand({ $root: cardData }); return MessageFactory.attachment(CardFactory.adaptiveCard(cardJson)); } } diff --git a/test-tool-sample-app/src/commands/reportIncidentCommandHandler.ts b/test-tool-sample-app/src/commands/reportIncidentCommandHandler.ts index 9e62b29b..43ab040e 100644 --- a/test-tool-sample-app/src/commands/reportIncidentCommandHandler.ts +++ b/test-tool-sample-app/src/commands/reportIncidentCommandHandler.ts @@ -1,6 +1,6 @@ import { Activity, CardFactory, MessageFactory, TurnContext } from "botbuilder"; import { CommandMessage, TeamsFxBotCommandHandler, TriggerPatterns } from "@microsoft/teamsfx"; -import { AdaptiveCards } from "@microsoft/adaptivecards-tools"; +import * as ACData from "adaptivecards-templating"; import reportIncidentCard from "../adaptiveCards/reportIncidentResponse.json"; export class ReportIncidentCommandHandler implements TeamsFxBotCommandHandler { @@ -12,7 +12,6 @@ export class ReportIncidentCommandHandler implements TeamsFxBotCommandHandler { ): Promise | void> { console.log(`Bot received message: ${message.text}`); - const cardJson = AdaptiveCards.declareWithoutData(reportIncidentCard).render(); - return MessageFactory.attachment(CardFactory.adaptiveCard(cardJson)); + return MessageFactory.attachment(CardFactory.adaptiveCard(reportIncidentCard)); } } diff --git a/test-tool-sample-app/src/commands/showCardCommandHandler.ts b/test-tool-sample-app/src/commands/showCardCommandHandler.ts index b3f41960..abe70da6 100644 --- a/test-tool-sample-app/src/commands/showCardCommandHandler.ts +++ b/test-tool-sample-app/src/commands/showCardCommandHandler.ts @@ -6,7 +6,7 @@ import * as listCard from "../adaptiveCards/list.json"; import * as factsetCard from "../adaptiveCards/factset.json"; import * as columnsetCard from "../adaptiveCards/columnset.json"; import { FactsetData, ListData, ColumnsetData } from "../cardModels"; -import { AdaptiveCards } from "@microsoft/adaptivecards-tools"; +import * as ACData from "adaptivecards-templating"; const listData: ListData = { title: "New Event Occurred!", @@ -77,7 +77,7 @@ export class ShowCardCommandHandler implements TeamsFxBotCommandHandler { } const [cardTemplate, cardData] = cards[cardName]; - const cardJson = AdaptiveCards.declare(cardTemplate).render(cardData); + const cardJson = new ACData.Template(cardTemplate).expand({ $root: cardData }); return MessageFactory.attachment(CardFactory.adaptiveCard(cardJson)); } } diff --git a/test-tool-sample-app/src/commands/submitCommandHandler.ts b/test-tool-sample-app/src/commands/submitCommandHandler.ts index 2a3f1747..276ecd11 100644 --- a/test-tool-sample-app/src/commands/submitCommandHandler.ts +++ b/test-tool-sample-app/src/commands/submitCommandHandler.ts @@ -1,6 +1,6 @@ import { Activity, CardFactory, MessageFactory, TurnContext } from "botbuilder"; import { CommandMessage, TeamsFxBotCommandHandler, TriggerPatterns } from "@microsoft/teamsfx"; -import { AdaptiveCards } from "@microsoft/adaptivecards-tools"; +import * as ACData from "adaptivecards-templating"; import submitObjectCard from "../adaptiveCards/submit.json"; /** @@ -15,7 +15,7 @@ export class SubmitCommandHandler implements TeamsFxBotCommandHandler { message: CommandMessage ): Promise | void> { console.log(`Bot received message: ${message.text}`); - const cardJson = AdaptiveCards.declare(submitObjectCard).render({}); + const cardJson = new ACData.Template(submitObjectCard).expand({ $root: {} }); return MessageFactory.attachment(CardFactory.adaptiveCard(cardJson)); } } diff --git a/test-tool-sample-app/src/index.ts b/test-tool-sample-app/src/index.ts index 9163098b..bc1a9b99 100644 --- a/test-tool-sample-app/src/index.ts +++ b/test-tool-sample-app/src/index.ts @@ -1,4 +1,4 @@ -import { AdaptiveCards } from "@microsoft/adaptivecards-tools"; +import * as ACData from "adaptivecards-templating"; import * as restify from "restify"; import { conversationBot } from "./internal/initialize"; import notificationTemplate from "./adaptiveCards/notification-default.json"; diff --git a/test-tool-sample-app/src/simpleBot.ts b/test-tool-sample-app/src/simpleBot.ts index 4ff96928..5149fc77 100644 --- a/test-tool-sample-app/src/simpleBot.ts +++ b/test-tool-sample-app/src/simpleBot.ts @@ -19,7 +19,7 @@ import actionMEFetchTaskCard1 from "./adaptiveCards/actionMEFetchTaskCard1.json" import actionMEFetchTaskCard2 from "./adaptiveCards/actionMEFetchTaskCard2.json"; import actionMESubmitCard from "./adaptiveCards/actionMESubmitCard.json"; import actionMESubmitStaticCard from "./adaptiveCards/actionMESubmitStaticCard.json"; -import { AdaptiveCards } from "@microsoft/adaptivecards-tools"; +import * as ACData from "adaptivecards-templating"; import helloWorldCard from "./adaptiveCards/linkUnfurlingCard.json"; import o365ConnectorCard from "./adaptiveCards/o365ConnectorCard.json"; import { ActionCommandId } from "./messageExtension/actionCommands"; @@ -129,7 +129,7 @@ export class SimpleBot extends TeamsActivityHandler { const imageUrl = `https://picsum.photos/seed/${Math.random()}/800/500`; const heroCard = CardFactory.heroCard(obj.package.name, [imageUrl], undefined, { subtitle: obj.package.version, text: obj.package.description }) const thumbnailCard = CardFactory.thumbnailCard(obj.package.name, [imageUrl], undefined, { subtitle: obj.package.version, text: obj.package.description }); - const cardJson = AdaptiveCards.declare(npmSearchResultCard).render({ ...obj.package, imageUrl }); + const cardJson = new ACData.Template(npmSearchResultCard).expand({ $root: { ...obj.package, imageUrl } }); const adaptiveCard = CardFactory.adaptiveCard(cardJson); if (query.commandId === SearchCommandId.Tap) { heroCard.content.tap = { type: 'invoke', value: { description: obj.package.description } }; @@ -184,7 +184,7 @@ export class SimpleBot extends TeamsActivityHandler { case ActionCommandId.Default: default: const title = action.messagePayload?.body?.content || ""; - const cardJson = AdaptiveCards.declare(actionMEFetchTaskCard).render({ title }); + const cardJson = new ACData.Template(actionMEFetchTaskCard).expand({ $root: title }); return { task: { @@ -213,7 +213,7 @@ export class SimpleBot extends TeamsActivityHandler { case ActionCommandId.StaticCard: const fields = Object.entries(action.data) .map(([k, v]) => ({ ["name"]: k, ["value"]: v })); - const card = AdaptiveCards.declare(actionMESubmitStaticCard).render({ fields }); + const card = new ACData.Template(actionMESubmitStaticCard).expand({ $root: fields }); return { composeExtension: { type: 'result', @@ -258,7 +258,7 @@ export class SimpleBot extends TeamsActivityHandler { case ActionCommandId.MultipleCards: if (action.data?.hasNext) { - const cardJson = AdaptiveCards.declare(actionMEFetchTaskCard2).render(data); + const cardJson = new ACData.Template(actionMEFetchTaskCard2).expand({ $root: data }); return { task: { type: 'continue', @@ -272,7 +272,7 @@ export class SimpleBot extends TeamsActivityHandler { case ActionCommandId.Default: default: - const cardJson = AdaptiveCards.declare(actionMESubmitCard).render(data); + const cardJson = new ACData.Template(actionMESubmitCard).expand({ $root: data }); return { composeExtension: { type: 'result', @@ -293,7 +293,7 @@ export class SimpleBot extends TeamsActivityHandler { "https://raw.githubusercontent.com/microsoft/botframework-sdk/master/icon.png", ]); - const cardJson = AdaptiveCards.declare(helloWorldCard).render({ link: query.url }) + const cardJson = new ACData.Template(helloWorldCard).expand({ $root: { link: query.url } }); const attachment = { ...CardFactory.adaptiveCard(cardJson), // preview: previewCard @@ -328,7 +328,7 @@ export class SimpleBot extends TeamsActivityHandler { "https://raw.githubusercontent.com/microsoft/botframework-sdk/master/icon.png", ]); - const cardJson = AdaptiveCards.declare(helloWorldCard).render({ link: query.url }) + const cardJson = new ACData.Template(helloWorldCard).expand({ $root: { link: query.url } }); const attachment = { ...CardFactory.adaptiveCard(cardJson), preview: previewCard }; return { From f006a495f5adb7f50dd746b12773128ea7be642e Mon Sep 17 00:00:00 2001 From: yukun-dong Date: Fri, 9 Aug 2024 14:07:41 +0800 Subject: [PATCH 2/3] feat: update --- NPM-search-message-extension-codespaces/package.json | 2 -- adaptive-card-notification/package.json | 1 + 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/NPM-search-message-extension-codespaces/package.json b/NPM-search-message-extension-codespaces/package.json index 25e8fc85..f33f895e 100644 --- a/NPM-search-message-extension-codespaces/package.json +++ b/NPM-search-message-extension-codespaces/package.json @@ -19,8 +19,6 @@ "test": "echo \"Error: no test specified\" && exit 1" }, "dependencies": { - "adaptivecards-templating": "^2.3.1", - "adaptive-expressions": "^4.22.3", "botbuilder": "^4.18.0", "isomorphic-fetch": "^3.0.0", "restify": "^10.0.0" diff --git a/adaptive-card-notification/package.json b/adaptive-card-notification/package.json index 859a6f38..f33a259b 100644 --- a/adaptive-card-notification/package.json +++ b/adaptive-card-notification/package.json @@ -25,6 +25,7 @@ "@azure/storage-blob": "^12.9.0", "@azure/identity": "^4.4.0", "adaptivecards-templating": "^2.3.1", + "adaptive-expressions": "^4.22.3", "@microsoft/teamsfx": "^2.0.0", "botbuilder": "^4.18.0" }, From 9d9a010969a7197c72a5a52d1506d142bc1657d3 Mon Sep 17 00:00:00 2001 From: yukun-dong Date: Mon, 12 Aug 2024 14:52:57 +0800 Subject: [PATCH 3/3] feat: update --- .../src/mentionNotificationHttpTrigger.ts | 2 +- .../src/cardActions/assignIncidentActionHandler.ts | 2 +- .../src/cardActions/doStuffActionHandler.ts | 2 +- test-tool-sample-app/src/index.ts | 13 ++++++++----- 4 files changed, 11 insertions(+), 8 deletions(-) diff --git a/adaptive-card-notification/src/mentionNotificationHttpTrigger.ts b/adaptive-card-notification/src/mentionNotificationHttpTrigger.ts index 89a7409f..1f323926 100644 --- a/adaptive-card-notification/src/mentionNotificationHttpTrigger.ts +++ b/adaptive-card-notification/src/mentionNotificationHttpTrigger.ts @@ -40,7 +40,7 @@ const httpTrigger: AzureFunction = async function ( data.userId = member.account.email; data.userName = member.account.name; await target.sendAdaptiveCard( - AdaptiveCards.declare(notificationTemplate).render(data) + new ACData.Template(notificationTemplate).expand({ $root: data }) ); } } while (memberContinuationToken); diff --git a/test-tool-sample-app/src/cardActions/assignIncidentActionHandler.ts b/test-tool-sample-app/src/cardActions/assignIncidentActionHandler.ts index be54218c..3271d712 100644 --- a/test-tool-sample-app/src/cardActions/assignIncidentActionHandler.ts +++ b/test-tool-sample-app/src/cardActions/assignIncidentActionHandler.ts @@ -15,7 +15,7 @@ export class AssignIncidentActionHandler implements TeamsFxAdaptiveCardActionHan viewDetailsUrl, }); - const cardJson = AdaptiveCards.declare(responseCard).render(data); + const cardJson = new ACData.Template(responseCard).expand({$root: data}); return InvokeResponseFactory.adaptiveCard(cardJson); } } diff --git a/test-tool-sample-app/src/cardActions/doStuffActionHandler.ts b/test-tool-sample-app/src/cardActions/doStuffActionHandler.ts index 18cd1666..d30dc8d3 100644 --- a/test-tool-sample-app/src/cardActions/doStuffActionHandler.ts +++ b/test-tool-sample-app/src/cardActions/doStuffActionHandler.ts @@ -24,7 +24,7 @@ export class DoStuffActionHandler implements TeamsFxAdaptiveCardActionHandler { body: "Congratulations! Your task is processed successfully.", }; - const cardJson = AdaptiveCards.declare(responseCard).render(cardData); + const cardJson = new ACData.Template(responseCard).expand({ $root: cardData }); return InvokeResponseFactory.adaptiveCard(cardJson); /** diff --git a/test-tool-sample-app/src/index.ts b/test-tool-sample-app/src/index.ts index bc1a9b99..164a25c8 100644 --- a/test-tool-sample-app/src/index.ts +++ b/test-tool-sample-app/src/index.ts @@ -31,11 +31,14 @@ server.post( // to every installation. for (const target of await conversationBot.notification.installations()) { await target.sendAdaptiveCard( - AdaptiveCards.declare(notificationTemplate).render({ - title: "New Event Occurred!", - appName: "Contoso App Notification", - description: `This is a sample http-triggered notification to ${target.type}`, - notificationUrl: "https://www.adaptivecards.io/", + new ACData.Template(notificationTemplate).expand({ + $root: + { + title: "New Event Occurred!", + appName: "Contoso App Notification", + description: `This is a sample http-triggered notification to ${target.type}`, + notificationUrl: "https://www.adaptivecards.io/", + } }) );