@universis/common
Version:
Universis - common directives and services
71 lines • 9.51 kB
JavaScript
import { Injectable, ComponentFactoryResolver, ApplicationRef, Injector } from '@angular/core';
import { ToastComponent } from '../components/modal/toast.component';
import * as i0 from "@angular/core";
/**
* @export
* @class ToastService
*/
export class ToastService {
constructor(componentFactoryResolver, appRef, injector) {
this.componentFactoryResolver = componentFactoryResolver;
this.appRef = appRef;
this.injector = injector;
}
/**
* Shows a toast message
* @param {string} title A string which represents message title
* @param {string} message A string which represents message body
* @param {boolean=} autoHide A boolean which indicates whether a message will auto hide or not
* @param {number=} delay A number which indicates the number of milliseconds before auto hide message
*/
show(title, message, autoHide = true, delay = 5000) {
// search for toast container
let container = document.body.getElementsByClassName('universis-toast-container')[0];
if (container == null) {
// create toast container
container = document.createElement('div');
container.classList.add('universis-toast-container', 'p-3');
// append to boyd
document.body.appendChild(container);
}
// create a component reference for toast component
const componentRef = this.componentFactoryResolver
.resolveComponentFactory(ToastComponent)
.create(this.injector);
componentRef.instance.title = title;
componentRef.instance.message = message;
componentRef.instance.autoHide = autoHide;
componentRef.instance.delay = delay;
componentRef.location.nativeElement.classList.add('show');
// attach component to the appRef so that it's inside the ng component tree
this.appRef.attachView(componentRef.hostView);
// get DOM element from component
const domElem = componentRef.hostView.rootNodes[0];
// append DOM element to the body
container.appendChild(domElem);
container.classList.remove('hidden');
setTimeout(() => {
componentRef.instance.hide();
}, delay);
}
// noinspection JSMethodCanBeStatic
/**
* Clears toast messages
*/
clear() {
// search for toast container
const container = document.body.getElementsByClassName('universis-toast-container')[0];
if (container) {
// remove children
while (container.firstChild) {
container.removeChild(container.firstChild);
}
}
}
}
ToastService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ToastService, deps: [{ token: i0.ComponentFactoryResolver }, { token: i0.ApplicationRef }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable });
ToastService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ToastService });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ToastService, decorators: [{
type: Injectable
}], ctorParameters: function () { return [{ type: i0.ComponentFactoryResolver }, { type: i0.ApplicationRef }, { type: i0.Injector }]; } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9hc3Quc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9zaGFyZWQvc2VydmljZXMvdG9hc3Quc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFFLHdCQUF3QixFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQWtCLE1BQU0sZUFBZSxDQUFDO0FBQzlHLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxxQ0FBcUMsQ0FBQzs7QUFHbkU7OztHQUdHO0FBRUgsTUFBTSxPQUFPLFlBQVk7SUFFdkIsWUFBb0Isd0JBQWtELEVBQ2xELE1BQXNCLEVBQ3RCLFFBQWtCO1FBRmxCLDZCQUF3QixHQUF4Qix3QkFBd0IsQ0FBMEI7UUFDbEQsV0FBTSxHQUFOLE1BQU0sQ0FBZ0I7UUFDdEIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtJQUFJLENBQUM7SUFFM0M7Ozs7OztPQU1HO0lBQ0gsSUFBSSxDQUFDLEtBQWEsRUFBRSxPQUFlLEVBQUUsV0FBZ0MsSUFBSSxFQUFFLFFBQTRCLElBQUk7UUFDekcsNkJBQTZCO1FBQzdCLElBQUksU0FBUyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsMkJBQTJCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNyRixJQUFJLFNBQVMsSUFBSSxJQUFJLEVBQUU7WUFDckIseUJBQXlCO1lBQ3pCLFNBQVMsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLDJCQUEyQixFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQzVELGlCQUFpQjtZQUNqQixRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQztTQUN0QztRQUNELG1EQUFtRDtRQUNuRCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsd0JBQXdCO2FBQzdDLHVCQUF1QixDQUFDLGNBQWMsQ0FBQzthQUN2QyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzNCLFlBQVksQ0FBQyxRQUFRLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNwQyxZQUFZLENBQUMsUUFBUSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDeEMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBQzFDLFlBQVksQ0FBQyxRQUFRLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNwQyxZQUFZLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRTFELDJFQUEyRTtRQUMzRSxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFOUMsaUNBQWlDO1FBQ2pDLE1BQU0sT0FBTyxHQUFJLFlBQVksQ0FBQyxRQUFpQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQWdCLENBQUM7UUFFNUYsaUNBQWlDO1FBQ2pDLFNBQVMsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFL0IsU0FBUyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFckMsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLFlBQVksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDL0IsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ1osQ0FBQztJQUVELG1DQUFtQztJQUNuQzs7T0FFRztJQUNILEtBQUs7UUFDSCw2QkFBNkI7UUFDN0IsTUFBTSxTQUFTLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZGLElBQUksU0FBUyxFQUFFO1lBQ2Isa0JBQWtCO1lBQ2xCLE9BQU8sU0FBUyxDQUFDLFVBQVUsRUFBRTtnQkFDM0IsU0FBUyxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUM7YUFDN0M7U0FDRjtJQUNILENBQUM7OzBHQTlEVSxZQUFZOzhHQUFaLFlBQVk7NEZBQVosWUFBWTtrQkFEeEIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZSwgQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLCBBcHBsaWNhdGlvblJlZiwgSW5qZWN0b3IsIEVtYmVkZGVkVmlld1JlZn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1RvYXN0Q29tcG9uZW50fSBmcm9tICcuLi9jb21wb25lbnRzL21vZGFsL3RvYXN0LmNvbXBvbmVudCc7XG5cblxuLyoqXG4gKiBAZXhwb3J0XG4gKiBAY2xhc3MgVG9hc3RTZXJ2aWNlXG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBUb2FzdFNlcnZpY2Uge1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY29tcG9uZW50RmFjdG9yeVJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gICAgICAgICAgICAgIHByaXZhdGUgYXBwUmVmOiBBcHBsaWNhdGlvblJlZixcbiAgICAgICAgICAgICAgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IpIHsgfVxuXG4gIC8qKlxuICAgKiBTaG93cyBhIHRvYXN0IG1lc3NhZ2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRpdGxlIEEgc3RyaW5nIHdoaWNoIHJlcHJlc2VudHMgbWVzc2FnZSB0aXRsZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSBBIHN0cmluZyB3aGljaCByZXByZXNlbnRzIG1lc3NhZ2UgYm9keVxuICAgKiBAcGFyYW0ge2Jvb2xlYW49fSBhdXRvSGlkZSBBIGJvb2xlYW4gd2hpY2ggaW5kaWNhdGVzIHdoZXRoZXIgYSBtZXNzYWdlIHdpbGwgYXV0byBoaWRlIG9yIG5vdFxuICAgKiBAcGFyYW0ge251bWJlcj19IGRlbGF5IEEgbnVtYmVyIHdoaWNoIGluZGljYXRlcyB0aGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBiZWZvcmUgYXV0byBoaWRlIG1lc3NhZ2VcbiAgICovXG4gIHNob3codGl0bGU6IHN0cmluZywgbWVzc2FnZTogc3RyaW5nLCBhdXRvSGlkZTogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IHRydWUsIGRlbGF5OiBudW1iZXIgfCB1bmRlZmluZWQgPSA1MDAwKSB7XG4gICAgLy8gc2VhcmNoIGZvciB0b2FzdCBjb250YWluZXJcbiAgICBsZXQgY29udGFpbmVyID0gZG9jdW1lbnQuYm9keS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd1bml2ZXJzaXMtdG9hc3QtY29udGFpbmVyJylbMF07XG4gICAgaWYgKGNvbnRhaW5lciA9PSBudWxsKSB7XG4gICAgICAvLyBjcmVhdGUgdG9hc3QgY29udGFpbmVyXG4gICAgICBjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgIGNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCd1bml2ZXJzaXMtdG9hc3QtY29udGFpbmVyJywgJ3AtMycpO1xuICAgICAgLy8gYXBwZW5kIHRvIGJveWRcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoY29udGFpbmVyKTtcbiAgICB9XG4gICAgLy8gY3JlYXRlIGEgY29tcG9uZW50IHJlZmVyZW5jZSBmb3IgdG9hc3QgY29tcG9uZW50XG4gICAgY29uc3QgY29tcG9uZW50UmVmID0gdGhpcy5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXJcbiAgICAgICAgLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KFRvYXN0Q29tcG9uZW50KVxuICAgICAgICAuY3JlYXRlKHRoaXMuaW5qZWN0b3IpO1xuICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS50aXRsZSA9IHRpdGxlO1xuICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS5tZXNzYWdlID0gbWVzc2FnZTtcbiAgICBjb21wb25lbnRSZWYuaW5zdGFuY2UuYXV0b0hpZGUgPSBhdXRvSGlkZTtcbiAgICBjb21wb25lbnRSZWYuaW5zdGFuY2UuZGVsYXkgPSBkZWxheTtcbiAgICBjb21wb25lbnRSZWYubG9jYXRpb24ubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKCdzaG93Jyk7XG5cbiAgICAvLyBhdHRhY2ggY29tcG9uZW50IHRvIHRoZSBhcHBSZWYgc28gdGhhdCBpdCdzIGluc2lkZSB0aGUgbmcgY29tcG9uZW50IHRyZWVcbiAgICB0aGlzLmFwcFJlZi5hdHRhY2hWaWV3KGNvbXBvbmVudFJlZi5ob3N0Vmlldyk7XG5cbiAgICAvLyBnZXQgRE9NIGVsZW1lbnQgZnJvbSBjb21wb25lbnRcbiAgICBjb25zdCBkb21FbGVtID0gKGNvbXBvbmVudFJlZi5ob3N0VmlldyBhcyBFbWJlZGRlZFZpZXdSZWY8YW55Pikucm9vdE5vZGVzWzBdIGFzIEhUTUxFbGVtZW50O1xuXG4gICAgLy8gYXBwZW5kIERPTSBlbGVtZW50IHRvIHRoZSBib2R5XG4gICAgY29udGFpbmVyLmFwcGVuZENoaWxkKGRvbUVsZW0pO1xuXG4gICAgY29udGFpbmVyLmNsYXNzTGlzdC5yZW1vdmUoJ2hpZGRlbicpO1xuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb21wb25lbnRSZWYuaW5zdGFuY2UuaGlkZSgpO1xuICAgIH0sIGRlbGF5KTtcbiAgfVxuXG4gIC8vIG5vaW5zcGVjdGlvbiBKU01ldGhvZENhbkJlU3RhdGljXG4gIC8qKlxuICAgKiBDbGVhcnMgdG9hc3QgbWVzc2FnZXNcbiAgICovXG4gIGNsZWFyKCkge1xuICAgIC8vIHNlYXJjaCBmb3IgdG9hc3QgY29udGFpbmVyXG4gICAgY29uc3QgY29udGFpbmVyID0gZG9jdW1lbnQuYm9keS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd1bml2ZXJzaXMtdG9hc3QtY29udGFpbmVyJylbMF07XG4gICAgaWYgKGNvbnRhaW5lcikge1xuICAgICAgLy8gcmVtb3ZlIGNoaWxkcmVuXG4gICAgICB3aGlsZSAoY29udGFpbmVyLmZpcnN0Q2hpbGQpIHtcbiAgICAgICAgY29udGFpbmVyLnJlbW92ZUNoaWxkKGNvbnRhaW5lci5maXJzdENoaWxkKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxufVxuIl19