Skip to content

Commit 46cd184

Browse files
committed
fix(modal): exception when calling ViewBase.showModal(...)
1 parent 49ea10b commit 46cd184

2 files changed

Lines changed: 106 additions & 2 deletions

File tree

tests/app/ui/page/page-tests-common.ts

Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -421,6 +421,110 @@ export function test_WhenPageIsNavigatedToFrameCurrentPageIsNowTheSameAsThePage(
421421
page.off(Label.loadedEvent, navigatedEventHandler);
422422
}
423423

424+
export function test_WhenViewBaseCallsShowModal_WithArguments_ShouldOpenModal() {
425+
let modalClosed = false;
426+
427+
const modalCloseCallback = function (returnValue: any) {
428+
modalClosed = true;
429+
}
430+
431+
const createTabItems = function(count: number) {
432+
var items = new Array<TabViewItem>();
433+
434+
for (var i = 0; i < count; i++) {
435+
var label = new Label();
436+
label.text = "Tab " + i;
437+
var tabEntry = new TabViewItem();
438+
tabEntry.title = "Tab " + i;
439+
tabEntry.view = label;
440+
441+
items.push(tabEntry);
442+
}
443+
444+
return items;
445+
}
446+
447+
const modalPageShownModallyEventHandler = function(args: ShownModallyData) {
448+
const page = <Page>args.object;
449+
page.off(View.shownModallyEvent, modalPageShownModallyEventHandler);
450+
args.closeCallback();
451+
}
452+
453+
const hostNavigatedToEventHandler = function(args) {
454+
const page = <Page>args.object;
455+
page.off(Page.navigatedToEvent, hostNavigatedToEventHandler);
456+
457+
const modalPage = new Page();
458+
modalPage.id = "modalPage_test_WhenViewBaseCallsShowModal_WithArguments_ShouldOpenModal";
459+
modalPage.on(View.shownModallyEvent, modalPageShownModallyEventHandler);
460+
const tabViewItem = (<TabView>page.content).items[0];
461+
tabViewItem.showModal(modalPage, {}, modalCloseCallback, false, false);
462+
}
463+
464+
const masterPageFactory = function(): Page {
465+
const masterPage = new Page();
466+
masterPage.id = "masterPage_test_WhenViewBaseCallsShowModal_WithArguments_ShouldOpenModal";
467+
masterPage.on(Page.navigatedToEvent, hostNavigatedToEventHandler)
468+
469+
const tabView = new TabView();
470+
tabView.items = createTabItems(2);
471+
masterPage.content = tabView;
472+
473+
return masterPage;
474+
};
475+
476+
helper.navigate(masterPageFactory);
477+
478+
TKUnit.waitUntilReady(() => modalClosed);
479+
}
480+
481+
export function test_WhenViewBaseCallsShowModal_WithArguments_ShouldThrow() {
482+
let navigatedTo = false;
483+
484+
const createTabItems = function(count: number) {
485+
var items = new Array<TabViewItem>();
486+
487+
for (var i = 0; i < count; i++) {
488+
var label = new Label();
489+
label.text = "Tab " + i;
490+
var tabEntry = new TabViewItem();
491+
tabEntry.title = "Tab " + i;
492+
tabEntry.view = label;
493+
494+
items.push(tabEntry);
495+
}
496+
497+
return items;
498+
}
499+
500+
const hostNavigatedToEventHandler = function(args) {
501+
const page = <Page>args.object;
502+
page.off(Page.navigatedToEvent, hostNavigatedToEventHandler);
503+
504+
const hostPage = <Page>args.object;
505+
const tabViewItem = (<TabView>page.content).items[0];
506+
TKUnit.assertThrows(() => tabViewItem.showModal());
507+
508+
navigatedTo = true;
509+
}
510+
511+
const masterPageFactory = function(): Page {
512+
const masterPage = new Page();
513+
masterPage.id = "masterPage_test_WhenViewBaseCallsShowModal_WithArguments_ShouldThrow";
514+
masterPage.on(Page.navigatedToEvent, hostNavigatedToEventHandler)
515+
516+
const tabView = new TabView();
517+
tabView.items = createTabItems(2);
518+
masterPage.content = tabView;
519+
520+
return masterPage;
521+
};
522+
523+
helper.navigate(masterPageFactory);
524+
525+
TKUnit.waitUntilReady(() => navigatedTo);
526+
}
527+
424528
export function test_WhenNavigatingForwardAndBack_IsBackNavigationIsCorrect() {
425529
let page1;
426530
let page2;

tns-core-modules/ui/core/view-base/view-base.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -946,9 +946,9 @@ export abstract class ViewBase extends Observable implements ViewBaseDefinition
946946
}
947947
}
948948

949-
public showModal(): ViewBase {
949+
public showModal(...args): ViewBase {
950950
const parent = this.parent;
951-
return parent && parent.showModal();
951+
return parent && parent.showModal(...args);
952952
}
953953

954954
public closeModal(): void {

0 commit comments

Comments
 (0)