xdesign-vue-next
Version:
XDesign Component for vue-next
1 lines • 7.16 kB
Source Map (JSON)
{"version":3,"file":"useDragSort.mjs","sources":["../../src/hooks/useDragSort.tsx"],"sourcesContent":["import { onUnmounted } from 'vue';\n\nconst traversalTabNavs = (tabNavs: HTMLCollection, fn: { (itemNode: any): void; (tabNav: HTMLDivElement): void }) => {\n for (const itemNode of tabNavs) {\n if (itemNode.getAttribute('draggable')) {\n fn(itemNode);\n }\n }\n};\n\nconst handleTarget = (target: EventTarget, tabNavs: HTMLCollection): any => {\n let resultTarget;\n traversalTabNavs(tabNavs, (itemNode) => {\n if (itemNode.contains(target)) {\n resultTarget = itemNode;\n }\n });\n return resultTarget;\n};\n\nexport default function useDragSort(props: any) {\n let navsWrap: HTMLDivElement = null;\n\n let dragged: HTMLDivElement;\n const enterTargets: HTMLDivElement[] = [];\n\n const dragstart = (event: DragEvent) => {\n const target = event.target as HTMLDivElement;\n // const { target } = event;\n dragged = target;\n target.style.opacity = '0.5';\n };\n const dragend = (event: DragEvent) => {\n (event.target as HTMLDivElement).style.opacity = '';\n };\n const dragover = (event: DragEvent) => {\n event.preventDefault();\n };\n const dragenter = (event: DragEvent) => {\n const target = handleTarget(event.target, navsWrap.children);\n if (target && target !== dragged && target.draggable) {\n target.firstChild.style.outline = '1px dashed #0052d9';\n if (!enterTargets.includes(target)) {\n enterTargets.push(target);\n }\n }\n };\n const dragleave = (event: DragEvent) => {\n const target = event.target as HTMLDivElement;\n // const { target } = event;\n for (const enterTarget of enterTargets) {\n if (!enterTarget.contains(target)) {\n (enterTarget.firstChild as HTMLDivElement).style.outline = 'none';\n }\n }\n };\n const drop = (event: DragEvent) => {\n event.preventDefault();\n\n traversalTabNavs(navsWrap.children, (tabNav) => {\n tabNav.firstChild.style.outline = 'none';\n });\n let target = handleTarget(event.target, navsWrap.children);\n if (target && target.parentNode !== dragged && target.draggable) {\n const dragIndex = [].indexOf.call(navsWrap.children, dragged);\n const targetIndex = [].indexOf.call(navsWrap.children, target);\n if (targetIndex > dragIndex) {\n target = navsWrap.children[targetIndex + 1];\n }\n navsWrap.insertBefore(dragged, target);\n\n const currentIndex = props.theme === 'card' ? dragIndex : dragIndex - 1;\n const endIndex = props.theme === 'card' ? targetIndex : targetIndex - 1;\n props.onDragSort({\n currentIndex,\n current: props.panels[currentIndex].value,\n targetIndex: endIndex,\n target: props.panels[endIndex].value,\n });\n }\n };\n function setNavsWrap(val: HTMLDivElement) {\n navsWrap = val;\n navsWrap.addEventListener('dragstart', dragstart, false);\n navsWrap.addEventListener('dragend', dragend, false);\n navsWrap.addEventListener('dragover', dragover, false);\n navsWrap.addEventListener('dragenter', dragenter, false);\n document.addEventListener('dragleave', dragleave, false);\n document.addEventListener('mousemove', dragleave, false);\n navsWrap.addEventListener('drop', drop, false);\n }\n\n onUnmounted(() => {\n navsWrap.removeEventListener('dragstart', dragstart);\n navsWrap.removeEventListener('dragend', dragend);\n navsWrap.removeEventListener('dragover', dragover);\n navsWrap.removeEventListener('dragenter', dragenter);\n document.removeEventListener('dragleave', dragleave);\n document.removeEventListener('mousemove', dragleave);\n navsWrap.removeEventListener('drop', drop);\n });\n return { setNavsWrap };\n}\n"],"names":["_iterator","traversalTabNavs","resultTarget","dragged","target","event","enterTargets","enterTarget","tabNav","navsWrap","currentIndex","targetIndex","onUnmounted","document","setNavsWrap"],"mappings":"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"}