@@ -27,28 +27,25 @@ import { VsCode } from "../services/VsCode.ts";
2727 */
2828export class TreeView extends Effect . Service < TreeView > ( ) ( "TreeView" , {
2929 scoped : Effect . gen ( function * ( ) {
30- yield * VsCode ;
30+ const code = yield * VsCode ;
3131
3232 return {
3333 /**
3434 * Creates a tree data provider with automatic cleanup on scope disposal.
3535 *
3636 * @param options - Configuration for the tree view
3737 */
38- createTreeDataProvider < T > ( options : {
38+ createTreeDataProvider : Effect . fnUntraced ( function * < T > ( options : {
3939 viewId : MarimoView ;
4040 getChildren : ( element ?: T ) => Effect . Effect < T [ ] , never , never > ;
4141 getTreeItem : ( element : T ) => Effect . Effect < TreeItem , never , never > ;
4242 getParent ?: ( element : T ) => Effect . Effect < T | undefined , never , never > ;
4343 } ) {
44- return Effect . gen ( function * ( ) {
45- const code = yield * VsCode ;
44+ // Create event emitter for refresh events
45+ const eventEmitter = new code . EventEmitter < T | undefined | null > ( ) ;
4646
47- // Create event emitter for refresh events
48- const eventEmitter = new code . EventEmitter < T | undefined | null > ( ) ;
49-
50- // Create the tree data provider implementation
51- const provider : vscode . TreeDataProvider < T > = {
47+ const treeView = yield * code . window . createTreeView ( options . viewId , {
48+ treeDataProvider : {
5249 onDidChangeTreeData : eventEmitter . event ,
5350
5451 getTreeItem : ( element : T ) : vscode . TreeItem => {
@@ -76,51 +73,31 @@ export class TreeView extends Effect.Service<TreeView>()("TreeView", {
7673 ) ;
7774 }
7875 : undefined ,
79- } ;
80-
81- // Register the tree data provider
82- const treeView = yield * code . window . createTreeView ( options . viewId , {
83- treeDataProvider : provider ,
84- showCollapseAll : true ,
85- } ) ;
86-
87- return {
88- /**
89- * Refreshes the entire tree view.
90- */
91- refresh ( element ?: T ) {
92- return Effect . sync ( ( ) => eventEmitter . fire ( element ?? null ) ) ;
93- } ,
94-
95- /**
96- * Reveals an element in the tree view.
97- */
98- reveal (
99- element : T ,
100- options ?: { select ?: boolean ; focus ?: boolean ; expand ?: boolean } ,
101- ) {
102- return Effect . promise ( ( ) => treeView . reveal ( element , options ) ) ;
103- } ,
104-
105- /**
106- * Direct access to the underlying VS Code TreeView.
107- * Use with caution - prefer the provided methods.
108- */
109- get raw ( ) {
110- return treeView ;
111- } ,
112-
113- /**
114- * Get the event emitter for manual control.
115- */
116- get eventEmitter ( ) {
117- return eventEmitter ;
118- } ,
119- } ;
76+ } ,
77+ showCollapseAll : true ,
12078 } ) ;
121- } ,
79+
80+ return {
81+ /**
82+ * Refreshes the entire tree view.
83+ */
84+ refresh ( element ?: T ) {
85+ return Effect . sync ( ( ) => eventEmitter . fire ( element ?? null ) ) ;
86+ } ,
87+
88+ /**
89+ * Reveals an element in the tree view.
90+ */
91+ reveal (
92+ element : T ,
93+ options ?: { select ?: boolean ; focus ?: boolean ; expand ?: boolean } ,
94+ ) {
95+ return Effect . promise ( ( ) => treeView . reveal ( element , options ) ) ;
96+ } ,
97+ } ;
98+ } ) ,
12299 } ;
123- } ) . pipe ( Effect . annotateLogs ( "service" , "TreeView" ) ) ,
100+ } ) ,
124101} ) { }
125102
126103/**
0 commit comments