@ng-doc/ui-kit
Version:
<!-- PROJECT LOGO --> <br /> <div align="center"> <a href="https://github.com/ng-doc/ng-doc"> <img src="https://ng-doc.com/assets/images/ng-doc.svg?raw=true" alt="Logo" height="150px"> </a>
84 lines (80 loc) • 3.51 kB
JavaScript
import { Overlay } from '@angular/cdk/overlay';
import { ComponentPortal } from '@angular/cdk/portal';
import * as i0 from '@angular/core';
import { inject, NgZone, Injector, Injectable } from '@angular/core';
import { Router } from '@angular/router';
import { asArray } from '@ng-doc/core/helpers/as-array';
import { NgDocOverlayRef } from '@ng-doc/ui-kit/classes';
import { NgDocOverlayUtils } from '@ng-doc/ui-kit/utils';
import { PolymorpheusComponent } from '@tinkoff/ng-polymorpheus';
import { take } from 'rxjs/operators';
class NgDocOverlayService {
constructor() {
this.overlay = inject(Overlay);
this.ngZone = inject(NgZone);
this.injector = inject(Injector);
this.router = inject(Router);
}
open(content, config, providers = []) {
const overlayRef = this.createOverlay(config);
return this.attachTooltipContainer(content, overlayRef, config, providers);
}
attachTooltipContainer(content, overlay, config, providers) {
const containerPortal = new ComponentPortal(config.overlayContainer, config.viewContainerRef, config.viewContainerRef?.injector);
const containerRef = overlay.attach(containerPortal);
const overlayRef = new NgDocOverlayRef(overlay, config, containerRef.instance, this.ngZone, this.router);
if (content instanceof PolymorpheusComponent) {
content = new PolymorpheusComponent(content.component, this.createInjector(overlayRef, providers, config.viewContainerRef?.injector));
}
containerRef.setInput('config', config);
containerRef.setInput('content', content);
containerRef.instance.markForCheck();
return overlayRef;
}
createOverlay(config) {
const overlayRef = this.overlay.create(config);
overlayRef
.detachments()
.pipe(take(1))
.subscribe(() => {
overlayRef.hasAttached() && overlayRef.detach();
});
return overlayRef;
}
connectedPositionStrategy(origin, positions) {
return this.overlay
.position()
.flexibleConnectedTo(origin)
.withPositions(NgDocOverlayUtils.toConnectedPositions(asArray(positions)))
.withPush(true);
}
globalPositionStrategy() {
return this.overlay.position().global();
}
scrollStrategy() {
return this.overlay.scrollStrategies;
}
createInjector(overlayRef, providers, injector) {
return Injector.create({
providers: [
...providers,
{
provide: NgDocOverlayRef,
useValue: overlayRef,
},
],
parent: injector || this.injector,
});
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: NgDocOverlayService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: NgDocOverlayService, providedIn: 'root' }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: NgDocOverlayService, decorators: [{
type: Injectable,
args: [{ providedIn: 'root' }]
}], ctorParameters: () => [] });
/**
* Generated bundle index. Do not edit.
*/
export { NgDocOverlayService };
//# sourceMappingURL=ng-doc-ui-kit-services-overlay.mjs.map