From 34112b3febb5df79828e3fef26da66d6c82c234c Mon Sep 17 00:00:00 2001 From: ramukaritik Date: Mon, 6 May 2024 20:49:29 +0530 Subject: [PATCH] moved powerPagesNavigationActionsHub to common. This helps us to consume the following on desktop also. --- package.json | 3 +- src/client/extension.ts | 13 ++++++ src/common/TelemetryConstants.ts | 4 ++ src/common/Utils.ts | 5 ++- src/common/webViews/constants.ts | 11 +++++ .../webViews/powerPagesNavigationProvider.ts | 44 ++++++++++++------- src/web/client/extension.ts | 9 ++-- 7 files changed, 66 insertions(+), 23 deletions(-) create mode 100644 src/common/webViews/constants.ts rename src/{web/client => common}/webViews/powerPagesNavigationProvider.ts (80%) diff --git a/package.json b/package.json index 73aace77e..c1ad7b6ff 100644 --- a/package.json +++ b/package.json @@ -947,7 +947,6 @@ { "id": "powerpages.powerPagesFileExplorer", "name": "%microsoft-powerplatform-portals.navigation-loop.powerPagesFileExplorer.title%", - "when": "isWeb && virtualWorkspace", "icon": "./src/web/client/assets/powerPages.svg", "contextualTitle": "%microsoft-powerplatform-portals.navigation-loop.powerPagesFileExplorer.title%", "visibility": "visible" @@ -1124,4 +1123,4 @@ "bufferutil": "^4.0.6", "utf-8-validate": "^5.0.9" } -} \ No newline at end of file +} diff --git a/src/client/extension.ts b/src/client/extension.ts index 12def86aa..7259f276c 100644 --- a/src/client/extension.ts +++ b/src/client/extension.ts @@ -40,6 +40,7 @@ import { oneDSLoggerWrapper } from "../common/OneDSLoggerTelemetry/oneDSLoggerWr import { OrgChangeNotifier, orgChangeEvent } from "../common/OrgChangeNotifier"; import { ActiveOrgOutput } from "./pac/PacTypes"; import { telemetryEventNames } from "./telemetry/TelemetryEventNames"; +import { PowerPagesNavigationProvider } from "../common/webViews/powerPagesNavigationProvider"; let client: LanguageClient; let _context: vscode.ExtensionContext; @@ -114,6 +115,18 @@ export async function activate( ) ); + // portals action hub + const powerPagesNavigationProvider = new PowerPagesNavigationProvider(); + _context.subscriptions.push( + vscode.window.registerTreeDataProvider('powerpages.powerPagesFileExplorer', powerPagesNavigationProvider) + ); + _context.subscriptions.push( + vscode.commands.registerCommand('powerpages.powerPagesFileExplorer.powerPagesRuntimePreview', () => powerPagesNavigationProvider.previewPowerPageSite("https://site-zih6k.powerappsportals.com/")) + ); + _context.subscriptions.push( + vscode.commands.registerCommand('powerpages.powerPagesFileExplorer.backToStudio', () => powerPagesNavigationProvider.backToStudio("https://make.powerpages.microsoft.com/e/1fdc4473-a512-e14e-8326-a5b8a3fa024f/sites/37de2c85-bdf3-48b1-b262-df1f3a152ac3/pages#webpages/1f653e2b-0768-46b7-8047-2cf373f1fa17")) + ); + // registering bootstrapdiff command _context.subscriptions.push( vscode.commands.registerCommand('microsoft-powerapps-portals.bootstrap-diff', async () => { diff --git a/src/common/TelemetryConstants.ts b/src/common/TelemetryConstants.ts index 6cc6353f4..c1119b7e1 100644 --- a/src/common/TelemetryConstants.ts +++ b/src/common/TelemetryConstants.ts @@ -13,3 +13,7 @@ export const VSCODE_EXTENSION_NPS_AUTHENTICATION_COMPLETED = "VSCodeExtensionNPS export const VSCODE_EXTENSION_NPS_AUTHENTICATION_FAILED = "VSCodeExtensionNPSAuthenticationFailed"; export const VSCODE_EXTENSION_GRAPH_CLIENT_AUTHENTICATION_FAILED = "VSCodeExtensionGraphClientAuthenticationFailed"; export const VSCODE_EXTENSION_GRAPH_CLIENT_AUTHENTICATION_COMPLETED = "VSCodeExtensionGraphClientAuthenticationCompleted"; + +// Telemetry Event Names for WebViews +export const WEB_EXTENSION_PREVIEW_SITE_TRIGGERED = "WebExtensionPreviewSiteTriggered"; +export const WEB_EXTENSION_BACK_TO_STUDIO_TRIGGERED = "WebExtensionBackToStudioTriggered"; diff --git a/src/common/Utils.ts b/src/common/Utils.ts index 0eddc9e2b..e47ae6c64 100644 --- a/src/common/Utils.ts +++ b/src/common/Utils.ts @@ -58,7 +58,6 @@ export function getNonce() { return text; } - export function getUserName(user: string) { const parts = user.split(" - "); return parts[0]; @@ -152,3 +151,7 @@ export async function createAuthProfileExp(pacWrapper: PacWrapper | undefined) { return; } } + +export function isStringUndefinedOrEmpty(value: string | undefined): boolean { + return value === undefined || value === ''; +} diff --git a/src/common/webViews/constants.ts b/src/common/webViews/constants.ts new file mode 100644 index 000000000..c190dd08d --- /dev/null +++ b/src/common/webViews/constants.ts @@ -0,0 +1,11 @@ +/* + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + */ + +export enum httpMethod { + PATCH = "PATCH", + GET = "GET", + POST = "POST", + DELETE = "DELETE", +} diff --git a/src/web/client/webViews/powerPagesNavigationProvider.ts b/src/common/webViews/powerPagesNavigationProvider.ts similarity index 80% rename from src/web/client/webViews/powerPagesNavigationProvider.ts rename to src/common/webViews/powerPagesNavigationProvider.ts index 1e538e61e..8f7935c34 100644 --- a/src/web/client/webViews/powerPagesNavigationProvider.ts +++ b/src/common/webViews/powerPagesNavigationProvider.ts @@ -5,10 +5,12 @@ import * as vscode from 'vscode'; import * as path from 'path'; -import WebExtensionContext from "../WebExtensionContext"; -import { httpMethod, queryParameters } from '../common/constants'; -import { getBackToStudioURL, isStringUndefinedOrEmpty } from '../utilities/commonUtil'; -import { telemetryEventNames } from '../telemetry/constants'; +import WebExtensionContext from "../../web/client/WebExtensionContext"; +import { httpMethod } from './constants'; +import { isStringUndefinedOrEmpty } from '../Utils'; +import { WEB_EXTENSION_BACK_TO_STUDIO_TRIGGERED, WEB_EXTENSION_PREVIEW_SITE_TRIGGERED } from '../TelemetryConstants'; + +declare const IS_DESKTOP: string | undefined; export class PowerPagesNavigationProvider implements vscode.TreeDataProvider { @@ -60,15 +62,14 @@ export class PowerPagesNavigationProvider implements vscode.TreeDataProvider { + async previewPowerPageSite(websitePreviewUrl: string): Promise { let requestSentAtTime = new Date().getTime(); - const websitePreviewUrl = WebExtensionContext.urlParametersMap.get(queryParameters.WEBSITE_PREVIEW_URL) as string; if (isStringUndefinedOrEmpty(websitePreviewUrl)) { vscode.window.showErrorMessage(vscode.l10n.t("Preview site URL is not available")); WebExtensionContext.telemetry.sendErrorTelemetry( - telemetryEventNames.WEB_EXTENSION_PREVIEW_SITE_TRIGGERED, + WEB_EXTENSION_PREVIEW_SITE_TRIGGERED, vscode.l10n.t("Preview site URL is not available") ); return; @@ -84,7 +85,12 @@ export class PowerPagesNavigationProvider implements vscode.TreeDataProvider { + let dataverseAccessToken = undefined; + + if (IS_DESKTOP) { + // get dataverseAccessToken for desktop + } else { + dataverseAccessToken = WebExtensionContext.dataverseAccessToken; + } + const response = await WebExtensionContext.concurrencyHandler.handleRequest(requestUrl, { headers: { - authorization: "Bearer " + WebExtensionContext.dataverseAccessToken, + authorization: "Bearer " + dataverseAccessToken, 'Accept': '*/*', 'Content-Type': 'text/plain', }, @@ -122,23 +136,21 @@ export class PowerPagesNavigationProvider implements vscode.TreeDataProvider powerPagesNavigationProvider.previewPowerPageSite()); - vscode.commands.registerCommand('powerpages.powerPagesFileExplorer.backToStudio', () => powerPagesNavigationProvider.backToStudio()); + const websitePreviewUrl = WebExtensionContext.urlParametersMap.get(queryParameters.WEBSITE_PREVIEW_URL) as string; + vscode.commands.registerCommand('powerpages.powerPagesFileExplorer.powerPagesRuntimePreview', () => powerPagesNavigationProvider.previewPowerPageSite(websitePreviewUrl)); + vscode.commands.registerCommand('powerpages.powerPagesFileExplorer.backToStudio', () => powerPagesNavigationProvider.backToStudio(getBackToStudioURL())); WebExtensionContext.telemetry.sendInfoTelemetry(telemetryEventNames.WEB_EXTENSION_POWER_PAGES_WEB_VIEW_REGISTERED); }