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.

129 lines (128 loc) 3.4 kB
/**----------------------------------------------------------------------------------------- * 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;