ngx-slice-kit
Version:
[](https://badge.fury.io/js/ngx-slice-kit)
69 lines • 10.7 kB
JavaScript
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