UNPKG

ngx-slice-kit

Version:

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

69 lines 10.7 kB
import { Inject, Injectable, PLATFORM_ID } from '@angular/core'; import { fromEvent, Subject } from 'rxjs'; import { PopupComponent } from './popup.component'; import { DOCUMENT, isPlatformServer } from '@angular/common'; import * as i0 from "@angular/core"; export class PopupService { constructor(document, platformId, injector, applicationRef, componentFactoryResolver) { this.document = document; this.platformId = platformId; this.injector = injector; this.applicationRef = applicationRef; this.componentFactoryResolver = componentFactoryResolver; this.opened = false; } showPopup(options = {}) { if (isPlatformServer(this.platformId)) { return; } if (this.opened) { throw new Error('Only one active popup instance are available'); } this.opened = true; const popup = this.document.createElement('sdk-popup'); const factory = this.componentFactoryResolver.resolveComponentFactory(PopupComponent); const popupComponentRef = factory.create(this.injector, [], popup); const { message = 'Are you sure?', title = 'Confirm action', ok = 'Ok', cancel = 'Cancel' } = options; popupComponentRef.instance.title = title; popupComponentRef.instance.message = message; popupComponentRef.instance.ok = ok; popupComponentRef.instance.cancel = cancel; this.keyupSub = fromEvent(this.document, 'keyup').subscribe((ev) => { ev.preventDefault(); ev.stopPropagation(); if (ev.code === 'Escape' || ev.key === 'Escape') { popupComponentRef.instance.closed.emit(false); } else if (ev.code === 'Enter' || ev.key === 'Enter') { popupComponentRef.instance.closed.emit(true); } }); this.document.body.appendChild(popup); this.applicationRef.attachView(popupComponentRef.hostView); const result = new Subject(); popupComponentRef.instance.closed.subscribe((res) => { result.next(res); result.complete(); this.keyupSub.unsubscribe(); this.document.body.removeChild(popup); this.applicationRef.detachView(popupComponentRef.hostView); this.opened = false; }); return result.asObservable(); } } PopupService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.3", ngImport: i0, type: PopupService, deps: [{ token: DOCUMENT }, { token: PLATFORM_ID }, { token: i0.Injector }, { token: i0.ApplicationRef }, { token: i0.ComponentFactoryResolver }], target: i0.ɵɵFactoryTarget.Injectable }); PopupService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.0.3", ngImport: i0, type: PopupService, providedIn: 'root' }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.3", ngImport: i0, type: PopupService, 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wdXAuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbmd4LXNsaWNlLWtpdC9zcmMvbGliL21vZGFscy9wb3B1cC9wb3B1cC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBNEMsTUFBTSxFQUFFLFVBQVUsRUFBWSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDcEgsT0FBTyxFQUFFLFNBQVMsRUFBYyxPQUFPLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUVuRCxPQUFPLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7O0FBSzdELE1BQU0sT0FBTyxZQUFZO0lBS3JCLFlBQzhCLFFBQWEsRUFDVixVQUFlLEVBQ3BDLFFBQWtCLEVBQ2xCLGNBQThCLEVBQzlCLHdCQUFrRDtRQUpoQyxhQUFRLEdBQVIsUUFBUSxDQUFLO1FBQ1YsZUFBVSxHQUFWLFVBQVUsQ0FBSztRQUNwQyxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ2xCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5Qiw2QkFBd0IsR0FBeEIsd0JBQXdCLENBQTBCO1FBUHZELFdBQU0sR0FBWSxLQUFLLENBQUM7SUFTL0IsQ0FBQztJQUVNLFNBQVMsQ0FBQyxVQUEwQixFQUFFO1FBQ3pDLElBQUksZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQ25DLE9BQU87U0FDVjtRQUVELElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNiLE1BQU0sSUFBSSxLQUFLLENBQUMsOENBQThDLENBQUMsQ0FBQztTQUNuRTtRQUVELElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ25CLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRXZELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyx1QkFBdUIsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUN0RixNQUFNLGlCQUFpQixHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFbkUsTUFBTSxFQUNGLE9BQU8sR0FBRyxlQUFlLEVBQ3pCLEtBQUssR0FBRyxnQkFBZ0IsRUFDeEIsRUFBRSxHQUFHLElBQUksRUFDVCxNQUFNLEdBQUcsUUFBUSxFQUNwQixHQUFHLE9BQU8sQ0FBQztRQUVaLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ3pDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBQzdDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO1FBQ25DLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBRTNDLElBQUksQ0FBQyxRQUFRLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBaUIsRUFBRSxFQUFFO1lBQzlFLEVBQUUsQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUNwQixFQUFFLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDckIsSUFBSSxFQUFFLENBQUMsSUFBSSxLQUFLLFFBQVEsSUFBSSxFQUFFLENBQUMsR0FBRyxLQUFLLFFBQVEsRUFBRTtnQkFDN0MsaUJBQWlCLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDakQ7aUJBQU0sSUFBSSxFQUFFLENBQUMsSUFBSSxLQUFLLE9BQU8sSUFBSSxFQUFFLENBQUMsR0FBRyxLQUFLLE9BQU8sRUFBRTtnQkFDbEQsaUJBQWlCLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDaEQ7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUV0QyxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUUzRCxNQUFNLE1BQU0sR0FBRyxJQUFJLE9BQU8sRUFBVyxDQUFDO1FBQ3RDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDaEQsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNqQixNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDbEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUM1QixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDM0QsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDeEIsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUNqQyxDQUFDOzt5R0FsRVEsWUFBWSxrQkFNVCxRQUFRLGFBQ1IsV0FBVzs2R0FQZCxZQUFZLGNBRlQsTUFBTTsyRkFFVCxZQUFZO2tCQUh4QixVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQjs7MEJBT1EsTUFBTTsyQkFBQyxRQUFROzswQkFDZixNQUFNOzJCQUFDLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBcHBsaWNhdGlvblJlZiwgQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLCBJbmplY3QsIEluamVjdGFibGUsIEluamVjdG9yLCBQTEFURk9STV9JRCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZnJvbUV2ZW50LCBPYnNlcnZhYmxlLCBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFBvcHVwQ29tcG9uZW50IH0gZnJvbSAnLi9wb3B1cC5jb21wb25lbnQnO1xuaW1wb3J0IHsgUG9wdXBJbnRlcmZhY2UgfSBmcm9tICcuL3BvcHVwLmludGVyZmFjZSc7XG5pbXBvcnQgeyBET0NVTUVOVCwgaXNQbGF0Zm9ybVNlcnZlciB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgUG9wdXBTZXJ2aWNlIHtcblxuICAgIHByaXZhdGUga2V5dXBTdWI6IFN1YnNjcmlwdGlvbjtcbiAgICBwdWJsaWMgb3BlbmVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBkb2N1bWVudDogYW55LFxuICAgICAgICBASW5qZWN0KFBMQVRGT1JNX0lEKSBwcml2YXRlIHBsYXRmb3JtSWQ6IGFueSxcbiAgICAgICAgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgICAgIHByaXZhdGUgYXBwbGljYXRpb25SZWY6IEFwcGxpY2F0aW9uUmVmLFxuICAgICAgICBwcml2YXRlIGNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxuICAgICkge1xuICAgIH1cblxuICAgIHB1YmxpYyBzaG93UG9wdXAob3B0aW9uczogUG9wdXBJbnRlcmZhY2UgPSB7fSk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgICAgICBpZiAoaXNQbGF0Zm9ybVNlcnZlcih0aGlzLnBsYXRmb3JtSWQpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5vcGVuZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignT25seSBvbmUgYWN0aXZlIHBvcHVwIGluc3RhbmNlIGFyZSBhdmFpbGFibGUnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMub3BlbmVkID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgcG9wdXAgPSB0aGlzLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3Nkay1wb3B1cCcpO1xuXG4gICAgICAgIGNvbnN0IGZhY3RvcnkgPSB0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlci5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShQb3B1cENvbXBvbmVudCk7XG4gICAgICAgIGNvbnN0IHBvcHVwQ29tcG9uZW50UmVmID0gZmFjdG9yeS5jcmVhdGUodGhpcy5pbmplY3RvciwgW10sIHBvcHVwKTtcblxuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICBtZXNzYWdlID0gJ0FyZSB5b3Ugc3VyZT8nLFxuICAgICAgICAgICAgdGl0bGUgPSAnQ29uZmlybSBhY3Rpb24nLFxuICAgICAgICAgICAgb2sgPSAnT2snLFxuICAgICAgICAgICAgY2FuY2VsID0gJ0NhbmNlbCdcbiAgICAgICAgfSA9IG9wdGlvbnM7XG5cbiAgICAgICAgcG9wdXBDb21wb25lbnRSZWYuaW5zdGFuY2UudGl0bGUgPSB0aXRsZTtcbiAgICAgICAgcG9wdXBDb21wb25lbnRSZWYuaW5zdGFuY2UubWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgICAgIHBvcHVwQ29tcG9uZW50UmVmLmluc3RhbmNlLm9rID0gb2s7XG4gICAgICAgIHBvcHVwQ29tcG9uZW50UmVmLmluc3RhbmNlLmNhbmNlbCA9IGNhbmNlbDtcblxuICAgICAgICB0aGlzLmtleXVwU3ViID0gZnJvbUV2ZW50KHRoaXMuZG9jdW1lbnQsICdrZXl1cCcpLnN1YnNjcmliZSgoZXY6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICAgICAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgIGlmIChldi5jb2RlID09PSAnRXNjYXBlJyB8fCBldi5rZXkgPT09ICdFc2NhcGUnKSB7XG4gICAgICAgICAgICAgICAgcG9wdXBDb21wb25lbnRSZWYuaW5zdGFuY2UuY2xvc2VkLmVtaXQoZmFsc2UpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChldi5jb2RlID09PSAnRW50ZXInIHx8IGV2LmtleSA9PT0gJ0VudGVyJykge1xuICAgICAgICAgICAgICAgIHBvcHVwQ29tcG9uZW50UmVmLmluc3RhbmNlLmNsb3NlZC5lbWl0KHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQocG9wdXApO1xuXG4gICAgICAgIHRoaXMuYXBwbGljYXRpb25SZWYuYXR0YWNoVmlldyhwb3B1cENvbXBvbmVudFJlZi5ob3N0Vmlldyk7XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcbiAgICAgICAgcG9wdXBDb21wb25lbnRSZWYuaW5zdGFuY2UuY2xvc2VkLnN1YnNjcmliZSgocmVzKSA9PiB7XG4gICAgICAgICAgICByZXN1bHQubmV4dChyZXMpO1xuICAgICAgICAgICAgcmVzdWx0LmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB0aGlzLmtleXVwU3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB0aGlzLmRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQocG9wdXApO1xuICAgICAgICAgICAgdGhpcy5hcHBsaWNhdGlvblJlZi5kZXRhY2hWaWV3KHBvcHVwQ29tcG9uZW50UmVmLmhvc3RWaWV3KTtcbiAgICAgICAgICAgIHRoaXMub3BlbmVkID0gZmFsc2U7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiByZXN1bHQuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxufVxuIl19