TreeViewDragClue
Component
Represents the KendoReact TreeViewDragClue component which renders a clue when an item is dragged.
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>
);
}
Properties
props
TreeViewDragClueProps intersected with RefAttributes<any>
The props of the TreeViewDragClue component.
Methods
Hides the TreeViewDragClue component.
Displays the TreeViewDragClue component.
Parameters:topnumber
The top CSS position of the component.
The left CSS position of the component.
The text of the component.
operationClassNamestringThe CSS class name which is related to the specific drop operation.