Skip to content

Commit 05539be

Browse files
vchimevADjenkov
authored and
ADjenkov
committed
refactor(dialogs): remove page wrapper
1 parent b8cee56 commit 05539be

File tree

1 file changed

+14
-11
lines changed

1 file changed

+14
-11
lines changed

Diff for: nativescript-angular/directives/dialogs.ts

+14-11
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import {
1111

1212
import { Page } from "tns-core-modules/ui/page";
1313
import { View, ViewBase } from "tns-core-modules/ui/core/view";
14+
import { ProxyViewContainer } from "tns-core-modules/ui/proxy-view-container/proxy-view-container";
1415

1516
import { AppHostView } from "../app-host-view";
1617
import { DetachedLoader } from "../common/detached-loader";
@@ -89,41 +90,43 @@ export class ModalDialogService {
8990
resolver,
9091
type,
9192
}: ShowDialogOptions): void {
92-
const page = pageFactory({ isModal: true, componentType: type });
93-
93+
let componentView: View;
9494
let detachedLoaderRef: ComponentRef<DetachedLoader>;
95+
9596
const closeCallback = (...args) => {
9697
doneCallback.apply(undefined, args);
97-
page.closeModal();
98+
if (componentView) {
99+
componentView.closeModal();
100+
}
98101
detachedLoaderRef.instance.detectChanges();
99102
detachedLoaderRef.destroy();
100103
};
101104

102105
const modalParams = new ModalDialogParams(context, closeCallback);
103-
104106
const providers = ReflectiveInjector.resolve([
105-
{ provide: Page, useValue: page },
106107
{ provide: ModalDialogParams, useValue: modalParams },
107108
]);
108109

109-
const childInjector = ReflectiveInjector.fromResolvedProviders(
110-
providers, containerRef.parentInjector);
110+
const childInjector = ReflectiveInjector.fromResolvedProviders(providers, containerRef.parentInjector);
111111
const detachedFactory = resolver.resolveComponentFactory(DetachedLoader);
112112
detachedLoaderRef = containerRef.createComponent(detachedFactory, -1, childInjector, null);
113113
detachedLoaderRef.instance.loadComponent(type).then((compRef) => {
114-
const componentView = <View>compRef.location.nativeElement;
114+
const detachedProxy = <ProxyViewContainer>compRef.location.nativeElement;
115+
116+
if (detachedProxy.getChildrenCount() > 1) {
117+
throw new Error("Modal contet has more than one root view.");
118+
}
119+
componentView = detachedProxy.getChildAt(0);
115120

116121
if (componentView.parent) {
117122
(<any>componentView.parent).removeChild(componentView);
118123
}
119124

120-
page.content = componentView;
121-
parentView.showModal(page, context, closeCallback, fullscreen);
125+
parentView.showModal(componentView, context, closeCallback, fullscreen);
122126
});
123127
}
124128
}
125129

126-
127130
@Directive({
128131
selector: "[modal-dialog-host]" // tslint:disable-line:directive-selector
129132
})

0 commit comments

Comments
 (0)