import type { PointerEvent, KeyboardEvent } from 'react';
import {
PointerSensor as LibPointerSensor,
KeyboardSensor as LibKeyboardSensor,
} from '@dnd-kit/core';
export class PointerSensor extends LibPointerSensor {
static activators = [
{
eventName: 'onPointerDown' as const,
handler: ({ nativeEvent: event }: PointerEvent) => {
return shouldHandleEvent(event.target as HTMLElement);
},
},
];
}
export class KeyboardSensor extends LibKeyboardSensor {
static activators = [
{
eventName: 'onKeyDown' as const,
handler: ({ nativeEvent: event }: KeyboardEvent<Element>) => {
return shouldHandleEvent(event.target as HTMLElement);
},
},
];
}
function shouldHandleEvent(element: HTMLElement | null) {
let cur = element;
while (cur) {
if (cur.dataset && cur.dataset.noDnd) {
return false;
}
cur = cur.parentElement;
}
return true;
}