UNPKG

@wulperstudio/cms

Version:
94 lines (93 loc) 3.25 kB
/* eslint-disable consistent-return */ import { closestCorners, getFirstCollision, KeyboardCode } from '@dnd-kit/core'; var directions = [KeyboardCode.Down, KeyboardCode.Right, KeyboardCode.Up, KeyboardCode.Left]; export var coordinateGetter = function coordinateGetter(event, _ref) { var _ref$context = _ref.context, active = _ref$context.active, droppableRects = _ref$context.droppableRects, droppableContainers = _ref$context.droppableContainers, collisionRect = _ref$context.collisionRect; if (directions.includes(event.code)) { event.preventDefault(); if (!active || !collisionRect) { return; } var filteredContainers = []; droppableContainers.getEnabled().forEach(function (entry) { if (!entry || entry != null && entry.disabled) { return; } var rect = droppableRects.get(entry.id); if (!rect) { return; } var data = entry.data.current; if (data) { var type = data.type, children = data.children; if (type === 'container' && (children == null ? void 0 : children.length) > 0) { var _active$data$current; if (((_active$data$current = active.data.current) == null ? void 0 : _active$data$current.type) !== 'container') { return; } } } // eslint-disable-next-line default-case switch (event.code) { case KeyboardCode.Down: if (collisionRect.top < rect.top) { filteredContainers.push(entry); } break; case KeyboardCode.Up: if (collisionRect.top > rect.top) { filteredContainers.push(entry); } break; case KeyboardCode.Left: if (collisionRect.left >= rect.left + rect.width) { filteredContainers.push(entry); } break; case KeyboardCode.Right: if (collisionRect.left + collisionRect.width <= rect.left) { filteredContainers.push(entry); } break; } }); var collisions = closestCorners({ active: active, collisionRect: collisionRect, droppableRects: droppableRects, droppableContainers: filteredContainers, pointerCoordinates: null }); var closestId = getFirstCollision(collisions, 'id'); if (closestId != null) { var newDroppable = droppableContainers.get(closestId); var newNode = newDroppable == null ? void 0 : newDroppable.node.current; var newRect = newDroppable == null ? void 0 : newDroppable.rect.current; if (newNode && newRect) { var _newDroppable$data$cu; if (newDroppable.id === 'placeholder') { return { x: newRect.left + (newRect.width - collisionRect.width) / 2, y: newRect.top + (newRect.height - collisionRect.height) / 2 }; } if (((_newDroppable$data$cu = newDroppable.data.current) == null ? void 0 : _newDroppable$data$cu.type) === 'container') { return { x: newRect.left + 20, y: newRect.top + 74 }; } return { x: newRect.left, y: newRect.top }; } } } return undefined; };