@@ -9,19 +9,25 @@ import { DOCUMENT_LIST_ITEM, CollectionTypes } from './documentListTreeItem';
9
9
import EXTENSION_COMMANDS from '../commands' ;
10
10
import { sortTreeItemsByLabel } from './treeItemUtils' ;
11
11
import type { LoadedConnection } from '../storage/connectionStorage' ;
12
+ import {
13
+ TreeItemExpandedTelemetryEvent ,
14
+ type TelemetryService ,
15
+ } from '../telemetry' ;
16
+ import type TreeItemParentInterface from './treeItemParentInterface' ;
12
17
13
18
const log = createLogger ( 'explorer tree controller' ) ;
14
19
15
20
export default class ExplorerTreeController
16
21
implements vscode . TreeDataProvider < vscode . TreeItem >
17
22
{
18
- private _connectionController : ConnectionController ;
19
23
private _connectionTreeItems : { [ key : string ] : ConnectionTreeItem } ;
20
24
21
- constructor ( connectionController : ConnectionController ) {
25
+ constructor (
26
+ private _connectionController : ConnectionController ,
27
+ private _telemetryService : TelemetryService
28
+ ) {
22
29
this . _onDidChangeTreeData = new vscode . EventEmitter < void > ( ) ;
23
30
this . onDidChangeTreeData = this . _onDidChangeTreeData . event ;
24
- this . _connectionController = connectionController ;
25
31
26
32
// Subscribe to changes in the connections.
27
33
this . _connectionController . addEventListener (
@@ -46,14 +52,19 @@ export default class ExplorerTreeController
46
52
activateTreeViewEventHandlers = (
47
53
treeView : vscode . TreeView < vscode . TreeItem >
48
54
) : void => {
49
- treeView . onDidCollapseElement ( ( event : any ) => {
55
+ treeView . onDidCollapseElement ( ( event ) => {
50
56
log . info ( 'Tree item was collapsed' , event . element . label ) ;
51
57
52
- if ( event . element . onDidCollapse ) {
53
- event . element . onDidCollapse ( ) ;
58
+ const treeItem = event . element as vscode . TreeItem &
59
+ TreeItemParentInterface ;
60
+ if ( treeItem . onDidCollapse ) {
61
+ treeItem . onDidCollapse ( ) ;
54
62
}
55
63
56
- if ( event . element . doesNotRequireTreeUpdate ) {
64
+ if (
65
+ 'doesNotRequireTreeUpdate' in treeItem &&
66
+ treeItem . doesNotRequireTreeUpdate
67
+ ) {
57
68
// When the element is already loaded (synchronous), we do not need to
58
69
// fully refresh the tree.
59
70
return ;
@@ -62,20 +73,29 @@ export default class ExplorerTreeController
62
73
this . _onTreeItemUpdate ( ) ;
63
74
} ) ;
64
75
65
- treeView . onDidExpandElement ( async ( event : any ) : Promise < void > => {
66
- log . info ( 'Connection tree item was expanded' , {
67
- connectionId : event . element . connectionId ,
68
- connectionName : event . element . label ,
69
- isExpanded : event . element . isExpanded ,
76
+ treeView . onDidExpandElement ( async ( event ) : Promise < void > => {
77
+ const treeItem = event . element as vscode . TreeItem &
78
+ TreeItemParentInterface ;
79
+ this . _telemetryService . track (
80
+ new TreeItemExpandedTelemetryEvent ( treeItem )
81
+ ) ;
82
+
83
+ log . info ( 'Explorer tree item was expanded' , {
84
+ type : treeItem . contextValue ,
85
+ connectionName : treeItem . label ,
86
+ isExpanded : treeItem . isExpanded ,
70
87
} ) ;
71
88
72
- if ( ! event . element . onDidExpand ) {
89
+ if ( ! treeItem . onDidExpand ) {
73
90
return ;
74
91
}
75
92
76
- await event . element . onDidExpand ( ) ;
93
+ await treeItem . onDidExpand ( ) ;
77
94
78
- if ( event . element . doesNotRequireTreeUpdate ) {
95
+ if (
96
+ 'doesNotRequireTreeUpdate' in treeItem &&
97
+ treeItem . doesNotRequireTreeUpdate
98
+ ) {
79
99
// When the element is already loaded (synchronous), we do not
80
100
// need to fully refresh the tree.
81
101
return ;
0 commit comments