@@ -9,19 +9,25 @@ import { DOCUMENT_LIST_ITEM, CollectionTypes } from './documentListTreeItem';
99import EXTENSION_COMMANDS from '../commands' ;
1010import { sortTreeItemsByLabel } from './treeItemUtils' ;
1111import type { LoadedConnection } from '../storage/connectionStorage' ;
12+ import {
13+ TreeItemExpandedTelemetryEvent ,
14+ type TelemetryService ,
15+ } from '../telemetry' ;
16+ import type TreeItemParentInterface from './treeItemParentInterface' ;
1217
1318const log = createLogger ( 'explorer tree controller' ) ;
1419
1520export default class ExplorerTreeController
1621 implements vscode . TreeDataProvider < vscode . TreeItem >
1722{
18- private _connectionController : ConnectionController ;
1923 private _connectionTreeItems : { [ key : string ] : ConnectionTreeItem } ;
2024
21- constructor ( connectionController : ConnectionController ) {
25+ constructor (
26+ private _connectionController : ConnectionController ,
27+ private _telemetryService : TelemetryService
28+ ) {
2229 this . _onDidChangeTreeData = new vscode . EventEmitter < void > ( ) ;
2330 this . onDidChangeTreeData = this . _onDidChangeTreeData . event ;
24- this . _connectionController = connectionController ;
2531
2632 // Subscribe to changes in the connections.
2733 this . _connectionController . addEventListener (
@@ -46,14 +52,19 @@ export default class ExplorerTreeController
4652 activateTreeViewEventHandlers = (
4753 treeView : vscode . TreeView < vscode . TreeItem >
4854 ) : void => {
49- treeView . onDidCollapseElement ( ( event : any ) => {
55+ treeView . onDidCollapseElement ( ( event ) => {
5056 log . info ( 'Tree item was collapsed' , event . element . label ) ;
5157
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 ( ) ;
5462 }
5563
56- if ( event . element . doesNotRequireTreeUpdate ) {
64+ if (
65+ 'doesNotRequireTreeUpdate' in treeItem &&
66+ treeItem . doesNotRequireTreeUpdate
67+ ) {
5768 // When the element is already loaded (synchronous), we do not need to
5869 // fully refresh the tree.
5970 return ;
@@ -62,20 +73,29 @@ export default class ExplorerTreeController
6273 this . _onTreeItemUpdate ( ) ;
6374 } ) ;
6475
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 ,
7087 } ) ;
7188
72- if ( ! event . element . onDidExpand ) {
89+ if ( ! treeItem . onDidExpand ) {
7390 return ;
7491 }
7592
76- await event . element . onDidExpand ( ) ;
93+ await treeItem . onDidExpand ( ) ;
7794
78- if ( event . element . doesNotRequireTreeUpdate ) {
95+ if (
96+ 'doesNotRequireTreeUpdate' in treeItem &&
97+ treeItem . doesNotRequireTreeUpdate
98+ ) {
7999 // When the element is already loaded (synchronous), we do not
80100 // need to fully refresh the tree.
81101 return ;
0 commit comments