UNPKG

ngx-slice-kit

Version:

[![npm version](https://badge.fury.io/js/ngx-slice-kit.svg)](https://badge.fury.io/js/ngx-slice-kit)

95 lines 12.3 kB
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==