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.

56 lines (55 loc) 3.1 kB
/**----------------------------------------------------------------------------------------- * Copyright © 2025 Progress Software Corporation. All rights reserved. * Licensed under commercial license. See LICENSE.md in the project root for more information *-------------------------------------------------------------------------------------------*/ import { Injectable } from "@angular/core"; import { RowReorderService } from './row-reorder.service'; import { isPresent } from "../utils"; import { dropPosition, findParent } from "./utils"; import * as i0 from "@angular/core"; /** * @hidden */ export class HierarchicalRowReorderService extends RowReorderService { isOverChild(targetItem) { const { draggedRows } = this.rowReorderArgs(this.dragTarget, this.dropTarget, this.view); const draggedItem = draggedRows[0].dataItem; const hasChildren = isPresent(draggedItem[this.childrenField]) && draggedItem[this.childrenField].length > 0; if (!hasChildren) { return false; } if (targetItem && draggedItem.hasOwnProperty(this.childrenField)) { if (draggedItem[this.childrenField].includes(targetItem)) { return true; } const parent = findParent(this.data, targetItem, this.childrenField); if (parent) { return this.isOverChild(parent); } } return false; } reorderRows(ev, collection, field) { const draggedItem = ev.draggedRows[0].dataItem; const dropTargetItem = ev.dropTargetRow.dataItem; const draggedItemParent = findParent(collection, draggedItem, field); const dropTargetParent = findParent(collection, dropTargetItem, field); const draggedItemIdx = draggedItemParent ? draggedItemParent[field].indexOf(draggedItem) : collection.indexOf(draggedItem); let dropTargetItemIdx = dropTargetParent ? dropTargetParent[field].indexOf(dropTargetItem) : collection.indexOf(dropTargetItem); if (ev.dropPosition === dropPosition.after && dropTargetItemIdx < draggedItemIdx) { dropTargetItemIdx++; } draggedItemParent ? draggedItemParent[field].splice(draggedItemIdx, 1) : collection.splice(draggedItemIdx, 1); if (ev.dropPosition !== dropPosition.over) { dropTargetParent ? dropTargetParent[field].splice(dropTargetItemIdx, 0, draggedItem) : collection.splice(dropTargetItemIdx, 0, draggedItem); } else { dropTargetItem[field].unshift(draggedItem); } } static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: HierarchicalRowReorderService, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: HierarchicalRowReorderService }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: HierarchicalRowReorderService, decorators: [{ type: Injectable }] });