@samotics/ngx-treeview
Version:
An Angular treeview component with checkbox
82 lines • 8.04 kB
JavaScript
import { concat, isNil, pull } from 'lodash';
export const TreeviewHelper = {
findItem,
findItemInList,
findParent,
removeItem,
concatSelection
};
function findItem(root, value) {
if (isNil(root)) {
return undefined;
}
if (root.value === value) {
return root;
}
if (root.children) {
for (const child of root.children) {
const foundItem = findItem(child, value);
if (foundItem) {
return foundItem;
}
}
}
return undefined;
}
function findItemInList(list, value) {
if (isNil(list)) {
return undefined;
}
for (const item of list) {
const foundItem = findItem(item, value);
if (foundItem) {
return foundItem;
}
}
return undefined;
}
function findParent(root, item) {
if (isNil(root) || isNil(root.children)) {
return undefined;
}
for (const child of root.children) {
if (child === item) {
return root;
}
else {
const parent = findParent(child, item);
if (parent) {
return parent;
}
}
}
return undefined;
}
function removeItem(root, item) {
const parent = findParent(root, item);
if (parent) {
pull(parent.children, item);
if (parent.children.length === 0) {
parent.children = undefined;
}
else {
parent.correctChecked();
}
return true;
}
return false;
}
function concatSelection(items, checked, unchecked) {
let checkedItems = [...checked];
let uncheckedItems = [...unchecked];
for (const item of items) {
const selection = item.getSelection();
checkedItems = concat(checkedItems, selection.checkedItems);
uncheckedItems = concat(uncheckedItems, selection.uncheckedItems);
}
return {
checked: checkedItems,
unchecked: uncheckedItems
};
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZXZpZXctaGVscGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXRyZWV2aWV3L3NyYy9saWIvaGVscGVycy90cmVldmlldy1oZWxwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBRzdDLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRztJQUM1QixRQUFRO0lBQ1IsY0FBYztJQUNkLFVBQVU7SUFDVixVQUFVO0lBQ1YsZUFBZTtDQUNoQixDQUFDO0FBRUYsU0FBUyxRQUFRLENBQUMsSUFBa0IsRUFBRSxLQUFVO0lBQzlDLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDaEIsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVELElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxLQUFLLEVBQUUsQ0FBQztRQUN6QixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNsQixLQUFLLE1BQU0sS0FBSyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNsQyxNQUFNLFNBQVMsR0FBRyxRQUFRLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3pDLElBQUksU0FBUyxFQUFFLENBQUM7Z0JBQ2QsT0FBTyxTQUFTLENBQUM7WUFDbkIsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQztBQUVELFNBQVMsY0FBYyxDQUFDLElBQW9CLEVBQUUsS0FBVTtJQUN0RCxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ2hCLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFRCxLQUFLLE1BQU0sSUFBSSxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ3hCLE1BQU0sU0FBUyxHQUFHLFFBQVEsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDeEMsSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUNkLE9BQU8sU0FBUyxDQUFDO1FBQ25CLENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQztBQUVELFNBQVMsVUFBVSxDQUFDLElBQWtCLEVBQUUsSUFBa0I7SUFDeEQsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1FBQ3hDLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFRCxLQUFLLE1BQU0sS0FBSyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNsQyxJQUFJLEtBQUssS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUNuQixPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxNQUFNLEdBQUcsVUFBVSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztZQUN2QyxJQUFJLE1BQU0sRUFBRSxDQUFDO2dCQUNYLE9BQU8sTUFBTSxDQUFDO1lBQ2hCLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sU0FBUyxDQUFDO0FBQ25CLENBQUM7QUFFRCxTQUFTLFVBQVUsQ0FBQyxJQUFrQixFQUFFLElBQWtCO0lBQ3hELE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDdEMsSUFBSSxNQUFNLEVBQUUsQ0FBQztRQUNYLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzVCLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDakMsTUFBTSxDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUM7UUFDOUIsQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDMUIsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQztBQUVELFNBQVMsZUFBZSxDQUFDLEtBQXFCLEVBQUUsT0FBdUIsRUFBRSxTQUF5QjtJQUNoRyxJQUFJLFlBQVksR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUM7SUFDaEMsSUFBSSxjQUFjLEdBQUcsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDO0lBQ3BDLEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxFQUFFLENBQUM7UUFDekIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3RDLFlBQVksR0FBRyxNQUFNLENBQUMsWUFBWSxFQUFFLFNBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUM1RCxjQUFjLEdBQUcsTUFBTSxDQUFDLGNBQWMsRUFBRSxTQUFTLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDcEUsQ0FBQztJQUNELE9BQU87UUFDTCxPQUFPLEVBQUUsWUFBWTtRQUNyQixTQUFTLEVBQUUsY0FBYztLQUMxQixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbmNhdCwgaXNOaWwsIHB1bGwgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgVHJlZXZpZXdJdGVtIH0gZnJvbSAnLi4vbW9kZWxzL3RyZWV2aWV3LWl0ZW0nO1xuXG5leHBvcnQgY29uc3QgVHJlZXZpZXdIZWxwZXIgPSB7XG4gIGZpbmRJdGVtLFxuICBmaW5kSXRlbUluTGlzdCxcbiAgZmluZFBhcmVudCxcbiAgcmVtb3ZlSXRlbSxcbiAgY29uY2F0U2VsZWN0aW9uXG59O1xuXG5mdW5jdGlvbiBmaW5kSXRlbShyb290OiBUcmVldmlld0l0ZW0sIHZhbHVlOiBhbnkpOiBUcmVldmlld0l0ZW0ge1xuICBpZiAoaXNOaWwocm9vdCkpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgaWYgKHJvb3QudmFsdWUgPT09IHZhbHVlKSB7XG4gICAgcmV0dXJuIHJvb3Q7XG4gIH1cblxuICBpZiAocm9vdC5jaGlsZHJlbikge1xuICAgIGZvciAoY29uc3QgY2hpbGQgb2Ygcm9vdC5jaGlsZHJlbikge1xuICAgICAgY29uc3QgZm91bmRJdGVtID0gZmluZEl0ZW0oY2hpbGQsIHZhbHVlKTtcbiAgICAgIGlmIChmb3VuZEl0ZW0pIHtcbiAgICAgICAgcmV0dXJuIGZvdW5kSXRlbTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBmaW5kSXRlbUluTGlzdChsaXN0OiBUcmVldmlld0l0ZW1bXSwgdmFsdWU6IGFueSk6IFRyZWV2aWV3SXRlbSB7XG4gIGlmIChpc05pbChsaXN0KSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBmb3IgKGNvbnN0IGl0ZW0gb2YgbGlzdCkge1xuICAgIGNvbnN0IGZvdW5kSXRlbSA9IGZpbmRJdGVtKGl0ZW0sIHZhbHVlKTtcbiAgICBpZiAoZm91bmRJdGVtKSB7XG4gICAgICByZXR1cm4gZm91bmRJdGVtO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGZpbmRQYXJlbnQocm9vdDogVHJlZXZpZXdJdGVtLCBpdGVtOiBUcmVldmlld0l0ZW0pOiBUcmVldmlld0l0ZW0ge1xuICBpZiAoaXNOaWwocm9vdCkgfHwgaXNOaWwocm9vdC5jaGlsZHJlbikpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgZm9yIChjb25zdCBjaGlsZCBvZiByb290LmNoaWxkcmVuKSB7XG4gICAgaWYgKGNoaWxkID09PSBpdGVtKSB7XG4gICAgICByZXR1cm4gcm9vdDtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgcGFyZW50ID0gZmluZFBhcmVudChjaGlsZCwgaXRlbSk7XG4gICAgICBpZiAocGFyZW50KSB7XG4gICAgICAgIHJldHVybiBwYXJlbnQ7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlSXRlbShyb290OiBUcmVldmlld0l0ZW0sIGl0ZW06IFRyZWV2aWV3SXRlbSk6IGJvb2xlYW4ge1xuICBjb25zdCBwYXJlbnQgPSBmaW5kUGFyZW50KHJvb3QsIGl0ZW0pO1xuICBpZiAocGFyZW50KSB7XG4gICAgcHVsbChwYXJlbnQuY2hpbGRyZW4sIGl0ZW0pO1xuICAgIGlmIChwYXJlbnQuY2hpbGRyZW4ubGVuZ3RoID09PSAwKSB7XG4gICAgICBwYXJlbnQuY2hpbGRyZW4gPSB1bmRlZmluZWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhcmVudC5jb3JyZWN0Q2hlY2tlZCgpO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gY29uY2F0U2VsZWN0aW9uKGl0ZW1zOiBUcmVldmlld0l0ZW1bXSwgY2hlY2tlZDogVHJlZXZpZXdJdGVtW10sIHVuY2hlY2tlZDogVHJlZXZpZXdJdGVtW10pOiB7IFtrOiBzdHJpbmddOiBUcmVldmlld0l0ZW1bXSB9IHtcbiAgbGV0IGNoZWNrZWRJdGVtcyA9IFsuLi5jaGVja2VkXTtcbiAgbGV0IHVuY2hlY2tlZEl0ZW1zID0gWy4uLnVuY2hlY2tlZF07XG4gIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykge1xuICAgIGNvbnN0IHNlbGVjdGlvbiA9IGl0ZW0uZ2V0U2VsZWN0aW9uKCk7XG4gICAgY2hlY2tlZEl0ZW1zID0gY29uY2F0KGNoZWNrZWRJdGVtcywgc2VsZWN0aW9uLmNoZWNrZWRJdGVtcyk7XG4gICAgdW5jaGVja2VkSXRlbXMgPSBjb25jYXQodW5jaGVja2VkSXRlbXMsIHNlbGVjdGlvbi51bmNoZWNrZWRJdGVtcyk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBjaGVja2VkOiBjaGVja2VkSXRlbXMsXG4gICAgdW5jaGVja2VkOiB1bmNoZWNrZWRJdGVtc1xuICB9O1xufVxuIl19