UNPKG

@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
/**----------------------------------------------------------------------------------------- * 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();