Skip to content

Commit d9dc8be

Browse files
author
Georgii Rychko
committed
feat(node removal): implement remove action in the node menu
1 parent 11b6d30 commit d9dc8be

4 files changed

Lines changed: 35 additions & 8 deletions

File tree

components/ng2-tree.component.ts

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@ import {EditableNodeDirective} from './editable-node.directive.ts';
66
@Component({
77
selector: 'ng2-tree',
88
template: `
9-
<ul class="tree" (keyup)="cancelActions($event)">
9+
<ul *ngIf="tree" class="tree" (keyup)="cancelActions($event)">
1010
<li>
11-
<div (mouseup)="showMenu($event)">
11+
<div (contextmenu)="showMenu($event)">
1212
<span class="folding" (click)="switchFolding($event, tree)" [ngClass]="foldingType(tree)"></span>
1313
<span class="node-value" *ngIf="!edit">{{tree.value}}</span>
1414
<input type="text" class="node-value" editable [nodeValue]="tree.value" (valueChanged)="applyNewValue($event, tree)" *ngIf="edit"/>
@@ -17,7 +17,7 @@ import {EditableNodeDirective} from './editable-node.directive.ts';
1717
<ul class="node-menu-content">
1818
<li (click)="rename($event, tree)">Rename node</li>
1919
<li>Add node</li>
20-
<li>Remove node</li>
20+
<li (click)="remove($event, tree)">Remove node</li>
2121
</ul>
2222
</div>
2323
<ng2-tree *ngFor="#child of tree.children" [tree]="child"></ng2-tree>
@@ -95,7 +95,14 @@ export class Ng2Tree implements OnInit {
9595
}
9696
}
9797

98-
private showMenu($event: any): void {
98+
private remove($event: any, node: any) {
99+
if ($event.which === 1) {
100+
this.treeService.emitRemoveEvent({node});
101+
this.isMenuVisible = false;
102+
}
103+
}
104+
105+
private showMenu($event: MouseEvent): void {
99106
if ($event.which === 3) {
100107
this.isMenuVisible = !this.isMenuVisible;
101108
this.treeService.emitMenuEvent({sender: this, action: 'close'})
@@ -119,5 +126,18 @@ export class Ng2Tree implements OnInit {
119126
this.isMenuVisible = false;
120127
}
121128
})
129+
130+
this.treeService.removeNodeEventStream()
131+
.subscribe(removeEvent => {
132+
if (!this.tree || !this.tree.children) return;
133+
for (let i = 0; i < this.tree.children.length; i++) {
134+
const child = this.tree.children[i];
135+
if (child === removeEvent.node) {
136+
delete this.tree.children[i];
137+
138+
break;
139+
}
140+
}
141+
})
122142
}
123143
}

components/ng2-tree.service.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import {Observable} from 'rxjs/Observable';
55
export class Ng2TreeService {
66
private menuEvents$:EventEmitter<any> = new EventEmitter();
77
private cancelEvents$:EventEmitter<any> = new EventEmitter();
8+
private removeEvents$:EventEmitter<any> = new EventEmitter();
89

910
menuEventStream(): Observable<any> {
1011
return this.menuEvents$;
@@ -13,6 +14,15 @@ export class Ng2TreeService {
1314
emitMenuEvent(event: any): void {
1415
this.menuEvents$.emit(event);
1516
}
17+
18+
19+
removeNodeEventStream(): Observable<any> {
20+
return this.removeEvents$;
21+
}
22+
23+
emitRemoveEvent(event: any): void {
24+
this.removeEvents$.emit(event);
25+
}
1626

1727
cancelEventStream(): Observable<any> {
1828
return this.cancelEvents$;

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
"author": "rychko.georgiy@gmail.com",
1212
"license": "ISC",
1313
"dependencies": {
14-
"angular2": "2.0.0-beta.12",
14+
"angular2": "2.0.0-beta.13",
1515
"es6-shim": "0.35.0",
1616
"lodash": "4.6.1",
1717
"reflect-metadata": "0.1.2",

tsconfig.json

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,6 @@
1414
"noImplicitAny": true,
1515
"suppressImplicitAnyIndexErrors": true
1616
},
17-
"exclude": [
18-
"node_modules"
19-
],
2017
"files": [
2118
"typings/main.d.ts"
2219
]

0 commit comments

Comments
 (0)