UNPKG

ngx-slice-kit

Version:

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

97 lines 13.1 kB
import { Inject, Injectable, PLATFORM_ID } from '@angular/core'; import { DialogComponent } from './dialog.component'; import { fromEvent, Subject } from 'rxjs'; import { DOCUMENT, isPlatformServer } from '@angular/common'; import * as i0 from "@angular/core"; const LOWER_INDEX = 100; export class DialogService { 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 = []; } /** * showDialog runs dialog with specified component * @param component * specify component to render, required * @param options * dialog-options.interface, optional */ showDialog(component, options = {}) { if (isPlatformServer(this.platformId)) { return; } const { data, hideOnBackdrop = true, hideOnEscape = true, borderRadius = 0, disableScroll } = options; const dialog = this.document.createElement('sdk-dialog'); const factory = this.cfResolver.resolveComponentFactory(DialogComponent); const dialogRef = factory.create(this.injector, [], dialog); this.currentId++; dialogRef.instance.component = component; dialogRef.instance.data = data; dialogRef.instance.hideOnBackdrop = hideOnBackdrop; dialogRef.instance.hideOnEscape = hideOnEscape; dialogRef.instance.borderRadius = borderRadius; dialogRef.instance.disableScroll = disableScroll; dialogRef.instance.id = this.currentId; this.refs.push(dialogRef); if (hideOnEscape) { this.escapeListener(); } this.appRef.attachView(dialogRef.hostView); this.document.body.appendChild(dialog); const result = new Subject(); dialogRef.instance.closed.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(dialog); this.appRef.detachView(dialogRef.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.onEscape(); } }); } onEscape() { if (this.refs && this.refs.length) { const dialog = this.refs[this.refs.length - 1]; if (dialog.instance?.hideOnEscape) { dialog.instance?.closed.emit(null); } } } } DialogService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.3", ngImport: i0, type: DialogService, deps: [{ token: DOCUMENT }, { token: PLATFORM_ID }, { token: i0.Injector }, { token: i0.ApplicationRef }, { token: i0.ComponentFactoryResolver }], target: i0.ɵɵFactoryTarget.Injectable }); DialogService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.0.3", ngImport: i0, type: DialogService, providedIn: 'root' }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.3", ngImport: i0, type: DialogService, 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL25neC1zbGljZS1raXQvc3JjL2xpYi9tb2RhbHMvZGlhbG9nL2RpYWxvZy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBNEMsTUFBTSxFQUFFLFVBQVUsRUFBWSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDcEgsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxTQUFTLEVBQWMsT0FBTyxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUdwRSxPQUFPLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7O0FBRTdELE1BQU0sV0FBVyxHQUFHLEdBQUcsQ0FBQztBQUt4QixNQUFNLE9BQU8sYUFBYTtJQU10QixZQUM4QixRQUFhLEVBQ1YsVUFBZSxFQUNwQyxRQUFrQixFQUNsQixNQUFzQixFQUN0QixVQUFvQztRQUpsQixhQUFRLEdBQVIsUUFBUSxDQUFLO1FBQ1YsZUFBVSxHQUFWLFVBQVUsQ0FBSztRQUNwQyxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ2xCLFdBQU0sR0FBTixNQUFNLENBQWdCO1FBQ3RCLGVBQVUsR0FBVixVQUFVLENBQTBCO1FBVHhDLGNBQVMsR0FBRyxXQUFXLENBQUM7UUFDeEIsU0FBSSxHQUFHLEVBQUUsQ0FBQztJQVVsQixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksVUFBVSxDQUFDLFNBQVMsRUFBRSxVQUEyQixFQUFFO1FBQ3RELElBQUksZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQ25DLE9BQU87U0FDVjtRQUVELE1BQU0sRUFDRixJQUFJLEVBQ0osY0FBYyxHQUFHLElBQUksRUFDckIsWUFBWSxHQUFHLElBQUksRUFDbkIsWUFBWSxHQUFHLENBQUMsRUFDaEIsYUFBYSxFQUNoQixHQUFHLE9BQU8sQ0FBQztRQUNaLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBRXpELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsdUJBQXVCLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDekUsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUU1RCxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFFakIsU0FBUyxDQUFDLFFBQVEsQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO1FBQ3pDLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUMvQixTQUFTLENBQUMsUUFBUSxDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUM7UUFDbkQsU0FBUyxDQUFDLFFBQVEsQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO1FBQy9DLFNBQVMsQ0FBQyxRQUFRLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztRQUMvQyxTQUFTLENBQUMsUUFBUSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUM7UUFDakQsU0FBUyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUN2QyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUUxQixJQUFJLFlBQVksRUFBRTtZQUNkLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztTQUN6QjtRQUVELElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUUzQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFdkMsTUFBTSxNQUFNLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUM3QixTQUFTLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtZQUM3QyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2pCLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNsQixJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ2hCLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO2dCQUN4QixJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7b0JBQ2hCLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUM7aUJBQ2hDO2FBQ0o7WUFDRCxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDakIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMvQyxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ2pDLENBQUM7SUFFTSxjQUFjO1FBQ2pCLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFO1lBQzFDLE9BQU87U0FDVjtRQUVELElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFpQixFQUFFLEVBQUU7WUFDMUUsRUFBRSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3JCLEVBQUUsQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUNwQixJQUFJLEVBQUUsQ0FBQyxJQUFJLEtBQUssUUFBUSxJQUFJLEVBQUUsQ0FBQyxHQUFHLEtBQUssUUFBUSxFQUFFO2dCQUM3QyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7YUFDbkI7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTSxRQUFRO1FBQ1gsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQy9CLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDL0MsSUFBSSxNQUFNLENBQUMsUUFBUSxFQUFFLFlBQVksRUFBRTtnQkFDL0IsTUFBTSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ3RDO1NBQ0o7SUFDTCxDQUFDOzswR0FqR1EsYUFBYSxrQkFPVixRQUFRLGFBQ1IsV0FBVzs4R0FSZCxhQUFhLGNBRlYsTUFBTTsyRkFFVCxhQUFhO2tCQUh6QixVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQjs7MEJBUVEsTUFBTTsyQkFBQyxRQUFROzswQkFDZixNQUFNOzJCQUFDLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBcHBsaWNhdGlvblJlZiwgQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLCBJbmplY3QsIEluamVjdGFibGUsIEluamVjdG9yLCBQTEFURk9STV9JRCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi9kaWFsb2cuY29tcG9uZW50JztcbmltcG9ydCB7IGZyb21FdmVudCwgT2JzZXJ2YWJsZSwgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IERpYWxvZ0ludGVyZmFjZSB9IGZyb20gJy4vZGlhbG9nLmludGVyZmFjZSc7XG5pbXBvcnQgeyBET0NVTUVOVCwgaXNQbGF0Zm9ybVNlcnZlciB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbmNvbnN0IExPV0VSX0lOREVYID0gMTAwO1xuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIERpYWxvZ1NlcnZpY2Uge1xuXG4gICAgcHJpdmF0ZSBjdXJyZW50SWQgPSBMT1dFUl9JTkRFWDtcbiAgICBwcml2YXRlIHJlZnMgPSBbXTtcbiAgICBwdWJsaWMgZXNjYXBlU3ViOiBTdWJzY3JpcHRpb247XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBkb2N1bWVudDogYW55LFxuICAgICAgICBASW5qZWN0KFBMQVRGT1JNX0lEKSBwcml2YXRlIHBsYXRmb3JtSWQ6IGFueSxcbiAgICAgICAgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgICAgIHByaXZhdGUgYXBwUmVmOiBBcHBsaWNhdGlvblJlZixcbiAgICAgICAgcHJpdmF0ZSBjZlJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXJcbiAgICApIHtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBzaG93RGlhbG9nIHJ1bnMgZGlhbG9nIHdpdGggc3BlY2lmaWVkIGNvbXBvbmVudFxuICAgICAqIEBwYXJhbSBjb21wb25lbnRcbiAgICAgKiBzcGVjaWZ5IGNvbXBvbmVudCB0byByZW5kZXIsIHJlcXVpcmVkXG4gICAgICogQHBhcmFtIG9wdGlvbnNcbiAgICAgKiBkaWFsb2ctb3B0aW9ucy5pbnRlcmZhY2UsIG9wdGlvbmFsXG4gICAgICovXG4gICAgcHVibGljIHNob3dEaWFsb2coY29tcG9uZW50LCBvcHRpb25zOiBEaWFsb2dJbnRlcmZhY2UgPSB7fSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgICAgIGlmIChpc1BsYXRmb3JtU2VydmVyKHRoaXMucGxhdGZvcm1JZCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICBoaWRlT25CYWNrZHJvcCA9IHRydWUsXG4gICAgICAgICAgICBoaWRlT25Fc2NhcGUgPSB0cnVlLFxuICAgICAgICAgICAgYm9yZGVyUmFkaXVzID0gMCxcbiAgICAgICAgICAgIGRpc2FibGVTY3JvbGxcbiAgICAgICAgfSA9IG9wdGlvbnM7XG4gICAgICAgIGNvbnN0IGRpYWxvZyA9IHRoaXMuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2RrLWRpYWxvZycpO1xuXG4gICAgICAgIGNvbnN0IGZhY3RvcnkgPSB0aGlzLmNmUmVzb2x2ZXIucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoRGlhbG9nQ29tcG9uZW50KTtcbiAgICAgICAgY29uc3QgZGlhbG9nUmVmID0gZmFjdG9yeS5jcmVhdGUodGhpcy5pbmplY3RvciwgW10sIGRpYWxvZyk7XG5cbiAgICAgICAgdGhpcy5jdXJyZW50SWQrKztcblxuICAgICAgICBkaWFsb2dSZWYuaW5zdGFuY2UuY29tcG9uZW50ID0gY29tcG9uZW50O1xuICAgICAgICBkaWFsb2dSZWYuaW5zdGFuY2UuZGF0YSA9IGRhdGE7XG4gICAgICAgIGRpYWxvZ1JlZi5pbnN0YW5jZS5oaWRlT25CYWNrZHJvcCA9IGhpZGVPbkJhY2tkcm9wO1xuICAgICAgICBkaWFsb2dSZWYuaW5zdGFuY2UuaGlkZU9uRXNjYXBlID0gaGlkZU9uRXNjYXBlO1xuICAgICAgICBkaWFsb2dSZWYuaW5zdGFuY2UuYm9yZGVyUmFkaXVzID0gYm9yZGVyUmFkaXVzO1xuICAgICAgICBkaWFsb2dSZWYuaW5zdGFuY2UuZGlzYWJsZVNjcm9sbCA9IGRpc2FibGVTY3JvbGw7XG4gICAgICAgIGRpYWxvZ1JlZi5pbnN0YW5jZS5pZCA9IHRoaXMuY3VycmVudElkO1xuICAgICAgICB0aGlzLnJlZnMucHVzaChkaWFsb2dSZWYpO1xuXG4gICAgICAgIGlmIChoaWRlT25Fc2NhcGUpIHtcbiAgICAgICAgICAgIHRoaXMuZXNjYXBlTGlzdGVuZXIoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYXBwUmVmLmF0dGFjaFZpZXcoZGlhbG9nUmVmLmhvc3RWaWV3KTtcblxuICAgICAgICB0aGlzLmRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZGlhbG9nKTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBuZXcgU3ViamVjdCgpO1xuICAgICAgICBkaWFsb2dSZWYuaW5zdGFuY2UuY2xvc2VkLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHJlc3VsdC5uZXh0KHJlcyk7XG4gICAgICAgICAgICByZXN1bHQuY29tcGxldGUoKTtcbiAgICAgICAgICAgIHRoaXMucmVmcy5wb3AoKTtcbiAgICAgICAgICAgIGlmICh0aGlzLnJlZnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZXNjYXBlU3ViKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXNjYXBlU3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5jdXJyZW50SWQtLTtcbiAgICAgICAgICAgIHRoaXMuZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChkaWFsb2cpO1xuICAgICAgICAgICAgdGhpcy5hcHBSZWYuZGV0YWNoVmlldyhkaWFsb2dSZWYuaG9zdFZpZXcpO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gcmVzdWx0LmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBlc2NhcGVMaXN0ZW5lcigpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZXNjYXBlU3ViICYmICF0aGlzLmVzY2FwZVN1Yi5jbG9zZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZXNjYXBlU3ViID0gZnJvbUV2ZW50KGRvY3VtZW50LCAna2V5dXAnKS5zdWJzY3JpYmUoKGV2OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICAgICAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBpZiAoZXYuY29kZSA9PT0gJ0VzY2FwZScgfHwgZXYua2V5ID09PSAnRXNjYXBlJykge1xuICAgICAgICAgICAgICAgIHRoaXMub25Fc2NhcGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uRXNjYXBlKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5yZWZzICYmIHRoaXMucmVmcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IGRpYWxvZyA9IHRoaXMucmVmc1t0aGlzLnJlZnMubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICBpZiAoZGlhbG9nLmluc3RhbmNlPy5oaWRlT25Fc2NhcGUpIHtcbiAgICAgICAgICAgICAgICBkaWFsb2cuaW5zdGFuY2U/LmNsb3NlZC5lbWl0KG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuIl19