@progress/kendo-angular-treelist
Version:
Kendo UI TreeList for Angular - Display hierarchical data in an Angular tree grid view that supports sorting, filtering, paging, and much more.
105 lines (104 loc) • 2.81 kB
JavaScript
/**-----------------------------------------------------------------------------------------
* Copyright © 2025 Progress Software Corporation. All rights reserved.
* Licensed under commercial license. See LICENSE.md in the project root for more information
*-------------------------------------------------------------------------------------------*/
/**
* @hidden
*/
export class RowSelectionState {
keys = new Set();
clear() {
this.keys.clear();
}
has(key) {
return this.keys.has(key);
}
add(key) {
this.keys.add(key);
}
remove(key) {
this.keys.delete(key);
}
toArray() {
const result = [];
this.keys.forEach(key => {
result.push({ itemKey: key });
});
return result;
}
fromArray(arr) {
this.keys.clear();
arr.forEach(item => {
this.add(item.itemKey);
});
}
}
/**
* @hidden
*/
export class CellSelectionState {
keys = new Map();
clear() {
this.keys.clear();
}
has(key, columnKey) {
return this.keys.has(key) && this.keys.get(key).has(columnKey);
}
add(key, columnKey) {
if (!this.keys.has(key)) {
this.keys.set(key, new Set());
}
const columnSet = this.keys.get(key);
columnSet.add(columnKey);
}
remove(key, columnKey) {
if (this.keys.has(key)) {
const columnSet = this.keys.get(key);
columnSet.delete(columnKey);
if (!columnSet.size) {
this.keys.delete(key);
}
}
}
toArray() {
const result = [];
this.forEach((itemKey, columnKey) => {
result.push({ itemKey, columnKey });
});
return result;
}
fromArray(state) {
this.keys.clear();
state.forEach(item => {
this.add(item.itemKey, item.columnKey);
});
}
updateColumKeys(changes) {
let hasChanges = false;
this.keys.forEach((value, key) => {
const newKeys = [];
value.forEach(columnKey => {
if (changes.has(columnKey)) {
newKeys.push(changes.get(columnKey));
hasChanges = true;
}
else {
newKeys.push(columnKey);
}
});
this.keys.set(key, new Set(newKeys));
});
return hasChanges;
}
forEach(callback) {
this.keys.forEach((value, key) => {
value.forEach((columnKey) => {
callback(key, columnKey);
});
});
}
}
/**
* @hidden
*/
export const createState = (settings) => settings.mode === 'cell' ? new CellSelectionState() : new RowSelectionState();