ngx-slice-kit
Version:
[](https://badge.fury.io/js/ngx-slice-kit)
95 lines • 12.3 kB
JavaScript
import { Inject, Injectable, PLATFORM_ID } from '@angular/core';
import { fromEvent, Subject } from 'rxjs';
import { DOCUMENT, isPlatformServer } from '@angular/common';
import { OverlayComponent } from './overlay.component';
import * as i0 from "@angular/core";
const LOWER_INDEX = 100;
export class OverlayService {
constructor(document, platformId, injector, appRef, cfResolver) {
this.document = document;
this.platformId = platformId;
this.injector = injector;
this.appRef = appRef;
this.cfResolver = cfResolver;
this.currentId = LOWER_INDEX;
this.refs = [];
}
/**
* showOverlay runs overlay with specified component
* @param options
* overlay.model, optional
*/
createOverlay(options = {}) {
if (isPlatformServer(this.platformId)) {
return;
}
const overlay = this.document.createElement('sdk-overlay');
const factory = this.cfResolver.resolveComponentFactory(OverlayComponent);
const overlayRef = factory.create(this.injector, [], overlay);
this.currentId++;
options.index = this.currentId;
overlayRef.instance.options = options;
this.refs.push(overlayRef);
if (options.hideOnEscape) {
this.escapeListener();
}
this.appRef.attachView(overlayRef.hostView);
this.document.body.appendChild(overlay);
const result = new Subject();
overlayRef.instance.resultEvent.subscribe((res) => {
result.next(res);
result.complete();
this.refs.pop();
if (this.refs.length === 0) {
if (this.escapeSub) {
this.escapeSub.unsubscribe();
}
}
this.currentId--;
this.document.body.removeChild(overlay);
this.appRef.detachView(overlayRef.hostView);
});
return result.asObservable();
}
escapeListener() {
if (this.escapeSub && !this.escapeSub.closed) {
return;
}
this.escapeSub = fromEvent(document, 'keyup').subscribe((ev) => {
ev.stopPropagation();
ev.preventDefault();
if (ev.code === 'Escape' || ev.key === 'Escape') {
this.onResultKey(null);
}
else if (ev.code === 'Enter' || ev.key === 'Enter') {
// this.onResultKey(true);
}
else if (ev.code === 'Space' || ev.key === 'Space') {
// this.onResultKey();
}
});
}
onResultKey(emitValue) {
if (this.refs && this.refs.length) {
const dialog = this.refs[this.refs.length - 1];
if (dialog.instance.hideOnEscape) {
dialog.instance.closed.emit(emitValue);
}
}
}
}
OverlayService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.3", ngImport: i0, type: OverlayService, deps: [{ token: DOCUMENT }, { token: PLATFORM_ID }, { token: i0.Injector }, { token: i0.ApplicationRef }, { token: i0.ComponentFactoryResolver }], target: i0.ɵɵFactoryTarget.Injectable });
OverlayService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.0.3", ngImport: i0, type: OverlayService, providedIn: 'root' });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.3", ngImport: i0, type: OverlayService, decorators: [{
type: Injectable,
args: [{
providedIn: 'root'
}]
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
type: Inject,
args: [DOCUMENT]
}] }, { type: undefined, decorators: [{
type: Inject,
args: [PLATFORM_ID]
}] }, { type: i0.Injector }, { type: i0.ApplicationRef }, { type: i0.ComponentFactoryResolver }]; } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3ZlcmxheS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9uZ3gtc2xpY2Uta2l0L3NyYy9saWIvb3ZlcmxheS9vdmVybGF5LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUE0QyxNQUFNLEVBQUUsVUFBVSxFQUFZLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNwSCxPQUFPLEVBQUUsU0FBUyxFQUFjLE9BQU8sRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFDcEUsT0FBTyxFQUFFLFFBQVEsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzdELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDOztBQUd2RCxNQUFNLFdBQVcsR0FBRyxHQUFHLENBQUM7QUFLeEIsTUFBTSxPQUFPLGNBQWM7SUFNdkIsWUFDOEIsUUFBYSxFQUNWLFVBQWUsRUFDcEMsUUFBa0IsRUFDbEIsTUFBc0IsRUFDdEIsVUFBb0M7UUFKbEIsYUFBUSxHQUFSLFFBQVEsQ0FBSztRQUNWLGVBQVUsR0FBVixVQUFVLENBQUs7UUFDcEMsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUNsQixXQUFNLEdBQU4sTUFBTSxDQUFnQjtRQUN0QixlQUFVLEdBQVYsVUFBVSxDQUEwQjtRQVR4QyxjQUFTLEdBQUcsV0FBVyxDQUFDO1FBQ3hCLFNBQUksR0FBUSxFQUFFLENBQUM7SUFVdkIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxhQUFhLENBQUMsVUFBMEIsRUFBRTtRQUM3QyxJQUFJLGdCQUFnQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRTtZQUNuQyxPQUFPO1NBQ1Y7UUFFRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUUzRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLHVCQUF1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QUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxZQUFZLEVBQUU7Z0JBQzlCLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQzthQUMxQztTQUNKO0lBQ0wsQ0FBQzs7MkdBdkZRLGNBQWMsa0JBT1gsUUFBUSxhQUNSLFdBQVc7K0dBUmQsY0FBYyxjQUZYLE1BQU07MkZBRVQsY0FBYztrQkFIMUIsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckI7OzBCQVFRLE1BQU07MkJBQUMsUUFBUTs7MEJBQ2YsTUFBTTsyQkFBQyxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXBwbGljYXRpb25SZWYsIENvbXBvbmVudEZhY3RvcnlSZXNvbHZlciwgSW5qZWN0LCBJbmplY3RhYmxlLCBJbmplY3RvciwgUExBVEZPUk1fSUQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGZyb21FdmVudCwgT2JzZXJ2YWJsZSwgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBET0NVTUVOVCwgaXNQbGF0Zm9ybVNlcnZlciB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBPdmVybGF5Q29tcG9uZW50IH0gZnJvbSAnLi9vdmVybGF5LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBPdmVybGF5T3B0aW9ucyB9IGZyb20gJy4vb3ZlcmxheS5tb2RlbCc7XG5cbmNvbnN0IExPV0VSX0lOREVYID0gMTAwO1xuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIE92ZXJsYXlTZXJ2aWNlIHtcblxuICAgIHByaXZhdGUgY3VycmVudElkID0gTE9XRVJfSU5ERVg7XG4gICAgcHJpdmF0ZSByZWZzOiBhbnkgPSBbXTtcbiAgICBwdWJsaWMgZXNjYXBlU3ViOiBTdWJzY3JpcHRpb247XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBkb2N1bWVudDogYW55LFxuICAgICAgICBASW5qZWN0KFBMQVRGT1JNX0lEKSBwcml2YXRlIHBsYXRmb3JtSWQ6IGFueSxcbiAgICAgICAgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgICAgIHByaXZhdGUgYXBwUmVmOiBBcHBsaWNhdGlvblJlZixcbiAgICAgICAgcHJpdmF0ZSBjZlJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gICAgKSB7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogc2hvd092ZXJsYXkgcnVucyBvdmVybGF5IHdpdGggc3BlY2lmaWVkIGNvbXBvbmVudFxuICAgICAqIEBwYXJhbSBvcHRpb25zXG4gICAgICogb3ZlcmxheS5tb2RlbCwgb3B0aW9uYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgY3JlYXRlT3ZlcmxheShvcHRpb25zOiBPdmVybGF5T3B0aW9ucyA9IHt9KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICAgICAgaWYgKGlzUGxhdGZvcm1TZXJ2ZXIodGhpcy5wbGF0Zm9ybUlkKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgb3ZlcmxheSA9IHRoaXMuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2RrLW92ZXJsYXknKTtcblxuICAgICAgICBjb25zdCBmYWN0b3J5ID0gdGhpcy5jZlJlc29sdmVyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KE92ZXJsYXlDb21wb25lbnQpO1xuICAgICAgICBjb25zdCBvdmVybGF5UmVmID0gZmFjdG9yeS5jcmVhdGUodGhpcy5pbmplY3RvciwgW10sIG92ZXJsYXkpO1xuXG4gICAgICAgIHRoaXMuY3VycmVudElkKys7XG5cbiAgICAgICAgb3B0aW9ucy5pbmRleCA9IHRoaXMuY3VycmVudElkO1xuICAgICAgICBvdmVybGF5UmVmLmluc3RhbmNlLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgICAgICB0aGlzLnJlZnMucHVzaChvdmVybGF5UmVmKTtcblxuICAgICAgICBpZiAob3B0aW9ucy5oaWRlT25Fc2NhcGUpIHtcbiAgICAgICAgICAgIHRoaXMuZXNjYXBlTGlzdGVuZXIoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYXBwUmVmLmF0dGFjaFZpZXcob3ZlcmxheVJlZi5ob3N0Vmlldyk7XG5cbiAgICAgICAgdGhpcy5kb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKG92ZXJsYXkpO1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBTdWJqZWN0KCk7XG4gICAgICAgIG92ZXJsYXlSZWYuaW5zdGFuY2UucmVzdWx0RXZlbnQuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAgICAgcmVzdWx0Lm5leHQocmVzKTtcbiAgICAgICAgICAgIHJlc3VsdC5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgdGhpcy5yZWZzLnBvcCgpO1xuICAgICAgICAgICAgaWYgKHRoaXMucmVmcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5lc2NhcGVTdWIpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lc2NhcGVTdWIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRJZC0tO1xuICAgICAgICAgICAgdGhpcy5kb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKG92ZXJsYXkpO1xuICAgICAgICAgICAgdGhpcy5hcHBSZWYuZGV0YWNoVmlldyhvdmVybGF5UmVmLmhvc3RWaWV3KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdC5hc09ic2VydmFibGUoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGVzY2FwZUxpc3RlbmVyKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5lc2NhcGVTdWIgJiYgIXRoaXMuZXNjYXBlU3ViLmNsb3NlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5lc2NhcGVTdWIgPSBmcm9tRXZlbnQoZG9jdW1lbnQsICdrZXl1cCcpLnN1YnNjcmliZSgoZXY6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICAgICAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGlmIChldi5jb2RlID09PSAnRXNjYXBlJyB8fCBldi5rZXkgPT09ICdFc2NhcGUnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vblJlc3VsdEtleShudWxsKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXYuY29kZSA9PT0gJ0VudGVyJyB8fCBldi5rZXkgPT09ICdFbnRlcicpIHtcbiAgICAgICAgICAgICAgICAvLyB0aGlzLm9uUmVzdWx0S2V5KHRydWUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChldi5jb2RlID09PSAnU3BhY2UnIHx8IGV2LmtleSA9PT0gJ1NwYWNlJykge1xuICAgICAgICAgICAgICAgIC8vIHRoaXMub25SZXN1bHRLZXkoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvblJlc3VsdEtleShlbWl0VmFsdWU/OiBhbnkpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMucmVmcyAmJiB0aGlzLnJlZnMubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBkaWFsb2cgPSB0aGlzLnJlZnNbdGhpcy5yZWZzLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgaWYgKGRpYWxvZy5pbnN0YW5jZS5oaWRlT25Fc2NhcGUpIHtcbiAgICAgICAgICAgICAgICBkaWFsb2cuaW5zdGFuY2UuY2xvc2VkLmVtaXQoZW1pdFZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==