function createLock(name) { let lock = null; return () => { const openLock = () => { lock = null; }; if (lock === null) { lock = name; return openLock; } return false; }; } const globalHorizontalLock = createLock("dragHorizontal"); const globalVerticalLock = createLock("dragVertical"); function getGlobalLock(drag) { let lock = false; if (drag === "y") { lock = globalVerticalLock(); } else if (drag === "x") { lock = globalHorizontalLock(); } else { const openHorizontal = globalHorizontalLock(); const openVertical = globalVerticalLock(); if (openHorizontal && openVertical) { lock = () => { openHorizontal(); openVertical(); }; } else { // Release the locks because we don't use them if (openHorizontal) openHorizontal(); if (openVertical) openVertical(); } } return lock; } function isDragActive() { // Check the gesture lock - if we get it, it means no drag gesture is active // and we can safely fire the tap gesture. const openGestureLock = getGlobalLock(true); if (!openGestureLock) return true; openGestureLock(); return false; } export { createLock, getGlobalLock, isDragActive };