ngssm-tree 15.2.12 → 15.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/actions/display-search-dialog.action.mjs +9 -0
- package/esm2020/lib/actions/expand-node.action.mjs +4 -5
- package/esm2020/lib/actions/index.mjs +6 -1
- package/esm2020/lib/actions/load-children-of-node.action.mjs +8 -0
- package/esm2020/lib/actions/ngssm-tree-action-type.mjs +7 -1
- package/esm2020/lib/actions/register-partial-search-results.action.mjs +9 -0
- package/esm2020/lib/actions/search-tree-nodes.action.mjs +8 -0
- package/esm2020/lib/actions/select-node.action.mjs +4 -5
- package/esm2020/lib/actions/tree-node-action.mjs +8 -0
- package/esm2020/lib/components/index.mjs +2 -1
- package/esm2020/lib/components/ngssm-breadcrumb/ngssm-breadcrumb.component.mjs +3 -3
- package/esm2020/lib/components/ngssm-tree/ngssm-tree.component.mjs +18 -8
- package/esm2020/lib/components/ngssm-tree-search-dialog/ngssm-tree-search-dialog.component.mjs +124 -0
- package/esm2020/lib/effects/tree-node-loading.effect.mjs +19 -15
- package/esm2020/lib/effects/tree-nodes-searching.effect.mjs +89 -0
- package/esm2020/lib/model/index.mjs +2 -1
- package/esm2020/lib/model/ngssm-tree-config.mjs +1 -1
- package/esm2020/lib/model/ngssm-tree-data-service.mjs +1 -1
- package/esm2020/lib/model/ngssm-tree-node.mjs +7 -2
- package/esm2020/lib/model/ngssm-tree.mjs +14 -2
- package/esm2020/lib/model/search-status.mjs +8 -0
- package/esm2020/lib/provide-ngssm-tree.mjs +6 -2
- package/esm2020/lib/reducers/tree-node-expand.reducer.mjs +31 -5
- package/esm2020/lib/reducers/tree-node-selection.reducer.mjs +3 -3
- package/esm2020/lib/reducers/tree-nodes-search.reducer.mjs +95 -0
- package/esm2020/lib/reducers/tree-nodes.reducer.mjs +8 -5
- package/esm2020/lib/reducers/trees.reducer.mjs +3 -3
- package/esm2020/lib/state/index.mjs +3 -1
- package/esm2020/lib/state/ngssm-tree.state.mjs +4 -2
- package/esm2020/lib/state/selectors.mjs +4 -0
- package/esm2020/lib/state/tree-nodes-search.mjs +7 -0
- package/fesm2015/ngssm-tree.mjs +601 -198
- package/fesm2015/ngssm-tree.mjs.map +1 -1
- package/fesm2020/ngssm-tree.mjs +588 -192
- package/fesm2020/ngssm-tree.mjs.map +1 -1
- package/lib/actions/display-search-dialog.action.d.ts +5 -0
- package/lib/actions/expand-node.action.d.ts +2 -3
- package/lib/actions/index.d.ts +5 -0
- package/lib/actions/load-children-of-node.action.d.ts +4 -0
- package/lib/actions/ngssm-tree-action-type.d.ts +7 -1
- package/lib/actions/register-partial-search-results.action.d.ts +8 -0
- package/lib/actions/search-tree-nodes.action.d.ts +6 -0
- package/lib/actions/select-node.action.d.ts +2 -3
- package/lib/actions/tree-node-action.d.ts +5 -0
- package/lib/components/index.d.ts +1 -0
- package/lib/components/ngssm-tree/ngssm-tree.component.d.ts +8 -2
- package/lib/components/ngssm-tree-search-dialog/ngssm-tree-search-dialog.component.d.ts +25 -0
- package/lib/effects/tree-nodes-searching.effect.d.ts +16 -0
- package/lib/model/index.d.ts +1 -0
- package/lib/model/ngssm-tree-config.d.ts +1 -0
- package/lib/model/ngssm-tree-data-service.d.ts +1 -0
- package/lib/model/ngssm-tree-node.d.ts +2 -0
- package/lib/model/ngssm-tree.d.ts +1 -0
- package/lib/model/search-status.d.ts +6 -0
- package/lib/reducers/tree-nodes-search.reducer.d.ts +10 -0
- package/lib/state/index.d.ts +2 -0
- package/lib/state/ngssm-tree.state.d.ts +2 -0
- package/lib/state/selectors.d.ts +4 -0
- package/lib/state/tree-nodes-search.d.ts +14 -0
- package/package.json +1 -1
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { NgssmTreeActionType } from './ngssm-tree-action-type';
|
|
2
|
+
import { TreeAction } from './tree-action';
|
|
3
|
+
export class DisplaySearchDialogAction extends TreeAction {
|
|
4
|
+
constructor(treeId, startNodeId) {
|
|
5
|
+
super(NgssmTreeActionType.displaySearchDialog, treeId);
|
|
6
|
+
this.startNodeId = startNodeId;
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlzcGxheS1zZWFyY2gtZGlhbG9nLmFjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nc3NtLXRyZWUvc3JjL2xpYi9hY3Rpb25zL2Rpc3BsYXktc2VhcmNoLWRpYWxvZy5hY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDL0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxNQUFNLE9BQU8seUJBQTBCLFNBQVEsVUFBVTtJQUN2RCxZQUFZLE1BQWMsRUFBa0IsV0FBbUI7UUFDN0QsS0FBSyxDQUFDLG1CQUFtQixDQUFDLG1CQUFtQixFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRGIsZ0JBQVcsR0FBWCxXQUFXLENBQVE7SUFFL0QsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdzc21UcmVlQWN0aW9uVHlwZSB9IGZyb20gJy4vbmdzc20tdHJlZS1hY3Rpb24tdHlwZSc7XG5pbXBvcnQgeyBUcmVlQWN0aW9uIH0gZnJvbSAnLi90cmVlLWFjdGlvbic7XG5cbmV4cG9ydCBjbGFzcyBEaXNwbGF5U2VhcmNoRGlhbG9nQWN0aW9uIGV4dGVuZHMgVHJlZUFjdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHRyZWVJZDogc3RyaW5nLCBwdWJsaWMgcmVhZG9ubHkgc3RhcnROb2RlSWQ6IHN0cmluZykge1xuICAgIHN1cGVyKE5nc3NtVHJlZUFjdGlvblR5cGUuZGlzcGxheVNlYXJjaERpYWxvZywgdHJlZUlkKTtcbiAgfVxufVxuIl19
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import { NgssmTreeActionType } from './ngssm-tree-action-type';
|
|
2
|
-
import {
|
|
3
|
-
export class ExpandNodeAction extends
|
|
2
|
+
import { TreeNodeAction } from './tree-node-action';
|
|
3
|
+
export class ExpandNodeAction extends TreeNodeAction {
|
|
4
4
|
constructor(treeId, nodeId) {
|
|
5
|
-
super(NgssmTreeActionType.expandNode, treeId);
|
|
6
|
-
this.nodeId = nodeId;
|
|
5
|
+
super(NgssmTreeActionType.expandNode, treeId, nodeId);
|
|
7
6
|
}
|
|
8
7
|
}
|
|
9
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwYW5kLW5vZGUuYWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmdzc20tdHJlZS9zcmMvbGliL2FjdGlvbnMvZXhwYW5kLW5vZGUuYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVwRCxNQUFNLE9BQU8sZ0JBQWlCLFNBQVEsY0FBYztJQUNsRCxZQUFZLE1BQWMsRUFBRSxNQUFjO1FBQ3hDLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3hELENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nc3NtVHJlZUFjdGlvblR5cGUgfSBmcm9tICcuL25nc3NtLXRyZWUtYWN0aW9uLXR5cGUnO1xuaW1wb3J0IHsgVHJlZU5vZGVBY3Rpb24gfSBmcm9tICcuL3RyZWUtbm9kZS1hY3Rpb24nO1xuXG5leHBvcnQgY2xhc3MgRXhwYW5kTm9kZUFjdGlvbiBleHRlbmRzIFRyZWVOb2RlQWN0aW9uIHtcbiAgY29uc3RydWN0b3IodHJlZUlkOiBzdHJpbmcsIG5vZGVJZDogc3RyaW5nKSB7XG4gICAgc3VwZXIoTmdzc21UcmVlQWN0aW9uVHlwZS5leHBhbmROb2RlLCB0cmVlSWQsIG5vZGVJZCk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -6,4 +6,9 @@ export * from './register-nodes.action';
|
|
|
6
6
|
export * from './collapse-node.action';
|
|
7
7
|
export * from './select-node.action';
|
|
8
8
|
export * from './delete-ngssm-tree.action';
|
|
9
|
-
|
|
9
|
+
export * from './display-search-dialog.action';
|
|
10
|
+
export * from './search-tree-nodes.action';
|
|
11
|
+
export * from './register-partial-search-results.action';
|
|
12
|
+
export * from './tree-node-action';
|
|
13
|
+
export * from './load-children-of-node.action';
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3NzbS10cmVlL3NyYy9saWIvYWN0aW9ucy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsMEJBQTBCLENBQUM7QUFDekMsY0FBYyxzQkFBc0IsQ0FBQztBQUNyQyxjQUFjLGVBQWUsQ0FBQztBQUM5QixjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYyxzQkFBc0IsQ0FBQztBQUNyQyxjQUFjLDRCQUE0QixDQUFDO0FBQzNDLGNBQWMsZ0NBQWdDLENBQUM7QUFDL0MsY0FBYyw0QkFBNEIsQ0FBQztBQUMzQyxjQUFjLDBDQUEwQyxDQUFDO0FBQ3pELGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsY0FBYyxnQ0FBZ0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vbmdzc20tdHJlZS1hY3Rpb24tdHlwZSc7XG5leHBvcnQgKiBmcm9tICcuL2luaXQtbmdzc20tdHJlZS5hY3Rpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9leHBhbmQtbm9kZS5hY3Rpb24nO1xuZXhwb3J0ICogZnJvbSAnLi90cmVlLWFjdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL3JlZ2lzdGVyLW5vZGVzLmFjdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL2NvbGxhcHNlLW5vZGUuYWN0aW9uJztcbmV4cG9ydCAqIGZyb20gJy4vc2VsZWN0LW5vZGUuYWN0aW9uJztcbmV4cG9ydCAqIGZyb20gJy4vZGVsZXRlLW5nc3NtLXRyZWUuYWN0aW9uJztcbmV4cG9ydCAqIGZyb20gJy4vZGlzcGxheS1zZWFyY2gtZGlhbG9nLmFjdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL3NlYXJjaC10cmVlLW5vZGVzLmFjdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL3JlZ2lzdGVyLXBhcnRpYWwtc2VhcmNoLXJlc3VsdHMuYWN0aW9uJztcbmV4cG9ydCAqIGZyb20gJy4vdHJlZS1ub2RlLWFjdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL2xvYWQtY2hpbGRyZW4tb2Ytbm9kZS5hY3Rpb24nO1xuIl19
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { NgssmTreeActionType } from './ngssm-tree-action-type';
|
|
2
|
+
import { TreeNodeAction } from './tree-node-action';
|
|
3
|
+
export class LoadChildrenOfNodeAction extends TreeNodeAction {
|
|
4
|
+
constructor(treeId, nodeId) {
|
|
5
|
+
super(NgssmTreeActionType.loadChildrenOfNode, treeId, nodeId);
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZC1jaGlsZHJlbi1vZi1ub2RlLmFjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nc3NtLXRyZWUvc3JjL2xpYi9hY3Rpb25zL2xvYWQtY2hpbGRyZW4tb2Ytbm9kZS5hY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDL0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRXBELE1BQU0sT0FBTyx3QkFBeUIsU0FBUSxjQUFjO0lBQzFELFlBQVksTUFBYyxFQUFFLE1BQWM7UUFDeEMsS0FBSyxDQUFDLG1CQUFtQixDQUFDLGtCQUFrQixFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNoRSxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ3NzbVRyZWVBY3Rpb25UeXBlIH0gZnJvbSAnLi9uZ3NzbS10cmVlLWFjdGlvbi10eXBlJztcbmltcG9ydCB7IFRyZWVOb2RlQWN0aW9uIH0gZnJvbSAnLi90cmVlLW5vZGUtYWN0aW9uJztcblxuZXhwb3J0IGNsYXNzIExvYWRDaGlsZHJlbk9mTm9kZUFjdGlvbiBleHRlbmRzIFRyZWVOb2RlQWN0aW9uIHtcbiAgY29uc3RydWN0b3IodHJlZUlkOiBzdHJpbmcsIG5vZGVJZDogc3RyaW5nKSB7XG4gICAgc3VwZXIoTmdzc21UcmVlQWN0aW9uVHlwZS5sb2FkQ2hpbGRyZW5PZk5vZGUsIHRyZWVJZCwgbm9kZUlkKTtcbiAgfVxufVxuIl19
|
|
@@ -6,5 +6,11 @@ export var NgssmTreeActionType;
|
|
|
6
6
|
NgssmTreeActionType["collapseNode"] = "[NgssmTreeActionType] collapseNode";
|
|
7
7
|
NgssmTreeActionType["registerNodes"] = "[NgssmTreeActionType] registerNodes";
|
|
8
8
|
NgssmTreeActionType["selectNode"] = "[NgssmTreeActionType] selectNode";
|
|
9
|
+
NgssmTreeActionType["loadChildrenOfNode"] = "[NgssmTreeActionType] loadChildrenOfNode";
|
|
10
|
+
NgssmTreeActionType["displaySearchDialog"] = "[NgssmTreeActionType] displaySearchDialog";
|
|
11
|
+
NgssmTreeActionType["closeSearchDialog"] = "[NgssmTreeActionType] closeSearchDialog";
|
|
12
|
+
NgssmTreeActionType["searchTreeNodes"] = "[NgssmTreeActionType] searchTreeNodes";
|
|
13
|
+
NgssmTreeActionType["registerPartialSearchResults"] = "[NgssmTreeActionType] registerPartialSearchResults";
|
|
14
|
+
NgssmTreeActionType["abortTreeNodesSearch"] = "[NgssmTreeActionType] abortTreeNodesSearch";
|
|
9
15
|
})(NgssmTreeActionType || (NgssmTreeActionType = {}));
|
|
10
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmdzc20tdHJlZS1hY3Rpb24tdHlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nc3NtLXRyZWUvc3JjL2xpYi9hY3Rpb25zL25nc3NtLXRyZWUtYWN0aW9uLXR5cGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFOLElBQVksbUJBYVg7QUFiRCxXQUFZLG1CQUFtQjtJQUM3Qiw0RUFBcUQsQ0FBQTtJQUNyRCxnRkFBeUQsQ0FBQTtJQUN6RCxzRUFBK0MsQ0FBQTtJQUMvQywwRUFBbUQsQ0FBQTtJQUNuRCw0RUFBcUQsQ0FBQTtJQUNyRCxzRUFBK0MsQ0FBQTtJQUMvQyxzRkFBK0QsQ0FBQTtJQUMvRCx3RkFBaUUsQ0FBQTtJQUNqRSxvRkFBNkQsQ0FBQTtJQUM3RCxnRkFBeUQsQ0FBQTtJQUN6RCwwR0FBbUYsQ0FBQTtJQUNuRiwwRkFBbUUsQ0FBQTtBQUNyRSxDQUFDLEVBYlcsbUJBQW1CLEtBQW5CLG1CQUFtQixRQWE5QiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBlbnVtIE5nc3NtVHJlZUFjdGlvblR5cGUge1xuICBpbml0Tmdzc21UcmVlID0gJ1tOZ3NzbVRyZWVBY3Rpb25UeXBlXSBpbml0Tmdzc21UcmVlJyxcbiAgZGVsZXRlTmdzc21UcmVlID0gJ1tOZ3NzbVRyZWVBY3Rpb25UeXBlXSBkZWxldGVOZ3NzbVRyZWUnLFxuICBleHBhbmROb2RlID0gJ1tOZ3NzbVRyZWVBY3Rpb25UeXBlXSBleHBhbmROb2RlJyxcbiAgY29sbGFwc2VOb2RlID0gJ1tOZ3NzbVRyZWVBY3Rpb25UeXBlXSBjb2xsYXBzZU5vZGUnLFxuICByZWdpc3Rlck5vZGVzID0gJ1tOZ3NzbVRyZWVBY3Rpb25UeXBlXSByZWdpc3Rlck5vZGVzJyxcbiAgc2VsZWN0Tm9kZSA9ICdbTmdzc21UcmVlQWN0aW9uVHlwZV0gc2VsZWN0Tm9kZScsXG4gIGxvYWRDaGlsZHJlbk9mTm9kZSA9ICdbTmdzc21UcmVlQWN0aW9uVHlwZV0gbG9hZENoaWxkcmVuT2ZOb2RlJyxcbiAgZGlzcGxheVNlYXJjaERpYWxvZyA9ICdbTmdzc21UcmVlQWN0aW9uVHlwZV0gZGlzcGxheVNlYXJjaERpYWxvZycsXG4gIGNsb3NlU2VhcmNoRGlhbG9nID0gJ1tOZ3NzbVRyZWVBY3Rpb25UeXBlXSBjbG9zZVNlYXJjaERpYWxvZycsXG4gIHNlYXJjaFRyZWVOb2RlcyA9ICdbTmdzc21UcmVlQWN0aW9uVHlwZV0gc2VhcmNoVHJlZU5vZGVzJyxcbiAgcmVnaXN0ZXJQYXJ0aWFsU2VhcmNoUmVzdWx0cyA9ICdbTmdzc21UcmVlQWN0aW9uVHlwZV0gcmVnaXN0ZXJQYXJ0aWFsU2VhcmNoUmVzdWx0cycsXG4gIGFib3J0VHJlZU5vZGVzU2VhcmNoID0gJ1tOZ3NzbVRyZWVBY3Rpb25UeXBlXSBhYm9ydFRyZWVOb2Rlc1NlYXJjaCdcbn1cbiJdfQ==
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { NgssmTreeActionType } from './ngssm-tree-action-type';
|
|
2
|
+
export class RegisterPartialSearchResultsAction {
|
|
3
|
+
constructor(matchingNodes, nodesToProcess) {
|
|
4
|
+
this.matchingNodes = matchingNodes;
|
|
5
|
+
this.nodesToProcess = nodesToProcess;
|
|
6
|
+
this.type = NgssmTreeActionType.registerPartialSearchResults;
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0ZXItcGFydGlhbC1zZWFyY2gtcmVzdWx0cy5hY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3NzbS10cmVlL3NyYy9saWIvYWN0aW9ucy9yZWdpc3Rlci1wYXJ0aWFsLXNlYXJjaC1yZXN1bHRzLmFjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUUvRCxNQUFNLE9BQU8sa0NBQWtDO0lBRzdDLFlBQTRCLGFBQThCLEVBQVMsY0FBK0I7UUFBdEUsa0JBQWEsR0FBYixhQUFhLENBQWlCO1FBQVMsbUJBQWMsR0FBZCxjQUFjLENBQWlCO1FBRmxGLFNBQUksR0FBVyxtQkFBbUIsQ0FBQyw0QkFBNEIsQ0FBQztJQUVxQixDQUFDO0NBQ3ZHIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWN0aW9uIH0gZnJvbSAnbmdzc20tc3RvcmUnO1xuXG5pbXBvcnQgeyBOZ3NzbVRyZWVOb2RlIH0gZnJvbSAnLi4vbW9kZWwnO1xuaW1wb3J0IHsgTmdzc21UcmVlQWN0aW9uVHlwZSB9IGZyb20gJy4vbmdzc20tdHJlZS1hY3Rpb24tdHlwZSc7XG5cbmV4cG9ydCBjbGFzcyBSZWdpc3RlclBhcnRpYWxTZWFyY2hSZXN1bHRzQWN0aW9uIGltcGxlbWVudHMgQWN0aW9uIHtcbiAgcHVibGljIHJlYWRvbmx5IHR5cGU6IHN0cmluZyA9IE5nc3NtVHJlZUFjdGlvblR5cGUucmVnaXN0ZXJQYXJ0aWFsU2VhcmNoUmVzdWx0cztcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgcmVhZG9ubHkgbWF0Y2hpbmdOb2RlczogTmdzc21UcmVlTm9kZVtdLCBwdWJsaWMgbm9kZXNUb1Byb2Nlc3M6IE5nc3NtVHJlZU5vZGVbXSkge31cbn1cbiJdfQ==
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { NgssmTreeActionType } from './ngssm-tree-action-type';
|
|
2
|
+
export class SearchTreeNodesAction {
|
|
3
|
+
constructor(searchPattern) {
|
|
4
|
+
this.searchPattern = searchPattern;
|
|
5
|
+
this.type = NgssmTreeActionType.searchTreeNodes;
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLXRyZWUtbm9kZXMuYWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmdzc20tdHJlZS9zcmMvbGliL2FjdGlvbnMvc2VhcmNoLXRyZWUtbm9kZXMuYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRS9ELE1BQU0sT0FBTyxxQkFBcUI7SUFHaEMsWUFBNEIsYUFBcUI7UUFBckIsa0JBQWEsR0FBYixhQUFhLENBQVE7UUFGakMsU0FBSSxHQUFXLG1CQUFtQixDQUFDLGVBQWUsQ0FBQztJQUVmLENBQUM7Q0FDdEQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBY3Rpb24gfSBmcm9tICduZ3NzbS1zdG9yZSc7XG5pbXBvcnQgeyBOZ3NzbVRyZWVBY3Rpb25UeXBlIH0gZnJvbSAnLi9uZ3NzbS10cmVlLWFjdGlvbi10eXBlJztcblxuZXhwb3J0IGNsYXNzIFNlYXJjaFRyZWVOb2Rlc0FjdGlvbiBpbXBsZW1lbnRzIEFjdGlvbiB7XG4gIHB1YmxpYyByZWFkb25seSB0eXBlOiBzdHJpbmcgPSBOZ3NzbVRyZWVBY3Rpb25UeXBlLnNlYXJjaFRyZWVOb2RlcztcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgcmVhZG9ubHkgc2VhcmNoUGF0dGVybjogc3RyaW5nKSB7fVxufVxuIl19
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import { NgssmTreeActionType } from './ngssm-tree-action-type';
|
|
2
|
-
import {
|
|
3
|
-
export class SelectNodeAction extends
|
|
2
|
+
import { TreeNodeAction } from './tree-node-action';
|
|
3
|
+
export class SelectNodeAction extends TreeNodeAction {
|
|
4
4
|
constructor(treeId, nodeId) {
|
|
5
|
-
super(NgssmTreeActionType.selectNode, treeId);
|
|
6
|
-
this.nodeId = nodeId;
|
|
5
|
+
super(NgssmTreeActionType.selectNode, treeId, nodeId);
|
|
7
6
|
}
|
|
8
7
|
}
|
|
9
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LW5vZGUuYWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmdzc20tdHJlZS9zcmMvbGliL2FjdGlvbnMvc2VsZWN0LW5vZGUuYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVwRCxNQUFNLE9BQU8sZ0JBQWlCLFNBQVEsY0FBYztJQUNsRCxZQUFZLE1BQWMsRUFBRSxNQUFjO1FBQ3hDLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3hELENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nc3NtVHJlZUFjdGlvblR5cGUgfSBmcm9tICcuL25nc3NtLXRyZWUtYWN0aW9uLXR5cGUnO1xuaW1wb3J0IHsgVHJlZU5vZGVBY3Rpb24gfSBmcm9tICcuL3RyZWUtbm9kZS1hY3Rpb24nO1xuXG5leHBvcnQgY2xhc3MgU2VsZWN0Tm9kZUFjdGlvbiBleHRlbmRzIFRyZWVOb2RlQWN0aW9uIHtcbiAgY29uc3RydWN0b3IodHJlZUlkOiBzdHJpbmcsIG5vZGVJZDogc3RyaW5nKSB7XG4gICAgc3VwZXIoTmdzc21UcmVlQWN0aW9uVHlwZS5zZWxlY3ROb2RlLCB0cmVlSWQsIG5vZGVJZCk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { TreeAction } from './tree-action';
|
|
2
|
+
export class TreeNodeAction extends TreeAction {
|
|
3
|
+
constructor(actionType, treeId, nodeId) {
|
|
4
|
+
super(actionType, treeId);
|
|
5
|
+
this.nodeId = nodeId;
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS1ub2RlLWFjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nc3NtLXRyZWUvc3JjL2xpYi9hY3Rpb25zL3RyZWUtbm9kZS1hY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxNQUFNLE9BQU8sY0FBZSxTQUFRLFVBQVU7SUFDNUMsWUFBWSxVQUFrQixFQUFFLE1BQWMsRUFBa0IsTUFBYztRQUM1RSxLQUFLLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRG9DLFdBQU0sR0FBTixNQUFNLENBQVE7SUFFOUUsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVHJlZUFjdGlvbiB9IGZyb20gJy4vdHJlZS1hY3Rpb24nO1xuXG5leHBvcnQgY2xhc3MgVHJlZU5vZGVBY3Rpb24gZXh0ZW5kcyBUcmVlQWN0aW9uIHtcbiAgY29uc3RydWN0b3IoYWN0aW9uVHlwZTogc3RyaW5nLCB0cmVlSWQ6IHN0cmluZywgcHVibGljIHJlYWRvbmx5IG5vZGVJZDogc3RyaW5nKSB7XG4gICAgc3VwZXIoYWN0aW9uVHlwZSwgdHJlZUlkKTtcbiAgfVxufVxuIl19
|
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
export * from './ngssm-tree/ngssm-tree.component';
|
|
2
2
|
export * from './ngssm-breadcrumb/ngssm-breadcrumb.component';
|
|
3
|
-
|
|
3
|
+
export * from './ngssm-tree-search-dialog/ngssm-tree-search-dialog.component';
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3NzbS10cmVlL3NyYy9saWIvY29tcG9uZW50cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLG1DQUFtQyxDQUFDO0FBQ2xELGNBQWMsK0NBQStDLENBQUM7QUFDOUQsY0FBYywrREFBK0QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vbmdzc20tdHJlZS9uZ3NzbS10cmVlLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL25nc3NtLWJyZWFkY3J1bWIvbmdzc20tYnJlYWRjcnVtYi5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9uZ3NzbS10cmVlLXNlYXJjaC1kaWFsb2cvbmdzc20tdHJlZS1zZWFyY2gtZGlhbG9nLmNvbXBvbmVudCc7XG4iXX0=
|
|
@@ -52,9 +52,9 @@ export class NgssmBreadcrumbComponent extends NgSsmComponent {
|
|
|
52
52
|
}
|
|
53
53
|
}
|
|
54
54
|
}
|
|
55
|
-
NgssmBreadcrumbComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.
|
|
56
|
-
NgssmBreadcrumbComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.
|
|
57
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.
|
|
55
|
+
NgssmBreadcrumbComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.0", ngImport: i0, type: NgssmBreadcrumbComponent, deps: [{ token: i1.Store }], target: i0.ɵɵFactoryTarget.Component });
|
|
56
|
+
NgssmBreadcrumbComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.0", type: NgssmBreadcrumbComponent, isStandalone: true, selector: "ngssm-breadcrumb", inputs: { treeId: "treeId" }, usesInheritance: true, ngImport: i0, template: "<div class=\"flex-row-center\">\n <mat-icon class=\"fa-solid fa-folder-tree\" color=\"primary\"></mat-icon>\n <span *ngFor=\"let node of nodes$ | async; last as last\" class=\"flex-row-center\">\n\n <button mat-button [disabled]=\"last\" (click)=\"selectNode(node)\">\n {{node.label}}\n </button>\n\n <div class=\"ngssm-breadcrumb-separator\" *ngIf=\"!last\">/</div>\n </span>\n</div>", styles: [".ngssm-breadcrumb-separator{font-weight:700}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
57
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.0", ngImport: i0, type: NgssmBreadcrumbComponent, decorators: [{
|
|
58
58
|
type: Component,
|
|
59
59
|
args: [{ selector: 'ngssm-breadcrumb', standalone: true, imports: [CommonModule, MatIconModule, MatButtonModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"flex-row-center\">\n <mat-icon class=\"fa-solid fa-folder-tree\" color=\"primary\"></mat-icon>\n <span *ngFor=\"let node of nodes$ | async; last as last\" class=\"flex-row-center\">\n\n <button mat-button [disabled]=\"last\" (click)=\"selectNode(node)\">\n {{node.label}}\n </button>\n\n <div class=\"ngssm-breadcrumb-separator\" *ngIf=\"!last\">/</div>\n </span>\n</div>", styles: [".ngssm-breadcrumb-separator{font-weight:700}\n"] }]
|
|
60
60
|
}], ctorParameters: function () { return [{ type: i1.Store }]; }, propDecorators: { treeId: [{
|
|
@@ -8,7 +8,7 @@ import { BehaviorSubject } from 'rxjs';
|
|
|
8
8
|
import { NgSsmComponent } from 'ngssm-store';
|
|
9
9
|
import { DataStatus } from 'ngssm-remote-data';
|
|
10
10
|
import { selectNgssmTreeState } from '../../state';
|
|
11
|
-
import { CollapseNodeAction, ExpandNodeAction, SelectNodeAction } from '../../actions';
|
|
11
|
+
import { CollapseNodeAction, DisplaySearchDialogAction, ExpandNodeAction, SelectNodeAction } from '../../actions';
|
|
12
12
|
import * as i0 from "@angular/core";
|
|
13
13
|
import * as i1 from "ngssm-store";
|
|
14
14
|
import * as i2 from "@angular/common";
|
|
@@ -36,6 +36,7 @@ export class NgssmTreeComponent extends NgSsmComponent {
|
|
|
36
36
|
}
|
|
37
37
|
const alwaysTrue = (_) => true;
|
|
38
38
|
const filter = config.filter ?? alwaysTrue;
|
|
39
|
+
const canSearch = config.canSearch ?? alwaysTrue;
|
|
39
40
|
const items = [];
|
|
40
41
|
let hiddenLevel = -1;
|
|
41
42
|
const nodesToFindSelected = new Map();
|
|
@@ -45,7 +46,10 @@ export class NgssmTreeComponent extends NgSsmComponent {
|
|
|
45
46
|
}
|
|
46
47
|
if (hiddenLevel === -1 || t.level <= hiddenLevel) {
|
|
47
48
|
if (filter(t.node)) {
|
|
48
|
-
items.push(
|
|
49
|
+
items.push({
|
|
50
|
+
node: t,
|
|
51
|
+
canSearch: canSearch(t.node)
|
|
52
|
+
});
|
|
49
53
|
nodesToFindSelected.set(t.node.nodeId, { isDisplayed: true, node: t });
|
|
50
54
|
}
|
|
51
55
|
}
|
|
@@ -86,7 +90,7 @@ export class NgssmTreeComponent extends NgSsmComponent {
|
|
|
86
90
|
return this._selectedNodeId$.asObservable();
|
|
87
91
|
}
|
|
88
92
|
getItemId(_, node) {
|
|
89
|
-
return node.node.nodeId;
|
|
93
|
+
return node.node.node.nodeId;
|
|
90
94
|
}
|
|
91
95
|
expand(node) {
|
|
92
96
|
const treeId = this._treeConfig$.getValue()?.treeId;
|
|
@@ -106,13 +110,19 @@ export class NgssmTreeComponent extends NgSsmComponent {
|
|
|
106
110
|
this.dispatchAction(new SelectNodeAction(treeId, node.node.nodeId));
|
|
107
111
|
}
|
|
108
112
|
}
|
|
113
|
+
displaySearchDialog(node) {
|
|
114
|
+
const treeId = this._treeConfig$.getValue()?.treeId;
|
|
115
|
+
if (treeId) {
|
|
116
|
+
this.dispatchAction(new DisplaySearchDialogAction(treeId, node.node.nodeId));
|
|
117
|
+
}
|
|
118
|
+
}
|
|
109
119
|
}
|
|
110
|
-
NgssmTreeComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.
|
|
111
|
-
NgssmTreeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.
|
|
112
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.
|
|
120
|
+
NgssmTreeComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.0", ngImport: i0, type: NgssmTreeComponent, deps: [{ token: i1.Store }], target: i0.ɵɵFactoryTarget.Component });
|
|
121
|
+
NgssmTreeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.0", type: NgssmTreeComponent, isStandalone: true, selector: "ngssm-tree", inputs: { treeConfig: "treeConfig" }, usesInheritance: true, ngImport: i0, template: "<mat-card class=\"flex-column-stretch fxFlex\">\n <mat-card-content class=\"flex-column-stretch fxFlex\" *ngIf=\"(treeConfig$ | async) as treeConfig\">\n <cdk-virtual-scroll-viewport itemSize=\"30\" class=\"fxFlex\">\n <div *cdkVirtualFor=\"let item of displayedItems$ | async; trackBy: getItemId\" class=\"ngssm-tree-node\"\n [style.padding-left.px]=\"item.node.level * 20\" (click)=\"selectNode(item.node)\"\n [ngClass]=\"{'selected' : (selectedNodeId$ | async) === item.node.node.nodeId}\">\n <mat-icon class=\"fa-solid fa-chevron-right\"\n *ngIf=\"item.node.node.isExpandable && item.node.isExpanded === false && item.node.status !== dataStatus.loading\"\n (click)=\"$event.stopPropagation();expand(item.node);\"></mat-icon>\n <mat-icon class=\"fa-solid fa-chevron-down\"\n *ngIf=\"item.node.node.isExpandable && item.node.isExpanded && item.node.status !== dataStatus.loading\"\n (click)=\"$event.stopPropagation();collapse(item.node)\"></mat-icon>\n <mat-spinner diameter=\"20\"\n *ngIf=\"item.node.node.isExpandable && item.node.status === dataStatus.loading\"></mat-spinner>\n <span *ngIf=\"!item.node.node.isExpandable\" class=\"not-expandable-padding\"></span>\n\n <mat-icon class=\"{{treeConfig.iconClasses[item.node.node.type]}}\" color=\"primary\"></mat-icon>\n\n <span class=\"ngssm-tree-node-label\">\n {{item.node.node.label}}\n </span>\n <span class=\"fxFlex\"></span>\n <i class=\"fa-solid fa-magnifying-glass search-icon\" *ngIf=\"item.canSearch\"\n (click)=\"$event.stopPropagation();displaySearchDialog(item.node)\">\n </i>\n </div>\n </cdk-virtual-scroll-viewport>\n </mat-card-content>\n</mat-card>", styles: [":host{display:flex;flex-direction:column}:host .ngssm-tree-node{height:30px;display:flex;flex-direction:row;align-items:center;padding-right:12px}:host .ngssm-tree-node .fa-folder{margin-right:4px}:host .ngssm-tree-node .fa-chevron-right:hover{cursor:pointer}:host .ngssm-tree-node.selected{background-color:#e4e6f1}:host .ngssm-tree-node:hover{cursor:pointer}:host .ngssm-tree-node:hover .search-icon{display:unset}:host .ngssm-tree-node:hover:not(.selected){background-color:#f3f3f3}:host .not-expandable-padding{width:24px}:host .search-icon{font-size:12px;display:none}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "ngmodule", type: ScrollingModule }, { kind: "directive", type: i3.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i3.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: i3.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "ngmodule", type: MatCardModule }, { kind: "component", type: i4.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i4.MatCardContent, selector: "mat-card-content" }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i6.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
122
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.0", ngImport: i0, type: NgssmTreeComponent, decorators: [{
|
|
113
123
|
type: Component,
|
|
114
|
-
args: [{ selector: 'ngssm-tree', standalone: true, imports: [CommonModule, ScrollingModule, MatCardModule, MatIconModule, MatProgressSpinnerModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "<mat-card class=\"flex-column-stretch fxFlex\">\n <mat-card-content class=\"flex-column-stretch fxFlex\" *ngIf=\"(treeConfig$ | async) as treeConfig\">\n <cdk-virtual-scroll-viewport itemSize=\"30\" class=\"fxFlex\">\n <div *cdkVirtualFor=\"let item of displayedItems$ | async; trackBy: getItemId\" class=\"ngssm-tree-node\"\n [style.padding-left.px]=\"item.level * 20\" (click)=\"selectNode(item)\"\n [ngClass]=\"{'selected' : (selectedNodeId$ | async) === item.node.nodeId}\">\n <mat-icon class=\"fa-solid fa-chevron-right\"
|
|
124
|
+
args: [{ selector: 'ngssm-tree', standalone: true, imports: [CommonModule, ScrollingModule, MatCardModule, MatIconModule, MatProgressSpinnerModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "<mat-card class=\"flex-column-stretch fxFlex\">\n <mat-card-content class=\"flex-column-stretch fxFlex\" *ngIf=\"(treeConfig$ | async) as treeConfig\">\n <cdk-virtual-scroll-viewport itemSize=\"30\" class=\"fxFlex\">\n <div *cdkVirtualFor=\"let item of displayedItems$ | async; trackBy: getItemId\" class=\"ngssm-tree-node\"\n [style.padding-left.px]=\"item.node.level * 20\" (click)=\"selectNode(item.node)\"\n [ngClass]=\"{'selected' : (selectedNodeId$ | async) === item.node.node.nodeId}\">\n <mat-icon class=\"fa-solid fa-chevron-right\"\n *ngIf=\"item.node.node.isExpandable && item.node.isExpanded === false && item.node.status !== dataStatus.loading\"\n (click)=\"$event.stopPropagation();expand(item.node);\"></mat-icon>\n <mat-icon class=\"fa-solid fa-chevron-down\"\n *ngIf=\"item.node.node.isExpandable && item.node.isExpanded && item.node.status !== dataStatus.loading\"\n (click)=\"$event.stopPropagation();collapse(item.node)\"></mat-icon>\n <mat-spinner diameter=\"20\"\n *ngIf=\"item.node.node.isExpandable && item.node.status === dataStatus.loading\"></mat-spinner>\n <span *ngIf=\"!item.node.node.isExpandable\" class=\"not-expandable-padding\"></span>\n\n <mat-icon class=\"{{treeConfig.iconClasses[item.node.node.type]}}\" color=\"primary\"></mat-icon>\n\n <span class=\"ngssm-tree-node-label\">\n {{item.node.node.label}}\n </span>\n <span class=\"fxFlex\"></span>\n <i class=\"fa-solid fa-magnifying-glass search-icon\" *ngIf=\"item.canSearch\"\n (click)=\"$event.stopPropagation();displaySearchDialog(item.node)\">\n </i>\n </div>\n </cdk-virtual-scroll-viewport>\n </mat-card-content>\n</mat-card>", styles: [":host{display:flex;flex-direction:column}:host .ngssm-tree-node{height:30px;display:flex;flex-direction:row;align-items:center;padding-right:12px}:host .ngssm-tree-node .fa-folder{margin-right:4px}:host .ngssm-tree-node .fa-chevron-right:hover{cursor:pointer}:host .ngssm-tree-node.selected{background-color:#e4e6f1}:host .ngssm-tree-node:hover{cursor:pointer}:host .ngssm-tree-node:hover .search-icon{display:unset}:host .ngssm-tree-node:hover:not(.selected){background-color:#f3f3f3}:host .not-expandable-padding{width:24px}:host .search-icon{font-size:12px;display:none}\n"] }]
|
|
115
125
|
}], ctorParameters: function () { return [{ type: i1.Store }]; }, propDecorators: { treeConfig: [{
|
|
116
126
|
type: Input
|
|
117
127
|
}] } });
|
|
118
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmdzc20tdHJlZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3NzbS10cmVlL3NyYy9saWIvY29tcG9uZW50cy9uZ3NzbS10cmVlL25nc3NtLXRyZWUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmdzc20tdHJlZS9zcmMvbGliL2NvbXBvbmVudHMvbmdzc20tdHJlZS9uZ3NzbS10cmVlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsdUJBQXVCLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDekQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM5RSxPQUFPLEVBQUUsZUFBZSxFQUE0QixNQUFNLE1BQU0sQ0FBQztBQUVqRSxPQUFPLEVBQUUsY0FBYyxFQUFTLE1BQU0sYUFBYSxDQUFDO0FBQ3BELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUcvQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDbkQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sZUFBZSxDQUFDOzs7Ozs7OztBQVV2RixNQUFNLE9BQU8sa0JBQW1CLFNBQVEsY0FBYztJQVNwRCxZQUFZLEtBQVk7UUFDdEIsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBVEUsaUJBQVks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LElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1NBQ3JFO0lBQ0gsQ0FBQztJQUVNLFFBQVEsQ0FBQyxJQUFtQjtRQUNqQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxFQUFFLE1BQU0sQ0FBQztRQUNwRCxJQUFJLE1BQU0sRUFBRTtZQUNWLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1NBQ3ZFO0lBQ0gsQ0FBQztJQUVNLFVBQVUsQ0FBQyxJQUFtQjtRQUNuQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxFQUFFLE1BQU0sQ0FBQztRQUNwRCxJQUFJLE1BQU0sRUFBRTtZQUNWLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1NBQ3JFO0lBQ0gsQ0FBQzs7K0dBNUdVLGtCQUFrQjttR0FBbEIsa0JBQWtCLG1JQ3ZCL0IsZ2tEQXNCVyw4ZkRKQyxZQUFZLHFSQUFFLGVBQWUsMmpCQUFFLGFBQWEsME5BQUUsYUFBYSxtTEFBRSx3QkFBd0I7MkZBS3BGLGtCQUFrQjtrQkFSOUIsU0FBUzsrQkFDRSxZQUFZLGNBQ1YsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLHdCQUF3QixDQUFDLG1CQUcvRSx1QkFBdUIsQ0FBQyxNQUFNOzRGQWVsQyxVQUFVO3NCQUF0QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBTY3JvbGxpbmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jZGsvc2Nyb2xsaW5nJztcbmltcG9ydCB7IE1hdENhcmRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jYXJkJztcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcbmltcG9ydCB7IE1hdFByb2dyZXNzU3Bpbm5lck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Byb2dyZXNzLXNwaW5uZXInO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgTmdTc21Db21wb25lbnQsIFN0b3JlIH0gZnJvbSAnbmdzc20tc3RvcmUnO1xuaW1wb3J0IHsgRGF0YVN0YXR1cyB9IGZyb20gJ25nc3NtLXJlbW90ZS1kYXRhJztcblxuaW1wb3J0IHsgTmdzc21UcmVlLCBOZ3NzbVRyZWVDb25maWcsIE5nc3NtVHJlZU5vZGUsIE5vZGVEYXRhIH0gZnJvbSAnLi4vLi4vbW9kZWwnO1xuaW1wb3J0IHsgc2VsZWN0Tmdzc21UcmVlU3RhdGUgfSBmcm9tICcuLi8uLi9zdGF0ZSc7XG5pbXBvcnQgeyBDb2xsYXBzZU5vZGVBY3Rpb24sIEV4cGFuZE5vZGVBY3Rpb24sIFNlbGVjdE5vZGVBY3Rpb24gfSBmcm9tICcuLi8uLi9hY3Rpb25zJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbmdzc20tdHJlZScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIFNjcm9sbGluZ01vZHVsZSwgTWF0Q2FyZE1vZHVsZSwgTWF0SWNvbk1vZHVsZSwgTWF0UHJvZ3Jlc3NTcGlubmVyTW9kdWxlXSxcbiAgdGVtcGxhdGVVcmw6ICcuL25nc3NtLXRyZWUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9uZ3NzbS10cmVlLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIE5nc3NtVHJlZUNvbXBvbmVudCBleHRlbmRzIE5nU3NtQ29tcG9uZW50IHtcbiAgcHJpdmF0ZSByZWFkb25seSBfdHJlZUNvbmZpZyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE5nc3NtVHJlZUNvbmZpZyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGlzcGxheWVkSXRlbXMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxOZ3NzbVRyZWVOb2RlW10+KFtdKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfc2VsZWN0ZWROb2RlSWQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG5cbiAgcHJpdmF0ZSB0cmVlU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCB1bmRlZmluZWQ7XG5cbiAgcHVibGljIHJlYWRvbmx5IGRhdGFTdGF0dXMgPSBEYXRhU3RhdHVzO1xuXG4gIGNvbnN0cnVjdG9yKHN0b3JlOiBTdG9yZSkge1xuICAgIHN1cGVyKHN0b3JlKTtcbiAgfVxuXG4gIEBJbnB1dCgpIHNldCB0cmVlQ29uZmlnKHZhbHVlOiBOZ3NzbVRyZWVDb25maWcgfCB1bmRlZmluZWQgfCBudWxsKSB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB0aGlzLl90cmVlQ29uZmlnJC5uZXh0KHsgLi4udmFsdWUgfSk7XG5cbiAgICAgIHRoaXMudHJlZVN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICAgIHRoaXMudHJlZVN1YnNjcmlwdGlvbiA9IHRoaXMud2F0Y2goKHMpID0+IHNlbGVjdE5nc3NtVHJlZVN0YXRlKHMpLnRyZWVzW3ZhbHVlLnRyZWVJZF0pLnN1YnNjcmliZSgodHJlZTogTmdzc21UcmVlIHwgdW5kZWZpbmVkKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuX3RyZWVDb25maWckLmdldFZhbHVlKCk7XG4gICAgICAgIGlmICghdHJlZSB8fCAhY29uZmlnKSB7XG4gICAgICAgICAgdGhpcy5fZGlzcGxheWVkSXRlbXMkLm5leHQoW10pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGFsd2F5c1RydWUgPSAoXzogTm9kZURhdGEpID0+IHRydWU7XG4gICAgICAgIGNvbnN0IGZpbHRlcjogKG5vZGU6IE5vZGVEYXRhKSA9PiBib29sZWFuID0gY29uZmlnLmZpbHRlciA/PyBhbHdheXNUcnVlO1xuXG4gICAgICAgIGNvbnN0IGl0ZW1zOiBOZ3NzbVRyZWVOb2RlW10gPSBbXTtcbiAgICAgICAgbGV0IGhpZGRlbkxldmVsID0gLTE7XG4gICAgICAgIGNvbnN0IG5vZGVzVG9GaW5kU2VsZWN0ZWQgPSBuZXcgTWFwPHN0cmluZywgeyBpc0Rpc3BsYXllZDogYm9vbGVhbjsgbm9kZTogTmdzc21UcmVlTm9kZSB9PigpO1xuICAgICAgICAodHJlZS5ub2RlcyA/PyBbXSkuZm9yRWFjaCgodCkgPT4ge1xuICAgICAgICAgIGlmICh0Lm5vZGUuaXNFeHBhbmRhYmxlICYmIHQuaXNFeHBhbmRlZCA9PT0gZmFsc2UgJiYgaGlkZGVuTGV2ZWwgPT09IC0xKSB7XG4gICAgICAgICAgICBoaWRkZW5MZXZlbCA9IHQubGV2ZWw7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGhpZGRlbkxldmVsID09PSAtMSB8fCB0LmxldmVsIDw9IGhpZGRlbkxldmVsKSB7XG4gICAgICAgICAgICBpZiAoZmlsdGVyKHQubm9kZSkpIHtcbiAgICAgICAgICAgICAgaXRlbXMucHVzaCh0KTtcbiAgICAgICAgICAgICAgbm9kZXNUb0ZpbmRTZWxlY3RlZC5zZXQodC5ub2RlLm5vZGVJZCwgeyBpc0Rpc3BsYXllZDogdHJ1ZSwgbm9kZTogdCB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodC5ub2RlLmlzRXhwYW5kYWJsZSAmJiB0LmxldmVsIDw9IGhpZGRlbkxldmVsKSB7XG4gICAgICAgICAgICBoaWRkZW5MZXZlbCA9IHQuaXNFeHBhbmRlZCA9PT0gdHJ1ZSA/IC0xIDogdC5sZXZlbDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIW5vZGVzVG9GaW5kU2VsZWN0ZWQuaGFzKHQubm9kZS5ub2RlSWQpKSB7XG4gICAgICAgICAgICBub2Rlc1RvRmluZFNlbGVjdGVkLnNldCh0Lm5vZGUubm9kZUlkLCB7IGlzRGlzcGxheWVkOiBmYWxzZSwgbm9kZTogdCB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX2Rpc3BsYXllZEl0ZW1zJC5uZXh0KGl0ZW1zKTtcblxuICAgICAgICBsZXQgc2VsZWN0ZWROb2RlID0gdHJlZS5zZWxlY3RlZE5vZGU7XG4gICAgICAgIGlmICghc2VsZWN0ZWROb2RlKSB7XG4gICAgICAgICAgdGhpcy5fc2VsZWN0ZWROb2RlSWQkLm5leHQodW5kZWZpbmVkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB3aGlsZSAoc2VsZWN0ZWROb2RlKSB7XG4gICAgICAgICAgICBjb25zdCBpdGVtID0gbm9kZXNUb0ZpbmRTZWxlY3RlZC5nZXQoc2VsZWN0ZWROb2RlKTtcbiAgICAgICAgICAgIGlmIChpdGVtPy5pc0Rpc3BsYXllZCAhPT0gdHJ1ZSkge1xuICAgICAgICAgICAgICBzZWxlY3RlZE5vZGUgPSBpdGVtPy5ub2RlLm5vZGUucGFyZW50Tm9kZUlkO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5fc2VsZWN0ZWROb2RlSWQkLm5leHQoc2VsZWN0ZWROb2RlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldCB0cmVlQ29uZmlnJCgpOiBPYnNlcnZhYmxlPE5nc3NtVHJlZUNvbmZpZyB8IHVuZGVmaW5lZD4ge1xuICAgIHJldHVybiB0aGlzLl90cmVlQ29uZmlnJC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZGlzcGxheWVkSXRlbXMkKCk6IE9ic2VydmFibGU8Tmdzc21UcmVlTm9kZVtdPiB7XG4gICAgcmV0dXJuIHRoaXMuX2Rpc3BsYXllZEl0ZW1zJC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgc2VsZWN0ZWROb2RlSWQkKCk6IE9ic2VydmFibGU8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkTm9kZUlkJC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRJdGVtSWQoXzogbnVtYmVyLCBub2RlOiBOZ3NzbVRyZWVOb2RlKTogc3RyaW5nIHtcbiAgICByZXR1cm4gbm9kZS5ub2RlLm5vZGVJZDtcbiAgfVxuXG4gIHB1YmxpYyBleHBhbmQobm9kZTogTmdzc21UcmVlTm9kZSk6IHZvaWQge1xuICAgIGNvbnN0IHRyZWVJZCA9IHRoaXMuX3RyZWVDb25maWckLmdldFZhbHVlKCk/LnRyZWVJZDtcbiAgICBpZiAodHJlZUlkKSB7XG4gICAgICB0aGlzLmRpc3BhdGNoQWN0aW9uKG5ldyBFeHBhbmROb2RlQWN0aW9uKHRyZWVJZCwgbm9kZS5ub2RlLm5vZGVJZCkpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBjb2xsYXBzZShub2RlOiBOZ3NzbVRyZWVOb2RlKTogdm9pZCB7XG4gICAgY29uc3QgdHJlZUlkID0gdGhpcy5fdHJlZUNvbmZpZyQuZ2V0VmFsdWUoKT8udHJlZUlkO1xuICAgIGlmICh0cmVlSWQpIHtcbiAgICAgIHRoaXMuZGlzcGF0Y2hBY3Rpb24obmV3IENvbGxhcHNlTm9kZUFjdGlvbih0cmVlSWQsIG5vZGUubm9kZS5ub2RlSWQpKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc2VsZWN0Tm9kZShub2RlOiBOZ3NzbVRyZWVOb2RlKTogdm9pZCB7XG4gICAgY29uc3QgdHJlZUlkID0gdGhpcy5fdHJlZUNvbmZpZyQuZ2V0VmFsdWUoKT8udHJlZUlkO1xuICAgIGlmICh0cmVlSWQpIHtcbiAgICAgIHRoaXMuZGlzcGF0Y2hBY3Rpb24obmV3IFNlbGVjdE5vZGVBY3Rpb24odHJlZUlkLCBub2RlLm5vZGUubm9kZUlkKSk7XG4gICAgfVxuICB9XG59XG4iLCI8bWF0LWNhcmQgY2xhc3M9XCJmbGV4LWNvbHVtbi1zdHJldGNoIGZ4RmxleFwiPlxuICAgIDxtYXQtY2FyZC1jb250ZW50IGNsYXNzPVwiZmxleC1jb2x1bW4tc3RyZXRjaCBmeEZsZXhcIiAqbmdJZj1cIih0cmVlQ29uZmlnJCB8IGFzeW5jKSBhcyB0cmVlQ29uZmlnXCI+XG4gICAgICAgIDxjZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQgaXRlbVNpemU9XCIzMFwiIGNsYXNzPVwiZnhGbGV4XCI+XG4gICAgICAgICAgICA8ZGl2ICpjZGtWaXJ0dWFsRm9yPVwibGV0IGl0ZW0gb2YgZGlzcGxheWVkSXRlbXMkIHwgYXN5bmM7IHRyYWNrQnk6IGdldEl0ZW1JZFwiIGNsYXNzPVwibmdzc20tdHJlZS1ub2RlXCJcbiAgICAgICAgICAgICAgICBbc3R5bGUucGFkZGluZy1sZWZ0LnB4XT1cIml0ZW0ubGV2ZWwgKiAyMFwiIChjbGljayk9XCJzZWxlY3ROb2RlKGl0ZW0pXCJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J3NlbGVjdGVkJyA6IChzZWxlY3RlZE5vZGVJZCQgfCBhc3luYykgPT09IGl0ZW0ubm9kZS5ub2RlSWR9XCI+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiZmEtc29saWQgZmEtY2hldnJvbi1yaWdodFwiICpuZ0lmPVwiaXRlbS5ub2RlLmlzRXhwYW5kYWJsZSAmJiBpdGVtLmlzRXhwYW5kZWQgPT09IGZhbHNlICYmIGl0ZW0uc3RhdHVzICE9PSBkYXRhU3RhdHVzLmxvYWRpbmdcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO2V4cGFuZChpdGVtKTtcIj48L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImZhLXNvbGlkIGZhLWNoZXZyb24tZG93blwiICpuZ0lmPVwiaXRlbS5ub2RlLmlzRXhwYW5kYWJsZSAmJiBpdGVtLmlzRXhwYW5kZWQgJiYgaXRlbS5zdGF0dXMgIT09IGRhdGFTdGF0dXMubG9hZGluZ1wiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7Y29sbGFwc2UoaXRlbSlcIj48L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDxtYXQtc3Bpbm5lciBkaWFtZXRlcj1cIjIwXCJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpdGVtLm5vZGUuaXNFeHBhbmRhYmxlICYmIGl0ZW0uc3RhdHVzID09PSBkYXRhU3RhdHVzLmxvYWRpbmdcIj48L21hdC1zcGlubmVyPlxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWl0ZW0ubm9kZS5pc0V4cGFuZGFibGVcIiBjbGFzcz1cIm5vdC1leHBhbmRhYmxlLXBhZGRpbmdcIj48L3NwYW4+XG5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJ7e3RyZWVDb25maWcuaWNvbkNsYXNzZXNbaXRlbS5ub2RlLnR5cGVdfX1cIiBjb2xvcj1cInByaW1hcnlcIj48L21hdC1pY29uPlxuXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJuZ3NzbS10cmVlLW5vZGUtbGFiZWxcIj5cbiAgICAgICAgICAgICAgICAgICAge3tpdGVtLm5vZGUubGFiZWx9fVxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Nkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydD5cbiAgICA8L21hdC1jYXJkLWNvbnRlbnQ+XG48L21hdC1jYXJkPiJdfQ==
|
|
128
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmdzc20tdHJlZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3NzbS10cmVlL3NyYy9saWIvY29tcG9uZW50cy9uZ3NzbS10cmVlL25nc3NtLXRyZWUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmdzc20tdHJlZS9zcmMvbGliL2NvbXBvbmVudHMvbmdzc20tdHJlZS9uZ3NzbS10cmVlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsdUJBQXVCLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDekQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM5RSxPQUFPLEVBQUUsZUFBZSxFQUE0QixNQUFNLE1BQU0sQ0FBQztBQUVqRSxPQUFPLEVBQUUsY0FBYyxFQUFTLE1BQU0sYUFBYSxDQUFDO0FBQ3BELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUcvQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDbkQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLHlCQUF5QixFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sZUFBZSxDQUFDOzs7Ozs7OztBQWVsSCxNQUFNLE9BQU8sa0JBQW1CLFNBQVEsY0FBYztJQVNwRCxZQUFZLEtBQVk7UUFDdEIsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFD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R0F2SFUsa0JBQWtCO21HQUFsQixrQkFBa0IsbUlDNUIvQiwwN0RBNEJXLHduQkRMQyxZQUFZLHFSQUFFLGVBQWUsMmpCQUFFLGFBQWEsME5BQUUsYUFBYSxtTEFBRSx3QkFBd0I7MkZBS3BGLGtCQUFrQjtrQkFSOUIsU0FBUzsrQkFDRSxZQUFZLGNBQ1YsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLHdCQUF3QixDQUFDLG1CQUcvRSx1QkFBdUIsQ0FBQyxNQUFNOzRGQWVsQyxVQUFVO3NCQUF0QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBTY3JvbGxpbmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jZGsvc2Nyb2xsaW5nJztcbmltcG9ydCB7IE1hdENhcmRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jYXJkJztcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcbmltcG9ydCB7IE1hdFByb2dyZXNzU3Bpbm5lck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Byb2dyZXNzLXNwaW5uZXInO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgTmdTc21Db21wb25lbnQsIFN0b3JlIH0gZnJvbSAnbmdzc20tc3RvcmUnO1xuaW1wb3J0IHsgRGF0YVN0YXR1cyB9IGZyb20gJ25nc3NtLXJlbW90ZS1kYXRhJztcblxuaW1wb3J0IHsgTmdzc21UcmVlLCBOZ3NzbVRyZWVDb25maWcsIE5nc3NtVHJlZU5vZGUsIE5vZGVEYXRhIH0gZnJvbSAnLi4vLi4vbW9kZWwnO1xuaW1wb3J0IHsgc2VsZWN0Tmdzc21UcmVlU3RhdGUgfSBmcm9tICcuLi8uLi9zdGF0ZSc7XG5pbXBvcnQgeyBDb2xsYXBzZU5vZGVBY3Rpb24sIERpc3BsYXlTZWFyY2hEaWFsb2dBY3Rpb24sIEV4cGFuZE5vZGVBY3Rpb24sIFNlbGVjdE5vZGVBY3Rpb24gfSBmcm9tICcuLi8uLi9hY3Rpb25zJztcblxuaW50ZXJmYWNlIERpc3BsYXllZE5vZGUge1xuICBub2RlOiBOZ3NzbVRyZWVOb2RlO1xuICBjYW5TZWFyY2g6IGJvb2xlYW47XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ25nc3NtLXRyZWUnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBTY3JvbGxpbmdNb2R1bGUsIE1hdENhcmRNb2R1bGUsIE1hdEljb25Nb2R1bGUsIE1hdFByb2dyZXNzU3Bpbm5lck1vZHVsZV0sXG4gIHRlbXBsYXRlVXJsOiAnLi9uZ3NzbS10cmVlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbmdzc20tdHJlZS5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBOZ3NzbVRyZWVDb21wb25lbnQgZXh0ZW5kcyBOZ1NzbUNvbXBvbmVudCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RyZWVDb25maWckID0gbmV3IEJlaGF2aW9yU3ViamVjdDxOZ3NzbVRyZWVDb25maWcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rpc3BsYXllZEl0ZW1zJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8RGlzcGxheWVkTm9kZVtdPihbXSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3NlbGVjdGVkTm9kZUlkJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuXG4gIHByaXZhdGUgdHJlZVN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uIHwgdW5kZWZpbmVkO1xuXG4gIHB1YmxpYyByZWFkb25seSBkYXRhU3RhdHVzID0gRGF0YVN0YXR1cztcblxuICBjb25zdHJ1Y3RvcihzdG9yZTogU3RvcmUpIHtcbiAgICBzdXBlcihzdG9yZSk7XG4gIH1cblxuICBASW5wdXQoKSBzZXQgdHJlZUNvbmZpZyh2YWx1ZTogTmdzc21UcmVlQ29uZmlnIHwgdW5kZWZpbmVkIHwgbnVsbCkge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy5fdHJlZUNvbmZpZyQubmV4dCh7IC4uLnZhbHVlIH0pO1xuXG4gICAgICB0aGlzLnRyZWVTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICB0aGlzLnRyZWVTdWJzY3JpcHRpb24gPSB0aGlzLndhdGNoKChzKSA9PiBzZWxlY3ROZ3NzbVRyZWVTdGF0ZShzKS50cmVlc1t2YWx1ZS50cmVlSWRdKS5zdWJzY3JpYmUoKHRyZWU6IE5nc3NtVHJlZSB8IHVuZGVmaW5lZCkgPT4ge1xuICAgICAgICBjb25zdCBjb25maWcgPSB0aGlzLl90cmVlQ29uZmlnJC5nZXRWYWx1ZSgpO1xuICAgICAgICBpZiAoIXRyZWUgfHwgIWNvbmZpZykge1xuICAgICAgICAgIHRoaXMuX2Rpc3BsYXllZEl0ZW1zJC5uZXh0KFtdKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBhbHdheXNUcnVlID0gKF86IE5vZGVEYXRhKSA9PiB0cnVlO1xuICAgICAgICBjb25zdCBmaWx0ZXI6IChub2RlOiBOb2RlRGF0YSkgPT4gYm9vbGVhbiA9IGNvbmZpZy5maWx0ZXIgPz8gYWx3YXlzVHJ1ZTtcbiAgICAgICAgY29uc3QgY2FuU2VhcmNoOiAobm9kZTogTm9kZURhdGEpID0+IGJvb2xlYW4gPSBjb25maWcuY2FuU2VhcmNoID8/IGFsd2F5c1RydWU7XG5cbiAgICAgICAgY29uc3QgaXRlbXM6IERpc3BsYXllZE5vZGVbXSA9IFtdO1xuICAgICAgICBsZXQgaGlkZGVuTGV2ZWwgPSAtMTtcbiAgICAgICAgY29uc3Qgbm9kZXNUb0ZpbmRTZWxlY3RlZCA9IG5ldyBNYXA8c3RyaW5nLCB7IGlzRGlzcGxheWVkOiBib29sZWFuOyBub2RlOiBOZ3NzbVRyZWVOb2RlIH0+KCk7XG4gICAgICAgICh0cmVlLm5vZGVzID8/IFtdKS5mb3JFYWNoKCh0KSA9PiB7XG4gICAgICAgICAgaWYgKHQubm9kZS5pc0V4cGFuZGFibGUgJiYgdC5pc0V4cGFuZGVkID09PSBmYWxzZSAmJiBoaWRkZW5MZXZlbCA9PT0gLTEpIHtcbiAgICAgICAgICAgIGhpZGRlbkxldmVsID0gdC5sZXZlbDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoaGlkZGVuTGV2ZWwgPT09IC0xIHx8IHQubGV2ZWwgPD0gaGlkZGVuTGV2ZWwpIHtcbiAgICAgICAgICAgIGlmIChmaWx0ZXIodC5ub2RlKSkge1xuICAgICAgICAgICAgICBpdGVtcy5wdXNoKHtcbiAgICAgICAgICAgICAgICBub2RlOiB0LFxuICAgICAgICAgICAgICAgIGNhblNlYXJjaDogY2FuU2VhcmNoKHQubm9kZSlcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIG5vZGVzVG9GaW5kU2VsZWN0ZWQuc2V0KHQubm9kZS5ub2RlSWQsIHsgaXNEaXNwbGF5ZWQ6IHRydWUsIG5vZGU6IHQgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHQubm9kZS5pc0V4cGFuZGFibGUgJiYgdC5sZXZlbCA8PSBoaWRkZW5MZXZlbCkge1xuICAgICAgICAgICAgaGlkZGVuTGV2ZWwgPSB0LmlzRXhwYW5kZWQgPT09IHRydWUgPyAtMSA6IHQubGV2ZWw7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCFub2Rlc1RvRmluZFNlbGVjdGVkLmhhcyh0Lm5vZGUubm9kZUlkKSkge1xuICAgICAgICAgICAgbm9kZXNUb0ZpbmRTZWxlY3RlZC5zZXQodC5ub2RlLm5vZGVJZCwgeyBpc0Rpc3BsYXllZDogZmFsc2UsIG5vZGU6IHQgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9kaXNwbGF5ZWRJdGVtcyQubmV4dChpdGVtcyk7XG5cbiAgICAgICAgbGV0IHNlbGVjdGVkTm9kZSA9IHRyZWUuc2VsZWN0ZWROb2RlO1xuICAgICAgICBpZiAoIXNlbGVjdGVkTm9kZSkge1xuICAgICAgICAgIHRoaXMuX3NlbGVjdGVkTm9kZUlkJC5uZXh0KHVuZGVmaW5lZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgd2hpbGUgKHNlbGVjdGVkTm9kZSkge1xuICAgICAgICAgICAgY29uc3QgaXRlbSA9IG5vZGVzVG9GaW5kU2VsZWN0ZWQuZ2V0KHNlbGVjdGVkTm9kZSk7XG4gICAgICAgICAgICBpZiAoaXRlbT8uaXNEaXNwbGF5ZWQgIT09IHRydWUpIHtcbiAgICAgICAgICAgICAgc2VsZWN0ZWROb2RlID0gaXRlbT8ubm9kZS5ub2RlLnBhcmVudE5vZGVJZDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuX3NlbGVjdGVkTm9kZUlkJC5uZXh0KHNlbGVjdGVkTm9kZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXQgdHJlZUNvbmZpZyQoKTogT2JzZXJ2YWJsZTxOZ3NzbVRyZWVDb25maWcgfCB1bmRlZmluZWQ+IHtcbiAgICByZXR1cm4gdGhpcy5fdHJlZUNvbmZpZyQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGRpc3BsYXllZEl0ZW1zJCgpOiBPYnNlcnZhYmxlPERpc3BsYXllZE5vZGVbXT4ge1xuICAgIHJldHVybiB0aGlzLl9kaXNwbGF5ZWRJdGVtcyQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHNlbGVjdGVkTm9kZUlkJCgpOiBPYnNlcnZhYmxlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZE5vZGVJZCQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0SXRlbUlkKF86IG51bWJlciwgbm9kZTogRGlzcGxheWVkTm9kZSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIG5vZGUubm9kZS5ub2RlLm5vZGVJZDtcbiAgfVxuXG4gIHB1YmxpYyBleHBhbmQobm9kZTogTmdzc21UcmVlTm9kZSk6IHZvaWQge1xuICAgIGNvbnN0IHRyZWVJZCA9IHRoaXMuX3RyZWVDb25maWckLmdldFZhbHVlKCk/LnRyZWVJZDtcbiAgICBpZiAodHJlZUlkKSB7XG4gICAgICB0aGlzLmRpc3BhdGNoQWN0aW9uKG5ldyBFeHBhbmROb2RlQWN0aW9uKHRyZWVJZCwgbm9kZS5ub2RlLm5vZGVJZCkpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBjb2xsYXBzZShub2RlOiBOZ3NzbVRyZWVOb2RlKTogdm9pZCB7XG4gICAgY29uc3QgdHJlZUlkID0gdGhpcy5fdHJlZUNvbmZpZyQuZ2V0VmFsdWUoKT8udHJlZUlkO1xuICAgIGlmICh0cmVlSWQpIHtcbiAgICAgIHRoaXMuZGlzcGF0Y2hBY3Rpb24obmV3IENvbGxhcHNlTm9kZUFjdGlvbih0cmVlSWQsIG5vZGUubm9kZS5ub2RlSWQpKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc2VsZWN0Tm9kZShub2RlOiBOZ3NzbVRyZWVOb2RlKTogdm9pZCB7XG4gICAgY29uc3QgdHJlZUlkID0gdGhpcy5fdHJlZUNvbmZpZyQuZ2V0VmFsdWUoKT8udHJlZUlkO1xuICAgIGlmICh0cmVlSWQpIHtcbiAgICAgIHRoaXMuZGlzcGF0Y2hBY3Rpb24obmV3IFNlbGVjdE5vZGVBY3Rpb24odHJlZUlkLCBub2RlLm5vZGUubm9kZUlkKSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGRpc3BsYXlTZWFyY2hEaWFsb2cobm9kZTogTmdzc21UcmVlTm9kZSk6IHZvaWQge1xuICAgIGNvbnN0IHRyZWVJZCA9IHRoaXMuX3RyZWVDb25maWckLmdldFZhbHVlKCk/LnRyZWVJZDtcbiAgICBpZiAodHJlZUlkKSB7XG4gICAgICB0aGlzLmRpc3BhdGNoQWN0aW9uKG5ldyBEaXNwbGF5U2VhcmNoRGlhbG9nQWN0aW9uKHRyZWVJZCwgbm9kZS5ub2RlLm5vZGVJZCkpO1xuICAgIH1cbiAgfVxufVxuIiwiPG1hdC1jYXJkIGNsYXNzPVwiZmxleC1jb2x1bW4tc3RyZXRjaCBmeEZsZXhcIj5cbiAgICA8bWF0LWNhcmQtY29udGVudCBjbGFzcz1cImZsZXgtY29sdW1uLXN0cmV0Y2ggZnhGbGV4XCIgKm5nSWY9XCIodHJlZUNvbmZpZyQgfCBhc3luYykgYXMgdHJlZUNvbmZpZ1wiPlxuICAgICAgICA8Y2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0IGl0ZW1TaXplPVwiMzBcIiBjbGFzcz1cImZ4RmxleFwiPlxuICAgICAgICAgICAgPGRpdiAqY2RrVmlydHVhbEZvcj1cImxldCBpdGVtIG9mIGRpc3BsYXllZEl0ZW1zJCB8IGFzeW5jOyB0cmFja0J5OiBnZXRJdGVtSWRcIiBjbGFzcz1cIm5nc3NtLXRyZWUtbm9kZVwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLnBhZGRpbmctbGVmdC5weF09XCJpdGVtLm5vZGUubGV2ZWwgKiAyMFwiIChjbGljayk9XCJzZWxlY3ROb2RlKGl0ZW0ubm9kZSlcIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnc2VsZWN0ZWQnIDogKHNlbGVjdGVkTm9kZUlkJCB8IGFzeW5jKSA9PT0gaXRlbS5ub2RlLm5vZGUubm9kZUlkfVwiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImZhLXNvbGlkIGZhLWNoZXZyb24tcmlnaHRcIlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIml0ZW0ubm9kZS5ub2RlLmlzRXhwYW5kYWJsZSAmJiBpdGVtLm5vZGUuaXNFeHBhbmRlZCA9PT0gZmFsc2UgJiYgaXRlbS5ub2RlLnN0YXR1cyAhPT0gZGF0YVN0YXR1cy5sb2FkaW5nXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtleHBhbmQoaXRlbS5ub2RlKTtcIj48L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImZhLXNvbGlkIGZhLWNoZXZyb24tZG93blwiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXRlbS5ub2RlLm5vZGUuaXNFeHBhbmRhYmxlICYmIGl0ZW0ubm9kZS5pc0V4cGFuZGVkICYmIGl0ZW0ubm9kZS5zdGF0dXMgIT09IGRhdGFTdGF0dXMubG9hZGluZ1wiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7Y29sbGFwc2UoaXRlbS5ub2RlKVwiPjwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPG1hdC1zcGlubmVyIGRpYW1ldGVyPVwiMjBcIlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIml0ZW0ubm9kZS5ub2RlLmlzRXhwYW5kYWJsZSAmJiBpdGVtLm5vZGUuc3RhdHVzID09PSBkYXRhU3RhdHVzLmxvYWRpbmdcIj48L21hdC1zcGlubmVyPlxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWl0ZW0ubm9kZS5ub2RlLmlzRXhwYW5kYWJsZVwiIGNsYXNzPVwibm90LWV4cGFuZGFibGUtcGFkZGluZ1wiPjwvc3Bhbj5cblxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cInt7dHJlZUNvbmZpZy5pY29uQ2xhc3Nlc1tpdGVtLm5vZGUubm9kZS50eXBlXX19XCIgY29sb3I9XCJwcmltYXJ5XCI+PC9tYXQtaWNvbj5cblxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibmdzc20tdHJlZS1ub2RlLWxhYmVsXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7aXRlbS5ub2RlLm5vZGUubGFiZWx9fVxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZ4RmxleFwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhLXNvbGlkIGZhLW1hZ25pZnlpbmctZ2xhc3Mgc2VhcmNoLWljb25cIiAqbmdJZj1cIml0ZW0uY2FuU2VhcmNoXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtkaXNwbGF5U2VhcmNoRGlhbG9nKGl0ZW0ubm9kZSlcIj5cbiAgICAgICAgICAgICAgICA8L2k+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9jZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQ+XG4gICAgPC9tYXQtY2FyZC1jb250ZW50PlxuPC9tYXQtY2FyZD4iXX0=
|
package/esm2020/lib/components/ngssm-tree-search-dialog/ngssm-tree-search-dialog.component.mjs
ADDED
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import { Component, ChangeDetectionStrategy, ViewChild, ViewContainerRef, Inject, Optional } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import { FormControl, ReactiveFormsModule, Validators } from '@angular/forms';
|
|
4
|
+
import { MatDialogModule } from '@angular/material/dialog';
|
|
5
|
+
import { MatButtonModule } from '@angular/material/button';
|
|
6
|
+
import { MatCardModule } from '@angular/material/card';
|
|
7
|
+
import { MatFormFieldModule } from '@angular/material/form-field';
|
|
8
|
+
import { MatInputModule } from '@angular/material/input';
|
|
9
|
+
import { MatIconModule } from '@angular/material/icon';
|
|
10
|
+
import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
|
|
11
|
+
import { BehaviorSubject, take } from 'rxjs';
|
|
12
|
+
import { NgSsmComponent } from 'ngssm-store';
|
|
13
|
+
import { defaultRegexEditorValidator } from 'ngssm-toolkit';
|
|
14
|
+
import { selectNgssmTreeState } from '../../state';
|
|
15
|
+
import { NgssmTreeActionType, SearchTreeNodesAction } from '../../actions';
|
|
16
|
+
import { NGSSM_TREE_DATA_SERVICE, SearchStatus } from '../../model';
|
|
17
|
+
import * as i0 from "@angular/core";
|
|
18
|
+
import * as i1 from "ngssm-store";
|
|
19
|
+
import * as i2 from "@angular/common";
|
|
20
|
+
import * as i3 from "@angular/forms";
|
|
21
|
+
import * as i4 from "@angular/material/form-field";
|
|
22
|
+
import * as i5 from "@angular/material/input";
|
|
23
|
+
import * as i6 from "@angular/material/dialog";
|
|
24
|
+
import * as i7 from "@angular/material/button";
|
|
25
|
+
import * as i8 from "@angular/material/card";
|
|
26
|
+
import * as i9 from "@angular/material/icon";
|
|
27
|
+
import * as i10 from "@angular/material/progress-spinner";
|
|
28
|
+
export class NgssmTreeSearchDialogComponent extends NgSsmComponent {
|
|
29
|
+
constructor(store, dataServices, changeDetectorRef) {
|
|
30
|
+
super(store);
|
|
31
|
+
this.dataServices = dataServices;
|
|
32
|
+
this.changeDetectorRef = changeDetectorRef;
|
|
33
|
+
this._currentSearchedPath$ = new BehaviorSubject('');
|
|
34
|
+
this.searchStatus = SearchStatus;
|
|
35
|
+
this.searchRootPathControl = new FormControl(undefined);
|
|
36
|
+
this.searchPatternControl = new FormControl(undefined, [
|
|
37
|
+
Validators.required,
|
|
38
|
+
(c) => this.validatedRegex(c)
|
|
39
|
+
]);
|
|
40
|
+
this.watch((s) => selectNgssmTreeState(s).treeNodesSearch.rootSearchPath)
|
|
41
|
+
.pipe(take(1))
|
|
42
|
+
.subscribe((v) => this.searchRootPathControl.setValue(v));
|
|
43
|
+
this.watch((s) => selectNgssmTreeState(s).treeNodesSearch.toProcess[0]).subscribe((node) => {
|
|
44
|
+
if (node) {
|
|
45
|
+
this._currentSearchedPath$.next(node.fullPath);
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
this._currentSearchedPath$.next('');
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
get searchStatus$() {
|
|
53
|
+
return this.watch((s) => selectNgssmTreeState(s).treeNodesSearch.searchStatus);
|
|
54
|
+
}
|
|
55
|
+
get currentSearchedPath$() {
|
|
56
|
+
return this._currentSearchedPath$.asObservable();
|
|
57
|
+
}
|
|
58
|
+
ngAfterViewInit() {
|
|
59
|
+
this.watch((s) => selectNgssmTreeState(s))
|
|
60
|
+
.pipe(take(1))
|
|
61
|
+
.subscribe((state) => {
|
|
62
|
+
const treeId = state.treeNodesSearch.treeId;
|
|
63
|
+
if (!treeId) {
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
const treeType = state.trees[treeId]?.type;
|
|
67
|
+
if (!treeType) {
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
const dataService = this.dataServices.find((d) => d.treeType === treeType);
|
|
71
|
+
if (!dataService?.searchResultViewer) {
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
this.resultsViewerContainer?.createComponent(dataService.searchResultViewer);
|
|
75
|
+
this.changeDetectorRef.markForCheck();
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
close() {
|
|
79
|
+
this.dispatchActionType(NgssmTreeActionType.closeSearchDialog);
|
|
80
|
+
}
|
|
81
|
+
search() {
|
|
82
|
+
const searchPattern = this.searchPatternControl.value;
|
|
83
|
+
if (searchPattern) {
|
|
84
|
+
this.dispatchAction(new SearchTreeNodesAction(searchPattern));
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
abort() {
|
|
88
|
+
this.dispatchActionType(NgssmTreeActionType.abortTreeNodesSearch);
|
|
89
|
+
}
|
|
90
|
+
validatedRegex(control) {
|
|
91
|
+
const result = defaultRegexEditorValidator.validatePattern(control.value);
|
|
92
|
+
if (result.isValid) {
|
|
93
|
+
return null;
|
|
94
|
+
}
|
|
95
|
+
return {
|
|
96
|
+
regex: result.error
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
NgssmTreeSearchDialogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.0", ngImport: i0, type: NgssmTreeSearchDialogComponent, deps: [{ token: i1.Store }, { token: NGSSM_TREE_DATA_SERVICE, optional: true }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
101
|
+
NgssmTreeSearchDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.0", type: NgssmTreeSearchDialogComponent, isStandalone: true, selector: "ngssm-ngssm-tree-search-dialog", viewQueries: [{ propertyName: "resultsViewerContainer", first: true, predicate: ["resultsViewerContainer"], descendants: true, read: ViewContainerRef }], usesInheritance: true, ngImport: i0, template: "<h1 mat-dialog-title>Tree search dialog</h1>\n<mat-dialog-content class=\"flex-column-stretch fxFlex\">\n <mat-card class=\"flex-column-stretch\">\n <mat-card-content class=\"flex-row-center\">\n <mat-form-field class=\"with-margin-right-12 fxFlex\">\n <mat-label>Starts search in</mat-label>\n <input matInput readonly [formControl]=\"searchRootPathControl\">\n </mat-form-field>\n\n <mat-form-field class=\"fxFlex with-margin-right-12\">\n <mat-label>Search pattern</mat-label>\n <input matInput [formControl]=\"searchPatternControl\">\n <mat-error *ngIf=\"searchPatternControl.errors?.['regex']\">\n {{searchPatternControl.errors?.['regex']}}\n </mat-error>\n </mat-form-field>\n\n <button mat-stroked-button color=\"primary\" [disabled]=\"searchPatternControl.invalid\" (click)=\"search()\"\n *ngIf=\"(searchStatus$ | async) !== searchStatus.inProgress\">\n <mat-icon class=\"fa-solid fa-magnifying-glass\"></mat-icon>\n Search\n </button>\n\n <button mat-raised-button color=\"accent\" (click)=\"abort()\"\n *ngIf=\"(searchStatus$ | async) === searchStatus.inProgress\">\n <mat-icon class=\"fa-solid fa-ban\"></mat-icon>\n Abort\n </button>\n </mat-card-content>\n <mat-card-footer class=\"flex-row-center\" *ngIf=\"(searchStatus$ | async) === searchStatus.inProgress\">\n <mat-spinner [diameter]=\"20\"></mat-spinner>\n {{ currentSearchedPath$ | async }}\n </mat-card-footer>\n </mat-card>\n <mat-card class=\"flex-column-stretch fxFlex with-margin-top-8\">\n <ng-container #resultsViewerContainer></ng-container>\n </mat-card>\n</mat-dialog-content>\n<mat-dialog-actions class=\"flex-row-center\">\n <span class=\"fxFlex\"></span>\n <button mat-button (click)=\"close()\">Close</button>\n</mat-dialog-actions>", styles: [":host{display:flex;flex-direction:column;height:100%}:host .mat-mdc-dialog-content{max-height:unset!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i4.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4.MatLabel, selector: "mat-label" }, { kind: "directive", type: i4.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i5.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatDialogModule }, { kind: "directive", type: i6.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i6.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "directive", type: i6.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i7.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "ngmodule", type: MatCardModule }, { kind: "component", type: i8.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i8.MatCardContent, selector: "mat-card-content" }, { kind: "directive", type: i8.MatCardFooter, selector: "mat-card-footer" }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i9.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i10.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
102
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.0", ngImport: i0, type: NgssmTreeSearchDialogComponent, decorators: [{
|
|
103
|
+
type: Component,
|
|
104
|
+
args: [{ selector: 'ngssm-ngssm-tree-search-dialog', standalone: true, imports: [
|
|
105
|
+
CommonModule,
|
|
106
|
+
ReactiveFormsModule,
|
|
107
|
+
MatFormFieldModule,
|
|
108
|
+
MatInputModule,
|
|
109
|
+
MatDialogModule,
|
|
110
|
+
MatButtonModule,
|
|
111
|
+
MatCardModule,
|
|
112
|
+
MatIconModule,
|
|
113
|
+
MatProgressSpinnerModule
|
|
114
|
+
], changeDetection: ChangeDetectionStrategy.OnPush, template: "<h1 mat-dialog-title>Tree search dialog</h1>\n<mat-dialog-content class=\"flex-column-stretch fxFlex\">\n <mat-card class=\"flex-column-stretch\">\n <mat-card-content class=\"flex-row-center\">\n <mat-form-field class=\"with-margin-right-12 fxFlex\">\n <mat-label>Starts search in</mat-label>\n <input matInput readonly [formControl]=\"searchRootPathControl\">\n </mat-form-field>\n\n <mat-form-field class=\"fxFlex with-margin-right-12\">\n <mat-label>Search pattern</mat-label>\n <input matInput [formControl]=\"searchPatternControl\">\n <mat-error *ngIf=\"searchPatternControl.errors?.['regex']\">\n {{searchPatternControl.errors?.['regex']}}\n </mat-error>\n </mat-form-field>\n\n <button mat-stroked-button color=\"primary\" [disabled]=\"searchPatternControl.invalid\" (click)=\"search()\"\n *ngIf=\"(searchStatus$ | async) !== searchStatus.inProgress\">\n <mat-icon class=\"fa-solid fa-magnifying-glass\"></mat-icon>\n Search\n </button>\n\n <button mat-raised-button color=\"accent\" (click)=\"abort()\"\n *ngIf=\"(searchStatus$ | async) === searchStatus.inProgress\">\n <mat-icon class=\"fa-solid fa-ban\"></mat-icon>\n Abort\n </button>\n </mat-card-content>\n <mat-card-footer class=\"flex-row-center\" *ngIf=\"(searchStatus$ | async) === searchStatus.inProgress\">\n <mat-spinner [diameter]=\"20\"></mat-spinner>\n {{ currentSearchedPath$ | async }}\n </mat-card-footer>\n </mat-card>\n <mat-card class=\"flex-column-stretch fxFlex with-margin-top-8\">\n <ng-container #resultsViewerContainer></ng-container>\n </mat-card>\n</mat-dialog-content>\n<mat-dialog-actions class=\"flex-row-center\">\n <span class=\"fxFlex\"></span>\n <button mat-button (click)=\"close()\">Close</button>\n</mat-dialog-actions>", styles: [":host{display:flex;flex-direction:column;height:100%}:host .mat-mdc-dialog-content{max-height:unset!important}\n"] }]
|
|
115
|
+
}], ctorParameters: function () { return [{ type: i1.Store }, { type: undefined, decorators: [{
|
|
116
|
+
type: Inject,
|
|
117
|
+
args: [NGSSM_TREE_DATA_SERVICE]
|
|
118
|
+
}, {
|
|
119
|
+
type: Optional
|
|
120
|
+
}] }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { resultsViewerContainer: [{
|
|
121
|
+
type: ViewChild,
|
|
122
|
+
args: ['resultsViewerContainer', { read: ViewContainerRef }]
|
|
123
|
+
}] } });
|
|
124
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmdzc20tdHJlZS1zZWFyY2gtZGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nc3NtLXRyZWUvc3JjL2xpYi9jb21wb25lbnRzL25nc3NtLXRyZWUtc2VhcmNoLWRpYWxvZy9uZ3NzbS10cmVlLXNlYXJjaC1kaWFsb2cuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmdzc20tdHJlZS9zcmMvbGliL2NvbXBvbmVudHMvbmdzc20tdHJlZS1zZWFyY2gtZGlhbG9nL25nc3NtLXRyZWUtc2VhcmNoLWRpYWxvZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsZ0JBQWdCLEVBRWhCLE1BQU0sRUFDTixRQUFRLEVBRVQsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBbUIsV0FBVyxFQUFFLG1CQUFtQixFQUFvQixVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNqSCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxlQUFlLEVBQWMsSUFBSSxF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QThCLHVNQVdJLGdCQUFnQixvREN6RC9ELGdpRUF5Q3FCLHlLRFRqQixZQUFZLHVMQUNaLG1CQUFtQix5a0JBQ25CLGtCQUFrQix1WUFDbEIsY0FBYywwV0FDZCxlQUFlLHliQUNmLGVBQWUsMlFBQ2YsYUFBYSxzU0FDYixhQUFhLG1MQUNiLHdCQUF3QjsyRkFNZiw4QkFBOEI7a0JBbEIxQyxTQUFTOytCQUNFLGdDQUFnQyxjQUM5QixJQUFJLFdBQ1A7d0JBQ1AsWUFBWTt3QkFDWixtQkFBbUI7d0JBQ25CLGtCQUFrQjt3QkFDbEIsY0FBYzt3QkFDZCxlQUFlO3dCQUNmLGVBQWU7d0JBQ2YsYUFBYTt3QkFDYixhQUFhO3dCQUNiLHdCQUF3QjtxQkFDekIsbUJBR2dCLHVCQUF1QixDQUFDLE1BQU07OzBCQWlCNUMsTUFBTTsyQkFBQyx1QkFBdUI7OzBCQUFHLFFBQVE7NEVBSjRCLHNCQUFzQjtzQkFBN0YsU0FBUzt1QkFBQyx3QkFBd0IsRUFBRSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIFZpZXdDaGlsZCxcbiAgVmlld0NvbnRhaW5lclJlZixcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgSW5qZWN0LFxuICBPcHRpb25hbCxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBGb3JtQ29udHJvbCwgUmVhY3RpdmVGb3Jtc01vZHVsZSwgVmFsaWRhdGlvbkVycm9ycywgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE1hdERpYWxvZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuaW1wb3J0IHsgTWF0Q2FyZE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NhcmQnO1xuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XG5pbXBvcnQgeyBNYXRJbnB1dE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2lucHV0JztcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcbmltcG9ydCB7IE1hdFByb2dyZXNzU3Bpbm5lck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Byb2dyZXNzLXNwaW5uZXInO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCB0YWtlIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IE5nU3NtQ29tcG9uZW50LCBTdG9yZSB9IGZyb20gJ25nc3NtLXN0b3JlJztcbmltcG9ydCB7IGRlZmF1bHRSZWdleEVkaXRvclZhbGlkYXRvciB9IGZyb20gJ25nc3NtLXRvb2xraXQnO1xuXG5pbXBvcnQgeyBzZWxlY3ROZ3NzbVRyZWVTdGF0ZSB9IGZyb20gJy4uLy4uL3N0YXRlJztcbmltcG9ydCB7IE5nc3NtVHJlZUFjdGlvblR5cGUsIFNlYXJjaFRyZWVOb2Rlc0FjdGlvbiB9IGZyb20gJy4uLy4uL2FjdGlvbnMnO1xuaW1wb3J0IHsgTmdzc21UcmVlRGF0YVNlcnZpY2UsIE5HU1NNX1RSRUVfREFUQV9TRVJWSUNFLCBTZWFyY2hTdGF0dXMgfSBmcm9tICcuLi8uLi9tb2RlbCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ25nc3NtLW5nc3NtLXRyZWUtc2VhcmNoLWRpYWxvZycsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBNYXRGb3JtRmllbGRNb2R1bGUsXG4gICAgTWF0SW5wdXRNb2R1bGUsXG4gICAgTWF0RGlhbG9nTW9kdWxlLFxuICAgIE1hdEJ1dHRvbk1vZHVsZSxcbiAgICBNYXRDYXJkTW9kdWxlLFxuICAgIE1hdEljb25Nb2R1bGUsXG4gICAgTWF0UHJvZ3Jlc3NTcGlubmVyTW9kdWxlXG4gIF0sXG4gIHRlbXBsYXRlVXJsOiAnLi9uZ3NzbS10cmVlLXNlYXJjaC1kaWFsb2cuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9uZ3NzbS10cmVlLXNlYXJjaC1kaWFsb2cuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgTmdzc21UcmVlU2VhcmNoRGlhbG9nQ29tcG9uZW50IGV4dGVuZHMgTmdTc21Db21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0IHtcbiAgcHJpdmF0ZSByZWFkb25seSBfY3VycmVudFNlYXJjaGVkUGF0aCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJycpO1xuXG4gIHB1YmxpYyByZWFkb25seSBzZWFyY2hTdGF0dXMgPSBTZWFyY2hTdGF0dXM7XG5cbiAgcHVibGljIHJlYWRvbmx5IHNlYXJjaFJvb3RQYXRoQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbDxzdHJpbmcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHB1YmxpYyByZWFkb25seSBzZWFyY2hQYXR0ZXJuQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbDxzdHJpbmcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCwgW1xuICAgIFZhbGlkYXRvcnMucmVxdWlyZWQsXG4gICAgKGMpID0+IHRoaXMudmFsaWRhdGVkUmVnZXgoYylcbiAgXSk7XG5cbiAgQFZpZXdDaGlsZCgncmVzdWx0c1ZpZXdlckNvbnRhaW5lcicsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KSBwdWJsaWMgcmVzdWx0c1ZpZXdlckNvbnRhaW5lcjogVmlld0NvbnRhaW5lclJlZiB8IHVuZGVmaW5lZDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBzdG9yZTogU3RvcmUsXG4gICAgQEluamVjdChOR1NTTV9UUkVFX0RBVEFfU0VSVklDRSkgQE9wdGlvbmFsKCkgcHJpdmF0ZSBkYXRhU2VydmljZXM6IE5nc3NtVHJlZURhdGFTZXJ2aWNlW10sXG4gICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWZcbiAgKSB7XG4gICAgc3VwZXIoc3RvcmUpO1xuXG4gICAgdGhpcy53YXRjaCgocykgPT4gc2VsZWN0Tmdzc21UcmVlU3RhdGUocykudHJlZU5vZGVzU2VhcmNoLnJvb3RTZWFyY2hQYXRoKVxuICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgIC5zdWJzY3JpYmUoKHYpID0+IHRoaXMuc2VhcmNoUm9vdFBhdGhDb250cm9sLnNldFZhbHVlKHYpKTtcblxuICAgIHRoaXMud2F0Y2goKHMpID0+IHNlbGVjdE5nc3NtVHJlZVN0YXRlKHMpLnRyZWVOb2Rlc1NlYXJjaC50b1Byb2Nlc3NbMF0pLnN1YnNjcmliZSgobm9kZSkgPT4ge1xuICAgICAgaWYgKG5vZGUpIHtcbiAgICAgICAgdGhpcy5fY3VycmVudFNlYXJjaGVkUGF0aCQubmV4dChub2RlLmZ1bGxQYXRoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRTZWFyY2hlZFBhdGgkLm5leHQoJycpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGdldCBzZWFyY2hTdGF0dXMkKCk6IE9ic2VydmFibGU8U2VhcmNoU3RhdHVzPiB7XG4gICAgcmV0dXJuIHRoaXMud2F0Y2goKHMpID0+IHNlbGVjdE5nc3NtVHJlZVN0YXRlKHMpLnRyZWVOb2Rlc1NlYXJjaC5zZWFyY2hTdGF0dXMpO1xuICB9XG5cbiAgcHVibGljIGdldCBjdXJyZW50U2VhcmNoZWRQYXRoJCgpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLl9jdXJyZW50U2VhcmNoZWRQYXRoJC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy53YXRjaCgocykgPT4gc2VsZWN0Tmdzc21UcmVlU3RhdGUocykpXG4gICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgLnN1YnNjcmliZSgoc3RhdGUpID0+IHtcbiAgICAgICAgY29uc3QgdHJlZUlkID0gc3RhdGUudHJlZU5vZGVzU2VhcmNoLnRyZWVJZDtcbiAgICAgICAgaWYgKCF0cmVlSWQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0cmVlVHlwZSA9IHN0YXRlLnRyZWVzW3RyZWVJZF0/LnR5cGU7XG4gICAgICAgIGlmICghdHJlZVR5cGUpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkYXRhU2VydmljZSA9IHRoaXMuZGF0YVNlcnZpY2VzLmZpbmQoKGQpID0+IGQudHJlZVR5cGUgPT09IHRyZWVUeXBlKTtcbiAgICAgICAgaWYgKCFkYXRhU2VydmljZT8uc2VhcmNoUmVzdWx0Vmlld2VyKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5yZXN1bHRzVmlld2VyQ29udGFpbmVyPy5jcmVhdGVDb21wb25lbnQoZGF0YVNlcnZpY2Uuc2VhcmNoUmVzdWx0Vmlld2VyKTtcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGNsb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuZGlzcGF0Y2hBY3Rpb25UeXBlKE5nc3NtVHJlZUFjdGlvblR5cGUuY2xvc2VTZWFyY2hEaWFsb2cpO1xuICB9XG5cbiAgcHVibGljIHNlYXJjaCgpOiB2b2lkIHtcbiAgICBjb25zdCBzZWFyY2hQYXR0ZXJuID0gdGhpcy5zZWFyY2hQYXR0ZXJuQ29udHJvbC52YWx1ZTtcbiAgICBpZiAoc2VhcmNoUGF0dGVybikge1xuICAgICAgdGhpcy5kaXNwYXRjaEFjdGlvbihuZXcgU2VhcmNoVHJlZU5vZGVzQWN0aW9uKHNlYXJjaFBhdHRlcm4pKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYWJvcnQoKTogdm9pZCB7XG4gICAgdGhpcy5kaXNwYXRjaEFjdGlvblR5cGUoTmdzc21UcmVlQWN0aW9uVHlwZS5hYm9ydFRyZWVOb2Rlc1NlYXJjaCk7XG4gIH1cblxuICBwcml2YXRlIHZhbGlkYXRlZFJlZ2V4KGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcbiAgICBjb25zdCByZXN1bHQgPSBkZWZhdWx0UmVnZXhFZGl0b3JWYWxpZGF0b3IudmFsaWRhdGVQYXR0ZXJuKGNvbnRyb2wudmFsdWUpO1xuICAgIGlmIChyZXN1bHQuaXNWYWxpZCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHJlZ2V4OiByZXN1bHQuZXJyb3JcbiAgICB9O1xuICB9XG59XG4iLCI8aDEgbWF0LWRpYWxvZy10aXRsZT5UcmVlIHNlYXJjaCBkaWFsb2c8L2gxPlxuPG1hdC1kaWFsb2ctY29udGVudCBjbGFzcz1cImZsZXgtY29sdW1uLXN0cmV0Y2ggZnhGbGV4XCI+XG4gICAgPG1hdC1jYXJkIGNsYXNzPVwiZmxleC1jb2x1bW4tc3RyZXRjaFwiPlxuICAgICAgICA8bWF0LWNhcmQtY29udGVudCBjbGFzcz1cImZsZXgtcm93LWNlbnRlclwiPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwid2l0aC1tYXJnaW4tcmlnaHQtMTIgZnhGbGV4XCI+XG4gICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5TdGFydHMgc2VhcmNoIGluPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHJlYWRvbmx5IFtmb3JtQ29udHJvbF09XCJzZWFyY2hSb290UGF0aENvbnRyb2xcIj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImZ4RmxleCB3aXRoLW1hcmdpbi1yaWdodC0xMlwiPlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+U2VhcmNoIHBhdHRlcm48L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgW2Zvcm1Db250cm9sXT1cInNlYXJjaFBhdHRlcm5Db250cm9sXCI+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj1cInNlYXJjaFBhdHRlcm5Db250cm9sLmVycm9ycz8uWydyZWdleCddXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7c2VhcmNoUGF0dGVybkNvbnRyb2wuZXJyb3JzPy5bJ3JlZ2V4J119fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICAgICAgICAgICAgPGJ1dHRvbiBtYXQtc3Ryb2tlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgW2Rpc2FibGVkXT1cInNlYXJjaFBhdHRlcm5Db250cm9sLmludmFsaWRcIiAoY2xpY2spPVwic2VhcmNoKClcIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwiKHNlYXJjaFN0YXR1cyQgfCBhc3luYykgIT09IHNlYXJjaFN0YXR1cy5pblByb2dyZXNzXCI+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiZmEtc29saWQgZmEtbWFnbmlmeWluZy1nbGFzc1wiPjwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgU2VhcmNoXG4gICAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj1cImFjY2VudFwiIChjbGljayk9XCJhYm9ydCgpXCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cIihzZWFyY2hTdGF0dXMkIHwgYXN5bmMpID09PSBzZWFyY2hTdGF0dXMuaW5Qcm9ncmVzc1wiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImZhLXNvbGlkIGZhLWJhblwiPjwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgQWJvcnRcbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L21hdC1jYXJkLWNvbnRlbnQ+XG4gICAgICAgIDxtYXQtY2FyZC1mb290ZXIgY2xhc3M9XCJmbGV4LXJvdy1jZW50ZXJcIiAqbmdJZj1cIihzZWFyY2hTdGF0dXMkIHwgYXN5bmMpID09PSBzZWFyY2hTdGF0dXMuaW5Qcm9ncmVzc1wiPlxuICAgICAgICAgICAgPG1hdC1zcGlubmVyIFtkaWFtZXRlcl09XCIyMFwiPjwvbWF0LXNwaW5uZXI+XG4gICAgICAgICAgICB7eyBjdXJyZW50U2VhcmNoZWRQYXRoJCB8IGFzeW5jIH19XG4gICAgICAgIDwvbWF0LWNhcmQtZm9vdGVyPlxuICAgIDwvbWF0LWNhcmQ+XG4gICAgPG1hdC1jYXJkIGNsYXNzPVwiZmxleC1jb2x1bW4tc3RyZXRjaCBmeEZsZXggd2l0aC1tYXJnaW4tdG9wLThcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAjcmVzdWx0c1ZpZXdlckNvbnRhaW5lcj48L25nLWNvbnRhaW5lcj5cbiAgICA8L21hdC1jYXJkPlxuPC9tYXQtZGlhbG9nLWNvbnRlbnQ+XG48bWF0LWRpYWxvZy1hY3Rpb25zIGNsYXNzPVwiZmxleC1yb3ctY2VudGVyXCI+XG4gICAgPHNwYW4gY2xhc3M9XCJmeEZsZXhcIj48L3NwYW4+XG4gICAgPGJ1dHRvbiBtYXQtYnV0dG9uIChjbGljayk9XCJjbG9zZSgpXCI+Q2xvc2U8L2J1dHRvbj5cbjwvbWF0LWRpYWxvZy1hY3Rpb25zPiJdfQ==
|
|
@@ -10,36 +10,40 @@ export class TreeNodeLoadingEffect {
|
|
|
10
10
|
constructor(dataServices, logger) {
|
|
11
11
|
this.dataServices = dataServices;
|
|
12
12
|
this.logger = logger;
|
|
13
|
-
this.processedActions = [
|
|
13
|
+
this.processedActions = [
|
|
14
|
+
NgssmTreeActionType.expandNode,
|
|
15
|
+
NgssmTreeActionType.selectNode,
|
|
16
|
+
NgssmTreeActionType.loadChildrenOfNode
|
|
17
|
+
];
|
|
14
18
|
}
|
|
15
19
|
processAction(store, state, action) {
|
|
16
|
-
const
|
|
17
|
-
if (!selectNgssmTreeState(state).trees[
|
|
18
|
-
this.logger.error(`Trying to process action for tree not initialized: ${
|
|
20
|
+
const treeNodeAction = action;
|
|
21
|
+
if (!selectNgssmTreeState(state).trees[treeNodeAction.treeId]) {
|
|
22
|
+
this.logger.error(`Trying to process action for tree not initialized: ${treeNodeAction.treeId}.`);
|
|
19
23
|
return;
|
|
20
24
|
}
|
|
21
|
-
const treeType = selectNgssmTreeState(state).trees[
|
|
25
|
+
const treeType = selectNgssmTreeState(state).trees[treeNodeAction.treeId].type;
|
|
22
26
|
const dataService = (this.dataServices ?? []).find((d) => d.treeType === treeType);
|
|
23
27
|
if (!dataService) {
|
|
24
|
-
this.logger.error(`Trying to process action for tree with no data service: ${
|
|
28
|
+
this.logger.error(`Trying to process action for tree with no data service: ${treeNodeAction.treeId} / ${treeType}.`);
|
|
25
29
|
return;
|
|
26
30
|
}
|
|
27
|
-
const node = selectNgssmTreeState(state).trees[
|
|
31
|
+
const node = selectNgssmTreeState(state).trees[treeNodeAction.treeId].nodes.find((n) => n.node.nodeId === treeNodeAction.nodeId);
|
|
28
32
|
if (node?.status !== DataStatus.loading) {
|
|
29
33
|
return;
|
|
30
34
|
}
|
|
31
|
-
dataService.load(
|
|
32
|
-
next: (value) => store.dispatchAction(new RegisterNodesAction(DataStatus.loaded,
|
|
35
|
+
dataService.load(treeNodeAction.treeId, treeNodeAction.nodeId).subscribe({
|
|
36
|
+
next: (value) => store.dispatchAction(new RegisterNodesAction(DataStatus.loaded, treeNodeAction.treeId, treeNodeAction.nodeId, value)),
|
|
33
37
|
error: (error) => {
|
|
34
|
-
this.logger.error(`Unable to load children nodes for tree '${
|
|
35
|
-
store.dispatchAction(new RegisterNodesAction(DataStatus.error,
|
|
38
|
+
this.logger.error(`Unable to load children nodes for tree '${treeNodeAction.treeId}' and node '${treeNodeAction.nodeId}'`, error);
|
|
39
|
+
store.dispatchAction(new RegisterNodesAction(DataStatus.error, treeNodeAction.treeId, treeNodeAction.nodeId));
|
|
36
40
|
}
|
|
37
41
|
});
|
|
38
42
|
}
|
|
39
43
|
}
|
|
40
|
-
TreeNodeLoadingEffect.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.
|
|
41
|
-
TreeNodeLoadingEffect.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.
|
|
42
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.
|
|
44
|
+
TreeNodeLoadingEffect.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.0", ngImport: i0, type: TreeNodeLoadingEffect, deps: [{ token: NGSSM_TREE_DATA_SERVICE, optional: true }, { token: i1.Logger }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
45
|
+
TreeNodeLoadingEffect.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.0", ngImport: i0, type: TreeNodeLoadingEffect });
|
|
46
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.0", ngImport: i0, type: TreeNodeLoadingEffect, decorators: [{
|
|
43
47
|
type: Injectable
|
|
44
48
|
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
|
45
49
|
type: Inject,
|
|
@@ -52,4 +56,4 @@ export const treeNodeLoadingEffectProvider = {
|
|
|
52
56
|
useClass: TreeNodeLoadingEffect,
|
|
53
57
|
multi: true
|
|
54
58
|
};
|
|
55
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
59
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS1ub2RlLWxvYWRpbmcuZWZmZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmdzc20tdHJlZS9zcmMvbGliL2VmZmVjdHMvdHJlZS1ub2RlLWxvYWRpbmcuZWZmZWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBWSxNQUFNLGVBQWUsQ0FBQztBQUV2RSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDL0MsT0FBTyxFQUFnQyxZQUFZLEVBQVUsTUFBTSxhQUFhLENBQUM7QUFFakYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLG1CQUFtQixFQUFrQixNQUFNLFlBQVksQ0FBQztBQUN0RixPQUFPLEVBQXdCLHVCQUF1QixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLFVBQVUsQ0FBQzs7O0FBR2hELE1BQU0sT0FBTyxxQkFBcUI7SUFPaEMsWUFBaUUsWUFBb0MsRUFBVSxNQUFjO1FBQTVELGlCQUFZLEdBQVosWUFBWSxDQUF3QjtRQUFVLFdBQU0sR0FBTixNQUFNLENBQVE7UUFON0cscUJBQWdCLEdBQWE7WUFDM0MsbUJBQW1CLENBQUMsVUFBVTtZQUM5QixtQkFBbUIsQ0FBQyxVQUFVO1lBQzlCLG1CQUFtQixDQUFDLGtCQUFrQjtTQUN2QyxDQUFDO0lBRThILENBQUM7SUFFMUgsYUFBYSxDQUFDLEtBQVksRUFBRSxLQUFZLEVBQUUsTUFBYztRQUM3RCxNQUFNLGNBQWMsR0FBRyxNQUF3QixDQUFDO1FBQ2hELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQzdELElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLHNEQUFzRCxjQUFjLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztZQUNsRyxPQUFPO1NBQ1I7UUFFRCxNQUFNLFFBQVEsR0FBRyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQztRQUMvRSxNQUFNLFdBQVcsR0FBRyxDQUFDLElBQUksQ0FBQyxZQUFZLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxLQUFLLFFBQVEsQ0FBQyxDQUFDO1FBQ25GLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDaEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsMkRBQTJELGNBQWMsQ0FBQyxNQUFNLE1BQU0sUUFBUSxHQUFHLENBQUMsQ0FBQztZQUNySCxPQUFPO1NBQ1I7UUFFRCxNQUFNLElBQUksR0FBRyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxLQUFLLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNqSSxJQUFJLElBQUksRUFBRSxNQUFNLEtBQUssVUFBVSxDQUFDLE9BQU8sRUFBRTtZQUN2QyxPQUFPO1NBQ1I7UUFFRCxXQUFXLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUN2RSxJQUFJLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUNkLEtBQUssQ0FBQyxjQUFjLENBQUMsSUFBSSxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLGNBQWMsQ0FBQyxNQUFNLEVBQUUsY0FBYyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztZQUN2SCxLQUFLLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRTtnQkFDZixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQywyQ0FBMkMsY0FBYyxDQUFDLE1BQU0sZUFBZSxjQUFjLENBQUMsTUFBTSxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ2xJLEtBQUssQ0FBQyxjQUFjLENBQUMsSUFBSSxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLGNBQWMsQ0FBQyxNQUFNLEVBQUUsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDaEgsQ0FBQztTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7O2tIQXBDVSxxQkFBcUIsa0JBT1osdUJBQXVCO3NIQVBoQyxxQkFBcUI7MkZBQXJCLHFCQUFxQjtrQkFEakMsVUFBVTs7MEJBUUksTUFBTTsyQkFBQyx1QkFBdUI7OzBCQUFHLFFBQVE7O0FBZ0N4RCxNQUFNLENBQUMsTUFBTSw2QkFBNkIsR0FBYTtJQUNyRCxPQUFPLEVBQUUsWUFBWTtJQUNyQixRQUFRLEVBQUUscUJBQXFCO0lBQy9CLEtBQUssRUFBRSxJQUFJO0NBQ1osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgT3B0aW9uYWwsIFByb3ZpZGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IERhdGFTdGF0dXMgfSBmcm9tICduZ3NzbS1yZW1vdGUtZGF0YSc7XG5pbXBvcnQgeyBFZmZlY3QsIFN0b3JlLCBTdGF0ZSwgQWN0aW9uLCBOR1NTTV9FRkZFQ1QsIExvZ2dlciB9IGZyb20gJ25nc3NtLXN0b3JlJztcblxuaW1wb3J0IHsgTmdzc21UcmVlQWN0aW9uVHlwZSwgUmVnaXN0ZXJOb2Rlc0FjdGlvbiwgVHJlZU5vZGVBY3Rpb24gfSBmcm9tICcuLi9hY3Rpb25zJztcbmltcG9ydCB7IE5nc3NtVHJlZURhdGFTZXJ2aWNlLCBOR1NTTV9UUkVFX0RBVEFfU0VSVklDRSB9IGZyb20gJy4uL21vZGVsJztcbmltcG9ydCB7IHNlbGVjdE5nc3NtVHJlZVN0YXRlIH0gZnJvbSAnLi4vc3RhdGUnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgVHJlZU5vZGVMb2FkaW5nRWZmZWN0IGltcGxlbWVudHMgRWZmZWN0IHtcbiAgcHVibGljIHJlYWRvbmx5IHByb2Nlc3NlZEFjdGlvbnM6IHN0cmluZ1tdID0gW1xuICAgIE5nc3NtVHJlZUFjdGlvblR5cGUuZXhwYW5kTm9kZSxcbiAgICBOZ3NzbVRyZWVBY3Rpb25UeXBlLnNlbGVjdE5vZGUsXG4gICAgTmdzc21UcmVlQWN0aW9uVHlwZS5sb2FkQ2hpbGRyZW5PZk5vZGVcbiAgXTtcblxuICBjb25zdHJ1Y3RvcihASW5qZWN0KE5HU1NNX1RSRUVfREFUQV9TRVJWSUNFKSBAT3B0aW9uYWwoKSBwcml2YXRlIGRhdGFTZXJ2aWNlczogTmdzc21UcmVlRGF0YVNlcnZpY2VbXSwgcHJpdmF0ZSBsb2dnZXI6IExvZ2dlcikge31cblxuICBwdWJsaWMgcHJvY2Vzc0FjdGlvbihzdG9yZTogU3RvcmUsIHN0YXRlOiBTdGF0ZSwgYWN0aW9uOiBBY3Rpb24pOiB2b2lkIHtcbiAgICBjb25zdCB0cmVlTm9kZUFjdGlvbiA9IGFjdGlvbiBhcyBUcmVlTm9kZUFjdGlvbjtcbiAgICBpZiAoIXNlbGVjdE5nc3NtVHJlZVN0YXRlKHN0YXRlKS50cmVlc1t0cmVlTm9kZUFjdGlvbi50cmVlSWRdKSB7XG4gICAgICB0aGlzLmxvZ2dlci5lcnJvcihgVHJ5aW5nIHRvIHByb2Nlc3MgYWN0aW9uIGZvciB0cmVlIG5vdCBpbml0aWFsaXplZDogJHt0cmVlTm9kZUFjdGlvbi50cmVlSWR9LmApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHRyZWVUeXBlID0gc2VsZWN0Tmdzc21UcmVlU3RhdGUoc3RhdGUpLnRyZWVzW3RyZWVOb2RlQWN0aW9uLnRyZWVJZF0udHlwZTtcbiAgICBjb25zdCBkYXRhU2VydmljZSA9ICh0aGlzLmRhdGFTZXJ2aWNlcyA/PyBbXSkuZmluZCgoZCkgPT4gZC50cmVlVHlwZSA9PT0gdHJlZVR5cGUpO1xuICAgIGlmICghZGF0YVNlcnZpY2UpIHtcbiAgICAgIHRoaXMubG9nZ2VyLmVycm9yKGBUcnlpbmcgdG8gcHJvY2VzcyBhY3Rpb24gZm9yIHRyZWUgd2l0aCBubyBkYXRhIHNlcnZpY2U6ICR7dHJlZU5vZGVBY3Rpb24udHJlZUlkfSAvICR7dHJlZVR5cGV9LmApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG5vZGUgPSBzZWxlY3ROZ3NzbVRyZWVTdGF0ZShzdGF0ZSkudHJlZXNbdHJlZU5vZGVBY3Rpb24udHJlZUlkXS5ub2Rlcy5maW5kKChuKSA9PiBuLm5vZGUubm9kZUlkID09PSB0cmVlTm9kZUFjdGlvbi5ub2RlSWQpO1xuICAgIGlmIChub2RlPy5zdGF0dXMgIT09IERhdGFTdGF0dXMubG9hZGluZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGRhdGFTZXJ2aWNlLmxvYWQodHJlZU5vZGVBY3Rpb24udHJlZUlkLCB0cmVlTm9kZUFjdGlvbi5ub2RlSWQpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAodmFsdWUpID0+XG4gICAgICAgIHN0b3JlLmRpc3BhdGNoQWN0aW9uKG5ldyBSZWdpc3Rlck5vZGVzQWN0aW9uKERhdGFTdGF0dXMubG9hZGVkLCB0cmVlTm9kZUFjdGlvbi50cmVlSWQsIHRyZWVOb2RlQWN0aW9uLm5vZGVJZCwgdmFsdWUpKSxcbiAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcbiAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoYFVuYWJsZSB0byBsb2FkIGNoaWxkcmVuIG5vZGVzIGZvciB0cmVlICcke3RyZWVOb2RlQWN0aW9uLnRyZWVJZH0nIGFuZCBub2RlICcke3RyZWVOb2RlQWN0aW9uLm5vZGVJZH0nYCwgZXJyb3IpO1xuICAgICAgICBzdG9yZS5kaXNwYXRjaEFjdGlvbihuZXcgUmVnaXN0ZXJOb2Rlc0FjdGlvbihEYXRhU3RhdHVzLmVycm9yLCB0cmVlTm9kZUFjdGlvbi50cmVlSWQsIHRyZWVOb2RlQWN0aW9uLm5vZGVJZCkpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCB0cmVlTm9kZUxvYWRpbmdFZmZlY3RQcm92aWRlcjogUHJvdmlkZXIgPSB7XG4gIHByb3ZpZGU6IE5HU1NNX0VGRkVDVCxcbiAgdXNlQ2xhc3M6IFRyZWVOb2RlTG9hZGluZ0VmZmVjdCxcbiAgbXVsdGk6IHRydWVcbn07XG4iXX0=
|