@doku-dev/doku-fragment
Version:
A new Angular UI library that moving away from Bootstrap and built from scratch.
109 lines • 14.4 kB
JavaScript
import { DOCUMENT } from '@angular/common';
import { Inject, Injectable, Injector, createComponent, } from '@angular/core';
import { DokuActiveToast, DokuToastRef } from './toast-ref';
import { DokuToast } from './toast.component';
import { TOAST_CONTAINER_CLASS } from './toast.constant';
import * as i0 from "@angular/core";
export class DokuToastElementService {
constructor(envInjector, appRef, document) {
this.envInjector = envInjector;
this.appRef = appRef;
this.document = document;
this.toastRefs = [];
}
openToast(data) {
const activeToast = new DokuActiveToast();
const toastComponentRef = this.createToastComponent(activeToast, data);
const toastRef = new DokuToastRef(toastComponentRef, this, data);
activeToast.dismiss = () => {
toastRef.dismiss();
};
this.registerToastRef(toastRef);
toastComponentRef.changeDetectorRef.detach();
toastComponentRef.changeDetectorRef.detectChanges();
toastComponentRef.changeDetectorRef.markForCheck();
this.attachToastContainer();
this.attachToastInContainer(toastComponentRef);
toastRef['startAutoDismiss']();
return toastRef;
}
dismissAll() {
this.toastRefs.forEach((toast) => toast.dismiss());
}
removeContainerElement() {
const container = this.getToastContainerElement();
if (!container)
return;
const hasChild = container.hasChildNodes();
if (hasChild)
return;
container.remove();
}
createToastComponent(activeToast, data) {
const elementInjector = Injector.create({
providers: [{ provide: DokuActiveToast, useValue: activeToast }],
});
let projectableNodes;
if (data.text) {
projectableNodes = [[this.document.createTextNode(data.text)]];
}
if (data.template) {
const context = { $implicit: activeToast };
const viewRef = data.template.createEmbeddedView(context);
this.appRef.attachView(viewRef);
projectableNodes = [viewRef.rootNodes];
}
const component = createComponent(DokuToast, {
environmentInjector: this.envInjector,
elementInjector,
projectableNodes,
});
component.instance.state = data.state || 'neutral';
component.instance.dismissible = !!data.dismissible;
this.appRef.attachView(component.hostView);
return component;
}
attachToastContainer() {
const containerExists = !!this.getToastContainerElement();
if (!containerExists) {
const el = this.createToastContainerElement();
this.document.body.appendChild(el);
}
}
attachToastInContainer(toastComponent) {
const containerEl = this.getToastContainerElement();
if (containerEl) {
containerEl.appendChild(toastComponent.location.nativeElement);
}
}
createToastContainerElement() {
const divEl = this.document.createElement('div');
divEl.classList.add(TOAST_CONTAINER_CLASS);
return divEl;
}
getToastContainerElement() {
return this.document.body.querySelector(`div.${TOAST_CONTAINER_CLASS}`);
}
registerToastRef(ref) {
const unregister = () => {
const index = this.toastRefs.indexOf(ref);
if (index > -1) {
this.toastRefs.splice(index, 1);
}
};
this.toastRefs.push(ref);
ref['result'].then(unregister);
}
}
DokuToastElementService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: DokuToastElementService, deps: [{ token: i0.EnvironmentInjector }, { token: i0.ApplicationRef }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Injectable });
DokuToastElementService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: DokuToastElementService, providedIn: 'root' });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: DokuToastElementService, decorators: [{
type: Injectable,
args: [{
providedIn: 'root',
}]
}], ctorParameters: function () { return [{ type: i0.EnvironmentInjector }, { type: i0.ApplicationRef }, { type: Document, decorators: [{
type: Inject,
args: [DOCUMENT]
}] }]; } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9hc3QtZWxlbWVudC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZG9rdS1mcmFnbWVudC9zcmMvbGliL3RvYXN0L3RvYXN0LWVsZW1lbnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUlMLE1BQU0sRUFDTixVQUFVLEVBQ1YsUUFBUSxFQUNSLGVBQWUsR0FDaEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGVBQWUsRUFBRSxZQUFZLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDNUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDOztBQU16RCxNQUFNLE9BQU8sdUJBQXVCO0lBR2xDLFlBQ1UsV0FBZ0MsRUFDaEMsTUFBc0IsRUFDSixRQUFrQjtRQUZwQyxnQkFBVyxHQUFYLFdBQVcsQ0FBcUI7UUFDaEMsV0FBTSxHQUFOLE1BQU0sQ0FBZ0I7UUFDSixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBTDlDLGNBQVMsR0FBbUIsRUFBRSxDQUFDO0lBTTVCLENBQUM7SUFFSixTQUFTLENBQUMsSUFBbUI7UUFDM0IsTUFBTSxXQUFXLEdBQUcsSUFBSSxlQUFlLEVBQUUsQ0FBQztRQUMxQyxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDdkUsTUFBTSxRQUFRLEdBQUcsSUFBSSxZQUFZLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBRWpFLFdBQVcsQ0FBQyxPQUFPLEdBQUcsR0FBRyxFQUFFO1lBQ3pCLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNyQixDQUFDLENB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ZW50IjpbImltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIEFwcGxpY2F0aW9uUmVmLFxuICBDb21wb25lbnRSZWYsXG4gIEVudmlyb25tZW50SW5qZWN0b3IsXG4gIEluamVjdCxcbiAgSW5qZWN0YWJsZSxcbiAgSW5qZWN0b3IsXG4gIGNyZWF0ZUNvbXBvbmVudCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEb2t1QWN0aXZlVG9hc3QsIERva3VUb2FzdFJlZiB9IGZyb20gJy4vdG9hc3QtcmVmJztcbmltcG9ydCB7IERva3VUb2FzdCB9IGZyb20gJy4vdG9hc3QuY29tcG9uZW50JztcbmltcG9ydCB7IFRPQVNUX0NPTlRBSU5FUl9DTEFTUyB9IGZyb20gJy4vdG9hc3QuY29uc3RhbnQnO1xuaW1wb3J0IHsgRG9rdVRvYXN0SXRlbSB9IGZyb20gJy4vdG9hc3QuaW50ZXJmYWNlJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIERva3VUb2FzdEVsZW1lbnRTZXJ2aWNlIHtcbiAgdG9hc3RSZWZzOiBEb2t1VG9hc3RSZWZbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZW52SW5qZWN0b3I6IEVudmlyb25tZW50SW5qZWN0b3IsXG4gICAgcHJpdmF0ZSBhcHBSZWY6IEFwcGxpY2F0aW9uUmVmLFxuICAgIEBJbmplY3QoRE9DVU1FTlQpIHByaXZhdGUgZG9jdW1lbnQ6IERvY3VtZW50XG4gICkge31cblxuICBvcGVuVG9hc3QoZGF0YTogRG9rdVRvYXN0SXRlbSkge1xuICAgIGNvbnN0IGFjdGl2ZVRvYXN0ID0gbmV3IERva3VBY3RpdmVUb2FzdCgpO1xuICAgIGNvbnN0IHRvYXN0Q29tcG9uZW50UmVmID0gdGhpcy5jcmVhdGVUb2FzdENvbXBvbmVudChhY3RpdmVUb2FzdCwgZGF0YSk7XG4gICAgY29uc3QgdG9hc3RSZWYgPSBuZXcgRG9rdVRvYXN0UmVmKHRvYXN0Q29tcG9uZW50UmVmLCB0aGlzLCBkYXRhKTtcblxuICAgIGFjdGl2ZVRvYXN0LmRpc21pc3MgPSAoKSA9PiB7XG4gICAgICB0b2FzdFJlZi5kaXNtaXNzKCk7XG4gICAgfTtcblxuICAgIHRoaXMucmVnaXN0ZXJUb2FzdFJlZih0b2FzdFJlZik7XG4gICAgdG9hc3RDb21wb25lbnRSZWYuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0YWNoKCk7XG4gICAgdG9hc3RDb21wb25lbnRSZWYuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIHRvYXN0Q29tcG9uZW50UmVmLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuXG4gICAgdGhpcy5hdHRhY2hUb2FzdENvbnRhaW5lcigpO1xuICAgIHRoaXMuYXR0YWNoVG9hc3RJbkNvbnRhaW5lcih0b2FzdENvbXBvbmVudFJlZik7XG5cbiAgICB0b2FzdFJlZlsnc3RhcnRBdXRvRGlzbWlzcyddKCk7XG4gICAgcmV0dXJuIHRvYXN0UmVmO1xuICB9XG5cbiAgZGlzbWlzc0FsbCgpIHtcbiAgICB0aGlzLnRvYXN0UmVmcy5mb3JFYWNoKCh0b2FzdCkgPT4gdG9hc3QuZGlzbWlzcygpKTtcbiAgfVxuXG4gIHJlbW92ZUNvbnRhaW5lckVsZW1lbnQoKSB7XG4gICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5nZXRUb2FzdENvbnRhaW5lckVsZW1lbnQoKTtcbiAgICBpZiAoIWNvbnRhaW5lcikgcmV0dXJuO1xuICAgIGNvbnN0IGhhc0NoaWxkID0gY29udGFpbmVyLmhhc0NoaWxkTm9kZXMoKTtcbiAgICBpZiAoaGFzQ2hpbGQpIHJldHVybjtcbiAgICBjb250YWluZXIucmVtb3ZlKCk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVRvYXN0Q29tcG9uZW50KGFjdGl2ZVRvYXN0OiBEb2t1QWN0aXZlVG9hc3QsIGRhdGE6IERva3VUb2FzdEl0ZW0pIHtcbiAgICBjb25zdCBlbGVtZW50SW5qZWN0b3IgPSBJbmplY3Rvci5jcmVhdGUoe1xuICAgICAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBEb2t1QWN0aXZlVG9hc3QsIHVzZVZhbHVlOiBhY3RpdmVUb2FzdCB9XSxcbiAgICB9KTtcblxuICAgIGxldCBwcm9qZWN0YWJsZU5vZGVzITogTm9kZVtdW107XG5cbiAgICBpZiAoZGF0YS50ZXh0KSB7XG4gICAgICBwcm9qZWN0YWJsZU5vZGVzID0gW1t0aGlzLmRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGRhdGEudGV4dCldXTtcbiAgICB9XG5cbiAgICBpZiAoZGF0YS50ZW1wbGF0ZSkge1xuICAgICAgY29uc3QgY29udGV4dCA9IHsgJGltcGxpY2l0OiBhY3RpdmVUb2FzdCB9O1xuICAgICAgY29uc3Qgdmlld1JlZiA9IGRhdGEudGVtcGxhdGUuY3JlYXRlRW1iZWRkZWRWaWV3KGNvbnRleHQpO1xuICAgICAgdGhpcy5hcHBSZWYuYXR0YWNoVmlldyh2aWV3UmVmKTtcbiAgICAgIHByb2plY3RhYmxlTm9kZXMgPSBbdmlld1JlZi5yb290Tm9kZXNdO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbXBvbmVudCA9IGNyZWF0ZUNvbXBvbmVudChEb2t1VG9hc3QsIHtcbiAgICAgIGVudmlyb25tZW50SW5qZWN0b3I6IHRoaXMuZW52SW5qZWN0b3IsXG4gICAgICBlbGVtZW50SW5qZWN0b3IsXG4gICAgICBwcm9qZWN0YWJsZU5vZGVzLFxuICAgIH0pO1xuICAgIGNvbXBvbmVudC5pbnN0YW5jZS5zdGF0ZSA9IGRhdGEuc3RhdGUgfHwgJ25ldXRyYWwnO1xuICAgIGNvbXBvbmVudC5pbnN0YW5jZS5kaXNtaXNzaWJsZSA9ICEhZGF0YS5kaXNtaXNzaWJsZTtcbiAgICB0aGlzLmFwcFJlZi5hdHRhY2hWaWV3KGNvbXBvbmVudC5ob3N0Vmlldyk7XG4gICAgcmV0dXJuIGNvbXBvbmVudDtcbiAgfVxuXG4gIHByaXZhdGUgYXR0YWNoVG9hc3RDb250YWluZXIoKSB7XG4gICAgY29uc3QgY29udGFpbmVyRXhpc3RzID0gISF0aGlzLmdldFRvYXN0Q29udGFpbmVyRWxlbWVudCgpO1xuICAgIGlmICghY29udGFpbmVyRXhpc3RzKSB7XG4gICAgICBjb25zdCBlbCA9IHRoaXMuY3JlYXRlVG9hc3RDb250YWluZXJFbGVtZW50KCk7XG4gICAgICB0aGlzLmRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZWwpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXR0YWNoVG9hc3RJbkNvbnRhaW5lcih0b2FzdENvbXBvbmVudDogQ29tcG9uZW50UmVmPERva3VUb2FzdD4pIHtcbiAgICBjb25zdCBjb250YWluZXJFbCA9IHRoaXMuZ2V0VG9hc3RDb250YWluZXJFbGVtZW50KCk7XG4gICAgaWYgKGNvbnRhaW5lckVsKSB7XG4gICAgICBjb250YWluZXJFbC5hcHBlbmRDaGlsZCh0b2FzdENvbXBvbmVudC5sb2NhdGlvbi5uYXRpdmVFbGVtZW50KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVRvYXN0Q29udGFpbmVyRWxlbWVudCgpIHtcbiAgICBjb25zdCBkaXZFbCA9IHRoaXMuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgZGl2RWwuY2xhc3NMaXN0LmFkZChUT0FTVF9DT05UQUlORVJfQ0xBU1MpO1xuICAgIHJldHVybiBkaXZFbDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VG9hc3RDb250YWluZXJFbGVtZW50KCkge1xuICAgIHJldHVybiB0aGlzLmRvY3VtZW50LmJvZHkucXVlcnlTZWxlY3RvcihgZGl2LiR7VE9BU1RfQ09OVEFJTkVSX0NMQVNTfWApO1xuICB9XG5cbiAgcHJpdmF0ZSByZWdpc3RlclRvYXN0UmVmKHJlZjogRG9rdVRvYXN0UmVmKSB7XG4gICAgY29uc3QgdW5yZWdpc3RlciA9ICgpID0+IHtcbiAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy50b2FzdFJlZnMuaW5kZXhPZihyZWYpO1xuICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgdGhpcy50b2FzdFJlZnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMudG9hc3RSZWZzLnB1c2gocmVmKTtcbiAgICByZWZbJ3Jlc3VsdCddLnRoZW4odW5yZWdpc3Rlcik7XG4gIH1cbn1cbiJdfQ==