@ngneat/overview
Version:
The Template for Success in Template Management
1 lines • 28.9 kB
Source Map (JSON)
{"version":3,"file":"ngneat-overview.mjs","sources":["../../../../projects/ngneat/overview/src/lib/teleport/teleport.service.ts","../../../../projects/ngneat/overview/src/lib/teleport/teleport.directive.ts","../../../../projects/ngneat/overview/src/lib/teleport/teleport-outlet.directive.ts","../../../../projects/ngneat/overview/src/lib/views/comp-ref.ts","../../../../projects/ngneat/overview/src/lib/views/types.ts","../../../../projects/ngneat/overview/src/lib/views/template-ref.ts","../../../../projects/ngneat/overview/src/lib/views/string-ref.ts","../../../../projects/ngneat/overview/src/lib/views/view.ts","../../../../projects/ngneat/overview/src/lib/dynamic-view/dynamic-view.component.ts","../../../../projects/ngneat/overview/src/lib/dynamic-view/dynamic-view.directive.ts","../../../../projects/ngneat/overview/src/ngneat-overview.ts"],"sourcesContent":["import { Injectable, ViewContainerRef } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { filter, map } from 'rxjs/operators';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class TeleportService {\n private outlets = new BehaviorSubject<string>('');\n\n outlet$(name: string) {\n return this.outlets.pipe(\n filter((current) => current === name),\n map((name) => this.ports.get(name))\n );\n }\n\n ports = new Map<string, ViewContainerRef>();\n\n newOutlet(name: string) {\n this.outlets.next(name);\n }\n}\n","import {\n Directive,\n EmbeddedViewRef,\n OnChanges,\n OnDestroy,\n SimpleChanges,\n TemplateRef,\n inject,\n input,\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\n\nimport { TeleportService } from './teleport.service';\n\n@Directive({\n selector: '[teleportTo]',\n standalone: true,\n})\nexport class TeleportDirective implements OnChanges, OnDestroy {\n readonly teleportTo = input<string | null | undefined>();\n\n private viewRef: EmbeddedViewRef<any>;\n private subscription: Subscription | null = null;\n\n private tpl = inject(TemplateRef);\n private service = inject(TeleportService);\n\n ngOnChanges(changes: SimpleChanges): void {\n // Note: Do not use `effect` to observe changes to `teleportTo`, as\n // this would result in running `createEmbeddedView` within that effect.\n // `createEmbeddedView` may create a component whose constructor might\n // trigger another effect or write to some signals, given that we are\n // operating within a reactive context.\n if (changes.teleportTo && typeof this.teleportTo() === 'string') {\n this.dispose();\n\n this.subscription = this.service.outlet$(this.teleportTo()).subscribe((outlet) => {\n if (outlet) {\n this.viewRef = outlet.createEmbeddedView(this.tpl);\n }\n });\n }\n }\n\n ngOnDestroy(): void {\n this.dispose();\n }\n\n private dispose(): void {\n this.subscription?.unsubscribe();\n this.subscription = null;\n this.viewRef?.destroy();\n }\n}\n","import { Directive, OnDestroy, ViewContainerRef, effect, inject, input } from '@angular/core';\nimport { TeleportService } from './teleport.service';\n\n@Directive({\n selector: '[teleportOutlet]',\n standalone: true,\n})\nexport class TeleportOutletDirective implements OnDestroy {\n // We could've also used the `ngAcceptInputType`, but it's being deprecated in newer Angular versions.\n readonly teleportOutlet = input<string | null | undefined>();\n private vcr = inject(ViewContainerRef);\n private service = inject(TeleportService);\n\n constructor() {\n effect(() => {\n const teleportOutlet = this.teleportOutlet();\n if (typeof teleportOutlet === 'string') {\n this.service.ports.set(teleportOutlet, this.vcr);\n this.service.newOutlet(teleportOutlet);\n }\n });\n }\n\n ngOnDestroy(): void {\n this.service.ports.delete(this.teleportOutlet());\n }\n}\n","import {\n ApplicationRef,\n ComponentRef,\n createComponent,\n EnvironmentInjector,\n Injector,\n Type,\n ViewContainerRef,\n WritableSignal,\n} from '@angular/core';\nimport { ExcludeFunctions, ExtractInputTypes, InferInputSignalType, ViewRef } from './types';\n\ninterface Options<Comp, Context> {\n component: Type<Comp>;\n injector: Injector;\n environmentInjector: EnvironmentInjector;\n vcr: ViewContainerRef | undefined;\n appRef: ApplicationRef | undefined;\n contextSignal?: WritableSignal<Context>;\n}\n\nexport class CompRef<Comp, Context = any> implements ViewRef {\n ref: ComponentRef<Comp>;\n\n constructor(private options: Options<Comp, Context>) {\n if (options.vcr) {\n this.ref = options.vcr.createComponent(options.component, {\n index: options.vcr.length,\n injector: options.injector || options.vcr.injector,\n });\n } else {\n this.ref = createComponent<Comp>(options.component, {\n elementInjector: options.injector,\n environmentInjector: options.environmentInjector,\n });\n options.appRef.attachView(this.ref.hostView);\n }\n }\n\n setInput<K extends keyof ExcludeFunctions<Comp>>(input: K, value: InferInputSignalType<Comp[K]>) {\n this.ref.setInput(input as string, value);\n\n return this;\n }\n\n setInputs(inputs: Partial<ExtractInputTypes<ExcludeFunctions<Comp>>>) {\n Object.keys(inputs).forEach((input) => {\n this.ref.setInput(input, inputs[input]);\n });\n\n return this;\n }\n\n detectChanges() {\n this.ref.hostView.detectChanges();\n\n return this;\n }\n\n updateContext(context: Context) {\n this.options.contextSignal?.set(context);\n\n return this;\n }\n\n appendTo(container: Element) {\n container.appendChild(this.getElement());\n\n return this;\n }\n\n removeFrom(container: Element) {\n container.removeChild(this.getElement());\n\n return this;\n }\n\n getRawContent() {\n return this.getElement().outerHTML;\n }\n\n getElement<T extends Element>(): T {\n return this.ref.location.nativeElement;\n }\n\n destroy() {\n this.ref.destroy();\n !this.options.vcr && this.options.appRef.detachView(this.ref.hostView);\n this.ref = null;\n }\n}\n","import { InputSignal, InputSignalWithTransform, TemplateRef, Type } from '@angular/core';\nimport { CompRef } from './comp-ref';\nimport { StringRef } from './string-ref';\nimport { TplRef } from './template-ref';\n\nexport interface ViewRef {\n getElement(): Element | string;\n\n detectChanges(): ViewRef;\n\n updateContext(context: any): ViewRef;\n\n destroy(): void;\n}\n\ntype ExcludeFunctionPropertyNames<T> = {\n // Allow inferring keys that have the type `InputSignal`, as it represents a function.\n [Key in keyof T]: T[Key] extends InputSignal<any> ? Key : T[Key] extends Function ? never : Key;\n}[keyof T];\n\nexport type InferInputSignalType<T> = T extends InputSignalWithTransform<unknown, infer R> ? R : T extends InputSignal<infer R> ? R : T;\nexport type ExtractInputTypes<T> = {\n [Key in keyof T]: InferInputSignalType<T[Key]>;\n}\n\nexport type ExcludeFunctions<T> = Pick<T, ExcludeFunctionPropertyNames<T>>;\nexport type Content = string | number | TemplateRef<any> | Type<any>;\nexport type ResolveViewRef<T> = T extends Type<infer Instance>\n ? CompRef<Instance>\n : T extends TemplateRef<infer Context>\n ? TplRef<Context>\n : StringRef;\n\nexport function isTemplateRef(value: any): value is TemplateRef<any> {\n return value instanceof TemplateRef;\n}\n\nexport function isComponent(value: any): value is Type<any> {\n return typeof value === 'function';\n}\n\nexport function isString(value: any): value is string {\n return typeof value === 'string';\n}\n\nexport function getViewRef<T>(value: CompRef<T> | TplRef<T>) {\n return value instanceof CompRef ? value.ref.hostView : value.ref;\n}\n","import { ApplicationRef, EmbeddedViewRef, Injector, TemplateRef, ViewContainerRef } from '@angular/core';\nimport { ViewRef } from './types';\n\ninterface Args<C> {\n tpl: TemplateRef<C>;\n context: C;\n vcr: ViewContainerRef | undefined;\n appRef: ApplicationRef | undefined;\n injector: Injector | undefined;\n}\n\nexport class TplRef<C> implements ViewRef {\n ref: EmbeddedViewRef<{}>;\n private element: Element;\n\n constructor(private args: Args<C>) {\n if (this.args.vcr) {\n this.ref = this.args.vcr.createEmbeddedView(this.args.tpl, this.args.context || {}, { injector: args.injector });\n this.ref.detectChanges();\n } else {\n this.ref = this.args.tpl.createEmbeddedView(this.args.context || ({} as C), args.injector);\n this.ref.detectChanges();\n this.args.appRef.attachView(this.ref);\n }\n }\n\n detectChanges() {\n this.ref.detectChanges();\n\n return this;\n }\n\n getElement(): Element {\n const rootNodes = this.ref.rootNodes;\n if (rootNodes.length === 1 && rootNodes[0] === Node.ELEMENT_NODE) {\n this.element = rootNodes[0];\n } else {\n this.element = document.createElement('div');\n this.element.append(...rootNodes);\n }\n\n return this.element;\n }\n\n destroy() {\n if (this.ref.rootNodes[0] !== 1) {\n this.element?.parentNode.removeChild(this.element);\n this.element = null;\n }\n\n if (!this.args.vcr) {\n this.args.appRef.detachView(this.ref);\n }\n\n this.ref.destroy();\n this.ref = null;\n }\n\n updateContext(context: C) {\n Object.assign(this.ref.context, context);\n\n return this;\n }\n}\n","import { ViewRef } from './types';\n\nexport class StringRef implements ViewRef {\n constructor(private value: string) {}\n\n getElement(): string {\n return this.value;\n }\n\n detectChanges() {\n return this;\n }\n\n updateContext() {\n return this;\n }\n\n destroy() {}\n}\n","import {\n ApplicationRef,\n EnvironmentInjector,\n inject,\n Injectable,\n InjectionToken,\n Injector,\n Signal,\n signal,\n TemplateRef,\n Type,\n ViewContainerRef,\n WritableSignal,\n} from '@angular/core';\nimport { Content, isComponent, isString, isTemplateRef, ViewRef } from './types';\nimport { TplRef } from './template-ref';\nimport { StringRef } from './string-ref';\nimport { CompRef } from './comp-ref';\n\ninterface _ViewOptions {\n vcr?: ViewContainerRef | undefined;\n injector?: Injector | undefined;\n}\n\ninterface TemplateViewOptions extends _ViewOptions {\n context?: Record<string, any> | undefined;\n}\n\ninterface CompViewOptions<Context = any> extends _ViewOptions {\n environmentInjector?: EnvironmentInjector | undefined;\n context?: Context | undefined;\n}\n\nexport type ViewOptions<Context = any> = _ViewOptions & CompViewOptions<Context> & TemplateViewOptions;\n\nexport const VIEW_CONTEXT = new InjectionToken<Signal<unknown>>('Component context');\n\n@Injectable({ providedIn: 'root' })\nexport class ViewService {\n private injector = inject(Injector);\n private appRef = inject(ApplicationRef);\n private environmentInjector = inject(EnvironmentInjector);\n\n createComponent<Comp, Context>(component: Type<Comp>, options: CompViewOptions<Context> = {}) {\n let injector = options.injector ?? this.injector;\n let contextSignal: WritableSignal<Context> | undefined;\n\n if (options.context) {\n contextSignal = signal(options.context);\n injector = Injector.create({\n providers: [\n {\n provide: VIEW_CONTEXT,\n useValue: contextSignal.asReadonly(),\n },\n ],\n parent: injector,\n });\n }\n\n return new CompRef<Comp, Context>({\n component,\n vcr: options.vcr,\n injector,\n appRef: this.appRef,\n environmentInjector: options.environmentInjector || this.environmentInjector,\n contextSignal,\n });\n }\n\n createTemplate<Context>(tpl: TemplateRef<Context>, options: TemplateViewOptions = {}) {\n return new TplRef({\n vcr: options.vcr,\n appRef: this.appRef,\n tpl,\n context: options.context,\n injector: options.injector,\n });\n }\n\n createView<Comp, Context>(content: Type<Comp>, viewOptions: CompViewOptions<Context>): CompRef<Comp, Context>;\n createView<T>(content: TemplateRef<T>, viewOptions: TemplateViewOptions): TplRef<T>;\n createView(content: string): StringRef;\n createView(content: Content, viewOptions?: ViewOptions): ViewRef;\n createView<T extends Content, Context>(content: T, viewOptions: ViewOptions<Context> = {}): ViewRef {\n if (isTemplateRef(content)) {\n return this.createTemplate(content, viewOptions);\n } else if (isComponent(content)) {\n return this.createComponent(content, viewOptions);\n } else if (isString(content)) {\n return new StringRef(content);\n } else {\n throw 'Type of content is not supported';\n }\n }\n}\n\nexport function injectViewContext<T>() {\n return inject(VIEW_CONTEXT) as Signal<T>;\n}\n","import { Component, input } from '@angular/core';\n\n@Component({\n selector: 'dynamic-view',\n standalone: true,\n template: ` <div [innerHTML]=\"content()\"></div> `,\n})\nexport class DynamicViewComponent {\n readonly content = input<string>();\n}\n","import {\n Directive,\n Injector,\n OnChanges,\n OnDestroy,\n OnInit,\n SimpleChanges,\n TemplateRef,\n ViewContainerRef,\n inject,\n input,\n} from '@angular/core';\nimport { Content, isComponent, isString, ViewRef } from '../views/types';\nimport { ViewService } from '../views/view';\nimport { CompRef } from '../views/comp-ref';\nimport { DynamicViewComponent } from './dynamic-view.component';\n\n@Directive({\n selector: '[dynamicView]',\n standalone: true,\n})\nexport class DynamicViewDirective implements OnInit, OnChanges, OnDestroy {\n readonly view = input<Content>(undefined, { alias: 'dynamicView' });\n readonly injector = input<Injector>(undefined, { alias: 'dynamicViewInjector' });\n readonly context = input<any>(undefined, { alias: 'dynamicViewContext' });\n readonly inputs = input<Record<any, any>>(undefined, { alias: 'dynamicViewInputs' });\n\n private viewRef: ViewRef;\n private defaultTpl: TemplateRef<any> = inject(TemplateRef);\n private vcr = inject(ViewContainerRef);\n private viewService = inject(ViewService);\n\n ngOnInit() {\n this.resolveContentType();\n }\n\n ngOnChanges(changes: SimpleChanges) {\n const viewChanged = changes.view && !changes.view.isFirstChange();\n const contextChanged = changes.context && !changes.context.isFirstChange();\n const inputsChanged = changes.inputs && !changes.inputs.isFirstChange();\n\n if (viewChanged) {\n this.resolveContentType();\n } else if (contextChanged) {\n this.viewRef.updateContext(this.context());\n } else if (isComponent(this.view()) && inputsChanged) {\n (this.viewRef as CompRef<any>).setInputs(this.inputs() || {});\n }\n }\n\n resolveContentType() {\n this.viewRef?.destroy();\n\n const view = this.view();\n const injector = this.injector();\n const context = this.context();\n\n if (isString(view)) {\n const viewRef = (this.viewRef = this.viewService.createComponent(DynamicViewComponent, {\n vcr: this.vcr,\n injector,\n }));\n\n viewRef.setInput('content', view).detectChanges();\n } else if (isComponent(view)) {\n this.viewRef = this.viewService.createComponent(view, {\n vcr: this.vcr,\n injector: injector ?? this.vcr.injector,\n context,\n });\n\n const inputs = this.inputs();\n if (inputs) {\n (this.viewRef as CompRef<any>).setInputs(inputs);\n }\n } else {\n this.viewRef = this.viewService.createView(view || this.defaultTpl, {\n vcr: this.vcr,\n injector: injector ?? this.vcr.injector,\n context,\n });\n }\n }\n\n ngOnDestroy() {\n this.viewRef?.destroy();\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}