@coolon/angular-ui-powerups 3.9.0 → 3.10.1
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/CHANGELOG.md +9 -0
- package/assets/table.scss +18 -0
- package/bundles/coolon-angular-ui-powerups.umd.js +1210 -507
- 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/angular-ui-powerups.module.ngfactory.js.map +1 -1
- package/esm2015/lib/components/components.module.js +13 -5
- package/esm2015/lib/components/components.module.js.map +1 -1
- package/esm2015/lib/components/components.module.metadata.json +1 -1
- package/esm2015/lib/components/components.module.ngfactory.js.map +1 -1
- package/esm2015/lib/components/exports.js +11 -0
- package/esm2015/lib/components/exports.js.map +1 -1
- package/esm2015/lib/components/exports.metadata.json +1 -1
- package/esm2015/lib/components/table/abstract-table-model.js +173 -0
- package/esm2015/lib/components/table/abstract-table-model.js.map +1 -0
- package/esm2015/lib/components/table/abstract-table-model.metadata.json +1 -0
- package/esm2015/lib/components/table/column-model.js +6 -3
- package/esm2015/lib/components/table/column-model.js.map +1 -1
- package/esm2015/lib/components/table/column-model.metadata.json +1 -1
- package/esm2015/lib/components/table/table-model.js +7 -171
- package/esm2015/lib/components/table/table-model.js.map +1 -1
- package/esm2015/lib/components/table/table-model.metadata.json +1 -1
- package/esm2015/lib/components/table/table.component.js +3 -3
- 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 +169 -0
- package/esm2015/lib/components/tree-table/decorated-tree-node.js.map +1 -0
- package/esm2015/lib/components/tree-table/decorated-tree-node.metadata.json +1 -0
- package/esm2015/lib/components/tree-table/tree-expansion-model.js +48 -0
- package/esm2015/lib/components/tree-table/tree-expansion-model.js.map +1 -0
- package/esm2015/lib/components/tree-table/tree-expansion-model.metadata.json +1 -0
- package/esm2015/lib/components/tree-table/tree-inheritance-icon/tree-inheritance-icon.component.js +68 -0
- package/esm2015/lib/components/tree-table/tree-inheritance-icon/tree-inheritance-icon.component.js.map +1 -0
- package/esm2015/lib/components/tree-table/tree-inheritance-icon/tree-inheritance-icon.component.metadata.json +1 -0
- package/esm2015/lib/components/tree-table/tree-inheritance-icon/tree-inheritance-icon.component.ngfactory.js.map +1 -0
- package/esm2015/lib/components/tree-table/tree-inheritance-icon/tree-inheritance-icon.component.scss.shim.ngstyle.js.map +1 -0
- package/esm2015/lib/components/tree-table/tree-label-cell-renderer/tree-label-cell-renderer.component.js +71 -0
- package/esm2015/lib/components/tree-table/tree-label-cell-renderer/tree-label-cell-renderer.component.js.map +1 -0
- package/esm2015/lib/components/tree-table/tree-label-cell-renderer/tree-label-cell-renderer.component.metadata.json +1 -0
- package/esm2015/lib/components/tree-table/tree-label-cell-renderer/tree-label-cell-renderer.component.ngfactory.js.map +1 -0
- package/esm2015/lib/components/tree-table/tree-label-cell-renderer/tree-label-cell-renderer.component.scss.shim.ngstyle.js.map +1 -0
- package/esm2015/lib/components/tree-table/tree-label-column-model.js +33 -0
- package/esm2015/lib/components/tree-table/tree-label-column-model.js.map +1 -0
- package/esm2015/lib/components/tree-table/tree-label-column-model.metadata.json +1 -0
- package/esm2015/lib/components/tree-table/tree-node.js +2 -0
- package/esm2015/lib/components/tree-table/tree-node.js.map +1 -0
- package/esm2015/lib/components/tree-table/tree-node.metadata.json +1 -0
- package/esm2015/lib/components/tree-table/tree-table-component.js +63 -0
- package/esm2015/lib/components/tree-table/tree-table-component.js.map +1 -0
- package/esm2015/lib/components/tree-table/tree-table-component.metadata.json +1 -0
- package/esm2015/lib/components/tree-table/tree-table-component.ngfactory.js.map +1 -0
- package/esm2015/lib/components/tree-table/tree-table-model.js +108 -0
- package/esm2015/lib/components/tree-table/tree-table-model.js.map +1 -0
- package/esm2015/lib/components/tree-table/tree-table-model.metadata.json +1 -0
- package/esm2015/lib/components/tree-table/tree-table.component.scss.ngstyle.js.map +1 -0
- package/esm2015/lib/components/tree-table/tree-to-list-model.js +25 -0
- package/esm2015/lib/components/tree-table/tree-to-list-model.js.map +1 -0
- package/esm2015/lib/components/tree-table/tree-to-list-model.metadata.json +1 -0
- package/esm2015/lib/components/tree-table/visitable.class.js +26 -0
- package/esm2015/lib/components/tree-table/visitable.class.js.map +1 -0
- package/esm2015/lib/components/tree-table/visitable.class.metadata.json +1 -0
- package/esm2015/lib/interaction/interaction.module.ngfactory.js.map +1 -1
- package/esm2015/lib/place/place.module.ngfactory.js.map +1 -1
- package/esm2015/lib/place/route/visit-sanitiser.js +1 -1
- package/esm2015/lib/place/route/visit-sanitiser.js.map +1 -1
- package/fesm2015/coolon-angular-ui-powerups.js +966 -373
- package/fesm2015/coolon-angular-ui-powerups.js.map +1 -1
- package/lib/components/exports.d.ts +11 -0
- package/lib/components/table/abstract-table-model.d.ts +61 -0
- package/lib/components/table/column-model.d.ts +11 -12
- package/lib/components/table/table-model.d.ts +4 -59
- package/lib/components/table/table.component.d.ts +2 -2
- package/lib/components/tree-table/decorated-tree-node.d.ts +43 -0
- package/lib/components/tree-table/tree-expansion-model.d.ts +18 -0
- package/lib/components/tree-table/tree-inheritance-icon/tree-inheritance-icon.component.d.ts +28 -0
- package/lib/components/tree-table/tree-label-cell-renderer/tree-label-cell-renderer.component.d.ts +25 -0
- package/lib/components/tree-table/tree-label-column-model.d.ts +20 -0
- package/lib/components/tree-table/tree-node.d.ts +3 -0
- package/lib/components/tree-table/tree-table-component.d.ts +7 -0
- package/lib/components/tree-table/tree-table-model.d.ts +33 -0
- package/lib/components/tree-table/tree-to-list-model.d.ts +12 -0
- package/lib/components/tree-table/visitable.class.d.ts +22 -0
- package/package.json +1 -1
- package/schematics/place-routes/place-builder.js +1 -1
- package/schematics/place-routes/place-builder.js.map +1 -1
- package/schematics/utils/build-context.js +0 -2
- package/schematics/utils/build-context.js.map +1 -1
- package/schematics/utils/schematic-tree-file-system.js +6 -2
- package/schematics/utils/schematic-tree-file-system.js.map +1 -1
package/esm2015/lib/components/tree-table/tree-inheritance-icon/tree-inheritance-icon.component.js
ADDED
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { Component, HostBinding, Input } from '@angular/core';
|
|
2
|
+
import { Enum } from 'typescript-string-enums';
|
|
3
|
+
const SVG_HEIGHT = 60;
|
|
4
|
+
export class TreeInheritanceIconComponent {
|
|
5
|
+
constructor() {
|
|
6
|
+
this.pixelWidth = 24;
|
|
7
|
+
this.pixelHeight = 48;
|
|
8
|
+
}
|
|
9
|
+
get heightOffset() {
|
|
10
|
+
return SVG_HEIGHT - this.pixelHeight;
|
|
11
|
+
}
|
|
12
|
+
get viewBox() {
|
|
13
|
+
return `${0} ${this.heightOffset} ${this.pixelWidth} ${this.pixelHeight - this.heightOffset}`;
|
|
14
|
+
}
|
|
15
|
+
hasHead() {
|
|
16
|
+
return TreeInheritanceIconComponent.HAS_HEAD.includes(this.type);
|
|
17
|
+
}
|
|
18
|
+
hasTerminal() {
|
|
19
|
+
return TreeInheritanceIconComponent.HAS_TERMINAL.includes(this.type);
|
|
20
|
+
}
|
|
21
|
+
hasLeadIn() {
|
|
22
|
+
return TreeInheritanceIconComponent.HAS_LEAD_IN.includes(this.type);
|
|
23
|
+
}
|
|
24
|
+
hasTail() {
|
|
25
|
+
return TreeInheritanceIconComponent.HAS_TAIL.includes(this.type);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
TreeInheritanceIconComponent.decorators = [
|
|
29
|
+
{ type: Component, args: [{
|
|
30
|
+
selector: 'aup-tree-inheritance-icon',
|
|
31
|
+
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",
|
|
32
|
+
styles: [":host{color:inherit;position:relative}svg{color:var(--line-color);display:block}"]
|
|
33
|
+
},] }
|
|
34
|
+
];
|
|
35
|
+
TreeInheritanceIconComponent.ctorParameters = () => [];
|
|
36
|
+
TreeInheritanceIconComponent.propDecorators = {
|
|
37
|
+
type: [{ type: Input }, { type: HostBinding, args: ["class",] }],
|
|
38
|
+
pixelWidth: [{ type: Input }],
|
|
39
|
+
pixelHeight: [{ type: Input }]
|
|
40
|
+
};
|
|
41
|
+
(function (TreeInheritanceIconComponent) {
|
|
42
|
+
TreeInheritanceIconComponent.Type = Enum({
|
|
43
|
+
ICON_BLANK: 'blank',
|
|
44
|
+
ICON_PARENT: 'parent',
|
|
45
|
+
ICON_INHERITED_TERMINAL: 'inherited_terminal',
|
|
46
|
+
ICON_INHERITED_THROUGH_TERMINAL: 'inherited_through_terminal',
|
|
47
|
+
ICON_THROUGH: 'through' // |
|
|
48
|
+
});
|
|
49
|
+
TreeInheritanceIconComponent.HAS_LEAD_IN = [
|
|
50
|
+
TreeInheritanceIconComponent.Type.ICON_PARENT
|
|
51
|
+
];
|
|
52
|
+
TreeInheritanceIconComponent.HAS_TERMINAL = [
|
|
53
|
+
TreeInheritanceIconComponent.Type.ICON_INHERITED_TERMINAL,
|
|
54
|
+
TreeInheritanceIconComponent.Type.ICON_INHERITED_THROUGH_TERMINAL,
|
|
55
|
+
TreeInheritanceIconComponent.Type.ICON_PARENT
|
|
56
|
+
];
|
|
57
|
+
TreeInheritanceIconComponent.HAS_HEAD = [
|
|
58
|
+
TreeInheritanceIconComponent.Type.ICON_THROUGH,
|
|
59
|
+
TreeInheritanceIconComponent.Type.ICON_INHERITED_TERMINAL,
|
|
60
|
+
TreeInheritanceIconComponent.Type.ICON_INHERITED_THROUGH_TERMINAL
|
|
61
|
+
];
|
|
62
|
+
TreeInheritanceIconComponent.HAS_TAIL = [
|
|
63
|
+
TreeInheritanceIconComponent.Type.ICON_PARENT,
|
|
64
|
+
TreeInheritanceIconComponent.Type.ICON_THROUGH,
|
|
65
|
+
TreeInheritanceIconComponent.Type.ICON_INHERITED_THROUGH_TERMINAL
|
|
66
|
+
];
|
|
67
|
+
})(TreeInheritanceIconComponent || (TreeInheritanceIconComponent = {}));
|
|
68
|
+
//# sourceMappingURL=tree-inheritance-icon.component.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tree-inheritance-icon.component.js","sourceRoot":"","sources":["../../../../../../../../libs/angular-ui-powerups/src/lib/components/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;AAG/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';\nimport { DecoratedTreeNode } from '../decorated-tree-node';\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 extends DecoratedTreeNode<any>> {\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"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
[{"__symbolic":"module","version":4,"metadata":{"TreeInheritanceIconComponent":{"__symbolic":"class","arity":1,"decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":6,"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{color:inherit;position:relative}svg{color:var(--line-color);display:block}"]}]}],"members":{"type":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":13,"character":3}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"HostBinding","line":14,"character":3},"arguments":["class"]}]}],"pixelWidth":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":17,"character":3}}]}],"pixelHeight":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":20,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor"}],"hasHead":[{"__symbolic":"method"}],"hasTerminal":[{"__symbolic":"method"}],"hasLeadIn":[{"__symbolic":"method"}],"hasTail":[{"__symbolic":"method"}]}}}}]
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tree-inheritance-icon.component.ngfactory.js","sourceRoot":"","sources":["../../../../../../../../libs/angular-ui-powerups/src/lib/components/tree-table/tree-inheritance-icon/tree-inheritance-icon.component.ngfactory.ts"],"names":[],"mappings":"","sourcesContent":["import * as i0 from '@angular/core';\ni0.ComponentFactory;\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tree-inheritance-icon.component.scss.shim.ngstyle.js","sourceRoot":"","sources":["../../../../../../../../libs/angular-ui-powerups/src/lib/components/tree-table/tree-inheritance-icon/tree-inheritance-icon.component.scss.shim.ngstyle.ts"],"names":[],"mappings":"","sourcesContent":["import * as i0 from '@angular/core';\ni0.ComponentFactory;\n"]}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { __decorate, __metadata } from "tslib";
|
|
2
|
+
import { Component, HostBinding, Input } from '@angular/core';
|
|
3
|
+
import { Dsl, MutableValueModel, StoreInValueModel } from '@coolon/pectin';
|
|
4
|
+
import { DisposableComponent } from '../../disposable-component';
|
|
5
|
+
import { DecoratedTreeNode } from '../decorated-tree-node';
|
|
6
|
+
import { TreeExpansionModel } from '../tree-expansion-model';
|
|
7
|
+
import { TreeInheritanceIconComponent } from '../tree-inheritance-icon/tree-inheritance-icon.component';
|
|
8
|
+
import { TreeLabelColumnModel } from '../tree-label-column-model';
|
|
9
|
+
export class TreeLabelCellRendererComponent extends DisposableComponent {
|
|
10
|
+
constructor() {
|
|
11
|
+
super();
|
|
12
|
+
this.iconTypes = [];
|
|
13
|
+
this.nodeModel = new MutableValueModel();
|
|
14
|
+
const { chain } = Dsl.disposeWith(this);
|
|
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;
|
|
18
|
+
});
|
|
19
|
+
if (!node.isRoot()) {
|
|
20
|
+
icons.push(node.isLastChild() ? TreeInheritanceIconComponent.Type.ICON_INHERITED_TERMINAL : TreeInheritanceIconComponent.Type.ICON_INHERITED_THROUGH_TERMINAL);
|
|
21
|
+
}
|
|
22
|
+
return icons;
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
ngOnInit() {
|
|
26
|
+
const { chain } = Dsl.disposeWith(this);
|
|
27
|
+
this.canExpand = chain(this.nodeModel).map(node => {
|
|
28
|
+
return node.hasChildren() && this.expansionModel.isCollapsed(node);
|
|
29
|
+
}, { dependsOn: this.expansionModel.isExpandedPredicate });
|
|
30
|
+
this.canCollapse = chain(this.nodeModel).map(node => {
|
|
31
|
+
return node.hasChildren() && !this.expansionModel.isCollapsed(node);
|
|
32
|
+
}, { dependsOn: this.expansionModel.isExpandedPredicate });
|
|
33
|
+
this.iconModel = chain(this.nodeModel).map(node => {
|
|
34
|
+
return this.node.isLeaf() ? undefined : this.iconFactory(node, this.expansionModel.isExpanded(this.node));
|
|
35
|
+
}, { dependsOn: this.expansionModel.isExpandedPredicate });
|
|
36
|
+
}
|
|
37
|
+
get isRoot() {
|
|
38
|
+
return this.node.isRoot();
|
|
39
|
+
}
|
|
40
|
+
get isLeaf() {
|
|
41
|
+
return this.node.isLeaf();
|
|
42
|
+
}
|
|
43
|
+
get node() {
|
|
44
|
+
return this.nodeModel.value;
|
|
45
|
+
}
|
|
46
|
+
// @Trace()
|
|
47
|
+
expandOrCollapse(node) {
|
|
48
|
+
this.expansionModel.isCollapsed(node) ? this.expansionModel.expand(node) : this.expansionModel.collapse(node);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
TreeLabelCellRendererComponent.decorators = [
|
|
52
|
+
{ type: Component, args: [{
|
|
53
|
+
selector: 'aup-tree-label-cell-renderer',
|
|
54
|
+
template: "<div class=\"tree-icons\">\n <aup-tree-inheritance-icon *ngFor=\"let iconClass of iconList.value\" [type]=\"iconClass\"></aup-tree-inheritance-icon>\n <aup-icon *ngIf=\"iconModel.value\"\n [icon]=\"iconModel.value\"\n [class.clickable]=\"canExpand.value || canCollapse.value\"\n (click)=\"expandOrCollapse(node)\" ></aup-icon>\n</div>\n<div class=\"label\">{{label}}</div>\n",
|
|
55
|
+
styles: [":host{--line-color:#ddd;--node-color:#999;align-items:stretch;display:inline-flex;flex-direction:row}:host div.label{align-items:center;display:flex;flex-direction:row;padding-left:6px;white-space:nowrap}:host div.tree-icons{-ms-grid-rows:1fr;align-items:stretch;display:-ms-grid;display:grid;grid-auto-columns:auto;grid-auto-flow:column;grid-template-rows:1fr;justify-content:stretch}:host div.tree-icons aup-icon{-ms-grid-row-align:center;align-self:center;color:var(--node-color)}:host div.tree-icons aup-icon.clickable{cursor:pointer}:host div.tree-icons aup-icon,:host div.tree-icons aup-tree-inheritance-icon{margin-left:4px}"]
|
|
56
|
+
},] }
|
|
57
|
+
];
|
|
58
|
+
TreeLabelCellRendererComponent.ctorParameters = () => [];
|
|
59
|
+
TreeLabelCellRendererComponent.propDecorators = {
|
|
60
|
+
value: [{ type: Input }],
|
|
61
|
+
label: [{ type: Input }],
|
|
62
|
+
iconFactory: [{ type: Input }],
|
|
63
|
+
expansionModel: [{ type: Input }],
|
|
64
|
+
isRoot: [{ type: HostBinding, args: ['class.root',] }],
|
|
65
|
+
isLeaf: [{ type: HostBinding, args: ['class.leaf',] }]
|
|
66
|
+
};
|
|
67
|
+
__decorate([
|
|
68
|
+
StoreInValueModel('nodeModel'),
|
|
69
|
+
__metadata("design:type", Object)
|
|
70
|
+
], TreeLabelCellRendererComponent.prototype, "value", void 0);
|
|
71
|
+
//# sourceMappingURL=tree-label-cell-renderer.component.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tree-label-cell-renderer.component.js","sourceRoot":"","sources":["../../../../../../../../libs/angular-ui-powerups/src/lib/components/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 { 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';\nimport { TreeNode } from '../tree-node';\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 TreeNode<any>> extends DisposableComponent implements OnInit {\n\n iconTypes: string[] = [];\n\n private nodeModel = new MutableValueModel<DecoratedTreeNode<T>>();\n\n @Input()\n @StoreInValueModel('nodeModel')\n value: DecoratedTreeNode<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<DecoratedTreeNode<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[] = node.ancestors().slice(1).map(ancestor => {\n return ancestor.isLastChild() ? TreeInheritanceIconComponent.Type.ICON_BLANK : TreeInheritanceIconComponent.Type.ICON_THROUGH;\n });\n if (!node.isRoot()) {\n icons.push(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 node.hasChildren() && this.expansionModel.isCollapsed(node);\n }, { dependsOn: this.expansionModel.isExpandedPredicate });\n\n this.canCollapse = chain(this.nodeModel).map(node => {\n return node.hasChildren() && !this.expansionModel.isCollapsed(node);\n }, { dependsOn: this.expansionModel.isExpandedPredicate });\n\n this.iconModel = chain(this.nodeModel).map(node => {\n return 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 this.node.isRoot();\n }\n\n @HostBinding('class.leaf')\n get isLeaf() {\n return 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"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
[{"__symbolic":"module","version":4,"metadata":{"TreeLabelCellRendererComponent":{"__symbolic":"class","extends":{"__symbolic":"reference","module":"../../disposable-component","name":"DisposableComponent","line":14,"character":77},"arity":1,"decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":9,"character":1},"arguments":[{"selector":"aup-tree-label-cell-renderer","template":"<div class=\"tree-icons\">\n <aup-tree-inheritance-icon *ngFor=\"let iconClass of iconList.value\" [type]=\"iconClass\"></aup-tree-inheritance-icon>\n <aup-icon *ngIf=\"iconModel.value\"\n [icon]=\"iconModel.value\"\n [class.clickable]=\"canExpand.value || canCollapse.value\"\n (click)=\"expandOrCollapse(node)\" ></aup-icon>\n</div>\n<div class=\"label\">{{label}}</div>\n","styles":[":host{--line-color:#ddd;--node-color:#999;align-items:stretch;display:inline-flex;flex-direction:row}:host div.label{align-items:center;display:flex;flex-direction:row;padding-left:6px;white-space:nowrap}:host div.tree-icons{-ms-grid-rows:1fr;align-items:stretch;display:-ms-grid;display:grid;grid-auto-columns:auto;grid-auto-flow:column;grid-template-rows:1fr;justify-content:stretch}:host div.tree-icons aup-icon{-ms-grid-row-align:center;align-self:center;color:var(--node-color)}:host div.tree-icons aup-icon.clickable{cursor:pointer}:host div.tree-icons aup-icon,:host div.tree-icons aup-tree-inheritance-icon{margin-left:4px}"]}]}],"members":{"value":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":20,"character":3}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@coolon/pectin","name":"StoreInValueModel","line":21,"character":3},"arguments":["nodeModel"]}]}],"label":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":24,"character":3}}]}],"iconFactory":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":27,"character":3}}]}],"expansionModel":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":31,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor"}],"ngOnInit":[{"__symbolic":"method"}],"isRoot":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"HostBinding","line":69,"character":3},"arguments":["class.root"]}]}],"isLeaf":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"HostBinding","line":74,"character":3},"arguments":["class.leaf"]}]}],"expandOrCollapse":[{"__symbolic":"method"}]}}}}]
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tree-label-cell-renderer.component.ngfactory.js","sourceRoot":"","sources":["../../../../../../../../libs/angular-ui-powerups/src/lib/components/tree-table/tree-label-cell-renderer/tree-label-cell-renderer.component.ngfactory.ts"],"names":[],"mappings":"","sourcesContent":["import * as i0 from '@angular/core';\ni0.ComponentFactory;\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tree-label-cell-renderer.component.scss.shim.ngstyle.js","sourceRoot":"","sources":["../../../../../../../../libs/angular-ui-powerups/src/lib/components/tree-table/tree-label-cell-renderer/tree-label-cell-renderer.component.scss.shim.ngstyle.ts"],"names":[],"mappings":"","sourcesContent":["import * as i0 from '@angular/core';\ni0.ComponentFactory;\n"]}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import _ from 'lodash';
|
|
2
|
+
import { ComponentCellRendererPortalRef } from '../table/cell-portal-ref';
|
|
3
|
+
import { ColumnModel } from '../table/column-model';
|
|
4
|
+
import { TreeLabelCellRendererComponent } from './tree-label-cell-renderer/tree-label-cell-renderer.component';
|
|
5
|
+
export class TreeLabelColumnModel extends ColumnModel {
|
|
6
|
+
constructor(columnId, textPropertiesProvider, expansionModel) {
|
|
7
|
+
super(columnId, textPropertiesProvider);
|
|
8
|
+
this.expansionModel = expansionModel;
|
|
9
|
+
this.iconFactory = (node, expanded) => expanded ? 'mat:folder_open' : 'mat:folder';
|
|
10
|
+
this.cellRenderer(TreeLabelCellRendererComponent);
|
|
11
|
+
}
|
|
12
|
+
pluck(property) {
|
|
13
|
+
this.labelProperty = property;
|
|
14
|
+
}
|
|
15
|
+
addIcon(factory) {
|
|
16
|
+
this.iconFactory = factory;
|
|
17
|
+
}
|
|
18
|
+
cellRenderer(componentType) {
|
|
19
|
+
this.configureCellRenderer(new ComponentCellRendererPortalRef(componentType, (component, rowData, firstTime) => {
|
|
20
|
+
if (firstTime) {
|
|
21
|
+
component.expansionModel = this.expansionModel;
|
|
22
|
+
}
|
|
23
|
+
component.value = rowData.row;
|
|
24
|
+
component.label = _.isNil(this.labelProperty) ? undefined : rowData.row[this.labelProperty];
|
|
25
|
+
component.iconFactory = this.iconFactory;
|
|
26
|
+
}));
|
|
27
|
+
return this;
|
|
28
|
+
}
|
|
29
|
+
selectRowOnClick(selectOnRowClick) {
|
|
30
|
+
return super.selectRowOnClick(selectOnRowClick);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=tree-label-column-model.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tree-label-column-model.js","sourceRoot":"","sources":["../../../../../../../libs/angular-ui-powerups/src/lib/components/tree-table/tree-label-column-model.ts"],"names":[],"mappings":"AAEA,OAAO,CAAC,MAAM,QAAQ,CAAC;AACvB,OAAO,EAAE,8BAA8B,EAAE,MAAM,0BAA0B,CAAC;AAC1E,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAGpD,OAAO,EAAE,8BAA8B,EAAE,MAAM,+DAA+D,CAAC;AAG/G,MAAM,OAAO,oBAAgD,SAAQ,WAAmC;IAKtG,YAAY,QAAgB,EAChB,sBAA0D,EACjD,cAA0D;QAC7E,KAAK,CAAC,QAAQ,EAAE,sBAAsB,CAAC,CAAC;QADrB,mBAAc,GAAd,cAAc,CAA4C;QAJvE,gBAAW,GAA2C,CAAC,IAA4B,EAAE,QAAiB,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,YAAY,CAAC;QAM7J,IAAI,CAAC,YAAY,CAAC,8BAA8B,CAAC,CAAC;IACpD,CAAC;IAED,KAAK,CAAyC,QAAW;QACvD,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC;IAChC,CAAC;IAED,OAAO,CAAyC,OAA+C;QAC7F,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC;IAC7B,CAAC;IAES,YAAY,CAAgD,aAA+B;QACnG,IAAI,CAAC,qBAAqB,CAAC,IAAI,8BAA8B,CAAC,aAAa,EAAE,CAAC,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE;YAC7G,IAAI,SAAS,EAAE;gBACb,SAAS,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC;aAChD;YACD,SAAS,CAAC,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC;YAC9B,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAC5F,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;QAC3C,CAAC,CAAC,CAAC,CAAC;QACJ,OAAO,IAAI,CAAC;IACd,CAAC;IAEM,gBAAgB,CAAC,gBAAyB;QAC/C,OAAO,KAAK,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,CAAC;IAClD,CAAC;CAEF","sourcesContent":["import { ComponentType } from '@angular/cdk/overlay';\nimport { Types } from '@coolon/pectin';\nimport _ from 'lodash';\nimport { ComponentCellRendererPortalRef } from '../table/cell-portal-ref';\nimport { ColumnModel } from '../table/column-model';\nimport { DecoratedTreeNode } from './decorated-tree-node';\nimport { TreeExpansionModel } from './tree-expansion-model';\nimport { TreeLabelCellRendererComponent } from './tree-label-cell-renderer/tree-label-cell-renderer.component';\nimport { TreeNode } from './tree-node';\n\nexport class TreeLabelColumnModel<Row extends TreeNode<Row>> extends ColumnModel<DecoratedTreeNode<Row>> {\n\n private labelProperty: string | number | symbol;\n private iconFactory: TreeLabelColumnModel.LabelFactory<Row> = (node: DecoratedTreeNode<Row>, expanded: boolean) => expanded ? 'mat:folder_open' : 'mat:folder';\n\n constructor(columnId: string,\n textPropertiesProvider: ColumnModel.TextPropertiesProvider,\n readonly expansionModel: TreeExpansionModel<DecoratedTreeNode<Row>>) {\n super(columnId, textPropertiesProvider);\n this.cellRenderer(TreeLabelCellRendererComponent);\n }\n\n pluck<P extends Types.ValuePropertiesOf<Row>>(property: P) {\n this.labelProperty = property;\n }\n\n addIcon<P extends Types.ValuePropertiesOf<Row>>(factory: TreeLabelColumnModel.LabelFactory<Row>) {\n this.iconFactory = factory;\n }\n\n protected cellRenderer<C extends TreeLabelCellRendererComponent<Row>>(componentType: ComponentType<C>): this {\n this.configureCellRenderer(new ComponentCellRendererPortalRef(componentType, (component, rowData, firstTime) => {\n if (firstTime) {\n component.expansionModel = this.expansionModel;\n }\n component.value = rowData.row;\n component.label = _.isNil(this.labelProperty) ? undefined : rowData.row[this.labelProperty];\n component.iconFactory = this.iconFactory;\n }));\n return this;\n }\n\n public selectRowOnClick(selectOnRowClick: boolean): this {\n return super.selectRowOnClick(selectOnRowClick);\n }\n\n}\n\nexport namespace TreeLabelColumnModel {\n export type LabelFactory<Row extends TreeNode<Row>> = (node: DecoratedTreeNode<Row>, expanded: boolean) => string;\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
[{"__symbolic":"module","version":4,"metadata":{"TreeLabelColumnModel":{"__symbolic":"class","extends":{"__symbolic":"reference","module":"../table/column-model","name":"ColumnModel","line":10,"character":69},"arity":1,"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"string"},{"__symbolic":"select","expression":{"__symbolic":"reference","module":"../table/column-model","name":"ColumnModel","line":16,"character":38},"member":"TextPropertiesProvider"},{"__symbolic":"reference","module":"./tree-expansion-model","name":"TreeExpansionModel","line":17,"character":39,"arguments":[{"__symbolic":"reference","module":"./decorated-tree-node","name":"DecoratedTreeNode","line":17,"character":58,"arguments":[{"__symbolic":"error","message":"Could not resolve type","line":17,"character":76,"context":{"typeName":"Row"}}]}]}]}],"pluck":[{"__symbolic":"method"}],"addIcon":[{"__symbolic":"method"}],"cellRenderer":[{"__symbolic":"method"}],"selectRowOnClick":[{"__symbolic":"method"}]}}}}]
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tree-node.js","sourceRoot":"","sources":["../../../../../../../libs/angular-ui-powerups/src/lib/components/tree-table/tree-node.ts"],"names":[],"mappings":"","sourcesContent":["export interface TreeNode<T extends TreeNode<T>> {\n children: T[];\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
[{"__symbolic":"module","version":4,"metadata":{"TreeNode":{"__symbolic":"interface"}}}]
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { __decorate, __metadata } from "tslib";
|
|
2
|
+
import { Component, Input, ViewEncapsulation } from '@angular/core';
|
|
3
|
+
import { TrackExternal } from '@coolon/pectin';
|
|
4
|
+
import { DisposableComponent } from '../disposable-component';
|
|
5
|
+
import { TreeTableModel } from './tree-table-model';
|
|
6
|
+
//
|
|
7
|
+
// const template = `
|
|
8
|
+
// <table-component list-model="zoneTreeController.visibleAreas"
|
|
9
|
+
// selection-model="zoneTreeController.selectionModel"
|
|
10
|
+
// selection-command="zoneTreeController.selectionCommand"
|
|
11
|
+
// hover-model="zoneTreeController.decoratedHoverModel"
|
|
12
|
+
// no-hover="zoneTreeController.noHover"
|
|
13
|
+
// no-lines="true" no-scroll>
|
|
14
|
+
//
|
|
15
|
+
// <row-attr name="parent-id" value="{{item.parent.id}}"></row-attr>
|
|
16
|
+
// <row-attr name="area-id" value="{{item.id}}"></row-attr>
|
|
17
|
+
// <row-attr name="area-name" value="{{item.name}}"></row-attr>
|
|
18
|
+
// <row-attr name="area-depth" value="{{item.depthFromZone()}}"></row-attr>
|
|
19
|
+
// <row-attr name="collapsed" value="{{zoneTreeController.isCollapsed(item)}}"></row-attr>
|
|
20
|
+
//
|
|
21
|
+
// <column class="area" ng-class="{root: item.isZone(), parent: item.isGroup()}" class="allow-squish">
|
|
22
|
+
// <!--<label>Rooms in {{zoneTreeController.zoneModel.value.name}}</label>-->
|
|
23
|
+
// <label>Rooms</label>
|
|
24
|
+
// <div layout="row" layout-align="start center">
|
|
25
|
+
// <tree-icons tree-item="item"></tree-icons>
|
|
26
|
+
// <area-icon area="item"></area-icon>
|
|
27
|
+
// <span ng-if="item.isZone()">Zone ({{item.name}})</span>
|
|
28
|
+
// <span ng-if="!item.isZone()">{{item.name}}</span>
|
|
29
|
+
// </div>
|
|
30
|
+
// </column>
|
|
31
|
+
// <column class="expand-collapse" ng-class="{collapsed: zoneTreeController.isCollapsed(item)}">
|
|
32
|
+
// <md-button class="md-icon-button"
|
|
33
|
+
// ng-if="zoneTreeController.canCollapse(item)"
|
|
34
|
+
// ng-click="zoneTreeController.toggleCollapse(item)">
|
|
35
|
+
// <md-icon>keyboard_arrow_up</md-icon>
|
|
36
|
+
// </md-button>
|
|
37
|
+
// </column>
|
|
38
|
+
//
|
|
39
|
+
// </table-component>
|
|
40
|
+
// `;
|
|
41
|
+
export class TreeTableComponent extends DisposableComponent {
|
|
42
|
+
constructor() {
|
|
43
|
+
super();
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
TreeTableComponent.decorators = [
|
|
47
|
+
{ type: Component, args: [{
|
|
48
|
+
selector: "aup-tree-table",
|
|
49
|
+
template: "<aup-table [tableModel]=\"treeTableModel\"></aup-table>\n",
|
|
50
|
+
encapsulation: ViewEncapsulation.None // allow us to target nested table styles
|
|
51
|
+
,
|
|
52
|
+
styles: ["td.mat-cell{border-bottom-width:0!important;border-top-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}"]
|
|
53
|
+
},] }
|
|
54
|
+
];
|
|
55
|
+
TreeTableComponent.ctorParameters = () => [];
|
|
56
|
+
TreeTableComponent.propDecorators = {
|
|
57
|
+
treeTableModel: [{ type: Input }]
|
|
58
|
+
};
|
|
59
|
+
__decorate([
|
|
60
|
+
TrackExternal(),
|
|
61
|
+
__metadata("design:type", TreeTableModel)
|
|
62
|
+
], TreeTableComponent.prototype, "treeTableModel", void 0);
|
|
63
|
+
//# sourceMappingURL=tree-table-component.js.map
|
|
@@ -0,0 +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;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,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;IAMhF;QACE,KAAK,EAAE,CAAC;IACV,CAAC;;;YAdF,SAAS,SAAC;gBACT,QAAQ,EAAE,gBAAgB;gBAC1B,qEAA0C;gBAE1C,aAAa,EAAE,iBAAiB,CAAC,IAAI,CAAC,yCAAyC;;;aAChF;;;;6BAGE,KAAK;;AAEN;IADC,aAAa,EAAE;8BACA,cAAc;0DAAI","sourcesContent":["import { Component, Input, ViewEncapsulation } from '@angular/core';\nimport { TrackExternal } 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 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"]}
|
|
@@ -0,0 +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-bottom-width:0!important;border-top-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"}]}}}}]
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tree-table-component.ngfactory.js","sourceRoot":"","sources":["../../../../../../../libs/angular-ui-powerups/src/lib/components/tree-table/tree-table-component.ngfactory.ts"],"names":[],"mappings":"","sourcesContent":["import * as i0 from '@angular/core';\ni0.ComponentFactory;\n"]}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
// import {T } from '@client/api/light-architect/model/area/area.class';
|
|
2
|
+
// import { SelfAndDescendantsVisitor } from '@client/api/light-architect/model/area/visitable.class';
|
|
3
|
+
// import { Zone } from '@client/api/light-architect/model/area/zone.class';
|
|
4
|
+
import { Dsl, GarbageCollector } from '@coolon/pectin';
|
|
5
|
+
import { AbstractTableModel } from '../table/abstract-table-model';
|
|
6
|
+
import { TreeExpansionModel } from './tree-expansion-model';
|
|
7
|
+
import { TreeLabelColumnModel } from './tree-label-column-model';
|
|
8
|
+
import { TreeToListModel } from './tree-to-list-model';
|
|
9
|
+
import { SelfAndDescendantsVisitor } from './visitable.class';
|
|
10
|
+
// TODO:
|
|
11
|
+
// Selection Models:
|
|
12
|
+
// - as simple navigation tree
|
|
13
|
+
// - as editable grid (selecte all, even hidden etc?)
|
|
14
|
+
// - fixing selection on underlying model changes.
|
|
15
|
+
// - rendering selection: row highlighting, checkboxes (in the tree renderer or in separate column), both.
|
|
16
|
+
// Expansion Models:
|
|
17
|
+
// - Add ability to auto show to depth
|
|
18
|
+
// - Add a predicate to check default expansion (i.e. has children of a certain type)
|
|
19
|
+
//
|
|
20
|
+
export class TreeTableModel extends AbstractTableModel {
|
|
21
|
+
constructor(source, treeExpansionModel) {
|
|
22
|
+
super(source);
|
|
23
|
+
this.treeExpansionModel = treeExpansionModel;
|
|
24
|
+
}
|
|
25
|
+
static fromRoot(sourceOfTruth, builder) {
|
|
26
|
+
const garbage = new GarbageCollector();
|
|
27
|
+
const { chain, valueOf, before, when, after, observe, switchOn } = Dsl.disposeWith(garbage);
|
|
28
|
+
const children = chain(sourceOfTruth).mapToList(root => [root]);
|
|
29
|
+
const model = this.fromList(children, builder);
|
|
30
|
+
model.registerDisposable(garbage);
|
|
31
|
+
return model;
|
|
32
|
+
}
|
|
33
|
+
static fromChildrenOf(sourceOfTruth, builder) {
|
|
34
|
+
const garbage = new GarbageCollector();
|
|
35
|
+
const { chain, valueOf, before, when, after, observe, switchOn } = Dsl.disposeWith(garbage);
|
|
36
|
+
const children = chain(sourceOfTruth).mapToList(root => root.children); // for some reason pluck list can't see 'children'
|
|
37
|
+
const model = this.fromList(children, builder);
|
|
38
|
+
model.registerDisposable(garbage);
|
|
39
|
+
return model;
|
|
40
|
+
}
|
|
41
|
+
static fromList(sourceOfTruth, builder) {
|
|
42
|
+
const treeExpansionModel = new TreeExpansionModel(sourceOfTruth.identityOf);
|
|
43
|
+
const nodes = new TreeToListModel(sourceOfTruth, treeExpansionModel);
|
|
44
|
+
const model = new TreeTableModel(nodes, treeExpansionModel);
|
|
45
|
+
model.registerDisposable(nodes);
|
|
46
|
+
if (builder)
|
|
47
|
+
builder(model);
|
|
48
|
+
return model;
|
|
49
|
+
}
|
|
50
|
+
treeControlColumn(builder) {
|
|
51
|
+
const columnId = 'tree-label';
|
|
52
|
+
const column = new TreeLabelColumnModel(columnId, () => this.getColumnTextProperties(columnId), this.treeExpansionModel);
|
|
53
|
+
builder(column);
|
|
54
|
+
this.addColumn(column);
|
|
55
|
+
}
|
|
56
|
+
expand(node) {
|
|
57
|
+
this.treeExpansionModel.expand(node);
|
|
58
|
+
}
|
|
59
|
+
collapse(node) {
|
|
60
|
+
this.treeExpansionModel.expand(node);
|
|
61
|
+
}
|
|
62
|
+
isCollapsed(node) {
|
|
63
|
+
return this.treeExpansionModel.isCollapsed(node);
|
|
64
|
+
}
|
|
65
|
+
ensureAncestorsAndSelfVisible(node) {
|
|
66
|
+
this.treeExpansionModel.ensureAncestorsAndSelfVisible(node);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
export class FlattenStrategy extends SelfAndDescendantsVisitor {
|
|
70
|
+
constructor(collapsedIds) {
|
|
71
|
+
super();
|
|
72
|
+
this.collapsedIds = collapsedIds;
|
|
73
|
+
this._areas = [];
|
|
74
|
+
this._collapsed = new Set(collapsedIds);
|
|
75
|
+
}
|
|
76
|
+
onVisit(it) {
|
|
77
|
+
this._areas.push(it);
|
|
78
|
+
}
|
|
79
|
+
shouldVisitChildrenOf(it) {
|
|
80
|
+
return !this._collapsed.has(it);
|
|
81
|
+
}
|
|
82
|
+
get flattenedAreas() {
|
|
83
|
+
return this._areas;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
// class DecoratorCache {
|
|
87
|
+
//
|
|
88
|
+
// private map = new Map<number, T>();
|
|
89
|
+
//
|
|
90
|
+
// get(area:T): T {
|
|
91
|
+
//
|
|
92
|
+
// if (!area) return null;
|
|
93
|
+
//
|
|
94
|
+
// let decoratedArea = this.map.get(area.id);
|
|
95
|
+
// if (!decoratedArea) {
|
|
96
|
+
// decoratedArea = TreeModel.AreaDecorator.decorate(area);
|
|
97
|
+
// this.map.set(area.id, decoratedArea);
|
|
98
|
+
// }
|
|
99
|
+
// return decoratedArea;
|
|
100
|
+
// }
|
|
101
|
+
//
|
|
102
|
+
// clear() {
|
|
103
|
+
// this.map.clear();
|
|
104
|
+
// }
|
|
105
|
+
//
|
|
106
|
+
//
|
|
107
|
+
// }
|
|
108
|
+
//# sourceMappingURL=tree-table-model.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tree-table-model.js","sourceRoot":"","sources":["../../../../../../../libs/angular-ui-powerups/src/lib/components/tree-table/tree-table-model.ts"],"names":[],"mappings":"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","sourcesContent":["// import {T } from '@client/api/light-architect/model/area/area.class';\n// import { SelfAndDescendantsVisitor } from '@client/api/light-architect/model/area/visitable.class';\n// import { Zone } from '@client/api/light-architect/model/area/zone.class';\nimport { Dsl, GarbageCollector, ListModel, MutableValueModel, ValueModel } from '@coolon/pectin';\nimport { AbstractTableModel } from '../table/abstract-table-model';\nimport { DecoratedTreeNode } from './decorated-tree-node';\nimport { TreeExpansionModel } from './tree-expansion-model';\nimport { TreeLabelColumnModel } from './tree-label-column-model';\nimport { TreeNode } from './tree-node';\nimport { TreeToListModel } from './tree-to-list-model';\nimport { SelfAndDescendantsVisitor, VisitableTree } from './visitable.class';\n\n\n// TODO:\n// Selection Models:\n// - as simple navigation tree\n// - as editable grid (selecte all, even hidden etc?)\n// - fixing selection on underlying model changes.\n// - rendering selection: row highlighting, checkboxes (in the tree renderer or in separate column), both.\n// Expansion Models:\n// - Add ability to auto show to depth\n// - Add a predicate to check default expansion (i.e. has children of a certain type)\n//\nexport class TreeTableModel<Row extends TreeNode<Row>> extends AbstractTableModel<DecoratedTreeNode<Row>> {\n\n constructor(source: ListModel<DecoratedTreeNode<Row>>, readonly treeExpansionModel: TreeExpansionModel<DecoratedTreeNode<Row>>) {\n super(source);\n }\n\n static fromRoot<Row extends TreeNode<Row>>(sourceOfTruth: ValueModel<Row>, builder?: (tableModel: TreeTableModel<Row>) => void): TreeTableModel<Row> {\n const garbage = new GarbageCollector();\n const { chain, valueOf, before, when, after, observe, switchOn } = Dsl.disposeWith(garbage);\n const children = chain(sourceOfTruth).mapToList(root => [root]);\n const model = this.fromList(children, builder);\n model.registerDisposable(garbage);\n return model;\n }\n\n static fromChildrenOf<Row extends TreeNode<Row>>(sourceOfTruth: ValueModel<Row>, builder?: (tableModel: TreeTableModel<Row>) => void): TreeTableModel<Row> {\n const garbage = new GarbageCollector();\n const { chain, valueOf, before, when, after, observe, switchOn } = Dsl.disposeWith(garbage);\n const children = chain(sourceOfTruth).mapToList(root => root.children); // for some reason pluck list can't see 'children'\n const model = this.fromList(children, builder);\n model.registerDisposable(garbage);\n return model;\n }\n\n static fromList<Row extends TreeNode<Row>>(sourceOfTruth: ListModel<Row>, builder?: (tableModel: TreeTableModel<Row>) => void): TreeTableModel<Row> {\n const treeExpansionModel = new TreeExpansionModel<DecoratedTreeNode<Row>>(sourceOfTruth.identityOf);\n const nodes = new TreeToListModel(sourceOfTruth, treeExpansionModel);\n const model = new TreeTableModel<Row>(nodes, treeExpansionModel);\n model.registerDisposable(nodes);\n if (builder) builder(model);\n return model;\n }\n\n treeControlColumn(builder: (column: TreeLabelColumnModel<Row>) => void) {\n const columnId = 'tree-label';\n const column = new TreeLabelColumnModel<Row>(columnId, () => this.getColumnTextProperties(columnId), this.treeExpansionModel);\n builder(column);\n this.addColumn(column);\n }\n\n expand(node: DecoratedTreeNode<Row>) {\n this.treeExpansionModel.expand(node);\n }\n\n collapse(node: DecoratedTreeNode<Row>) {\n this.treeExpansionModel.expand(node);\n }\n\n isCollapsed(node: DecoratedTreeNode<Row>): boolean {\n return this.treeExpansionModel.isCollapsed(node);\n }\n\n ensureAncestorsAndSelfVisible(node: DecoratedTreeNode<Row>) {\n this.treeExpansionModel.ensureAncestorsAndSelfVisible(node);\n }\n\n\n // saveSelection() {\n // let ids: number[] = [];\n // const selectedArea = this._decoratedSelectionModel.leadSelection.value;\n // if (selectedArea) {\n // ids.push(selectedArea.id);\n // ids = ids.concat(selectedArea.siblingsAfter().map(a => a.id));\n // ids = ids.concat(selectedArea.siblingsBefore().reverse().map(a => a.id));\n // ids = ids.concat(selectedArea.ancestorsToZone().reverse().map(a => a.id));\n // }\n // this._storedSelection = ids;\n // }\n //\n //\n // restoreSelection() {\n // const all = this.rootNodeModel.value.selfAndDescendants();\n // for (let i = 0; i < this._storedSelection.length; i++) {\n // const id = this._storedSelection[i];\n // const found = all.find(area => area.id === id);\n // if (found) {\n // this.selectedAreaId.value = found.id;\n // break;\n // }\n // }\n // }\n //\n // collapseAll(areas: T[]) {\n // this.collapsedAreaIds.value = [].concat(this.collapsedAreaIds.value, areas.map(a => a.id));\n // }\n\n // disableSelection(disable: boolean = true) {\n // this._disableSelection.value = disable;\n // }\n\n\n}\n\n\n// /**\n// * 1. Make this a TreeModel<T extends AbstractTree>\n// * 2. Move the decorated items to the view (along with viewToModel and modelToView)\n// */\n// export class TreeTableModel<T, K extends keyof T> {\n//\n// // public readonly decoratedVisibleAreas: ListModel<T>;\n// //\n// // private decoratorCache = undefined; //new DecoratorCache();\n// // private collapsedAreaIds: MutableListModel<number> = new MutableListModel<number>();\n// //\n// // private _rawSelectionModel: SingleSelectionModel<T, T[K]>;\n// // private _decoratedSelectionModel: SingleSelectionModel<T, T[K]>;\n// //\n// // private readonly _disableSelection = new MutableValueModel<boolean>(false);\n// // private _hoveredAreaModel: MutableValueModel<T> = new MutableValueModel<T>();\n// //\n// // private _decoratedHoverModel: ValueModel<T> = new MutableValueModel<T>();\n// // private _storedSelection: number[] = [];\n// //\n// // readonly visibleNodes: ListModelChain<T>;\n// //\n// // protected constructor(readonly rootNodeModel: ValueModel<T>, identifiedBy: K, readonly selectedAreaId: MutableValueModel<K>) {\n// // super();\n// // const {chain, valueOf, before, when, after, observe, switchOn} = Dsl.disposeWith(this);\n// //\n// // this.visibleNodes = chain(this.rootNodeModel).mapToList(root => {\n// // return root.visit(new FlattenStrategy(this.collapsedAreaIds.value)).flattenedAreas;\n// // }, {dependsOn: this.collapsedAreaIds});\n// //\n// // this.decoratedVisibleAreas = this.visibleNodes.map(area => {\n// // return this.decoratorCache.get(area);\n// // });\n// //\n// // this._rawSelectionModel = this.registerDisposable(SingleSelectionModel.fromList(this.visibleNodes, identifiedBy, {\n// // storeIdIn: this.selectedAreaId,\n// // // toggleSelection: false\n// // }));\n// // this._rawSelectionModel.selectBehaviour.disableWhen(this._disableSelection);\n// // this._decoratedSelectionModel = this.registerDisposable(SingleSelectionModel.fromList(this.decoratedVisibleAreas, identifiedBy, {\n// // storeIdIn: this.selectedAreaId,\n// // toggleSelection: false\n// // }));\n// // this._decoratedSelectionModel.selectBehaviour.disableWhen(this._disableSelection);\n// //\n// // // our areas will be different objects so we have to save, restore the\n// // // selection and rebuild our decorators\n// // before(rootNodeModel).changes(() => this.saveSelection());\n// // before(rootNodeModel).changes(() => this.decoratorCache.clear());\n// // when(rootNodeModel).changes(() => this.restoreSelection(), {asLongAs: () => !!rootNodeModel.value});\n// //\n// //\n// // this.registerDisposable(new Binding(this._decoratedHoverModel, this._hoveredAreaModel, {\n// // toLeft: (area) => area ? this.modelToView(area) : null,\n// // toRight: (decoratedArea) => decoratedArea ? this.viewToModel(decoratedArea) : null\n// // }));\n// //\n// // when(this.decoratedSelectionModel.leadSelection)\n// // .changes(selection => this.ensureAncestorsAndSelfVisible(selection), {\n// // asLongAs: selection => !!selection\n// // });\n// // }\n// //\n// // static fromRoot<T, K extends keyof T>(rootNodeModel: ValueModel<T>, identifiedBy: K, options?: TreeModel.Options<T, K>) {\n// //\n// // }\n// //\n// // public viewToModel(decoratedArea: T): T {\n// // assert.notNil(decoratedArea);\n// // return TreeModel.AreaDecorator.undecorate(decoratedArea);\n// // }\n// //\n// // public modelToView(area: T): T {\n// // assert.notNil(area);\n// // return this.decoratorCache.get(area);\n// // }\n// //\n// // get hoveredAreaModel(): ValueModel<T> {\n// // return this._hoveredAreaModel;\n// // }\n// //\n// // clearHover() {\n// // this._hoveredAreaModel.value = null;\n// // }\n// //\n// // get selectionModel(): SelectionModel<T> {\n// // return this._rawSelectionModel;\n// // }\n// //\n// // get decoratedSelectionModel(): SelectionModel<T> {\n// // return this._decoratedSelectionModel;\n// // }\n// //\n// // get decoratedHoverModel(): ValueModel<T> {\n// // return this._decoratedHoverModel;\n// // }\n// //\n// // decoratedArea(area: T): T {\n// // return this.decoratorCache.get(area);\n// // }\n// //\n// // select(area: T) {\n// // this.selectedAreaId.value = area ? area.id : null;\n// // }\n// }\n\n\nexport namespace TreeTableModel {\n\n export interface Options<T, K extends keyof T> {\n storeIdIn: MutableValueModel<K>\n }\n\n // export interface DecoratedArea extendsTDecorator,T {\n // }\n //\n // export classTDecorator extends Decorator<T> {\n //\n // static decorate(area:T): DecoratedArea {\n // return Decorator.create(area, newTDecorator(area)) as DecoratedArea;\n // }\n //\n // pathToRoot() {\n // return this.object.ancestorsToZone().slice(1);\n // }\n //\n // isLastChild() {\n // return this.object.isLastChild();\n // }\n //\n // isRoot() {\n // return this.object.isZone();\n // }\n // }\n\n}\n\n\nexport class FlattenStrategy<T extends VisitableTree<any>> extends SelfAndDescendantsVisitor<T> {\n\n private _areas: T[] = [];\n private _collapsed: Set<T>;\n\n constructor(private collapsedIds: T[]) {\n super();\n this._collapsed = new Set<T>(collapsedIds);\n }\n\n protected onVisit(it: T) {\n this._areas.push(it);\n }\n\n protected shouldVisitChildrenOf(it: T): boolean {\n return !this._collapsed.has(it);\n }\n\n get flattenedAreas(): T[] {\n return this._areas;\n }\n\n}\n\n// class DecoratorCache {\n//\n// private map = new Map<number, T>();\n//\n// get(area:T): T {\n//\n// if (!area) return null;\n//\n// let decoratedArea = this.map.get(area.id);\n// if (!decoratedArea) {\n// decoratedArea = TreeModel.AreaDecorator.decorate(area);\n// this.map.set(area.id, decoratedArea);\n// }\n// return decoratedArea;\n// }\n//\n// clear() {\n// this.map.clear();\n// }\n//\n//\n// }\n\n\n\n\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
[{"__symbolic":"module","version":4,"metadata":{"TreeTableModel":{"__symbolic":"class","extends":{"__symbolic":"reference","module":"../table/abstract-table-model","name":"AbstractTableModel","line":23,"character":63},"arity":1,"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@coolon/pectin","name":"ListModel","line":25,"character":22,"arguments":[{"__symbolic":"reference","module":"./decorated-tree-node","name":"DecoratedTreeNode","line":25,"character":32,"arguments":[{"__symbolic":"error","message":"Could not resolve type","line":25,"character":123,"context":{"typeName":"Row"}}]}]},{"__symbolic":"reference","module":"./tree-expansion-model","name":"TreeExpansionModel","line":25,"character":86,"arguments":[{"__symbolic":"reference","module":"./decorated-tree-node","name":"DecoratedTreeNode","line":25,"character":32,"arguments":[{"__symbolic":"error","message":"Could not resolve type","line":25,"character":123,"context":{"typeName":"Row"}}]}]}]}],"treeControlColumn":[{"__symbolic":"method"}],"expand":[{"__symbolic":"method"}],"collapse":[{"__symbolic":"method"}],"isCollapsed":[{"__symbolic":"method"}],"ensureAncestorsAndSelfVisible":[{"__symbolic":"method"}]}},"FlattenStrategy":{"__symbolic":"class","extends":{"__symbolic":"reference","module":"./visitable.class","name":"SelfAndDescendantsVisitor","line":255,"character":67},"arity":1,"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"Array","arguments":[{"__symbolic":"error","message":"Could not resolve type","line":260,"character":36,"context":{"typeName":"T"}}]}]}],"onVisit":[{"__symbolic":"method"}],"shouldVisitChildrenOf":[{"__symbolic":"method"}]}}}}]
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tree-table.component.scss.ngstyle.js","sourceRoot":"","sources":["../../../../../../../libs/angular-ui-powerups/src/lib/components/tree-table/tree-table.component.scss.ngstyle.ts"],"names":[],"mappings":"","sourcesContent":["import * as i0 from '@angular/core';\ni0.ComponentFactory;\n"]}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { ComputedListModel } from '@coolon/pectin';
|
|
2
|
+
import { DecoratedTreeNode } from './decorated-tree-node';
|
|
3
|
+
export class TreeToListModel extends ComputedListModel {
|
|
4
|
+
constructor(source, expansionModel) {
|
|
5
|
+
super(source);
|
|
6
|
+
this.source = source;
|
|
7
|
+
this.expansionModel = expansionModel;
|
|
8
|
+
this.trackSource(this.expansionModel.isExpandedPredicate);
|
|
9
|
+
}
|
|
10
|
+
getIdentityOf(item) {
|
|
11
|
+
return this.source.identityOf(item.node);
|
|
12
|
+
}
|
|
13
|
+
compute(values) {
|
|
14
|
+
const result = [];
|
|
15
|
+
values.forEach(value => this.addNodeAndVisibleChildren(DecoratedTreeNode.createRoot(value), result));
|
|
16
|
+
return result;
|
|
17
|
+
}
|
|
18
|
+
addNodeAndVisibleChildren(node, result) {
|
|
19
|
+
result.push(node);
|
|
20
|
+
if (node.hasChildren() && !this.expansionModel.isCollapsed(node)) {
|
|
21
|
+
node.children.forEach(child => this.addNodeAndVisibleChildren(child, result));
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=tree-to-list-model.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tree-to-list-model.js","sourceRoot":"","sources":["../../../../../../../libs/angular-ui-powerups/src/lib/components/tree-table/tree-to-list-model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAA6D,MAAM,gBAAgB,CAAC;AAC9G,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAI1D,MAAM,OAAO,eAAuC,SAAQ,iBAA4C;IAEtG,YAA6B,MAAoB,EAAmB,cAAwD;QAC1H,KAAK,CAAC,MAAM,CAAC,CAAC;QADa,WAAM,GAAN,MAAM,CAAc;QAAmB,mBAAc,GAAd,cAAc,CAA0C;QAE1H,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC,mBAAmB,CAAC,CAAC;IAC5D,CAAC;IAED,aAAa,CAAC,IAA0B;QACtC,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3C,CAAC;IAED,OAAO,CAAC,MAAW;QACjB,MAAM,MAAM,GAA2B,EAAE,CAAC;QAC1C,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,yBAAyB,CAAC,iBAAiB,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;QACrG,OAAO,MAAM,CAAC;IAChB,CAAC;IAGO,yBAAyB,CAAC,IAA0B,EAAE,MAA8B;QAC1F,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClB,IAAI,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE;YAChE,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,yBAAyB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;SAC/E;IACH,CAAC;CAEF","sourcesContent":["import { ComputedListModel, Dsl, GarbageCollector, ListModel, MutableListModel, Trace } from '@coolon/pectin';\nimport { DecoratedTreeNode } from './decorated-tree-node';\nimport { TreeExpansionModel } from './tree-expansion-model';\nimport { TreeNode } from './tree-node';\n\nexport class TreeToListModel<T extends TreeNode<T>> extends ComputedListModel<DecoratedTreeNode<T>, T[]> {\n\n constructor(private readonly source: ListModel<T>, private readonly expansionModel: TreeExpansionModel<DecoratedTreeNode<T>>) {\n super(source);\n this.trackSource(this.expansionModel.isExpandedPredicate);\n }\n\n getIdentityOf(item: DecoratedTreeNode<T>): any {\n return this.source.identityOf(item.node);\n }\n\n compute(values: T[]): DecoratedTreeNode<T>[] {\n const result: DecoratedTreeNode<T>[] = [];\n values.forEach(value => this.addNodeAndVisibleChildren(DecoratedTreeNode.createRoot(value), result));\n return result;\n }\n\n\n private addNodeAndVisibleChildren(node: DecoratedTreeNode<T>, result: DecoratedTreeNode<T>[], ) {\n result.push(node);\n if (node.hasChildren() && !this.expansionModel.isCollapsed(node)) {\n node.children.forEach(child => this.addNodeAndVisibleChildren(child, result));\n }\n }\n\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
[{"__symbolic":"module","version":4,"metadata":{"TreeToListModel":{"__symbolic":"class","extends":{"__symbolic":"reference","module":"@coolon/pectin","name":"ComputedListModel","line":5,"character":60},"arity":1,"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@coolon/pectin","name":"ListModel","line":7,"character":39,"arguments":[{"__symbolic":"error","message":"Could not resolve type","line":7,"character":49,"context":{"typeName":"T"}}]},{"__symbolic":"reference","module":"./tree-expansion-model","name":"TreeExpansionModel","line":7,"character":86,"arguments":[{"__symbolic":"reference","module":"./decorated-tree-node","name":"DecoratedTreeNode","line":7,"character":105,"arguments":[{"__symbolic":"error","message":"Could not resolve type","line":7,"character":123,"context":{"typeName":"T"}}]}]}]}],"getIdentityOf":[{"__symbolic":"method"}],"compute":[{"__symbolic":"method"}],"addNodeAndVisibleChildren":[{"__symbolic":"method"}]}}}}]
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export class SelfAndDescendantsVisitor {
|
|
2
|
+
constructor() {
|
|
3
|
+
}
|
|
4
|
+
visit(it) {
|
|
5
|
+
this.onVisit(it);
|
|
6
|
+
if (this.shouldVisitChildrenOf(it)) {
|
|
7
|
+
it.visitChildren(this);
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
shouldVisitChildrenOf(it) {
|
|
11
|
+
return true;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
(function (SelfAndDescendantsVisitor) {
|
|
15
|
+
class Each extends SelfAndDescendantsVisitor {
|
|
16
|
+
constructor(callback) {
|
|
17
|
+
super();
|
|
18
|
+
this.callback = callback;
|
|
19
|
+
}
|
|
20
|
+
onVisit(it) {
|
|
21
|
+
this.callback(it);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
SelfAndDescendantsVisitor.Each = Each;
|
|
25
|
+
})(SelfAndDescendantsVisitor || (SelfAndDescendantsVisitor = {}));
|
|
26
|
+
//# sourceMappingURL=visitable.class.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"visitable.class.js","sourceRoot":"","sources":["../../../../../../../libs/angular-ui-powerups/src/lib/components/tree-table/visitable.class.ts"],"names":[],"mappings":"AAaA,MAAM,OAAgB,yBAAyB;IAE3C;IACA,CAAC;IAED,KAAK,CAAC,EAAK;QACP,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACjB,IAAI,IAAI,CAAC,qBAAqB,CAAC,EAAE,CAAC,EAAE;YAChC,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;SAC1B;IACL,CAAC;IAIS,qBAAqB,CAAC,EAAK;QACjC,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ;AAED,WAAiB,yBAAyB;IAEtC,MAAa,IAAmC,SAAQ,yBAA4B;QAChF,YAAoB,QAAyB;YACzC,KAAK,EAAE,CAAC;YADQ,aAAQ,GAAR,QAAQ,CAAiB;QAE7C,CAAC;QACS,OAAO,CAAC,EAAK;YACnB,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACtB,CAAC;KACJ;IAPY,8BAAI,OAOhB,CAAA;AACL,CAAC,EAVgB,yBAAyB,KAAzB,yBAAyB,QAUzC","sourcesContent":["export interface Visitor<T> {\n visit(it: T);\n}\n\nexport interface Visitable<T> {\n visit<V extends Visitor<T>>(it: V):V;\n}\n\nexport interface VisitableTree<T> extends Visitable<T> {\n visitChildren<V extends Visitor<T>>(it: V):V;\n}\n\n\nexport abstract class SelfAndDescendantsVisitor<T extends VisitableTree<T>> implements Visitor<T> {\n\n constructor() {\n }\n\n visit(it: T) {\n this.onVisit(it);\n if (this.shouldVisitChildrenOf(it)) {\n it.visitChildren(this);\n }\n }\n\n protected abstract onVisit(it: T);\n\n protected shouldVisitChildrenOf(it: T): boolean {\n return true;\n }\n}\n\nexport namespace SelfAndDescendantsVisitor {\n\n export class Each<T extends VisitableTree<any>> extends SelfAndDescendantsVisitor<T> {\n constructor(private callback: (it: T) => void) {\n super();\n }\n protected onVisit(it: T) {\n this.callback(it);\n }\n }\n}"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
[{"__symbolic":"module","version":4,"metadata":{"Visitor":{"__symbolic":"interface"},"Visitable":{"__symbolic":"interface"},"VisitableTree":{"__symbolic":"interface"},"SelfAndDescendantsVisitor":{"__symbolic":"class","arity":1,"members":{"__ctor__":[{"__symbolic":"constructor"}],"visit":[{"__symbolic":"method"}],"onVisit":[{"__symbolic":"method"}],"shouldVisitChildrenOf":[{"__symbolic":"method"}]}}}}]
|