Skip to content

Commit

Permalink
fix(router): fix partial gesture (#18977)
Browse files Browse the repository at this point in the history
fixes #18462
  • Loading branch information
manucorporat authored Aug 6, 2019
1 parent 8f7853c commit 713ea8a
Show file tree
Hide file tree
Showing 2 changed files with 59 additions and 11 deletions.
22 changes: 11 additions & 11 deletions angular/src/directives/navigation/stack-controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,14 @@ export class StackController {
// Wait until previous transitions finish
return this.zone.runOutsideAngular(() => {
return this.wait(() => {
// disconnect leaving page from change detection to
// reduce jank during the page transition
if (leavingView) {
leavingView.ref.changeDetectorRef.detach();
}
// In case the enteringView is the same as the leavingPage we need to reattach()
enteringView.ref.changeDetectorRef.reattach();

return this.transition(enteringView, leavingView, animation, this.canGoBack(1), false)
.then(() => cleanupAsync(enteringView, views, viewsSnapshot, this.location))
.then(() => ({
Expand Down Expand Up @@ -161,7 +169,7 @@ export class StackController {
enteringView, // entering view
leavingView, // leaving view
'back',
true,
this.canGoBack(2),
true
);
});
Expand All @@ -173,6 +181,8 @@ export class StackController {
if (shouldComplete) {
this.skipTransition = true;
this.pop(1);
} else if (this.activeView) {
cleanup(this.activeView, this.views, this.views, this.location);
}
}

Expand Down Expand Up @@ -216,16 +226,6 @@ export class StackController {
if (leavingView === enteringView) {
return Promise.resolve(false);
}

// disconnect leaving page from change detection to
// reduce jank during the page transition
if (leavingView) {
leavingView.ref.changeDetectorRef.detach();
}
// In case the enteringView is the same as the leavingPage we need to reattach()
if (enteringView) {
enteringView.ref.changeDetectorRef.reattach();
}
const enteringEl = enteringView ? enteringView.element : undefined;
const leavingEl = leavingView ? leavingView.element : undefined;
const containerEl = this.containerEl;
Expand Down
48 changes: 48 additions & 0 deletions angular/test/test-app/e2e/src/navigation.e2e-spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,40 @@ describe('navigation', () => {
return handleErrorMessages();
});

it ('should swipe and abort', async () => {
await browser.get('/router-link?ionic:mode=ios');
await waitTime(500);
await element(by.css('#routerLink')).click();
await waitTime(500);
await swipeLeft(5);
await waitTime(500);

const pageHidden = element(by.css('app-router-link'));
expect(await pageHidden.getAttribute('aria-hidden')).toEqual('true');
expect(await pageHidden.getAttribute('class')).toEqual('ion-page ion-page-hidden');

const pageVisible = element(by.css('app-router-link-page'));
expect(await pageVisible.getAttribute('aria-hidden')).toEqual(null);
expect(await pageVisible.getAttribute('class')).toEqual('ion-page can-go-back');
});

it ('should swipe and go back', async () => {
await browser.get('/router-link?ionic:mode=ios');
await waitTime(500);
await element(by.css('#routerLink')).click();
await waitTime(500);
await testStack('ion-router-outlet', ['app-router-link', 'app-router-link-page']);

await swipeLeft(300);

await waitTime(1000);
await testStack('ion-router-outlet', ['app-router-link']);

const page = element(by.css('app-router-link'));
expect(await page.getAttribute('aria-hidden')).toEqual(null);
expect(await page.getAttribute('class')).toEqual('ion-page');
})

it('should navigate correctly', async () => {
await browser.get('/navigation/page1');
await waitTime(2000);
Expand All @@ -22,3 +56,17 @@ describe('navigation', () => {
});

});

function swipeLeft(end: number) {
return browser.driver.touchActions()
.tapAndHold({x: 5, y: 1})
.move({x: 6, y: 1})
.move({x: 7, y: 1})
.move({x: 8, y: 1})
.move({x: 30, y: 1})
.move({x: 300, y: 1})
.move({x: end, y: 1})
.move({x: end, y: 1})
.release({x: end, y: 1})
.perform();
}

0 comments on commit 713ea8a

Please sign in to comment.