import { getWidgetTheme } from "../utils/getWidgetTheme"; import { WidgetDoneCallback } from "../../types/WidgetDoneCallback"; import { handleImplicitData } from "../utils/handleImplicitData"; import { renderSuccessfulFlowCreationPage } from "./successfulFlowCreationPage/successfulFlowCreationPage"; import { hideFlowWidget, showFlowWidget } from "../utils/showWidget"; import { getPowerAutomateAccessToken, isTokenExpired } from "../utils/tokenUtils"; declare var MsFlowSdk: any; export function loadTemplatesWidget(endpoint: string, flowToken: string, templateDefinition: string) { const sdk = new MsFlowSdk({ hostName: endpoint, locale: Office.context.displayLanguage || 'en-us', hostId: 'ExcelSDX_OfficeCopilotExcel', hostLocale: Office.context.displayLanguage, hostVersion: Office.context.diagnostics.version, hostPlatform: Office.context.platform.toString(), enableWidgetV2: true, }); const widgetRenderParams = { container: 'flow-div', enableOnBehalfOfTokens: true, widgetStyleSettings: { themeName: getWidgetTheme(), } }; const widgetInstance = sdk.renderWidget('flowCreation', widgetRenderParams); widgetInstance.listen('GET_ACCESS_TOKEN', async (_requestParams: any, widgetDoneCallback: WidgetDoneCallback) => { // If the current token is expired, get a new one if (isTokenExpired(flowToken)) { const tokenResponse = await getPowerAutomateAccessToken(); flowToken = tokenResponse.accessToken; } widgetDoneCallback(null, { token: flowToken }); }); widgetInstance.listen('WIDGET_READY', () => { showFlowWidget(); widgetInstance.notify("createFlowFromTemplateDefinition", { templateDefinition }); }); widgetInstance.listen('GET_IMPLICIT_DATA', (requestParam: { data: { implicitData?: object } }, widgetDoneCallback: WidgetDoneCallback) => { handleImplicitData(requestParam.data, widgetDoneCallback) }); widgetInstance.listen('FLOW_CREATION_SUCCEEDED', () => { hideFlowWidget(); renderSuccessfulFlowCreationPage(templateDefinition); }); }