@@ -9,14 +9,45 @@ import { ConsumerGroupsItem } from "./consumerGroups";
99import { KafkaModel } from "./kafka" ;
1010import { Disposable } from "vscode" ;
1111import { GlyphChars } from "../../constants" ;
12+ import { ClusterProvider , defaultClusterProviderId } from "../../kafka-extensions/registry" ;
13+ import { ClusterSettings } from "../../settings/clusters" ;
1214
1315const TOPIC_INDEX = 1 ;
1416
17+ export class ClusterProviderItem extends NodeBase implements Disposable {
18+
19+ public contextValue = "clusterProvider" ;
20+ public collapsibleState = vscode . TreeItemCollapsibleState . Collapsed ;
21+
22+ constructor ( private clientAccessor : ClientAccessor , public readonly clusterProvider : ClusterProvider , parent : KafkaModel ) {
23+ super ( parent ) ;
24+ this . label = clusterProvider . name ;
25+ }
26+
27+ async computeChildren ( ) : Promise < NodeBase [ ] > {
28+ const clusters = this . getParent ( ) . clusterSettings . getAll ( ) ;
29+ return clusters
30+ . filter ( ( c ) => c . clusterProviderId === this . clusterProvider . id || ( c . clusterProviderId === undefined && this . clusterProvider . id === defaultClusterProviderId ) )
31+ . map ( ( c ) => {
32+ return new ClusterItem ( this . getParent ( ) . clusterSettings , this . clientAccessor , c , this ) ;
33+ } ) ;
34+ }
35+
36+ getParent ( ) : KafkaModel {
37+ return < KafkaModel > super . getParent ( ) ;
38+ }
39+
40+ public dispose ( ) : void {
41+ this . children ?. forEach ( child => ( < ClusterItem > child ) . dispose ( ) ) ;
42+ }
43+
44+ }
45+
1546export class ClusterItem extends NodeBase implements Disposable {
1647 public contextValue = "cluster" ;
1748 public collapsibleState = vscode . TreeItemCollapsibleState . Collapsed ;
1849
19- constructor ( private clientAccessor : ClientAccessor , public readonly cluster : Cluster , parent : KafkaModel ) {
50+ constructor ( private clusterSettings : ClusterSettings , private clientAccessor : ClientAccessor , public readonly cluster : Cluster , parent : KafkaModel | ClusterProviderItem ) {
2051 super ( parent ) ;
2152 this . label = cluster . name ;
2253 this . description = cluster . bootstrap ;
@@ -33,10 +64,6 @@ export class ClusterItem extends NodeBase implements Disposable {
3364 new ConsumerGroupsItem ( this ) ] ;
3465 }
3566
36- getParent ( ) : KafkaModel {
37- return < KafkaModel > super . getParent ( ) ;
38- }
39-
4067 getTreeItem ( ) : vscode . TreeItem {
4168 const treeItem = super . getTreeItem ( ) ;
4269 // to prevent from tree expansion after a refresh, we need to force the id to a static value
@@ -53,11 +80,11 @@ export class ClusterItem extends NodeBase implements Disposable {
5380 }
5481
5582 public get selected ( ) : boolean {
56- return ( this . getParent ( ) . clusterSettings . selected ?. name === this . cluster . name ) ;
83+ return ( this . clusterSettings . selected ?. name === this . cluster . name ) ;
5784 }
5885
5986 public dispose ( ) : void {
60- this . client . dispose ( ) ;
87+ this . clientAccessor . remove ( this . cluster . id ) ;
6188 }
6289
6390 async findTopictemByName ( topicName : string ) : Promise < NodeBase | TopicItem | undefined > {
0 commit comments