UNPKG

@ui-schema/kit-dnd

Version:

Drag and Drop Tools for (not only) UI-Schema

60 lines 1.67 kB
import { DndIntents } from '@ui-schema/kit-dnd/KitDnd'; export const calcIntentPos = (event, options = {}) => { const { clientY, clientX, initialClientX, initialClientY, targetWidth = 0, targetHeight = 0, targetX = 0, targetY = 0 } = event; const { cols = 12, edgeSize = 8 } = options; const intent = { x: DndIntents.same, y: DndIntents.same, colX: 0, colY: 0, edgeY: undefined, edgeX: undefined, posQuarter: undefined }; const offsetX = clientX - targetX; const offsetY = clientY - targetY; intent.colX = Math.ceil(Number((offsetX / (targetWidth / cols)).toFixed(0))); intent.colY = Math.ceil(Number((offsetY / (targetHeight / cols)).toFixed(0))); if (intent.colX > 6 && intent.colY <= 6) { intent.posQuarter = 'top-right'; } else if (intent.colX <= 6 && intent.colY <= 6) { intent.posQuarter = 'top-left'; } else if (intent.colX <= 6 && intent.colY > 6) { intent.posQuarter = 'bottom-left'; } else if (intent.colX > 6 && intent.colY > 6) { intent.posQuarter = 'bottom-right'; } if (offsetX < edgeSize) { intent.edgeX = 'left'; } else if (targetWidth - offsetX < edgeSize) { intent.edgeX = 'right'; } if (offsetY < edgeSize) { intent.edgeY = 'top'; } else if (targetHeight - offsetY < edgeSize) { intent.edgeY = 'bottom'; } if (clientX > initialClientX) { intent.x = DndIntents.right; } else if (clientX < initialClientX) { intent.x = DndIntents.left; } if (clientY > initialClientY) { intent.y = DndIntents.down; } else if (clientY < initialClientY) { intent.y = DndIntents.up; } return intent; };