ngx-slice-kit
Version:
[](https://badge.fury.io/js/ngx-slice-kit)
97 lines • 13.1 kB
JavaScript
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL25neC1zbGljZS1raXQvc3JjL2xpYi9tb2RhbHMvZGlhbG9nL2RpYWxvZy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBNEMsTUFBTSxFQUFFLFVBQVUsRUFBWSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDcEgsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxTQUFTLEVBQWMsT0FBTyxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUdwRSxPQUFPLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7O0FBRTdELE1BQU0sV0FBVyxHQUFHLEdBQUcsQ0FBQztBQUt4QixNQUFNLE9BQU8sYUFBYTtJQU10QixZQUM4QixRQUFhLEVBQ1YsVUFBZSxFQUNwQyxRQUFrQixFQUNsQixNQUFzQixFQUN0QixVQUFvQztRQUpsQixhQUFRLEdBQVIsUUFBUSxDQUFLO1FBQ1YsZUFBVSxHQUFWLFVBQVUsQ0FBSztRQUNwQyxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ2xCLFdBQU0sR0FBTixNQUFNLENBQWdCO1FBQ3RCLGVBQVUsR0FBVixVQUFVLENBQTBCO1FBVHhDLGNBQVMsR0FBRyxXQUFXLENBQUM7UUFDeEIsU0FBSSxHQUFHLEVBQUUsQ0FBQztJQVVsQixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksVUFBVSxDQUFDLFNBQVMsRUFBRSxVQUEyQixFQUFFO1FBQ3RELElBQUksZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQ25DLE9BQU87U0FDVjtRQUVELE1BQU0sRUFDRixJQUFJLEVBQ0osY0FBYyxHQUFHLElBQUksRUFDckIsWUFBWSxHQUFHLElBQUksRUFDbkIsWUFBWSxHQUFHLENBQUMsRUFDaEIsYUFBYSxF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O1FBQ1gsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQy9CLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDL0MsSUFBSSxNQUFNLENBQUMsUUFBUSxFQUFFLFlBQVksRUFBRTtnQkFDL0IsTUFBTSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ3RDO1NBQ0o7SUFDTCxDQUFDOzswR0FqR1EsYUFBYSxrQkFPVixRQUFRLGFBQ1IsV0FBVzs4R0FSZCxhQUFhLGNBRlYsTUFBTTsyRkFFVCxhQUFhO2tCQUh6QixVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQjs7MEJBUVEsTUFBTTsyQkFBQyxRQUFROzswQkFDZixNQUFNOzJCQUFDLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBcHBsaWNhdGlvblJlZiwgQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLCBJbmplY3QsIEluamVjdGFibGUsIEluamVjdG9yLCBQTEFURk9STV9JRCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi9kaWFsb2cuY29tcG9uZW50JztcbmltcG9ydCB7IGZyb21FdmVudCwgT2JzZXJ2YWJsZSwgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IERpYWxvZ0ludGVyZmFjZSB9IGZyb20gJy4vZGlhbG9nLmludGVyZmFjZSc7XG5pbXBvcnQgeyBET0NVTUVOVCwgaXNQbGF0Zm9ybVNlcnZlciB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbmNvbnN0IExPV0VSX0lOREVYID0gMTAwO1xuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIERpYWxvZ1NlcnZpY2Uge1xuXG4gICAgcHJpdmF0ZSBjdXJyZW50SWQgPSBMT1dFUl9JTkRFWDtcbiAgICBwcml2YXRlIHJlZnMgPSBbXTtcbiAgICBwdWJsaWMgZXNjYXBlU3ViOiBTdWJzY3JpcHRpb247XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBkb2N1bWVudDogYW55LFxuICAgICAgICBASW5qZWN0KFBMQVRGT1JNX0lEKSBwcml2YXRlIHBsYXRmb3JtSWQ6IGFueSxcbiAgICAgICAgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgICAgIHByaXZhdGUgYXBwUmVmOiBBcHBsaWNhdGlvblJlZixcbiAgICAgICAgcHJpdmF0ZSBjZlJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXJcbiAgICApIHtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBzaG93RGlhbG9nIHJ1bnMgZGlhbG9nIHdpdGggc3BlY2lmaWVkIGNvbXBvbmVudFxuICAgICAqIEBwYXJhbSBjb21wb25lbnRcbiAgICAgKiBzcGVjaWZ5IGNvbXBvbmVudCB0byByZW5kZXIsIHJlcXVpcmVkXG4gICAgICogQHBhcmFtIG9wdGlvbnNcbiAgICAgKiBkaWFsb2ctb3B0aW9ucy5pbnRlcmZhY2UsIG9wdGlvbmFsXG4gICAgICovXG4gICAgcHVibGljIHNob3dEaWFsb2coY29tcG9uZW50LCBvcHRpb25zOiBEaWFsb2dJbnRlcmZhY2UgPSB7fSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgICAgIGlmIChpc1BsYXRmb3JtU2VydmVyKHRoaXMucGxhdGZvcm1JZCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICBoaWRlT25CYWNrZHJvcCA9IHRydWUsXG4gICAgICAgICAgICBoaWRlT25Fc2NhcGUgPSB0cnVlLFxuICAgICAgICAgICAgYm9yZGVyUmFkaXVzID0gMCxcbiAgICAgICAgICAgIGRpc2FibGVTY3JvbGxcbiAgICAgICAgfSA9IG9wdGlvbnM7XG4gICAgICAgIGNvbnN0IGRpYWxvZyA9IHRoaXMuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2RrLWRpYWxvZycpO1xuXG4gICAgICAgIGNvbnN0IGZhY3RvcnkgPSB0aGlzLmNmUmVzb2x2ZXIucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoRGlhbG9nQ29tcG9uZW50KTtcbiAgICAgICAgY29uc3QgZGlhbG9nUmVmID0gZmFjdG9yeS5jcmVhdGUodGhpcy5pbmplY3RvciwgW10sIGRpYWxvZyk7XG5cbiAgICAgICAgdGhpcy5jdXJyZW50SWQrKztcblxuICAgICAgICBkaWFsb2dSZWYuaW5zdGFuY2UuY29tcG9uZW50ID0gY29tcG9uZW50O1xuICAgICAgICBkaWFsb2dSZWYuaW5zdGFuY2UuZGF0YSA9IGRhdGE7XG4gICAgICAgIGRpYWxvZ1JlZi5pbnN0YW5jZS5oaWRlT25CYWNrZHJvcCA9IGhpZGVPbkJhY2tkcm9wO1xuICAgICAgICBkaWFsb2dSZWYuaW5zdGFuY2UuaGlkZU9uRXNjYXBlID0gaGlkZU9uRXNjYXBlO1xuICAgICAgICBkaWFsb2dSZWYuaW5zdGFuY2UuYm9yZGVyUmFkaXVzID0gYm9yZGVyUmFkaXVzO1xuICAgICAgICBkaWFsb2dSZWYuaW5zdGFuY2UuZGlzYWJsZVNjcm9sbCA9IGRpc2FibGVTY3JvbGw7XG4gICAgICAgIGRpYWxvZ1JlZi5pbnN0YW5jZS5pZCA9IHRoaXMuY3VycmVudElkO1xuICAgICAgICB0aGlzLnJlZnMucHVzaChkaWFsb2dSZWYpO1xuXG4gICAgICAgIGlmIChoaWRlT25Fc2NhcGUpIHtcbiAgICAgICAgICAgIHRoaXMuZXNjYXBlTGlzdGVuZXIoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYXBwUmVmLmF0dGFjaFZpZXcoZGlhbG9nUmVmLmhvc3RWaWV3KTtcblxuICAgICAgICB0aGlzLmRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZGlhbG9nKTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBuZXcgU3ViamVjdCgpO1xuICAgICAgICBkaWFsb2dSZWYuaW5zdGFuY2UuY2xvc2VkLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHJlc3VsdC5uZXh0KHJlcyk7XG4gICAgICAgICAgICByZXN1bHQuY29tcGxldGUoKTtcbiAgICAgICAgICAgIHRoaXMucmVmcy5wb3AoKTtcbiAgICAgICAgICAgIGlmICh0aGlzLnJlZnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZXNjYXBlU3ViKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXNjYXBlU3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5jdXJyZW50SWQtLTtcbiAgICAgICAgICAgIHRoaXMuZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChkaWFsb2cpO1xuICAgICAgICAgICAgdGhpcy5hcHBSZWYuZGV0YWNoVmlldyhkaWFsb2dSZWYuaG9zdFZpZXcpO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gcmVzdWx0LmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBlc2NhcGVMaXN0ZW5lcigpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZXNjYXBlU3ViICYmICF0aGlzLmVzY2FwZVN1Yi5jbG9zZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZXNjYXBlU3ViID0gZnJvbUV2ZW50KGRvY3VtZW50LCAna2V5dXAnKS5zdWJzY3JpYmUoKGV2OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICAgICAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBpZiAoZXYuY29kZSA9PT0gJ0VzY2FwZScgfHwgZXYua2V5ID09PSAnRXNjYXBlJykge1xuICAgICAgICAgICAgICAgIHRoaXMub25Fc2NhcGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uRXNjYXBlKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5yZWZzICYmIHRoaXMucmVmcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IGRpYWxvZyA9IHRoaXMucmVmc1t0aGlzLnJlZnMubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICBpZiAoZGlhbG9nLmluc3RhbmNlPy5oaWRlT25Fc2NhcGUpIHtcbiAgICAgICAgICAgICAgICBkaWFsb2cuaW5zdGFuY2U/LmNsb3NlZC5lbWl0KG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuIl19