import type { KeyboardCoordinateGetter } from '@dnd-kit/core' import { KeyboardCode } from '@dnd-kit/core' import { size } from '@planview/pv-utilities' //Multiplier of distance when meta key is pressed const META_SPEED = 3 /** * Function to return `KeyboardCoordinateGetter` to be passed into the keyboard sensor */ export const coordinatesFactory = (rowHeight: number): KeyboardCoordinateGetter => (event, args) => { const { currentCoordinates } = args const modifierPressed = event.ctrlKey || event.metaKey || event.shiftKey || event.altKey const multiplier = modifierPressed ? META_SPEED : 1 const yDelta = rowHeight * 0.5 * multiplier const xDelta = size.small * multiplier switch (event.code) { case KeyboardCode.Right: return { ...currentCoordinates, x: currentCoordinates.x + xDelta, } case KeyboardCode.Left: return { ...currentCoordinates, x: currentCoordinates.x - xDelta, } case KeyboardCode.Down: if (modifierPressed) { event.preventDefault() } return { ...currentCoordinates, y: currentCoordinates.y + yDelta, } case KeyboardCode.Up: if (modifierPressed) { event.preventDefault() } return { ...currentCoordinates, y: currentCoordinates.y - yDelta, } } return undefined }