UNPKG

@universis/common

Version:

Universis - common directives and services

75 lines (74 loc) 8.94 kB
import { Injectable, ComponentFactoryResolver, ApplicationRef, Injector } from '@angular/core'; import { ToastComponent } from '../components/modal/toast.component'; /** * @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 or not message will auto hide * @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('ml-auto'); // 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.decorators = [ { type: Injectable } ]; /** @nocollapse */ ToastService.ctorParameters = () => [ { type: ComponentFactoryResolver }, { type: ApplicationRef }, { type: Injector } ]; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9hc3Quc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0B1bml2ZXJzaXMvY29tbW9uLyIsInNvdXJjZXMiOlsic2hhcmVkL3NlcnZpY2VzL3RvYXN0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFVBQVUsRUFBRSx3QkFBd0IsRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFrQixNQUFNLGVBQWUsQ0FBQztBQUM5RyxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0scUNBQXFDLENBQUM7QUFHbkU7OztHQUdHO0FBRUgsTUFBTTtJQUVKLFlBQW9CLHdCQUFrRCxFQUNsRCxNQUFzQixFQUN0QixRQUFrQjtRQUZsQiw2QkFBd0IsR0FBeEIsd0JBQXdCLENBQTBCO1FBQ2xELFdBQU0sR0FBTixNQUFNLENBQWdCO1FBQ3RCLGFBQVEsR0FBUixRQUFRLENBQVU7SUFBSSxDQUFDO0lBRTNDOzs7Ozs7T0FNRztJQUNILElBQUksQ0FBQyxLQUFhLEVBQUUsT0FBZSxFQUFFLFFBQVEsR0FBRyxJQUFJLEVBQUUsS0FBSyxHQUFHLElBQUk7UUFDaEUsNkJBQTZCO1FBQzdCLElBQUksU0FBUyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsMkJBQTJCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNyRixJQUFJLFNBQVMsSUFBSSxJQUFJLEVBQUU7WUFDckIseUJBQXlCO1lBQ3pCLFNBQVMsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLDJCQUEyQixFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQzVELGlCQUFpQjtZQUNqQixRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQztTQUN0QztRQUNELG1EQUFtRDtRQUNuRCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsd0JBQXdCO2FBQzdDLHVCQUF1QixDQUFDLGNBQWMsQ0FBQzthQUN2QyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzNCLFlBQVksQ0FBQyxRQUFRLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNwQyxZQUFZLENBQUMsUUFBUSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDeEMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBQzFDLFlBQVksQ0FBQyxRQUFRLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNwQyxZQUFZLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRTdELDJFQUEyRTtRQUMzRSxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFOUMsaUNBQWlDO1FBQ2pDLE1BQU0sT0FBTyxHQUFJLFlBQVksQ0FBQyxRQUFpQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQWdCLENBQUM7UUFFNUYsaUNBQWlDO1FBQ2pDLFNBQVMsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFL0IsU0FBUyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFckMsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLFlBQVksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDL0IsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ1osQ0FBQztJQUVELG1DQUFtQztJQUNuQzs7T0FFRztJQUNILEtBQUs7UUFDSCw2QkFBNkI7UUFDN0IsTUFBTSxTQUFTLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZGLElBQUksU0FBUyxFQUFFO1lBQ2Isa0JBQWtCO1lBQ2xCLE9BQU8sU0FBUyxDQUFDLFVBQVUsRUFBRTtnQkFDM0IsU0FBUyxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUM7YUFDN0M7U0FDRjtJQUNILENBQUM7OztZQS9ERixVQUFVOzs7O1lBUlMsd0JBQXdCO1lBQUUsY0FBYztZQUFFLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGUsIENvbXBvbmVudEZhY3RvcnlSZXNvbHZlciwgQXBwbGljYXRpb25SZWYsIEluamVjdG9yLCBFbWJlZGRlZFZpZXdSZWZ9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtUb2FzdENvbXBvbmVudH0gZnJvbSAnLi4vY29tcG9uZW50cy9tb2RhbC90b2FzdC5jb21wb25lbnQnO1xuXG5cbi8qKlxuICogQGV4cG9ydFxuICogQGNsYXNzIFRvYXN0U2VydmljZVxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgVG9hc3RTZXJ2aWNlIHtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxuICAgICAgICAgICAgICBwcml2YXRlIGFwcFJlZjogQXBwbGljYXRpb25SZWYsXG4gICAgICAgICAgICAgIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yKSB7IH1cblxuICAvKipcbiAgICogU2hvd3MgYSB0b2FzdCBtZXNzYWdlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0aXRsZSBBIHN0cmluZyB3aGljaCByZXByZXNlbnRzIG1lc3NhZ2UgdGl0bGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgQSBzdHJpbmcgd2hpY2ggcmVwcmVzZW50cyBtZXNzYWdlIGJvZHlcbiAgICogQHBhcmFtIHtib29sZWFuPX0gYXV0b0hpZGUgQSBib29sZWFuIHdoaWNoIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCBtZXNzYWdlIHdpbGwgYXV0byBoaWRlXG4gICAqIEBwYXJhbSB7bnVtYmVyPX0gZGVsYXkgQSBudW1iZXIgd2hpY2ggaW5kaWNhdGVzIHRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGJlZm9yZSBhdXRvIGhpZGUgbWVzc2FnZVxuICAgKi9cbiAgc2hvdyh0aXRsZTogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcsIGF1dG9IaWRlID0gdHJ1ZSwgZGVsYXkgPSA1MDAwKSB7XG4gICAgLy8gc2VhcmNoIGZvciB0b2FzdCBjb250YWluZXJcbiAgICBsZXQgY29udGFpbmVyID0gZG9jdW1lbnQuYm9keS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd1bml2ZXJzaXMtdG9hc3QtY29udGFpbmVyJylbMF07XG4gICAgaWYgKGNvbnRhaW5lciA9PSBudWxsKSB7XG4gICAgICAvLyBjcmVhdGUgdG9hc3QgY29udGFpbmVyXG4gICAgICBjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgIGNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCd1bml2ZXJzaXMtdG9hc3QtY29udGFpbmVyJywgJ3AtMycpO1xuICAgICAgLy8gYXBwZW5kIHRvIGJveWRcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoY29udGFpbmVyKTtcbiAgICB9XG4gICAgLy8gY3JlYXRlIGEgY29tcG9uZW50IHJlZmVyZW5jZSBmb3IgdG9hc3QgY29tcG9uZW50XG4gICAgY29uc3QgY29tcG9uZW50UmVmID0gdGhpcy5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXJcbiAgICAgICAgLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KFRvYXN0Q29tcG9uZW50KVxuICAgICAgICAuY3JlYXRlKHRoaXMuaW5qZWN0b3IpO1xuICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS50aXRsZSA9IHRpdGxlO1xuICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS5tZXNzYWdlID0gbWVzc2FnZTtcbiAgICBjb21wb25lbnRSZWYuaW5zdGFuY2UuYXV0b0hpZGUgPSBhdXRvSGlkZTtcbiAgICBjb21wb25lbnRSZWYuaW5zdGFuY2UuZGVsYXkgPSBkZWxheTtcbiAgICBjb21wb25lbnRSZWYubG9jYXRpb24ubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKCdtbC1hdXRvJyk7XG5cbiAgICAvLyBhdHRhY2ggY29tcG9uZW50IHRvIHRoZSBhcHBSZWYgc28gdGhhdCBpdCdzIGluc2lkZSB0aGUgbmcgY29tcG9uZW50IHRyZWVcbiAgICB0aGlzLmFwcFJlZi5hdHRhY2hWaWV3KGNvbXBvbmVudFJlZi5ob3N0Vmlldyk7XG5cbiAgICAvLyBnZXQgRE9NIGVsZW1lbnQgZnJvbSBjb21wb25lbnRcbiAgICBjb25zdCBkb21FbGVtID0gKGNvbXBvbmVudFJlZi5ob3N0VmlldyBhcyBFbWJlZGRlZFZpZXdSZWY8YW55Pikucm9vdE5vZGVzWzBdIGFzIEhUTUxFbGVtZW50O1xuXG4gICAgLy8gYXBwZW5kIERPTSBlbGVtZW50IHRvIHRoZSBib2R5XG4gICAgY29udGFpbmVyLmFwcGVuZENoaWxkKGRvbUVsZW0pO1xuXG4gICAgY29udGFpbmVyLmNsYXNzTGlzdC5yZW1vdmUoJ2hpZGRlbicpO1xuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb21wb25lbnRSZWYuaW5zdGFuY2UuaGlkZSgpO1xuICAgIH0sIGRlbGF5KTtcbiAgfVxuXG4gIC8vIG5vaW5zcGVjdGlvbiBKU01ldGhvZENhbkJlU3RhdGljXG4gIC8qKlxuICAgKiBDbGVhcnMgdG9hc3QgbWVzc2FnZXNcbiAgICovXG4gIGNsZWFyKCkge1xuICAgIC8vIHNlYXJjaCBmb3IgdG9hc3QgY29udGFpbmVyXG4gICAgY29uc3QgY29udGFpbmVyID0gZG9jdW1lbnQuYm9keS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd1bml2ZXJzaXMtdG9hc3QtY29udGFpbmVyJylbMF07XG4gICAgaWYgKGNvbnRhaW5lcikge1xuICAgICAgLy8gcmVtb3ZlIGNoaWxkcmVuXG4gICAgICB3aGlsZSAoY29udGFpbmVyLmZpcnN0Q2hpbGQpIHtcbiAgICAgICAgY29udGFpbmVyLnJlbW92ZUNoaWxkKGNvbnRhaW5lci5maXJzdENoaWxkKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxufVxuIl19