UNPKG

@ngneat/overview

Version:

The Template for Success in Template Management

71 lines 9.65 kB
import { ApplicationRef, EnvironmentInjector, inject, Injectable, InjectionToken, Injector, signal, } from '@angular/core'; import { isComponent, isString, isTemplateRef } from './types'; import { TplRef } from './template-ref'; import { StringRef } from './string-ref'; import { CompRef } from './comp-ref'; import * as i0 from "@angular/core"; export const VIEW_CONTEXT = new InjectionToken('Component context'); export class ViewService { constructor() { this.injector = inject(Injector); this.appRef = inject(ApplicationRef); this.environmentInjector = inject(EnvironmentInjector); } createComponent(component, options = {}) { let injector = options.injector ?? this.injector; let contextSignal; if (options.context) { contextSignal = signal(options.context); injector = Injector.create({ providers: [ { provide: VIEW_CONTEXT, useValue: contextSignal.asReadonly(), }, ], parent: injector, }); } return new CompRef({ component, vcr: options.vcr, injector, appRef: this.appRef, environmentInjector: options.environmentInjector || this.environmentInjector, contextSignal, }); } createTemplate(tpl, options = {}) { return new TplRef({ vcr: options.vcr, appRef: this.appRef, tpl, context: options.context, injector: options.injector, }); } createView(content, viewOptions = {}) { if (isTemplateRef(content)) { return this.createTemplate(content, viewOptions); } else if (isComponent(content)) { return this.createComponent(content, viewOptions); } else if (isString(content)) { return new StringRef(content); } else { throw 'Type of content is not supported'; } } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.4", ngImport: i0, type: ViewService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); } static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.4", ngImport: i0, type: ViewService, providedIn: 'root' }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.4", ngImport: i0, type: ViewService, decorators: [{ type: Injectable, args: [{ providedIn: 'root' }] }] }); export function injectViewContext() { return inject(VIEW_CONTEXT); } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlldy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nbmVhdC9vdmVydmlldy9zcmMvbGliL3ZpZXdzL3ZpZXcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLGNBQWMsRUFDZCxtQkFBbUIsRUFDbkIsTUFBTSxFQUNOLFVBQVUsRUFDVixjQUFjLEVBQ2QsUUFBUSxFQUVSLE1BQU0sR0FLUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQVcsV0FBVyxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQVcsTUFBTSxTQUFTLENBQUM7QUFDakYsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDekMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFlBQVksQ0FBQzs7QUFrQnJDLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxJQUFJLGNBQWMsQ0FBa0IsbUJBQW1CLENBQUMsQ0FBQztBQUdyRixNQUFNLE9BQU8sV0FBVztJQUR4QjtRQUVVLGFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDNUIsV0FBTSxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNoQyx3QkFBbUIsR0FBRyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQztLQXNEM0Q7SUFwREMsZUFBZSxDQUFnQixTQUFxQixFQUFFLFVBQW9DLEVBQUU7UUFDMUYsSUFBSSxRQUFRLEdBQUcsT0FBTyxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQ2pELElBQUksYUFBa0QsQ0FBQztRQUV2RCxJQUFJLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNwQixhQUFhLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUN4QyxRQUFRLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQztnQkFDekIsU0FBUyxFQUFFO29CQUNUO3dCQUNFLE9BQU8sRUFBRSxZQUFZO3dCQUNyQixRQUFRLEVBQUUsYUFBYSxDQUFDLFVBQVUsRUFBRTtxQkFDckM7aUJBQ0Y7Z0JBQ0QsTUFBTSxFQUFFLFFBQVE7YUFDakIsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUVELE9BQU8sSUFBSSxPQUFPLENBQWdCO1lBQ2hDLFNBQVM7WUFDVCxHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUc7WUFDaEIsUUFBUTtZQUNSLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtZQUNuQixtQkFBbUIsRUFBRSxPQUFPLENBQUMsbUJBQW1CLElBQUksSUFBSSxDQUFDLG1CQUFtQjtZQUM1RSxhQUFhO1NBQ2QsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGNBQWMsQ0FBVSxHQUF5QixFQUFFLFVBQStCLEVBQUU7UUFDbEYsT0FBTyxJQUFJLE1BQU0sQ0FBQztZQUNoQixHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUc7WUFDaEIsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQ25CLEdBQUc7WUFDSCxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU87WUFDeEIsUUFBUSxFQUFFLE9BQU8sQ0FBQyxRQUFRO1NBQzNCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFNRCxVQUFVLENBQTZCLE9BQVUsRUFBRSxjQUFvQyxFQUFFO1FBQ3ZGLElBQUksYUFBYSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDM0IsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxXQUFXLENBQUMsQ0FBQztRQUNuRCxDQUFDO2FBQU0sSUFBSSxXQUFXLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNoQyxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ3BELENBQUM7YUFBTSxJQUFJLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQzdCLE9BQU8sSUFBSSxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDaEMsQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLGtDQUFrQyxDQUFDO1FBQzNDLENBQUM7SUFDSCxDQUFDOzhHQXhEVSxXQUFXO2tIQUFYLFdBQVcsY0FERSxNQUFNOzsyRkFDbkIsV0FBVztrQkFEdkIsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUU7O0FBNERsQyxNQUFNLFVBQVUsaUJBQWlCO0lBQy9CLE9BQU8sTUFBTSxDQUFDLFlBQVksQ0FBYyxDQUFDO0FBQzNDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBcHBsaWNhdGlvblJlZixcbiAgRW52aXJvbm1lbnRJbmplY3RvcixcbiAgaW5qZWN0LFxuICBJbmplY3RhYmxlLFxuICBJbmplY3Rpb25Ub2tlbixcbiAgSW5qZWN0b3IsXG4gIFNpZ25hbCxcbiAgc2lnbmFsLFxuICBUZW1wbGF0ZVJlZixcbiAgVHlwZSxcbiAgVmlld0NvbnRhaW5lclJlZixcbiAgV3JpdGFibGVTaWduYWwsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udGVudCwgaXNDb21wb25lbnQsIGlzU3RyaW5nLCBpc1RlbXBsYXRlUmVmLCBWaWV3UmVmIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBUcGxSZWYgfSBmcm9tICcuL3RlbXBsYXRlLXJlZic7XG5pbXBvcnQgeyBTdHJpbmdSZWYgfSBmcm9tICcuL3N0cmluZy1yZWYnO1xuaW1wb3J0IHsgQ29tcFJlZiB9IGZyb20gJy4vY29tcC1yZWYnO1xuXG5pbnRlcmZhY2UgX1ZpZXdPcHRpb25zIHtcbiAgdmNyPzogVmlld0NvbnRhaW5lclJlZiB8IHVuZGVmaW5lZDtcbiAgaW5qZWN0b3I/OiBJbmplY3RvciB8IHVuZGVmaW5lZDtcbn1cblxuaW50ZXJmYWNlIFRlbXBsYXRlVmlld09wdGlvbnMgZXh0ZW5kcyBfVmlld09wdGlvbnMge1xuICBjb250ZXh0PzogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZDtcbn1cblxuaW50ZXJmYWNlIENvbXBWaWV3T3B0aW9uczxDb250ZXh0ID0gYW55PiBleHRlbmRzIF9WaWV3T3B0aW9ucyB7XG4gIGVudmlyb25tZW50SW5qZWN0b3I/OiBFbnZpcm9ubWVudEluamVjdG9yIHwgdW5kZWZpbmVkO1xuICBjb250ZXh0PzogQ29udGV4dCB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IHR5cGUgVmlld09wdGlvbnM8Q29udGV4dCA9IGFueT4gPSBfVmlld09wdGlvbnMgJiBDb21wVmlld09wdGlvbnM8Q29udGV4dD4gJiBUZW1wbGF0ZVZpZXdPcHRpb25zO1xuXG5leHBvcnQgY29uc3QgVklFV19DT05URVhUID0gbmV3IEluamVjdGlvblRva2VuPFNpZ25hbDx1bmtub3duPj4oJ0NvbXBvbmVudCBjb250ZXh0Jyk7XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgVmlld1NlcnZpY2Uge1xuICBwcml2YXRlIGluamVjdG9yID0gaW5qZWN0KEluamVjdG9yKTtcbiAgcHJpdmF0ZSBhcHBSZWYgPSBpbmplY3QoQXBwbGljYXRpb25SZWYpO1xuICBwcml2YXRlIGVudmlyb25tZW50SW5qZWN0b3IgPSBpbmplY3QoRW52aXJvbm1lbnRJbmplY3Rvcik7XG5cbiAgY3JlYXRlQ29tcG9uZW50PENvbXAsIENvbnRleHQ+KGNvbXBvbmVudDogVHlwZTxDb21wPiwgb3B0aW9uczogQ29tcFZpZXdPcHRpb25zPENvbnRleHQ+ID0ge30pIHtcbiAgICBsZXQgaW5qZWN0b3IgPSBvcHRpb25zLmluamVjdG9yID8/IHRoaXMuaW5qZWN0b3I7XG4gICAgbGV0IGNvbnRleHRTaWduYWw6IFdyaXRhYmxlU2lnbmFsPENvbnRleHQ+IHwgdW5kZWZpbmVkO1xuXG4gICAgaWYgKG9wdGlvbnMuY29udGV4dCkge1xuICAgICAgY29udGV4dFNpZ25hbCA9IHNpZ25hbChvcHRpb25zLmNvbnRleHQpO1xuICAgICAgaW5qZWN0b3IgPSBJbmplY3Rvci5jcmVhdGUoe1xuICAgICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBWSUVXX0NPTlRFWFQsXG4gICAgICAgICAgICB1c2VWYWx1ZTogY29udGV4dFNpZ25hbC5hc1JlYWRvbmx5KCksXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgcGFyZW50OiBpbmplY3RvcixcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgQ29tcFJlZjxDb21wLCBDb250ZXh0Pih7XG4gICAgICBjb21wb25lbnQsXG4gICAgICB2Y3I6IG9wdGlvbnMudmNyLFxuICAgICAgaW5qZWN0b3IsXG4gICAgICBhcHBSZWY6IHRoaXMuYXBwUmVmLFxuICAgICAgZW52aXJvbm1lbnRJbmplY3Rvcjogb3B0aW9ucy5lbnZpcm9ubWVudEluamVjdG9yIHx8IHRoaXMuZW52aXJvbm1lbnRJbmplY3RvcixcbiAgICAgIGNvbnRleHRTaWduYWwsXG4gICAgfSk7XG4gIH1cblxuICBjcmVhdGVUZW1wbGF0ZTxDb250ZXh0Pih0cGw6IFRlbXBsYXRlUmVmPENvbnRleHQ+LCBvcHRpb25zOiBUZW1wbGF0ZVZpZXdPcHRpb25zID0ge30pIHtcbiAgICByZXR1cm4gbmV3IFRwbFJlZih7XG4gICAgICB2Y3I6IG9wdGlvbnMudmNyLFxuICAgICAgYXBwUmVmOiB0aGlzLmFwcFJlZixcbiAgICAgIHRwbCxcbiAgICAgIGNvbnRleHQ6IG9wdGlvbnMuY29udGV4dCxcbiAgICAgIGluamVjdG9yOiBvcHRpb25zLmluamVjdG9yLFxuICAgIH0pO1xuICB9XG5cbiAgY3JlYXRlVmlldzxDb21wLCBDb250ZXh0Pihjb250ZW50OiBUeXBlPENvbXA+LCB2aWV3T3B0aW9uczogQ29tcFZpZXdPcHRpb25zPENvbnRleHQ+KTogQ29tcFJlZjxDb21wLCBDb250ZXh0PjtcbiAgY3JlYXRlVmlldzxUPihjb250ZW50OiBUZW1wbGF0ZVJlZjxUPiwgdmlld09wdGlvbnM6IFRlbXBsYXRlVmlld09wdGlvbnMpOiBUcGxSZWY8VD47XG4gIGNyZWF0ZVZpZXcoY29udGVudDogc3RyaW5nKTogU3RyaW5nUmVmO1xuICBjcmVhdGVWaWV3KGNvbnRlbnQ6IENvbnRlbnQsIHZpZXdPcHRpb25zPzogVmlld09wdGlvbnMpOiBWaWV3UmVmO1xuICBjcmVhdGVWaWV3PFQgZXh0ZW5kcyBDb250ZW50LCBDb250ZXh0Pihjb250ZW50OiBULCB2aWV3T3B0aW9uczogVmlld09wdGlvbnM8Q29udGV4dD4gPSB7fSk6IFZpZXdSZWYge1xuICAgIGlmIChpc1RlbXBsYXRlUmVmKGNvbnRlbnQpKSB7XG4gICAgICByZXR1cm4gdGhpcy5jcmVhdGVUZW1wbGF0ZShjb250ZW50LCB2aWV3T3B0aW9ucyk7XG4gICAgfSBlbHNlIGlmIChpc0NvbXBvbmVudChjb250ZW50KSkge1xuICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlQ29tcG9uZW50KGNvbnRlbnQsIHZpZXdPcHRpb25zKTtcbiAgICB9IGVsc2UgaWYgKGlzU3RyaW5nKGNvbnRlbnQpKSB7XG4gICAgICByZXR1cm4gbmV3IFN0cmluZ1JlZihjb250ZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgJ1R5cGUgb2YgY29udGVudCBpcyBub3Qgc3VwcG9ydGVkJztcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluamVjdFZpZXdDb250ZXh0PFQ+KCkge1xuICByZXR1cm4gaW5qZWN0KFZJRVdfQ09OVEVYVCkgYXMgU2lnbmFsPFQ+O1xufVxuIl19