Skip to content

Commit 9bcb974

Browse files
Licen-itAkshat55
andauthored
feat: Exposing toggle output for treeview (#2968)
Co-authored-by: Akshat Patel <[email protected]>
1 parent 35a0eac commit 9bcb974

File tree

3 files changed

+28
-8
lines changed

3 files changed

+28
-8
lines changed

src/treeview/tree-node.component.ts

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import {
1111
} from "@angular/core";
1212
import { Subscription } from "rxjs";
1313
import { TreeViewService } from "./treeview.service";
14-
import { Node } from "./tree-node.types";
14+
import { EventOnNode, Node } from "./tree-node.types";
1515

1616
@Component({
1717
selector: "cds-tree-node",
@@ -166,10 +166,10 @@ export class TreeNodeComponent implements AfterContentChecked, OnInit, OnDestroy
166166
return this._node;
167167
}
168168

169-
@Output() nodeFocus = new EventEmitter();
170-
@Output() nodeBlur = new EventEmitter();
171-
@Output() nodeSelect = new EventEmitter();
172-
@Output() nodetoggle = new EventEmitter();
169+
@Output() nodeFocus = new EventEmitter<EventOnNode>();
170+
@Output() nodeBlur = new EventEmitter<EventOnNode>();
171+
@Output() nodeSelect = new EventEmitter<Node>();
172+
@Output() nodetoggle = new EventEmitter<EventOnNode>();
173173

174174
offset;
175175
private _node;
@@ -212,8 +212,10 @@ export class TreeNodeComponent implements AfterContentChecked, OnInit, OnDestroy
212212
if (this.selectable || this.children.length === 0) {
213213
this.selected = true;
214214
this.active = true;
215+
const node = { id: this.id, label: this.label, value: this.value };
215216
// Passes event to all nodes to update highlighting & parent to emit
216-
this.treeViewService.selectNode({ id: this.id, label: this.label, value: this.value });
217+
this.treeViewService.selectNode(node);
218+
this.nodeSelect.emit(node);
217219
} else {
218220
this.toggleExpanded(event);
219221
}

src/treeview/tree-node.types.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,3 +17,8 @@ export interface Node {
1717
children?: Node[];
1818
[key: string]: any;
1919
}
20+
21+
export interface EventOnNode {
22+
node: Node;
23+
event: Event;
24+
}

src/treeview/treeview.component.ts

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import {
1313
OnDestroy
1414
} from "@angular/core";
1515
import { Subscription } from "rxjs";
16-
import { Node } from "./tree-node.types";
16+
import { EventOnNode, Node } from "./tree-node.types";
1717
import { TreeViewService } from "./treeview.service";
1818

1919
/**
@@ -57,7 +57,8 @@ import { TreeViewService } from "./treeview.service";
5757
<ng-template #notProjected>
5858
<cds-tree-node
5959
*ngFor="let node of tree"
60-
[node]="node">
60+
[node]="node"
61+
(nodetoggle)="onNodeToggle($event)">
6162
</cds-tree-node>
6263
</ng-template>
6364
</div>
@@ -101,6 +102,7 @@ export class TreeViewComponent implements AfterViewInit, OnInit, OnDestroy {
101102
}
102103

103104
@Output() select = new EventEmitter<Node | Node[]>();
105+
@Output() toggle = new EventEmitter<Node>();
104106
@ViewChild("treeWrapper") root: ElementRef;
105107

106108
private treeWalker: TreeWalker;
@@ -161,6 +163,17 @@ export class TreeViewComponent implements AfterViewInit, OnInit, OnDestroy {
161163
}
162164
}
163165

166+
/**
167+
* Propagate node toggle event
168+
* @param eventOnNode - EventOnNode
169+
*/
170+
onNodeToggle(eventOnNode: EventOnNode) {
171+
if (!eventOnNode) {
172+
return;
173+
}
174+
this.toggle.emit(eventOnNode.node)
175+
}
176+
164177
/**
165178
* Node focus change
166179
* @param node - Node

0 commit comments

Comments
 (0)