Skip to content

Commit 4fae92e

Browse files
author
Tim Cuthbert
committed
search -> question nav flow
1 parent e70940c commit 4fae92e

File tree

1 file changed

+33
-30
lines changed

1 file changed

+33
-30
lines changed

src/extension.ts

Lines changed: 33 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import * as vscode from 'vscode';
22
import { ExtensionModel } from './extension-model';
3-
import { posix } from 'path';
3+
import { posix, resolve } from 'path';
44
import { AppPageHtml } from './app-page';
55

66
export function activate(context: vscode.ExtensionContext) {
@@ -20,22 +20,20 @@ export function activate(context: vscode.ExtensionContext) {
2020
vscode.window.showInputBox(searchOptions).then((searchQuery: string | undefined) => {
2121

2222
if (searchQuery) {
23-
// Create webview panel
24-
const stackoverflowPanel = vscode.window.createWebviewPanel('webview', `SO: ${searchQuery}`, vscode.ViewColumn.Beside, {
25-
localResourceRoots: [vscode.Uri.file(posix.join(context.extensionPath, 'app', 'public'))],
26-
enableScripts: true,
27-
retainContextWhenHidden: true
28-
});
2923

24+
// Create webview panel
25+
const stackoverflowPanel = createWebViewPanel(`SO: ${searchQuery}`, context.extensionPath);
3026
// Set webview - svelte built to ./app/public/*
3127
stackoverflowPanel.webview.html = AppPageHtml(context.extensionPath);
32-
33-
// Post search term
28+
// Post search term, read in App.svelte as window.addEventListener("message"
3429
stackoverflowPanel.webview.postMessage({
3530
action: 'search',
3631
query: searchQuery
3732
});
3833

34+
// Show progress loader
35+
showWindowProgress(`Loading Stackoverflow Search Results`, stackoverflowPanel);
36+
3937
}
4038

4139
});
@@ -49,26 +47,23 @@ export function activate(context: vscode.ExtensionContext) {
4947
vscode.window.showQuickPick(ExtensionModel.topPickQuickInputItems).then((selectedTopPick: vscode.QuickPickItem | undefined) => {
5048

5149
if (selectedTopPick) {
50+
51+
// Get article selected artical with ID
5252
const selectedArticle: any = ExtensionModel.topPickIds.find((element: any) => {
5353
return element.label === selectedTopPick.label;
5454
});
5555

5656
// Create webview panel
57-
const stackoverflowPanel = vscode.window.createWebviewPanel('webview', `SO: ${selectedTopPick.label}`, vscode.ViewColumn.Beside, {
58-
localResourceRoots: [vscode.Uri.file(posix.join(context.extensionPath, 'app', 'public'))],
59-
enableScripts: true,
60-
retainContextWhenHidden: true
61-
});
62-
57+
const stackoverflowPanel = createWebViewPanel(`SO: ${selectedTopPick.label}`, context.extensionPath);
6358
// Set webview - svelte built to ./app/public/*
6459
stackoverflowPanel.webview.html = AppPageHtml(context.extensionPath);
65-
66-
// Post article Id
60+
// Post article Id to app, read in App.svelte as window.addEventListener("message"
6761
stackoverflowPanel.webview.postMessage({
6862
action: 'topPick',
6963
questionId: selectedArticle.id
7064
});
7165

66+
// Show progress loader
7267
showWindowProgress(`Loading Stackoverflow Article`, stackoverflowPanel);
7368

7469
}
@@ -81,7 +76,20 @@ export function activate(context: vscode.ExtensionContext) {
8176
}
8277

8378
/**
84-
* Show built in loader
79+
* Create a vscode webViewPanel
80+
* @param panelTitle string
81+
* @param path string
82+
*/
83+
function createWebViewPanel(panelTitle: string, path: string): vscode.WebviewPanel {
84+
return vscode.window.createWebviewPanel('webview', panelTitle, vscode.ViewColumn.Beside, {
85+
localResourceRoots: [vscode.Uri.file(posix.join(path, 'app', 'public'))],
86+
enableScripts: true,
87+
retainContextWhenHidden: true
88+
});
89+
}
90+
91+
/**
92+
* Show progress in window (bottom left)
8593
* @param title string
8694
*/
8795
function showWindowProgress(title: string, panel: vscode.WebviewPanel) {
@@ -90,19 +98,14 @@ function showWindowProgress(title: string, panel: vscode.WebviewPanel) {
9098
title: title,
9199
}, (progress, token) => {
92100

101+
// Resolve once fetch() is complete
102+
// message has command: "progress", action: "stop" | "start"
93103
const progressPromise = new Promise(resolve => {
94-
setTimeout(() => {
95-
resolve();
96-
}, 5000);
97-
// TODO: resolve once fetch() is complete - needs a listener
98-
});
99-
100-
// Resolve once fetch() is complete - needs a listener
101-
panel.webview.onDidReceiveMessage(message => {
102-
console.log('message', message);
103-
if (message.command === 'progress' && message.action === 'stop') {
104-
console.log('TEST');
105-
}
104+
panel.webview.onDidReceiveMessage(message => {
105+
if (message.command === 'progress' && message.action === 'stop') {
106+
resolve();
107+
}
108+
});
106109
});
107110

108111
return progressPromise;

0 commit comments

Comments
 (0)