|
|
|
/*
|
|
|
|
* https://github.com/morethanwords/tweb
|
|
|
|
* Copyright (C) 2019-2021 Eduard Kuzmenko
|
|
|
|
* https://github.com/morethanwords/tweb/blob/master/LICENSE
|
|
|
|
*/
|
|
|
|
|
|
|
|
import SwipeHandler, { SwipeHandlerOptions } from "../../components/swipeHandler";
|
|
|
|
import cancelEvent from "./cancelEvent";
|
|
|
|
import findUpClassName from "./findUpClassName";
|
|
|
|
import isSwipingBackSafari from "./isSwipingBackSafari";
|
|
|
|
|
|
|
|
export type SwipeHandlerHorizontalOptions = SwipeHandlerOptions & {
|
|
|
|
// xThreshold?: number
|
|
|
|
};
|
|
|
|
|
|
|
|
export default function handleHorizontalSwipe(options: SwipeHandlerHorizontalOptions) {
|
|
|
|
let cancelY = false;
|
|
|
|
return new SwipeHandler({
|
|
|
|
...options,
|
|
|
|
verifyTouchTarget: (e) => {
|
|
|
|
return !findUpClassName(e.target, 'progress-line') &&
|
|
|
|
!isSwipingBackSafari(e) &&
|
|
|
|
(options.verifyTouchTarget ? options.verifyTouchTarget(e) : true);
|
|
|
|
},
|
|
|
|
onSwipe: (xDiff, yDiff, e) => {
|
|
|
|
if(!cancelY && Math.abs(yDiff) > 20) {
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
if(Math.abs(xDiff) > Math.abs(yDiff)) {
|
|
|
|
cancelEvent(e);
|
|
|
|
cancelY = true;
|
|
|
|
} else if(!cancelY && Math.abs(yDiff) > Math.abs(xDiff)/* || Math.abs(yDiff) > 20 */) {
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* if(!cancelY && options.xThreshold !== undefined && xDiff >= options.xThreshold) {
|
|
|
|
cancelY = true;
|
|
|
|
} */
|
|
|
|
|
|
|
|
return options.onSwipe(xDiff, yDiff, e);
|
|
|
|
},
|
|
|
|
onReset: () => {
|
|
|
|
cancelY = false;
|
|
|
|
options.onReset && options.onReset();
|
|
|
|
},
|
|
|
|
cancelEvent: false // cannot use cancelEvent on Safari iOS because scroll will be canceled too
|
|
|
|
});
|
|
|
|
}
|