@codehint-ng/tree-table
Version:
A simple component to display tree-hierarchically data in table.
68 lines • 9.57 kB
JavaScript
export class Helper {
static sortItems(items, sortFunction) {
const sortFunc = (a, b) => {
return !!a.data && !!b.data ? sortFunction(a.data, b.data) : 0;
};
return items.sort(sortFunc);
}
static allParentsExpanded(shell) {
let parent = shell.parent;
while (!!parent) {
if (!parent.item.isExpanded) {
return false;
}
parent = parent.parent;
}
return true;
}
static itemsToShells(items, level, parent) {
const shells = items.map(item => {
const shell = {
item,
haveChildren: false,
level,
isVisible: level === 0,
parent: parent.item.id === null ? null : parent
};
return shell;
});
return shells;
}
static arrayInsertItems(arr, index, newItems) {
const newArr = [...arr.slice(0, index), ...newItems, ...arr.slice(index)];
return newArr;
}
// stable
static selectLevelItems(items, parent) {
const levelItems = [];
const otherItems = [];
items.forEach(item => {
if (item.parentId === parent.id) {
levelItems.push(item);
}
else {
otherItems.push(item);
}
});
return { levelItems, otherItems };
}
static removeAllShellsChildren(outerShells, parentId) {
let shells = outerShells;
const removedIds = shells
.filter(i => i.item.parentId === parentId).map(i => i.item.id);
removedIds.forEach((id) => {
shells = this.removeAllShellsChildren(shells, id);
});
return shells.filter(i => !removedIds.includes(i.item.id));
}
static removeAllChildren(outerItems, parentId) {
let items = outerItems;
const removedIds = items
.filter(i => i.parentId === parentId).map(i => i.id);
removedIds.forEach((id) => {
items = this.removeAllChildren(items, id);
});
return items.filter(i => !removedIds.includes(i.id));
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXRlbXMuaGVscGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHJlZS10YWJsZS9zcmMvbGliL2hlbHBlcnMvaXRlbXMuaGVscGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE1BQU0sT0FBTyxNQUFNO0lBQ2pCLE1BQU0sQ0FBQyxTQUFTLENBQUksS0FBeUIsRUFBRSxZQUE2QjtRQUMxRSxNQUFNLFFBQVEsR0FBRyxDQUFDLENBQW1CLEVBQUUsQ0FBbUIsRUFBRSxFQUFFO1lBQzVELE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pFLENBQUMsQ0FBQztRQUNGLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRUQsTUFBTSxDQUFDLGtCQUFrQixDQUFJLEtBQTRCO1FBQ3ZELElBQUksTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7UUFDMUIsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDaEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7Z0JBQUMsT0FBTyxLQUFLLENBQUM7WUFBQyxDQUFDO1lBQzlDLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO1FBQ3pCLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxNQUFNLENBQUMsYUFBYSxDQUFJLEtBQXlCLEVBQUUsS0FBYSxFQUFFLE1BQTZCO1FBQzdGLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDOUIsTUFBTSxLQUFLLEdBQTBC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QVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN2RCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1RyZWVUYWJsZUl0ZW1TaGVsbH0gZnJvbSAnLi9tb2RlbHMnO1xyXG5pbXBvcnQge1NvcnRGdW5jdGlvbiwgVHJlZVRhYmxlSXRlbX0gZnJvbSAnLi4vbW9kZWxzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBIZWxwZXIge1xyXG4gIHN0YXRpYyBzb3J0SXRlbXM8VD4oaXRlbXM6IFRyZWVUYWJsZUl0ZW08VD5bXSwgc29ydEZ1bmN0aW9uOiBTb3J0RnVuY3Rpb248VD4pOiBUcmVlVGFibGVJdGVtPFQ+W10ge1xyXG4gICAgY29uc3Qgc29ydEZ1bmMgPSAoYTogVHJlZVRhYmxlSXRlbTxUPiwgYjogVHJlZVRhYmxlSXRlbTxUPikgPT4ge1xyXG4gICAgICByZXR1cm4gISFhLmRhdGEgJiYgISFiLmRhdGEgPyBzb3J0RnVuY3Rpb24oYS5kYXRhLCBiLmRhdGEpIDogMDtcclxuICAgIH07XHJcbiAgICByZXR1cm4gaXRlbXMuc29ydChzb3J0RnVuYyk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgYWxsUGFyZW50c0V4cGFuZGVkPFQ+KHNoZWxsOiBUcmVlVGFibGVJdGVtU2hlbGw8VD4pOiBib29sZWFuIHtcclxuICAgIGxldCBwYXJlbnQgPSBzaGVsbC5wYXJlbnQ7XHJcbiAgICB3aGlsZSAoISFwYXJlbnQpIHtcclxuICAgICAgaWYgKCFwYXJlbnQuaXRlbS5pc0V4cGFuZGVkKSB7IHJldHVybiBmYWxzZTsgfVxyXG4gICAgICBwYXJlbnQgPSBwYXJlbnQucGFyZW50O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgaXRlbXNUb1NoZWxsczxUPihpdGVtczogVHJlZVRhYmxlSXRlbTxUPltdLCBsZXZlbDogbnVtYmVyLCBwYXJlbnQ6IFRyZWVUYWJsZUl0ZW1TaGVsbDxUPik6IFRyZWVUYWJsZUl0ZW1TaGVsbDxUPltdIHtcclxuICAgIGNvbnN0IHNoZWxscyA9IGl0ZW1zLm1hcChpdGVtID0+IHtcclxuICAgICAgY29uc3Qgc2hlbGw6IFRyZWVUYWJsZUl0ZW1TaGVsbDxUPiA9IHtcclxuICAgICAgICBpdGVtLFxyXG4gICAgICAgIGhhdmVDaGlsZHJlbjogZmFsc2UsXHJcbiAgICAgICAgbGV2ZWwsXHJcbiAgICAgICAgaXNWaXNpYmxlOiBsZXZlbCA9PT0gMCxcclxuICAgICAgICBwYXJlbnQ6IHBhcmVudC5pdGVtLmlkID09PSBudWxsID8gbnVsbCA6IHBhcmVudCB9O1xyXG4gICAgICByZXR1cm4gc2hlbGw7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBzaGVsbHM7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgYXJyYXlJbnNlcnRJdGVtcyhhcnI6IGFueVtdLCBpbmRleCwgbmV3SXRlbXM6IGFueVtdKTogYW55W10ge1xyXG4gICAgY29uc3QgbmV3QXJyID0gWy4uLmFyci5zbGljZSgwLCBpbmRleCksIC4uLm5ld0l0ZW1zLCAuLi5hcnIuc2xpY2UoaW5kZXgpXTtcclxuICAgIHJldHVybiBuZXdBcnI7XHJcbiAgfVxyXG5cclxuICAvLyBzdGFibGVcclxuICBzdGF0aWMgc2VsZWN0TGV2ZWxJdGVtczxUPihpdGVtczogVHJlZVRhYmxlSXRlbTxUPltdLCBwYXJlbnQ6IFRyZWVUYWJsZUl0ZW08VD4pXHJcbiAgICA6IHtsZXZlbEl0ZW1zOiBUcmVlVGFibGVJdGVtPFQ+W10sIG90aGVySXRlbXM6IFRyZWVUYWJsZUl0ZW08VD5bXX0gIHtcclxuICAgIGNvbnN0IGxldmVsSXRlbXM6IFRyZWVUYWJsZUl0ZW08VD5bXSA9IFtdO1xyXG4gICAgY29uc3Qgb3RoZXJJdGVtczogVHJlZVRhYmxlSXRlbTxUPltdID0gW107XHJcblxyXG4gICAgaXRlbXMuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgaWYgKGl0ZW0ucGFyZW50SWQgPT09IHBhcmVudC5pZCkge1xyXG4gICAgICAgIGxldmVsSXRlbXMucHVzaChpdGVtKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBvdGhlckl0ZW1zLnB1c2goaXRlbSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHtsZXZlbEl0ZW1zLCBvdGhlckl0ZW1zfTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyByZW1vdmVBbGxTaGVsbHNDaGlsZHJlbjxUPihvdXRlclNoZWxsczogVHJlZVRhYmxlSXRlbVNoZWxsPFQ+W10sIHBhcmVudElkOiBzdHJpbmcpOiBUcmVlVGFibGVJdGVtU2hlbGw8VD5bXSB7XHJcbiAgICBsZXQgc2hlbGxzID0gb3V0ZXJTaGVsbHM7XHJcbiAgICBjb25zdCByZW1vdmVkSWRzID0gc2hlbGxzXHJcbiAgICAgIC5maWx0ZXIoaSA9PiBpLml0ZW0ucGFyZW50SWQgPT09IHBhcmVudElkKS5tYXAoaSA9PiBpLml0ZW0uaWQpO1xyXG5cclxuICAgIHJlbW92ZWRJZHMuZm9yRWFjaCgoaWQpID0+IHtcclxuICAgICAgc2hlbGxzID0gdGhpcy5yZW1vdmVBbGxTaGVsbHNDaGlsZHJlbihzaGVsbHMsIGlkKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBzaGVsbHMuZmlsdGVyKGkgPT4gIXJlbW92ZWRJZHMuaW5jbHVkZXMoaS5pdGVtLmlkKSk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgcmVtb3ZlQWxsQ2hpbGRyZW48VD4ob3V0ZXJJdGVtczogVHJlZVRhYmxlSXRlbTxUPltdLCBwYXJlbnRJZDogc3RyaW5nKTogVHJlZVRhYmxlSXRlbTxUPltdIHtcclxuICAgIGxldCBpdGVtcyA9IG91dGVySXRlbXM7XHJcbiAgICBjb25zdCByZW1vdmVkSWRzID0gaXRlbXNcclxuICAgICAgLmZpbHRlcihpID0+IGkucGFyZW50SWQgPT09IHBhcmVudElkKS5tYXAoaSA9PiBpLmlkKTtcclxuXHJcbiAgICByZW1vdmVkSWRzLmZvckVhY2goKGlkKSA9PiB7XHJcbiAgICAgIGl0ZW1zID0gdGhpcy5yZW1vdmVBbGxDaGlsZHJlbihpdGVtcywgaWQpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIGl0ZW1zLmZpbHRlcihpID0+ICFyZW1vdmVkSWRzLmluY2x1ZGVzKGkuaWQpKTtcclxuICB9XHJcbn1cclxuIl19