@ng-bootstrap/ng-bootstrap
Version:
Angular powered Bootstrap
70 lines • 11.1 kB
JavaScript
import { ApplicationRef, inject, Injector, NgZone, TemplateRef, ViewContainerRef, } from '@angular/core';
import { of } from 'rxjs';
import { mergeMap, take, tap } from 'rxjs/operators';
import { ngbRunTransition } from './transition/ngbTransition';
import { DOCUMENT } from '@angular/common';
export class ContentRef {
constructor(nodes, viewRef, componentRef) {
this.nodes = nodes;
this.viewRef = viewRef;
this.componentRef = componentRef;
}
}
export class PopupService {
constructor(_componentType) {
this._componentType = _componentType;
this._windowRef = null;
this._contentRef = null;
this._document = inject(DOCUMENT);
this._applicationRef = inject(ApplicationRef);
this._injector = inject(Injector);
this._viewContainerRef = inject(ViewContainerRef);
this._ngZone = inject(NgZone);
}
open(content, templateContext, animation = false) {
if (!this._windowRef) {
this._contentRef = this._getContentRef(content, templateContext);
this._windowRef = this._viewContainerRef.createComponent(this._componentType, {
injector: this._injector,
projectableNodes: this._contentRef.nodes,
});
}
const { nativeElement } = this._windowRef.location;
const transition$ = this._ngZone.onStable.pipe(take(1), mergeMap(() => ngbRunTransition(this._ngZone, nativeElement, ({ classList }) => classList.add('show'), {
animation,
runningTransition: 'continue',
})));
return { windowRef: this._windowRef, transition$ };
}
close(animation = false) {
if (!this._windowRef) {
return of(undefined);
}
return ngbRunTransition(this._ngZone, this._windowRef.location.nativeElement, ({ classList }) => classList.remove('show'), { animation, runningTransition: 'stop' }).pipe(tap(() => {
if (this._windowRef) {
// this is required because of the container='body' option
this._viewContainerRef.remove(this._viewContainerRef.indexOf(this._windowRef.hostView));
this._windowRef = null;
}
if (this._contentRef?.viewRef) {
this._applicationRef.detachView(this._contentRef.viewRef);
this._contentRef.viewRef.destroy();
this._contentRef = null;
}
}));
}
_getContentRef(content, templateContext) {
if (!content) {
return new ContentRef([]);
}
else if (content instanceof TemplateRef) {
const viewRef = content.createEmbeddedView(templateContext);
this._applicationRef.attachView(viewRef);
return new ContentRef([viewRef.rootNodes], viewRef);
}
else {
return new ContentRef([[this._document.createTextNode(`${content}`)]]);
}
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wdXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdXRpbC9wb3B1cC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ04sY0FBYyxFQUVkLE1BQU0sRUFDTixRQUFRLEVBQ1IsTUFBTSxFQUNOLFdBQVcsRUFFWCxnQkFBZ0IsR0FFaEIsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0QyxPQUFPLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVyRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFM0MsTUFBTSxPQUFPLFVBQVU7SUFDdEIsWUFDUSxLQUFlLEVBQ2YsT0FBaUIsRUFDakIsWUFBZ0M7UUFGaEMsVUFBSyxHQUFMLEtBQUssQ0FBVTtRQUNmLFlBQU8sR0FBUCxPQUFPLENBQVU7UUFDakIsaUJBQVksR0FBWixZQUFZLENBQW9CO0lBQ3JDLENBQUM7Q0FDSjtBQUVELE1BQU0sT0FBTyxZQUFZO0lBVXhCLFlBQW9CLGNBQXVCO1FBQXZCLG1CQUFjLEdBQWQsY0FBYyxDQUFTO1FBVG5DLGVBQVUsR0FBMkIsSUFBSSxDQUFDO1FBQzFDLGdCQUFXLEdBQXNCLElBQUksQ0FBQztRQUV0QyxjQUFTLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzdCLG9CQUFlLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3pDLGNBQVMsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDN0Isc0JBQWlCLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDN0MsWUFBTyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUVhLENBQUM7SUFFL0Ms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T0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1NBQ3BEO2FBQU07WUFDTixPQUFPLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxHQUFHLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDdkU7SUFDRixDQUFDO0NBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuXHRBcHBsaWNhdGlvblJlZixcblx0Q29tcG9uZW50UmVmLFxuXHRpbmplY3QsXG5cdEluamVjdG9yLFxuXHROZ1pvbmUsXG5cdFRlbXBsYXRlUmVmLFxuXHRUeXBlLFxuXHRWaWV3Q29udGFpbmVyUmVmLFxuXHRWaWV3UmVmLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1lcmdlTWFwLCB0YWtlLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IG5nYlJ1blRyYW5zaXRpb24gfSBmcm9tICcuL3RyYW5zaXRpb24vbmdiVHJhbnNpdGlvbic7XG5pbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbmV4cG9ydCBjbGFzcyBDb250ZW50UmVmIHtcblx0Y29uc3RydWN0b3IoXG5cdFx0cHVibGljIG5vZGVzOiBOb2RlW11bXSxcblx0XHRwdWJsaWMgdmlld1JlZj86IFZpZXdSZWYsXG5cdFx0cHVibGljIGNvbXBvbmVudFJlZj86IENvbXBvbmVudFJlZjxhbnk+LFxuXHQpIHt9XG59XG5cbmV4cG9ydCBjbGFzcyBQb3B1cFNlcnZpY2U8VD4ge1xuXHRwcml2YXRlIF93aW5kb3dSZWY6IENvbXBvbmVudFJlZjxUPiB8IG51bGwgPSBudWxsO1xuXHRwcml2YXRlIF9jb250ZW50UmVmOiBDb250ZW50UmVmIHwgbnVsbCA9IG51bGw7XG5cblx0cHJpdmF0ZSBfZG9jdW1lbnQgPSBpbmplY3QoRE9DVU1FTlQpO1xuXHRwcml2YXRlIF9hcHBsaWNhdGlvblJlZiA9IGluamVjdChBcHBsaWNhdGlvblJlZik7XG5cdHByaXZhdGUgX2luamVjdG9yID0gaW5qZWN0KEluamVjdG9yKTtcblx0cHJpdmF0ZSBfdmlld0NvbnRhaW5lclJlZiA9IGluamVjdChWaWV3Q29udGFpbmVyUmVmKTtcblx0cHJpdmF0ZSBfbmdab25lID0gaW5qZWN0KE5nWm9uZSk7XG5cblx0Y29uc3RydWN0b3IocHJpdmF0ZSBfY29tcG9uZW50VHlwZTogVHlwZTxUPikge31cblxuXHRvcGVuKFxuXHRcdGNvbnRlbnQ/OiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+LFxuXHRcdHRlbXBsYXRlQ29udGV4dD86IGFueSxcblx0XHRhbmltYXRpb24gPSBmYWxzZSxcblx0KTogeyB3aW5kb3dSZWY6IENvbXBvbmVudFJlZjxUPjsgdHJhbnNpdGlvbiQ6IE9ic2VydmFibGU8dm9pZD4gfSB7XG5cdFx0aWYgKCF0aGlzLl93aW5kb3dSZWYpIHtcblx0XHRcdHRoaXMuX2NvbnRlbnRSZWYgPSB0aGlzLl9nZXRDb250ZW50UmVmKGNvbnRlbnQsIHRlbXBsYXRlQ29udGV4dCk7XG5cdFx0XHR0aGlzLl93aW5kb3dSZWYgPSB0aGlzLl92aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUNvbXBvbmVudCh0aGlzLl9jb21wb25lbnRUeXBlLCB7XG5cdFx0XHRcdGluamVjdG9yOiB0aGlzLl9pbmplY3Rvcixcblx0XHRcdFx0cHJvamVjdGFibGVOb2RlczogdGhpcy5fY29udGVudFJlZi5ub2Rlcyxcblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdGNvbnN0IHsgbmF0aXZlRWxlbWVudCB9ID0gdGhpcy5fd2luZG93UmVmLmxvY2F0aW9uO1xuXHRcdGNvbnN0IHRyYW5zaXRpb24kID0gdGhpcy5fbmdab25lLm9uU3RhYmxlLnBpcGUoXG5cdFx0XHR0YWtlKDEpLFxuXHRcdFx0bWVyZ2VNYXAoKCkgPT5cblx0XHRcdFx0bmdiUnVuVHJhbnNpdGlvbih0aGlzLl9uZ1pvbmUsIG5hdGl2ZUVsZW1lbnQsICh7IGNsYXNzTGlzdCB9KSA9PiBjbGFzc0xpc3QuYWRkKCdzaG93JyksIHtcblx0XHRcdFx0XHRhbmltYXRpb24sXG5cdFx0XHRcdFx0cnVubmluZ1RyYW5zaXRpb246ICdjb250aW51ZScsXG5cdFx0XHRcdH0pLFxuXHRcdFx0KSxcblx0XHQpO1xuXG5cdFx0cmV0dXJuIHsgd2luZG93UmVmOiB0aGlzLl93aW5kb3dSZWYsIHRyYW5zaXRpb24kIH07XG5cdH1cblxuXHRjbG9zZShhbmltYXRpb24gPSBmYWxzZSk6IE9ic2VydmFibGU8dm9pZD4ge1xuXHRcdGlmICghdGhpcy5fd2luZG93UmVmKSB7XG5cdFx0XHRyZXR1cm4gb2YodW5kZWZpbmVkKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbmdiUnVuVHJhbnNpdGlvbihcblx0XHRcdHRoaXMuX25nWm9uZSxcblx0XHRcdHRoaXMuX3dpbmRvd1JlZi5sb2NhdGlvbi5uYXRpdmVFbGVtZW50LFxuXHRcdFx0KHsgY2xhc3NMaXN0IH0pID0+IGNsYXNzTGlzdC5yZW1vdmUoJ3Nob3cnKSxcblx0XHRcdHsgYW5pbWF0aW9uLCBydW5uaW5nVHJhbnNpdGlvbjogJ3N0b3AnIH0sXG5cdFx0KS5waXBlKFxuXHRcdFx0dGFwKCgpID0+IHtcblx0XHRcdFx0aWYgKHRoaXMuX3dpbmRvd1JlZikge1xuXHRcdFx0XHRcdC8vIHRoaXMgaXMgcmVxdWlyZWQgYmVjYXVzZSBvZiB0aGUgY29udGFpbmVyPSdib2R5JyBvcHRpb25cblx0XHRcdFx0XHR0aGlzLl92aWV3Q29udGFpbmVyUmVmLnJlbW92ZSh0aGlzLl92aWV3Q29udGFpbmVyUmVmLmluZGV4T2YodGhpcy5fd2luZG93UmVmLmhvc3RWaWV3KSk7XG5cdFx0XHRcdFx0dGhpcy5fd2luZG93UmVmID0gbnVsbDtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAodGhpcy5fY29udGVudFJlZj8udmlld1JlZikge1xuXHRcdFx0XHRcdHRoaXMuX2FwcGxpY2F0aW9uUmVmLmRldGFjaFZpZXcodGhpcy5fY29udGVudFJlZi52aWV3UmVmKTtcblx0XHRcdFx0XHR0aGlzLl9jb250ZW50UmVmLnZpZXdSZWYuZGVzdHJveSgpO1xuXHRcdFx0XHRcdHRoaXMuX2NvbnRlbnRSZWYgPSBudWxsO1xuXHRcdFx0XHR9XG5cdFx0XHR9KSxcblx0XHQpO1xuXHR9XG5cblx0cHJpdmF0ZSBfZ2V0Q29udGVudFJlZihjb250ZW50Pzogc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55PiwgdGVtcGxhdGVDb250ZXh0PzogYW55KTogQ29udGVudFJlZiB7XG5cdFx0aWYgKCFjb250ZW50KSB7XG5cdFx0XHRyZXR1cm4gbmV3IENvbnRlbnRSZWYoW10pO1xuXHRcdH0gZWxzZSBpZiAoY29udGVudCBpbnN0YW5jZW9mIFRlbXBsYXRlUmVmKSB7XG5cdFx0XHRjb25zdCB2aWV3UmVmID0gY29udGVudC5jcmVhdGVFbWJlZGRlZFZpZXcodGVtcGxhdGVDb250ZXh0KTtcblx0XHRcdHRoaXMuX2FwcGxpY2F0aW9uUmVmLmF0dGFjaFZpZXcodmlld1JlZik7XG5cdFx0XHRyZXR1cm4gbmV3IENvbnRlbnRSZWYoW3ZpZXdSZWYucm9vdE5vZGVzXSwgdmlld1JlZik7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBuZXcgQ29udGVudFJlZihbW3RoaXMuX2RvY3VtZW50LmNyZWF0ZVRleHROb2RlKGAke2NvbnRlbnR9YCldXSk7XG5cdFx0fVxuXHR9XG59XG4iXX0=