@coolon/angular-ui-powerups 11.0.0-alpha.4 → 11.0.0-alpha.6
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 +40 -27
- package/bundles/coolon-angular-ui-powerups.umd.js.map +1 -1
- package/bundles/coolon-angular-ui-powerups.umd.min.js +1 -1
- package/bundles/coolon-angular-ui-powerups.umd.min.js.map +1 -1
- package/coolon-angular-ui-powerups.metadata.json +1 -1
- package/esm2015/lib/components/components.module.ngfactory.js.map +1 -1
- package/esm2015/lib/components/table/table.component.js.map +1 -1
- package/esm2015/lib/components/table/table.component.metadata.json +1 -1
- package/esm2015/lib/components/tree-table/decorated-tree-node.js +19 -22
- package/esm2015/lib/components/tree-table/decorated-tree-node.js.map +1 -1
- package/esm2015/lib/components/tree-table/tree-table-component.js +21 -4
- package/esm2015/lib/components/tree-table/tree-table-component.js.map +1 -1
- package/esm2015/lib/components/tree-table/tree-table-component.metadata.json +1 -1
- package/fesm2015/coolon-angular-ui-powerups.js +38 -24
- package/fesm2015/coolon-angular-ui-powerups.js.map +1 -1
- package/lib/components/table/table.component.d.ts +4 -4
- package/lib/components/tree-table/tree-table-component.d.ts +9 -0
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
[{"__symbolic":"module","version":4,"metadata":{"TableComponent":{"__symbolic":"class","extends":{"__symbolic":"reference","module":"../resize-aware.component","name":"ResizeAwareComponent","line":70,"character":41},"arity":1,"decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":65,"character":1},"arguments":[{"selector":"aup-table","template":"<div class=\"scroll-container\">\n <table mat-table [dataSource]=\"tableModel.dataSource.value\" [trackBy]=\"tableModel.trackBy\">\n\n <ng-container *ngFor=\"let column of columns.value; index as index; first as first; last as last\"\n matColumnDef=\"{{column.columnId}}\">\n <th mat-header-cell *matHeaderCellDef [class.flex]=\"column.isFlex()\" [class.hide]=\"!column.isVisible()\">\n <aup-table-header-cell-renderer [column]=\"column\"\n [attr.column-index]=\"index\"\n [attr.column-id]=\"column.columnId\"\n [class.first-visible-column]=\"isFirstVisibleColumn(column.columnId)\"\n [class.last-visible-column]=\"isLastVisibleColumn(column.columnId)\"\n ></aup-table-header-cell-renderer>\n </th>\n <td mat-cell *matCellDef=\"let row\" (click)=\"notifyCellClicked(column, row)\"\n [class.enable-cursor]=\"tableModel.isCursorEnabled(column)\"\n [class.flex]=\"column.isFlex()\"\n [class.hide]=\"!column.isVisible()\"\n >\n <aup-table-cell-renderer [column]=\"column\"\n [row]=\"row\"\n [tableModel]=\"tableModel\"\n [editSession]=\"tableModel.getEditSessionFor(row)\"\n [attr.column-index]=\"index\"\n [attr.column-id]=\"column.columnId\"\n [class.first-visible-column]=\"isFirstVisibleColumn(column.columnId)\"\n [class.last-visible-column]=\"isLastVisibleColumn(column.columnId)\"\n ></aup-table-cell-renderer>\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"columnIds.value\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: columnIds.value; let i = index\"\n [ngClass]=\"tableModel.getRowClasses(row)\" [class.enable-hover]=\"tableModel.isHoverEnabled()\"\n [attr.trackBy]=\"tableModel.trackBy(i, row)\"\n ></tr>\n\n </table>\n</div>\n","styles":[":host{display:flex;flex-direction:column;align-items:stretch}:host table{width:100%}:host.enable-scrolling{min-height:0}:host.enable-scrolling .scroll-container{flex:1;flex-basis:0;overflow-y:scroll;display:flex;flex-direction:column;align-items:stretch}"]}]}],"members":{"tableModel":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":72,"character":3}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@coolon/pectin","name":"TrackExternal","line":73,"character":3}}]}],"showHeaderModel":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":76,"character":3}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@coolon/pectin","name":"TrackExternal","line":77,"character":3},"arguments":[{"defaultValue":true}]}]}],"showHeader":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":80,"character":3}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@coolon/pectin","name":"StoreInValueModel","line":81,"character":3},"arguments":["showHeaderModel"]}]}],"enableScrolling":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":
|
|
1
|
+
[{"__symbolic":"module","version":4,"metadata":{"TableComponent":{"__symbolic":"class","extends":{"__symbolic":"reference","module":"../resize-aware.component","name":"ResizeAwareComponent","line":70,"character":41},"arity":1,"decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":65,"character":1},"arguments":[{"selector":"aup-table","template":"<div class=\"scroll-container\">\n <table mat-table [dataSource]=\"tableModel.dataSource.value\" [trackBy]=\"tableModel.trackBy\">\n\n <ng-container *ngFor=\"let column of columns.value; index as index; first as first; last as last\"\n matColumnDef=\"{{column.columnId}}\">\n <th mat-header-cell *matHeaderCellDef [class.flex]=\"column.isFlex()\" [class.hide]=\"!column.isVisible()\">\n <aup-table-header-cell-renderer [column]=\"column\"\n [attr.column-index]=\"index\"\n [attr.column-id]=\"column.columnId\"\n [class.first-visible-column]=\"isFirstVisibleColumn(column.columnId)\"\n [class.last-visible-column]=\"isLastVisibleColumn(column.columnId)\"\n ></aup-table-header-cell-renderer>\n </th>\n <td mat-cell *matCellDef=\"let row\" (click)=\"notifyCellClicked(column, row)\"\n [class.enable-cursor]=\"tableModel.isCursorEnabled(column)\"\n [class.flex]=\"column.isFlex()\"\n [class.hide]=\"!column.isVisible()\"\n >\n <aup-table-cell-renderer [column]=\"column\"\n [row]=\"row\"\n [tableModel]=\"tableModel\"\n [editSession]=\"tableModel.getEditSessionFor(row)\"\n [attr.column-index]=\"index\"\n [attr.column-id]=\"column.columnId\"\n [class.first-visible-column]=\"isFirstVisibleColumn(column.columnId)\"\n [class.last-visible-column]=\"isLastVisibleColumn(column.columnId)\"\n ></aup-table-cell-renderer>\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"columnIds.value\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: columnIds.value; let i = index\"\n [ngClass]=\"tableModel.getRowClasses(row)\" [class.enable-hover]=\"tableModel.isHoverEnabled()\"\n [attr.trackBy]=\"tableModel.trackBy(i, row)\"\n ></tr>\n\n </table>\n</div>\n","styles":[":host{display:flex;flex-direction:column;align-items:stretch}:host table{width:100%}:host.enable-scrolling{min-height:0}:host.enable-scrolling .scroll-container{flex:1;flex-basis:0;overflow-y:scroll;display:flex;flex-direction:column;align-items:stretch}"]}]}],"members":{"tableModel":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":72,"character":3}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@coolon/pectin","name":"TrackExternal","line":73,"character":3}}]}],"showHeaderModel":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":76,"character":3}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@coolon/pectin","name":"TrackExternal","line":77,"character":3},"arguments":[{"defaultValue":true}]}]}],"showHeader":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":80,"character":3}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@coolon/pectin","name":"StoreInValueModel","line":81,"character":3},"arguments":["showHeaderModel"]}]}],"enableScrolling":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":89,"character":3}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"HostBinding","line":90,"character":3},"arguments":["class.enable-scrolling"]}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@angular/core","name":"ElementRef","line":104,"character":26},{"__symbolic":"reference","module":"@angular/core","name":"NgZone","line":104,"character":46}]}],"hideHeader":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"HostBinding","line":125,"character":3},"arguments":["class.hide-header"]}]}],"ngOnInit":[{"__symbolic":"method"}],"isEditing":[{"__symbolic":"method"}],"registerColumnTemplate":[{"__symbolic":"method"}],"notifyCellClicked":[{"__symbolic":"method"}],"isFirstVisibleColumn":[{"__symbolic":"method"}],"isLastVisibleColumn":[{"__symbolic":"method"}]}}}}]
|
|
@@ -8,26 +8,26 @@ class DecoratedTreeNodeMixin {
|
|
|
8
8
|
this.node = node;
|
|
9
9
|
}
|
|
10
10
|
get decoratedSelf() {
|
|
11
|
-
return this.memoize(
|
|
11
|
+
return this.memoize('decoratedSelf', () => {
|
|
12
12
|
return this.parent ? this.parent.children.find(child => child.node === this.node) : DecoratedTreeNode.createRoot(this.node);
|
|
13
13
|
});
|
|
14
14
|
}
|
|
15
15
|
get children() {
|
|
16
|
-
return this.memoize(
|
|
16
|
+
return this.memoize('children', () => {
|
|
17
17
|
return this.node.children ? this.node.children.map(child => {
|
|
18
18
|
return Mixin.createProxy(child, new DecoratedTreeNodeMixin(this.decoratedSelf, child));
|
|
19
19
|
}) : [];
|
|
20
20
|
});
|
|
21
21
|
}
|
|
22
22
|
descendants() {
|
|
23
|
-
return this.memoize(
|
|
23
|
+
return this.memoize('descendants', () => {
|
|
24
24
|
const result = [];
|
|
25
25
|
this.visitDescendants(child => result.push(child));
|
|
26
26
|
return result;
|
|
27
27
|
});
|
|
28
28
|
}
|
|
29
29
|
selfAndDescendants() {
|
|
30
|
-
return this.memoize(
|
|
30
|
+
return this.memoize('selfAndDescendants', () => {
|
|
31
31
|
const result = [];
|
|
32
32
|
this.visitSelfAndDescendants(child => result.push(child));
|
|
33
33
|
return result;
|
|
@@ -90,27 +90,24 @@ class DecoratedTreeNodeMixin {
|
|
|
90
90
|
});
|
|
91
91
|
}
|
|
92
92
|
ancestorsAndSelf() {
|
|
93
|
-
return this.memoize(
|
|
93
|
+
return this.memoize('ancestorsAndSelf', () => {
|
|
94
94
|
return this.ancestors().concat([(this.decoratedSelf)]);
|
|
95
95
|
});
|
|
96
96
|
}
|
|
97
97
|
pathToParent(parent) {
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
});
|
|
98
|
+
if (this.node === parent.node) {
|
|
99
|
+
return [];
|
|
100
|
+
}
|
|
101
|
+
else if (this.parent) {
|
|
102
|
+
const pathToParent = this.parent.pathToParent(parent);
|
|
103
|
+
return pathToParent.concat([this.parent]);
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
throw new Error('parent is not an ancestor');
|
|
107
|
+
}
|
|
109
108
|
}
|
|
110
109
|
pathToParentAndSelf(parent) {
|
|
111
|
-
return this.
|
|
112
|
-
return this.pathToParent(parent).concat([this.decoratedSelf]);
|
|
113
|
-
});
|
|
110
|
+
return this.pathToParent(parent).concat([this.decoratedSelf]);
|
|
114
111
|
}
|
|
115
112
|
isRoot() {
|
|
116
113
|
return !this.parent;
|
|
@@ -122,18 +119,18 @@ class DecoratedTreeNodeMixin {
|
|
|
122
119
|
return !this.isRoot() && this.node.children.length < 1;
|
|
123
120
|
}
|
|
124
121
|
hasChildren() {
|
|
125
|
-
return this.node.children.length > 0;
|
|
122
|
+
return this.node.children && this.node.children.length > 0;
|
|
126
123
|
}
|
|
127
124
|
depthFromParent(parent) {
|
|
128
125
|
return this.pathToParent(parent).length;
|
|
129
126
|
}
|
|
130
127
|
treeDepth() {
|
|
131
|
-
return this.memoize(
|
|
128
|
+
return this.memoize('treeDepth', () => {
|
|
132
129
|
return 1 + this.descendants().map(child => child.depthFromParent(this)).reduce((prev, current) => Math.max(prev, current));
|
|
133
130
|
});
|
|
134
131
|
}
|
|
135
132
|
flatten() {
|
|
136
|
-
return this.memoize(
|
|
133
|
+
return this.memoize('flatten', () => {
|
|
137
134
|
return this.flattenInto([]);
|
|
138
135
|
});
|
|
139
136
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decorated-tree-node.js","sourceRoot":"","sources":["../../../../../../../libs/angular-ui-powerups/src/lib/components/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 { Memoize } from '@typescript-plus/fast-memoize-decorator/dist/src';\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 return this.memoize(\"pathToParent\", () => {\n if (this.node === parent.node) {\n return [];\n } else if (this.parent) {\n return this.parent.pathToParent(parent).concat([this.parent]);\n } else {\n throw new Error('parent is not an ancestor');\n }\n })\n }\n\n pathToParentAndSelf(parent): DecoratedTreeNode<T>[] {\n return this.memoize(\"pathToParentAndSelf\", () => {\n return this.pathToParent(parent).concat([this.decoratedSelf]);\n });\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.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/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,6 +1,6 @@
|
|
|
1
1
|
import { __decorate, __metadata } from "tslib";
|
|
2
|
-
import { Component, Input, ViewEncapsulation } from '@angular/core';
|
|
3
|
-
import { TrackExternal } from '@coolon/pectin';
|
|
2
|
+
import { Component, HostBinding, Input, ViewEncapsulation } from '@angular/core';
|
|
3
|
+
import { StoreInValueModel, TrackExternal, ValueModel } from '@coolon/pectin';
|
|
4
4
|
import { DisposableComponent } from '../disposable-component';
|
|
5
5
|
import { TreeTableModel } from './tree-table-model';
|
|
6
6
|
//
|
|
@@ -41,12 +41,18 @@ import { TreeTableModel } from './tree-table-model';
|
|
|
41
41
|
export class TreeTableComponent extends DisposableComponent {
|
|
42
42
|
constructor() {
|
|
43
43
|
super();
|
|
44
|
+
/**
|
|
45
|
+
* Set to true to enable scrolling. Once enabled the table will have 0 implicit height. You will either
|
|
46
|
+
* need to set it explicitly e.g. height: 400px; or by using flex or grid layout to make it fill it's
|
|
47
|
+
* containment area.
|
|
48
|
+
*/
|
|
49
|
+
this.enableScrolling = false;
|
|
44
50
|
}
|
|
45
51
|
}
|
|
46
52
|
TreeTableComponent.decorators = [
|
|
47
53
|
{ type: Component, args: [{
|
|
48
54
|
selector: "aup-tree-table",
|
|
49
|
-
template: "<aup-table [tableModel]=\"treeTableModel\"></aup-table>\n",
|
|
55
|
+
template: "<aup-table [tableModel]=\"treeTableModel\" [showHeaderModel]=\"showHeaderModel\" [enableScrolling]=\"enableScrolling\"></aup-table>\n",
|
|
50
56
|
encapsulation: ViewEncapsulation.None // allow us to target nested table styles
|
|
51
57
|
,
|
|
52
58
|
styles: ["td.mat-cell{border-top-width:0!important;border-bottom-width:0!important}td.mat-column-tree-label{width:1px}aup-table-cell-renderer[column-id=tree-label]{padding-left:8px!important}aup-tree-label-cell-renderer{flex:1}"]
|
|
@@ -54,10 +60,21 @@ TreeTableComponent.decorators = [
|
|
|
54
60
|
];
|
|
55
61
|
TreeTableComponent.ctorParameters = () => [];
|
|
56
62
|
TreeTableComponent.propDecorators = {
|
|
57
|
-
treeTableModel: [{ type: Input }]
|
|
63
|
+
treeTableModel: [{ type: Input }],
|
|
64
|
+
showHeaderModel: [{ type: Input }],
|
|
65
|
+
showHeader: [{ type: Input }],
|
|
66
|
+
enableScrolling: [{ type: Input }, { type: HostBinding, args: ['class.enable-scrolling',] }]
|
|
58
67
|
};
|
|
59
68
|
__decorate([
|
|
60
69
|
TrackExternal(),
|
|
61
70
|
__metadata("design:type", TreeTableModel)
|
|
62
71
|
], TreeTableComponent.prototype, "treeTableModel", void 0);
|
|
72
|
+
__decorate([
|
|
73
|
+
TrackExternal({ defaultValue: true }),
|
|
74
|
+
__metadata("design:type", ValueModel)
|
|
75
|
+
], TreeTableComponent.prototype, "showHeaderModel", void 0);
|
|
76
|
+
__decorate([
|
|
77
|
+
StoreInValueModel('showHeaderModel'),
|
|
78
|
+
__metadata("design:type", Boolean)
|
|
79
|
+
], TreeTableComponent.prototype, "showHeader", void 0);
|
|
63
80
|
//# sourceMappingURL=tree-table-component.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tree-table-component.js","sourceRoot":"","sources":["../../../../../../../libs/angular-ui-powerups/src/lib/components/tree-table/tree-table-component.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"tree-table-component.js","sourceRoot":"","sources":["../../../../../../../libs/angular-ui-powerups/src/lib/components/tree-table/tree-table-component.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACjF,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC9E,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAE9D,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,EAAE;AACF,qBAAqB;AACrB,gEAAgE;AAChE,uEAAuE;AACvE,2EAA2E;AAC3E,wEAAwE;AACxE,yDAAyD;AACzD,8CAA8C;AAC9C,EAAE;AACF,wEAAwE;AACxE,+DAA+D;AAC/D,mEAAmE;AACnE,+EAA+E;AAC/E,8FAA8F;AAC9F,EAAE;AACF,0GAA0G;AAC1G,qFAAqF;AACrF,+BAA+B;AAC/B,yDAAyD;AACzD,yDAAyD;AACzD,kDAAkD;AAClD,sEAAsE;AACtE,gEAAgE;AAChE,iBAAiB;AACjB,gBAAgB;AAChB,oGAAoG;AACpG,4CAA4C;AAC5C,2DAA2D;AAC3D,kEAAkE;AAClE,mDAAmD;AACnD,uBAAuB;AACvB,gBAAgB;AAChB,EAAE;AACF,qBAAqB;AACrB,KAAK;AASL,MAAM,OAAO,kBAA0C,SAAQ,mBAAmB;IAyBhF;QACE,KAAK,EAAE,CAAC;QAXV;;;;WAIG;QAGH,oBAAe,GAAG,KAAK,CAAC;IAKxB,CAAC;;;YAjCF,SAAS,SAAC;gBACT,QAAQ,EAAE,gBAAgB;gBAC1B,iJAA0C;gBAE1C,aAAa,EAAE,iBAAiB,CAAC,IAAI,CAAC,yCAAyC;;;aAChF;;;;6BAGE,KAAK;8BAKL,KAAK;yBAIL,KAAK;8BASL,KAAK,YACL,WAAW,SAAC,wBAAwB;;AAjBrC;IADC,aAAa,EAAE;8BACA,cAAc;0DAAI;AAKlC;IADC,aAAa,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;8BACrB,UAAU;2DAAU;AAIrC;IADC,iBAAiB,CAAC,iBAAiB,CAAC;;sDACjB","sourcesContent":["import { Component, HostBinding, Input, ViewEncapsulation } from '@angular/core';\nimport { StoreInValueModel, TrackExternal, ValueModel } from '@coolon/pectin';\nimport { DisposableComponent } from '../disposable-component';\nimport { TreeNode } from './tree-node';\nimport { TreeTableModel } from './tree-table-model';\n//\n// const template = `\n// <table-component list-model=\"zoneTreeController.visibleAreas\"\n// selection-model=\"zoneTreeController.selectionModel\"\n// selection-command=\"zoneTreeController.selectionCommand\"\n// hover-model=\"zoneTreeController.decoratedHoverModel\"\n// no-hover=\"zoneTreeController.noHover\"\n// no-lines=\"true\" no-scroll>\n//\n// <row-attr name=\"parent-id\" value=\"{{item.parent.id}}\"></row-attr>\n// <row-attr name=\"area-id\" value=\"{{item.id}}\"></row-attr>\n// <row-attr name=\"area-name\" value=\"{{item.name}}\"></row-attr>\n// <row-attr name=\"area-depth\" value=\"{{item.depthFromZone()}}\"></row-attr>\n// <row-attr name=\"collapsed\" value=\"{{zoneTreeController.isCollapsed(item)}}\"></row-attr>\n//\n// <column class=\"area\" ng-class=\"{root: item.isZone(), parent: item.isGroup()}\" class=\"allow-squish\">\n// <!--<label>Rooms in {{zoneTreeController.zoneModel.value.name}}</label>-->\n// <label>Rooms</label>\n// <div layout=\"row\" layout-align=\"start center\">\n// <tree-icons tree-item=\"item\"></tree-icons>\n// <area-icon area=\"item\"></area-icon>\n// <span ng-if=\"item.isZone()\">Zone ({{item.name}})</span>\n// <span ng-if=\"!item.isZone()\">{{item.name}}</span>\n// </div>\n// </column>\n// <column class=\"expand-collapse\" ng-class=\"{collapsed: zoneTreeController.isCollapsed(item)}\">\n// <md-button class=\"md-icon-button\"\n// ng-if=\"zoneTreeController.canCollapse(item)\"\n// ng-click=\"zoneTreeController.toggleCollapse(item)\">\n// <md-icon>keyboard_arrow_up</md-icon>\n// </md-button>\n// </column>\n//\n// </table-component>\n// `;\n\n\n@Component({\n selector: \"aup-tree-table\",\n templateUrl: './tree-table.component.html',\n styleUrls: ['./tree-table.component.scss'],\n encapsulation: ViewEncapsulation.None // allow us to target nested table styles\n})\nexport class TreeTableComponent<T extends TreeNode<T>> extends DisposableComponent {\n\n @Input()\n @TrackExternal()\n treeTableModel: TreeTableModel<T>;\n\n\n @Input()\n @TrackExternal({ defaultValue: true })\n showHeaderModel: ValueModel<boolean>;\n\n @Input()\n @StoreInValueModel('showHeaderModel')\n showHeader: boolean;\n\n /**\n * Set to true to enable scrolling. Once enabled the table will have 0 implicit height. You will either\n * need to set it explicitly e.g. height: 400px; or by using flex or grid layout to make it fill it's\n * containment area.\n */\n @Input()\n @HostBinding('class.enable-scrolling')\n enableScrolling = false;\n\n\n constructor() {\n super();\n }\n\n // zoneTreeModel: TreeModel<T>;\n // noHover: boolean;\n //\n // static compile(tElement, tAttrs, $compile) {\n // const newContent = angular.element(template);\n //\n // // // find methods don't work here... sigh. and this is sensetive to whitespace in the template BEWARE!!\n // // let table = angular.element(newContent[2]);\n //\n // tElement.find('column').each((index, el) => newContent.append(el));\n // tElement.contents().remove();\n //\n // const transclude = $compile(newContent);\n // return (scope, element, attrs, ctrl) => {\n // transclude(scope, function(clone) {\n // element.append(clone);\n // });\n // };\n // }\n //\n // constructor() {\n // super();\n // }\n //\n // get zoneModel() {\n // return this.zoneTreeModel.rootNodeModel;\n // }\n //\n // get visibleAreas() {\n // return this.zoneTreeModel.decoratedVisibleAreas;\n // }\n //\n // get selectionModel() {\n // return this.zoneTreeModel.decoratedSelectionModel;\n // }\n //\n // selectArea(decoratedArea: TreeModel.DecoratedArea) {\n // this.zoneTreeModel.select(decoratedArea);\n // }\n //\n // get decoratedHoverModel() {\n // return this.zoneTreeModel.decoratedHoverModel;\n // }\n //\n // canCollapse(area: TreeModel.DecoratedArea) {\n // // @ts-ignore\n // return area && !area.isZone() && (area.isGroup() && area.hasChildren());\n // }\n //\n // isCollapsed(area: TreeModel.DecoratedArea): boolean {\n // return area && this.zoneTreeModel.isCollapsed(area);\n // }\n //\n // toggleCollapse(area: TreeModel.DecoratedArea) {\n // if (this.isCollapsed(area)) {\n // this.zoneTreeModel.expand(area);\n // } else {\n // this.zoneTreeModel.collapse(area);\n // }\n // }\n\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
[{"__symbolic":"module","version":4,"metadata":{"TreeTableComponent":{"__symbolic":"class","extends":{"__symbolic":"reference","module":"../disposable-component","name":"DisposableComponent","line":48,"character":63},"arity":1,"decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":42,"character":1},"arguments":[{"selector":"aup-tree-table","encapsulation":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"ViewEncapsulation","line":46,"character":17},"member":"None"},"template":"<aup-table [tableModel]=\"treeTableModel\"></aup-table>\n","styles":["td.mat-cell{border-top-width:0!important;border-bottom-width:0!important}td.mat-column-tree-label{width:1px}aup-table-cell-renderer[column-id=tree-label]{padding-left:8px!important}aup-tree-label-cell-renderer{flex:1}"]}]}],"members":{"treeTableModel":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":50,"character":3}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@coolon/pectin","name":"TrackExternal","line":51,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor"}]}}}}]
|
|
1
|
+
[{"__symbolic":"module","version":4,"metadata":{"TreeTableComponent":{"__symbolic":"class","extends":{"__symbolic":"reference","module":"../disposable-component","name":"DisposableComponent","line":48,"character":63},"arity":1,"decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":42,"character":1},"arguments":[{"selector":"aup-tree-table","encapsulation":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"ViewEncapsulation","line":46,"character":17},"member":"None"},"template":"<aup-table [tableModel]=\"treeTableModel\" [showHeaderModel]=\"showHeaderModel\" [enableScrolling]=\"enableScrolling\"></aup-table>\n","styles":["td.mat-cell{border-top-width:0!important;border-bottom-width:0!important}td.mat-column-tree-label{width:1px}aup-table-cell-renderer[column-id=tree-label]{padding-left:8px!important}aup-tree-label-cell-renderer{flex:1}"]}]}],"members":{"treeTableModel":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":50,"character":3}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@coolon/pectin","name":"TrackExternal","line":51,"character":3}}]}],"showHeaderModel":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":55,"character":3}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@coolon/pectin","name":"TrackExternal","line":56,"character":3},"arguments":[{"defaultValue":true}]}]}],"showHeader":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":59,"character":3}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@coolon/pectin","name":"StoreInValueModel","line":60,"character":3},"arguments":["showHeaderModel"]}]}],"enableScrolling":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":68,"character":3}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"HostBinding","line":69,"character":3},"arguments":["class.enable-scrolling"]}]}],"__ctor__":[{"__symbolic":"constructor"}]}}}}]
|
|
@@ -3095,26 +3095,26 @@ class DecoratedTreeNodeMixin {
|
|
|
3095
3095
|
this.node = node;
|
|
3096
3096
|
}
|
|
3097
3097
|
get decoratedSelf() {
|
|
3098
|
-
return this.memoize(
|
|
3098
|
+
return this.memoize('decoratedSelf', () => {
|
|
3099
3099
|
return this.parent ? this.parent.children.find(child => child.node === this.node) : DecoratedTreeNode.createRoot(this.node);
|
|
3100
3100
|
});
|
|
3101
3101
|
}
|
|
3102
3102
|
get children() {
|
|
3103
|
-
return this.memoize(
|
|
3103
|
+
return this.memoize('children', () => {
|
|
3104
3104
|
return this.node.children ? this.node.children.map(child => {
|
|
3105
3105
|
return Mixin.createProxy(child, new DecoratedTreeNodeMixin(this.decoratedSelf, child));
|
|
3106
3106
|
}) : [];
|
|
3107
3107
|
});
|
|
3108
3108
|
}
|
|
3109
3109
|
descendants() {
|
|
3110
|
-
return this.memoize(
|
|
3110
|
+
return this.memoize('descendants', () => {
|
|
3111
3111
|
const result = [];
|
|
3112
3112
|
this.visitDescendants(child => result.push(child));
|
|
3113
3113
|
return result;
|
|
3114
3114
|
});
|
|
3115
3115
|
}
|
|
3116
3116
|
selfAndDescendants() {
|
|
3117
|
-
return this.memoize(
|
|
3117
|
+
return this.memoize('selfAndDescendants', () => {
|
|
3118
3118
|
const result = [];
|
|
3119
3119
|
this.visitSelfAndDescendants(child => result.push(child));
|
|
3120
3120
|
return result;
|
|
@@ -3177,27 +3177,24 @@ class DecoratedTreeNodeMixin {
|
|
|
3177
3177
|
});
|
|
3178
3178
|
}
|
|
3179
3179
|
ancestorsAndSelf() {
|
|
3180
|
-
return this.memoize(
|
|
3180
|
+
return this.memoize('ancestorsAndSelf', () => {
|
|
3181
3181
|
return this.ancestors().concat([(this.decoratedSelf)]);
|
|
3182
3182
|
});
|
|
3183
3183
|
}
|
|
3184
3184
|
pathToParent(parent) {
|
|
3185
|
-
|
|
3186
|
-
|
|
3187
|
-
|
|
3188
|
-
|
|
3189
|
-
|
|
3190
|
-
|
|
3191
|
-
|
|
3192
|
-
|
|
3193
|
-
|
|
3194
|
-
|
|
3195
|
-
});
|
|
3185
|
+
if (this.node === parent.node) {
|
|
3186
|
+
return [];
|
|
3187
|
+
}
|
|
3188
|
+
else if (this.parent) {
|
|
3189
|
+
const pathToParent = this.parent.pathToParent(parent);
|
|
3190
|
+
return pathToParent.concat([this.parent]);
|
|
3191
|
+
}
|
|
3192
|
+
else {
|
|
3193
|
+
throw new Error('parent is not an ancestor');
|
|
3194
|
+
}
|
|
3196
3195
|
}
|
|
3197
3196
|
pathToParentAndSelf(parent) {
|
|
3198
|
-
return this.
|
|
3199
|
-
return this.pathToParent(parent).concat([this.decoratedSelf]);
|
|
3200
|
-
});
|
|
3197
|
+
return this.pathToParent(parent).concat([this.decoratedSelf]);
|
|
3201
3198
|
}
|
|
3202
3199
|
isRoot() {
|
|
3203
3200
|
return !this.parent;
|
|
@@ -3209,18 +3206,18 @@ class DecoratedTreeNodeMixin {
|
|
|
3209
3206
|
return !this.isRoot() && this.node.children.length < 1;
|
|
3210
3207
|
}
|
|
3211
3208
|
hasChildren() {
|
|
3212
|
-
return this.node.children.length > 0;
|
|
3209
|
+
return this.node.children && this.node.children.length > 0;
|
|
3213
3210
|
}
|
|
3214
3211
|
depthFromParent(parent) {
|
|
3215
3212
|
return this.pathToParent(parent).length;
|
|
3216
3213
|
}
|
|
3217
3214
|
treeDepth() {
|
|
3218
|
-
return this.memoize(
|
|
3215
|
+
return this.memoize('treeDepth', () => {
|
|
3219
3216
|
return 1 + this.descendants().map(child => child.depthFromParent(this)).reduce((prev, current) => Math.max(prev, current));
|
|
3220
3217
|
});
|
|
3221
3218
|
}
|
|
3222
3219
|
flatten() {
|
|
3223
|
-
return this.memoize(
|
|
3220
|
+
return this.memoize('flatten', () => {
|
|
3224
3221
|
return this.flattenInto([]);
|
|
3225
3222
|
});
|
|
3226
3223
|
}
|
|
@@ -3554,12 +3551,18 @@ class FlattenStrategy extends SelfAndDescendantsVisitor {
|
|
|
3554
3551
|
class TreeTableComponent extends DisposableComponent {
|
|
3555
3552
|
constructor() {
|
|
3556
3553
|
super();
|
|
3554
|
+
/**
|
|
3555
|
+
* Set to true to enable scrolling. Once enabled the table will have 0 implicit height. You will either
|
|
3556
|
+
* need to set it explicitly e.g. height: 400px; or by using flex or grid layout to make it fill it's
|
|
3557
|
+
* containment area.
|
|
3558
|
+
*/
|
|
3559
|
+
this.enableScrolling = false;
|
|
3557
3560
|
}
|
|
3558
3561
|
}
|
|
3559
3562
|
TreeTableComponent.decorators = [
|
|
3560
3563
|
{ type: Component, args: [{
|
|
3561
3564
|
selector: "aup-tree-table",
|
|
3562
|
-
template: "<aup-table [tableModel]=\"treeTableModel\"></aup-table>\n",
|
|
3565
|
+
template: "<aup-table [tableModel]=\"treeTableModel\" [showHeaderModel]=\"showHeaderModel\" [enableScrolling]=\"enableScrolling\"></aup-table>\n",
|
|
3563
3566
|
encapsulation: ViewEncapsulation.None // allow us to target nested table styles
|
|
3564
3567
|
,
|
|
3565
3568
|
styles: ["td.mat-cell{border-top-width:0!important;border-bottom-width:0!important}td.mat-column-tree-label{width:1px}aup-table-cell-renderer[column-id=tree-label]{padding-left:8px!important}aup-tree-label-cell-renderer{flex:1}"]
|
|
@@ -3567,12 +3570,23 @@ TreeTableComponent.decorators = [
|
|
|
3567
3570
|
];
|
|
3568
3571
|
TreeTableComponent.ctorParameters = () => [];
|
|
3569
3572
|
TreeTableComponent.propDecorators = {
|
|
3570
|
-
treeTableModel: [{ type: Input }]
|
|
3573
|
+
treeTableModel: [{ type: Input }],
|
|
3574
|
+
showHeaderModel: [{ type: Input }],
|
|
3575
|
+
showHeader: [{ type: Input }],
|
|
3576
|
+
enableScrolling: [{ type: Input }, { type: HostBinding, args: ['class.enable-scrolling',] }]
|
|
3571
3577
|
};
|
|
3572
3578
|
__decorate([
|
|
3573
3579
|
TrackExternal(),
|
|
3574
3580
|
__metadata("design:type", TreeTableModel)
|
|
3575
3581
|
], TreeTableComponent.prototype, "treeTableModel", void 0);
|
|
3582
|
+
__decorate([
|
|
3583
|
+
TrackExternal({ defaultValue: true }),
|
|
3584
|
+
__metadata("design:type", ValueModel)
|
|
3585
|
+
], TreeTableComponent.prototype, "showHeaderModel", void 0);
|
|
3586
|
+
__decorate([
|
|
3587
|
+
StoreInValueModel('showHeaderModel'),
|
|
3588
|
+
__metadata("design:type", Boolean)
|
|
3589
|
+
], TreeTableComponent.prototype, "showHeader", void 0);
|
|
3576
3590
|
|
|
3577
3591
|
class VerticalFocusContainerComponent extends FocusContainerComponent {
|
|
3578
3592
|
constructor(focusManager) {
|