TreeViewDragAnalyzer
Class
A class which provides an API for analyzing the drag events
of the TreeView.
Definition
Package:@progress/kendo-react-treeview
Syntax:
jsx
const App = () => {
const dragClueRef = React.useRef(null);
const [tree, setTree] = React.useState([{
text: 'Furniture', expanded: true, items: [
{ text: 'Tables & Chairs', expanded: true },
{ text: 'Sofas', expanded: true },
{ text: 'Occasional Furniture', expanded: true }]
}, {
text: 'Decor', expanded: true, items: [
{ text: 'Bed Linen', expanded: true },
{ text: 'Curtains & Blinds', expanded: true },
{ text: 'Carpets', expanded: true }]
}]);
const SEPARATOR = '_';
const getSiblings = (itemIndex, data) => {
let result = data;
const indices = itemIndex.split(SEPARATOR).map(index => Number(index));
for (let i = 0; i < indices.length - 1; i++) {
result = result[indices[i]].items;
}
return result;
};
const getClueClassName = (event) => {
const eventAnalyzer = new TreeViewDragAnalyzer(event).init();
const itemIndex = eventAnalyzer.destinationMeta.itemHierarchicalIndex;
if (eventAnalyzer.isDropAllowed) {
switch (eventAnalyzer.getDropOperation()) {
case 'child':
return 'k-i-plus';
case 'before':
return itemIndex === '0' || itemIndex.endsWith(`${SEPARATOR}0`) ?
'k-i-insert-up' : 'k-i-insert-middle';
case 'after':
const siblings = getSiblings(itemIndex, tree);
const lastIndex = Number(itemIndex.split(SEPARATOR).pop());
return lastIndex < siblings.length - 1 ? 'k-i-insert-middle' : 'k-i-insert-down';
default:
break;
}
}
return 'k-i-cancel';
};
const onItemDragOver = (event) => {
dragClueRef.current.show(event.pageY + 10, event.pageX, event.item.text, getClueClassName(event));
};
const onItemDragEnd = (event) => {
dragClueRef.current.hide();
const eventAnalyzer = new TreeViewDragAnalyzer(event).init();
if (eventAnalyzer.isDropAllowed) {
const updatedTree = moveTreeViewItem(
event.itemHierarchicalIndex,
tree,
eventAnalyzer.getDropOperation(),
eventAnalyzer.destinationMeta.itemHierarchicalIndex,
);
setTree(updatedTree);
}
};
return (
<div>
<TreeView data={tree} draggable={true}
onItemDragOver={onItemDragOver} onItemDragEnd={onItemDragEnd} />
<TreeViewDragClue ref={dragClueRef} />
</div>
);
}
Accessors
destinationMeta
{ itemHierarchicalIndex: string; treeViewGuid: string }
Returns an object which contains:
- The
itemHierarchicalIndexof the destination item (the item below the dragged item) and - The
guidof the destination TreeView (the TreeView which renders the destination item).
isDropAllowed
boolean
Returns true if dropping is allowed. Otherwise, returns false.
Methods
Returns the specific drop operation.
Returns:
undefined | "after" | "before" | "child"
- The following values are returned:
before—Indicates that the dragged item is positioned at the beginning of the destination item.after—Indicates that the dragged item is positioned at the end of the destination item.child—Indicates that the dragged item is positioned in the middle of the destination item.undefined—Indicates that dropping is not allowed.
The method which initializes the analyzer. Invoke the method before you call any other methods.
Returns:
- The analyzer object of the
dragevent.