From b2408d05c5afe13e1decb8f2bff49a5e2c3afff5 Mon Sep 17 00:00:00 2001 From: Eric Amodio Date: Sat, 26 Aug 2023 00:05:47 -0400 Subject: [PATCH] Adds `webviewId` to all webview state Adds `data-vscode-context` w/ a webview id property for context menus --- src/plus/webviews/account/accountWebview.ts | 1 + src/plus/webviews/account/protocol.ts | 2 ++ src/plus/webviews/focus/focusWebview.ts | 6 ++++++ src/plus/webviews/focus/protocol.ts | 2 ++ src/plus/webviews/graph/graphWebview.ts | 5 +++-- src/plus/webviews/graph/protocol.ts | 2 ++ src/plus/webviews/timeline/protocol.ts | 2 ++ src/plus/webviews/timeline/timelineWebview.ts | 3 +++ src/webviews/apps/commitDetails/commitDetails.html | 6 +++++- src/webviews/apps/home/home.html | 2 +- src/webviews/apps/plus/account/account.html | 6 +++++- src/webviews/apps/plus/focus/focus.html | 2 +- src/webviews/apps/plus/graph/graph.html | 2 +- src/webviews/apps/plus/timeline/timeline.html | 2 +- src/webviews/apps/rebase/rebase.html | 2 +- src/webviews/apps/settings/settings.html | 2 +- src/webviews/apps/shared/appBase.ts | 8 +++++++- src/webviews/apps/welcome/welcome.html | 6 +++++- src/webviews/commitDetails/commitDetailsWebview.ts | 1 + src/webviews/commitDetails/protocol.ts | 2 ++ src/webviews/home/homeWebview.ts | 1 + src/webviews/home/protocol.ts | 2 ++ src/webviews/rebase/protocol.ts | 2 ++ src/webviews/rebase/rebaseEditor.ts | 2 ++ src/webviews/settings/protocol.ts | 2 ++ src/webviews/settings/settingsWebview.ts | 1 + src/webviews/webviewController.ts | 6 +++++- src/webviews/webviewsController.ts | 10 +++++----- src/webviews/welcome/protocol.ts | 3 +++ src/webviews/welcome/welcomeWebview.ts | 1 + 30 files changed, 76 insertions(+), 18 deletions(-) diff --git a/src/plus/webviews/account/accountWebview.ts b/src/plus/webviews/account/accountWebview.ts index 963b917..aa9b945 100644 --- a/src/plus/webviews/account/accountWebview.ts +++ b/src/plus/webviews/account/accountWebview.ts @@ -84,6 +84,7 @@ export class AccountWebviewProvider implements WebviewProvider { const subscriptionResult = await this.getSubscription(subscription); return { + webviewId: this.host.id, timestamp: Date.now(), webroot: this.host.getWebRoot(), subscription: subscriptionResult.subscription, diff --git a/src/plus/webviews/account/protocol.ts b/src/plus/webviews/account/protocol.ts index 6919fc2..30b27ff 100644 --- a/src/plus/webviews/account/protocol.ts +++ b/src/plus/webviews/account/protocol.ts @@ -1,7 +1,9 @@ +import type { WebviewIds, WebviewViewIds } from '../../../constants'; import type { Subscription } from '../../../subscription'; import { IpcNotificationType } from '../../../webviews/protocol'; export interface State { + webviewId: WebviewIds | WebviewViewIds; timestamp: number; webroot?: string; diff --git a/src/plus/webviews/focus/focusWebview.ts b/src/plus/webviews/focus/focusWebview.ts index 3aca829..ce943c1 100644 --- a/src/plus/webviews/focus/focusWebview.ts +++ b/src/plus/webviews/focus/focusWebview.ts @@ -243,9 +243,12 @@ export class FocusWebviewProvider implements WebviewProvider { } private async getState(deferState?: boolean): Promise { + const webviewId = this.host.id; + const access = await this.container.git.access(PlusFeatures.Focus); if (access.allowed !== true) { return { + webviewId: webviewId, timestamp: Date.now(), access: access, }; @@ -258,6 +261,7 @@ export class FocusWebviewProvider implements WebviewProvider { if (!hasConnectedRepos) { return { + webviewId: webviewId, timestamp: Date.now(), access: access, repos: githubRepos.map(r => serializeRepoWithRichRemote(r)), @@ -274,6 +278,7 @@ export class FocusWebviewProvider implements WebviewProvider { async function getStateCore() { const [prsResult, issuesResult] = await statePromise; return { + webviewId: webviewId, timestamp: Date.now(), access: access, repos: repos, @@ -299,6 +304,7 @@ export class FocusWebviewProvider implements WebviewProvider { }); return { + webviewId: webviewId, timestamp: Date.now(), access: access, repos: repos, diff --git a/src/plus/webviews/focus/protocol.ts b/src/plus/webviews/focus/protocol.ts index 4989d31..df1063e 100644 --- a/src/plus/webviews/focus/protocol.ts +++ b/src/plus/webviews/focus/protocol.ts @@ -1,9 +1,11 @@ +import type { WebviewIds, WebviewViewIds } from '../../../constants'; import type { FeatureAccess } from '../../../features'; import type { IssueShape } from '../../../git/models/issue'; import type { PullRequestShape } from '../../../git/models/pullRequest'; import { IpcCommandType, IpcNotificationType } from '../../../webviews/protocol'; export interface State { + webviewId: WebviewIds | WebviewViewIds; timestamp: number; access: FeatureAccess; diff --git a/src/plus/webviews/graph/graphWebview.ts b/src/plus/webviews/graph/graphWebview.ts index eadce0c..d3c851b 100644 --- a/src/plus/webviews/graph/graphWebview.ts +++ b/src/plus/webviews/graph/graphWebview.ts @@ -1845,13 +1845,13 @@ export class GraphWebviewProvider implements WebviewProvider { private async getState(deferRows?: boolean): Promise { if (this.container.git.repositoryCount === 0) { - return { timestamp: Date.now(), allowed: true, repositories: [] }; + return { webviewId: this.host.id, timestamp: Date.now(), allowed: true, repositories: [] }; } if (this.repository == null) { this.repository = this.container.git.getBestRepositoryOrFirst(); if (this.repository == null) { - return { timestamp: Date.now(), allowed: true, repositories: [] }; + return { webviewId: this.host.id, timestamp: Date.now(), allowed: true, repositories: [] }; } } @@ -1931,6 +1931,7 @@ export class GraphWebviewProvider implements WebviewProvider { } return { + webviewId: this.host.id, timestamp: Date.now(), windowFocused: this.isWindowFocused, repositories: formatRepositories(this.container.git.openRepositories), diff --git a/src/plus/webviews/graph/protocol.ts b/src/plus/webviews/graph/protocol.ts index 68ec89b..7c66bbe 100644 --- a/src/plus/webviews/graph/protocol.ts +++ b/src/plus/webviews/graph/protocol.ts @@ -23,6 +23,7 @@ import type { WorkDirStats, } from '@gitkraken/gitkraken-components'; import type { Config, DateStyle } from '../../../config'; +import type { WebviewIds, WebviewViewIds } from '../../../constants'; import type { RepositoryVisibility } from '../../../git/gitProvider'; import type { GitTrackingState } from '../../../git/models/branch'; import type { GitGraphRowType } from '../../../git/models/graph'; @@ -84,6 +85,7 @@ export type GraphMinimapMarkerTypes = export const supportedRefMetadataTypes: GraphRefMetadataType[] = Object.values(GraphRefMetadataTypes); export interface State { + webviewId: WebviewIds | WebviewViewIds; timestamp: number; windowFocused?: boolean; diff --git a/src/plus/webviews/timeline/protocol.ts b/src/plus/webviews/timeline/protocol.ts index 30c2a1a..4666e06 100644 --- a/src/plus/webviews/timeline/protocol.ts +++ b/src/plus/webviews/timeline/protocol.ts @@ -1,7 +1,9 @@ +import type { WebviewIds, WebviewViewIds } from '../../../constants'; import type { FeatureAccess } from '../../../features'; import { IpcCommandType, IpcNotificationType } from '../../../webviews/protocol'; export interface State { + webviewId: WebviewIds | WebviewViewIds; timestamp: number; dataset?: Commit[]; diff --git a/src/plus/webviews/timeline/timelineWebview.ts b/src/plus/webviews/timeline/timelineWebview.ts index 8576adc..6ddf246 100644 --- a/src/plus/webviews/timeline/timelineWebview.ts +++ b/src/plus/webviews/timeline/timelineWebview.ts @@ -282,6 +282,7 @@ export class TimelineWebviewProvider implements WebviewProvider { if (current.uri == null || gitUri == null || repoPath == null || access.allowed === false) { const access = await this.container.git.access(PlusFeatures.Timeline, repoPath); return { + webviewId: this.host.id, timestamp: Date.now(), period: period, title: gitUri?.relativePath, @@ -304,6 +305,7 @@ export class TimelineWebviewProvider implements WebviewProvider { if (log == null) { return { + webviewId: this.host.id, timestamp: Date.now(), dataset: [], period: period, @@ -362,6 +364,7 @@ export class TimelineWebviewProvider implements WebviewProvider { dataset.sort((a, b) => b.sort - a.sort); return { + webviewId: this.host.id, timestamp: Date.now(), dataset: dataset, period: period, diff --git a/src/webviews/apps/commitDetails/commitDetails.html b/src/webviews/apps/commitDetails/commitDetails.html index 36c1980..80e3966 100644 --- a/src/webviews/apps/commitDetails/commitDetails.html +++ b/src/webviews/apps/commitDetails/commitDetails.html @@ -16,7 +16,11 @@ - + #{endOfBody} diff --git a/src/webviews/apps/home/home.html b/src/webviews/apps/home/home.html index 42124cc..c10bf9b 100644 --- a/src/webviews/apps/home/home.html +++ b/src/webviews/apps/home/home.html @@ -16,7 +16,7 @@ - +