import { HTMLAttributes } from 'react'; import { DragAndDropState } from '../DragAndDrop'; import { FiltersMap } from '@wix/bex-core'; import { action } from 'mobx'; export interface DndTestEventHandlersParams { id: string | number; disabled?: { draggable?: boolean; droppable?: boolean; }; state: DragAndDropState; } export const sortableItemTestEvents = ({ id, disabled, state, }: DndTestEventHandlersParams): Partial> => { return { onPointerDown: () => { if (disabled?.draggable) { return; } state.onDragStart({ active: { id } }); }, onPointerUp: async () => { if (disabled?.droppable || state.activeId == null) { return; } const isCancelled = await state.beforeDrop({ active: { id: state.activeId, }, over: { id, }, }); if (isCancelled) { return; } state.onDragEnd({ over: { id, }, }); }, onMouseMove: (event) => { if (disabled?.droppable || state.activeId == null) { return; } state.onDragMove({ active: { id: state.activeId }, delta: { x: event.nativeEvent.clientX, }, }); state.onDragOver({ over: { id, }, }); }, onKeyDown: (e) => { const keyboardCodes = state.keyboardCodes; if ( state.status === 'start' || (state.status === 'over' && keyboardCodes.move.includes(e.nativeEvent.code)) ) { state.onDragOver({ over: { id, }, }); return; } }, }; }; export const dragHandleTestEvents = ({ id, state, }: DndTestEventHandlersParams): Partial> => { return { onKeyDown: action((e) => { state.handleEvents?.onKeyDown?.(e); const keyboardCodes = state.keyboardCodes; if (state.status === 'start' || state.status === 'over') { if (keyboardCodes.end.includes(e.nativeEvent.code)) { if (state.activeId == null) { return; } state.beforeDrop({ active: { id: state.activeId }, over: { id: state.overId as string }, }); state.onDragEnd({ over: { id: state.overId as string } }); return; } if (keyboardCodes.cancel.includes(e.nativeEvent.code)) { state.onDragCancel(); return; } } if (keyboardCodes.start.includes(e.nativeEvent.code)) { state.onDragStart({ active: { id } }); return; } }), }; };