UNPKG

@asi-ngtools/lib

Version:

This project is a little components library, simple to use, which will help you to simplify your project.

220 lines (219 loc) 16.6 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc */ import * as tslib_1 from "tslib"; import { Injectable } from '@angular/core'; import * as nh from '../../native-helper'; var AsiTreeViewService = /** @class */ (function () { function AsiTreeViewService() { } /** * Function used to open a particular node * @param {?} nodes * @param {?} nodeFinder * @return {?} */ AsiTreeViewService.prototype.openNode = /** * Function used to open a particular node * @param {?} nodes * @param {?} nodeFinder * @return {?} */ function (nodes, nodeFinder) { var _this = this; nh.forEach(nodes, function (node) { if (_this.mustOpenNode(node, nodeFinder)) { node.openNode(); } }); }; /** * @param {?} node * @param {?} nodeFinder * @return {?} */ AsiTreeViewService.prototype.mustOpenNode = /** * @param {?} node * @param {?} nodeFinder * @return {?} */ function (node, nodeFinder) { if (node != null) { if (nodeFinder(node.data)) { node.openNode(); node.tagFound(true); return true; } else if (node.childNodes) { /** @type {?} */ var childNodes = node.childNodes.toArray(); /** @type {?} */ var openNode = false; try { for (var childNodes_1 = tslib_1.__values(childNodes), childNodes_1_1 = childNodes_1.next(); !childNodes_1_1.done; childNodes_1_1 = childNodes_1.next()) { var childNode = childNodes_1_1.value; if (this.mustOpenNode(childNode, nodeFinder)) { childNode.openNode(); openNode = true; } } } catch (e_1_1) { e_1 = { error: e_1_1 }; } finally { try { if (childNodes_1_1 && !childNodes_1_1.done && (_a = childNodes_1.return)) _a.call(childNodes_1); } finally { if (e_1) throw e_1.error; } } return openNode; } } return false; var e_1, _a; }; /** * @param {?} nodes * @return {?} */ AsiTreeViewService.prototype.closeAll = /** * @param {?} nodes * @return {?} */ function (nodes) { var _this = this; nh.forEach(nodes, function (node) { _this.closeNode(node); }); }; /** * @param {?} node * @return {?} */ AsiTreeViewService.prototype.closeNode = /** * @param {?} node * @return {?} */ function (node) { if (node) { node.closeNode(); if (node.childNodes) { node.childNodes.forEach(function (childNode) { childNode.closeNode(); }); } } }; /** * @param {?} nodes * @return {?} */ AsiTreeViewService.prototype.openAll = /** * @param {?} nodes * @return {?} */ function (nodes) { var _this = this; nh.forEach(nodes, function (node) { _this.openANode(node); }); }; /** * @param {?} node * @return {?} */ AsiTreeViewService.prototype.openANode = /** * @param {?} node * @return {?} */ function (node) { if (node) { node.openNode(); if (node.childNodes) { node.childNodes.forEach(function (childNode) { childNode.openNode(); }); } } }; /** * Function used to filter the tree-view * @param {?} nodes * @param {?} nodeName * @param {?} nodeFinder function used to know if the node must be keep * @param {?=} keepLeaves true if you want to keep the possible leafs of a matching node * @param {?=} isLeaf * @return {?} */ AsiTreeViewService.prototype.filterNodes = /** * Function used to filter the tree-view * @param {?} nodes * @param {?} nodeName * @param {?} nodeFinder function used to know if the node must be keep * @param {?=} keepLeaves true if you want to keep the possible leafs of a matching node * @param {?=} isLeaf * @return {?} */ function (nodes, nodeName, nodeFinder, keepLeaves, isLeaf) { var _this = this; nh.remove(nodes, function (nodeData) { return _this.shouldRemoveData(nodeData, nodeName, nodeFinder, keepLeaves, isLeaf); }); return nodes; }; /** * @param {?} nodeData * @param {?} nodeName * @param {?} nodeFinder * @param {?=} keepLeaves * @param {?=} isLeaf * @return {?} */ AsiTreeViewService.prototype.shouldRemoveData = /** * @param {?} nodeData * @param {?} nodeName * @param {?} nodeFinder * @param {?=} keepLeaves * @param {?=} isLeaf * @return {?} */ function (nodeData, nodeName, nodeFinder, keepLeaves, isLeaf) { var _this = this; /** @type {?} */ var childNodes = /** @type {?} */ (nh.get(nodeData, nodeName)); /** @type {?} */ var matchingLeaf = false; if (childNodes) { // Delete not matching children if (keepLeaves) { nh.remove(childNodes, function (child) { /** @type {?} */ var leaf = (isLeaf && isLeaf(child)) || (!isLeaf && nh.isEmpty(nh.get(child, nodeName))); if (!leaf) { /** @type {?} */ var removeNode = _this.shouldRemoveData(child, nodeName, nodeFinder, keepLeaves, isLeaf); matchingLeaf = matchingLeaf || !removeNode; return removeNode; } else { matchingLeaf = matchingLeaf || nodeFinder(child); return false; } }); } else { matchingLeaf = true; nh.remove(childNodes, function (child) { return _this.shouldRemoveData(child, nodeName, nodeFinder, keepLeaves, isLeaf); }); } } return (nh.isEmpty(childNodes) || !matchingLeaf) && !nodeFinder(nodeData); }; AsiTreeViewService.decorators = [ { type: Injectable } ]; return AsiTreeViewService; }()); export { AsiTreeViewService }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNpLXRyZWUtdmlldy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGFzaS1uZ3Rvb2xzL2xpYi8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnRzL2FzaS10cmVlLXZpZXcvYXNpLXRyZWUtdmlldy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEtBQUssRUFBRSxNQUFNLHFCQUFxQixDQUFDOzs7Ozs7Ozs7O0lBU2pDLHFDQUFROzs7Ozs7Y0FBQyxLQUFzQyxFQUFFLFVBQW9COztRQUMxRSxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxVQUFDLElBQThCO1lBQy9DLEVBQUUsQ0FBQyxDQUFDLEtBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDeEMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO2FBQ2pCO1NBQ0YsQ0FBQyxDQUFDOzs7Ozs7O0lBR0cseUNBQVk7Ozs7O2NBQUMsSUFBOEIsRUFBRSxVQUFvQjtRQUN2RSxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQztZQUNqQixFQUFFLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDMUIsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUNoQixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNwQixNQUFNLENBQUMsSUFBSSxDQUFDO2FBQ2I7WUFBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7O2dCQUMzQixJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDOztnQkFDM0MsSUFBSSxRQUFRLEdBQUcsS0FBSyxDQUFD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LFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDekYsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDOzt3QkFDVixJQUFJLFVBQVUsR0FBRyxLQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFDO3dCQUN4RixZQUFZLEdBQUcsWUFBWSxJQUFJLENBQUMsVUFBVSxDQUFDO3dCQUMzQyxNQUFNLENBQUMsVUFBVSxDQUFDO3FCQUNuQjtvQkFBQyxJQUFJLENBQUMsQ0FBQzt3QkFDTixZQUFZLEdBQUcsWUFBWSxJQUFJLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQzt3QkFDakQsTUFBTSxDQUFDLEtBQUssQ0FBQztxQkFDZDtpQkFDRixDQUFDLENBQUM7YUFDSjtZQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNOLFlBQVksR0FBRyxJQUFJLENBQUM7Z0JBQ3BCLEVBQUUsQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQUMsS0FBSztvQkFDMUIsTUFBTSxDQUFDLEtBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUM7aUJBQy9FLENBQUMsQ0FBQzthQUNKO1NBQ0Y7UUFDRCxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7OztnQkEzRzdFLFVBQVU7OzZCQUpYOztTQUthLGtCQUFrQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQXNpVHJlZVZpZXdOb2RlQ29tcG9uZW50IH0gZnJvbSAnLi9ub2RlL2FzaS10cmVlLXZpZXctbm9kZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgKiBhcyBuaCBmcm9tICcuLi8uLi9uYXRpdmUtaGVscGVyJztcclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIEFzaVRyZWVWaWV3U2VydmljZSB7XHJcblxyXG4gIC8qKlxyXG4gICAqIEZ1bmN0aW9uIHVzZWQgdG8gb3BlbiBhIHBhcnRpY3VsYXIgbm9kZVxyXG4gICAqIEBwYXJhbSBub2RlRmluZGVyXHJcbiAgICovXHJcbiAgcHVibGljIG9wZW5Ob2RlKG5vZGVzOiBBcnJheTxBc2lUcmVlVmlld05vZGVDb21wb25lbnQ+LCBub2RlRmluZGVyOiBGdW5jdGlvbikge1xyXG4gICAgbmguZm9yRWFjaChub2RlcywgKG5vZGU6IEFzaVRyZWVWaWV3Tm9kZUNvbXBvbmVudCkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5tdXN0T3Blbk5vZGUobm9kZSwgbm9kZUZpbmRlcikpIHtcclxuICAgICAgICBub2RlLm9wZW5Ob2RlKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBtdXN0T3Blbk5vZGUobm9kZTogQXNpVHJlZVZpZXdOb2RlQ29tcG9uZW50LCBub2RlRmluZGVyOiBGdW5jdGlvbikge1xyXG4gICAgaWYgKG5vZGUgIT0gbnVsbCkge1xyXG4gICAgICBpZiAobm9kZUZpbmRlcihub2RlLmRhdGEpKSB7XHJcbiAgICAgICAgbm9kZS5vcGVuTm9kZSgpO1xyXG4gICAgICAgIG5vZGUudGFnRm91bmQodHJ1ZSk7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH0gZWxzZSBpZiAobm9kZS5jaGlsZE5vZGVzKSB7XHJcbiAgICAgICAgbGV0IGNoaWxkTm9kZXMgPSBub2RlLmNoaWxkTm9kZXMudG9BcnJheSgpO1xyXG4gICAgICAgIGxldCBvcGVuTm9kZSA9IGZhbHNlO1xyXG4gICAgICAgIGZvciAobGV0IGNoaWxkTm9kZSBvZiBjaGlsZE5vZGVzKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5tdXN0T3Blbk5vZGUoY2hpbGROb2RlLCBub2RlRmluZGVyKSkge1xyXG4gICAgICAgICAgICBjaGlsZE5vZGUub3Blbk5vZGUoKTtcclxuICAgICAgICAgICAgb3Blbk5vZGUgPSB0cnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gb3Blbk5vZGU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjbG9zZUFsbChub2RlczogQXJyYXk8QXNpVHJlZVZpZXdOb2RlQ29tcG9uZW50Pikge1xyXG4gICAgbmguZm9yRWFjaChub2RlcywgKG5vZGU6IEFzaVRyZWVWaWV3Tm9kZUNvbXBvbmVudCkgPT4ge1xyXG4gICAgICB0aGlzLmNsb3NlTm9kZShub2RlKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjbG9zZU5vZGUobm9kZTogQXNpVHJlZVZpZXdOb2RlQ29tcG9uZW50KSB7XHJcbiAgICBpZiAobm9kZSkge1xyXG4gICAgICBub2RlLmNsb3NlTm9kZSgpO1xyXG4gICAgICBpZiAobm9kZS5jaGlsZE5vZGVzKSB7XHJcbiAgICAgICAgbm9kZS5jaGlsZE5vZGVzLmZvckVhY2goY2hpbGROb2RlID0+IHtcclxuICAgICAgICAgIGNoaWxkTm9kZS5jbG9zZU5vZGUoKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIG9wZW5BbGwobm9kZXM6IEFycmF5PEFzaVRyZWVWaWV3Tm9kZUNvbXBvbmVudD4pIHtcclxuICAgIG5oLmZvckVhY2gobm9kZXMsIChub2RlOiBBc2lUcmVlVmlld05vZGVDb21wb25lbnQpID0+IHtcclxuICAgICAgdGhpcy5vcGVuQU5vZGUobm9kZSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgb3BlbkFOb2RlKG5vZGU6IEFzaVRyZWVWaWV3Tm9kZUNvbXBvbmVudCkge1xyXG4gICAgaWYgKG5vZGUpIHtcclxuICAgICAgbm9kZS5vcGVuTm9kZSgpO1xyXG4gICAgICBpZiAobm9kZS5jaGlsZE5vZGVzKSB7XHJcbiAgICAgICAgbm9kZS5jaGlsZE5vZGVzLmZvckVhY2goY2hpbGROb2RlID0+IHtcclxuICAgICAgICAgIGNoaWxkTm9kZS5vcGVuTm9kZSgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogRnVuY3Rpb24gdXNlZCB0byBmaWx0ZXIgdGhlIHRyZWUtdmlld1xyXG4gICAqIEBwYXJhbSBub2RlRmluZGVyIGZ1bmN0aW9uIHVzZWQgdG8ga25vdyBpZiB0aGUgbm9kZSBtdXN0IGJlIGtlZXBcclxuICAgKiBAcGFyYW0ga2VlcExlYXZlcyB0cnVlIGlmIHlvdSB3YW50IHRvIGtlZXAgdGhlIHBvc3NpYmxlIGxlYWZzIG9mIGEgbWF0Y2hpbmcgbm9kZVxyXG4gICAqL1xyXG4gIHB1YmxpYyBmaWx0ZXJOb2Rlcyhub2RlczogQXJyYXk8YW55Piwgbm9kZU5hbWU6IHN0cmluZywgbm9kZUZpbmRlcjogRnVuY3Rpb24sIGtlZXBMZWF2ZXM/OiBib29sZWFuLCBpc0xlYWY/OiBGdW5jdGlvbik6IEFycmF5PGFueT4ge1xyXG4gICAgbmgucmVtb3ZlKG5vZGVzLCAobm9kZURhdGEpID0+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuc2hvdWxkUmVtb3ZlRGF0YShub2RlRGF0YSwgbm9kZU5hbWUsIG5vZGVGaW5kZXIsIGtlZXBMZWF2ZXMsIGlzTGVhZik7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBub2RlcztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2hvdWxkUmVtb3ZlRGF0YShub2RlRGF0YTogYW55LCBub2RlTmFtZTogc3RyaW5nLCBub2RlRmluZGVyOiBGdW5jdGlvbiwga2VlcExlYXZlcz86IGJvb2xlYW4sIGlzTGVhZj86IEZ1bmN0aW9uKSB7XHJcbiAgICBsZXQgY2hpbGROb2RlczogQXJyYXk8YW55PiA9IDxBcnJheTxhbnk+Pm5oLmdldChub2RlRGF0YSwgbm9kZU5hbWUpO1xyXG4gICAgbGV0IG1hdGNoaW5nTGVhZiA9IGZhbHNlO1xyXG4gICAgaWYgKGNoaWxkTm9kZXMpIHtcclxuICAgICAgLy8gRGVsZXRlIG5vdCBtYXRjaGluZyBjaGlsZHJlblxyXG4gICAgICBpZiAoa2VlcExlYXZlcykge1xyXG4gICAgICAgIG5oLnJlbW92ZShjaGlsZE5vZGVzLCAoY2hpbGQpID0+IHtcclxuICAgICAgICAgIGxldCBsZWFmID0gKGlzTGVhZiAmJiBpc0xlYWYoY2hpbGQpKSB8fCAoIWlzTGVhZiAmJiBuaC5pc0VtcHR5KG5oLmdldChjaGlsZCwgbm9kZU5hbWUpKSk7XHJcbiAgICAgICAgICBpZiAoIWxlYWYpIHtcclxuICAgICAgICAgICAgbGV0IHJlbW92ZU5vZGUgPSB0aGlzLnNob3VsZFJlbW92ZURhdGEoY2hpbGQsIG5vZGVOYW1lLCBub2RlRmluZGVyLCBrZWVwTGVhdmVzLCBpc0xlYWYpO1xyXG4gICAgICAgICAgICBtYXRjaGluZ0xlYWYgPSBtYXRjaGluZ0xlYWYgfHwgIXJlbW92ZU5vZGU7XHJcbiAgICAgICAgICAgIHJldHVybiByZW1vdmVOb2RlO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgbWF0Y2hpbmdMZWFmID0gbWF0Y2hpbmdMZWFmIHx8IG5vZGVGaW5kZXIoY2hpbGQpO1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbWF0Y2hpbmdMZWFmID0gdHJ1ZTtcclxuICAgICAgICBuaC5yZW1vdmUoY2hpbGROb2RlcywgKGNoaWxkKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5zaG91bGRSZW1vdmVEYXRhKGNoaWxkLCBub2RlTmFtZSwgbm9kZUZpbmRlciwga2VlcExlYXZlcywgaXNMZWFmKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIChuaC5pc0VtcHR5KGNoaWxkTm9kZXMpIHx8ICFtYXRjaGluZ0xlYWYpICYmICFub2RlRmluZGVyKG5vZGVEYXRhKTtcclxuICB9XHJcbn1cclxuIl19