@engie-group/fluid-design-system-angular
Version:
Fluid Design System Angular
66 lines • 9.44 kB
JavaScript
import { ComponentPortal, DomPortalOutlet, TemplatePortal } from '@angular/cdk/portal';
import { Injectable, TemplateRef } from '@angular/core';
import { ToastContainerComponent } from './toast-container.component';
import * as i0 from "@angular/core";
export class ToastService {
constructor(componentFactoryResolver, appRef) {
this.componentFactoryResolver = componentFactoryResolver;
this.appRef = appRef;
this.config = {
containerId: 'nj-toast-container-id',
isContainerFullWidth: false
};
}
/**
* Opens a toast wrapped inside a ng-template or a Component
*/
open(content, config) {
if (!content) {
return;
}
let toastPortal;
if (!this.containerRef) {
this.attachContainer();
}
const containerElement = this.containerRef?.location?.nativeElement?.children?.[0];
this.containerPortalHost = new DomPortalOutlet(containerElement);
if (content instanceof TemplateRef) {
toastPortal = new TemplatePortal(content, config.viewContainerRef, {
$implicit: config.data
});
}
else {
toastPortal = new ComponentPortal(content, config.viewContainerRef, null, this.componentFactoryResolver);
}
return this.containerPortalHost.attach(toastPortal);
}
/**
* Set config
*/
setConfig(config) {
this.config = { ...this.config, ...config };
this.setContainerInputs(this.containerRef);
}
setContainerInputs(containerComponentRef) {
const containerComponent = containerComponentRef?.instance;
if (containerComponent) {
containerComponent.containerId = this.config?.containerId;
containerComponent.isFullWidth = this.config?.isContainerFullWidth;
containerComponent._markForCheck();
}
}
attachContainer() {
this.portalHost = new DomPortalOutlet(document.body, undefined, this.appRef);
const containerPortal = new ComponentPortal(ToastContainerComponent, null, null, this.componentFactoryResolver);
const containerComponentRef = this.portalHost.attachComponentPortal(containerPortal);
this.setContainerInputs(containerComponentRef);
this.containerRef = containerComponentRef;
return containerComponentRef;
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ToastService, deps: [{ token: i0.ComponentFactoryResolver }, { token: i0.ApplicationRef }], target: i0.ɵɵFactoryTarget.Injectable }); }
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ToastService }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ToastService, decorators: [{
type: Injectable
}], ctorParameters: function () { return [{ type: i0.ComponentFactoryResolver }, { type: i0.ApplicationRef }]; } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9hc3Quc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3RvYXN0L3RvYXN0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLGVBQWUsRUFBaUIsZUFBZSxFQUFFLGNBQWMsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ3BHLE9BQU8sRUFBeUQsVUFBVSxFQUFFLFdBQVcsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUM5RyxPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSw2QkFBNkIsQ0FBQzs7QUFJcEUsTUFBTSxPQUFPLFlBQVk7SUFVdkIsWUFBb0Isd0JBQWtELEVBQVUsTUFBc0I7UUFBbEYsNkJBQXdCLEdBQXhCLHdCQUF3QixDQUEwQjtRQUFVLFdBQU0sR0FBTixNQUFNLENBQWdCO1FBTDlGLFdBQU0sR0FBdUI7WUFDbkMsV0FBVyxFQUFFLHVCQUF1QjtZQUNwQyxvQkFBb0IsRUFBRSxLQUFLO1NBQzVCLENBQUM7SUFHRixDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFJLENBQUMsT0FBOEMsRUFBRSxNQUEwQjtRQUM3RSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ1osT0FBTztTQUNSO1FBQ0QsSUFBSSxXQUFXLENBQUM7UUFDaEIsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDdEIsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1NBQ3hCO1FBQ0QsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkYsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksZUFBZSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDakUsSUFBSSxPQUFPLFlBQVksV0FBVyxFQUFFO1lBQ2xDLFdBQVcsR0FBRyxJQUFJLGNBQWMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLGdCQUFnQixFQUFFO2dCQUNqRSxTQUFTLEVBQUUsTUFBTSxDQUFDLElBQUk7YUFDdkIsQ0FBQyxDQUFDO1NBQ0o7YUFBTTtZQUNMLFdBQVcsR0FBRyxJQUFJLGVBQWUsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLGdCQUFnQixFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsd0JBQXdCLENBQUMsQ0FBQztTQUMxRztRQUNELE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxTQUFTLENBQUMsTUFBMEI7UUFDbEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLE1BQU0sRUFBQyxDQUFDO1FBQzFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVPLGtCQUFrQixDQUFDLHFCQUF3RTtRQUNqRyxNQUFNLGtCQUFrQixHQUFHLHFCQUFxQixFQUFFLFFBQVEsQ0FBQztRQUMzRCxJQUFJLGtCQUFrQixFQUFFO1lBQ3RCLGtCQUFrQixDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQztZQUMxRCxrQkFBa0IsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxvQkFBb0IsQ0FBQztZQUNuRSxrQkFBa0IsQ0FBQyxhQUFhLEVBQUUsQ0FBQztTQUNwQztJQUNILENBQUM7SUFFTyxlQUFlO1FBQ3JCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxlQUFlLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzdFLE1BQU0sZUFBZSxHQUFHLElBQUksZUFBZSxDQUFDLHVCQUF1QixFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLHdCQUF3QixDQUFDLENBQUM7UUFDaEgsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLHFCQUFxQixDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ3JGLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQy9DLElBQUksQ0FBQyxZQUFZLEdBQUcscUJBQXFCLENBQUM7UUFDMUMsT0FBTyxxQkFBcUIsQ0FBQztJQUMvQixDQUFDOytHQTVEVSxZQUFZO21IQUFaLFlBQVk7OzRGQUFaLFlBQVk7a0JBRHhCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudFBvcnRhbCwgQ29tcG9uZW50VHlwZSwgRG9tUG9ydGFsT3V0bGV0LCBUZW1wbGF0ZVBvcnRhbH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BvcnRhbCc7XG5pbXBvcnQge0FwcGxpY2F0aW9uUmVmLCBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsIENvbXBvbmVudFJlZiwgSW5qZWN0YWJsZSwgVGVtcGxhdGVSZWZ9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtUb2FzdENvbnRhaW5lckNvbXBvbmVudH0gZnJvbSAnLi90b2FzdC1jb250YWluZXIuY29tcG9uZW50JztcbmltcG9ydCB7VG9hc3RDb250ZW50Q29uZmlnLCBUb2FzdFNlcnZpY2VDb25maWd9IGZyb20gJy4vdG9hc3QubW9kZWwnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgVG9hc3RTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBwb3J0YWxIb3N0OiBEb21Qb3J0YWxPdXRsZXQgfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgY29udGFpbmVyUG9ydGFsSG9zdDogRG9tUG9ydGFsT3V0bGV0IHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIGNvbnRhaW5lclJlZjogQ29tcG9uZW50UmVmPFRvYXN0Q29udGFpbmVyQ29tcG9uZW50PiB8IHVuZGVmaW5lZDtcblxuICBwcml2YXRlIGNvbmZpZzogVG9hc3RTZXJ2aWNlQ29uZmlnID0ge1xuICAgIGNvbnRhaW5lcklkOiAnbmotdG9hc3QtY29udGFpbmVyLWlkJyxcbiAgICBpc0NvbnRhaW5lckZ1bGxXaWR0aDogZmFsc2VcbiAgfTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLCBwcml2YXRlIGFwcFJlZjogQXBwbGljYXRpb25SZWYpIHtcbiAgfVxuXG4gIC8qKlxuICAgKiBPcGVucyBhIHRvYXN0IHdyYXBwZWQgaW5zaWRlIGEgbmctdGVtcGxhdGUgb3IgYSBDb21wb25lbnRcbiAgICovXG4gIG9wZW4oY29udGVudDogVGVtcGxhdGVSZWY8YW55PiB8IENvbXBvbmVudFR5cGU8YW55PiwgY29uZmlnOiBUb2FzdENvbnRlbnRDb25maWcpIHtcbiAgICBpZiAoIWNvbnRlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IHRvYXN0UG9ydGFsO1xuICAgIGlmICghdGhpcy5jb250YWluZXJSZWYpIHtcbiAgICAgIHRoaXMuYXR0YWNoQ29udGFpbmVyKCk7XG4gICAgfVxuICAgIGNvbnN0IGNvbnRhaW5lckVsZW1lbnQgPSB0aGlzLmNvbnRhaW5lclJlZj8ubG9jYXRpb24/Lm5hdGl2ZUVsZW1lbnQ/LmNoaWxkcmVuPy5bMF07XG4gICAgdGhpcy5jb250YWluZXJQb3J0YWxIb3N0ID0gbmV3IERvbVBvcnRhbE91dGxldChjb250YWluZXJFbGVtZW50KTtcbiAgICBpZiAoY29udGVudCBpbnN0YW5jZW9mIFRlbXBsYXRlUmVmKSB7XG4gICAgICB0b2FzdFBvcnRhbCA9IG5ldyBUZW1wbGF0ZVBvcnRhbChjb250ZW50LCBjb25maWcudmlld0NvbnRhaW5lclJlZiwge1xuICAgICAgICAkaW1wbGljaXQ6IGNvbmZpZy5kYXRhXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdG9hc3RQb3J0YWwgPSBuZXcgQ29tcG9uZW50UG9ydGFsKGNvbnRlbnQsIGNvbmZpZy52aWV3Q29udGFpbmVyUmVmLCBudWxsLCB0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcik7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmNvbnRhaW5lclBvcnRhbEhvc3QuYXR0YWNoKHRvYXN0UG9ydGFsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgY29uZmlnXG4gICAqL1xuICBzZXRDb25maWcoY29uZmlnOiBUb2FzdFNlcnZpY2VDb25maWcpIHtcbiAgICB0aGlzLmNvbmZpZyA9IHsuLi50aGlzLmNvbmZpZywgLi4uY29uZmlnfTtcbiAgICB0aGlzLnNldENvbnRhaW5lcklucHV0cyh0aGlzLmNvbnRhaW5lclJlZik7XG4gIH1cblxuICBwcml2YXRlIHNldENvbnRhaW5lcklucHV0cyhjb250YWluZXJDb21wb25lbnRSZWY6IENvbXBvbmVudFJlZjxUb2FzdENvbnRhaW5lckNvbXBvbmVudD4gfCB1bmRlZmluZWQpIHtcbiAgICBjb25zdCBjb250YWluZXJDb21wb25lbnQgPSBjb250YWluZXJDb21wb25lbnRSZWY/Lmluc3RhbmNlO1xuICAgIGlmIChjb250YWluZXJDb21wb25lbnQpIHtcbiAgICAgIGNvbnRhaW5lckNvbXBvbmVudC5jb250YWluZXJJZCA9IHRoaXMuY29uZmlnPy5jb250YWluZXJJZDtcbiAgICAgIGNvbnRhaW5lckNvbXBvbmVudC5pc0Z1bGxXaWR0aCA9IHRoaXMuY29uZmlnPy5pc0NvbnRhaW5lckZ1bGxXaWR0aDtcbiAgICAgIGNvbnRhaW5lckNvbXBvbmVudC5fbWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhdHRhY2hDb250YWluZXIoKSB7XG4gICAgdGhpcy5wb3J0YWxIb3N0ID0gbmV3IERvbVBvcnRhbE91dGxldChkb2N1bWVudC5ib2R5LCB1bmRlZmluZWQsIHRoaXMuYXBwUmVmKTtcbiAgICBjb25zdCBjb250YWluZXJQb3J0YWwgPSBuZXcgQ29tcG9uZW50UG9ydGFsKFRvYXN0Q29udGFpbmVyQ29tcG9uZW50LCBudWxsLCBudWxsLCB0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcik7XG4gICAgY29uc3QgY29udGFpbmVyQ29tcG9uZW50UmVmID0gdGhpcy5wb3J0YWxIb3N0LmF0dGFjaENvbXBvbmVudFBvcnRhbChjb250YWluZXJQb3J0YWwpO1xuICAgIHRoaXMuc2V0Q29udGFpbmVySW5wdXRzKGNvbnRhaW5lckNvbXBvbmVudFJlZik7XG4gICAgdGhpcy5jb250YWluZXJSZWYgPSBjb250YWluZXJDb21wb25lbnRSZWY7XG4gICAgcmV0dXJuIGNvbnRhaW5lckNvbXBvbmVudFJlZjtcbiAgfVxufVxuIl19