MOBILE-3833 core: Fix RTL swipe navigation

main
Noel De Martin 2022-03-10 15:46:00 +01:00
parent f5c9c3d022
commit d6795d72b5
1 changed files with 37 additions and 7 deletions

View File

@ -16,7 +16,7 @@ import { AfterViewInit, Directive, ElementRef, Input, OnDestroy } from '@angula
import { CoreSwipeNavigationItemsManager } from '@classes/items-management/swipe-navigation-items-manager';
import { Gesture, GestureDetail } from '@ionic/angular';
import { CoreScreen } from '@services/screen';
import { GestureController } from '@singletons';
import { GestureController, Platform } from '@singletons';
const ACTIVATION_THRESHOLD = 150;
const SWIPE_FRICTION = 0.6;
@ -74,25 +74,55 @@ export class CoreSwipeNavigationDirective implements AfterViewInit, OnDestroy {
}
/**
* Swipe to previous item.
* Move to item to the left.
*/
swipeLeft(): void {
if (!this.enabled) {
return;
}
this.manager?.navigateToNextItem();
Platform.isRTL
? this.manager?.navigateToPreviousItem()
: this.manager?.navigateToNextItem();
}
/**
* Swipe to next item.
* Move to item to the right.
*/
swipeRight(): void {
if (!this.enabled) {
return;
}
this.manager?.navigateToPreviousItem();
Platform.isRTL
? this.manager?.navigateToNextItem()
: this.manager?.navigateToPreviousItem();
}
/**
* Check whether there is an item to the right of the current selection.
*/
protected async hasItemRight(): Promise<boolean> {
if (!this.manager) {
return false;
}
return Platform.isRTL
? await this.manager.hasNextItem()
: await this.manager.hasPreviousItem();
}
/**
* Check whether there is an item to the left of the current selection.
*/
protected async hasItemLeft(): Promise<boolean> {
if (!this.manager) {
return false;
}
return Platform.isRTL
? await this.manager.hasPreviousItem()
: await this.manager.hasNextItem();
}
/**
@ -127,7 +157,7 @@ export class CoreSwipeNavigationDirective implements AfterViewInit, OnDestroy {
protected async onRelease(event: GestureDetail): Promise<void> {
this.element.style.transition = '.5s ease-out';
if (event.deltaX > ACTIVATION_THRESHOLD && await this.manager?.hasPreviousItem()) {
if (event.deltaX > ACTIVATION_THRESHOLD && await this.hasItemRight()) {
this.preventClickOnElement();
this.swipeRight();
@ -136,7 +166,7 @@ export class CoreSwipeNavigationDirective implements AfterViewInit, OnDestroy {
return;
}
if (event.deltaX < -ACTIVATION_THRESHOLD && await this.manager?.hasNextItem()) {
if (event.deltaX < -ACTIVATION_THRESHOLD && await this.hasItemLeft()) {
this.element.style.transform = 'translateX(-100%) !important';
this.preventClickOnElement();