@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
JavaScript
/**-----------------------------------------------------------------------------------------
* 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
}] });