UNPKG

tdesign-vue-next

Version:
1 lines 9.89 kB
{"version":3,"file":"useDraggable.mjs","sources":["../../../../components/tree/hooks/useDraggable.ts"],"sourcesContent":["import { throttle } from 'lodash-es';\nimport { reactive } from '../utils/adapt';\nimport { TypeTreeItemState } from '../types';\n\nexport interface TypeDragStates {\n isDragOver: boolean;\n isDragging: boolean;\n dropPosition: number;\n}\n\nexport enum DragPosition {\n Before = -1,\n Inside = 0,\n After = 1,\n}\n\ntype TypeDrag = 'dragStart' | 'dragOver' | 'dragLeave' | 'dragEnd' | 'drop';\n\nexport default function useDraggable(state: TypeTreeItemState) {\n const { treeItemRef } = state;\n const dragStates = reactive({\n isDragOver: false,\n isDragging: false,\n dropPosition: DragPosition.Inside,\n });\n\n const updateDropPosition = (dragEvent: DragEvent) => {\n const rootNode = treeItemRef.value;\n if (!rootNode) return;\n\n const rect = rootNode?.getBoundingClientRect?.();\n const offsetY = window.scrollY + rect.top;\n const { pageY } = dragEvent;\n const gapHeight = rect.height / 4;\n const diff = pageY - offsetY;\n\n if (diff < gapHeight) {\n dragStates.dropPosition = DragPosition.Before;\n } else if (diff < rect.height - gapHeight) {\n dragStates.dropPosition = DragPosition.Inside;\n } else {\n dragStates.dropPosition = DragPosition.After;\n }\n };\n\n const setDragStatus = (status: TypeDrag, dragEvent: DragEvent) => {\n const { node, treeScope } = state;\n const { drag } = treeScope;\n if (!drag) return;\n\n switch (status) {\n case 'dragStart':\n dragStates.isDragging = true;\n dragStates.dropPosition = DragPosition.Inside;\n drag.handleDragStart?.({ node, dragEvent });\n break;\n case 'dragEnd':\n dragStates.isDragging = false;\n dragStates.isDragOver = false;\n dragStates.dropPosition = DragPosition.Inside;\n throttleUpdateDropPosition.cancel();\n drag.handleDragEnd?.({ node, dragEvent });\n break;\n case 'dragOver':\n dragStates.isDragOver = true;\n throttleUpdateDropPosition(dragEvent);\n drag.handleDragOver?.({ node, dragEvent });\n break;\n case 'dragLeave':\n dragStates.isDragOver = false;\n dragStates.dropPosition = DragPosition.Inside;\n throttleUpdateDropPosition.cancel();\n drag.handleDragLeave?.({ node, dragEvent });\n break;\n case 'drop':\n drag.handleDrop?.({ node, dropPosition: dragStates.dropPosition, dragEvent });\n dragStates.isDragOver = false;\n throttleUpdateDropPosition.cancel();\n break;\n default:\n break;\n }\n };\n\n const handleDragStart = (evt: DragEvent) => {\n const { node } = state;\n if (!node.isDraggable()) return;\n evt.stopPropagation();\n setDragStatus('dragStart', evt);\n\n try {\n // ie throw error firefox-need-it\n evt.dataTransfer?.setData('text/plain', '');\n } catch (e) {\n // empty\n }\n };\n\n const handleDragEnd = (evt: DragEvent) => {\n const { node } = state;\n if (!node.isDraggable()) return;\n evt.stopPropagation();\n setDragStatus('dragEnd', evt);\n };\n\n const handleDragOver = (evt: DragEvent) => {\n const { node } = state;\n if (!node.isDraggable()) return;\n evt.stopPropagation();\n evt.preventDefault();\n setDragStatus('dragOver', evt);\n };\n\n const handleDragLeave = (evt: DragEvent) => {\n const { node } = state;\n if (!node.isDraggable()) return;\n evt.stopPropagation();\n setDragStatus('dragLeave', evt);\n };\n\n const handleDrop = (evt: DragEvent) => {\n const { node } = state;\n if (!node.isDraggable()) return;\n evt.stopPropagation();\n evt.preventDefault();\n setDragStatus('drop', evt);\n };\n\n const throttleUpdateDropPosition = throttle((dragEvent: DragEvent) => {\n updateDropPosition(dragEvent);\n });\n\n return {\n dragStates,\n handleDragStart,\n handleDragEnd,\n handleDragOver,\n handleDragLeave,\n handleDrop,\n };\n}\n"],"names":["DragPosition","useDraggable","state","treeItemRef","dragStates","reactive","isDragOver","isDragging","dropPosition","updateDropPosition","dragEvent","_rootNode$getBounding","rootNode","value","rect","getBoundingClientRect","call","offsetY","window","scrollY","top","pageY","gapHeight","height","diff","setDragStatus","status","_drag$handleDragStart","_drag$handleDragEnd","_drag$handleDragOver","_drag$handleDragLeave","_drag$handleDrop","node","treeScope","drag","handleDragStart","throttleUpdateDropPosition","cancel","handleDragEnd","handleDragOver","handleDragLeave","handleDrop","evt","isDraggable","stopPropagation","_evt$dataTransfer","dataTransfer","setData","e","preventDefault","throttle"],"mappings":"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"}