@coolon/angular-ui-powerups 12.0.7 → 12.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/coolon-angular-ui-powerups.umd.js +300 -300
- package/bundles/coolon-angular-ui-powerups.umd.js.map +1 -1
- package/coolon-angular-ui-powerups.metadata.json +1 -1
- package/esm2015/lib/components/exports.js +1 -1
- package/esm2015/lib/components/exports.js.map +1 -1
- package/esm2015/lib/components/exports.metadata.json +1 -1
- package/esm2015/lib/components/tables/abstract-table-model.js +11 -6
- package/esm2015/lib/components/tables/abstract-table-model.js.map +1 -1
- package/esm2015/lib/components/tables/abstract-table-model.metadata.json +1 -1
- package/esm2015/lib/components/tables/abstract-table.component.js.map +1 -1
- package/esm2015/lib/components/tables/table/table-model.js +18 -12
- package/esm2015/lib/components/tables/table/table-model.js.map +1 -1
- package/esm2015/lib/components/tables/table/table-model.metadata.json +1 -1
- package/esm2015/lib/components/tables/tree-table/decorated-tree-node.js +151 -146
- package/esm2015/lib/components/tables/tree-table/decorated-tree-node.js.map +1 -1
- package/esm2015/lib/components/tables/tree-table/decorated-tree-node.metadata.json +1 -1
- package/esm2015/lib/components/tables/tree-table/flattened-tree-list-model.js +29 -0
- package/esm2015/lib/components/tables/tree-table/flattened-tree-list-model.js.map +1 -0
- package/esm2015/lib/components/tables/tree-table/flattened-tree-list-model.metadata.json +1 -0
- package/esm2015/lib/components/tables/tree-table/tree-expansion-model.js +9 -8
- package/esm2015/lib/components/tables/tree-table/tree-expansion-model.js.map +1 -1
- package/esm2015/lib/components/tables/tree-table/tree-inheritance-icon/tree-inheritance-icon.component.js.map +1 -1
- package/esm2015/lib/components/tables/tree-table/tree-inheritance-icon/tree-inheritance-icon.component.metadata.json +1 -1
- package/esm2015/lib/components/tables/tree-table/tree-label-cell-renderer/tree-label-cell-renderer.component.js +9 -9
- package/esm2015/lib/components/tables/tree-table/tree-label-cell-renderer/tree-label-cell-renderer.component.js.map +1 -1
- package/esm2015/lib/components/tables/tree-table/tree-label-cell-renderer/tree-label-cell-renderer.component.metadata.json +1 -1
- package/esm2015/lib/components/tables/tree-table/tree-label-column-model.js.map +1 -1
- package/esm2015/lib/components/tables/tree-table/tree-label-column-model.metadata.json +1 -1
- package/esm2015/lib/components/tables/tree-table/tree-table-component.js.map +1 -1
- package/esm2015/lib/components/tables/tree-table/tree-table-component.metadata.json +1 -1
- package/esm2015/lib/components/tables/tree-table/tree-table-model.js +9 -20
- package/esm2015/lib/components/tables/tree-table/tree-table-model.js.map +1 -1
- package/esm2015/lib/components/tables/tree-table/tree-table-model.metadata.json +1 -1
- package/fesm2015/coolon-angular-ui-powerups.js +240 -228
- package/fesm2015/coolon-angular-ui-powerups.js.map +1 -1
- package/lib/components/exports.d.ts +1 -1
- package/lib/components/tables/abstract-table-model.d.ts +6 -5
- package/lib/components/tables/table/table-model.d.ts +12 -7
- package/lib/components/tables/tree-table/decorated-tree-node.d.ts +26 -40
- package/lib/components/tables/tree-table/{tree-to-list-model.d.ts → flattened-tree-list-model.d.ts} +4 -4
- package/lib/components/tables/tree-table/tree-expansion-model.d.ts +10 -11
- package/lib/components/tables/tree-table/tree-inheritance-icon/tree-inheritance-icon.component.d.ts +1 -2
- package/lib/components/tables/tree-table/tree-label-cell-renderer/tree-label-cell-renderer.component.d.ts +5 -5
- package/lib/components/tables/tree-table/tree-label-column-model.d.ts +4 -6
- package/lib/components/tables/tree-table/tree-table-component.d.ts +2 -3
- package/lib/components/tables/tree-table/tree-table-model.d.ts +9 -8
- package/package.json +1 -1
- package/esm2015/lib/components/tables/tree-table/tree-to-list-model.js +0 -25
- package/esm2015/lib/components/tables/tree-table/tree-to-list-model.js.map +0 -1
- package/esm2015/lib/components/tables/tree-table/tree-to-list-model.metadata.json +0 -1
|
@@ -1,166 +1,171 @@
|
|
|
1
|
+
import { __decorate, __metadata } from "tslib";
|
|
1
2
|
import { assert } from '@coolon/pectin';
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
const result = [];
|
|
32
|
-
this.visitSelfAndDescendants(child => result.push(child));
|
|
33
|
-
return result;
|
|
34
|
-
});
|
|
35
|
-
}
|
|
36
|
-
siblingsBefore() {
|
|
37
|
-
return this.memoize('siblingsBefore', () => {
|
|
3
|
+
import { Memoize } from '@typescript-plus/fast-memoize-decorator/dist/src';
|
|
4
|
+
export const treeNodeDecorator = Symbol('TreeDecorator');
|
|
5
|
+
export var DecoratedTreeNode;
|
|
6
|
+
(function (DecoratedTreeNode) {
|
|
7
|
+
function decorateRoot(node, extractChildren) {
|
|
8
|
+
return new Decorator(undefined, node, extractChildren).decoratedNode;
|
|
9
|
+
}
|
|
10
|
+
DecoratedTreeNode.decorateRoot = decorateRoot;
|
|
11
|
+
function getDecorator(node) {
|
|
12
|
+
assert.notNil(node[treeNodeDecorator]);
|
|
13
|
+
return node[treeNodeDecorator];
|
|
14
|
+
}
|
|
15
|
+
DecoratedTreeNode.getDecorator = getDecorator;
|
|
16
|
+
class Decorator {
|
|
17
|
+
constructor(parent, node, extractChildren) {
|
|
18
|
+
this.parent = parent;
|
|
19
|
+
this.node = node;
|
|
20
|
+
this.extractChildren = extractChildren;
|
|
21
|
+
node[treeNodeDecorator] = this; // inject our decorator.
|
|
22
|
+
}
|
|
23
|
+
get children() {
|
|
24
|
+
return this.extractChildren(this.node)
|
|
25
|
+
.map(child => { var _a; return (_a = child[treeNodeDecorator]) !== null && _a !== void 0 ? _a : new Decorator(this.decoratedNode, child, this.extractChildren); })
|
|
26
|
+
.map(d => d.decoratedNode);
|
|
27
|
+
}
|
|
28
|
+
get decoratedNode() {
|
|
29
|
+
return this.node;
|
|
30
|
+
}
|
|
31
|
+
siblingsBefore() {
|
|
38
32
|
if (this.parent) {
|
|
39
|
-
return this.parent.children.slice(0, this.myIndex());
|
|
33
|
+
return this.parent[treeNodeDecorator].children.slice(0, this.myIndex());
|
|
40
34
|
}
|
|
41
35
|
else {
|
|
42
36
|
return [];
|
|
43
37
|
}
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
siblingsAfter() {
|
|
47
|
-
return this.memoize('siblingsAfter', () => {
|
|
38
|
+
}
|
|
39
|
+
siblingsAfter() {
|
|
48
40
|
if (this.parent) {
|
|
49
|
-
return this.parent.children.slice(1 + this.myIndex());
|
|
41
|
+
return this.parent[treeNodeDecorator].children.slice(1 + this.myIndex());
|
|
50
42
|
}
|
|
51
43
|
else {
|
|
52
44
|
return [];
|
|
53
45
|
}
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
return this.memoize('myIndex', () => {
|
|
64
|
-
const myIndex = this.parent.children.findIndex(child => child.node === this.node);
|
|
46
|
+
}
|
|
47
|
+
siblings() {
|
|
48
|
+
return [].concat(this.siblingsBefore(), this.siblingsAfter());
|
|
49
|
+
}
|
|
50
|
+
isFirstChild() {
|
|
51
|
+
return this.parent ? this.myIndex() === 0 : false;
|
|
52
|
+
}
|
|
53
|
+
myIndex() {
|
|
54
|
+
const myIndex = this.parent[treeNodeDecorator].children.findIndex(child => this.node === child);
|
|
65
55
|
assert.isTruthy(myIndex >= 0, 'illegal state, expected index to be >= 0');
|
|
66
56
|
return myIndex;
|
|
67
|
-
});
|
|
68
|
-
}
|
|
69
|
-
isLastChild() {
|
|
70
|
-
return this.memoize('isLastChild', () => {
|
|
71
|
-
return this.parent ? this.myIndex() === this.parent.children.length - 1 : false;
|
|
72
|
-
});
|
|
73
|
-
}
|
|
74
|
-
hasSiblings() {
|
|
75
|
-
return this.parent ? this.node.children.length > 1 : false;
|
|
76
|
-
}
|
|
77
|
-
find(predicate) {
|
|
78
|
-
return _.find(this.descendants(), predicate);
|
|
79
|
-
}
|
|
80
|
-
select(predicate) {
|
|
81
|
-
return _.filter(this.descendants(), predicate);
|
|
82
|
-
}
|
|
83
|
-
flattenInto(array) {
|
|
84
|
-
this.visitSelfAndDescendants(child => array.push(child));
|
|
85
|
-
return array;
|
|
86
|
-
}
|
|
87
|
-
ancestors() {
|
|
88
|
-
return this.memoize('ancestors', () => {
|
|
89
|
-
return this.parent ? this.parent.ancestors().concat([this.parent]) : [];
|
|
90
|
-
});
|
|
91
|
-
}
|
|
92
|
-
ancestorsAndSelf() {
|
|
93
|
-
return this.memoize('ancestorsAndSelf', () => {
|
|
94
|
-
return this.ancestors().concat([(this.decoratedSelf)]);
|
|
95
|
-
});
|
|
96
|
-
}
|
|
97
|
-
pathToParent(parent) {
|
|
98
|
-
if (this.node === parent.node) {
|
|
99
|
-
return [];
|
|
100
57
|
}
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
return pathToParent.concat([this.parent]);
|
|
58
|
+
isLastChild() {
|
|
59
|
+
return this.parent ? this.myIndex() === this.parent[treeNodeDecorator].children.length - 1 : false;
|
|
104
60
|
}
|
|
105
|
-
|
|
106
|
-
|
|
61
|
+
hasSiblings() {
|
|
62
|
+
return this.parent ? this.parent[treeNodeDecorator].children.length > 1 : false;
|
|
107
63
|
}
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
return
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
return this.
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
return this.
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
if (_.isNil(this[key])) {
|
|
154
|
-
this[key] = factory();
|
|
64
|
+
// find(predicate: Predicate<T>): T {
|
|
65
|
+
// return _.find(this.descendants(), predicate);
|
|
66
|
+
// }
|
|
67
|
+
//
|
|
68
|
+
// select(predicate: Predicate<T>): T[] {
|
|
69
|
+
// return _.filter(this.descendants(), predicate);
|
|
70
|
+
// }
|
|
71
|
+
//
|
|
72
|
+
// flattenInto(array: T[]): T[] {
|
|
73
|
+
// this.visitSelfAndDescendants(child => array.push(child));
|
|
74
|
+
// return array;
|
|
75
|
+
// }
|
|
76
|
+
ancestors() {
|
|
77
|
+
return this.parent ? this.parent[treeNodeDecorator].ancestors().concat([this.parent]) : [];
|
|
78
|
+
}
|
|
79
|
+
// ancestorsAndSelf(): T[] {
|
|
80
|
+
// return this.memoize('ancestorsAndSelf', () => {
|
|
81
|
+
// return this.ancestors().concat([(this.decoratedSelf)]);
|
|
82
|
+
// });
|
|
83
|
+
// }
|
|
84
|
+
// pathToParent(parent: T): T[] {
|
|
85
|
+
// if (this.node === parent.node) {
|
|
86
|
+
// return [];
|
|
87
|
+
// } else if (this.parent) {
|
|
88
|
+
// const pathToParent = this.parent.pathToParent(parent);
|
|
89
|
+
// return pathToParent.concat([this.parent]);
|
|
90
|
+
// } else {
|
|
91
|
+
// throw new Error('parent is not an ancestor');
|
|
92
|
+
// }
|
|
93
|
+
// }
|
|
94
|
+
//
|
|
95
|
+
// pathToParentAndSelf(parent): T[] {
|
|
96
|
+
// return this.pathToParent(parent).concat([this.decoratedSelf]);
|
|
97
|
+
// }
|
|
98
|
+
isRoot() {
|
|
99
|
+
return !this.parent;
|
|
100
|
+
}
|
|
101
|
+
get depth() {
|
|
102
|
+
return this.isRoot() ? 0 : this.parent[treeNodeDecorator].depth + 1;
|
|
103
|
+
}
|
|
104
|
+
isLeaf() {
|
|
105
|
+
return !this.isRoot() && this.children.length < 1;
|
|
106
|
+
}
|
|
107
|
+
hasChildren() {
|
|
108
|
+
return this.children.length > 0;
|
|
155
109
|
}
|
|
156
|
-
return this[key];
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
export var DecoratedTreeNode;
|
|
160
|
-
(function (DecoratedTreeNode) {
|
|
161
|
-
function createRoot(node) {
|
|
162
|
-
return Mixin.createProxy(node, new DecoratedTreeNodeMixin(undefined, node));
|
|
163
110
|
}
|
|
164
|
-
|
|
111
|
+
__decorate([
|
|
112
|
+
Memoize(),
|
|
113
|
+
__metadata("design:type", Array),
|
|
114
|
+
__metadata("design:paramtypes", [])
|
|
115
|
+
], Decorator.prototype, "children", null);
|
|
116
|
+
__decorate([
|
|
117
|
+
Memoize(),
|
|
118
|
+
__metadata("design:type", Function),
|
|
119
|
+
__metadata("design:paramtypes", []),
|
|
120
|
+
__metadata("design:returntype", Array)
|
|
121
|
+
], Decorator.prototype, "siblingsBefore", null);
|
|
122
|
+
__decorate([
|
|
123
|
+
Memoize(),
|
|
124
|
+
__metadata("design:type", Function),
|
|
125
|
+
__metadata("design:paramtypes", []),
|
|
126
|
+
__metadata("design:returntype", Array)
|
|
127
|
+
], Decorator.prototype, "siblingsAfter", null);
|
|
128
|
+
__decorate([
|
|
129
|
+
Memoize(),
|
|
130
|
+
__metadata("design:type", Function),
|
|
131
|
+
__metadata("design:paramtypes", []),
|
|
132
|
+
__metadata("design:returntype", Array)
|
|
133
|
+
], Decorator.prototype, "siblings", null);
|
|
134
|
+
__decorate([
|
|
135
|
+
Memoize(),
|
|
136
|
+
__metadata("design:type", Function),
|
|
137
|
+
__metadata("design:paramtypes", []),
|
|
138
|
+
__metadata("design:returntype", Boolean)
|
|
139
|
+
], Decorator.prototype, "isFirstChild", null);
|
|
140
|
+
__decorate([
|
|
141
|
+
Memoize(),
|
|
142
|
+
__metadata("design:type", Function),
|
|
143
|
+
__metadata("design:paramtypes", []),
|
|
144
|
+
__metadata("design:returntype", void 0)
|
|
145
|
+
], Decorator.prototype, "myIndex", null);
|
|
146
|
+
__decorate([
|
|
147
|
+
Memoize(),
|
|
148
|
+
__metadata("design:type", Function),
|
|
149
|
+
__metadata("design:paramtypes", []),
|
|
150
|
+
__metadata("design:returntype", Boolean)
|
|
151
|
+
], Decorator.prototype, "isLastChild", null);
|
|
152
|
+
__decorate([
|
|
153
|
+
Memoize(),
|
|
154
|
+
__metadata("design:type", Function),
|
|
155
|
+
__metadata("design:paramtypes", []),
|
|
156
|
+
__metadata("design:returntype", Boolean)
|
|
157
|
+
], Decorator.prototype, "hasSiblings", null);
|
|
158
|
+
__decorate([
|
|
159
|
+
Memoize(),
|
|
160
|
+
__metadata("design:type", Function),
|
|
161
|
+
__metadata("design:paramtypes", []),
|
|
162
|
+
__metadata("design:returntype", Array)
|
|
163
|
+
], Decorator.prototype, "ancestors", null);
|
|
164
|
+
__decorate([
|
|
165
|
+
Memoize(),
|
|
166
|
+
__metadata("design:type", Number),
|
|
167
|
+
__metadata("design:paramtypes", [])
|
|
168
|
+
], Decorator.prototype, "depth", null);
|
|
169
|
+
DecoratedTreeNode.Decorator = Decorator;
|
|
165
170
|
})(DecoratedTreeNode || (DecoratedTreeNode = {}));
|
|
166
171
|
//# sourceMappingURL=decorated-tree-node.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decorated-tree-node.js","sourceRoot":"","sources":["../../../../../../../../libs/angular-ui-powerups/src/lib/components/tables/tree-table/decorated-tree-node.ts"],"names":[],"mappings":"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","sourcesContent":["import { assert, Predicate } from '@coolon/pectin';\nimport { Mixin } from '@coolon/typescript-utilities';\nimport * as _ from 'lodash';\nimport { TreeNode } from './tree-node';\nimport { SelfAndDescendantsVisitor, Visitor } from './visitable.class';\n\nclass DecoratedTreeNodeMixin<T extends TreeNode<T>> {\n\n constructor(readonly parent: DecoratedTreeNode<T> | undefined, readonly node: T) {\n }\n\n get decoratedSelf(): DecoratedTreeNode<T> {\n return this.memoize('decoratedSelf', () => {\n return this.parent ? this.parent.children.find(child => child.node === this.node) : DecoratedTreeNode.createRoot(this.node);\n });\n }\n\n get children(): DecoratedTreeNode<T>[] {\n return this.memoize('children', () => {\n return this.node.children ? this.node.children.map(child => {\n return Mixin.createProxy(child, new DecoratedTreeNodeMixin<T>(this.decoratedSelf, child));\n }) : [];\n });\n }\n\n descendants(): DecoratedTreeNode<T>[] {\n return this.memoize('descendants', () => {\n const result = [];\n this.visitDescendants(child => result.push(child));\n return result;\n });\n }\n\n selfAndDescendants(): DecoratedTreeNode<T>[] {\n return this.memoize('selfAndDescendants', () => {\n const result = [];\n this.visitSelfAndDescendants(child => result.push(child));\n return result;\n });\n }\n\n siblingsBefore(): DecoratedTreeNode<T>[] {\n return this.memoize('siblingsBefore', () => {\n if (this.parent) {\n return this.parent.children.slice(0, this.myIndex());\n } else {\n return [];\n }\n });\n }\n\n siblingsAfter(): DecoratedTreeNode<T>[] {\n return this.memoize('siblingsAfter', () => {\n if (this.parent) {\n return this.parent.children.slice(1 + this.myIndex());\n } else {\n return [];\n }\n });\n }\n\n siblings(): DecoratedTreeNode<T>[] {\n return this.memoize('siblings', () => [].concat(this.siblingsBefore(), this.siblingsAfter()));\n }\n\n isFirstChild(): boolean {\n return this.memoize('isFirstChild', () => this.parent ? this.myIndex() === 0 : false);\n }\n\n protected myIndex() {\n return this.memoize('myIndex', () => {\n const myIndex = this.parent.children.findIndex(child => child.node === this.node);\n assert.isTruthy(myIndex >= 0, 'illegal state, expected index to be >= 0');\n return myIndex;\n });\n }\n\n isLastChild(): boolean {\n return this.memoize('isLastChild', () => {\n return this.parent ? this.myIndex() === this.parent.children.length - 1 : false;\n });\n }\n\n hasSiblings(): boolean {\n return this.parent ? this.node.children.length > 1 : false;\n }\n\n find(predicate: Predicate<DecoratedTreeNode<T>>): DecoratedTreeNode<T> {\n return _.find(this.descendants(), predicate);\n }\n\n select(predicate: Predicate<DecoratedTreeNode<T>>): DecoratedTreeNode<T>[] {\n return _.filter(this.descendants(), predicate);\n }\n\n flattenInto(array: DecoratedTreeNode<T>[]): DecoratedTreeNode<T>[] {\n this.visitSelfAndDescendants(child => array.push(child));\n return array;\n }\n\n ancestors(): DecoratedTreeNode<T>[] {\n return this.memoize('ancestors', () => {\n return this.parent ? this.parent.ancestors().concat([this.parent]) : [];\n });\n }\n\n ancestorsAndSelf(): DecoratedTreeNode<T>[] {\n return this.memoize('ancestorsAndSelf', () => {\n return this.ancestors().concat([(this.decoratedSelf)]);\n });\n }\n\n pathToParent(parent: DecoratedTreeNode<T>): DecoratedTreeNode<T>[] {\n if (this.node === parent.node) {\n return [];\n } else if (this.parent) {\n const pathToParent = this.parent.pathToParent(parent);\n return pathToParent.concat([this.parent]);\n } else {\n throw new Error('parent is not an ancestor');\n }\n }\n\n pathToParentAndSelf(parent): DecoratedTreeNode<T>[] {\n return this.pathToParent(parent).concat([this.decoratedSelf]);\n }\n\n isRoot(): boolean {\n return !this.parent;\n }\n\n get depth(): number {\n return this.isRoot() ? 0 : this.parent.depth + 1;\n }\n\n isLeaf(): boolean {\n return !this.isRoot() && this.node.children.length < 1;\n }\n\n hasChildren(): boolean {\n return this.node.children && this.node.children.length > 0;\n }\n\n depthFromParent(parent): number {\n return this.pathToParent(parent).length;\n }\n\n treeDepth(): number {\n return this.memoize('treeDepth', () => {\n return 1 + this.descendants().map(child => child.depthFromParent(this)).reduce((prev, current) => Math.max(prev, current));\n });\n }\n\n flatten(): DecoratedTreeNode<T>[] {\n return this.memoize('flatten', () => {\n return this.flattenInto([]);\n });\n }\n\n visit<V extends Visitor<DecoratedTreeNode<T>>>(visitor: V): V {\n visitor.visit(this as any as DecoratedTreeNode<T>);\n return visitor;\n }\n\n visitChildren<V extends Visitor<DecoratedTreeNode<T>>>(visitor: V): V {\n _.each(this.children, child => child.visit(visitor));\n return visitor;\n }\n\n visitSelfAndDescendants(callback: (it: DecoratedTreeNode<T>) => void) {\n this.visit(new SelfAndDescendantsVisitor.Each<DecoratedTreeNode<T>>(callback));\n }\n\n visitDescendants(callback: (it: DecoratedTreeNode<T>) => void) {\n this.visitChildren(new SelfAndDescendantsVisitor.Each<DecoratedTreeNode<T>>(callback));\n }\n\n\n protected memoize<V>(property: string, factory: () => V) {\n const key = `__${property}`;\n if (_.isNil(this[key])) {\n this[key] = factory();\n }\n return this[key];\n }\n\n}\n\nexport type DecoratedTreeNode<T extends TreeNode<T>> = Omit<T, 'children'> & DecoratedTreeNodeMixin<T>;\n\nexport namespace DecoratedTreeNode {\n export function createRoot<T extends TreeNode<T>>(node: T): DecoratedTreeNode<T> {\n return Mixin.createProxy(node, new DecoratedTreeNodeMixin<T>(undefined, node));\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"decorated-tree-node.js","sourceRoot":"","sources":["../../../../../../../../libs/angular-ui-powerups/src/lib/components/tables/tree-table/decorated-tree-node.ts"],"names":[],"mappings":"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","sourcesContent":["import { assert } from '@coolon/pectin';\nimport { Memoize } from '@typescript-plus/fast-memoize-decorator/dist/src';\n\nexport const treeNodeDecorator = Symbol('TreeDecorator');\n\nexport interface HasTreeNodeDecorator<T> {\n [treeNodeDecorator]: DecoratedTreeNode.Decorator<T>\n}\n\nexport type DecoratedTreeNode<T> = T & HasTreeNodeDecorator<T>\n\nexport namespace DecoratedTreeNode {\n\n export function decorateRoot<T>(node: T, extractChildren: (node: T) => T[]):DecoratedTreeNode<T> {\n return new Decorator<T>(undefined, node, extractChildren).decoratedNode;\n }\n\n export function getDecorator<T>(node:T):Decorator<T> {\n assert.notNil(node[treeNodeDecorator]);\n return node[treeNodeDecorator];\n }\n\n export class Decorator<T> {\n\n constructor(readonly parent: DecoratedTreeNode<T> | undefined, private readonly node: T, private readonly extractChildren: (node: T) => T[]) {\n node[treeNodeDecorator] = this; // inject our decorator.\n }\n\n @Memoize()\n get children(): DecoratedTreeNode<T>[] {\n return this.extractChildren(this.node)\n .map(child => child[treeNodeDecorator] ?? new Decorator(this.decoratedNode, child, this.extractChildren))\n .map(d => d.decoratedNode)\n }\n\n get decoratedNode(): DecoratedTreeNode<T> {\n return this.node as DecoratedTreeNode<T>\n }\n\n @Memoize()\n siblingsBefore(): T[] {\n if (this.parent) {\n return this.parent[treeNodeDecorator].children.slice(0, this.myIndex());\n } else {\n return [];\n }\n }\n\n @Memoize()\n siblingsAfter(): T[] {\n if (this.parent) {\n return this.parent[treeNodeDecorator].children.slice(1 + this.myIndex());\n } else {\n return [];\n }\n }\n\n @Memoize()\n siblings(): T[] {\n return [].concat(this.siblingsBefore(), this.siblingsAfter());\n }\n\n @Memoize()\n isFirstChild(): boolean {\n return this.parent ? this.myIndex() === 0 : false;\n }\n\n @Memoize()\n protected myIndex() {\n const myIndex = this.parent[treeNodeDecorator].children.findIndex(child => this.node === child);\n assert.isTruthy(myIndex >= 0, 'illegal state, expected index to be >= 0');\n return myIndex;\n }\n\n @Memoize()\n isLastChild(): boolean {\n return this.parent ? this.myIndex() === this.parent[treeNodeDecorator].children.length - 1 : false;\n }\n\n @Memoize()\n hasSiblings(): boolean {\n return this.parent ? this.parent[treeNodeDecorator].children.length > 1 : false;\n }\n\n // find(predicate: Predicate<T>): T {\n // return _.find(this.descendants(), predicate);\n // }\n //\n // select(predicate: Predicate<T>): T[] {\n // return _.filter(this.descendants(), predicate);\n // }\n //\n // flattenInto(array: T[]): T[] {\n // this.visitSelfAndDescendants(child => array.push(child));\n // return array;\n // }\n\n @Memoize()\n ancestors(): T[] {\n return this.parent ? this.parent[treeNodeDecorator].ancestors().concat([this.parent]) : [];\n }\n\n // ancestorsAndSelf(): T[] {\n // return this.memoize('ancestorsAndSelf', () => {\n // return this.ancestors().concat([(this.decoratedSelf)]);\n // });\n // }\n\n // pathToParent(parent: T): T[] {\n // if (this.node === parent.node) {\n // return [];\n // } else if (this.parent) {\n // const pathToParent = this.parent.pathToParent(parent);\n // return pathToParent.concat([this.parent]);\n // } else {\n // throw new Error('parent is not an ancestor');\n // }\n // }\n //\n // pathToParentAndSelf(parent): T[] {\n // return this.pathToParent(parent).concat([this.decoratedSelf]);\n // }\n\n isRoot(): boolean {\n return !this.parent;\n }\n\n @Memoize()\n get depth(): number {\n return this.isRoot() ? 0 : this.parent[treeNodeDecorator].depth + 1;\n }\n\n isLeaf(): boolean {\n return !this.isRoot() && this.children.length < 1;\n }\n\n hasChildren(): boolean {\n return this.children.length > 0;\n }\n\n // depthFromParent(parent): number {\n // return this.pathToParent(parent).length;\n // }\n //\n // treeDepth(): number {\n // return this.memoize('treeDepth', () => {\n // return 1 + this.descendants().map(child => child.depthFromParent(this)).reduce((prev, current) => Math.max(prev, current));\n // });\n // }\n\n // flatten(): T[] {\n // return this.memoize('flatten', () => {\n // return this.flattenInto([]);\n // });\n // }\n //\n // visit<V extends Visitor<T>>(visitor: V): V {\n // visitor.visit(this as any as T);\n // return visitor;\n // }\n //\n // visitChildren<V extends Visitor<T>>(visitor: V): V {\n // _.each(this.decoratedChildren, child => child.visit(visitor));\n // return visitor;\n // }\n //\n // visitSelfAndDescendants(callback: (it: T) => void) {\n // this.visit(new SelfAndDescendantsVisitor.Each<T>(callback));\n // }\n //\n // visitDescendants(callback: (it: T) => void) {\n // this.visitChildren(new SelfAndDescendantsVisitor.Each<T>(callback));\n // }\n //\n\n }\n\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
[{"__symbolic":"module","version":4,"metadata":{"DecoratedTreeNode":{"__symbolic":"interface"}}}]
|
|
1
|
+
[{"__symbolic":"module","version":4,"metadata":{"treeNodeDecorator":{"__symbolic":"call","expression":{"__symbolic":"reference","name":"Symbol"},"arguments":["TreeDecorator"]},"HasTreeNodeDecorator":{"__symbolic":"interface"},"DecoratedTreeNode":{"__symbolic":"interface"}}}]
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { ComputedListModel } from '@coolon/pectin';
|
|
2
|
+
import { DecoratedTreeNode, treeNodeDecorator } from './decorated-tree-node';
|
|
3
|
+
export class FlattenedTreeListModel extends ComputedListModel {
|
|
4
|
+
constructor(source, childRef, expansionModel) {
|
|
5
|
+
super(source);
|
|
6
|
+
this.source = source;
|
|
7
|
+
this.childRef = childRef;
|
|
8
|
+
this.expansionModel = expansionModel;
|
|
9
|
+
this.trackSource(expansionModel.isExpandedPredicate);
|
|
10
|
+
}
|
|
11
|
+
getIdentityOf(item) {
|
|
12
|
+
return this.source.identityOf(item);
|
|
13
|
+
}
|
|
14
|
+
compute(values) {
|
|
15
|
+
const result = [];
|
|
16
|
+
values.forEach(rootNode => {
|
|
17
|
+
return this.addNodeAndVisibleChildren(DecoratedTreeNode.decorateRoot(rootNode, this.childRef), result);
|
|
18
|
+
});
|
|
19
|
+
return result;
|
|
20
|
+
}
|
|
21
|
+
addNodeAndVisibleChildren(node, result) {
|
|
22
|
+
result.push(node);
|
|
23
|
+
const decorator = node[treeNodeDecorator];
|
|
24
|
+
if (decorator.hasChildren() && !this.expansionModel.isCollapsed(node)) {
|
|
25
|
+
decorator.children.forEach(child => this.addNodeAndVisibleChildren(child, result));
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=flattened-tree-list-model.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flattened-tree-list-model.js","sourceRoot":"","sources":["../../../../../../../../libs/angular-ui-powerups/src/lib/components/tables/tree-table/flattened-tree-list-model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAa,MAAM,gBAAgB,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAG7E,MAAM,OAAO,sBAA0B,SAAQ,iBAA4C;IAEzF,YAA6B,MAAoB,EAAmB,QAA0B,EAAW,cAAwD;QAC/J,KAAK,CAAC,MAAM,CAAC,CAAC;QADa,WAAM,GAAN,MAAM,CAAc;QAAmB,aAAQ,GAAR,QAAQ,CAAkB;QAAW,mBAAc,GAAd,cAAc,CAA0C;QAE/J,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,mBAAmB,CAAC,CAAA;IACtD,CAAC;IAED,aAAa,CAAC,IAA0B;QACtC,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IACtC,CAAC;IAED,OAAO,CAAC,MAAW;QACjB,MAAM,MAAM,GAA2B,EAAE,CAAC;QAC1C,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;YACxB,OAAO,IAAI,CAAC,yBAAyB,CAAC,iBAAiB,CAAC,YAAY,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,CAAC;QACzG,CAAC,CAAC,CAAC;QACH,OAAO,MAAM,CAAC;IAChB,CAAC;IAGO,yBAAyB,CAAC,IAA0B,EAAE,MAA8B;QAC1F,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClB,MAAM,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAC1C,IAAI,SAAS,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE;YACrE,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,yBAAyB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;SACpF;IACH,CAAC;CAEF","sourcesContent":["import { ComputedListModel, ListModel } from '@coolon/pectin';\nimport { DecoratedTreeNode, treeNodeDecorator } from './decorated-tree-node';\nimport { TreeExpansionModel } from './tree-expansion-model';\n\nexport class FlattenedTreeListModel<T> extends ComputedListModel<DecoratedTreeNode<T>, T[]> {\n\n constructor(private readonly source: ListModel<T>, private readonly childRef: (node: T) => T[], readonly expansionModel: TreeExpansionModel<DecoratedTreeNode<T>>) {\n super(source);\n this.trackSource(expansionModel.isExpandedPredicate)\n }\n\n getIdentityOf(item: DecoratedTreeNode<T>): any {\n return this.source.identityOf(item);\n }\n\n compute(values: T[]): DecoratedTreeNode<T>[] {\n const result: DecoratedTreeNode<T>[] = [];\n values.forEach(rootNode => {\n return this.addNodeAndVisibleChildren(DecoratedTreeNode.decorateRoot(rootNode, this.childRef), result);\n });\n return result;\n }\n\n\n private addNodeAndVisibleChildren(node: DecoratedTreeNode<T>, result: DecoratedTreeNode<T>[]) {\n result.push(node);\n const decorator = node[treeNodeDecorator];\n if (decorator.hasChildren() && !this.expansionModel.isCollapsed(node)) {\n decorator.children.forEach(child => this.addNodeAndVisibleChildren(child, result));\n }\n }\n\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
[{"__symbolic":"module","version":4,"metadata":{"FlattenedTreeListModel":{"__symbolic":"class","extends":{"__symbolic":"reference","module":"@coolon/pectin","name":"ComputedListModel","line":4,"character":47},"arity":1,"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@coolon/pectin","name":"ListModel","line":6,"character":39,"arguments":[{"__symbolic":"error","message":"Could not resolve type","line":6,"character":49,"context":{"typeName":"T"}}]},{"__symbolic":"error","message":"Expression form not supported","line":6,"character":80},{"__symbolic":"reference","module":"./tree-expansion-model","name":"TreeExpansionModel","line":6,"character":123,"arguments":[{"__symbolic":"reference","module":"./decorated-tree-node","name":"DecoratedTreeNode","line":6,"character":142,"arguments":[{"__symbolic":"error","message":"Could not resolve type","line":6,"character":160,"context":{"typeName":"T"}}]}]}]}],"getIdentityOf":[{"__symbolic":"method"}],"compute":[{"__symbolic":"method"}],"addNodeAndVisibleChildren":[{"__symbolic":"method"}]}}}}]
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { MutableValueModel } from '@coolon/pectin';
|
|
2
|
+
import { DecoratedTreeNode } from './decorated-tree-node';
|
|
2
3
|
export class TreeExpansionModel {
|
|
3
4
|
constructor(identityOf) {
|
|
4
5
|
this.identityOf = identityOf;
|
|
@@ -12,37 +13,37 @@ export class TreeExpansionModel {
|
|
|
12
13
|
// @Trace()
|
|
13
14
|
expand(node) {
|
|
14
15
|
if (this.isCollapsed(node)) {
|
|
15
|
-
this.collapsedIds.delete(this.identityOf(node
|
|
16
|
+
this.collapsedIds.delete(this.identityOf(node));
|
|
16
17
|
this.updatePredicate();
|
|
17
18
|
}
|
|
18
19
|
}
|
|
19
20
|
// @Trace()
|
|
20
21
|
collapse(node) {
|
|
21
22
|
if (!this.isCollapsed(node)) {
|
|
22
|
-
this.collapsedIds.add(this.identityOf(node
|
|
23
|
+
this.collapsedIds.add(this.identityOf(node));
|
|
23
24
|
this.updatePredicate();
|
|
24
25
|
}
|
|
25
26
|
}
|
|
26
27
|
canExpand(node) {
|
|
27
|
-
return node.hasChildren() && this.isCollapsed(node);
|
|
28
|
+
return DecoratedTreeNode.getDecorator(node).hasChildren() && this.isCollapsed(node);
|
|
28
29
|
}
|
|
29
30
|
canCollapse(node) {
|
|
30
|
-
return node.hasChildren() && !this.isCollapsed(node);
|
|
31
|
+
return DecoratedTreeNode.getDecorator(node).hasChildren() && !this.isCollapsed(node);
|
|
31
32
|
}
|
|
32
33
|
isCollapsed(node) {
|
|
33
|
-
return this.collapsedIds.has(this.identityOf(node
|
|
34
|
+
return this.collapsedIds.has(this.identityOf(node));
|
|
34
35
|
}
|
|
35
36
|
isExpanded(node) {
|
|
36
37
|
return !this.isCollapsed(node);
|
|
37
38
|
}
|
|
38
39
|
ensureAncestorsAndSelfVisible(node) {
|
|
39
|
-
node.ancestors()
|
|
40
|
-
.map(a => this.identityOf(node
|
|
40
|
+
DecoratedTreeNode.getDecorator(node).ancestors()
|
|
41
|
+
.map(a => this.identityOf(node))
|
|
41
42
|
.forEach(id => this.collapsedIds.delete(id));
|
|
42
43
|
this.updatePredicate();
|
|
43
44
|
}
|
|
44
45
|
updatePredicate() {
|
|
45
|
-
this._isExpandedPredicate.value = (node) => !this.collapsedIds.has(this.identityOf(node
|
|
46
|
+
this._isExpandedPredicate.value = (node) => !this.collapsedIds.has(this.identityOf(node));
|
|
46
47
|
}
|
|
47
48
|
}
|
|
48
49
|
//# sourceMappingURL=tree-expansion-model.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tree-expansion-model.js","sourceRoot":"","sources":["../../../../../../../../libs/angular-ui-powerups/src/lib/components/tables/tree-table/tree-expansion-model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"tree-expansion-model.js","sourceRoot":"","sources":["../../../../../../../../libs/angular-ui-powerups/src/lib/components/tables/tree-table/tree-expansion-model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAC,MAAM,uBAAuB,CAAC;AAEzD,MAAM,OAAO,kBAAkB;IAK7B,YAA6B,UAA4B;QAA5B,eAAU,GAAV,UAAU,CAAkB;QAJxC,iBAAY,GAAG,IAAI,GAAG,EAAO,CAAC;QAE9B,yBAAoB,GAAG,IAAI,iBAAiB,CAAuB,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;QAG9F,IAAI,CAAC,eAAe,EAAE,CAAC;IACzB,CAAC;IAED,IAAI,mBAAmB;QACrB,OAAO,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC;IAC5C,CAAC;IAED,WAAW;IACX,MAAM,CAAC,IAAO;QACZ,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE;YAC1B,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;YAChD,IAAI,CAAC,eAAe,EAAE,CAAC;SACxB;IACH,CAAC;IAED,WAAW;IACX,QAAQ,CAAC,IAAO;QACd,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE;YAC3B,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;YAC7C,IAAI,CAAC,eAAe,EAAE,CAAC;SACxB;IACH,CAAC;IAED,SAAS,CAAC,IAAO;QACf,OAAO,iBAAiB,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IACtF,CAAC;IAED,WAAW,CAAC,IAAO;QACjB,OAAO,iBAAiB,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IACvF,CAAC;IAED,WAAW,CAAC,IAAO;QACjB,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;IACtD,CAAC;IAED,UAAU,CAAC,IAAO;QAChB,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IAED,6BAA6B,CAAC,IAAO;QACnC,iBAAiB,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE;aAC7C,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;aAC/B,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QAC/C,IAAI,CAAC,eAAe,EAAE,CAAC;IACzB,CAAC;IAEO,eAAe;QACrB,IAAI,CAAC,oBAAoB,CAAC,KAAK,GAAG,CAAC,IAAO,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;IAC/F,CAAC;CAEF","sourcesContent":["import { MutableValueModel } from '@coolon/pectin';\nimport { DecoratedTreeNode} from './decorated-tree-node';\n\nexport class TreeExpansionModel<T> {\n private readonly collapsedIds = new Set<any>();\n\n private readonly _isExpandedPredicate = new MutableValueModel<(node: T) => boolean>(() => true);\n\n constructor(private readonly identityOf: (node: T) => any) {\n this.updatePredicate();\n }\n\n get isExpandedPredicate() {\n return this._isExpandedPredicate.readonly;\n }\n\n // @Trace()\n expand(node: T) { // TODO: add DecoratedTreeNode.isDecorated(node) to allow using the raw node type as well.\n if (this.isCollapsed(node)) {\n this.collapsedIds.delete(this.identityOf(node));\n this.updatePredicate();\n }\n }\n\n // @Trace()\n collapse(node: T) {\n if (!this.isCollapsed(node)) {\n this.collapsedIds.add(this.identityOf(node));\n this.updatePredicate();\n }\n }\n\n canExpand(node: T): boolean {\n return DecoratedTreeNode.getDecorator(node).hasChildren() && this.isCollapsed(node);\n }\n\n canCollapse(node: T): boolean {\n return DecoratedTreeNode.getDecorator(node).hasChildren() && !this.isCollapsed(node);\n }\n\n isCollapsed(node: T): boolean {\n return this.collapsedIds.has(this.identityOf(node));\n }\n\n isExpanded(node: T): boolean {\n return !this.isCollapsed(node);\n }\n\n ensureAncestorsAndSelfVisible(node: T) {\n DecoratedTreeNode.getDecorator(node).ancestors()\n .map(a => this.identityOf(node))\n .forEach(id => this.collapsedIds.delete(id));\n this.updatePredicate();\n }\n\n private updatePredicate() {\n this._isExpandedPredicate.value = (node: T) => !this.collapsedIds.has(this.identityOf(node));\n }\n\n}\n\nexport namespace TreeExpansionModel {\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tree-inheritance-icon.component.js","sourceRoot":"","sources":["../../../../../../../../../libs/angular-ui-powerups/src/lib/components/tables/tree-table/tree-inheritance-icon/tree-inheritance-icon.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAC9D,OAAO,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"tree-inheritance-icon.component.js","sourceRoot":"","sources":["../../../../../../../../../libs/angular-ui-powerups/src/lib/components/tables/tree-table/tree-inheritance-icon/tree-inheritance-icon.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAC9D,OAAO,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;AAE/C,MAAM,UAAU,GAAG,EAAE,CAAC;AAOtB,MAAM,OAAO,4BAA4B;IAYvC;QALA,eAAU,GAAG,EAAE,CAAC;QAGhB,gBAAW,GAAG,EAAE,CAAC;IAGjB,CAAC;IAED,IAAI,YAAY;QACd,OAAO,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC;IACvC,CAAC;IAED,IAAI,OAAO;QACT,OAAO,GAAG,CAAC,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,YAAY,EAAE,CAAA;IAC/F,CAAC;IAED,OAAO;QACL,OAAO,4BAA4B,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAClE,CAAC;IAED,WAAW;QACT,OAAO,4BAA4B,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACtE,CAAC;IAED,SAAS;QACP,OAAO,4BAA4B,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACrE,CAAC;IAED,OAAO;QACL,OAAO,4BAA4B,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAClE,CAAC;;;YA1CF,SAAS,SAAC;gBACT,QAAQ,EAAE,2BAA2B;gBACrC,ylBAAoD;;aAErD;;;;mBAGE,KAAK,YACL,WAAW,SAAC,OAAO;yBAGnB,KAAK;0BAGL,KAAK;;AAgCR,WAAiB,4BAA4B;IAC9B,iCAAI,GAAG,IAAI,CAAC;QACvB,UAAU,EAAE,OAAO;QACnB,WAAW,EAAE,QAAQ;QACrB,uBAAuB,EAAE,oBAAoB;QAC7C,+BAA+B,EAAE,4BAA4B;QAC7D,YAAY,EAAE,SAAS,CAAC,IAAI;KAC7B,CAAC,CAAC;IAGU,wCAAW,GAAG;QACzB,4BAA4B,CAAC,IAAI,CAAC,WAAW;KAC9C,CAAC;IAEW,yCAAY,GAAG;QAC1B,4BAA4B,CAAC,IAAI,CAAC,uBAAuB;QACzD,4BAA4B,CAAC,IAAI,CAAC,+BAA+B;QACjE,4BAA4B,CAAC,IAAI,CAAC,WAAW;KAC9C,CAAC;IAEW,qCAAQ,GAAG;QACtB,4BAA4B,CAAC,IAAI,CAAC,YAAY;QAC9C,4BAA4B,CAAC,IAAI,CAAC,uBAAuB;QACzD,4BAA4B,CAAC,IAAI,CAAC,+BAA+B;KAClE,CAAC;IAEW,qCAAQ,GAAG;QACtB,4BAA4B,CAAC,IAAI,CAAC,WAAW;QAC7C,4BAA4B,CAAC,IAAI,CAAC,YAAY;QAC9C,4BAA4B,CAAC,IAAI,CAAC,+BAA+B;KAClE,CAAC;AAGJ,CAAC,EAjCgB,4BAA4B,KAA5B,4BAA4B,QAiC5C","sourcesContent":["import { Component, HostBinding, Input } from '@angular/core';\nimport { Enum } from 'typescript-string-enums';\n\nconst SVG_HEIGHT = 60;\n\n@Component({\n selector: 'aup-tree-inheritance-icon',\n templateUrl: './tree-inheritance-icon.component.svg',\n styleUrls: ['./tree-inheritance-icon.component.scss']\n})\nexport class TreeInheritanceIconComponent<T> {\n\n @Input()\n @HostBinding(\"class\")\n type: TreeInheritanceIconComponent.Type;\n\n @Input()\n pixelWidth = 24;\n\n @Input()\n pixelHeight = 48;\n\n constructor() {\n }\n\n get heightOffset() {\n return SVG_HEIGHT - this.pixelHeight;\n }\n\n get viewBox() {\n return `${0} ${this.heightOffset} ${this.pixelWidth} ${this.pixelHeight - this.heightOffset}`\n }\n\n hasHead() {\n return TreeInheritanceIconComponent.HAS_HEAD.includes(this.type)\n }\n\n hasTerminal() {\n return TreeInheritanceIconComponent.HAS_TERMINAL.includes(this.type)\n }\n\n hasLeadIn() {\n return TreeInheritanceIconComponent.HAS_LEAD_IN.includes(this.type)\n }\n\n hasTail() {\n return TreeInheritanceIconComponent.HAS_TAIL.includes(this.type)\n }\n\n}\n\nexport namespace TreeInheritanceIconComponent {\n export const Type = Enum({\n ICON_BLANK: 'blank',\n ICON_PARENT: 'parent', // ┬\n ICON_INHERITED_TERMINAL: 'inherited_terminal', // ˪\n ICON_INHERITED_THROUGH_TERMINAL: 'inherited_through_terminal', // ˫\n ICON_THROUGH: 'through' // |\n });\n export type Type = Enum<typeof Type>;\n\n export const HAS_LEAD_IN = [\n TreeInheritanceIconComponent.Type.ICON_PARENT\n ];\n\n export const HAS_TERMINAL = [\n TreeInheritanceIconComponent.Type.ICON_INHERITED_TERMINAL,\n TreeInheritanceIconComponent.Type.ICON_INHERITED_THROUGH_TERMINAL,\n TreeInheritanceIconComponent.Type.ICON_PARENT\n ];\n\n export const HAS_HEAD = [\n TreeInheritanceIconComponent.Type.ICON_THROUGH,\n TreeInheritanceIconComponent.Type.ICON_INHERITED_TERMINAL,\n TreeInheritanceIconComponent.Type.ICON_INHERITED_THROUGH_TERMINAL\n ];\n\n export const HAS_TAIL = [\n TreeInheritanceIconComponent.Type.ICON_PARENT,\n TreeInheritanceIconComponent.Type.ICON_THROUGH,\n TreeInheritanceIconComponent.Type.ICON_INHERITED_THROUGH_TERMINAL\n ];\n\n\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
[{"__symbolic":"module","version":4,"metadata":{"TreeInheritanceIconComponent":{"__symbolic":"class","arity":1,"decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":
|
|
1
|
+
[{"__symbolic":"module","version":4,"metadata":{"TreeInheritanceIconComponent":{"__symbolic":"class","arity":1,"decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":5,"character":1},"arguments":[{"selector":"aup-tree-inheritance-icon","template":"<svg xmlns=\"http://www.w3.org/2000/svg\" [attr.width]=\"pixelWidth\" [attr.height]=\"pixelHeight\" [attr.viewBox]=\"viewBox\">\n <g fill=\"none\" fill-rule=\"evenodd\">\n <rect *ngIf=\"hasHead()\" width=\"1\" height=\"32.5\" x=\"11.5\" fill=\"currentColor\"/>\n <rect *ngIf=\"hasTail()\" width=\"1\" height=\"32.5\" x=\"11.5\" y=\"31.5\" fill=\"currentColor\"/>\n\n <rect *ngIf=\"hasLeadIn()\" width=\"12\" height=\"1\" y=\"31.5\" fill=\"currentColor\"/>\n <rect *ngIf=\"hasTerminal()\" width=\"12\" height=\"1\" x=\"12\" y=\"31.5\" fill=\"currentColor\"/>\n </g>\n</svg>\n","styles":[":host{position:relative;color:inherit}svg{color:var(--line-color);display:block}"]}]}],"members":{"type":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":12,"character":3}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"HostBinding","line":13,"character":3},"arguments":["class"]}]}],"pixelWidth":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":16,"character":3}}]}],"pixelHeight":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":19,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor"}],"hasHead":[{"__symbolic":"method"}],"hasTerminal":[{"__symbolic":"method"}],"hasLeadIn":[{"__symbolic":"method"}],"hasTail":[{"__symbolic":"method"}]}}}}]
|
|
@@ -13,11 +13,11 @@ export class TreeLabelCellRendererComponent extends DisposableComponent {
|
|
|
13
13
|
this.nodeModel = new MutableValueModel();
|
|
14
14
|
const { chain } = Dsl.disposeWith(this);
|
|
15
15
|
this.iconList = chain(this.nodeModel).mapToList(node => {
|
|
16
|
-
const icons = node.ancestors().slice(1).map(ancestor => {
|
|
17
|
-
return ancestor.isLastChild() ? TreeInheritanceIconComponent.Type.ICON_BLANK : TreeInheritanceIconComponent.Type.ICON_THROUGH;
|
|
16
|
+
const icons = DecoratedTreeNode.getDecorator(node).ancestors().slice(1).map(ancestor => {
|
|
17
|
+
return DecoratedTreeNode.getDecorator(ancestor).isLastChild() ? TreeInheritanceIconComponent.Type.ICON_BLANK : TreeInheritanceIconComponent.Type.ICON_THROUGH;
|
|
18
18
|
});
|
|
19
|
-
if (!node.isRoot()) {
|
|
20
|
-
icons.push(node.isLastChild() ? TreeInheritanceIconComponent.Type.ICON_INHERITED_TERMINAL : TreeInheritanceIconComponent.Type.ICON_INHERITED_THROUGH_TERMINAL);
|
|
19
|
+
if (!DecoratedTreeNode.getDecorator(node).isRoot()) {
|
|
20
|
+
icons.push(DecoratedTreeNode.getDecorator(node).isLastChild() ? TreeInheritanceIconComponent.Type.ICON_INHERITED_TERMINAL : TreeInheritanceIconComponent.Type.ICON_INHERITED_THROUGH_TERMINAL);
|
|
21
21
|
}
|
|
22
22
|
return icons;
|
|
23
23
|
});
|
|
@@ -25,20 +25,20 @@ export class TreeLabelCellRendererComponent extends DisposableComponent {
|
|
|
25
25
|
ngOnInit() {
|
|
26
26
|
const { chain } = Dsl.disposeWith(this);
|
|
27
27
|
this.canExpand = chain(this.nodeModel).map(node => {
|
|
28
|
-
return node.hasChildren() && this.expansionModel.isCollapsed(node);
|
|
28
|
+
return DecoratedTreeNode.getDecorator(node).hasChildren() && this.expansionModel.isCollapsed(node);
|
|
29
29
|
}, { dependsOn: this.expansionModel.isExpandedPredicate });
|
|
30
30
|
this.canCollapse = chain(this.nodeModel).map(node => {
|
|
31
|
-
return node.hasChildren() && !this.expansionModel.isCollapsed(node);
|
|
31
|
+
return DecoratedTreeNode.getDecorator(node).hasChildren() && !this.expansionModel.isCollapsed(node);
|
|
32
32
|
}, { dependsOn: this.expansionModel.isExpandedPredicate });
|
|
33
33
|
this.iconModel = chain(this.nodeModel).map(node => {
|
|
34
|
-
return this.node.isLeaf() ? undefined : this.iconFactory(node, this.expansionModel.isExpanded(this.node));
|
|
34
|
+
return DecoratedTreeNode.getDecorator(this.node).isLeaf() ? undefined : this.iconFactory(node, this.expansionModel.isExpanded(this.node));
|
|
35
35
|
}, { dependsOn: this.expansionModel.isExpandedPredicate });
|
|
36
36
|
}
|
|
37
37
|
get isRoot() {
|
|
38
|
-
return this.node.isRoot();
|
|
38
|
+
return DecoratedTreeNode.getDecorator(this.node).isRoot();
|
|
39
39
|
}
|
|
40
40
|
get isLeaf() {
|
|
41
|
-
return this.node.isLeaf();
|
|
41
|
+
return DecoratedTreeNode.getDecorator(this.node).isLeaf();
|
|
42
42
|
}
|
|
43
43
|
get node() {
|
|
44
44
|
return this.nodeModel.value;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tree-label-cell-renderer.component.js","sourceRoot":"","sources":["../../../../../../../../../libs/angular-ui-powerups/src/lib/components/tables/tree-table/tree-label-cell-renderer/tree-label-cell-renderer.component.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,KAAK,EAAU,MAAM,eAAe,CAAC;AACtE,OAAO,EAAE,GAAG,EAAkB,iBAAiB,EAAE,iBAAiB,EAAmB,MAAM,gBAAgB,CAAC;AAC5G,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"tree-label-cell-renderer.component.js","sourceRoot":"","sources":["../../../../../../../../../libs/angular-ui-powerups/src/lib/components/tables/tree-table/tree-label-cell-renderer/tree-label-cell-renderer.component.ts"],"names":[],"mappings":"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","sourcesContent":["import { Component, HostBinding, Input, OnInit } from '@angular/core';\nimport { Dsl, ListModelChain, MutableValueModel, StoreInValueModel, ValueModelChain } from '@coolon/pectin';\nimport { DisposableComponent } from '../../../disposable-component';\nimport { CellRenderer } from '../../table/cell-renderer';\nimport { DecoratedTreeNode } from '../decorated-tree-node';\nimport { TreeExpansionModel } from '../tree-expansion-model';\nimport { TreeInheritanceIconComponent } from '../tree-inheritance-icon/tree-inheritance-icon.component';\nimport { TreeLabelColumnModel } from '../tree-label-column-model';\n\n@Component({\n selector: 'aup-tree-label-cell-renderer',\n templateUrl: './tree-label-cell-renderer.component.html',\n styleUrls: ['./tree-label-cell-renderer.component.scss']\n})\nexport class TreeLabelCellRendererComponent<T> extends DisposableComponent implements CellRenderer<T>, OnInit {\n\n iconTypes: string[] = [];\n\n private nodeModel = new MutableValueModel<T>();\n\n @Input()\n @StoreInValueModel('nodeModel')\n value: T;\n\n @Input()\n label: string;\n\n @Input()\n iconFactory: TreeLabelColumnModel.LabelFactory<T>;\n\n // TODO: Make this have a proper delegate so I can safely use it here..\n @Input()\n expansionModel: TreeExpansionModel<T>;\n\n readonly iconList: ListModelChain<string>;\n\n canExpand: ValueModelChain<boolean>;\n canCollapse: ValueModelChain<boolean>;\n iconModel: ValueModelChain<string>;\n\n constructor() {\n super();\n const { chain } = Dsl.disposeWith(this);\n this.iconList = chain(this.nodeModel).mapToList(node => {\n const icons: string[] = DecoratedTreeNode.getDecorator(node).ancestors().slice(1).map(ancestor => {\n return DecoratedTreeNode.getDecorator(ancestor).isLastChild() ? TreeInheritanceIconComponent.Type.ICON_BLANK : TreeInheritanceIconComponent.Type.ICON_THROUGH;\n });\n if (!DecoratedTreeNode.getDecorator(node).isRoot()) {\n icons.push(DecoratedTreeNode.getDecorator(node).isLastChild() ? TreeInheritanceIconComponent.Type.ICON_INHERITED_TERMINAL : TreeInheritanceIconComponent.Type.ICON_INHERITED_THROUGH_TERMINAL);\n }\n return icons;\n });\n }\n\n ngOnInit(): void {\n const { chain } = Dsl.disposeWith(this);\n this.canExpand = chain(this.nodeModel).map(node => {\n return DecoratedTreeNode.getDecorator(node).hasChildren() && this.expansionModel.isCollapsed(node);\n }, { dependsOn: this.expansionModel.isExpandedPredicate });\n\n this.canCollapse = chain(this.nodeModel).map(node => {\n return DecoratedTreeNode.getDecorator(node).hasChildren() && !this.expansionModel.isCollapsed(node);\n }, { dependsOn: this.expansionModel.isExpandedPredicate });\n\n this.iconModel = chain(this.nodeModel).map(node => {\n return DecoratedTreeNode.getDecorator(this.node).isLeaf() ? undefined : this.iconFactory(node, this.expansionModel.isExpanded(this.node));\n }, { dependsOn: this.expansionModel.isExpandedPredicate });\n }\n\n @HostBinding('class.root')\n get isRoot() {\n return DecoratedTreeNode.getDecorator(this.node).isRoot();\n }\n\n @HostBinding('class.leaf')\n get isLeaf() {\n return DecoratedTreeNode.getDecorator(this.node).isLeaf();\n }\n\n get node() {\n return this.nodeModel.value;\n }\n\n // @Trace()\n expandOrCollapse(node: DecoratedTreeNode<T>) {\n this.expansionModel.isCollapsed(node) ? this.expansionModel.expand(node) : this.expansionModel.collapse(node);\n }\n}\n"]}
|