@lotto24-angular/imports-orchestrator
Version:
Orchestrate dynamically imported components in Angular applications
37 lines • 5.41 kB
JavaScript
import { Directive, ElementRef, inject, Input, Renderer2, } from '@angular/core';
import { Subscription } from 'rxjs';
import { ImportsOrchestratorLifecycleDirective } from './import-lifecycle.directive';
import * as i0 from "@angular/core";
export class ImportsOrchestratorCSSClassDirective {
constructor() {
this.subscriptions = new Subscription();
this.lifecycle = inject(ImportsOrchestratorLifecycleDirective, {
self: true,
});
this.subscriptions.add(this.lifecycle.importComponent.subscribe(this.onImportComponent.bind(this)));
}
onImportComponent(componentRef) {
if (!this.cssClass)
return;
const renderer2 = componentRef.injector.get(Renderer2);
const elementRef = componentRef.injector.get(ElementRef);
const htmlElement = elementRef.nativeElement;
const classes = this.cssClass.match(/[^\s]+/gi);
classes?.forEach((c) => renderer2.addClass(htmlElement, c));
}
ngOnDestroy() {
this.subscriptions.unsubscribe();
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: ImportsOrchestratorCSSClassDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.6", type: ImportsOrchestratorCSSClassDirective, isStandalone: true, selector: "[importCSSClass]", inputs: { cssClass: "cssClass" }, ngImport: i0 }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: ImportsOrchestratorCSSClassDirective, decorators: [{
type: Directive,
args: [{
selector: '[importCSSClass]',
standalone: true,
}]
}], ctorParameters: () => [], propDecorators: { cssClass: [{
type: Input
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1wb3J0LWNzcy1jbGFzcy5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2ltcG9ydHMtb3JjaGVzdHJhdG9yL3NyYy9saWIvaG9zdC1kaXJlY3RpdmUvaW1wb3J0LWNzcy1jbGFzcy5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxVQUFVLEVBQ1YsTUFBTSxFQUNOLEtBQUssRUFFTCxTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNwQyxPQUFPLEVBQUUscUNBQXFDLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQzs7QUFNckYsTUFBTSxPQUFPLG9DQUFvQztJQVEvQztRQUxpQixrQkFBYSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDbkMsY0FBUyxHQUFHLE1BQU0sQ0FBQyxxQ0FBcUMsRUFBRTtZQUN6RSxJQUFJLEVBQUUsSUFBSTtTQUNYLENBQUMsQ0FBQztRQUdELElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUNwQixJQUFJLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQ3RDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQ2xDLENBQ0YsQ0FBQztJQUNKLENBQUM7SUFFTyxpQkFBaUIsQ0FBQyxZQUFtQztRQUMzRCxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVE7WUFBRSxPQUFPO1FBRTNCLE1BQU0sU0FBUyxHQUFHLFlBQVksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3ZELE1BQU0sVUFBVSxHQUFHLFlBQVksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3pELE1BQU0sV0FBVyxHQUFHLFVBQVUsQ0FBQyxhQUE0QixDQUFDO1FBRTVELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2hELE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVNLFdBQVc7UUFDaEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNuQyxDQUFDOzhHQTdCVSxvQ0FBb0M7a0dBQXBDLG9DQUFvQzs7MkZBQXBDLG9DQUFvQztrQkFKaEQsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsa0JBQWtCO29CQUM1QixVQUFVLEVBQUUsSUFBSTtpQkFDakI7d0RBRWlCLFFBQVE7c0JBQXZCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnRSZWYsXG4gIERpcmVjdGl2ZSxcbiAgRWxlbWVudFJlZixcbiAgaW5qZWN0LFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBSZW5kZXJlcjIsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBJbXBvcnRzT3JjaGVzdHJhdG9yTGlmZWN5Y2xlRGlyZWN0aXZlIH0gZnJvbSAnLi9pbXBvcnQtbGlmZWN5Y2xlLmRpcmVjdGl2ZSc7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tpbXBvcnRDU1NDbGFzc10nLFxuICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBJbXBvcnRzT3JjaGVzdHJhdG9yQ1NTQ2xhc3NEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBASW5wdXQoKSBwdWJsaWMgY3NzQ2xhc3MhOiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBzdWJzY3JpcHRpb25zID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICBwcml2YXRlIHJlYWRvbmx5IGxpZmVjeWNsZSA9IGluamVjdChJbXBvcnRzT3JjaGVzdHJhdG9yTGlmZWN5Y2xlRGlyZWN0aXZlLCB7XG4gICAgc2VsZjogdHJ1ZSxcbiAgfSk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMubGlmZWN5Y2xlLmltcG9ydENvbXBvbmVudC5zdWJzY3JpYmUoXG4gICAgICAgIHRoaXMub25JbXBvcnRDb21wb25lbnQuYmluZCh0aGlzKVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIG9uSW1wb3J0Q29tcG9uZW50KGNvbXBvbmVudFJlZjogQ29tcG9uZW50UmVmPHVua25vd24+KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmNzc0NsYXNzKSByZXR1cm47XG5cbiAgICBjb25zdCByZW5kZXJlcjIgPSBjb21wb25lbnRSZWYuaW5qZWN0b3IuZ2V0KFJlbmRlcmVyMik7XG4gICAgY29uc3QgZWxlbWVudFJlZiA9IGNvbXBvbmVudFJlZi5pbmplY3Rvci5nZXQoRWxlbWVudFJlZik7XG4gICAgY29uc3QgaHRtbEVsZW1lbnQgPSBlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQ7XG5cbiAgICBjb25zdCBjbGFzc2VzID0gdGhpcy5jc3NDbGFzcy5tYXRjaCgvW15cXHNdKy9naSk7XG4gICAgY2xhc3Nlcz8uZm9yRWFjaCgoYykgPT4gcmVuZGVyZXIyLmFkZENsYXNzKGh0bWxFbGVtZW50LCBjKSk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XG4gIH1cbn1cbiJdfQ==