@nova-ui/bits
Version:
SolarWinds Nova Framework
90 lines • 13.4 kB
JavaScript
// © 2022 SolarWinds Worldwide, LLC. All rights reserved.
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to
// deal in the Software without restriction, including without limitation the
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
// sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
import { ApplicationRef, ComponentFactoryResolver, Injectable, } from "@angular/core";
import isNil from "lodash/isNil";
import { OverlayContainerService } from "../overlay/overlay-container.service";
import { OVERLAY_DEFAULT_PRIORITY } from "../overlay/types";
import * as i0 from "@angular/core";
import * as i1 from "../overlay/overlay-container.service";
/**
* @ignore
*/
export class ToastContainerService {
constructor(componentFactoryResolver, overlayService, appRef) {
this.componentFactoryResolver = componentFactoryResolver;
this.overlayService = overlayService;
this.appRef = appRef;
this.containers = {};
}
static getComponentRootNode(componentRef) {
return componentRef.hostView
.rootNodes[0];
}
/**
* Creates container element for position, if container already exists - returns it
* @return the container element
*/
getContainerElement(positionClass = "toast-top-right") {
if (isNil(this.containers[positionClass])) {
this.createContainer(positionClass);
}
return (this.containerElement = this.containers[positionClass]);
}
/**
* Dynamically compiles toast component and attaches it to the toast container
* @return reference to attached toast
*/
attachToast(component, injector, newestOnTop) {
const componentFactory = this.componentFactoryResolver.resolveComponentFactory(component);
const componentRef = componentFactory.create(injector);
this.appRef.attachView(componentRef.hostView);
if (newestOnTop) {
this.containerElement.insertBefore(ToastContainerService.getComponentRootNode(componentRef), this.containerElement.firstChild);
}
else {
this.containerElement.appendChild(ToastContainerService.getComponentRootNode(componentRef));
}
return componentRef;
}
/**
* Destroys component using reference to it's factory
* @return reference to attached toast
*/
detachToast(component) {
component.destroy();
}
createContainer(positionClass) {
const container = document.createElement("div");
container.classList.add("nui-toast__container");
container.classList.add(positionClass);
this.overlayService
// make sure toasts are always displayed on top of everything
.getOverlayContainer(document.body, OVERLAY_DEFAULT_PRIORITY + 10)
.appendChild(container);
this.containers[positionClass] = container;
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ToastContainerService, deps: [{ token: i0.ComponentFactoryResolver }, { token: i1.OverlayContainerService }, { token: i0.ApplicationRef }], target: i0.ɵɵFactoryTarget.Injectable }); }
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ToastContainerService, providedIn: "root" }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ToastContainerService, decorators: [{
type: Injectable,
args: [{ providedIn: "root" }]
}], ctorParameters: () => [{ type: i0.ComponentFactoryResolver }, { type: i1.OverlayContainerService }, { type: i0.ApplicationRef }] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9hc3QtY29udGFpbmVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3RvYXN0L3RvYXN0LWNvbnRhaW5lci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHlEQUF5RDtBQUN6RCxFQUFFO0FBQ0YsK0VBQStFO0FBQy9FLDRFQUE0RTtBQUM1RSw4RUFBOEU7QUFDOUUsK0VBQStFO0FBQy9FLDhFQUE4RTtBQUM5RSw0REFBNEQ7QUFDNUQsRUFBRTtBQUNGLDZFQUE2RTtBQUM3RSx1REFBdUQ7QUFDdkQsRUFBRTtBQUNGLDZFQUE2RTtBQUM3RSw0RUFBNEU7QUFDNUUsK0VBQStFO0FBQy9FLDBFQUEwRTtBQUMxRSxpRkFBaUY7QUFDakYsNkVBQTZFO0FBQzdFLGlCQUFpQjtBQUVqQixPQUFPLEVBQ0gsY0FBYyxFQUNkLHdCQUF3QixFQUd4QixVQUFVLEdBQ2IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxLQUFLLE1BQU0sY0FBYyxDQUFDO0FBR2pDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQy9FLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDOzs7QUFNNUQ7O0dBRUc7QUFFSCxNQUFNLE9BQU8scUJBQXFCO0lBQzlCLFlBQ1ksd0JBQWtELEVBQ2xELGNBQXVDLEVBQ3ZDLE1BQXNCO1FBRnRCLDZCQUF3QixHQUF4Qix3QkFBd0IsQ0FBMEI7UUFDbEQsbUJBQWMsR0FBZCxjQUFjLENBQXlCO1FBQ3ZDLFdBQU0sR0FBTixNQUFNLENBQWdCO1FBUzFCLGVBQVUsR0FBcUIsRUFBRSxDQUFDO0lBUnZDLENBQUM7SUFFSSxNQUFNLENBQUMsb0JBQW9CLENBQy9CLFlBQStCO1FBRS9CLE9BQVEsWUFBWSxDQUFDLFFBQWlDO2FBQ2pELFNBQVMsQ0FBQyxDQUFDLENBQWdCLENBQUM7SUFDckMsQ0FBQztJQUlEOzs7T0FHRztJQUNJLG1CQUFtQixDQUN0QixnQkFBd0IsaUJBQWlCO1FBRXpDLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLENBQUMsRUFBRTtZQUN2QyxJQUFJLENBQUMsZUFBZSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1NBQ3ZDO1FBRUQsT0FBTyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7SUFDcEUsQ0FBQztJQUVEOzs7T0FHRztJQUNJLFdBQVcsQ0FDZCxTQUFjLEVBQ2QsUUFBdUIsRUFDdkIsV0FBb0I7UUFFcEIsTUFBTSxnQkFBZ0IsR0FDbEIsSUFBSSxDQUFDLHdCQUF3QixDQUFDLHVCQUF1QixDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3JFLE1BQU0sWUFBWSxHQUFHLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUV2RCxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFOUMsSUFBSSxXQUFXLEVBQUU7WUFDYixJQUFJLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxDQUM5QixxQkFBcUIsQ0FBQyxvQkFBb0IsQ0FBQyxZQUFZLENBQUMsRUFDeEQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsQ0FDbkMsQ0FBQztTQUNMO2FBQU07WUFDSCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxDQUM3QixxQkFBcUIsQ0FBQyxvQkFBb0IsQ0FBQyxZQUFZLENBQUMsQ0FDM0QsQ0FBQztTQUNMO1FBRUQsT0FBTyxZQUFZLENBQUM7SUFDeEIsQ0FBQztJQUVEOzs7T0FHRztJQUNJLFdBQVcsQ0FBQyxTQUFjO1FBQzdCLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRU8sZUFBZSxDQUFDLGFBQXFCO1FBQ3pDLE1BQU0sU0FBUyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEQsU0FBUyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUNoRCxTQUFTLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUN2QyxJQUFJLENBQUMsY0FBYztZQUNmLDZEQUE2RDthQUM1RCxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLHdCQUF3QixHQUFHLEVBQUUsQ0FBQzthQUNqRSxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFNUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsR0FBRyxTQUFTLENBQUM7SUFDL0MsQ0FBQzsrR0E3RVEscUJBQXFCO21IQUFyQixxQkFBcUIsY0FEUixNQUFNOzs0RkFDbkIscUJBQXFCO2tCQURqQyxVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbIi8vIMKpIDIwMjIgU29sYXJXaW5kcyBXb3JsZHdpZGUsIExMQy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4vLyAgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG9cbi8vICBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZVxuLy8gIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vclxuLy8gIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4vLyAgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuLy8gIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vICBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbi8vICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbi8vICBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLyAgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbi8vICBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOXG4vLyAgVEhFIFNPRlRXQVJFLlxuXG5pbXBvcnQge1xuICAgIEFwcGxpY2F0aW9uUmVmLFxuICAgIENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcbiAgICBDb21wb25lbnRSZWYsXG4gICAgRW1iZWRkZWRWaWV3UmVmLFxuICAgIEluamVjdGFibGUsXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgaXNOaWwgZnJvbSBcImxvZGFzaC9pc05pbFwiO1xuXG5pbXBvcnQgeyBUb2FzdEluamVjdG9yIH0gZnJvbSBcIi4vdG9hc3QtaW5qZWN0b3JcIjtcbmltcG9ydCB7IE92ZXJsYXlDb250YWluZXJTZXJ2aWNlIH0gZnJvbSBcIi4uL292ZXJsYXkvb3ZlcmxheS1jb250YWluZXIuc2VydmljZVwiO1xuaW1wb3J0IHsgT1ZFUkxBWV9ERUZBVUxUX1BSSU9SSVRZIH0gZnJvbSBcIi4uL292ZXJsYXkvdHlwZXNcIjtcbi8qKiBAaWdub3JlICovXG5pbnRlcmZhY2UgSVRvYXN0Q29udGFpbmVycyB7XG4gICAgW3Bvc2l0aW9uQ2xhc3M6IHN0cmluZ106IEhUTUxFbGVtZW50O1xufVxuXG4vKipcbiAqIEBpZ25vcmVcbiAqL1xuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiBcInJvb3RcIiB9KVxuZXhwb3J0IGNsYXNzIFRvYXN0Q29udGFpbmVyU2VydmljZSB7XG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgY29tcG9uZW50RmFjdG9yeVJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gICAgICAgIHByaXZhdGUgb3ZlcmxheVNlcnZpY2U6IE92ZXJsYXlDb250YWluZXJTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGFwcFJlZjogQXBwbGljYXRpb25SZWZcbiAgICApIHt9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBnZXRDb21wb25lbnRSb290Tm9kZShcbiAgICAgICAgY29tcG9uZW50UmVmOiBDb21wb25lbnRSZWY8YW55PlxuICAgICk6IEhUTUxFbGVtZW50IHtcbiAgICAgICAgcmV0dXJuIChjb21wb25lbnRSZWYuaG9zdFZpZXcgYXMgRW1iZWRkZWRWaWV3UmVmPGFueT4pXG4gICAgICAgICAgICAucm9vdE5vZGVzWzBdIGFzIEhUTUxFbGVtZW50O1xuICAgIH1cbiAgICBwcml2YXRlIGNvbnRhaW5lcnM6IElUb2FzdENvbnRhaW5lcnMgPSB7fTtcbiAgICBwcml2YXRlIGNvbnRhaW5lckVsZW1lbnQ6IEhUTUxFbGVtZW50O1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBjb250YWluZXIgZWxlbWVudCBmb3IgcG9zaXRpb24sIGlmIGNvbnRhaW5lciBhbHJlYWR5IGV4aXN0cyAtIHJldHVybnMgaXRcbiAgICAgKiBAcmV0dXJuIHRoZSBjb250YWluZXIgZWxlbWVudFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRDb250YWluZXJFbGVtZW50KFxuICAgICAgICBwb3NpdGlvbkNsYXNzOiBzdHJpbmcgPSBcInRvYXN0LXRvcC1yaWdodFwiXG4gICAgKTogSFRNTEVsZW1lbnQge1xuICAgICAgICBpZiAoaXNOaWwodGhpcy5jb250YWluZXJzW3Bvc2l0aW9uQ2xhc3NdKSkge1xuICAgICAgICAgICAgdGhpcy5jcmVhdGVDb250YWluZXIocG9zaXRpb25DbGFzcyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gKHRoaXMuY29udGFpbmVyRWxlbWVudCA9IHRoaXMuY29udGFpbmVyc1twb3NpdGlvbkNsYXNzXSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRHluYW1pY2FsbHkgY29tcGlsZXMgdG9hc3QgY29tcG9uZW50IGFuZCBhdHRhY2hlcyBpdCB0byB0aGUgdG9hc3QgY29udGFpbmVyXG4gICAgICogQHJldHVybiByZWZlcmVuY2UgdG8gYXR0YWNoZWQgdG9hc3RcbiAgICAgKi9cbiAgICBwdWJsaWMgYXR0YWNoVG9hc3QoXG4gICAgICAgIGNvbXBvbmVudDogYW55LFxuICAgICAgICBpbmplY3RvcjogVG9hc3RJbmplY3RvcixcbiAgICAgICAgbmV3ZXN0T25Ub3A6IGJvb2xlYW5cbiAgICApOiBhbnkge1xuICAgICAgICBjb25zdCBjb21wb25lbnRGYWN0b3J5ID1cbiAgICAgICAgICAgIHRoaXMuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KGNvbXBvbmVudCk7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudFJlZiA9IGNvbXBvbmVudEZhY3RvcnkuY3JlYXRlKGluamVjdG9yKTtcblxuICAgICAgICB0aGlzLmFwcFJlZi5hdHRhY2hWaWV3KGNvbXBvbmVudFJlZi5ob3N0Vmlldyk7XG5cbiAgICAgICAgaWYgKG5ld2VzdE9uVG9wKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRhaW5lckVsZW1lbnQuaW5zZXJ0QmVmb3JlKFxuICAgICAgICAgICAgICAgIFRvYXN0Q29udGFpbmVyU2VydmljZS5nZXRDb21wb25lbnRSb290Tm9kZShjb21wb25lbnRSZWYpLFxuICAgICAgICAgICAgICAgIHRoaXMuY29udGFpbmVyRWxlbWVudC5maXJzdENoaWxkXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jb250YWluZXJFbGVtZW50LmFwcGVuZENoaWxkKFxuICAgICAgICAgICAgICAgIFRvYXN0Q29udGFpbmVyU2VydmljZS5nZXRDb21wb25lbnRSb290Tm9kZShjb21wb25lbnRSZWYpXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudFJlZjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZXN0cm95cyBjb21wb25lbnQgdXNpbmcgcmVmZXJlbmNlIHRvIGl0J3MgZmFjdG9yeVxuICAgICAqIEByZXR1cm4gcmVmZXJlbmNlIHRvIGF0dGFjaGVkIHRvYXN0XG4gICAgICovXG4gICAgcHVibGljIGRldGFjaFRvYXN0KGNvbXBvbmVudDogYW55KTogdm9pZCB7XG4gICAgICAgIGNvbXBvbmVudC5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVDb250YWluZXIocG9zaXRpb25DbGFzczogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICAgIGNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKFwibnVpLXRvYXN0X19jb250YWluZXJcIik7XG4gICAgICAgIGNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKHBvc2l0aW9uQ2xhc3MpO1xuICAgICAgICB0aGlzLm92ZXJsYXlTZXJ2aWNlXG4gICAgICAgICAgICAvLyBtYWtlIHN1cmUgdG9hc3RzIGFyZSBhbHdheXMgZGlzcGxheWVkIG9uIHRvcCBvZiBldmVyeXRoaW5nXG4gICAgICAgICAgICAuZ2V0T3ZlcmxheUNvbnRhaW5lcihkb2N1bWVudC5ib2R5LCBPVkVSTEFZX0RFRkFVTFRfUFJJT1JJVFkgKyAxMClcbiAgICAgICAgICAgIC5hcHBlbmRDaGlsZChjb250YWluZXIpO1xuXG4gICAgICAgIHRoaXMuY29udGFpbmVyc1twb3NpdGlvbkNsYXNzXSA9IGNvbnRhaW5lcjtcbiAgICB9XG59XG4iXX0=