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.
Files changed (60) hide show
  1. package/esm2020/lib/actions/display-search-dialog.action.mjs +9 -0
  2. package/esm2020/lib/actions/expand-node.action.mjs +4 -5
  3. package/esm2020/lib/actions/index.mjs +6 -1
  4. package/esm2020/lib/actions/load-children-of-node.action.mjs +8 -0
  5. package/esm2020/lib/actions/ngssm-tree-action-type.mjs +7 -1
  6. package/esm2020/lib/actions/register-partial-search-results.action.mjs +9 -0
  7. package/esm2020/lib/actions/search-tree-nodes.action.mjs +8 -0
  8. package/esm2020/lib/actions/select-node.action.mjs +4 -5
  9. package/esm2020/lib/actions/tree-node-action.mjs +8 -0
  10. package/esm2020/lib/components/index.mjs +2 -1
  11. package/esm2020/lib/components/ngssm-breadcrumb/ngssm-breadcrumb.component.mjs +3 -3
  12. package/esm2020/lib/components/ngssm-tree/ngssm-tree.component.mjs +18 -8
  13. package/esm2020/lib/components/ngssm-tree-search-dialog/ngssm-tree-search-dialog.component.mjs +124 -0
  14. package/esm2020/lib/effects/tree-node-loading.effect.mjs +19 -15
  15. package/esm2020/lib/effects/tree-nodes-searching.effect.mjs +89 -0
  16. package/esm2020/lib/model/index.mjs +2 -1
  17. package/esm2020/lib/model/ngssm-tree-config.mjs +1 -1
  18. package/esm2020/lib/model/ngssm-tree-data-service.mjs +1 -1
  19. package/esm2020/lib/model/ngssm-tree-node.mjs +7 -2
  20. package/esm2020/lib/model/ngssm-tree.mjs +14 -2
  21. package/esm2020/lib/model/search-status.mjs +8 -0
  22. package/esm2020/lib/provide-ngssm-tree.mjs +6 -2
  23. package/esm2020/lib/reducers/tree-node-expand.reducer.mjs +31 -5
  24. package/esm2020/lib/reducers/tree-node-selection.reducer.mjs +3 -3
  25. package/esm2020/lib/reducers/tree-nodes-search.reducer.mjs +95 -0
  26. package/esm2020/lib/reducers/tree-nodes.reducer.mjs +8 -5
  27. package/esm2020/lib/reducers/trees.reducer.mjs +3 -3
  28. package/esm2020/lib/state/index.mjs +3 -1
  29. package/esm2020/lib/state/ngssm-tree.state.mjs +4 -2
  30. package/esm2020/lib/state/selectors.mjs +4 -0
  31. package/esm2020/lib/state/tree-nodes-search.mjs +7 -0
  32. package/fesm2015/ngssm-tree.mjs +601 -198
  33. package/fesm2015/ngssm-tree.mjs.map +1 -1
  34. package/fesm2020/ngssm-tree.mjs +588 -192
  35. package/fesm2020/ngssm-tree.mjs.map +1 -1
  36. package/lib/actions/display-search-dialog.action.d.ts +5 -0
  37. package/lib/actions/expand-node.action.d.ts +2 -3
  38. package/lib/actions/index.d.ts +5 -0
  39. package/lib/actions/load-children-of-node.action.d.ts +4 -0
  40. package/lib/actions/ngssm-tree-action-type.d.ts +7 -1
  41. package/lib/actions/register-partial-search-results.action.d.ts +8 -0
  42. package/lib/actions/search-tree-nodes.action.d.ts +6 -0
  43. package/lib/actions/select-node.action.d.ts +2 -3
  44. package/lib/actions/tree-node-action.d.ts +5 -0
  45. package/lib/components/index.d.ts +1 -0
  46. package/lib/components/ngssm-tree/ngssm-tree.component.d.ts +8 -2
  47. package/lib/components/ngssm-tree-search-dialog/ngssm-tree-search-dialog.component.d.ts +25 -0
  48. package/lib/effects/tree-nodes-searching.effect.d.ts +16 -0
  49. package/lib/model/index.d.ts +1 -0
  50. package/lib/model/ngssm-tree-config.d.ts +1 -0
  51. package/lib/model/ngssm-tree-data-service.d.ts +1 -0
  52. package/lib/model/ngssm-tree-node.d.ts +2 -0
  53. package/lib/model/ngssm-tree.d.ts +1 -0
  54. package/lib/model/search-status.d.ts +6 -0
  55. package/lib/reducers/tree-nodes-search.reducer.d.ts +10 -0
  56. package/lib/state/index.d.ts +2 -0
  57. package/lib/state/ngssm-tree.state.d.ts +2 -0
  58. package/lib/state/selectors.d.ts +4 -0
  59. package/lib/state/tree-nodes-search.d.ts +14 -0
  60. 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 { TreeAction } from './tree-action';
3
- export class ExpandNodeAction extends TreeAction {
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwYW5kLW5vZGUuYWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmdzc20tdHJlZS9zcmMvbGliL2FjdGlvbnMvZXhwYW5kLW5vZGUuYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsTUFBTSxPQUFPLGdCQUFpQixTQUFRLFVBQVU7SUFDOUMsWUFBWSxNQUFjLEVBQWtCLE1BQWM7UUFDeEQsS0FBSyxDQUFDLG1CQUFtQixDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQztRQURKLFdBQU0sR0FBTixNQUFNLENBQVE7SUFFMUQsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdzc21UcmVlQWN0aW9uVHlwZSB9IGZyb20gJy4vbmdzc20tdHJlZS1hY3Rpb24tdHlwZSc7XG5pbXBvcnQgeyBUcmVlQWN0aW9uIH0gZnJvbSAnLi90cmVlLWFjdGlvbic7XG5cbmV4cG9ydCBjbGFzcyBFeHBhbmROb2RlQWN0aW9uIGV4dGVuZHMgVHJlZUFjdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHRyZWVJZDogc3RyaW5nLCBwdWJsaWMgcmVhZG9ubHkgbm9kZUlkOiBzdHJpbmcpIHtcbiAgICBzdXBlcihOZ3NzbVRyZWVBY3Rpb25UeXBlLmV4cGFuZE5vZGUsIHRyZWVJZCk7XG4gIH1cbn1cbiJdfQ==
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
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3NzbS10cmVlL3NyYy9saWIvYWN0aW9ucy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsMEJBQTBCLENBQUM7QUFDekMsY0FBYyxzQkFBc0IsQ0FBQztBQUNyQyxjQUFjLGVBQWUsQ0FBQztBQUM5QixjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYyxzQkFBc0IsQ0FBQztBQUNyQyxjQUFjLDRCQUE0QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9uZ3NzbS10cmVlLWFjdGlvbi10eXBlJztcbmV4cG9ydCAqIGZyb20gJy4vaW5pdC1uZ3NzbS10cmVlLmFjdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL2V4cGFuZC1ub2RlLmFjdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL3RyZWUtYWN0aW9uJztcbmV4cG9ydCAqIGZyb20gJy4vcmVnaXN0ZXItbm9kZXMuYWN0aW9uJztcbmV4cG9ydCAqIGZyb20gJy4vY29sbGFwc2Utbm9kZS5hY3Rpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9zZWxlY3Qtbm9kZS5hY3Rpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9kZWxldGUtbmdzc20tdHJlZS5hY3Rpb24nO1xuIl19
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmdzc20tdHJlZS1hY3Rpb24tdHlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nc3NtLXRyZWUvc3JjL2xpYi9hY3Rpb25zL25nc3NtLXRyZWUtYWN0aW9uLXR5cGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFOLElBQVksbUJBT1g7QUFQRCxXQUFZLG1CQUFtQjtJQUM3Qiw0RUFBcUQsQ0FBQTtJQUNyRCxnRkFBeUQsQ0FBQTtJQUN6RCxzRUFBK0MsQ0FBQTtJQUMvQywwRUFBbUQsQ0FBQTtJQUNuRCw0RUFBcUQsQ0FBQTtJQUNyRCxzRUFBK0MsQ0FBQTtBQUNqRCxDQUFDLEVBUFcsbUJBQW1CLEtBQW5CLG1CQUFtQixRQU85QiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBlbnVtIE5nc3NtVHJlZUFjdGlvblR5cGUge1xuICBpbml0Tmdzc21UcmVlID0gJ1tOZ3NzbVRyZWVBY3Rpb25UeXBlXSBpbml0Tmdzc21UcmVlJyxcbiAgZGVsZXRlTmdzc21UcmVlID0gJ1tOZ3NzbVRyZWVBY3Rpb25UeXBlXSBkZWxldGVOZ3NzbVRyZWUnLFxuICBleHBhbmROb2RlID0gJ1tOZ3NzbVRyZWVBY3Rpb25UeXBlXSBleHBhbmROb2RlJyxcbiAgY29sbGFwc2VOb2RlID0gJ1tOZ3NzbVRyZWVBY3Rpb25UeXBlXSBjb2xsYXBzZU5vZGUnLFxuICByZWdpc3Rlck5vZGVzID0gJ1tOZ3NzbVRyZWVBY3Rpb25UeXBlXSByZWdpc3Rlck5vZGVzJyxcbiAgc2VsZWN0Tm9kZSA9ICdbTmdzc21UcmVlQWN0aW9uVHlwZV0gc2VsZWN0Tm9kZSdcbn1cbiJdfQ==
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 { TreeAction } from './tree-action';
3
- export class SelectNodeAction extends TreeAction {
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LW5vZGUuYWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmdzc20tdHJlZS9zcmMvbGliL2FjdGlvbnMvc2VsZWN0LW5vZGUuYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsTUFBTSxPQUFPLGdCQUFpQixTQUFRLFVBQVU7SUFDOUMsWUFBWSxNQUFjLEVBQWtCLE1BQWM7UUFDeEQsS0FBSyxDQUFDLG1CQUFtQixDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQztRQURKLFdBQU0sR0FBTixNQUFNLENBQVE7SUFFMUQsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdzc21UcmVlQWN0aW9uVHlwZSB9IGZyb20gJy4vbmdzc20tdHJlZS1hY3Rpb24tdHlwZSc7XG5pbXBvcnQgeyBUcmVlQWN0aW9uIH0gZnJvbSAnLi90cmVlLWFjdGlvbic7XG5cbmV4cG9ydCBjbGFzcyBTZWxlY3ROb2RlQWN0aW9uIGV4dGVuZHMgVHJlZUFjdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHRyZWVJZDogc3RyaW5nLCBwdWJsaWMgcmVhZG9ubHkgbm9kZUlkOiBzdHJpbmcpIHtcbiAgICBzdXBlcihOZ3NzbVRyZWVBY3Rpb25UeXBlLnNlbGVjdE5vZGUsIHRyZWVJZCk7XG4gIH1cbn1cbiJdfQ==
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
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3NzbS10cmVlL3NyYy9saWIvY29tcG9uZW50cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLG1DQUFtQyxDQUFDO0FBQ2xELGNBQWMsK0NBQStDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL25nc3NtLXRyZWUvbmdzc20tdHJlZS5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9uZ3NzbS1icmVhZGNydW1iL25nc3NtLWJyZWFkY3J1bWIuY29tcG9uZW50JztcbiJdfQ==
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.1.5", ngImport: i0, type: NgssmBreadcrumbComponent, deps: [{ token: i1.Store }], target: i0.ɵɵFactoryTarget.Component });
56
- NgssmBreadcrumbComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.5", 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.1.5", ngImport: i0, type: NgssmBreadcrumbComponent, decorators: [{
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(t);
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.1.5", ngImport: i0, type: NgssmTreeComponent, deps: [{ token: i1.Store }], target: i0.ɵɵFactoryTarget.Component });
111
- NgssmTreeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.5", 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.level * 20\" (click)=\"selectNode(item)\"\n [ngClass]=\"{'selected' : (selectedNodeId$ | async) === item.node.nodeId}\">\n <mat-icon class=\"fa-solid fa-chevron-right\" *ngIf=\"item.node.isExpandable && item.isExpanded === false && item.status !== dataStatus.loading\"\n (click)=\"$event.stopPropagation();expand(item);\"></mat-icon>\n <mat-icon class=\"fa-solid fa-chevron-down\" *ngIf=\"item.node.isExpandable && item.isExpanded && item.status !== dataStatus.loading\"\n (click)=\"$event.stopPropagation();collapse(item)\"></mat-icon>\n <mat-spinner diameter=\"20\"\n *ngIf=\"item.node.isExpandable && item.status === dataStatus.loading\"></mat-spinner>\n <span *ngIf=\"!item.node.isExpandable\" class=\"not-expandable-padding\"></span>\n\n <mat-icon class=\"{{treeConfig.iconClasses[item.node.type]}}\" color=\"primary\"></mat-icon>\n\n <span class=\"ngssm-tree-node-label\">\n {{item.node.label}}\n </span>\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}: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:not(.selected){background-color:#f3f3f3}:host .not-expandable-padding{width:24px}\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 });
112
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.5", ngImport: i0, type: NgssmTreeComponent, decorators: [{
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\" *ngIf=\"item.node.isExpandable && item.isExpanded === false && item.status !== dataStatus.loading\"\n (click)=\"$event.stopPropagation();expand(item);\"></mat-icon>\n <mat-icon class=\"fa-solid fa-chevron-down\" *ngIf=\"item.node.isExpandable && item.isExpanded && item.status !== dataStatus.loading\"\n (click)=\"$event.stopPropagation();collapse(item)\"></mat-icon>\n <mat-spinner diameter=\"20\"\n *ngIf=\"item.node.isExpandable && item.status === dataStatus.loading\"></mat-spinner>\n <span *ngIf=\"!item.node.isExpandable\" class=\"not-expandable-padding\"></span>\n\n <mat-icon class=\"{{treeConfig.iconClasses[item.node.type]}}\" color=\"primary\"></mat-icon>\n\n <span class=\"ngssm-tree-node-label\">\n {{item.node.label}}\n </span>\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}: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:not(.selected){background-color:#f3f3f3}:host .not-expandable-padding{width:24px}\n"] }]
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmdzc20tdHJlZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3NzbS10cmVlL3NyYy9saWIvY29tcG9uZW50cy9uZ3NzbS10cmVlL25nc3NtLXRyZWUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmdzc20tdHJlZS9zcmMvbGliL2NvbXBvbmVudHMvbmdzc20tdHJlZS9uZ3NzbS10cmVlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsdUJBQXVCLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDekQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM5RSxPQUFPLEVBQUUsZUFBZSxFQUE0QixNQUFNLE1BQU0sQ0FBQztBQUVqRSxPQUFPLEVBQUUsY0FBYyxFQUFTLE1BQU0sYUFBYSxDQUFDO0FBQ3BELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUcvQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDbkQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLHlCQUF5QixFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sZUFBZSxDQUFDOzs7Ozs7OztBQWVsSCxNQUFNLE9BQU8sa0JBQW1CLFNBQVEsY0FBYztJQVNwRCxZQUFZLEtBQVk7UUFDdEIsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBVEUsaUJBQVksR0FBRyxJQUFJLGVBQWUsQ0FBOEIsU0FBUyxDQUFDLENBQUM7UUFDM0UscUJBQWdCLEdBQUcsSUFBSSxlQUFlLENBQWtCLEVBQUUsQ0FBQyxDQUFDO1FBQzVELHFCQUFnQixHQUFHLElBQUksZUFBZSxDQUFxQixTQUFTLENBQUMsQ0FBQztRQUl2RSxlQUFVLEdBQUcsVUFBVSxDQUFDO0lBSXhDLENBQUM7SUFFRCxJQUFhLFVBQVUsQ0FBQyxLQUF5QztRQUMvRCxJQUFJLEtBQUssRUFBRTtZQUNULElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1lBRXJDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsQ0FBQztZQUNyQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQTJCLEVBQUUsRUFBRTtnQkFDL0gsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDNUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtvQkFDcEIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztvQkFDL0IsT0FBTztpQkFDUjtnQkFFRCxNQUFNLFVBQVUsR0FBRyxDQUFDLENBQVcsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDO2dCQUN6QyxNQUFNLE1BQU0sR0FBZ0MsTUFBTSxDQUFDLE1BQU0sSUFBSSxVQUFVLENBQUM7Z0JBQ3hFLE1BQU0sU0FBUyxHQUFnQyxNQUFNLENBQUMsU0FBUyxJQUFJLFVBQVUsQ0FBQztnQkFFOUUsTUFBTSxLQUFLLEdBQW9CLEVBQUUsQ0FBQztnQkFDbEMsSUFBSSxXQUFXLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ3JCLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxHQUFHLEVBQXlELENBQUM7Z0JBQzdGLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtvQkFDL0IsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksSUFBSSxDQUFDLENBQUMsVUFBVSxLQUFLLEtBQUssSUFBSSxXQUFXLEtBQUssQ0FBQyxDQUFDLEVBQUU7d0JBQ3ZFLFdBQVcsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDO3FCQUN2QjtvQkFFRCxJQUFJLFdBQVcsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxJQUFJLFdBQVcsRUFBRTt3QkFDaEQsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFOzRCQUNsQixLQUFLLENBQUMsSUFBSSxDQUFDO2dDQUNULElBQUksRUFBRSxDQUFDO2dDQUNQLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQzs2QkFDN0IsQ0FBQyxDQUFDOzRCQUNILG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7eUJBQ3hFO3FCQUNGO29CQUVELElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLElBQUksQ0FBQyxDQUFDLEtBQUssSUFBSSxXQUFXLEVBQUU7d0JBQ2pELFdBQVcsR0FBRyxDQUFDLENBQUMsVUFBVSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7cUJBQ3BEO29CQUVELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRTt3QkFDM0MsbUJBQW1CLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztxQkFDekU7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7Z0JBRUgsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFFbEMsSUFBSSxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztnQkFDckMsSUFBSSxDQUFDLFlBQVksRUFBRTtvQkFDakIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztpQkFDdkM7cUJBQU07b0JBQ0wsT0FBTyxZQUFZLEVBQUU7d0JBQ25CLE1BQU0sSUFBSSxHQUFHLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQzt3QkFDbkQsSUFBSSxJQUFJLEVBQUUsV0FBVyxLQUFLLElBQUksRUFBRTs0QkFDOUIsWUFBWSxHQUFHLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQzt5QkFDN0M7NkJBQU07NEJBQ0wsTUFBTTt5QkFDUDtxQkFDRjtvQkFFRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO2lCQUMxQztZQUNILENBQUMsQ0FBQyxDQUFDO1NBQ0o7SUFDSCxDQUFDO0lBRUQsSUFBVyxXQUFXO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUMxQyxDQUFDO0lBRUQsSUFBVyxlQUFlO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzlDLENBQUM7SUFFRCxJQUFXLGVBQWU7UUFDeEIsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDOUMsQ0FBQztJQUVNLFNBQVMsQ0FBQyxDQUFTLEVBQUUsSUFBbUI7UUFDN0MsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDL0IsQ0FBQztJQUVNLE1BQU0sQ0FBQyxJQUFtQjtRQUMvQixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxFQUFFLE1BQU0sQ0FBQztRQUNwRCxJQUFJLE1BQU0sRUFBRTtZQUNWLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1NBQ3JFO0lBQ0gsQ0FBQztJQUVNLFFBQVEsQ0FBQyxJQUFtQjtRQUNqQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxFQUFFLE1BQU0sQ0FBQztRQUNwRCxJQUFJLE1BQU0sRUFBRTtZQUNWLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1NBQ3ZFO0lBQ0gsQ0FBQztJQUVNLFVBQVUsQ0FBQyxJQUFtQjtRQUNuQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxFQUFFLE1BQU0sQ0FBQztRQUNwRCxJQUFJLE1BQU0sRUFBRTtZQUNWLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1NBQ3JFO0lBQ0gsQ0FBQztJQUVNLG1CQUFtQixDQUFDLElBQW1CO1FBQzVDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLEVBQUUsTUFBTSxDQUFDO1FBQ3BELElBQUksTUFBTSxFQUFFO1lBQ1YsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLHlCQUF5QixDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7U0FDOUU7SUFDSCxDQUFDOzsrR0F2SFUsa0JBQWtCO21HQUFsQixrQkFBa0IsbUlDNUIvQiwwN0RBNEJXLHduQkRMQyxZQUFZLHFSQUFFLGVBQWUsMmpCQUFFLGFBQWEsME5BQUUsYUFBYSxtTEFBRSx3QkFBd0I7MkZBS3BGLGtCQUFrQjtrQkFSOUIsU0FBUzsrQkFDRSxZQUFZLGNBQ1YsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLHdCQUF3QixDQUFDLG1CQUcvRSx1QkFBdUIsQ0FBQyxNQUFNOzRGQWVsQyxVQUFVO3NCQUF0QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBTY3JvbGxpbmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jZGsvc2Nyb2xsaW5nJztcbmltcG9ydCB7IE1hdENhcmRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jYXJkJztcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcbmltcG9ydCB7IE1hdFByb2dyZXNzU3Bpbm5lck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Byb2dyZXNzLXNwaW5uZXInO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgTmdTc21Db21wb25lbnQsIFN0b3JlIH0gZnJvbSAnbmdzc20tc3RvcmUnO1xuaW1wb3J0IHsgRGF0YVN0YXR1cyB9IGZyb20gJ25nc3NtLXJlbW90ZS1kYXRhJztcblxuaW1wb3J0IHsgTmdzc21UcmVlLCBOZ3NzbVRyZWVDb25maWcsIE5nc3NtVHJlZU5vZGUsIE5vZGVEYXRhIH0gZnJvbSAnLi4vLi4vbW9kZWwnO1xuaW1wb3J0IHsgc2VsZWN0Tmdzc21UcmVlU3RhdGUgfSBmcm9tICcuLi8uLi9zdGF0ZSc7XG5pbXBvcnQgeyBDb2xsYXBzZU5vZGVBY3Rpb24sIERpc3BsYXlTZWFyY2hEaWFsb2dBY3Rpb24sIEV4cGFuZE5vZGVBY3Rpb24sIFNlbGVjdE5vZGVBY3Rpb24gfSBmcm9tICcuLi8uLi9hY3Rpb25zJztcblxuaW50ZXJmYWNlIERpc3BsYXllZE5vZGUge1xuICBub2RlOiBOZ3NzbVRyZWVOb2RlO1xuICBjYW5TZWFyY2g6IGJvb2xlYW47XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ25nc3NtLXRyZWUnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBTY3JvbGxpbmdNb2R1bGUsIE1hdENhcmRNb2R1bGUsIE1hdEljb25Nb2R1bGUsIE1hdFByb2dyZXNzU3Bpbm5lck1vZHVsZV0sXG4gIHRlbXBsYXRlVXJsOiAnLi9uZ3NzbS10cmVlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbmdzc20tdHJlZS5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBOZ3NzbVRyZWVDb21wb25lbnQgZXh0ZW5kcyBOZ1NzbUNvbXBvbmVudCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RyZWVDb25maWckID0gbmV3IEJlaGF2aW9yU3ViamVjdDxOZ3NzbVRyZWVDb25maWcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rpc3BsYXllZEl0ZW1zJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8RGlzcGxheWVkTm9kZVtdPihbXSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3NlbGVjdGVkTm9kZUlkJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuXG4gIHByaXZhdGUgdHJlZVN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uIHwgdW5kZWZpbmVkO1xuXG4gIHB1YmxpYyByZWFkb25seSBkYXRhU3RhdHVzID0gRGF0YVN0YXR1cztcblxuICBjb25zdHJ1Y3RvcihzdG9yZTogU3RvcmUpIHtcbiAgICBzdXBlcihzdG9yZSk7XG4gIH1cblxuICBASW5wdXQoKSBzZXQgdHJlZUNvbmZpZyh2YWx1ZTogTmdzc21UcmVlQ29uZmlnIHwgdW5kZWZpbmVkIHwgbnVsbCkge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy5fdHJlZUNvbmZpZyQubmV4dCh7IC4uLnZhbHVlIH0pO1xuXG4gICAgICB0aGlzLnRyZWVTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICB0aGlzLnRyZWVTdWJzY3JpcHRpb24gPSB0aGlzLndhdGNoKChzKSA9PiBzZWxlY3ROZ3NzbVRyZWVTdGF0ZShzKS50cmVlc1t2YWx1ZS50cmVlSWRdKS5zdWJzY3JpYmUoKHRyZWU6IE5nc3NtVHJlZSB8IHVuZGVmaW5lZCkgPT4ge1xuICAgICAgICBjb25zdCBjb25maWcgPSB0aGlzLl90cmVlQ29uZmlnJC5nZXRWYWx1ZSgpO1xuICAgICAgICBpZiAoIXRyZWUgfHwgIWNvbmZpZykge1xuICAgICAgICAgIHRoaXMuX2Rpc3BsYXllZEl0ZW1zJC5uZXh0KFtdKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBhbHdheXNUcnVlID0gKF86IE5vZGVEYXRhKSA9PiB0cnVlO1xuICAgICAgICBjb25zdCBmaWx0ZXI6IChub2RlOiBOb2RlRGF0YSkgPT4gYm9vbGVhbiA9IGNvbmZpZy5maWx0ZXIgPz8gYWx3YXlzVHJ1ZTtcbiAgICAgICAgY29uc3QgY2FuU2VhcmNoOiAobm9kZTogTm9kZURhdGEpID0+IGJvb2xlYW4gPSBjb25maWcuY2FuU2VhcmNoID8/IGFsd2F5c1RydWU7XG5cbiAgICAgICAgY29uc3QgaXRlbXM6IERpc3BsYXllZE5vZGVbXSA9IFtdO1xuICAgICAgICBsZXQgaGlkZGVuTGV2ZWwgPSAtMTtcbiAgICAgICAgY29uc3Qgbm9kZXNUb0ZpbmRTZWxlY3RlZCA9IG5ldyBNYXA8c3RyaW5nLCB7IGlzRGlzcGxheWVkOiBib29sZWFuOyBub2RlOiBOZ3NzbVRyZWVOb2RlIH0+KCk7XG4gICAgICAgICh0cmVlLm5vZGVzID8/IFtdKS5mb3JFYWNoKCh0KSA9PiB7XG4gICAgICAgICAgaWYgKHQubm9kZS5pc0V4cGFuZGFibGUgJiYgdC5pc0V4cGFuZGVkID09PSBmYWxzZSAmJiBoaWRkZW5MZXZlbCA9PT0gLTEpIHtcbiAgICAgICAgICAgIGhpZGRlbkxldmVsID0gdC5sZXZlbDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoaGlkZGVuTGV2ZWwgPT09IC0xIHx8IHQubGV2ZWwgPD0gaGlkZGVuTGV2ZWwpIHtcbiAgICAgICAgICAgIGlmIChmaWx0ZXIodC5ub2RlKSkge1xuICAgICAgICAgICAgICBpdGVtcy5wdXNoKHtcbiAgICAgICAgICAgICAgICBub2RlOiB0LFxuICAgICAgICAgICAgICAgIGNhblNlYXJjaDogY2FuU2VhcmNoKHQubm9kZSlcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIG5vZGVzVG9GaW5kU2VsZWN0ZWQuc2V0KHQubm9kZS5ub2RlSWQsIHsgaXNEaXNwbGF5ZWQ6IHRydWUsIG5vZGU6IHQgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHQubm9kZS5pc0V4cGFuZGFibGUgJiYgdC5sZXZlbCA8PSBoaWRkZW5MZXZlbCkge1xuICAgICAgICAgICAgaGlkZGVuTGV2ZWwgPSB0LmlzRXhwYW5kZWQgPT09IHRydWUgPyAtMSA6IHQubGV2ZWw7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCFub2Rlc1RvRmluZFNlbGVjdGVkLmhhcyh0Lm5vZGUubm9kZUlkKSkge1xuICAgICAgICAgICAgbm9kZXNUb0ZpbmRTZWxlY3RlZC5zZXQodC5ub2RlLm5vZGVJZCwgeyBpc0Rpc3BsYXllZDogZmFsc2UsIG5vZGU6IHQgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9kaXNwbGF5ZWRJdGVtcyQubmV4dChpdGVtcyk7XG5cbiAgICAgICAgbGV0IHNlbGVjdGVkTm9kZSA9IHRyZWUuc2VsZWN0ZWROb2RlO1xuICAgICAgICBpZiAoIXNlbGVjdGVkTm9kZSkge1xuICAgICAgICAgIHRoaXMuX3NlbGVjdGVkTm9kZUlkJC5uZXh0KHVuZGVmaW5lZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgd2hpbGUgKHNlbGVjdGVkTm9kZSkge1xuICAgICAgICAgICAgY29uc3QgaXRlbSA9IG5vZGVzVG9GaW5kU2VsZWN0ZWQuZ2V0KHNlbGVjdGVkTm9kZSk7XG4gICAgICAgICAgICBpZiAoaXRlbT8uaXNEaXNwbGF5ZWQgIT09IHRydWUpIHtcbiAgICAgICAgICAgICAgc2VsZWN0ZWROb2RlID0gaXRlbT8ubm9kZS5ub2RlLnBhcmVudE5vZGVJZDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuX3NlbGVjdGVkTm9kZUlkJC5uZXh0KHNlbGVjdGVkTm9kZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXQgdHJlZUNvbmZpZyQoKTogT2JzZXJ2YWJsZTxOZ3NzbVRyZWVDb25maWcgfCB1bmRlZmluZWQ+IHtcbiAgICByZXR1cm4gdGhpcy5fdHJlZUNvbmZpZyQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGRpc3BsYXllZEl0ZW1zJCgpOiBPYnNlcnZhYmxlPERpc3BsYXllZE5vZGVbXT4ge1xuICAgIHJldHVybiB0aGlzLl9kaXNwbGF5ZWRJdGVtcyQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHNlbGVjdGVkTm9kZUlkJCgpOiBPYnNlcnZhYmxlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZE5vZGVJZCQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0SXRlbUlkKF86IG51bWJlciwgbm9kZTogRGlzcGxheWVkTm9kZSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIG5vZGUubm9kZS5ub2RlLm5vZGVJZDtcbiAgfVxuXG4gIHB1YmxpYyBleHBhbmQobm9kZTogTmdzc21UcmVlTm9kZSk6IHZvaWQge1xuICAgIGNvbnN0IHRyZWVJZCA9IHRoaXMuX3RyZWVDb25maWckLmdldFZhbHVlKCk/LnRyZWVJZDtcbiAgICBpZiAodHJlZUlkKSB7XG4gICAgICB0aGlzLmRpc3BhdGNoQWN0aW9uKG5ldyBFeHBhbmROb2RlQWN0aW9uKHRyZWVJZCwgbm9kZS5ub2RlLm5vZGVJZCkpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBjb2xsYXBzZShub2RlOiBOZ3NzbVRyZWVOb2RlKTogdm9pZCB7XG4gICAgY29uc3QgdHJlZUlkID0gdGhpcy5fdHJlZUNvbmZpZyQuZ2V0VmFsdWUoKT8udHJlZUlkO1xuICAgIGlmICh0cmVlSWQpIHtcbiAgICAgIHRoaXMuZGlzcGF0Y2hBY3Rpb24obmV3IENvbGxhcHNlTm9kZUFjdGlvbih0cmVlSWQsIG5vZGUubm9kZS5ub2RlSWQpKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc2VsZWN0Tm9kZShub2RlOiBOZ3NzbVRyZWVOb2RlKTogdm9pZCB7XG4gICAgY29uc3QgdHJlZUlkID0gdGhpcy5fdHJlZUNvbmZpZyQuZ2V0VmFsdWUoKT8udHJlZUlkO1xuICAgIGlmICh0cmVlSWQpIHtcbiAgICAgIHRoaXMuZGlzcGF0Y2hBY3Rpb24obmV3IFNlbGVjdE5vZGVBY3Rpb24odHJlZUlkLCBub2RlLm5vZGUubm9kZUlkKSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGRpc3BsYXlTZWFyY2hEaWFsb2cobm9kZTogTmdzc21UcmVlTm9kZSk6IHZvaWQge1xuICAgIGNvbnN0IHRyZWVJZCA9IHRoaXMuX3RyZWVDb25maWckLmdldFZhbHVlKCk/LnRyZWVJZDtcbiAgICBpZiAodHJlZUlkKSB7XG4gICAgICB0aGlzLmRpc3BhdGNoQWN0aW9uKG5ldyBEaXNwbGF5U2VhcmNoRGlhbG9nQWN0aW9uKHRyZWVJZCwgbm9kZS5ub2RlLm5vZGVJZCkpO1xuICAgIH1cbiAgfVxufVxuIiwiPG1hdC1jYXJkIGNsYXNzPVwiZmxleC1jb2x1bW4tc3RyZXRjaCBmeEZsZXhcIj5cbiAgICA8bWF0LWNhcmQtY29udGVudCBjbGFzcz1cImZsZXgtY29sdW1uLXN0cmV0Y2ggZnhGbGV4XCIgKm5nSWY9XCIodHJlZUNvbmZpZyQgfCBhc3luYykgYXMgdHJlZUNvbmZpZ1wiPlxuICAgICAgICA8Y2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0IGl0ZW1TaXplPVwiMzBcIiBjbGFzcz1cImZ4RmxleFwiPlxuICAgICAgICAgICAgPGRpdiAqY2RrVmlydHVhbEZvcj1cImxldCBpdGVtIG9mIGRpc3BsYXllZEl0ZW1zJCB8IGFzeW5jOyB0cmFja0J5OiBnZXRJdGVtSWRcIiBjbGFzcz1cIm5nc3NtLXRyZWUtbm9kZVwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLnBhZGRpbmctbGVmdC5weF09XCJpdGVtLm5vZGUubGV2ZWwgKiAyMFwiIChjbGljayk9XCJzZWxlY3ROb2RlKGl0ZW0ubm9kZSlcIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnc2VsZWN0ZWQnIDogKHNlbGVjdGVkTm9kZUlkJCB8IGFzeW5jKSA9PT0gaXRlbS5ub2RlLm5vZGUubm9kZUlkfVwiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImZhLXNvbGlkIGZhLWNoZXZyb24tcmlnaHRcIlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIml0ZW0ubm9kZS5ub2RlLmlzRXhwYW5kYWJsZSAmJiBpdGVtLm5vZGUuaXNFeHBhbmRlZCA9PT0gZmFsc2UgJiYgaXRlbS5ub2RlLnN0YXR1cyAhPT0gZGF0YVN0YXR1cy5sb2FkaW5nXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtleHBhbmQoaXRlbS5ub2RlKTtcIj48L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImZhLXNvbGlkIGZhLWNoZXZyb24tZG93blwiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXRlbS5ub2RlLm5vZGUuaXNFeHBhbmRhYmxlICYmIGl0ZW0ubm9kZS5pc0V4cGFuZGVkICYmIGl0ZW0ubm9kZS5zdGF0dXMgIT09IGRhdGFTdGF0dXMubG9hZGluZ1wiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7Y29sbGFwc2UoaXRlbS5ub2RlKVwiPjwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPG1hdC1zcGlubmVyIGRpYW1ldGVyPVwiMjBcIlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIml0ZW0ubm9kZS5ub2RlLmlzRXhwYW5kYWJsZSAmJiBpdGVtLm5vZGUuc3RhdHVzID09PSBkYXRhU3RhdHVzLmxvYWRpbmdcIj48L21hdC1zcGlubmVyPlxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWl0ZW0ubm9kZS5ub2RlLmlzRXhwYW5kYWJsZVwiIGNsYXNzPVwibm90LWV4cGFuZGFibGUtcGFkZGluZ1wiPjwvc3Bhbj5cblxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cInt7dHJlZUNvbmZpZy5pY29uQ2xhc3Nlc1tpdGVtLm5vZGUubm9kZS50eXBlXX19XCIgY29sb3I9XCJwcmltYXJ5XCI+PC9tYXQtaWNvbj5cblxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibmdzc20tdHJlZS1ub2RlLWxhYmVsXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7aXRlbS5ub2RlLm5vZGUubGFiZWx9fVxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZ4RmxleFwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhLXNvbGlkIGZhLW1hZ25pZnlpbmctZ2xhc3Mgc2VhcmNoLWljb25cIiAqbmdJZj1cIml0ZW0uY2FuU2VhcmNoXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtkaXNwbGF5U2VhcmNoRGlhbG9nKGl0ZW0ubm9kZSlcIj5cbiAgICAgICAgICAgICAgICA8L2k+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9jZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQ+XG4gICAgPC9tYXQtY2FyZC1jb250ZW50PlxuPC9tYXQtY2FyZD4iXX0=
@@ -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 = [NgssmTreeActionType.expandNode, NgssmTreeActionType.selectNode];
13
+ this.processedActions = [
14
+ NgssmTreeActionType.expandNode,
15
+ NgssmTreeActionType.selectNode,
16
+ NgssmTreeActionType.loadChildrenOfNode
17
+ ];
14
18
  }
15
19
  processAction(store, state, action) {
16
- const expandNodeAction = action;
17
- if (!selectNgssmTreeState(state).trees[expandNodeAction.treeId]) {
18
- this.logger.error(`Trying to process action for tree not initialized: ${expandNodeAction.treeId}.`);
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[expandNodeAction.treeId].type;
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: ${expandNodeAction.treeId} / ${treeType}.`);
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[expandNodeAction.treeId].nodes.find((n) => n.node.nodeId === expandNodeAction.nodeId);
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(expandNodeAction.treeId, expandNodeAction.nodeId).subscribe({
32
- next: (value) => store.dispatchAction(new RegisterNodesAction(DataStatus.loaded, expandNodeAction.treeId, expandNodeAction.nodeId, value)),
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 '${expandNodeAction.treeId}' and node '${expandNodeAction.nodeId}'`, error);
35
- store.dispatchAction(new RegisterNodesAction(DataStatus.error, expandNodeAction.treeId, expandNodeAction.nodeId));
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.1.5", ngImport: i0, type: TreeNodeLoadingEffect, deps: [{ token: NGSSM_TREE_DATA_SERVICE, optional: true }, { token: i1.Logger }], target: i0.ɵɵFactoryTarget.Injectable });
41
- TreeNodeLoadingEffect.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.1.5", ngImport: i0, type: TreeNodeLoadingEffect });
42
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.5", ngImport: i0, type: TreeNodeLoadingEffect, decorators: [{
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS1ub2RlLWxvYWRpbmcuZWZmZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmdzc20tdHJlZS9zcmMvbGliL2VmZmVjdHMvdHJlZS1ub2RlLWxvYWRpbmcuZWZmZWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBWSxNQUFNLGVBQWUsQ0FBQztBQUV2RSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDL0MsT0FBTyxFQUFnQyxZQUFZLEVBQVUsTUFBTSxhQUFhLENBQUM7QUFFakYsT0FBTyxFQUFvQixtQkFBbUIsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN4RixPQUFPLEVBQXdCLHVCQUF1QixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLFVBQVUsQ0FBQzs7O0FBR2hELE1BQU0sT0FBTyxxQkFBcUI7SUFHaEMsWUFBaUUsWUFBb0MsRUFBVSxNQUFjO1FBQTVELGlCQUFZLEdBQVosWUFBWSxDQUF3QjtRQUFVLFdBQU0sR0FBTixNQUFNLENBQVE7UUFGN0cscUJBQWdCLEdBQWEsQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLEVBQUUsbUJBQW1CLENBQUMsVUFBVSxDQUFDLENBQUM7SUFFa0IsQ0FBQztJQUUxSCxhQUFhLENBQUMsS0FBWSxFQUFFLEtBQVksRUFBRSxNQUFjO1FBQzdELE1BQU0sZ0JBQWdCLEdBQUcsTUFBMEIsQ0FBQztRQUNwRCxJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQy9ELElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLHNEQUFzRCxnQkFBZ0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1lBQ3BHLE9BQU87U0FDUjtRQUVELE1BQU0sUUFBUSxHQUFHLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDakYsTUFBTSxXQUFXLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsS0FBSyxRQUFRLENBQUMsQ0FBQztRQUNuRixJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ2hCLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLDJEQUEyRCxnQkFBZ0IsQ0FBQyxNQUFNLE1BQU0sUUFBUSxHQUFHLENBQUMsQ0FBQztZQUN2SCxPQUFPO1NBQ1I7UUFFRCxNQUFNLElBQUksR0FBRyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLEtBQUssZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDckksSUFBSSxJQUFJLEVBQUUsTUFBTSxLQUFLLFVBQVUsQ0FBQyxPQUFPLEVBQUU7WUFDdkMsT0FBTztTQUNSO1FBRUQsV0FBVyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUMsU0FBUyxDQUFDO1lBQzNFLElBQUksRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQ2QsS0FBSyxDQUFDLGNBQWMsQ0FBQyxJQUFJLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztZQUMzSCxLQUFLLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRTtnQkFDZixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FDZiwyQ0FBMkMsZ0JBQWdCLENBQUMsTUFBTSxlQUFlLGdCQUFnQixDQUFDLE1BQU0sR0FBRyxFQUMzRyxLQUFLLENBQ04sQ0FBQztnQkFDRixLQUFLLENBQUMsY0FBYyxDQUFDLElBQUksbUJBQW1CLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUNwSCxDQUFDO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7a0hBbkNVLHFCQUFxQixrQkFHWix1QkFBdUI7c0hBSGhDLHFCQUFxQjsyRkFBckIscUJBQXFCO2tCQURqQyxVQUFVOzswQkFJSSxNQUFNOzJCQUFDLHVCQUF1Qjs7MEJBQUcsUUFBUTs7QUFtQ3hELE1BQU0sQ0FBQyxNQUFNLDZCQUE2QixHQUFhO0lBQ3JELE9BQU8sRUFBRSxZQUFZO0lBQ3JCLFFBQVEsRUFBRSxxQkFBcUI7SUFDL0IsS0FBSyxFQUFFLElBQUk7Q0FDWixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBPcHRpb25hbCwgUHJvdmlkZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgRGF0YVN0YXR1cyB9IGZyb20gJ25nc3NtLXJlbW90ZS1kYXRhJztcbmltcG9ydCB7IEVmZmVjdCwgU3RvcmUsIFN0YXRlLCBBY3Rpb24sIE5HU1NNX0VGRkVDVCwgTG9nZ2VyIH0gZnJvbSAnbmdzc20tc3RvcmUnO1xuXG5pbXBvcnQgeyBFeHBhbmROb2RlQWN0aW9uLCBOZ3NzbVRyZWVBY3Rpb25UeXBlLCBSZWdpc3Rlck5vZGVzQWN0aW9uIH0gZnJvbSAnLi4vYWN0aW9ucyc7XG5pbXBvcnQgeyBOZ3NzbVRyZWVEYXRhU2VydmljZSwgTkdTU01fVFJFRV9EQVRBX1NFUlZJQ0UgfSBmcm9tICcuLi9tb2RlbCc7XG5pbXBvcnQgeyBzZWxlY3ROZ3NzbVRyZWVTdGF0ZSB9IGZyb20gJy4uL3N0YXRlJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFRyZWVOb2RlTG9hZGluZ0VmZmVjdCBpbXBsZW1lbnRzIEVmZmVjdCB7XG4gIHB1YmxpYyByZWFkb25seSBwcm9jZXNzZWRBY3Rpb25zOiBzdHJpbmdbXSA9IFtOZ3NzbVRyZWVBY3Rpb25UeXBlLmV4cGFuZE5vZGUsIE5nc3NtVHJlZUFjdGlvblR5cGUuc2VsZWN0Tm9kZV07XG5cbiAgY29uc3RydWN0b3IoQEluamVjdChOR1NTTV9UUkVFX0RBVEFfU0VSVklDRSkgQE9wdGlvbmFsKCkgcHJpdmF0ZSBkYXRhU2VydmljZXM6IE5nc3NtVHJlZURhdGFTZXJ2aWNlW10sIHByaXZhdGUgbG9nZ2VyOiBMb2dnZXIpIHt9XG5cbiAgcHVibGljIHByb2Nlc3NBY3Rpb24oc3RvcmU6IFN0b3JlLCBzdGF0ZTogU3RhdGUsIGFjdGlvbjogQWN0aW9uKTogdm9pZCB7XG4gICAgY29uc3QgZXhwYW5kTm9kZUFjdGlvbiA9IGFjdGlvbiBhcyBFeHBhbmROb2RlQWN0aW9uO1xuICAgIGlmICghc2VsZWN0Tmdzc21UcmVlU3RhdGUoc3RhdGUpLnRyZWVzW2V4cGFuZE5vZGVBY3Rpb24udHJlZUlkXSkge1xuICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoYFRyeWluZyB0byBwcm9jZXNzIGFjdGlvbiBmb3IgdHJlZSBub3QgaW5pdGlhbGl6ZWQ6ICR7ZXhwYW5kTm9kZUFjdGlvbi50cmVlSWR9LmApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHRyZWVUeXBlID0gc2VsZWN0Tmdzc21UcmVlU3RhdGUoc3RhdGUpLnRyZWVzW2V4cGFuZE5vZGVBY3Rpb24udHJlZUlkXS50eXBlO1xuICAgIGNvbnN0IGRhdGFTZXJ2aWNlID0gKHRoaXMuZGF0YVNlcnZpY2VzID8/IFtdKS5maW5kKChkKSA9PiBkLnRyZWVUeXBlID09PSB0cmVlVHlwZSk7XG4gICAgaWYgKCFkYXRhU2VydmljZSkge1xuICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoYFRyeWluZyB0byBwcm9jZXNzIGFjdGlvbiBmb3IgdHJlZSB3aXRoIG5vIGRhdGEgc2VydmljZTogJHtleHBhbmROb2RlQWN0aW9uLnRyZWVJZH0gLyAke3RyZWVUeXBlfS5gKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBub2RlID0gc2VsZWN0Tmdzc21UcmVlU3RhdGUoc3RhdGUpLnRyZWVzW2V4cGFuZE5vZGVBY3Rpb24udHJlZUlkXS5ub2Rlcy5maW5kKChuKSA9PiBuLm5vZGUubm9kZUlkID09PSBleHBhbmROb2RlQWN0aW9uLm5vZGVJZCk7XG4gICAgaWYgKG5vZGU/LnN0YXR1cyAhPT0gRGF0YVN0YXR1cy5sb2FkaW5nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZGF0YVNlcnZpY2UubG9hZChleHBhbmROb2RlQWN0aW9uLnRyZWVJZCwgZXhwYW5kTm9kZUFjdGlvbi5ub2RlSWQpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAodmFsdWUpID0+XG4gICAgICAgIHN0b3JlLmRpc3BhdGNoQWN0aW9uKG5ldyBSZWdpc3Rlck5vZGVzQWN0aW9uKERhdGFTdGF0dXMubG9hZGVkLCBleHBhbmROb2RlQWN0aW9uLnRyZWVJZCwgZXhwYW5kTm9kZUFjdGlvbi5ub2RlSWQsIHZhbHVlKSksXG4gICAgICBlcnJvcjogKGVycm9yKSA9PiB7XG4gICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKFxuICAgICAgICAgIGBVbmFibGUgdG8gbG9hZCBjaGlsZHJlbiBub2RlcyBmb3IgdHJlZSAnJHtleHBhbmROb2RlQWN0aW9uLnRyZWVJZH0nIGFuZCBub2RlICcke2V4cGFuZE5vZGVBY3Rpb24ubm9kZUlkfSdgLFxuICAgICAgICAgIGVycm9yXG4gICAgICAgICk7XG4gICAgICAgIHN0b3JlLmRpc3BhdGNoQWN0aW9uKG5ldyBSZWdpc3Rlck5vZGVzQWN0aW9uKERhdGFTdGF0dXMuZXJyb3IsIGV4cGFuZE5vZGVBY3Rpb24udHJlZUlkLCBleHBhbmROb2RlQWN0aW9uLm5vZGVJZCkpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCB0cmVlTm9kZUxvYWRpbmdFZmZlY3RQcm92aWRlcjogUHJvdmlkZXIgPSB7XG4gIHByb3ZpZGU6IE5HU1NNX0VGRkVDVCxcbiAgdXNlQ2xhc3M6IFRyZWVOb2RlTG9hZGluZ0VmZmVjdCxcbiAgbXVsdGk6IHRydWVcbn07XG4iXX0=
59
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS1ub2RlLWxvYWRpbmcuZWZmZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmdzc20tdHJlZS9zcmMvbGliL2VmZmVjdHMvdHJlZS1ub2RlLWxvYWRpbmcuZWZmZWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBWSxNQUFNLGVBQWUsQ0FBQztBQUV2RSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDL0MsT0FBTyxFQUFnQyxZQUFZLEVBQVUsTUFBTSxhQUFhLENBQUM7QUFFakYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLG1CQUFtQixFQUFrQixNQUFNLFlBQVksQ0FBQztBQUN0RixPQUFPLEVBQXdCLHVCQUF1QixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLFVBQVUsQ0FBQzs7O0FBR2hELE1BQU0sT0FBTyxxQkFBcUI7SUFPaEMsWUFBaUUsWUFBb0MsRUFBVSxNQUFjO1FBQTVELGlCQUFZLEdBQVosWUFBWSxDQUF3QjtRQUFVLFdBQU0sR0FBTixNQUFNLENBQVE7UUFON0cscUJBQWdCLEdBQWE7WUFDM0MsbUJBQW1CLENBQUMsVUFBVTtZQUM5QixtQkFBbUIsQ0FBQyxVQUFVO1lBQzlCLG1CQUFtQixDQUFDLGtCQUFrQjtTQUN2QyxDQUFDO0lBRThILENBQUM7SUFFMUgsYUFBYSxDQUFDLEtBQVksRUFBRSxLQUFZLEVBQUUsTUFBYztRQUM3RCxNQUFNLGNBQWMsR0FBRyxNQUF3QixDQUFDO1FBQ2hELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQzdELElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLHNEQUFzRCxjQUFjLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztZQUNsRyxPQUFPO1NBQ1I7UUFFRCxNQUFNLFFBQVEsR0FBRyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQztRQUMvRSxNQUFNLFdBQVcsR0FBRyxDQUFDLElBQUksQ0FBQyxZQUFZLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxLQUFLLFFBQVEsQ0FBQyxDQUFDO1FBQ25GLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDaEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsMkRBQTJELGNBQWMsQ0FBQyxNQUFNLE1BQU0sUUFBUSxHQUFHLENBQUMsQ0FBQztZQUNySCxPQUFPO1NBQ1I7UUFFRCxNQUFNLElBQUksR0FBRyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxLQUFLLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNqSSxJQUFJLElBQUksRUFBRSxNQUFNLEtBQUssVUFBVSxDQUFDLE9BQU8sRUFBRTtZQUN2QyxPQUFPO1NBQ1I7UUFFRCxXQUFXLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUN2RSxJQUFJLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUNkLEtBQUssQ0FBQyxjQUFjLENBQUMsSUFBSSxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLGNBQWMsQ0FBQyxNQUFNLEVBQUUsY0FBYyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztZQUN2SCxLQUFLLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRTtnQkFDZixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQywyQ0FBMkMsY0FBYyxDQUFDLE1BQU0sZUFBZSxjQUFjLENBQUMsTUFBTSxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ2xJLEtBQUssQ0FBQyxjQUFjLENBQUMsSUFBSSxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLGNBQWMsQ0FBQyxNQUFNLEVBQUUsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDaEgsQ0FBQztTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7O2tIQXBDVSxxQkFBcUIsa0JBT1osdUJBQXVCO3NIQVBoQyxxQkFBcUI7MkZBQXJCLHFCQUFxQjtrQkFEakMsVUFBVTs7MEJBUUksTUFBTTsyQkFBQyx1QkFBdUI7OzBCQUFHLFFBQVE7O0FBZ0N4RCxNQUFNLENBQUMsTUFBTSw2QkFBNkIsR0FBYTtJQUNyRCxPQUFPLEVBQUUsWUFBWTtJQUNyQixRQUFRLEVBQUUscUJBQXFCO0lBQy9CLEtBQUssRUFBRSxJQUFJO0NBQ1osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgT3B0aW9uYWwsIFByb3ZpZGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IERhdGFTdGF0dXMgfSBmcm9tICduZ3NzbS1yZW1vdGUtZGF0YSc7XG5pbXBvcnQgeyBFZmZlY3QsIFN0b3JlLCBTdGF0ZSwgQWN0aW9uLCBOR1NTTV9FRkZFQ1QsIExvZ2dlciB9IGZyb20gJ25nc3NtLXN0b3JlJztcblxuaW1wb3J0IHsgTmdzc21UcmVlQWN0aW9uVHlwZSwgUmVnaXN0ZXJOb2Rlc0FjdGlvbiwgVHJlZU5vZGVBY3Rpb24gfSBmcm9tICcuLi9hY3Rpb25zJztcbmltcG9ydCB7IE5nc3NtVHJlZURhdGFTZXJ2aWNlLCBOR1NTTV9UUkVFX0RBVEFfU0VSVklDRSB9IGZyb20gJy4uL21vZGVsJztcbmltcG9ydCB7IHNlbGVjdE5nc3NtVHJlZVN0YXRlIH0gZnJvbSAnLi4vc3RhdGUnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgVHJlZU5vZGVMb2FkaW5nRWZmZWN0IGltcGxlbWVudHMgRWZmZWN0IHtcbiAgcHVibGljIHJlYWRvbmx5IHByb2Nlc3NlZEFjdGlvbnM6IHN0cmluZ1tdID0gW1xuICAgIE5nc3NtVHJlZUFjdGlvblR5cGUuZXhwYW5kTm9kZSxcbiAgICBOZ3NzbVRyZWVBY3Rpb25UeXBlLnNlbGVjdE5vZGUsXG4gICAgTmdzc21UcmVlQWN0aW9uVHlwZS5sb2FkQ2hpbGRyZW5PZk5vZGVcbiAgXTtcblxuICBjb25zdHJ1Y3RvcihASW5qZWN0KE5HU1NNX1RSRUVfREFUQV9TRVJWSUNFKSBAT3B0aW9uYWwoKSBwcml2YXRlIGRhdGFTZXJ2aWNlczogTmdzc21UcmVlRGF0YVNlcnZpY2VbXSwgcHJpdmF0ZSBsb2dnZXI6IExvZ2dlcikge31cblxuICBwdWJsaWMgcHJvY2Vzc0FjdGlvbihzdG9yZTogU3RvcmUsIHN0YXRlOiBTdGF0ZSwgYWN0aW9uOiBBY3Rpb24pOiB2b2lkIHtcbiAgICBjb25zdCB0cmVlTm9kZUFjdGlvbiA9IGFjdGlvbiBhcyBUcmVlTm9kZUFjdGlvbjtcbiAgICBpZiAoIXNlbGVjdE5nc3NtVHJlZVN0YXRlKHN0YXRlKS50cmVlc1t0cmVlTm9kZUFjdGlvbi50cmVlSWRdKSB7XG4gICAgICB0aGlzLmxvZ2dlci5lcnJvcihgVHJ5aW5nIHRvIHByb2Nlc3MgYWN0aW9uIGZvciB0cmVlIG5vdCBpbml0aWFsaXplZDogJHt0cmVlTm9kZUFjdGlvbi50cmVlSWR9LmApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHRyZWVUeXBlID0gc2VsZWN0Tmdzc21UcmVlU3RhdGUoc3RhdGUpLnRyZWVzW3RyZWVOb2RlQWN0aW9uLnRyZWVJZF0udHlwZTtcbiAgICBjb25zdCBkYXRhU2VydmljZSA9ICh0aGlzLmRhdGFTZXJ2aWNlcyA/PyBbXSkuZmluZCgoZCkgPT4gZC50cmVlVHlwZSA9PT0gdHJlZVR5cGUpO1xuICAgIGlmICghZGF0YVNlcnZpY2UpIHtcbiAgICAgIHRoaXMubG9nZ2VyLmVycm9yKGBUcnlpbmcgdG8gcHJvY2VzcyBhY3Rpb24gZm9yIHRyZWUgd2l0aCBubyBkYXRhIHNlcnZpY2U6ICR7dHJlZU5vZGVBY3Rpb24udHJlZUlkfSAvICR7dHJlZVR5cGV9LmApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG5vZGUgPSBzZWxlY3ROZ3NzbVRyZWVTdGF0ZShzdGF0ZSkudHJlZXNbdHJlZU5vZGVBY3Rpb24udHJlZUlkXS5ub2Rlcy5maW5kKChuKSA9PiBuLm5vZGUubm9kZUlkID09PSB0cmVlTm9kZUFjdGlvbi5ub2RlSWQpO1xuICAgIGlmIChub2RlPy5zdGF0dXMgIT09IERhdGFTdGF0dXMubG9hZGluZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGRhdGFTZXJ2aWNlLmxvYWQodHJlZU5vZGVBY3Rpb24udHJlZUlkLCB0cmVlTm9kZUFjdGlvbi5ub2RlSWQpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAodmFsdWUpID0+XG4gICAgICAgIHN0b3JlLmRpc3BhdGNoQWN0aW9uKG5ldyBSZWdpc3Rlck5vZGVzQWN0aW9uKERhdGFTdGF0dXMubG9hZGVkLCB0cmVlTm9kZUFjdGlvbi50cmVlSWQsIHRyZWVOb2RlQWN0aW9uLm5vZGVJZCwgdmFsdWUpKSxcbiAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcbiAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoYFVuYWJsZSB0byBsb2FkIGNoaWxkcmVuIG5vZGVzIGZvciB0cmVlICcke3RyZWVOb2RlQWN0aW9uLnRyZWVJZH0nIGFuZCBub2RlICcke3RyZWVOb2RlQWN0aW9uLm5vZGVJZH0nYCwgZXJyb3IpO1xuICAgICAgICBzdG9yZS5kaXNwYXRjaEFjdGlvbihuZXcgUmVnaXN0ZXJOb2Rlc0FjdGlvbihEYXRhU3RhdHVzLmVycm9yLCB0cmVlTm9kZUFjdGlvbi50cmVlSWQsIHRyZWVOb2RlQWN0aW9uLm5vZGVJZCkpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCB0cmVlTm9kZUxvYWRpbmdFZmZlY3RQcm92aWRlcjogUHJvdmlkZXIgPSB7XG4gIHByb3ZpZGU6IE5HU1NNX0VGRkVDVCxcbiAgdXNlQ2xhc3M6IFRyZWVOb2RlTG9hZGluZ0VmZmVjdCxcbiAgbXVsdGk6IHRydWVcbn07XG4iXX0=