@tanstack/angular-table 8.21.3 → 8.21.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/lib/esm2022/flex-render/flex-render-component-ref.mjs +8 -8
- package/build/lib/esm2022/flex-render/flex-render-component.mjs +1 -1
- package/build/lib/esm2022/flex-render/view.mjs +17 -1
- package/build/lib/esm2022/flex-render.mjs +7 -6
- package/build/lib/esm2022/index.mjs +2 -2
- package/build/lib/esm2022/proxy.mjs +1 -1
- package/build/lib/fesm2022/tanstack-angular-table.mjs +29 -12
- package/build/lib/fesm2022/tanstack-angular-table.mjs.map +1 -1
- package/build/lib/flex-render/view.d.ts +15 -3
- package/build/lib/flex-render.d.ts +2 -2
- package/package.json +9 -3
- package/src/flex-render/flex-render-component-ref.ts +16 -16
- package/src/flex-render/flex-render-component.ts +2 -2
- package/src/flex-render/view.ts +49 -7
- package/src/flex-render.ts +24 -17
- package/src/index.ts +3 -3
- package/src/proxy.ts +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tanstack-angular-table.mjs","sources":["../../../src/lazy-signal-initializer.ts","../../../src/proxy.ts","../../../src/flex-render/context.ts","../../../src/flex-render/flags.ts","../../../src/flex-render/flex-render-component.ts","../../../src/flex-render/flex-render-component-ref.ts","../../../src/flex-render/view.ts","../../../src/flex-render.ts","../../../src/index.ts","../../../src/tanstack-angular-table.ts"],"sourcesContent":["import { untracked } from '@angular/core'\n\n/**\n * Implementation from @tanstack/angular-query\n * {@link https://github.com/TanStack/query/blob/main/packages/angular-query-experimental/src/util/lazy-init/lazy-init.ts}\n */\nexport function lazyInit<T extends object>(initializer: () => T): T {\n let object: T | null = null\n\n const initializeObject = () => {\n if (!object) {\n object = untracked(() => initializer())\n }\n }\n\n queueMicrotask(() => initializeObject())\n\n const table = () => {}\n\n return new Proxy<T>(table as T, {\n apply(target: T, thisArg: any, argArray: any[]): any {\n initializeObject()\n if (typeof object === 'function') {\n return Reflect.apply(object, thisArg, argArray)\n }\n return Reflect.apply(target as any, thisArg, argArray)\n },\n get(_, prop, receiver) {\n initializeObject()\n return Reflect.get(object as T, prop, receiver)\n },\n has(_, prop) {\n initializeObject()\n return Reflect.has(object as T, prop)\n },\n ownKeys() {\n initializeObject()\n return Reflect.ownKeys(object as T)\n },\n getOwnPropertyDescriptor() {\n return {\n enumerable: true,\n configurable: true,\n }\n },\n })\n}\n","import { computed, type Signal, untracked } from '@angular/core'\nimport { type Table } from '@tanstack/table-core'\n\ntype TableSignal<T> = Table<T> & Signal<Table<T>>\n\nexport function proxifyTable<T>(\n tableSignal: Signal<Table<T>>\n): Table<T> & Signal<Table<T>> {\n const internalState = tableSignal as TableSignal<T>\n\n return new Proxy(internalState, {\n apply() {\n return tableSignal()\n },\n get(target, property: keyof Table<T>): any {\n if (target[property]) {\n return target[property]\n }\n const table = untracked(tableSignal)\n /**\n * Attempt to convert all accessors into computed ones,\n * excluding handlers as they do not retain any reactive value\n */\n if (\n property.startsWith('get') &&\n !property.endsWith('Handler')\n // e.g. getCoreRowModel, getSelectedRowModel etc.\n // We need that after a signal change even `rowModel` may mark the view as dirty.\n // This allows to always get the latest `getContext` value while using flexRender\n // && !property.endsWith('Model')\n ) {\n const maybeFn = table[property] as Function | never\n if (typeof maybeFn === 'function') {\n Object.defineProperty(target, property, {\n value: toComputed(tableSignal, maybeFn),\n configurable: true,\n enumerable: true,\n })\n return target[property]\n }\n }\n // @ts-expect-error\n return (target[property] = table[property])\n },\n has(_, prop: keyof Table<T>) {\n return !!untracked(tableSignal)[prop]\n },\n ownKeys() {\n return Reflect.ownKeys(untracked(tableSignal))\n },\n getOwnPropertyDescriptor() {\n return {\n enumerable: true,\n configurable: true,\n }\n },\n })\n}\n\n/**\n * Here we'll handle all type of accessors:\n * - 0 argument -> e.g. table.getCanNextPage())\n * - 0~1 arguments -> e.g. table.getIsSomeRowsPinned(position?)\n * - 1 required argument -> e.g. table.getColumn(columnId)\n * - 1+ argument -> e.g. table.getRow(id, searchAll?)\n *\n * Since we are not able to detect automatically the accessors parameters,\n * we'll wrap all accessors into a cached function wrapping a computed\n * that return it's value based on the given parameters\n */\nfunction toComputed<T>(signal: Signal<Table<T>>, fn: Function) {\n const hasArgs = fn.length > 0\n if (!hasArgs) {\n return computed(() => {\n void signal()\n return fn()\n })\n }\n\n const computedCache: Record<string, Signal<unknown>> = {}\n\n return (...argsArray: any[]) => {\n const serializedArgs = serializeArgs(...argsArray)\n if (computedCache.hasOwnProperty(serializedArgs)) {\n return computedCache[serializedArgs]?.()\n }\n const computedSignal = computed(() => {\n void signal()\n return fn(...argsArray)\n })\n\n computedCache[serializedArgs] = computedSignal\n\n return computedSignal()\n }\n}\n\nfunction serializeArgs(...args: any[]) {\n return JSON.stringify(args)\n}\n","import { inject, InjectionToken } from '@angular/core'\n\nexport const FlexRenderComponentProps = new InjectionToken<\n NonNullable<unknown>\n>('[@tanstack/angular-table] Flex render component context props')\n\nexport function injectFlexRenderContext<T extends NonNullable<unknown>>(): T {\n return inject<T>(FlexRenderComponentProps)\n}\n","/**\n * Flags used to manage and optimize the rendering lifecycle of content of the cell,\n * while using FlexRenderDirective.\n */\nexport enum FlexRenderFlags {\n /**\n * Indicates that the view is being created for the first time or will be cleared during the next update phase.\n * This is the initial state and will transition after the first ngDoCheck.\n */\n ViewFirstRender = 1 << 0,\n /**\n * Represents a state where the view is not dirty, meaning no changes require rendering updates.\n */\n Pristine = 1 << 1,\n /**\n * Indicates the `content` property has been modified or the view requires a complete re-render.\n * When this flag is enabled, the view will be cleared and recreated from scratch.\n */\n ContentChanged = 1 << 2,\n /**\n * Indicates that the `props` property reference has changed.\n * When this flag is enabled, the view context is updated based on the type of the content.\n *\n * For Component view, inputs will be updated and view will be marked as dirty.\n * For TemplateRef and primitive values, view will be marked as dirty\n */\n PropsReferenceChanged = 1 << 3,\n /**\n * Indicates that the current rendered view needs to be checked for changes.\n */\n DirtyCheck = 1 << 4,\n /**\n * Indicates that a signal within the `content(props)` result has changed\n */\n DirtySignal = 1 << 5,\n /**\n * Indicates that the first render effect has been checked at least one time.\n */\n RenderEffectChecked = 1 << 6,\n}\n","import {\n ComponentMirror,\n Injector,\n InputSignal,\n OutputEmitterRef,\n reflectComponentType,\n Type,\n} from '@angular/core'\n\ntype Inputs<T> = {\n [K in keyof T as T[K] extends InputSignal<infer R>\n ? K\n : never]?: T[K] extends InputSignal<infer R> ? R : never\n}\n\ntype Outputs<T> = {\n [K in keyof T as T[K] extends OutputEmitterRef<infer R>\n ? K\n : never]?: T[K] extends OutputEmitterRef<infer R>\n ? OutputEmitterRef<R>['emit']\n : never\n}\n\ntype OptionalKeys<T, K = keyof T> = K extends keyof T\n ? T[K] extends Required<T>[K]\n ? undefined extends T[K]\n ? K\n : never\n : K\n : never\n\ninterface FlexRenderRequiredOptions<\n TInputs extends Record<string, any>,\n TOutputs extends Record<string, any>,\n> {\n /**\n * Component instance inputs. They will be set via [componentRef.setInput API](https://angular.dev/api/core/ComponentRef#setInput)\n */\n inputs: TInputs\n /**\n * Component instance outputs.\n */\n outputs?: TOutputs\n /**\n * Optional {@link Injector} that will be used when rendering the component\n */\n injector?: Injector\n}\n\ninterface FlexRenderOptions<\n TInputs extends Record<string, any>,\n TOutputs extends Record<string, any>,\n> {\n /**\n * Component instance inputs. They will be set via [componentRef.setInput API](https://angular.dev/api/core/ComponentRef#setInput)\n */\n inputs?: TInputs\n /**\n * Component instance outputs.\n */\n outputs?: TOutputs\n /**\n * Optional {@link Injector} that will be used when rendering the component\n */\n injector?: Injector\n}\n\n/**\n * Helper function to create a [@link FlexRenderComponent] instance, with better type-safety.\n *\n * - options object must be passed when the given component instance contains at least one required signal input.\n * - options/inputs is typed with the given component inputs\n * - options/outputs is typed with the given component outputs\n */\nexport function flexRenderComponent<\n TComponent = any,\n TInputs extends Inputs<TComponent> = Inputs<TComponent>,\n TOutputs extends Outputs<TComponent> = Outputs<TComponent>,\n>(\n component: Type<TComponent>,\n ...options: OptionalKeys<TInputs> extends never\n ? [FlexRenderOptions<TInputs, TOutputs>?]\n : [FlexRenderRequiredOptions<TInputs, TOutputs>]\n) {\n const { inputs, injector, outputs } = options?.[0] ?? {}\n return new FlexRenderComponent(component, inputs, injector, outputs)\n}\n\n/**\n * Wrapper class for a component that will be used as content for {@link FlexRenderDirective}\n *\n * Prefer {@link flexRenderComponent} helper for better type-safety\n */\nexport class FlexRenderComponent<TComponent = any> {\n readonly mirror: ComponentMirror<TComponent>\n readonly allowedInputNames: string[] = []\n readonly allowedOutputNames: string[] = []\n\n constructor(\n readonly component: Type<TComponent>,\n readonly inputs?: Inputs<TComponent>,\n readonly injector?: Injector,\n readonly outputs?: Outputs<TComponent>\n ) {\n const mirror = reflectComponentType(component)\n if (!mirror) {\n throw new Error(\n `[@tanstack-table/angular] The provided symbol is not a component`\n )\n }\n this.mirror = mirror\n for (const input of this.mirror.inputs) {\n this.allowedInputNames.push(input.propName)\n }\n for (const output of this.mirror.outputs) {\n this.allowedOutputNames.push(output.propName)\n }\n }\n}\n","import {\n ChangeDetectorRef,\n ComponentRef,\n inject,\n Injectable,\n Injector,\n KeyValueDiffer,\n KeyValueDiffers,\n OutputEmitterRef,\n OutputRefSubscription,\n ViewContainerRef,\n} from '@angular/core'\nimport { FlexRenderComponent } from './flex-render-component'\n\n@Injectable()\nexport class FlexRenderComponentFactory {\n #viewContainerRef = inject(ViewContainerRef)\n\n createComponent<T>(\n flexRenderComponent: FlexRenderComponent<T>,\n componentInjector: Injector\n ): FlexRenderComponentRef<T> {\n const componentRef = this.#viewContainerRef.createComponent(\n flexRenderComponent.component,\n {\n injector: componentInjector,\n }\n )\n const view = new FlexRenderComponentRef(\n componentRef,\n flexRenderComponent,\n componentInjector\n )\n\n const { inputs, outputs } = flexRenderComponent\n\n if (inputs) view.setInputs(inputs)\n if (outputs) view.setOutputs(outputs)\n\n return view\n }\n}\n\nexport class FlexRenderComponentRef<T> {\n readonly #keyValueDiffersFactory: KeyValueDiffers\n #componentData: FlexRenderComponent<T>\n #inputValueDiffer: KeyValueDiffer<string, unknown>\n\n readonly #outputRegistry: FlexRenderComponentOutputManager\n\n constructor(\n readonly componentRef: ComponentRef<T>,\n componentData: FlexRenderComponent<T>,\n readonly componentInjector: Injector\n ) {\n this.#componentData = componentData\n this.#keyValueDiffersFactory = componentInjector.get(KeyValueDiffers)\n\n this.#outputRegistry = new FlexRenderComponentOutputManager(\n this.#keyValueDiffersFactory,\n this.outputs\n )\n\n this.#inputValueDiffer = this.#keyValueDiffersFactory\n .find(this.inputs)\n .create()\n this.#inputValueDiffer.diff(this.inputs)\n\n this.componentRef.onDestroy(() => this.#outputRegistry.unsubscribeAll())\n }\n\n get component() {\n return this.#componentData.component\n }\n\n get inputs() {\n return this.#componentData.inputs ?? {}\n }\n\n get outputs() {\n return this.#componentData.outputs ?? {}\n }\n\n /**\n * Get component input and output diff by the given item\n */\n diff(item: FlexRenderComponent<T>) {\n return {\n inputDiff: this.#inputValueDiffer.diff(item.inputs ?? {}),\n outputDiff: this.#outputRegistry.diff(item.outputs ?? {}),\n }\n }\n /**\n *\n * @param compare Whether the current ref component instance is the same as the given one\n */\n eqType(compare: FlexRenderComponent<T>): boolean {\n return compare.component === this.component\n }\n\n /**\n * Tries to update current component refs input by the new given content component.\n */\n update(content: FlexRenderComponent<T>) {\n const eq = this.eqType(content)\n if (!eq) return\n const { inputDiff, outputDiff } = this.diff(content)\n if (inputDiff) {\n inputDiff.forEachAddedItem(item =>\n this.setInput(item.key, item.currentValue)\n )\n inputDiff.forEachChangedItem(item =>\n this.setInput(item.key, item.currentValue)\n )\n inputDiff.forEachRemovedItem(item => this.setInput(item.key, undefined))\n }\n if (outputDiff) {\n outputDiff.forEachAddedItem(item => {\n this.setOutput(item.key, item.currentValue)\n })\n outputDiff.forEachChangedItem(item => {\n if (item.currentValue) {\n this.#outputRegistry.setListener(item.key, item.currentValue)\n } else {\n this.#outputRegistry.unsubscribe(item.key)\n }\n })\n outputDiff.forEachRemovedItem(item => {\n this.#outputRegistry.unsubscribe(item.key)\n })\n }\n\n this.#componentData = content\n }\n\n markAsDirty(): void {\n this.componentRef.injector.get(ChangeDetectorRef).markForCheck()\n }\n\n setInputs(inputs: Record<string, unknown>) {\n for (const prop in inputs) {\n this.setInput(prop, inputs[prop])\n }\n }\n\n setInput(key: string, value: unknown) {\n if (this.#componentData.allowedInputNames.includes(key)) {\n this.componentRef.setInput(key, value)\n }\n }\n\n setOutputs(\n outputs: Record<\n string,\n OutputEmitterRef<unknown>['emit'] | null | undefined\n >\n ) {\n this.#outputRegistry.unsubscribeAll()\n for (const prop in outputs) {\n this.setOutput(prop, outputs[prop])\n }\n }\n\n setOutput(\n outputName: string,\n emit: OutputEmitterRef<unknown>['emit'] | undefined | null\n ): void {\n if (!this.#componentData.allowedOutputNames.includes(outputName)) return\n if (!emit) {\n this.#outputRegistry.unsubscribe(outputName)\n return\n }\n\n const hasListener = this.#outputRegistry.hasListener(outputName)\n this.#outputRegistry.setListener(outputName, emit)\n\n if (hasListener) {\n return\n }\n\n const instance = this.componentRef.instance\n const output = instance[outputName as keyof typeof instance]\n if (output && output instanceof OutputEmitterRef) {\n output.subscribe(value => {\n this.#outputRegistry.getListener(outputName)?.(value)\n })\n }\n }\n}\n\nclass FlexRenderComponentOutputManager {\n readonly #outputSubscribers: Record<string, OutputRefSubscription> = {}\n readonly #outputListeners: Record<string, (...args: any[]) => void> = {}\n\n readonly #valueDiffer: KeyValueDiffer<\n string,\n undefined | null | OutputEmitterRef<unknown>['emit']\n >\n\n constructor(keyValueDiffers: KeyValueDiffers, initialOutputs: any) {\n this.#valueDiffer = keyValueDiffers.find(initialOutputs).create()\n if (initialOutputs) {\n this.#valueDiffer.diff(initialOutputs)\n }\n }\n\n hasListener(outputName: string) {\n return outputName in this.#outputListeners\n }\n\n setListener(outputName: string, callback: (...args: any[]) => void) {\n this.#outputListeners[outputName] = callback\n }\n\n getListener(outputName: string) {\n return this.#outputListeners[outputName]\n }\n\n unsubscribeAll(): void {\n for (const prop in this.#outputSubscribers) {\n this.unsubscribe(prop)\n }\n }\n\n unsubscribe(outputName: string) {\n if (outputName in this.#outputSubscribers) {\n this.#outputSubscribers[outputName]?.unsubscribe()\n delete this.#outputSubscribers[outputName]\n delete this.#outputListeners[outputName]\n }\n }\n\n diff(outputs: Record<string, OutputEmitterRef<unknown>['emit'] | undefined>) {\n return this.#valueDiffer.diff(outputs ?? {})\n }\n}\n","import { FlexRenderComponentRef } from './flex-render-component-ref'\nimport { EmbeddedViewRef, TemplateRef, Type } from '@angular/core'\nimport type { FlexRenderContent } from '../flex-render'\nimport { FlexRenderComponent } from './flex-render-component'\n\nexport type FlexRenderTypedContent =\n | { kind: 'null' }\n | {\n kind: 'primitive'\n content: string | number | Record<string, any>\n }\n | { kind: 'flexRenderComponent'; content: FlexRenderComponent<unknown> }\n | { kind: 'templateRef'; content: TemplateRef<unknown> }\n | { kind: 'component'; content: Type<unknown> }\n\nexport function mapToFlexRenderTypedContent(\n content: FlexRenderContent<any>\n): FlexRenderTypedContent {\n if (content === null || content === undefined) {\n return { kind: 'null' }\n }\n if (typeof content === 'string' || typeof content === 'number') {\n return { kind: 'primitive', content }\n }\n if (content instanceof FlexRenderComponent) {\n return { kind: 'flexRenderComponent', content }\n } else if (content instanceof TemplateRef) {\n return { kind: 'templateRef', content }\n } else if (content instanceof Type) {\n return { kind: 'component', content }\n } else {\n return { kind: 'primitive', content }\n }\n}\n\nexport abstract class FlexRenderView<\n TView extends FlexRenderComponentRef<any> | EmbeddedViewRef<unknown> | null,\n> {\n readonly view: TView\n #previousContent: FlexRenderTypedContent | undefined\n #content: FlexRenderTypedContent\n\n protected constructor(\n initialContent: Exclude<FlexRenderTypedContent, { kind: 'null' }>,\n view: TView\n ) {\n this.#content = initialContent\n this.view = view\n }\n\n get previousContent(): FlexRenderTypedContent {\n return this.#previousContent ?? { kind: 'null' }\n }\n\n get content() {\n return this.#content\n }\n\n set content(content: FlexRenderTypedContent) {\n this.#previousContent = this.#content\n this.#content = content\n }\n\n abstract updateProps(props: Record<string, any>): void\n\n abstract dirtyCheck(): void\n\n abstract onDestroy(callback: Function): void\n}\n\nexport class FlexRenderTemplateView extends FlexRenderView<\n EmbeddedViewRef<unknown>\n> {\n constructor(\n initialContent: Extract<\n FlexRenderTypedContent,\n { kind: 'primitive' | 'templateRef' }\n >,\n view: EmbeddedViewRef<unknown>\n ) {\n super(initialContent, view)\n }\n\n override updateProps(props: Record<string, any>) {\n this.view.markForCheck()\n }\n\n override dirtyCheck() {\n // Basically a no-op. When the view is created via EmbeddedViewRef, we don't need to do any manual update\n // since this type of content has a proxy as a context, then every time the root component is checked for changes,\n // the property getter will be re-evaluated.\n //\n // If in a future we need to manually mark the view as dirty, just uncomment next line\n // this.view.markForCheck()\n }\n\n override onDestroy(callback: Function) {\n this.view.onDestroy(callback)\n }\n}\n\nexport class FlexRenderComponentView extends FlexRenderView<\n FlexRenderComponentRef<unknown>\n> {\n constructor(\n initialContent: Extract<\n FlexRenderTypedContent,\n { kind: 'component' | 'flexRenderComponent' }\n >,\n view: FlexRenderComponentRef<unknown>\n ) {\n super(initialContent, view)\n }\n\n override updateProps(props: Record<string, any>) {\n switch (this.content.kind) {\n case 'component': {\n this.view.setInputs(props)\n break\n }\n case 'flexRenderComponent': {\n // No-op. When FlexRenderFlags.PropsReferenceChanged is set,\n // FlexRenderComponent will be updated into `dirtyCheck`.\n break\n }\n }\n }\n\n override dirtyCheck() {\n switch (this.content.kind) {\n case 'component': {\n // Component context is currently valuated with the cell context. Since it's reference\n // shouldn't change, we force mark the component as dirty in order to re-evaluate function invocation in view.\n // NOTE: this should behave like having a component with ChangeDetectionStrategy.Default\n this.view.markAsDirty()\n break\n }\n case 'flexRenderComponent': {\n // Given context instance will always have a different reference than the previous one,\n // so instead of recreating the entire view, we will only update the current view\n if (this.view.eqType(this.content.content)) {\n this.view.update(this.content.content)\n }\n this.view.markAsDirty()\n break\n }\n }\n }\n\n override onDestroy(callback: Function) {\n this.view.componentRef.onDestroy(callback)\n }\n}\n","import {\n ChangeDetectorRef,\n Directive,\n DoCheck,\n effect,\n type EffectRef,\n Inject,\n inject,\n Injector,\n Input,\n OnChanges,\n runInInjectionContext,\n SimpleChanges,\n TemplateRef,\n Type,\n ViewContainerRef,\n} from '@angular/core'\nimport { FlexRenderComponentProps } from './flex-render/context'\nimport { FlexRenderFlags } from './flex-render/flags'\nimport {\n flexRenderComponent,\n FlexRenderComponent,\n} from './flex-render/flex-render-component'\nimport { FlexRenderComponentFactory } from './flex-render/flex-render-component-ref'\nimport {\n FlexRenderComponentView,\n FlexRenderTemplateView,\n type FlexRenderTypedContent,\n FlexRenderView,\n mapToFlexRenderTypedContent,\n} from './flex-render/view'\nimport { memo } from '@tanstack/table-core'\n\nexport {\n injectFlexRenderContext,\n type FlexRenderComponentProps,\n} from './flex-render/context'\n\nexport type FlexRenderContent<TProps extends NonNullable<unknown>> =\n | string\n | number\n | Type<TProps>\n | FlexRenderComponent<TProps>\n | TemplateRef<{ $implicit: TProps }>\n | null\n | Record<any, any>\n | undefined\n\n@Directive({\n selector: '[flexRender]',\n standalone: true,\n providers: [FlexRenderComponentFactory],\n})\nexport class FlexRenderDirective<TProps extends NonNullable<unknown>>\n implements OnChanges, DoCheck\n{\n readonly #flexRenderComponentFactory = inject(FlexRenderComponentFactory)\n readonly #changeDetectorRef = inject(ChangeDetectorRef)\n\n @Input({ required: true, alias: 'flexRender' })\n content:\n | number\n | string\n | ((props: TProps) => FlexRenderContent<TProps>)\n | null\n | undefined = undefined\n\n @Input({ required: true, alias: 'flexRenderProps' })\n props: TProps = {} as TProps\n\n @Input({ required: false, alias: 'flexRenderInjector' })\n injector: Injector = inject(Injector)\n\n renderFlags = FlexRenderFlags.ViewFirstRender\n renderView: FlexRenderView<any> | null = null\n\n readonly #latestContent = () => {\n const { content, props } = this\n return typeof content !== 'function'\n ? content\n : runInInjectionContext(this.injector, () => content(props))\n }\n\n #getContentValue = memo(\n () => [this.#latestContent(), this.props, this.content],\n latestContent => {\n return mapToFlexRenderTypedContent(latestContent)\n },\n { key: 'flexRenderContentValue', debug: () => false }\n )\n\n constructor(\n @Inject(ViewContainerRef)\n private readonly viewContainerRef: ViewContainerRef,\n @Inject(TemplateRef)\n private readonly templateRef: TemplateRef<any>\n ) {}\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes['props']) {\n this.renderFlags |= FlexRenderFlags.PropsReferenceChanged\n }\n if (changes['content']) {\n this.renderFlags |=\n FlexRenderFlags.ContentChanged | FlexRenderFlags.ViewFirstRender\n this.update()\n }\n }\n\n ngDoCheck(): void {\n if (this.renderFlags & FlexRenderFlags.ViewFirstRender) {\n // On the initial render, the view is created during the `ngOnChanges` hook.\n // Since `ngDoCheck` is called immediately afterward, there's no need to check for changes in this phase.\n this.renderFlags &= ~FlexRenderFlags.ViewFirstRender\n return\n }\n\n this.renderFlags |= FlexRenderFlags.DirtyCheck\n\n const latestContent = this.#getContentValue()\n if (latestContent.kind === 'null' || !this.renderView) {\n this.renderFlags |= FlexRenderFlags.ContentChanged\n } else {\n this.renderView.content = latestContent\n const { kind: previousKind } = this.renderView.previousContent\n if (latestContent.kind !== previousKind) {\n this.renderFlags |= FlexRenderFlags.ContentChanged\n }\n }\n this.update()\n }\n\n update() {\n if (\n this.renderFlags &\n (FlexRenderFlags.ContentChanged | FlexRenderFlags.ViewFirstRender)\n ) {\n this.render()\n return\n }\n if (this.renderFlags & FlexRenderFlags.PropsReferenceChanged) {\n if (this.renderView) this.renderView.updateProps(this.props)\n this.renderFlags &= ~FlexRenderFlags.PropsReferenceChanged\n }\n if (\n this.renderFlags &\n (FlexRenderFlags.DirtyCheck | FlexRenderFlags.DirtySignal)\n ) {\n if (this.renderView) this.renderView.dirtyCheck()\n this.renderFlags &= ~(\n FlexRenderFlags.DirtyCheck | FlexRenderFlags.DirtySignal\n )\n }\n }\n\n #currentEffectRef: EffectRef | null = null\n\n render() {\n if (this.#shouldRecreateEntireView() && this.#currentEffectRef) {\n this.#currentEffectRef.destroy()\n this.#currentEffectRef = null\n this.renderFlags &= ~FlexRenderFlags.RenderEffectChecked\n }\n\n this.viewContainerRef.clear()\n this.renderFlags =\n FlexRenderFlags.Pristine |\n (this.renderFlags & FlexRenderFlags.ViewFirstRender) |\n (this.renderFlags & FlexRenderFlags.RenderEffectChecked)\n\n const resolvedContent = this.#getContentValue()\n if (resolvedContent.kind === 'null') {\n this.renderView = null\n } else {\n this.renderView = this.#renderViewByContent(resolvedContent)\n }\n\n // If the content is a function `content(props)`, we initialize an effect\n // in order to react to changes if the given definition use signals.\n if (!this.#currentEffectRef && typeof this.content === 'function') {\n this.#currentEffectRef = effect(\n () => {\n this.#latestContent()\n if (!(this.renderFlags & FlexRenderFlags.RenderEffectChecked)) {\n this.renderFlags |= FlexRenderFlags.RenderEffectChecked\n return\n }\n this.renderFlags |= FlexRenderFlags.DirtySignal\n // This will mark the view as changed,\n // so we'll try to check for updates into ngDoCheck\n this.#changeDetectorRef.markForCheck()\n },\n { injector: this.viewContainerRef.injector }\n )\n }\n }\n\n #shouldRecreateEntireView() {\n return (\n this.renderFlags &\n FlexRenderFlags.ContentChanged &\n FlexRenderFlags.ViewFirstRender\n )\n }\n\n #renderViewByContent(\n content: FlexRenderTypedContent\n ): FlexRenderView<any> | null {\n if (content.kind === 'primitive') {\n return this.#renderStringContent(content)\n } else if (content.kind === 'templateRef') {\n return this.#renderTemplateRefContent(content)\n } else if (content.kind === 'flexRenderComponent') {\n return this.#renderComponent(content)\n } else if (content.kind === 'component') {\n return this.#renderCustomComponent(content)\n } else {\n return null\n }\n }\n\n #renderStringContent(\n template: Extract<FlexRenderTypedContent, { kind: 'primitive' }>\n ): FlexRenderTemplateView {\n const context = () => {\n return typeof this.content === 'string' ||\n typeof this.content === 'number'\n ? this.content\n : this.content?.(this.props)\n }\n const ref = this.viewContainerRef.createEmbeddedView(this.templateRef, {\n get $implicit() {\n return context()\n },\n })\n return new FlexRenderTemplateView(template, ref)\n }\n\n #renderTemplateRefContent(\n template: Extract<FlexRenderTypedContent, { kind: 'templateRef' }>\n ): FlexRenderTemplateView {\n const latestContext = () => this.props\n const view = this.viewContainerRef.createEmbeddedView(template.content, {\n get $implicit() {\n return latestContext()\n },\n })\n return new FlexRenderTemplateView(template, view)\n }\n\n #renderComponent(\n flexRenderComponent: Extract<\n FlexRenderTypedContent,\n { kind: 'flexRenderComponent' }\n >\n ): FlexRenderComponentView {\n const { inputs, outputs, injector } = flexRenderComponent.content\n\n const getContext = () => this.props\n const proxy = new Proxy(this.props, {\n get: (_, key) => getContext()[key as keyof typeof _],\n })\n const componentInjector = Injector.create({\n parent: injector ?? this.injector,\n providers: [{ provide: FlexRenderComponentProps, useValue: proxy }],\n })\n const view = this.#flexRenderComponentFactory.createComponent(\n flexRenderComponent.content,\n componentInjector\n )\n return new FlexRenderComponentView(flexRenderComponent, view)\n }\n\n #renderCustomComponent(\n component: Extract<FlexRenderTypedContent, { kind: 'component' }>\n ): FlexRenderComponentView {\n const view = this.#flexRenderComponentFactory.createComponent(\n flexRenderComponent(component.content, {\n inputs: this.props,\n injector: this.injector,\n }),\n this.injector\n )\n return new FlexRenderComponentView(component, view)\n }\n}\n","import { computed, type Signal, signal } from '@angular/core'\nimport {\n RowData,\n TableOptions,\n TableOptionsResolved,\n TableState,\n createTable,\n type Table,\n} from '@tanstack/table-core'\nimport { lazyInit } from './lazy-signal-initializer'\nimport { proxifyTable } from './proxy'\n\nexport * from '@tanstack/table-core'\n\nexport {\n type FlexRenderContent,\n FlexRenderDirective,\n FlexRenderDirective as FlexRender,\n injectFlexRenderContext,\n type FlexRenderComponentProps,\n} from './flex-render'\n\nexport {\n FlexRenderComponent,\n flexRenderComponent,\n} from './flex-render/flex-render-component'\n\nexport function createAngularTable<TData extends RowData>(\n options: () => TableOptions<TData>\n): Table<TData> & Signal<Table<TData>> {\n return lazyInit(() => {\n const resolvedOptions = {\n state: {},\n onStateChange: () => {},\n renderFallbackValue: null,\n ...options(),\n }\n\n const table = createTable(resolvedOptions)\n\n // By default, manage table state here using the table's initial state\n const state = signal<TableState>(table.initialState)\n\n // Compose table options using computed.\n // This is to allow `tableSignal` to listen and set table option\n const updatedOptions = computed<TableOptionsResolved<TData>>(() => {\n // listen to table state changed\n const tableState = state()\n // listen to input options changed\n const tableOptions = options()\n return {\n ...table.options,\n ...resolvedOptions,\n ...tableOptions,\n state: { ...tableState, ...tableOptions.state },\n onStateChange: updater => {\n const value =\n updater instanceof Function ? updater(tableState) : updater\n state.set(value)\n resolvedOptions.onStateChange?.(updater)\n },\n }\n })\n\n // convert table instance to signal for proxify to listen to any table state and options changes\n const tableSignal = computed(\n () => {\n table.setOptions(updatedOptions())\n return table\n },\n {\n equal: () => false,\n }\n )\n\n // proxify Table instance to provide ability for consumer to listen to any table state changes\n return proxifyTable(tableSignal)\n })\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tanstack-angular-table.mjs","sources":["../../../src/lazy-signal-initializer.ts","../../../src/proxy.ts","../../../src/flex-render/context.ts","../../../src/flex-render/flags.ts","../../../src/flex-render/flex-render-component.ts","../../../src/flex-render/flex-render-component-ref.ts","../../../src/flex-render/view.ts","../../../src/flex-render.ts","../../../src/index.ts","../../../src/tanstack-angular-table.ts"],"sourcesContent":["import { untracked } from '@angular/core'\n\n/**\n * Implementation from @tanstack/angular-query\n * {@link https://github.com/TanStack/query/blob/main/packages/angular-query-experimental/src/util/lazy-init/lazy-init.ts}\n */\nexport function lazyInit<T extends object>(initializer: () => T): T {\n let object: T | null = null\n\n const initializeObject = () => {\n if (!object) {\n object = untracked(() => initializer())\n }\n }\n\n queueMicrotask(() => initializeObject())\n\n const table = () => {}\n\n return new Proxy<T>(table as T, {\n apply(target: T, thisArg: any, argArray: any[]): any {\n initializeObject()\n if (typeof object === 'function') {\n return Reflect.apply(object, thisArg, argArray)\n }\n return Reflect.apply(target as any, thisArg, argArray)\n },\n get(_, prop, receiver) {\n initializeObject()\n return Reflect.get(object as T, prop, receiver)\n },\n has(_, prop) {\n initializeObject()\n return Reflect.has(object as T, prop)\n },\n ownKeys() {\n initializeObject()\n return Reflect.ownKeys(object as T)\n },\n getOwnPropertyDescriptor() {\n return {\n enumerable: true,\n configurable: true,\n }\n },\n })\n}\n","import { computed, type Signal, untracked } from '@angular/core'\nimport { type Table } from '@tanstack/table-core'\n\ntype TableSignal<T> = Table<T> & Signal<Table<T>>\n\nexport function proxifyTable<T>(\n tableSignal: Signal<Table<T>>,\n): Table<T> & Signal<Table<T>> {\n const internalState = tableSignal as TableSignal<T>\n\n return new Proxy(internalState, {\n apply() {\n return tableSignal()\n },\n get(target, property: keyof Table<T>): any {\n if (target[property]) {\n return target[property]\n }\n const table = untracked(tableSignal)\n /**\n * Attempt to convert all accessors into computed ones,\n * excluding handlers as they do not retain any reactive value\n */\n if (\n property.startsWith('get') &&\n !property.endsWith('Handler')\n // e.g. getCoreRowModel, getSelectedRowModel etc.\n // We need that after a signal change even `rowModel` may mark the view as dirty.\n // This allows to always get the latest `getContext` value while using flexRender\n // && !property.endsWith('Model')\n ) {\n const maybeFn = table[property] as Function | never\n if (typeof maybeFn === 'function') {\n Object.defineProperty(target, property, {\n value: toComputed(tableSignal, maybeFn),\n configurable: true,\n enumerable: true,\n })\n return target[property]\n }\n }\n // @ts-expect-error\n return (target[property] = table[property])\n },\n has(_, prop: keyof Table<T>) {\n return !!untracked(tableSignal)[prop]\n },\n ownKeys() {\n return Reflect.ownKeys(untracked(tableSignal))\n },\n getOwnPropertyDescriptor() {\n return {\n enumerable: true,\n configurable: true,\n }\n },\n })\n}\n\n/**\n * Here we'll handle all type of accessors:\n * - 0 argument -> e.g. table.getCanNextPage())\n * - 0~1 arguments -> e.g. table.getIsSomeRowsPinned(position?)\n * - 1 required argument -> e.g. table.getColumn(columnId)\n * - 1+ argument -> e.g. table.getRow(id, searchAll?)\n *\n * Since we are not able to detect automatically the accessors parameters,\n * we'll wrap all accessors into a cached function wrapping a computed\n * that return it's value based on the given parameters\n */\nfunction toComputed<T>(signal: Signal<Table<T>>, fn: Function) {\n const hasArgs = fn.length > 0\n if (!hasArgs) {\n return computed(() => {\n void signal()\n return fn()\n })\n }\n\n const computedCache: Record<string, Signal<unknown>> = {}\n\n return (...argsArray: any[]) => {\n const serializedArgs = serializeArgs(...argsArray)\n if (computedCache.hasOwnProperty(serializedArgs)) {\n return computedCache[serializedArgs]?.()\n }\n const computedSignal = computed(() => {\n void signal()\n return fn(...argsArray)\n })\n\n computedCache[serializedArgs] = computedSignal\n\n return computedSignal()\n }\n}\n\nfunction serializeArgs(...args: any[]) {\n return JSON.stringify(args)\n}\n","import { inject, InjectionToken } from '@angular/core'\n\nexport const FlexRenderComponentProps = new InjectionToken<\n NonNullable<unknown>\n>('[@tanstack/angular-table] Flex render component context props')\n\nexport function injectFlexRenderContext<T extends NonNullable<unknown>>(): T {\n return inject<T>(FlexRenderComponentProps)\n}\n","/**\n * Flags used to manage and optimize the rendering lifecycle of content of the cell,\n * while using FlexRenderDirective.\n */\nexport enum FlexRenderFlags {\n /**\n * Indicates that the view is being created for the first time or will be cleared during the next update phase.\n * This is the initial state and will transition after the first ngDoCheck.\n */\n ViewFirstRender = 1 << 0,\n /**\n * Represents a state where the view is not dirty, meaning no changes require rendering updates.\n */\n Pristine = 1 << 1,\n /**\n * Indicates the `content` property has been modified or the view requires a complete re-render.\n * When this flag is enabled, the view will be cleared and recreated from scratch.\n */\n ContentChanged = 1 << 2,\n /**\n * Indicates that the `props` property reference has changed.\n * When this flag is enabled, the view context is updated based on the type of the content.\n *\n * For Component view, inputs will be updated and view will be marked as dirty.\n * For TemplateRef and primitive values, view will be marked as dirty\n */\n PropsReferenceChanged = 1 << 3,\n /**\n * Indicates that the current rendered view needs to be checked for changes.\n */\n DirtyCheck = 1 << 4,\n /**\n * Indicates that a signal within the `content(props)` result has changed\n */\n DirtySignal = 1 << 5,\n /**\n * Indicates that the first render effect has been checked at least one time.\n */\n RenderEffectChecked = 1 << 6,\n}\n","import {\n ComponentMirror,\n Injector,\n InputSignal,\n OutputEmitterRef,\n reflectComponentType,\n Type,\n} from '@angular/core'\n\ntype Inputs<T> = {\n [K in keyof T as T[K] extends InputSignal<infer R>\n ? K\n : never]?: T[K] extends InputSignal<infer R> ? R : never\n}\n\ntype Outputs<T> = {\n [K in keyof T as T[K] extends OutputEmitterRef<infer R>\n ? K\n : never]?: T[K] extends OutputEmitterRef<infer R>\n ? OutputEmitterRef<R>['emit']\n : never\n}\n\ntype OptionalKeys<T, K = keyof T> = K extends keyof T\n ? T[K] extends Required<T>[K]\n ? undefined extends T[K]\n ? K\n : never\n : K\n : never\n\ninterface FlexRenderRequiredOptions<\n TInputs extends Record<string, any>,\n TOutputs extends Record<string, any>,\n> {\n /**\n * Component instance inputs. They will be set via [componentRef.setInput API](https://angular.dev/api/core/ComponentRef#setInput)\n */\n inputs: TInputs\n /**\n * Component instance outputs.\n */\n outputs?: TOutputs\n /**\n * Optional {@link Injector} that will be used when rendering the component\n */\n injector?: Injector\n}\n\ninterface FlexRenderOptions<\n TInputs extends Record<string, any>,\n TOutputs extends Record<string, any>,\n> {\n /**\n * Component instance inputs. They will be set via [componentRef.setInput API](https://angular.dev/api/core/ComponentRef#setInput)\n */\n inputs?: TInputs\n /**\n * Component instance outputs.\n */\n outputs?: TOutputs\n /**\n * Optional {@link Injector} that will be used when rendering the component\n */\n injector?: Injector\n}\n\n/**\n * Helper function to create a [@link FlexRenderComponent] instance, with better type-safety.\n *\n * - options object must be passed when the given component instance contains at least one required signal input.\n * - options/inputs is typed with the given component inputs\n * - options/outputs is typed with the given component outputs\n */\nexport function flexRenderComponent<\n TComponent = any,\n TInputs extends Inputs<TComponent> = Inputs<TComponent>,\n TOutputs extends Outputs<TComponent> = Outputs<TComponent>,\n>(\n component: Type<TComponent>,\n ...options: OptionalKeys<TInputs> extends never\n ? [FlexRenderOptions<TInputs, TOutputs>?]\n : [FlexRenderRequiredOptions<TInputs, TOutputs>]\n) {\n const { inputs, injector, outputs } = options?.[0] ?? {}\n return new FlexRenderComponent(component, inputs, injector, outputs)\n}\n\n/**\n * Wrapper class for a component that will be used as content for {@link FlexRenderDirective}\n *\n * Prefer {@link flexRenderComponent} helper for better type-safety\n */\nexport class FlexRenderComponent<TComponent = any> {\n readonly mirror: ComponentMirror<TComponent>\n readonly allowedInputNames: string[] = []\n readonly allowedOutputNames: string[] = []\n\n constructor(\n readonly component: Type<TComponent>,\n readonly inputs?: Inputs<TComponent>,\n readonly injector?: Injector,\n readonly outputs?: Outputs<TComponent>,\n ) {\n const mirror = reflectComponentType(component)\n if (!mirror) {\n throw new Error(\n `[@tanstack-table/angular] The provided symbol is not a component`,\n )\n }\n this.mirror = mirror\n for (const input of this.mirror.inputs) {\n this.allowedInputNames.push(input.propName)\n }\n for (const output of this.mirror.outputs) {\n this.allowedOutputNames.push(output.propName)\n }\n }\n}\n","import {\n ChangeDetectorRef,\n ComponentRef,\n inject,\n Injectable,\n Injector,\n KeyValueDiffer,\n KeyValueDiffers,\n OutputEmitterRef,\n OutputRefSubscription,\n ViewContainerRef,\n} from '@angular/core'\nimport { FlexRenderComponent } from './flex-render-component'\n\n@Injectable()\nexport class FlexRenderComponentFactory {\n #viewContainerRef = inject(ViewContainerRef)\n\n createComponent<T>(\n flexRenderComponent: FlexRenderComponent<T>,\n componentInjector: Injector,\n ): FlexRenderComponentRef<T> {\n const componentRef = this.#viewContainerRef.createComponent(\n flexRenderComponent.component,\n {\n injector: componentInjector,\n },\n )\n const view = new FlexRenderComponentRef(\n componentRef,\n flexRenderComponent,\n componentInjector,\n )\n\n const { inputs, outputs } = flexRenderComponent\n\n if (inputs) view.setInputs(inputs)\n if (outputs) view.setOutputs(outputs)\n\n return view\n }\n}\n\nexport class FlexRenderComponentRef<T> {\n readonly #keyValueDiffersFactory: KeyValueDiffers\n #componentData: FlexRenderComponent<T>\n #inputValueDiffer: KeyValueDiffer<string, unknown>\n\n readonly #outputRegistry: FlexRenderComponentOutputManager\n\n constructor(\n readonly componentRef: ComponentRef<T>,\n componentData: FlexRenderComponent<T>,\n readonly componentInjector: Injector,\n ) {\n this.#componentData = componentData\n this.#keyValueDiffersFactory = componentInjector.get(KeyValueDiffers)\n\n this.#outputRegistry = new FlexRenderComponentOutputManager(\n this.#keyValueDiffersFactory,\n this.outputs,\n )\n\n this.#inputValueDiffer = this.#keyValueDiffersFactory\n .find(this.inputs)\n .create()\n this.#inputValueDiffer.diff(this.inputs)\n\n this.componentRef.onDestroy(() => this.#outputRegistry.unsubscribeAll())\n }\n\n get component() {\n return this.#componentData.component\n }\n\n get inputs() {\n return this.#componentData.inputs ?? {}\n }\n\n get outputs() {\n return this.#componentData.outputs ?? {}\n }\n\n /**\n * Get component input and output diff by the given item\n */\n diff(item: FlexRenderComponent<T>) {\n return {\n inputDiff: this.#inputValueDiffer.diff(item.inputs ?? {}),\n outputDiff: this.#outputRegistry.diff(item.outputs ?? {}),\n }\n }\n /**\n *\n * @param compare Whether the current ref component instance is the same as the given one\n */\n eqType(compare: FlexRenderComponent<T>): boolean {\n return compare.component === this.component\n }\n\n /**\n * Tries to update current component refs input by the new given content component.\n */\n update(content: FlexRenderComponent<T>) {\n const eq = this.eqType(content)\n if (!eq) return\n const { inputDiff, outputDiff } = this.diff(content)\n if (inputDiff) {\n inputDiff.forEachAddedItem((item) =>\n this.setInput(item.key, item.currentValue),\n )\n inputDiff.forEachChangedItem((item) =>\n this.setInput(item.key, item.currentValue),\n )\n inputDiff.forEachRemovedItem((item) => this.setInput(item.key, undefined))\n }\n if (outputDiff) {\n outputDiff.forEachAddedItem((item) => {\n this.setOutput(item.key, item.currentValue)\n })\n outputDiff.forEachChangedItem((item) => {\n if (item.currentValue) {\n this.#outputRegistry.setListener(item.key, item.currentValue)\n } else {\n this.#outputRegistry.unsubscribe(item.key)\n }\n })\n outputDiff.forEachRemovedItem((item) => {\n this.#outputRegistry.unsubscribe(item.key)\n })\n }\n\n this.#componentData = content\n }\n\n markAsDirty(): void {\n this.componentRef.injector.get(ChangeDetectorRef).markForCheck()\n }\n\n setInputs(inputs: Record<string, unknown>) {\n for (const prop in inputs) {\n this.setInput(prop, inputs[prop])\n }\n }\n\n setInput(key: string, value: unknown) {\n if (this.#componentData.allowedInputNames.includes(key)) {\n this.componentRef.setInput(key, value)\n }\n }\n\n setOutputs(\n outputs: Record<\n string,\n OutputEmitterRef<unknown>['emit'] | null | undefined\n >,\n ) {\n this.#outputRegistry.unsubscribeAll()\n for (const prop in outputs) {\n this.setOutput(prop, outputs[prop])\n }\n }\n\n setOutput(\n outputName: string,\n emit: OutputEmitterRef<unknown>['emit'] | undefined | null,\n ): void {\n if (!this.#componentData.allowedOutputNames.includes(outputName)) return\n if (!emit) {\n this.#outputRegistry.unsubscribe(outputName)\n return\n }\n\n const hasListener = this.#outputRegistry.hasListener(outputName)\n this.#outputRegistry.setListener(outputName, emit)\n\n if (hasListener) {\n return\n }\n\n const instance = this.componentRef.instance\n const output = instance[outputName as keyof typeof instance]\n if (output && output instanceof OutputEmitterRef) {\n output.subscribe((value) => {\n this.#outputRegistry.getListener(outputName)?.(value)\n })\n }\n }\n}\n\nclass FlexRenderComponentOutputManager {\n readonly #outputSubscribers: Record<string, OutputRefSubscription> = {}\n readonly #outputListeners: Record<string, (...args: any[]) => void> = {}\n\n readonly #valueDiffer: KeyValueDiffer<\n string,\n undefined | null | OutputEmitterRef<unknown>['emit']\n >\n\n constructor(keyValueDiffers: KeyValueDiffers, initialOutputs: any) {\n this.#valueDiffer = keyValueDiffers.find(initialOutputs).create()\n if (initialOutputs) {\n this.#valueDiffer.diff(initialOutputs)\n }\n }\n\n hasListener(outputName: string) {\n return outputName in this.#outputListeners\n }\n\n setListener(outputName: string, callback: (...args: any[]) => void) {\n this.#outputListeners[outputName] = callback\n }\n\n getListener(outputName: string) {\n return this.#outputListeners[outputName]\n }\n\n unsubscribeAll(): void {\n for (const prop in this.#outputSubscribers) {\n this.unsubscribe(prop)\n }\n }\n\n unsubscribe(outputName: string) {\n if (outputName in this.#outputSubscribers) {\n this.#outputSubscribers[outputName]?.unsubscribe()\n delete this.#outputSubscribers[outputName]\n delete this.#outputListeners[outputName]\n }\n }\n\n diff(outputs: Record<string, OutputEmitterRef<unknown>['emit'] | undefined>) {\n return this.#valueDiffer.diff(outputs ?? {})\n }\n}\n","import { FlexRenderComponentRef } from './flex-render-component-ref'\nimport { EmbeddedViewRef, TemplateRef, Type } from '@angular/core'\nimport type { FlexRenderContent } from '../flex-render'\nimport { FlexRenderComponent } from './flex-render-component'\n\nexport type FlexRenderTypedContent =\n | { kind: 'null' }\n | {\n kind: 'primitive'\n content: string | number | Record<string, any>\n }\n | { kind: 'flexRenderComponent'; content: FlexRenderComponent<unknown> }\n | { kind: 'templateRef'; content: TemplateRef<unknown> }\n | { kind: 'component'; content: Type<unknown> }\n\nexport function mapToFlexRenderTypedContent(\n content: FlexRenderContent<any>,\n): FlexRenderTypedContent {\n if (content === null || content === undefined) {\n return { kind: 'null' }\n }\n if (typeof content === 'string' || typeof content === 'number') {\n return { kind: 'primitive', content }\n }\n if (content instanceof FlexRenderComponent) {\n return { kind: 'flexRenderComponent', content }\n } else if (content instanceof TemplateRef) {\n return { kind: 'templateRef', content }\n } else if (content instanceof Type) {\n return { kind: 'component', content }\n } else {\n return { kind: 'primitive', content }\n }\n}\n\nexport type FlexRenderViewAllowedType =\n | FlexRenderComponentRef<any>\n | EmbeddedViewRef<unknown>\n | null\n\nexport abstract class FlexRenderView<\n TView extends FlexRenderViewAllowedType,\n TContent extends FlexRenderTypedContent,\n> {\n readonly view: TView\n #previousContent: FlexRenderTypedContent | undefined\n #content: FlexRenderTypedContent\n\n protected constructor(\n initialContent: Exclude<FlexRenderTypedContent, { kind: 'null' }>,\n view: TView,\n ) {\n this.#content = initialContent\n this.view = view\n }\n\n get previousContent(): FlexRenderTypedContent {\n return this.#previousContent ?? { kind: 'null' }\n }\n\n get content() {\n return this.#content\n }\n\n set content(content: FlexRenderTypedContent) {\n this.#previousContent = this.#content\n this.#content = content\n }\n\n abstract updateProps(props: Record<string, any>): void\n\n abstract dirtyCheck(): void\n\n abstract onDestroy(callback: Function): void\n\n abstract eq(view: TContent): boolean\n}\n\nexport class FlexRenderTemplateView extends FlexRenderView<\n EmbeddedViewRef<unknown>,\n Extract<FlexRenderTypedContent, { kind: 'primitive' | 'templateRef' }>\n> {\n constructor(\n initialContent: Extract<\n FlexRenderTypedContent,\n { kind: 'primitive' | 'templateRef' }\n >,\n view: EmbeddedViewRef<unknown>,\n ) {\n super(initialContent, view)\n }\n\n override updateProps(props: Record<string, any>) {\n this.view.markForCheck()\n }\n\n override dirtyCheck() {\n // Basically a no-op. When the view is created via EmbeddedViewRef, we don't need to do any manual update\n // since this type of content has a proxy as a context, then every time the root component is checked for changes,\n // the property getter will be re-evaluated.\n //\n // If in a future we need to manually mark the view as dirty, just uncomment next line\n // this.view.markForCheck()\n }\n\n override onDestroy(callback: Function) {\n this.view.onDestroy(callback)\n }\n\n override eq(\n compare: Extract<\n FlexRenderTypedContent,\n { kind: 'primitive' | 'templateRef' }\n >,\n ): boolean {\n return (\n (this.content.kind === 'primitive' &&\n compare.kind === 'primitive' &&\n this.content.content === compare.content) ||\n (this.content.kind === 'templateRef' &&\n compare.kind === 'templateRef' &&\n this.content.content === compare.content)\n )\n }\n}\n\nexport class FlexRenderComponentView extends FlexRenderView<\n FlexRenderComponentRef<unknown>,\n Extract<FlexRenderTypedContent, { kind: 'component' | 'flexRenderComponent' }>\n> {\n constructor(\n initialContent: Extract<\n FlexRenderTypedContent,\n { kind: 'component' | 'flexRenderComponent' }\n >,\n view: FlexRenderComponentRef<unknown>,\n ) {\n super(initialContent, view)\n }\n\n override updateProps(props: Record<string, any>) {\n switch (this.content.kind) {\n case 'component': {\n this.view.setInputs(props)\n break\n }\n case 'flexRenderComponent': {\n // No-op. When FlexRenderFlags.PropsReferenceChanged is set,\n // FlexRenderComponent will be updated into `dirtyCheck`.\n break\n }\n }\n }\n\n override dirtyCheck() {\n switch (this.content.kind) {\n case 'component': {\n // Component context is currently valuated with the cell context. Since it's reference\n // shouldn't change, we force mark the component as dirty in order to re-evaluate function invocation in view.\n // NOTE: this should behave like having a component with ChangeDetectionStrategy.Default\n this.view.markAsDirty()\n break\n }\n case 'flexRenderComponent': {\n // Given context instance will always have a different reference than the previous one,\n // so instead of recreating the entire view, we will only update the current view\n if (this.view.eqType(this.content.content)) {\n this.view.update(this.content.content)\n }\n this.view.markAsDirty()\n break\n }\n }\n }\n\n override onDestroy(callback: Function) {\n this.view.componentRef.onDestroy(callback)\n }\n\n override eq(\n compare: Extract<\n FlexRenderTypedContent,\n { kind: 'component' | 'flexRenderComponent' }\n >,\n ): boolean {\n return (\n (this.content.kind === 'component' &&\n compare.kind === 'component' &&\n this.content.content === compare.content) ||\n (this.content.kind === 'flexRenderComponent' &&\n compare.kind === 'flexRenderComponent' &&\n this.content.content.component === compare.content.component)\n )\n }\n}\n","import {\n ChangeDetectorRef,\n Directive,\n DoCheck,\n effect,\n type EffectRef,\n Inject,\n inject,\n Injector,\n Input,\n OnChanges,\n runInInjectionContext,\n SimpleChanges,\n TemplateRef,\n Type,\n ViewContainerRef,\n} from '@angular/core'\nimport { memo } from '@tanstack/table-core'\nimport { FlexRenderComponentProps } from './flex-render/context'\nimport { FlexRenderFlags } from './flex-render/flags'\nimport {\n flexRenderComponent,\n FlexRenderComponent,\n} from './flex-render/flex-render-component'\nimport { FlexRenderComponentFactory } from './flex-render/flex-render-component-ref'\nimport {\n FlexRenderComponentView,\n FlexRenderTemplateView,\n type FlexRenderTypedContent,\n FlexRenderView,\n FlexRenderViewAllowedType,\n mapToFlexRenderTypedContent,\n} from './flex-render/view'\n\nexport {\n injectFlexRenderContext,\n type FlexRenderComponentProps,\n} from './flex-render/context'\n\nexport type FlexRenderContent<TProps extends NonNullable<unknown>> =\n | string\n | number\n | Type<TProps>\n | FlexRenderComponent<TProps>\n | TemplateRef<{ $implicit: TProps }>\n | null\n | Record<any, any>\n | undefined\n\n@Directive({\n selector: '[flexRender]',\n standalone: true,\n providers: [FlexRenderComponentFactory],\n})\nexport class FlexRenderDirective<TProps extends NonNullable<unknown>>\n implements OnChanges, DoCheck\n{\n readonly #flexRenderComponentFactory = inject(FlexRenderComponentFactory)\n readonly #changeDetectorRef = inject(ChangeDetectorRef)\n\n @Input({ required: true, alias: 'flexRender' })\n content:\n | number\n | string\n | ((props: TProps) => FlexRenderContent<TProps>)\n | null\n | undefined = undefined\n\n @Input({ required: true, alias: 'flexRenderProps' })\n props: TProps = {} as TProps\n\n @Input({ required: false, alias: 'flexRenderInjector' })\n injector: Injector = inject(Injector)\n\n renderFlags = FlexRenderFlags.ViewFirstRender\n renderView: FlexRenderView<\n FlexRenderViewAllowedType,\n FlexRenderTypedContent\n > | null = null\n\n readonly #latestContent = () => {\n const { content, props } = this\n return typeof content !== 'function'\n ? content\n : runInInjectionContext(this.injector, () => content(props))\n }\n\n #getContentValue = memo(\n () => [this.#latestContent(), this.props, this.content],\n (latestContent) => {\n return mapToFlexRenderTypedContent(latestContent)\n },\n { key: 'flexRenderContentValue', debug: () => false },\n )\n\n constructor(\n @Inject(ViewContainerRef)\n private readonly viewContainerRef: ViewContainerRef,\n @Inject(TemplateRef)\n private readonly templateRef: TemplateRef<any>,\n ) {}\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes['props']) {\n this.renderFlags |= FlexRenderFlags.PropsReferenceChanged\n }\n if (changes['content']) {\n this.renderFlags |=\n FlexRenderFlags.ContentChanged | FlexRenderFlags.ViewFirstRender\n this.update()\n }\n }\n\n ngDoCheck(): void {\n if (this.renderFlags & FlexRenderFlags.ViewFirstRender) {\n // On the initial render, the view is created during the `ngOnChanges` hook.\n // Since `ngDoCheck` is called immediately afterward, there's no need to check for changes in this phase.\n this.renderFlags &= ~FlexRenderFlags.ViewFirstRender\n return\n }\n\n this.renderFlags |= FlexRenderFlags.DirtyCheck\n\n const latestContent = this.#getContentValue()\n if (latestContent.kind === 'null' || !this.renderView) {\n this.renderFlags |= FlexRenderFlags.ContentChanged\n } else {\n const { kind: currentKind } = this.renderView.content\n if (\n latestContent.kind !== currentKind ||\n !this.renderView.eq(latestContent)\n ) {\n this.renderFlags |= FlexRenderFlags.ContentChanged\n }\n this.renderView.content = latestContent\n }\n this.update()\n }\n\n update() {\n if (\n this.renderFlags &\n (FlexRenderFlags.ContentChanged | FlexRenderFlags.ViewFirstRender)\n ) {\n this.render()\n return\n }\n if (this.renderFlags & FlexRenderFlags.PropsReferenceChanged) {\n if (this.renderView) this.renderView.updateProps(this.props)\n this.renderFlags &= ~FlexRenderFlags.PropsReferenceChanged\n }\n if (\n this.renderFlags &\n (FlexRenderFlags.DirtyCheck | FlexRenderFlags.DirtySignal)\n ) {\n if (this.renderView) this.renderView.dirtyCheck()\n this.renderFlags &= ~(\n FlexRenderFlags.DirtyCheck | FlexRenderFlags.DirtySignal\n )\n }\n }\n\n #currentEffectRef: EffectRef | null = null\n\n render() {\n if (this.#shouldRecreateEntireView() && this.#currentEffectRef) {\n this.#currentEffectRef.destroy()\n this.#currentEffectRef = null\n this.renderFlags &= ~FlexRenderFlags.RenderEffectChecked\n }\n\n this.viewContainerRef.clear()\n this.renderFlags =\n FlexRenderFlags.Pristine |\n (this.renderFlags & FlexRenderFlags.ViewFirstRender) |\n (this.renderFlags & FlexRenderFlags.RenderEffectChecked)\n\n const resolvedContent = this.#getContentValue()\n if (resolvedContent.kind === 'null') {\n this.renderView = null\n } else {\n this.renderView = this.#renderViewByContent(resolvedContent)\n }\n\n // If the content is a function `content(props)`, we initialize an effect\n // in order to react to changes if the given definition use signals.\n if (!this.#currentEffectRef && typeof this.content === 'function') {\n this.#currentEffectRef = effect(\n () => {\n this.#latestContent()\n if (!(this.renderFlags & FlexRenderFlags.RenderEffectChecked)) {\n this.renderFlags |= FlexRenderFlags.RenderEffectChecked\n return\n }\n this.renderFlags |= FlexRenderFlags.DirtySignal\n // This will mark the view as changed,\n // so we'll try to check for updates into ngDoCheck\n this.#changeDetectorRef.markForCheck()\n },\n { injector: this.viewContainerRef.injector },\n )\n }\n }\n\n #shouldRecreateEntireView() {\n return (\n this.renderFlags &\n FlexRenderFlags.ContentChanged &\n FlexRenderFlags.ViewFirstRender\n )\n }\n\n #renderViewByContent(\n content: FlexRenderTypedContent,\n ): FlexRenderView<FlexRenderViewAllowedType, FlexRenderTypedContent> | null {\n if (content.kind === 'primitive') {\n return this.#renderStringContent(content)\n } else if (content.kind === 'templateRef') {\n return this.#renderTemplateRefContent(content)\n } else if (content.kind === 'flexRenderComponent') {\n return this.#renderComponent(content)\n } else if (content.kind === 'component') {\n return this.#renderCustomComponent(content)\n } else {\n return null\n }\n }\n\n #renderStringContent(\n template: Extract<FlexRenderTypedContent, { kind: 'primitive' }>,\n ): FlexRenderTemplateView {\n const context = () => {\n return typeof this.content === 'string' ||\n typeof this.content === 'number'\n ? this.content\n : this.content?.(this.props)\n }\n const ref = this.viewContainerRef.createEmbeddedView(this.templateRef, {\n get $implicit() {\n return context()\n },\n })\n return new FlexRenderTemplateView(template, ref)\n }\n\n #renderTemplateRefContent(\n template: Extract<FlexRenderTypedContent, { kind: 'templateRef' }>,\n ): FlexRenderTemplateView {\n const latestContext = () => this.props\n const view = this.viewContainerRef.createEmbeddedView(template.content, {\n get $implicit() {\n return latestContext()\n },\n })\n return new FlexRenderTemplateView(template, view)\n }\n\n #renderComponent(\n flexRenderComponent: Extract<\n FlexRenderTypedContent,\n { kind: 'flexRenderComponent' }\n >,\n ): FlexRenderComponentView {\n const { inputs, outputs, injector } = flexRenderComponent.content\n\n const getContext = () => this.props\n const proxy = new Proxy(this.props, {\n get: (_, key) => getContext()[key as keyof typeof _],\n })\n const componentInjector = Injector.create({\n parent: injector ?? this.injector,\n providers: [{ provide: FlexRenderComponentProps, useValue: proxy }],\n })\n const view = this.#flexRenderComponentFactory.createComponent(\n flexRenderComponent.content,\n componentInjector,\n )\n return new FlexRenderComponentView(flexRenderComponent, view)\n }\n\n #renderCustomComponent(\n component: Extract<FlexRenderTypedContent, { kind: 'component' }>,\n ): FlexRenderComponentView {\n const view = this.#flexRenderComponentFactory.createComponent(\n flexRenderComponent(component.content, {\n inputs: this.props,\n injector: this.injector,\n }),\n this.injector,\n )\n return new FlexRenderComponentView(component, view)\n }\n}\n","import { computed, type Signal, signal } from '@angular/core'\nimport {\n RowData,\n TableOptions,\n TableOptionsResolved,\n TableState,\n createTable,\n type Table,\n} from '@tanstack/table-core'\nimport { lazyInit } from './lazy-signal-initializer'\nimport { proxifyTable } from './proxy'\n\nexport * from '@tanstack/table-core'\n\nexport {\n type FlexRenderContent,\n FlexRenderDirective,\n FlexRenderDirective as FlexRender,\n injectFlexRenderContext,\n type FlexRenderComponentProps,\n} from './flex-render'\n\nexport {\n FlexRenderComponent,\n flexRenderComponent,\n} from './flex-render/flex-render-component'\n\nexport function createAngularTable<TData extends RowData>(\n options: () => TableOptions<TData>,\n): Table<TData> & Signal<Table<TData>> {\n return lazyInit(() => {\n const resolvedOptions = {\n state: {},\n onStateChange: () => {},\n renderFallbackValue: null,\n ...options(),\n }\n\n const table = createTable(resolvedOptions)\n\n // By default, manage table state here using the table's initial state\n const state = signal<TableState>(table.initialState)\n\n // Compose table options using computed.\n // This is to allow `tableSignal` to listen and set table option\n const updatedOptions = computed<TableOptionsResolved<TData>>(() => {\n // listen to table state changed\n const tableState = state()\n // listen to input options changed\n const tableOptions = options()\n return {\n ...table.options,\n ...resolvedOptions,\n ...tableOptions,\n state: { ...tableState, ...tableOptions.state },\n onStateChange: (updater) => {\n const value =\n updater instanceof Function ? updater(tableState) : updater\n state.set(value)\n resolvedOptions.onStateChange?.(updater)\n },\n }\n })\n\n // convert table instance to signal for proxify to listen to any table state and options changes\n const tableSignal = computed(\n () => {\n table.setOptions(updatedOptions())\n return table\n },\n {\n equal: () => false,\n },\n )\n\n // proxify Table instance to provide ability for consumer to listen to any table state changes\n return proxifyTable(tableSignal)\n })\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -18,7 +18,8 @@ export type FlexRenderTypedContent = {
|
|
|
18
18
|
content: Type<unknown>;
|
|
19
19
|
};
|
|
20
20
|
export declare function mapToFlexRenderTypedContent(content: FlexRenderContent<any>): FlexRenderTypedContent;
|
|
21
|
-
export
|
|
21
|
+
export type FlexRenderViewAllowedType = FlexRenderComponentRef<any> | EmbeddedViewRef<unknown> | null;
|
|
22
|
+
export declare abstract class FlexRenderView<TView extends FlexRenderViewAllowedType, TContent extends FlexRenderTypedContent> {
|
|
22
23
|
#private;
|
|
23
24
|
readonly view: TView;
|
|
24
25
|
protected constructor(initialContent: Exclude<FlexRenderTypedContent, {
|
|
@@ -30,20 +31,31 @@ export declare abstract class FlexRenderView<TView extends FlexRenderComponentRe
|
|
|
30
31
|
abstract updateProps(props: Record<string, any>): void;
|
|
31
32
|
abstract dirtyCheck(): void;
|
|
32
33
|
abstract onDestroy(callback: Function): void;
|
|
34
|
+
abstract eq(view: TContent): boolean;
|
|
33
35
|
}
|
|
34
|
-
export declare class FlexRenderTemplateView extends FlexRenderView<EmbeddedViewRef<unknown
|
|
36
|
+
export declare class FlexRenderTemplateView extends FlexRenderView<EmbeddedViewRef<unknown>, Extract<FlexRenderTypedContent, {
|
|
37
|
+
kind: 'primitive' | 'templateRef';
|
|
38
|
+
}>> {
|
|
35
39
|
constructor(initialContent: Extract<FlexRenderTypedContent, {
|
|
36
40
|
kind: 'primitive' | 'templateRef';
|
|
37
41
|
}>, view: EmbeddedViewRef<unknown>);
|
|
38
42
|
updateProps(props: Record<string, any>): void;
|
|
39
43
|
dirtyCheck(): void;
|
|
40
44
|
onDestroy(callback: Function): void;
|
|
45
|
+
eq(compare: Extract<FlexRenderTypedContent, {
|
|
46
|
+
kind: 'primitive' | 'templateRef';
|
|
47
|
+
}>): boolean;
|
|
41
48
|
}
|
|
42
|
-
export declare class FlexRenderComponentView extends FlexRenderView<FlexRenderComponentRef<unknown
|
|
49
|
+
export declare class FlexRenderComponentView extends FlexRenderView<FlexRenderComponentRef<unknown>, Extract<FlexRenderTypedContent, {
|
|
50
|
+
kind: 'component' | 'flexRenderComponent';
|
|
51
|
+
}>> {
|
|
43
52
|
constructor(initialContent: Extract<FlexRenderTypedContent, {
|
|
44
53
|
kind: 'component' | 'flexRenderComponent';
|
|
45
54
|
}>, view: FlexRenderComponentRef<unknown>);
|
|
46
55
|
updateProps(props: Record<string, any>): void;
|
|
47
56
|
dirtyCheck(): void;
|
|
48
57
|
onDestroy(callback: Function): void;
|
|
58
|
+
eq(compare: Extract<FlexRenderTypedContent, {
|
|
59
|
+
kind: 'component' | 'flexRenderComponent';
|
|
60
|
+
}>): boolean;
|
|
49
61
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { DoCheck, Injector, OnChanges, SimpleChanges, TemplateRef, Type, ViewContainerRef } from '@angular/core';
|
|
2
2
|
import { FlexRenderFlags } from './flex-render/flags';
|
|
3
3
|
import { FlexRenderComponent } from './flex-render/flex-render-component';
|
|
4
|
-
import { FlexRenderView } from './flex-render/view';
|
|
4
|
+
import { type FlexRenderTypedContent, FlexRenderView, FlexRenderViewAllowedType } from './flex-render/view';
|
|
5
5
|
import * as i0 from "@angular/core";
|
|
6
6
|
export { injectFlexRenderContext, type FlexRenderComponentProps, } from './flex-render/context';
|
|
7
7
|
export type FlexRenderContent<TProps extends NonNullable<unknown>> = string | number | Type<TProps> | FlexRenderComponent<TProps> | TemplateRef<{
|
|
@@ -15,7 +15,7 @@ export declare class FlexRenderDirective<TProps extends NonNullable<unknown>> im
|
|
|
15
15
|
props: TProps;
|
|
16
16
|
injector: Injector;
|
|
17
17
|
renderFlags: FlexRenderFlags;
|
|
18
|
-
renderView: FlexRenderView<
|
|
18
|
+
renderView: FlexRenderView<FlexRenderViewAllowedType, FlexRenderTypedContent> | null;
|
|
19
19
|
constructor(viewContainerRef: ViewContainerRef, templateRef: TemplateRef<any>);
|
|
20
20
|
ngOnChanges(changes: SimpleChanges): void;
|
|
21
21
|
ngDoCheck(): void;
|
package/package.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tanstack/angular-table",
|
|
3
|
-
"version": "8.21.
|
|
3
|
+
"version": "8.21.4",
|
|
4
4
|
"description": "Headless UI for building powerful tables & datagrids for Angular.",
|
|
5
5
|
"author": "Tanner Linsley",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"repository": {
|
|
8
8
|
"type": "git",
|
|
9
|
-
"url": "https://github.com/TanStack/table.git",
|
|
9
|
+
"url": "git+https://github.com/TanStack/table.git",
|
|
10
10
|
"directory": "packages/angular-table"
|
|
11
11
|
},
|
|
12
12
|
"homepage": "https://tanstack.com/table",
|
|
@@ -59,5 +59,11 @@
|
|
|
59
59
|
"@angular/core": ">=17"
|
|
60
60
|
},
|
|
61
61
|
"sideEffects": false,
|
|
62
|
-
"scripts": {
|
|
62
|
+
"scripts": {
|
|
63
|
+
"clean": "rimraf ./build",
|
|
64
|
+
"test:types": "tsc --noEmit && vitest --typecheck",
|
|
65
|
+
"test:lib": "vitest",
|
|
66
|
+
"test:lib:dev": "vitest --watch",
|
|
67
|
+
"build": "ng-packagr -p ng-package.json -c tsconfig.build.json && rimraf ./build/lib/package.json"
|
|
68
|
+
}
|
|
63
69
|
}
|
|
@@ -18,18 +18,18 @@ export class FlexRenderComponentFactory {
|
|
|
18
18
|
|
|
19
19
|
createComponent<T>(
|
|
20
20
|
flexRenderComponent: FlexRenderComponent<T>,
|
|
21
|
-
componentInjector: Injector
|
|
21
|
+
componentInjector: Injector,
|
|
22
22
|
): FlexRenderComponentRef<T> {
|
|
23
23
|
const componentRef = this.#viewContainerRef.createComponent(
|
|
24
24
|
flexRenderComponent.component,
|
|
25
25
|
{
|
|
26
26
|
injector: componentInjector,
|
|
27
|
-
}
|
|
27
|
+
},
|
|
28
28
|
)
|
|
29
29
|
const view = new FlexRenderComponentRef(
|
|
30
30
|
componentRef,
|
|
31
31
|
flexRenderComponent,
|
|
32
|
-
componentInjector
|
|
32
|
+
componentInjector,
|
|
33
33
|
)
|
|
34
34
|
|
|
35
35
|
const { inputs, outputs } = flexRenderComponent
|
|
@@ -51,14 +51,14 @@ export class FlexRenderComponentRef<T> {
|
|
|
51
51
|
constructor(
|
|
52
52
|
readonly componentRef: ComponentRef<T>,
|
|
53
53
|
componentData: FlexRenderComponent<T>,
|
|
54
|
-
readonly componentInjector: Injector
|
|
54
|
+
readonly componentInjector: Injector,
|
|
55
55
|
) {
|
|
56
56
|
this.#componentData = componentData
|
|
57
57
|
this.#keyValueDiffersFactory = componentInjector.get(KeyValueDiffers)
|
|
58
58
|
|
|
59
59
|
this.#outputRegistry = new FlexRenderComponentOutputManager(
|
|
60
60
|
this.#keyValueDiffersFactory,
|
|
61
|
-
this.outputs
|
|
61
|
+
this.outputs,
|
|
62
62
|
)
|
|
63
63
|
|
|
64
64
|
this.#inputValueDiffer = this.#keyValueDiffersFactory
|
|
@@ -106,26 +106,26 @@ export class FlexRenderComponentRef<T> {
|
|
|
106
106
|
if (!eq) return
|
|
107
107
|
const { inputDiff, outputDiff } = this.diff(content)
|
|
108
108
|
if (inputDiff) {
|
|
109
|
-
inputDiff.forEachAddedItem(item =>
|
|
110
|
-
this.setInput(item.key, item.currentValue)
|
|
109
|
+
inputDiff.forEachAddedItem((item) =>
|
|
110
|
+
this.setInput(item.key, item.currentValue),
|
|
111
111
|
)
|
|
112
|
-
inputDiff.forEachChangedItem(item =>
|
|
113
|
-
this.setInput(item.key, item.currentValue)
|
|
112
|
+
inputDiff.forEachChangedItem((item) =>
|
|
113
|
+
this.setInput(item.key, item.currentValue),
|
|
114
114
|
)
|
|
115
|
-
inputDiff.forEachRemovedItem(item => this.setInput(item.key, undefined))
|
|
115
|
+
inputDiff.forEachRemovedItem((item) => this.setInput(item.key, undefined))
|
|
116
116
|
}
|
|
117
117
|
if (outputDiff) {
|
|
118
|
-
outputDiff.forEachAddedItem(item => {
|
|
118
|
+
outputDiff.forEachAddedItem((item) => {
|
|
119
119
|
this.setOutput(item.key, item.currentValue)
|
|
120
120
|
})
|
|
121
|
-
outputDiff.forEachChangedItem(item => {
|
|
121
|
+
outputDiff.forEachChangedItem((item) => {
|
|
122
122
|
if (item.currentValue) {
|
|
123
123
|
this.#outputRegistry.setListener(item.key, item.currentValue)
|
|
124
124
|
} else {
|
|
125
125
|
this.#outputRegistry.unsubscribe(item.key)
|
|
126
126
|
}
|
|
127
127
|
})
|
|
128
|
-
outputDiff.forEachRemovedItem(item => {
|
|
128
|
+
outputDiff.forEachRemovedItem((item) => {
|
|
129
129
|
this.#outputRegistry.unsubscribe(item.key)
|
|
130
130
|
})
|
|
131
131
|
}
|
|
@@ -153,7 +153,7 @@ export class FlexRenderComponentRef<T> {
|
|
|
153
153
|
outputs: Record<
|
|
154
154
|
string,
|
|
155
155
|
OutputEmitterRef<unknown>['emit'] | null | undefined
|
|
156
|
-
|
|
156
|
+
>,
|
|
157
157
|
) {
|
|
158
158
|
this.#outputRegistry.unsubscribeAll()
|
|
159
159
|
for (const prop in outputs) {
|
|
@@ -163,7 +163,7 @@ export class FlexRenderComponentRef<T> {
|
|
|
163
163
|
|
|
164
164
|
setOutput(
|
|
165
165
|
outputName: string,
|
|
166
|
-
emit: OutputEmitterRef<unknown>['emit'] | undefined | null
|
|
166
|
+
emit: OutputEmitterRef<unknown>['emit'] | undefined | null,
|
|
167
167
|
): void {
|
|
168
168
|
if (!this.#componentData.allowedOutputNames.includes(outputName)) return
|
|
169
169
|
if (!emit) {
|
|
@@ -181,7 +181,7 @@ export class FlexRenderComponentRef<T> {
|
|
|
181
181
|
const instance = this.componentRef.instance
|
|
182
182
|
const output = instance[outputName as keyof typeof instance]
|
|
183
183
|
if (output && output instanceof OutputEmitterRef) {
|
|
184
|
-
output.subscribe(value => {
|
|
184
|
+
output.subscribe((value) => {
|
|
185
185
|
this.#outputRegistry.getListener(outputName)?.(value)
|
|
186
186
|
})
|
|
187
187
|
}
|
|
@@ -100,12 +100,12 @@ export class FlexRenderComponent<TComponent = any> {
|
|
|
100
100
|
readonly component: Type<TComponent>,
|
|
101
101
|
readonly inputs?: Inputs<TComponent>,
|
|
102
102
|
readonly injector?: Injector,
|
|
103
|
-
readonly outputs?: Outputs<TComponent
|
|
103
|
+
readonly outputs?: Outputs<TComponent>,
|
|
104
104
|
) {
|
|
105
105
|
const mirror = reflectComponentType(component)
|
|
106
106
|
if (!mirror) {
|
|
107
107
|
throw new Error(
|
|
108
|
-
`[@tanstack-table/angular] The provided symbol is not a component
|
|
108
|
+
`[@tanstack-table/angular] The provided symbol is not a component`,
|
|
109
109
|
)
|
|
110
110
|
}
|
|
111
111
|
this.mirror = mirror
|
package/src/flex-render/view.ts
CHANGED
|
@@ -14,7 +14,7 @@ export type FlexRenderTypedContent =
|
|
|
14
14
|
| { kind: 'component'; content: Type<unknown> }
|
|
15
15
|
|
|
16
16
|
export function mapToFlexRenderTypedContent(
|
|
17
|
-
content: FlexRenderContent<any
|
|
17
|
+
content: FlexRenderContent<any>,
|
|
18
18
|
): FlexRenderTypedContent {
|
|
19
19
|
if (content === null || content === undefined) {
|
|
20
20
|
return { kind: 'null' }
|
|
@@ -33,8 +33,14 @@ export function mapToFlexRenderTypedContent(
|
|
|
33
33
|
}
|
|
34
34
|
}
|
|
35
35
|
|
|
36
|
+
export type FlexRenderViewAllowedType =
|
|
37
|
+
| FlexRenderComponentRef<any>
|
|
38
|
+
| EmbeddedViewRef<unknown>
|
|
39
|
+
| null
|
|
40
|
+
|
|
36
41
|
export abstract class FlexRenderView<
|
|
37
|
-
TView extends
|
|
42
|
+
TView extends FlexRenderViewAllowedType,
|
|
43
|
+
TContent extends FlexRenderTypedContent,
|
|
38
44
|
> {
|
|
39
45
|
readonly view: TView
|
|
40
46
|
#previousContent: FlexRenderTypedContent | undefined
|
|
@@ -42,7 +48,7 @@ export abstract class FlexRenderView<
|
|
|
42
48
|
|
|
43
49
|
protected constructor(
|
|
44
50
|
initialContent: Exclude<FlexRenderTypedContent, { kind: 'null' }>,
|
|
45
|
-
view: TView
|
|
51
|
+
view: TView,
|
|
46
52
|
) {
|
|
47
53
|
this.#content = initialContent
|
|
48
54
|
this.view = view
|
|
@@ -66,17 +72,20 @@ export abstract class FlexRenderView<
|
|
|
66
72
|
abstract dirtyCheck(): void
|
|
67
73
|
|
|
68
74
|
abstract onDestroy(callback: Function): void
|
|
75
|
+
|
|
76
|
+
abstract eq(view: TContent): boolean
|
|
69
77
|
}
|
|
70
78
|
|
|
71
79
|
export class FlexRenderTemplateView extends FlexRenderView<
|
|
72
|
-
EmbeddedViewRef<unknown
|
|
80
|
+
EmbeddedViewRef<unknown>,
|
|
81
|
+
Extract<FlexRenderTypedContent, { kind: 'primitive' | 'templateRef' }>
|
|
73
82
|
> {
|
|
74
83
|
constructor(
|
|
75
84
|
initialContent: Extract<
|
|
76
85
|
FlexRenderTypedContent,
|
|
77
86
|
{ kind: 'primitive' | 'templateRef' }
|
|
78
87
|
>,
|
|
79
|
-
view: EmbeddedViewRef<unknown
|
|
88
|
+
view: EmbeddedViewRef<unknown>,
|
|
80
89
|
) {
|
|
81
90
|
super(initialContent, view)
|
|
82
91
|
}
|
|
@@ -97,17 +106,34 @@ export class FlexRenderTemplateView extends FlexRenderView<
|
|
|
97
106
|
override onDestroy(callback: Function) {
|
|
98
107
|
this.view.onDestroy(callback)
|
|
99
108
|
}
|
|
109
|
+
|
|
110
|
+
override eq(
|
|
111
|
+
compare: Extract<
|
|
112
|
+
FlexRenderTypedContent,
|
|
113
|
+
{ kind: 'primitive' | 'templateRef' }
|
|
114
|
+
>,
|
|
115
|
+
): boolean {
|
|
116
|
+
return (
|
|
117
|
+
(this.content.kind === 'primitive' &&
|
|
118
|
+
compare.kind === 'primitive' &&
|
|
119
|
+
this.content.content === compare.content) ||
|
|
120
|
+
(this.content.kind === 'templateRef' &&
|
|
121
|
+
compare.kind === 'templateRef' &&
|
|
122
|
+
this.content.content === compare.content)
|
|
123
|
+
)
|
|
124
|
+
}
|
|
100
125
|
}
|
|
101
126
|
|
|
102
127
|
export class FlexRenderComponentView extends FlexRenderView<
|
|
103
|
-
FlexRenderComponentRef<unknown
|
|
128
|
+
FlexRenderComponentRef<unknown>,
|
|
129
|
+
Extract<FlexRenderTypedContent, { kind: 'component' | 'flexRenderComponent' }>
|
|
104
130
|
> {
|
|
105
131
|
constructor(
|
|
106
132
|
initialContent: Extract<
|
|
107
133
|
FlexRenderTypedContent,
|
|
108
134
|
{ kind: 'component' | 'flexRenderComponent' }
|
|
109
135
|
>,
|
|
110
|
-
view: FlexRenderComponentRef<unknown
|
|
136
|
+
view: FlexRenderComponentRef<unknown>,
|
|
111
137
|
) {
|
|
112
138
|
super(initialContent, view)
|
|
113
139
|
}
|
|
@@ -150,4 +176,20 @@ export class FlexRenderComponentView extends FlexRenderView<
|
|
|
150
176
|
override onDestroy(callback: Function) {
|
|
151
177
|
this.view.componentRef.onDestroy(callback)
|
|
152
178
|
}
|
|
179
|
+
|
|
180
|
+
override eq(
|
|
181
|
+
compare: Extract<
|
|
182
|
+
FlexRenderTypedContent,
|
|
183
|
+
{ kind: 'component' | 'flexRenderComponent' }
|
|
184
|
+
>,
|
|
185
|
+
): boolean {
|
|
186
|
+
return (
|
|
187
|
+
(this.content.kind === 'component' &&
|
|
188
|
+
compare.kind === 'component' &&
|
|
189
|
+
this.content.content === compare.content) ||
|
|
190
|
+
(this.content.kind === 'flexRenderComponent' &&
|
|
191
|
+
compare.kind === 'flexRenderComponent' &&
|
|
192
|
+
this.content.content.component === compare.content.component)
|
|
193
|
+
)
|
|
194
|
+
}
|
|
153
195
|
}
|