{"version":3,"file":"useDragHandle.mjs","sources":["../../../../components/tree/hooks/useDragHandle.ts"],"sourcesContent":["import { TreeNode } from '../utils/adapt';\nimport { TreeProps, TypeDragEventState, TypeTreeState, TypeDragHandle } from '../types';\nimport { DragPosition } from './useDraggable';\nimport { emitEvent } from '../utils';\n\nexport default function useDragHandle(state: TypeTreeState) {\n  const { props, context, scope, store } = state;\n  let dragNode: TreeNode = null;\n\n  const handleDragStart = (state: TypeDragEventState) => {\n    const { dragEvent, node } = state;\n    dragNode = node;\n\n    const ctx = {\n      node: node.getModel(),\n      e: dragEvent,\n    };\n    emitEvent<Parameters<TreeProps['onDragStart']>>(props, context, 'drag-start', ctx);\n  };\n\n  const handleDragEnd = (state: TypeDragEventState) => {\n    const { dragEvent, node } = state;\n    dragNode = node;\n\n    const ctx = {\n      node: node.getModel(),\n      e: dragEvent,\n    };\n    emitEvent<Parameters<TreeProps['onDragEnd']>>(props, context, 'drag-end', ctx);\n  };\n\n  const handleDragOver = (state: TypeDragEventState) => {\n    const { dragEvent, node } = state;\n    const ctx = {\n      node: node.getModel(),\n      e: dragEvent,\n    };\n    emitEvent<Parameters<TreeProps['onDragOver']>>(props, context, 'drag-over', ctx);\n  };\n\n  const handleDragLeave = (state: TypeDragEventState) => {\n    const { dragEvent, node } = state;\n    const ctx = {\n      node: node.getModel(),\n      e: dragEvent,\n    };\n    emitEvent<Parameters<TreeProps['onDragLeave']>>(props, context, 'drag-leave', ctx);\n  };\n\n  const handleDrop = (state: TypeDragEventState) => {\n    const { dragEvent, node, dropPosition } = state;\n    if (node.value === dragNode.value || node.getParents().some((_node) => _node.value === dragNode.value)) return;\n\n    const ctx = {\n      dropNode: node.getModel(),\n      dragNode: dragNode.getModel(),\n      dropPosition,\n      e: dragEvent,\n    };\n\n    if (props.allowDrop?.(ctx) === false) return;\n\n    const nodes = store.getNodes() as TreeNode[];\n    nodes.some((_node) => {\n      if (_node.value === node.value) {\n        if (dropPosition === DragPosition.Inside) {\n          dragNode.appendTo(store, _node);\n        } else if (dropPosition === DragPosition.Before) {\n          node.insertBefore(dragNode);\n        } else {\n          node.insertAfter(dragNode);\n        }\n        return true;\n      }\n      return false;\n    });\n\n    emitEvent<Parameters<TreeProps['onDrop']>>(props, context, 'drop', ctx);\n  };\n\n  const drag: TypeDragHandle = {\n    handleDragStart,\n    handleDragEnd,\n    handleDragOver,\n    handleDragLeave,\n    handleDrop,\n  };\n\n  scope.drag = drag;\n\n  return {\n    drag,\n  };\n}\n"],"names":["useDragHandle","state","props","context","scope","store","dragNode","handleDragStart","dragEvent","node","ctx","getModel","e","emitEvent","handleDragEnd","handleDragOver","handleDragLeave","handleDrop","_props$allowDrop","dropPosition","value","getParents","some","_node","dropNode","allowDrop","call","nodes","getNodes","DragPosition","Inside","appendTo","Before","insertBefore","insertAfter","drag"],"mappings":"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"}