@universis/common
Version:
Universis - common directives and services
75 lines (74 loc) • 8.94 kB
JavaScript
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