@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
JavaScript
/**
* @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