@asi-ngtools/lib
Version:
This project is a little components library, simple to use, which will help you to simplify your project.
155 lines (154 loc) • 14.3 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
import { Injectable } from '@angular/core';
import * as nh from '../../native-helper';
export class AsiTreeViewService {
/**
* Function used to open a particular node
* @param {?} nodes
* @param {?} nodeFinder
* @return {?}
*/
openNode(nodes, nodeFinder) {
nh.forEach(nodes, (node) => {
if (this.mustOpenNode(node, nodeFinder)) {
node.openNode();
}
});
}
/**
* @param {?} node
* @param {?} nodeFinder
* @return {?}
*/
mustOpenNode(node, nodeFinder) {
if (node != null) {
if (nodeFinder(node.data)) {
node.openNode();
node.tagFound(true);
return true;
}
else if (node.childNodes) {
/** @type {?} */
let childNodes = node.childNodes.toArray();
/** @type {?} */
let openNode = false;
for (let childNode of childNodes) {
if (this.mustOpenNode(childNode, nodeFinder)) {
childNode.openNode();
openNode = true;
}
}
return openNode;
}
}
return false;
}
/**
* @param {?} nodes
* @return {?}
*/
closeAll(nodes) {
nh.forEach(nodes, (node) => {
this.closeNode(node);
});
}
/**
* @param {?} node
* @return {?}
*/
closeNode(node) {
if (node) {
node.closeNode();
if (node.childNodes) {
node.childNodes.forEach(childNode => {
childNode.closeNode();
});
}
}
}
/**
* @param {?} nodes
* @return {?}
*/
openAll(nodes) {
nh.forEach(nodes, (node) => {
this.openANode(node);
});
}
/**
* @param {?} node
* @return {?}
*/
openANode(node) {
if (node) {
node.openNode();
if (node.childNodes) {
node.childNodes.forEach(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 {?}
*/
filterNodes(nodes, nodeName, nodeFinder, keepLeaves, isLeaf) {
nh.remove(nodes, (nodeData) => {
return this.shouldRemoveData(nodeData, nodeName, nodeFinder, keepLeaves, isLeaf);
});
return nodes;
}
/**
* @param {?} nodeData
* @param {?} nodeName
* @param {?} nodeFinder
* @param {?=} keepLeaves
* @param {?=} isLeaf
* @return {?}
*/
shouldRemoveData(nodeData, nodeName, nodeFinder, keepLeaves, isLeaf) {
/** @type {?} */
let childNodes = /** @type {?} */ (nh.get(nodeData, nodeName));
/** @type {?} */
let matchingLeaf = false;
if (childNodes) {
// Delete not matching children
if (keepLeaves) {
nh.remove(childNodes, (child) => {
/** @type {?} */
let leaf = (isLeaf && isLeaf(child)) || (!isLeaf && nh.isEmpty(nh.get(child, nodeName)));
if (!leaf) {
/** @type {?} */
let 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, (child) => {
return this.shouldRemoveData(child, nodeName, nodeFinder, keepLeaves, isLeaf);
});
}
}
return (nh.isEmpty(childNodes) || !matchingLeaf) && !nodeFinder(nodeData);
}
}
AsiTreeViewService.decorators = [
{ type: Injectable }
];
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNpLXRyZWUtdmlldy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGFzaS1uZ3Rvb2xzL2xpYi8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnRzL2FzaS10cmVlLXZpZXcvYXNpLXRyZWUtdmlldy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sS0FBSyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFHMUMsTUFBTTs7Ozs7OztJQU1HLFFBQVEsQ0FBQyxLQUFzQyxFQUFFLFVBQW9CO1FBQzFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUMsSUFBOEIsRUFBRSxFQUFFO1lBQ25ELEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDeEMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO2FBQ2pCO1NBQ0YsQ0FBQyxDQUFDOzs7Ozs7O0lBR0csWUFBWSxDQUFDLElBQThCLEVBQUUsVUFBb0I7UUFDdkUsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDakIsRUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzFCLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDaEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDcEIsTUFBTSxDQUFDLElBQUksQ0FBQzthQUNiO1lBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDOztnQkFDM0IsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQzs7Z0JBQzNDLElBQUksUUFBUSxHQUFHLEtBQUss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QUMsQ0FBQyxDQUFDO29CQUN6RixFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7O3dCQUNWLElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUM7d0JBQ3hGLFlBQVksR0FBRyxZQUFZLElBQUksQ0FBQyxVQUFVLENBQUM7d0JBQzNDLE1BQU0sQ0FBQyxVQUFVLENBQUM7cUJBQ25CO29CQUFDLElBQUksQ0FBQyxDQUFDO3dCQUNOLFlBQVksR0FBRyxZQUFZLElBQUksVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO3dCQUNqRCxNQUFNLENBQUMsS0FBSyxDQUFDO3FCQUNkO2lCQUNGLENBQUMsQ0FBQzthQUNKO1lBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ04sWUFBWSxHQUFHLElBQUksQ0FBQztnQkFDcEIsRUFBRSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRTtvQkFDOUIsTUFBTSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUM7aUJBQy9FLENBQUMsQ0FBQzthQUNKO1NBQ0Y7UUFDRCxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7Ozs7WUEzRzdFLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEFzaVRyZWVWaWV3Tm9kZUNvbXBvbmVudCB9IGZyb20gJy4vbm9kZS9hc2ktdHJlZS12aWV3LW5vZGUuY29tcG9uZW50JztcclxuaW1wb3J0ICogYXMgbmggZnJvbSAnLi4vLi4vbmF0aXZlLWhlbHBlcic7XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBBc2lUcmVlVmlld1NlcnZpY2Uge1xyXG5cclxuICAvKipcclxuICAgKiBGdW5jdGlvbiB1c2VkIHRvIG9wZW4gYSBwYXJ0aWN1bGFyIG5vZGVcclxuICAgKiBAcGFyYW0gbm9kZUZpbmRlclxyXG4gICAqL1xyXG4gIHB1YmxpYyBvcGVuTm9kZShub2RlczogQXJyYXk8QXNpVHJlZVZpZXdOb2RlQ29tcG9uZW50Piwgbm9kZUZpbmRlcjogRnVuY3Rpb24pIHtcclxuICAgIG5oLmZvckVhY2gobm9kZXMsIChub2RlOiBBc2lUcmVlVmlld05vZGVDb21wb25lbnQpID0+IHtcclxuICAgICAgaWYgKHRoaXMubXVzdE9wZW5Ob2RlKG5vZGUsIG5vZGVGaW5kZXIpKSB7XHJcbiAgICAgICAgbm9kZS5vcGVuTm9kZSgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgbXVzdE9wZW5Ob2RlKG5vZGU6IEFzaVRyZWVWaWV3Tm9kZUNvbXBvbmVudCwgbm9kZUZpbmRlcjogRnVuY3Rpb24pIHtcclxuICAgIGlmIChub2RlICE9IG51bGwpIHtcclxuICAgICAgaWYgKG5vZGVGaW5kZXIobm9kZS5kYXRhKSkge1xyXG4gICAgICAgIG5vZGUub3Blbk5vZGUoKTtcclxuICAgICAgICBub2RlLnRhZ0ZvdW5kKHRydWUpO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9IGVsc2UgaWYgKG5vZGUuY2hpbGROb2Rlcykge1xyXG4gICAgICAgIGxldCBjaGlsZE5vZGVzID0gbm9kZS5jaGlsZE5vZGVzLnRvQXJyYXkoKTtcclxuICAgICAgICBsZXQgb3Blbk5vZGUgPSBmYWxzZTtcclxuICAgICAgICBmb3IgKGxldCBjaGlsZE5vZGUgb2YgY2hpbGROb2Rlcykge1xyXG4gICAgICAgICAgaWYgKHRoaXMubXVzdE9wZW5Ob2RlKGNoaWxkTm9kZSwgbm9kZUZpbmRlcikpIHtcclxuICAgICAgICAgICAgY2hpbGROb2RlLm9wZW5Ob2RlKCk7XHJcbiAgICAgICAgICAgIG9wZW5Ob2RlID0gdHJ1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG9wZW5Ob2RlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2xvc2VBbGwobm9kZXM6IEFycmF5PEFzaVRyZWVWaWV3Tm9kZUNvbXBvbmVudD4pIHtcclxuICAgIG5oLmZvckVhY2gobm9kZXMsIChub2RlOiBBc2lUcmVlVmlld05vZGVDb21wb25lbnQpID0+IHtcclxuICAgICAgdGhpcy5jbG9zZU5vZGUobm9kZSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2xvc2VOb2RlKG5vZGU6IEFzaVRyZWVWaWV3Tm9kZUNvbXBvbmVudCkge1xyXG4gICAgaWYgKG5vZGUpIHtcclxuICAgICAgbm9kZS5jbG9zZU5vZGUoKTtcclxuICAgICAgaWYgKG5vZGUuY2hpbGROb2Rlcykge1xyXG4gICAgICAgIG5vZGUuY2hpbGROb2Rlcy5mb3JFYWNoKGNoaWxkTm9kZSA9PiB7XHJcbiAgICAgICAgICBjaGlsZE5vZGUuY2xvc2VOb2RlKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBvcGVuQWxsKG5vZGVzOiBBcnJheTxBc2lUcmVlVmlld05vZGVDb21wb25lbnQ+KSB7XHJcbiAgICBuaC5mb3JFYWNoKG5vZGVzLCAobm9kZTogQXNpVHJlZVZpZXdOb2RlQ29tcG9uZW50KSA9PiB7XHJcbiAgICAgIHRoaXMub3BlbkFOb2RlKG5vZGUpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG9wZW5BTm9kZShub2RlOiBBc2lUcmVlVmlld05vZGVDb21wb25lbnQpIHtcclxuICAgIGlmIChub2RlKSB7XHJcbiAgICAgIG5vZGUub3Blbk5vZGUoKTtcclxuICAgICAgaWYgKG5vZGUuY2hpbGROb2Rlcykge1xyXG4gICAgICAgIG5vZGUuY2hpbGROb2Rlcy5mb3JFYWNoKGNoaWxkTm9kZSA9PiB7XHJcbiAgICAgICAgICBjaGlsZE5vZGUub3Blbk5vZGUoKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIEZ1bmN0aW9uIHVzZWQgdG8gZmlsdGVyIHRoZSB0cmVlLXZpZXdcclxuICAgKiBAcGFyYW0gbm9kZUZpbmRlciBmdW5jdGlvbiB1c2VkIHRvIGtub3cgaWYgdGhlIG5vZGUgbXVzdCBiZSBrZWVwXHJcbiAgICogQHBhcmFtIGtlZXBMZWF2ZXMgdHJ1ZSBpZiB5b3Ugd2FudCB0byBrZWVwIHRoZSBwb3NzaWJsZSBsZWFmcyBvZiBhIG1hdGNoaW5nIG5vZGVcclxuICAgKi9cclxuICBwdWJsaWMgZmlsdGVyTm9kZXMobm9kZXM6IEFycmF5PGFueT4sIG5vZGVOYW1lOiBzdHJpbmcsIG5vZGVGaW5kZXI6IEZ1bmN0aW9uLCBrZWVwTGVhdmVzPzogYm9vbGVhbiwgaXNMZWFmPzogRnVuY3Rpb24pOiBBcnJheTxhbnk+IHtcclxuICAgIG5oLnJlbW92ZShub2RlcywgKG5vZGVEYXRhKSA9PiB7XHJcbiAgICAgIHJldHVybiB0aGlzLnNob3VsZFJlbW92ZURhdGEobm9kZURhdGEsIG5vZGVOYW1lLCBub2RlRmluZGVyLCBrZWVwTGVhdmVzLCBpc0xlYWYpO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gbm9kZXM7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNob3VsZFJlbW92ZURhdGEobm9kZURhdGE6IGFueSwgbm9kZU5hbWU6IHN0cmluZywgbm9kZUZpbmRlcjogRnVuY3Rpb24sIGtlZXBMZWF2ZXM/OiBib29sZWFuLCBpc0xlYWY/OiBGdW5jdGlvbikge1xyXG4gICAgbGV0IGNoaWxkTm9kZXM6IEFycmF5PGFueT4gPSA8QXJyYXk8YW55Pj5uaC5nZXQobm9kZURhdGEsIG5vZGVOYW1lKTtcclxuICAgIGxldCBtYXRjaGluZ0xlYWYgPSBmYWxzZTtcclxuICAgIGlmIChjaGlsZE5vZGVzKSB7XHJcbiAgICAgIC8vIERlbGV0ZSBub3QgbWF0Y2hpbmcgY2hpbGRyZW5cclxuICAgICAgaWYgKGtlZXBMZWF2ZXMpIHtcclxuICAgICAgICBuaC5yZW1vdmUoY2hpbGROb2RlcywgKGNoaWxkKSA9PiB7XHJcbiAgICAgICAgICBsZXQgbGVhZiA9IChpc0xlYWYgJiYgaXNMZWFmKGNoaWxkKSkgfHwgKCFpc0xlYWYgJiYgbmguaXNFbXB0eShuaC5nZXQoY2hpbGQsIG5vZGVOYW1lKSkpO1xyXG4gICAgICAgICAgaWYgKCFsZWFmKSB7XHJcbiAgICAgICAgICAgIGxldCByZW1vdmVOb2RlID0gdGhpcy5zaG91bGRSZW1vdmVEYXRhKGNoaWxkLCBub2RlTmFtZSwgbm9kZUZpbmRlciwga2VlcExlYXZlcywgaXNMZWFmKTtcclxuICAgICAgICAgICAgbWF0Y2hpbmdMZWFmID0gbWF0Y2hpbmdMZWFmIHx8ICFyZW1vdmVOb2RlO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVtb3ZlTm9kZTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIG1hdGNoaW5nTGVhZiA9IG1hdGNoaW5nTGVhZiB8fCBub2RlRmluZGVyKGNoaWxkKTtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIG1hdGNoaW5nTGVhZiA9IHRydWU7XHJcbiAgICAgICAgbmgucmVtb3ZlKGNoaWxkTm9kZXMsIChjaGlsZCkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuc2hvdWxkUmVtb3ZlRGF0YShjaGlsZCwgbm9kZU5hbWUsIG5vZGVGaW5kZXIsIGtlZXBMZWF2ZXMsIGlzTGVhZik7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiAobmguaXNFbXB0eShjaGlsZE5vZGVzKSB8fCAhbWF0Y2hpbmdMZWFmKSAmJiAhbm9kZUZpbmRlcihub2RlRGF0YSk7XHJcbiAgfVxyXG59XHJcbiJdfQ==