Skip to content

Commit

Permalink
Working overlay webview with multiple webview chats (on top of nang c…
Browse files Browse the repository at this point in the history
…hange)
  • Loading branch information
Fryingpannn committed Oct 20, 2024
1 parent deb5977 commit 246736f
Show file tree
Hide file tree
Showing 10 changed files with 14 additions and 873 deletions.
11 changes: 2 additions & 9 deletions extensions/vscode/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -533,15 +533,8 @@
"type": "webview",
"id": "pearai.pearAIChatView",
"name": "",
"visibility": "visible"
}
],
"PearAIOverlay": [
{
"type": "webview",
"id": "pearai.continueGUIView2",
"name": "PearAIOverlay",
"visibility": "visible"
"visibility": "visible",
"title": "PearAISidebar"
}
]
},
Expand Down
28 changes: 7 additions & 21 deletions extensions/vscode/src/ContinueGUIWebviewViewProvider.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,13 @@ import * as vscode from "vscode";
import { getExtensionVersion } from "./util/util";
import { getExtensionUri, getNonce, getUniqueId } from "./util/vscode";
import { VsCodeWebviewProtocol } from "./webviewProtocol";
import { PEARAI_VIEW_ID } from "./extension/VsCodeExtension";


export class ContinueGUIWebviewViewProvider
implements vscode.WebviewViewProvider
{
public static readonly viewType = "pearai.pearAIChatView";
public static readonly viewType = PEARAI_VIEW_ID;
public webviewProtocol: VsCodeWebviewProtocol;
private _webview?: vscode.Webview;
private _webviewView?: vscode.WebviewView;
Expand Down Expand Up @@ -62,17 +64,6 @@ export class ContinueGUIWebviewViewProvider
_token: vscode.CancellationToken,
): void | Thenable<void> {
this._webview = webviewView.webview;
const extensionUri = getExtensionUri();
console.log("=================== RESOLVING WEBVIEW IN CONTINUE PROVIDER2");
console.log("===== Webview view type: ", webviewView.viewType);

// this._webview.options = {
// enableScripts: true,
// localResourceRoots: [
// vscode.Uri.joinPath(extensionUri, "out"),
// vscode.Uri.joinPath(extensionUri, "gui"),
// ],
// };

this._webview.onDidReceiveMessage((message) => {
return this.handleWebviewMessage(message);
Expand All @@ -83,8 +74,6 @@ export class ContinueGUIWebviewViewProvider
);
}



get isVisible() {
return this._webviewView?.visible;
}
Expand Down Expand Up @@ -114,16 +103,14 @@ export class ContinueGUIWebviewViewProvider
private readonly windowId: string,
private readonly extensionContext: vscode.ExtensionContext,
) {
this.outputChannel = vscode.window.createOutputChannel("Continue");
this.outputChannel = vscode.window.createOutputChannel("PearAI");
this.enableDebugLogs = false;
this.updateDebugLogsStatus();
this.setupDebugLogsListener();

this.webviewProtocol = new VsCodeWebviewProtocol(
(async () => {
const configHandler = await this.configHandlerPromise;
console.log("Config handler: ");
console.log(configHandler);
return configHandler.reloadConfig();
}).bind(this),
);
Expand All @@ -136,8 +123,7 @@ export class ContinueGUIWebviewViewProvider
edits: FileEdit[] | undefined = undefined,
isFullScreen = false,
): string {
const isOverlay = panel.viewType === "pearai.overlayWebview3";
console.log("===== Panel view type: ", panel.viewType);
const isOverlay = panel?.title === "PearAIOverlay"; // defined in pearai-app PearOverlayPart.ts
const extensionUri = getExtensionUri();
let scriptUri: string;
let styleMainUri: string;
Expand Down Expand Up @@ -196,11 +182,10 @@ export class ContinueGUIWebviewViewProvider
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script>
const vscode = acquireVsCodeApi();
window.isOverlayPearAI = ${isOverlay};
</script>
<link href="${styleMainUri}" rel="stylesheet">
<title>Continue</title>
<title>PearAI</title>
</head>
<body>
<div id="root"></div>
Expand Down Expand Up @@ -249,6 +234,7 @@ export class ContinueGUIWebviewViewProvider
) || [],
)}</script>
<script>window.isFullScreen = ${isFullScreen}</script>
<script>window.isOverlayPearAI = ${isOverlay}</script>
${
edits
Expand Down
4 changes: 0 additions & 4 deletions extensions/vscode/src/commands.ts
Original file line number Diff line number Diff line change
Expand Up @@ -529,10 +529,6 @@ const commandsMap: (
"pearai.openConfigJson": () => {
ide.openFile(getConfigJsonPath());
},
"pearai.switchWebview": () => {
console.log("switch webview 2");
vscode.commands.executeCommand("pearai.internal.switchWebview");
},
"pearai.selectFilesAsContext": (
firstUri: vscode.Uri,
uris: vscode.Uri[],
Expand Down
11 changes: 0 additions & 11 deletions extensions/vscode/src/extension.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ import { setupCa } from "core/util/ca";
import { Telemetry } from "core/util/posthog";
import * as vscode from "vscode";
import { getExtensionVersion } from "./util/util";
// import { PearInventoryExtension } from "./panels/inventory/PearInventoryExtension";

async function dynamicImportAndActivate(context: vscode.ExtensionContext) {
const { activateExtension } = await import("./activation/activate");
Expand All @@ -33,19 +32,9 @@ async function dynamicImportAndActivate(context: vscode.ExtensionContext) {
}
}

let outputChannel: vscode.OutputChannel;
// let extension: PearInventoryExtension;

export function activate(context: vscode.ExtensionContext) {
setupCa();
dynamicImportAndActivate(context);
// console.log("Activating Pear extension!!!!!");
// outputChannel = vscode.window.createOutputChannel("Pear");
// outputChannel.appendLine("Activating Pear extension!!");

// extension = new PearInventoryExtension(context, outputChannel);
// extension.activate();
// console.log("Activating!");
}

export function deactivate() {
Expand Down
66 changes: 5 additions & 61 deletions extensions/vscode/src/extension/VsCodeExtension.ts
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,8 @@ import { TabAutocompleteModel } from "../util/loadAutocompleteModel";
import type { VsCodeWebviewProtocol } from "../webviewProtocol";
import { VsCodeMessenger } from "./VsCodeMessenger";

export const PEARAI_VIEW_ID = "pearai.pearAIChatView"

export class VsCodeExtension {
// Currently some of these are public so they can be used in testing (test/test-suites)

Expand All @@ -49,9 +51,6 @@ export class VsCodeExtension {
private battery: Battery;
private workOsAuthProvider: WorkOsAuthProvider;

private overlay: ContinueGUIWebviewViewProvider;
private activeWebview: "sidebar" | "overlay" = "sidebar";

constructor(context: vscode.ExtensionContext) {
// Register auth provider
this.workOsAuthProvider = new WorkOsAuthProvider(context);
Expand Down Expand Up @@ -87,10 +86,10 @@ export class VsCodeExtension {
this.extensionContext,
);

// Sidebar
// Sidebar + Overlay
context.subscriptions.push(
vscode.window.registerWebviewViewProvider(
"pearai.pearAIChatView",
PEARAI_VIEW_ID,
this.sidebar,
{
webviewOptions: { retainContextWhenHidden: true },
Expand All @@ -99,32 +98,6 @@ export class VsCodeExtension {
);
resolveWebviewProtocol(this.sidebar.webviewProtocol);

// Register PearAI overlay
this.overlay = new ContinueGUIWebviewViewProvider(
configHandlerPromise,
this.windowId + "_2",
this.extensionContext,
);
context.subscriptions.push(
vscode.window.registerWebviewViewProvider(
"pearai.continueGUIView2",
this.overlay,
{
webviewOptions: { retainContextWhenHidden: true },
},
),
);

context.subscriptions.push(
vscode.commands.registerCommand(
"pearai.internal.switchWebview",
(context: SwitchWebviewContext) => {
console.log("switch webview: ", context.state);
this.switchWebview(context);
},
),
);

// Config Handler with output channel
const outputChannel = vscode.window.createOutputChannel("PearAI");
const inProcessMessenger = new InProcessMessenger<
Expand Down Expand Up @@ -402,31 +375,6 @@ export class VsCodeExtension {

static continueVirtualDocumentScheme = "pearai";

public switchWebview(context: SwitchWebviewContext) {
if (context.state === "closed" && this.activeWebview === "sidebar") {
return;
}
let activeProvider: ContinueGUIWebviewViewProvider;
if (context.state === "open") {
this.activeWebview = "overlay";
activeProvider = this.overlay;
} else {
this.activeWebview = "sidebar";
activeProvider = this.sidebar;
}

this.webviewProtocolPromise.then((protocol) => {
if (activeProvider.webview) {
protocol.webview = activeProvider.webview;
}
});

if (activeProvider.webviewProtocol) {
activeProvider.webviewProtocol.request("didChangeAvailableProfiles", {
profiles: [],
});
}
}
// eslint-disable-next-line @typescript-eslint/naming-convention
private PREVIOUS_BRANCH_FOR_WORKSPACE_DIR: { [dir: string]: string } = {};

Expand All @@ -437,8 +385,4 @@ export class VsCodeExtension {
registerCustomContextProvider(contextProvider: IContextProvider) {
this.configHandler.registerCustomContextProvider(contextProvider);
}
}

type SwitchWebviewContext = {
state: "closed" | "open";
};
}
Loading

0 comments on commit 246736f

Please sign in to comment.