Skip to content

Commit bd02fe8

Browse files
author
Georgii Rychko
authored
Merge pull request #32 from valor-software/feat-static-tree
feat(tree): make it possible to create static tree (refs #21)
2 parents b9e2dd1 + d9b3c79 commit bd02fe8

4 files changed

Lines changed: 36 additions & 14 deletions

File tree

demo/app.component.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,10 @@ export class AppComponent {
5656
value: 'Fonts',
5757
children: [
5858
{
59-
value: 'Serif',
59+
value: 'Serif - All my children and I are STATIC ¯\\_(ツ)_/¯',
60+
options: {
61+
static: true
62+
},
6063
children: [
6164
{value: 'Antiqua'},
6265
{value: 'DejaVu Serif'},

src/draggable/node-draggable.directive.ts

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Directive, ElementRef, Input, Inject, Renderer, OnDestroy } from '@angular/core';
1+
import { Directive, ElementRef, Input, Inject, Renderer, OnDestroy, OnInit } from '@angular/core';
22
import { TreeModel } from '../tree.types';
33
import { NodeDraggableService } from './node-draggable.service';
44
import { CapturedNode } from './captured-node';
@@ -7,7 +7,7 @@ import { NodeDraggableEvent } from './draggable.types';
77
@Directive({
88
selector: '[nodeDraggable]'
99
})
10-
export class NodeDraggableDirective implements OnDestroy {
10+
export class NodeDraggableDirective implements OnDestroy, OnInit {
1111
public static DATA_TRANSFER_STUB_DATA: string = 'some browsers enable drag-n-drop only when dataTransfer has data';
1212

1313
@Input()
@@ -24,15 +24,18 @@ export class NodeDraggableDirective implements OnDestroy {
2424
@Inject(Renderer) private renderer: Renderer) {
2525

2626
this.nodeNativeElement = element.nativeElement;
27+
}
2728

28-
renderer.setElementAttribute(this.nodeNativeElement, 'draggable', 'true');
29-
30-
this.disposersForDragListeners.push(renderer.listen(this.nodeNativeElement, 'dragstart', this.handleDragStart.bind(this)));
31-
this.disposersForDragListeners.push(renderer.listen(this.nodeNativeElement, 'dragenter', this.handleDragEnter.bind(this)));
32-
this.disposersForDragListeners.push(renderer.listen(this.nodeNativeElement, 'dragover', this.handleDragOver.bind(this)));
33-
this.disposersForDragListeners.push(renderer.listen(this.nodeNativeElement, 'dragleave', this.handleDragLeave.bind(this)));
34-
this.disposersForDragListeners.push(renderer.listen(this.nodeNativeElement, 'drop', this.handleDrop.bind(this)));
35-
this.disposersForDragListeners.push(renderer.listen(this.nodeNativeElement, 'dragend', this.handleDragEnd.bind(this)));
29+
public ngOnInit(): void {
30+
if (!this.tree.options.static) {
31+
this.renderer.setElementAttribute(this.nodeNativeElement, 'draggable', 'true');
32+
this.disposersForDragListeners.push(this.renderer.listen(this.nodeNativeElement, 'dragenter', this.handleDragEnter.bind(this)));
33+
this.disposersForDragListeners.push(this.renderer.listen(this.nodeNativeElement, 'dragover', this.handleDragOver.bind(this)));
34+
this.disposersForDragListeners.push(this.renderer.listen(this.nodeNativeElement, 'dragstart', this.handleDragStart.bind(this)));
35+
this.disposersForDragListeners.push(this.renderer.listen(this.nodeNativeElement, 'dragleave', this.handleDragLeave.bind(this)));
36+
this.disposersForDragListeners.push(this.renderer.listen(this.nodeNativeElement, 'drop', this.handleDrop.bind(this)));
37+
this.disposersForDragListeners.push(this.renderer.listen(this.nodeNativeElement, 'dragend', this.handleDragEnd.bind(this)));
38+
}
3639
}
3740

3841
public ngOnDestroy(): void {

src/tree.component.ts

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { Input, Component, OnInit, EventEmitter, Output, ElementRef, Inject } from '@angular/core';
2-
import { TreeStatus, TreeModel, FoldingType, NodeEvent, RenamableNode, NodeSelectedEvent } from './tree.types';
2+
import { TreeStatus, TreeModel, TreeModelOptions, FoldingType, NodeEvent, RenamableNode, NodeSelectedEvent } from './tree.types';
33
import { NodeDraggableService } from './draggable/node-draggable.service';
44
import { NodeMenuService } from './menu/node-menu.service';
55
import { NodeDraggableEventAction, NodeDraggableEvent } from './draggable/draggable.types';
@@ -62,9 +62,10 @@ export class TreeInternalComponent implements OnInit {
6262

6363
public ngOnInit(): void {
6464
this.indexInParent = 0;
65-
66-
this.isLeaf = !Array.isArray(this.tree.children);
6765
this.tree._indexInParent = this.indexInParent;
66+
67+
this.isLeaf = !Array.isArray(this.tree.children);
68+
this.tree.options = TreeModelOptions.merge(this.tree, this.parentTree);
6869

6970
this.setUpNodeSelectedEventHandler();
7071
this.setUpMenuEventHandler();
@@ -257,6 +258,10 @@ export class TreeInternalComponent implements OnInit {
257258
}
258259

259260
private showMenu(e: MouseEvent): void {
261+
if (this.tree.options.static) {
262+
return;
263+
}
264+
260265
if (isRightButtonClicked(e)) {
261266
this.isMenuVisible = !this.isMenuVisible;
262267
this.nodeMenuService.nodeMenuEvents$.next({

src/tree.types.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import * as _ from 'lodash';
2+
13
export class FoldingType {
24
public static Expanded: FoldingType = new FoldingType('node-expanded');
35
public static Collapsed: FoldingType = new FoldingType('node-collapsed');
@@ -14,11 +16,20 @@ export class FoldingType {
1416
export interface TreeModel {
1517
value: string | RenamableNode;
1618
children?: Array<TreeModel>;
19+
options?: TreeModelOptions;
1720
_status?: TreeStatus;
1821
_foldingType?: FoldingType;
1922
_indexInParent?: number;
2023
}
2124

25+
export class TreeModelOptions {
26+
static: boolean = false;
27+
28+
static merge(sourceA: TreeModel, sourceB: TreeModel): TreeModelOptions {
29+
return _.defaults({}, _.get(sourceA, 'options'), _.get(sourceB, 'options'), {static: false});
30+
}
31+
}
32+
2233
export enum TreeStatus {
2334
New,
2435
Modified,

0 commit comments

Comments
 (0)