FazBrowse GitHub Viewer | Trending |
URL:
| Home
Tools: [Download Repo ZIP]   [Original HTTPS Page]

Frame.goBack now can accept entry to navigate back to · NativeScript/NativeScript@146ebef · GitHub

Commit 146ebef

Browse files
committed
Frame.goBack now can accept entry to navigate back to
1 parent 8b943f0 commit 146ebef

3 files changed

Lines changed: 58 additions & 3 deletions

File tree

‎apps/tests/navigation-tests.ts‎

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import TKUnit = require("./TKUnit");
22
import pageModule = require("ui/page");
33
import frame = require("ui/frame");
4+
import { Page } from "ui/page";
45

56
export var test_backstackVisible = function() {
67
var pageFactory = function(): pageModule.Page {
@@ -31,6 +32,46 @@ export var test_backstackVisible = function() {
3132
TKUnit.waitUntilReady(() => { return frame.topmost().currentPage === mainTestPage; });
3233
}
3334

35+
export var test_backToEntry = function() {
36+
let page = (tag) => () => {
37+
var p = new Page();
38+
p.tag = tag;
39+
return p;
40+
}
41+
let topmost = frame.topmost();
42+
let wait = tag => TKUnit.waitUntilReady(() => topmost.currentPage.tag === tag, 1);
43+
let navigate = tag => {
44+
topmost.navigate({ create: page(tag) });
45+
wait(tag)
46+
}
47+
let back = pages => {
48+
topmost.goBack(topmost.backStack[topmost.backStack.length - pages]);
49+
}
50+
let currentPageMustBe = tag => {
51+
wait(tag); // TODO: Add a timeout...
52+
TKUnit.assert(topmost.currentPage.tag === tag, "Expected current page to be " + tag + " it was " + topmost.currentPage.tag + " instead.");
53+
}
54+
55+
navigate("page1");
56+
navigate("page2");
57+
navigate("page3");
58+
navigate("page4");
59+
60+
currentPageMustBe("page4");
61+
back(2);
62+
currentPageMustBe("page2");
63+
back(1);
64+
currentPageMustBe("page1");
65+
navigate("page1.1");
66+
navigate("page1.2");
67+
currentPageMustBe("page1.2");
68+
back(1);
69+
currentPageMustBe("page1.1");
70+
back(1);
71+
currentPageMustBe("page1");
72+
back(1);
73+
}
74+
3475
// Clearing the history messes up the tests app.
3576
export var test_ClearHistory = function () {
3677
var pageFactory = function(): pageModule.Page {

‎ui/frame/frame-common.ts‎

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -152,14 +152,27 @@ export class Frame extends CustomLayoutView implements definition.Frame {
152152
return this._backStack.length > 0;
153153
}
154154

155-
public goBack() {
155+
/**
156+
* Navigates to the previous entry (if any) in the back stack.
157+
* @param to The backstack entry to navigate back to.
158+
*/
159+
public goBack(backstackEntry?: definition.BackstackEntry) {
156160
trace.write(this._getTraceId() + ".goBack();", trace.categories.Navigation);
157161
if (!this.canGoBack()) {
158162
// TODO: Do we need to throw an error?
159163
return;
160164
}
161165

162-
var backstackEntry = this._backStack.pop();
166+
if (!backstackEntry) {
167+
backstackEntry = this._backStack.pop();
168+
} else {
169+
let backIndex = this._backStack.indexOf(backstackEntry);
170+
if (backIndex < 0) {
171+
return;
172+
}
173+
this._backStack.splice(backIndex);
174+
}
175+
163176
var navigationContext: NavigationContext = {
164177
entry: backstackEntry,
165178
isBackNavigation: true

‎ui/frame/frame.d.ts‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,9 @@ declare module "ui/frame" {
1919

2020
/**
2121
* Navigates to the previous entry (if any) in the back stack.
22+
* @param to The backstack entry to navigate back to.
2223
*/
23-
goBack();
24+
goBack(to?: BackstackEntry);
2425

2526
/**
2627
* Checks whether the goBack operation is available.

0 commit comments

Comments
 (0)

Back | FazBrowse Home | New Git URL