@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.
129 lines (128 loc) • 3.4 kB
JavaScript
/**-----------------------------------------------------------------------------------------
* Copyright © 2025 Progress Software Corporation. All rights reserved.
* Licensed under commercial license. See LICENSE.md in the project root for more information
*-------------------------------------------------------------------------------------------*/
import { cancelIcon, insertMiddleIcon, plusIcon } from '@progress/kendo-svg-icons';
/**
* @hidden
*/
export const isNextSibling = (dropTarget, dragTarget) => dropTarget === dragTarget.nextElementSibling;
/**
* @hidden
*/
export const isPreviousSibling = (dropTarget, dragTarget) => dropTarget === dragTarget.previousElementSibling;
/**
* @hidden
*/
export function getOffset(element) {
const { clientTop, clientLeft } = getDocument(element);
const { pageYOffset, pageXOffset } = getWindow(element);
const { top, left } = element.getBoundingClientRect();
return {
top: top + pageYOffset - clientTop,
left: left + pageXOffset - clientLeft
};
}
/**
* @hidden
*/
export const hintIcons = {
forbidden: 'cancel',
before: 'insert-middle',
after: 'insert-middle',
over: 'plus'
};
/**
* @hidden
*/
export const hintSVGIcons = {
forbidden: cancelIcon,
before: insertMiddleIcon,
after: insertMiddleIcon,
over: plusIcon
};
/**
* @hidden
*/
export const dropPosition = {
forbidden: 'forbidden',
before: 'before',
after: 'after',
over: 'over'
};
/**
* @hidden
*/
export const hintStyles = {
zIndex: '20000',
display: 'flex',
position: 'fixed'
};
/**
* @hidden
*/
export const hintClasses = ['k-drag-clue', 'k-reorder-clue'];
/**
* @hidden
*/
export const dropIndicatorStyles = {
zIndex: '19000',
position: 'absolute'
};
/**
* @hidden
*/
export const dropIndicatorClasses = ['k-drop-hint', 'k-drop-hint-h'];
/**
* @hidden
*/
export const defaultSelectors = {
handle: '.k-table-td.k-drag-cell',
dragTarget: '.k-table-row[data-treelist-view-index]',
dropTarget: '.k-table-row[data-treelist-view-index]'
};
/**
* @hidden
*/
export const rowIndexAttr = 'data-treelist-view-index';
/**
* @hidden
*/
export const findParent = (collection, searchItem, field) => {
let parent = null;
for (const item of collection) {
if (searchItem === item) {
return null;
}
const checked = [];
const queue = [];
queue.push(item);
while (queue.length !== 0) {
const current = queue.shift();
if (!current) {
continue;
}
checked.push(current);
if (current === searchItem) {
return item;
}
if (current.hasOwnProperty(field)) {
current[field].forEach(node => {
if (checked.indexOf(node) === -1) {
checked.push(node);
queue.push(node);
if (node === searchItem) {
parent = current;
return;
}
}
});
}
if (parent) {
return parent;
}
}
}
};
const getDocument = element => element?.ownerDocument.documentElement;
const getWindow = element => element?.ownerDocument.defaultView;