Skip to content

Commit 71ffe2a

Browse files
1. Singleton Import Bazel Project wizard
2. Build to Java 11 and Node 10
1 parent 1ee7be3 commit 71ffe2a

File tree

3 files changed

+84
-56
lines changed

3 files changed

+84
-56
lines changed

.github/workflows/build.yml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,14 @@ jobs:
88

99
steps:
1010
- uses: actions/checkout@v2
11+
12+
- name: Set up JDK 11
13+
uses: actions/setup-java@1
14+
with:
15+
java-version: 11
16+
17+
- name: Build VSCode extension
18+
- uses: actions/setup-node@v2
1119
with:
1220
node-version: '10'
1321
- run: sudo npm install -g vsce

src/editor.ts

Lines changed: 37 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -5,39 +5,41 @@ import * as bazelproject from './bazelproject';
55
import * as bazelmodule from './bazelmodule';
66

77

8-
export function handleMessages(extCtx: vscode.ExtensionContext, webPanel: vscode.WebviewPanel, message: any) {
9-
switch (message.command) {
10-
case 'importProject': {
11-
const bi: bazelproject.BazelProject = new bazelproject.BazelProject(message.source, message.target);
12-
bi.openProject(message.modules);
13-
return;
14-
}
15-
case 'browseWorkspace':
16-
vscode.window.showOpenDialog({
17-
'title': 'Select WORKSPACE location',
18-
'canSelectFolders': false,
19-
'canSelectFiles': true,
20-
'canSelectMany': false,
21-
'openLabel': 'Select'
22-
}).then((fileUri) => postLocation(fileUri, webPanel, 'setworkspace'));
23-
return;
24-
case 'browseTarget':
25-
vscode.window.showOpenDialog({
26-
'title': 'Select target folder',
27-
'canSelectFolders': true,
28-
'canSelectFiles': false,
29-
'canSelectMany': false,
30-
'openLabel': 'Select'
31-
}).then((fileUri) => postLocation(fileUri, webPanel, 'settarget'));
32-
return;
33-
case 'loadModules': {
34-
const bi: bazelproject.BazelProject = new bazelproject.BazelProject(message.source, message.target);
35-
const modules: bazelmodule.BazelModule[] = bi.lookupModules();
36-
webPanel.webview.postMessage({
37-
command: 'listModules',
38-
data: modules
39-
});
40-
return;
8+
export function handleMessages(extCtx: vscode.ExtensionContext, webPanel: vscode.WebviewPanel | undefined, message: any) {
9+
if (webPanel) {
10+
switch (message.command) {
11+
case 'importProject': {
12+
const bi: bazelproject.BazelProject = new bazelproject.BazelProject(message.source, message.target);
13+
bi.openProject(message.modules);
14+
return;
15+
}
16+
case 'browseWorkspace':
17+
vscode.window.showOpenDialog({
18+
'title': 'Select WORKSPACE location',
19+
'canSelectFolders': false,
20+
'canSelectFiles': true,
21+
'canSelectMany': false,
22+
'openLabel': 'Select'
23+
}).then((fileUri) => postLocation(fileUri, webPanel, 'setworkspace'));
24+
return;
25+
case 'browseTarget':
26+
vscode.window.showOpenDialog({
27+
'title': 'Select target folder',
28+
'canSelectFolders': true,
29+
'canSelectFiles': false,
30+
'canSelectMany': false,
31+
'openLabel': 'Select'
32+
}).then((fileUri) => postLocation(fileUri, webPanel, 'settarget'));
33+
return;
34+
case 'loadModules': {
35+
const bi: bazelproject.BazelProject = new bazelproject.BazelProject(message.source, message.target);
36+
const modules: bazelmodule.BazelModule[] = bi.lookupModules();
37+
webPanel.webview.postMessage({
38+
command: 'listModules',
39+
data: modules
40+
});
41+
return;
42+
}
4143
}
4244
}
4345
}
@@ -87,7 +89,7 @@ export function getWebviewContent(panel: vscode.WebviewPanel, extCtx: vscode.Ext
8789
<br>
8890
<div>
8991
<div>
90-
<label for="filterModules">Filter modules:</label>
92+
<label for="filterModules">Filter modules by name:</label>
9193
<input type="text" id="filterModules" name="filterModules" style="width: 50%; height: 1.5em;" disabled>
9294
<button id="resetFilter" name="resetFilter" style="height: 1.5em;" disabled>Reset filter</button>
9395
</div>
@@ -96,6 +98,7 @@ export function getWebviewContent(panel: vscode.WebviewPanel, extCtx: vscode.Ext
9698
<label for="useSelected">Filter selected modules</label>
9799
</div>
98100
</div>
101+
<br>
99102
<hr>
100103
101104
<div id="moduleList" style="width: 100%; height: 50%; overflow-y: scroll;">

src/extension.ts

Lines changed: 39 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -3,32 +3,49 @@ import * as path from 'path';
33
import * as pieditor from './editor';
44

55
export function activate(context: vscode.ExtensionContext) {
6+
let panel: vscode.WebviewPanel | undefined = undefined;
67

78
console.log('Extension "bazelimport" is now active!');
89

910
let viewTitleDisp = vscode.commands.registerCommand('bazelimport.menus.viewtitle', () => {
10-
const panel = vscode.window.createWebviewPanel(
11-
'bazelImportWizard', // Identifies the type of the webview. Used internally
12-
'Import wizard', // Title of the panel displayed to the user
13-
vscode.ViewColumn.One, // Editor column to show the new webview panel in.
14-
{
15-
enableScripts: true,
16-
retainContextWhenHidden: true,
17-
localResourceRoots: [
18-
vscode.Uri.file(path.join(context.extensionPath, 'js')),
19-
vscode.Uri.file(path.join(context.extensionPath, 'css'))
20-
]
21-
}
22-
);
23-
24-
panel.webview.html = pieditor.getWebviewContent(panel, context);
25-
26-
// Handle messages from the webview
27-
panel.webview.onDidReceiveMessage(
28-
message => pieditor.handleMessages(context, panel, message),
29-
undefined,
30-
context.subscriptions
31-
);
11+
const columnToShowIn = vscode.window.activeTextEditor
12+
? vscode.window.activeTextEditor.viewColumn
13+
: undefined;
14+
if (panel) {
15+
// If we already have a panel, show it in the target column
16+
panel.reveal(columnToShowIn);
17+
} else {
18+
panel = vscode.window.createWebviewPanel(
19+
'bazelImportWizard', // Identifies the type of the webview. Used internally
20+
'Import wizard', // Title of the panel displayed to the user
21+
vscode.ViewColumn.One, // Editor column to show the new webview panel in.
22+
{
23+
enableScripts: true,
24+
retainContextWhenHidden: true,
25+
localResourceRoots: [
26+
vscode.Uri.file(path.join(context.extensionPath, 'js')),
27+
vscode.Uri.file(path.join(context.extensionPath, 'css'))
28+
]
29+
}
30+
);
31+
32+
panel.webview.html = pieditor.getWebviewContent(panel, context);
33+
34+
// Handle messages from the webview
35+
panel.webview.onDidReceiveMessage(
36+
message => pieditor.handleMessages(context, panel, message),
37+
undefined,
38+
context.subscriptions
39+
);
40+
41+
panel.onDidDispose(
42+
() => {
43+
panel = undefined;
44+
},
45+
null,
46+
context.subscriptions
47+
);
48+
}
3249
});
3350

3451
context.subscriptions.push(viewTitleDisp);

0 commit comments

Comments
 (0)