@theia/plugin-ext 1.34.0 → 1.34.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/common/plugin-api-rpc.d.ts +1 -1
- package/lib/common/plugin-api-rpc.d.ts.map +1 -1
- package/lib/main/browser/main-context.d.ts.map +1 -1
- package/lib/main/browser/main-context.js +3 -0
- package/lib/main/browser/main-context.js.map +1 -1
- package/lib/main/browser/tabs/tabs-main.d.ts +33 -2
- package/lib/main/browser/tabs/tabs-main.d.ts.map +1 -1
- package/lib/main/browser/tabs/tabs-main.js +256 -6
- package/lib/main/browser/tabs/tabs-main.js.map +1 -1
- package/lib/plugin/tabs.d.ts.map +1 -1
- package/lib/plugin/tabs.js +10 -13
- package/lib/plugin/tabs.js.map +1 -1
- package/lib/plugin/tree/tree-views.d.ts +6 -3
- package/lib/plugin/tree/tree-views.d.ts.map +1 -1
- package/lib/plugin/tree/tree-views.js +32 -25
- package/lib/plugin/tree/tree-views.js.map +1 -1
- package/package.json +27 -26
- package/src/common/plugin-api-rpc.ts +1 -1
- package/src/main/browser/main-context.ts +4 -0
- package/src/main/browser/tabs/tabs-main.ts +287 -6
- package/src/plugin/tabs.ts +10 -14
- package/src/plugin/tree/tree-views.ts +33 -26
|
@@ -34,7 +34,6 @@ import { URI } from '@theia/core/shared/vscode-uri';
|
|
|
34
34
|
import { UriComponents } from '@theia/core/lib/common/uri';
|
|
35
35
|
|
|
36
36
|
export class TreeViewsExtImpl implements TreeViewsExt {
|
|
37
|
-
|
|
38
37
|
private proxy: TreeViewsMain;
|
|
39
38
|
|
|
40
39
|
private readonly treeViews = new Map<string, TreeViewExtImpl<any>>();
|
|
@@ -45,9 +44,9 @@ export class TreeViewsExtImpl implements TreeViewsExt {
|
|
|
45
44
|
commandRegistry.registerArgumentProcessor({
|
|
46
45
|
processArgument: arg => {
|
|
47
46
|
if (TreeViewItemReference.is(arg)) {
|
|
48
|
-
return this.
|
|
47
|
+
return this.toTreeElement(arg);
|
|
49
48
|
} else if (Array.isArray(arg)) {
|
|
50
|
-
return arg.map(param => TreeViewItemReference.is(param) ? this.
|
|
49
|
+
return arg.map(param => TreeViewItemReference.is(param) ? this.toTreeElement(param) : param);
|
|
51
50
|
} else {
|
|
52
51
|
return arg;
|
|
53
52
|
}
|
|
@@ -62,8 +61,8 @@ export class TreeViewsExtImpl implements TreeViewsExt {
|
|
|
62
61
|
return this.getTreeView(treeViewId).handleDrop!(treeItemId, dataTransferItems, token);
|
|
63
62
|
}
|
|
64
63
|
|
|
65
|
-
protected
|
|
66
|
-
return this.treeViews.get(treeViewItemRef.viewId)?.
|
|
64
|
+
protected toTreeElement(treeViewItemRef: TreeViewItemReference): any {
|
|
65
|
+
return this.treeViews.get(treeViewItemRef.viewId)?.getElement(treeViewItemRef.itemId);
|
|
67
66
|
}
|
|
68
67
|
|
|
69
68
|
registerTreeDataProvider<T>(plugin: Plugin, treeViewId: string, treeDataProvider: TreeDataProvider<T>): PluginDisposable {
|
|
@@ -186,6 +185,10 @@ interface TreeExtNode<T> extends Disposable {
|
|
|
186
185
|
}
|
|
187
186
|
|
|
188
187
|
class TreeViewExtImpl<T> implements Disposable {
|
|
188
|
+
private static readonly ID_COMPUTED = 'c';
|
|
189
|
+
private static readonly ID_ITEM = 'i';
|
|
190
|
+
|
|
191
|
+
private nextItemId: 0;
|
|
189
192
|
|
|
190
193
|
private readonly onDidExpandElementEmitter = new Emitter<TreeViewExpansionEvent<T>>();
|
|
191
194
|
readonly onDidExpandElement = this.onDidExpandElementEmitter.event;
|
|
@@ -274,7 +277,7 @@ class TreeViewExtImpl<T> implements Disposable {
|
|
|
274
277
|
this.proxy.$setDescription(this.treeViewId, this._description);
|
|
275
278
|
}
|
|
276
279
|
|
|
277
|
-
|
|
280
|
+
getElement(treeItemId: string): T | undefined {
|
|
278
281
|
return this.nodes.get(treeItemId)?.value;
|
|
279
282
|
}
|
|
280
283
|
|
|
@@ -312,14 +315,9 @@ class TreeViewExtImpl<T> implements Disposable {
|
|
|
312
315
|
// parent is inconsistent
|
|
313
316
|
return undefined;
|
|
314
317
|
}
|
|
315
|
-
const
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
while (possibleIndex-- > 0) {
|
|
319
|
-
const candidateId = this.buildTreeItemId(parentId, possibleIndex, idLabel);
|
|
320
|
-
if (this.nodes.has(candidateId)) {
|
|
321
|
-
return chain.concat(candidateId);
|
|
322
|
-
}
|
|
318
|
+
const candidateId = this.buildTreeItemId(parentId, treeItem);
|
|
319
|
+
if (this.nodes.has(candidateId)) {
|
|
320
|
+
return chain.concat(candidateId);
|
|
323
321
|
}
|
|
324
322
|
// couldn't calculate consistent parent chain and id
|
|
325
323
|
return undefined;
|
|
@@ -335,7 +333,7 @@ class TreeViewExtImpl<T> implements Disposable {
|
|
|
335
333
|
return typeof treeItemLabel === 'object' ? treeItemLabel.highlights : undefined;
|
|
336
334
|
}
|
|
337
335
|
|
|
338
|
-
private
|
|
336
|
+
private getItemLabel(treeItem: TreeItem): string | undefined {
|
|
339
337
|
let idLabel = this.getTreeItemLabel(treeItem);
|
|
340
338
|
// Use resource URI if label is not set
|
|
341
339
|
if (idLabel === undefined && treeItem.resourceUri) {
|
|
@@ -348,8 +346,18 @@ class TreeViewExtImpl<T> implements Disposable {
|
|
|
348
346
|
return idLabel;
|
|
349
347
|
}
|
|
350
348
|
|
|
351
|
-
private buildTreeItemId(parentId: string,
|
|
352
|
-
|
|
349
|
+
private buildTreeItemId(parentId: string, item: TreeItem): string {
|
|
350
|
+
// build tree id according to https://code.visualstudio.com/api/references/vscode-api#TreeItem
|
|
351
|
+
// note: the front end tree implementation cannot handle reparenting items, hence the id is set to the "path" of individual ids
|
|
352
|
+
let id = typeof item.id === 'string' ? item.id : this.getItemLabel(item);
|
|
353
|
+
if (id) {
|
|
354
|
+
// we use '' as the id of the root, we don't consider that a valid id
|
|
355
|
+
// since '' is falsy, we'll never get '' in this branch
|
|
356
|
+
id = TreeViewExtImpl.ID_ITEM + id;
|
|
357
|
+
} else {
|
|
358
|
+
id = TreeViewExtImpl.ID_COMPUTED + this.nextItemId++;
|
|
359
|
+
}
|
|
360
|
+
return `${parentId}/${id}`;
|
|
353
361
|
}
|
|
354
362
|
|
|
355
363
|
async getChildren(parentId: string): Promise<TreeViewItem[] | undefined> {
|
|
@@ -369,20 +377,19 @@ class TreeViewExtImpl<T> implements Disposable {
|
|
|
369
377
|
// ask data provider for children for cached element
|
|
370
378
|
const result = await this.options.treeDataProvider.getChildren(parent);
|
|
371
379
|
if (result) {
|
|
372
|
-
const treeItemPromises = result.map(async
|
|
380
|
+
const treeItemPromises = result.map(async value => {
|
|
373
381
|
|
|
374
382
|
// Ask data provider for a tree item for the value
|
|
375
383
|
// Data provider must return theia.TreeItem
|
|
376
384
|
const treeItem = await this.options.treeDataProvider.getTreeItem(value);
|
|
377
385
|
// Convert theia.TreeItem to the TreeViewItem
|
|
378
386
|
|
|
379
|
-
const label = this.
|
|
387
|
+
const label = this.getItemLabel(treeItem);
|
|
380
388
|
const highlights = this.getTreeItemLabelHighlights(treeItem);
|
|
381
|
-
const idLabel = this.getTreeItemIdLabel(treeItem);
|
|
382
389
|
|
|
383
390
|
// Generate the ID
|
|
384
391
|
// ID is used for caching the element
|
|
385
|
-
const id =
|
|
392
|
+
const id = this.buildTreeItemId(parentId, treeItem);
|
|
386
393
|
|
|
387
394
|
const toDisposeElement = new DisposableCollection();
|
|
388
395
|
const node: TreeExtNode<T> = {
|
|
@@ -467,7 +474,7 @@ class TreeViewExtImpl<T> implements Disposable {
|
|
|
467
474
|
|
|
468
475
|
async onExpanded(treeItemId: string): Promise<any> {
|
|
469
476
|
// get element from a cache
|
|
470
|
-
const cachedElement = this.
|
|
477
|
+
const cachedElement = this.getElement(treeItemId);
|
|
471
478
|
|
|
472
479
|
// fire an event
|
|
473
480
|
if (cachedElement) {
|
|
@@ -479,7 +486,7 @@ class TreeViewExtImpl<T> implements Disposable {
|
|
|
479
486
|
|
|
480
487
|
async onCollapsed(treeItemId: string): Promise<any> {
|
|
481
488
|
// get element from a cache
|
|
482
|
-
const cachedElement = this.
|
|
489
|
+
const cachedElement = this.getElement(treeItemId);
|
|
483
490
|
|
|
484
491
|
// fire an event
|
|
485
492
|
if (cachedElement) {
|
|
@@ -513,7 +520,7 @@ class TreeViewExtImpl<T> implements Disposable {
|
|
|
513
520
|
get selectedElements(): T[] {
|
|
514
521
|
const items: T[] = [];
|
|
515
522
|
for (const id of this.selectedItemIds) {
|
|
516
|
-
const item = this.
|
|
523
|
+
const item = this.getElement(id);
|
|
517
524
|
if (item) {
|
|
518
525
|
items.push(item);
|
|
519
526
|
}
|
|
@@ -554,7 +561,7 @@ class TreeViewExtImpl<T> implements Disposable {
|
|
|
554
561
|
async onDragStarted(treeItemIds: string[], token: CancellationToken): Promise<UriComponents[] | undefined> {
|
|
555
562
|
const treeItems: T[] = [];
|
|
556
563
|
for (const id of treeItemIds) {
|
|
557
|
-
const item = this.
|
|
564
|
+
const item = this.getElement(id);
|
|
558
565
|
if (item) {
|
|
559
566
|
treeItems.push(item);
|
|
560
567
|
}
|
|
@@ -571,7 +578,7 @@ class TreeViewExtImpl<T> implements Disposable {
|
|
|
571
578
|
}
|
|
572
579
|
|
|
573
580
|
async handleDrop(treeItemId: string | undefined, dataTransferItems: [string, string | DataTransferFileDTO][], token: CancellationToken): Promise<void> {
|
|
574
|
-
const treeItem = treeItemId ? this.
|
|
581
|
+
const treeItem = treeItemId ? this.getElement(treeItemId) : undefined;
|
|
575
582
|
const dropTransfer = new DataTransfer();
|
|
576
583
|
if (this.options.dragAndDropController?.handleDrop) {
|
|
577
584
|
this.localDataTransfer.forEach((item, type) => {
|