@mui/x-internal-gestures
Version:
The core engine of GestureEvents, a modern and robust multi-pointer gesture detection library for JavaScript.
63 lines (60 loc) • 1.66 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.turnWheel = void 0;
/**
* Implementation of the turnWheel gesture for testing.
*
* @param options - The options for the turnWheel gesture.
* @param advanceTimers - Optional function to advance timers in tests.
* @returns A promise that resolves when the turnWheel gesture is completed.
*/
const turnWheel = async (pointerManager, options, advanceTimers) => {
const {
target,
pointer,
delay = 50,
deltaX = 0,
deltaY = 100,
deltaZ = 0,
deltaMode = 0,
turns = 1
} = options;
if (!target) {
throw new Error('Target element is required for turnWheel gesture');
}
const parsedPointer = pointerManager.parseMousePointer(pointer, target);
// Create the WheelEvent
const createWheelEvent = () => {
return new WheelEvent('wheel', {
bubbles: true,
cancelable: true,
view: window,
clientX: parsedPointer.x,
clientY: parsedPointer.y,
deltaX,
deltaY,
deltaZ,
deltaMode
});
};
// Dispatch wheel events
for (let i = 0; i < turns; i += 1) {
const wheelEvent = createWheelEvent();
parsedPointer.target.dispatchEvent(wheelEvent);
if (i < turns - 1) {
// Wait for the specified delay between turns, except for the last one
if (advanceTimers) {
// eslint-disable-next-line no-await-in-loop
await advanceTimers(delay);
} else {
// eslint-disable-next-line no-await-in-loop
await new Promise(resolve => {
setTimeout(resolve, delay);
});
}
}
}
};
exports.turnWheel = turnWheel;