UNPKG

@universis/common

Version:

Universis - common directives and services

71 lines 9.51 kB
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