UNPKG

@tanstack/angular-table

Version:

Headless UI for building powerful tables & datagrids for Angular.

102 lines 13.6 kB
import { TemplateRef, Type } from '@angular/core'; import { FlexRenderComponent } from './flex-render-component'; export function mapToFlexRenderTypedContent(content) { if (content === null || content === undefined) { return { kind: 'null' }; } if (typeof content === 'string' || typeof content === 'number') { return { kind: 'primitive', content }; } if (content instanceof FlexRenderComponent) { return { kind: 'flexRenderComponent', content }; } else if (content instanceof TemplateRef) { return { kind: 'templateRef', content }; } else if (content instanceof Type) { return { kind: 'component', content }; } else { return { kind: 'primitive', content }; } } export class FlexRenderView { view; #previousContent; #content; constructor(initialContent, view) { this.#content = initialContent; this.view = view; } get previousContent() { return this.#previousContent ?? { kind: 'null' }; } get content() { return this.#content; } set content(content) { this.#previousContent = this.#content; this.#content = content; } } export class FlexRenderTemplateView extends FlexRenderView { constructor(initialContent, view) { super(initialContent, view); } updateProps(props) { this.view.markForCheck(); } dirtyCheck() { // Basically a no-op. When the view is created via EmbeddedViewRef, we don't need to do any manual update // since this type of content has a proxy as a context, then every time the root component is checked for changes, // the property getter will be re-evaluated. // // If in a future we need to manually mark the view as dirty, just uncomment next line // this.view.markForCheck() } onDestroy(callback) { this.view.onDestroy(callback); } } export class FlexRenderComponentView extends FlexRenderView { constructor(initialContent, view) { super(initialContent, view); } updateProps(props) { switch (this.content.kind) { case 'component': { this.view.setInputs(props); break; } case 'flexRenderComponent': { // No-op. When FlexRenderFlags.PropsReferenceChanged is set, // FlexRenderComponent will be updated into `dirtyCheck`. break; } } } dirtyCheck() { switch (this.content.kind) { case 'component': { // Component context is currently valuated with the cell context. Since it's reference // shouldn't change, we force mark the component as dirty in order to re-evaluate function invocation in view. // NOTE: this should behave like having a component with ChangeDetectionStrategy.Default this.view.markAsDirty(); break; } case 'flexRenderComponent': { // Given context instance will always have a different reference than the previous one, // so instead of recreating the entire view, we will only update the current view if (this.view.eqType(this.content.content)) { this.view.update(this.content.content); } this.view.markAsDirty(); break; } } } onDestroy(callback) { this.view.componentRef.onDestroy(callback); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlldy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9mbGV4LXJlbmRlci92aWV3LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBbUIsV0FBVyxFQUFFLElBQUksRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUVsRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQTtBQVk3RCxNQUFNLFVBQVUsMkJBQTJCLENBQ3pDLE9BQStCO0lBRS9CLElBQUksT0FBTyxLQUFLLElBQUksSUFBSSxPQUFPLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDOUMsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQTtJQUN6QixDQUFDO0lBQ0QsSUFBSSxPQUFPLE9BQU8sS0FBSyxRQUFRLElBQUksT0FBTyxPQUFPLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDL0QsT0FBTyxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLENBQUE7SUFDdkMsQ0FBQztJQUNELElBQUksT0FBTyxZQUFZLG1CQUFtQixFQUFFLENBQUM7UUFDM0MsT0FBTyxFQUFFLElBQUksRUFBRSxxQkFBcUIsRUFBRSxPQUFPLEVBQUUsQ0FBQTtJQUNqRCxDQUFDO1NBQU0sSUFBSSxPQUFPLFlBQVksV0FBVyxFQUFFLENBQUM7UUFDMUMsT0FBTyxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLENBQUE7SUFDekMsQ0FBQztTQUFNLElBQUksT0FBTyxZQUFZLElBQUksRUFBRSxDQUFDO1FBQ25DLE9BQU8sRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxDQUFBO0lBQ3ZDLENBQUM7U0FBTSxDQUFDO1FBQ04sT0FBTyxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLENBQUE7SUFDdkMsQ0FBQztBQUNILENBQUM7QUFFRCxNQUFNLE9BQWdCLGNBQWM7SUFHekIsSUFBSSxDQUFPO0lB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eFJlbmRlckNvbXBvbmVudFJlZiB9IGZyb20gJy4vZmxleC1yZW5kZXItY29tcG9uZW50LXJlZidcbmltcG9ydCB7IEVtYmVkZGVkVmlld1JlZiwgVGVtcGxhdGVSZWYsIFR5cGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHR5cGUgeyBGbGV4UmVuZGVyQ29udGVudCB9IGZyb20gJy4uL2ZsZXgtcmVuZGVyJ1xuaW1wb3J0IHsgRmxleFJlbmRlckNvbXBvbmVudCB9IGZyb20gJy4vZmxleC1yZW5kZXItY29tcG9uZW50J1xuXG5leHBvcnQgdHlwZSBGbGV4UmVuZGVyVHlwZWRDb250ZW50ID1cbiAgfCB7IGtpbmQ6ICdudWxsJyB9XG4gIHwge1xuICAgICAga2luZDogJ3ByaW1pdGl2ZSdcbiAgICAgIGNvbnRlbnQ6IHN0cmluZyB8IG51bWJlciB8IFJlY29yZDxzdHJpbmcsIGFueT5cbiAgICB9XG4gIHwgeyBraW5kOiAnZmxleFJlbmRlckNvbXBvbmVudCc7IGNvbnRlbnQ6IEZsZXhSZW5kZXJDb21wb25lbnQ8dW5rbm93bj4gfVxuICB8IHsga2luZDogJ3RlbXBsYXRlUmVmJzsgY29udGVudDogVGVtcGxhdGVSZWY8dW5rbm93bj4gfVxuICB8IHsga2luZDogJ2NvbXBvbmVudCc7IGNvbnRlbnQ6IFR5cGU8dW5rbm93bj4gfVxuXG5leHBvcnQgZnVuY3Rpb24gbWFwVG9GbGV4UmVuZGVyVHlwZWRDb250ZW50KFxuICBjb250ZW50OiBGbGV4UmVuZGVyQ29udGVudDxhbnk+XG4pOiBGbGV4UmVuZGVyVHlwZWRDb250ZW50IHtcbiAgaWYgKGNvbnRlbnQgPT09IG51bGwgfHwgY29udGVudCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHsga2luZDogJ251bGwnIH1cbiAgfVxuICBpZiAodHlwZW9mIGNvbnRlbnQgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBjb250ZW50ID09PSAnbnVtYmVyJykge1xuICAgIHJldHVybiB7IGtpbmQ6ICdwcmltaXRpdmUnLCBjb250ZW50IH1cbiAgfVxuICBpZiAoY29udGVudCBpbnN0YW5jZW9mIEZsZXhSZW5kZXJDb21wb25lbnQpIHtcbiAgICByZXR1cm4geyBraW5kOiAnZmxleFJlbmRlckNvbXBvbmVudCcsIGNvbnRlbnQgfVxuICB9IGVsc2UgaWYgKGNvbnRlbnQgaW5zdGFuY2VvZiBUZW1wbGF0ZVJlZikge1xuICAgIHJldHVybiB7IGtpbmQ6ICd0ZW1wbGF0ZVJlZicsIGNvbnRlbnQgfVxuICB9IGVsc2UgaWYgKGNvbnRlbnQgaW5zdGFuY2VvZiBUeXBlKSB7XG4gICAgcmV0dXJuIHsga2luZDogJ2NvbXBvbmVudCcsIGNvbnRlbnQgfVxuICB9IGVsc2Uge1xuICAgIHJldHVybiB7IGtpbmQ6ICdwcmltaXRpdmUnLCBjb250ZW50IH1cbiAgfVxufVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgRmxleFJlbmRlclZpZXc8XG4gIFRWaWV3IGV4dGVuZHMgRmxleFJlbmRlckNvbXBvbmVudFJlZjxhbnk+IHwgRW1iZWRkZWRWaWV3UmVmPHVua25vd24+IHwgbnVsbCxcbj4ge1xuICByZWFkb25seSB2aWV3OiBUVmlld1xuICAjcHJldmlvdXNDb250ZW50OiBGbGV4UmVuZGVyVHlwZWRDb250ZW50IHwgdW5kZWZpbmVkXG4gICNjb250ZW50OiBGbGV4UmVuZGVyVHlwZWRDb250ZW50XG5cbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKFxuICAgIGluaXRpYWxDb250ZW50OiBFeGNsdWRlPEZsZXhSZW5kZXJUeXBlZENvbnRlbnQsIHsga2luZDogJ251bGwnIH0+LFxuICAgIHZpZXc6IFRWaWV3XG4gICkge1xuICAgIHRoaXMuI2NvbnRlbnQgPSBpbml0aWFsQ29udGVudFxuICAgIHRoaXMudmlldyA9IHZpZXdcbiAgfVxuXG4gIGdldCBwcmV2aW91c0NvbnRlbnQoKTogRmxleFJlbmRlclR5cGVkQ29udGVudCB7XG4gICAgcmV0dXJuIHRoaXMuI3ByZXZpb3VzQ29udGVudCA/PyB7IGtpbmQ6ICdudWxsJyB9XG4gIH1cblxuICBnZXQgY29udGVudCgpIHtcbiAgICByZXR1cm4gdGhpcy4jY29udGVudFxuICB9XG5cbiAgc2V0IGNvbnRlbnQoY29udGVudDogRmxleFJlbmRlclR5cGVkQ29udGVudCkge1xuICAgIHRoaXMuI3ByZXZpb3VzQ29udGVudCA9IHRoaXMuI2NvbnRlbnRcbiAgICB0aGlzLiNjb250ZW50ID0gY29udGVudFxuICB9XG5cbiAgYWJzdHJhY3QgdXBkYXRlUHJvcHMocHJvcHM6IFJlY29yZDxzdHJpbmcsIGFueT4pOiB2b2lkXG5cbiAgYWJzdHJhY3QgZGlydHlDaGVjaygpOiB2b2lkXG5cbiAgYWJzdHJhY3Qgb25EZXN0cm95KGNhbGxiYWNrOiBGdW5jdGlvbik6IHZvaWRcbn1cblxuZXhwb3J0IGNsYXNzIEZsZXhSZW5kZXJUZW1wbGF0ZVZpZXcgZXh0ZW5kcyBGbGV4UmVuZGVyVmlldzxcbiAgRW1iZWRkZWRWaWV3UmVmPHVua25vd24+XG4+IHtcbiAgY29uc3RydWN0b3IoXG4gICAgaW5pdGlhbENvbnRlbnQ6IEV4dHJhY3Q8XG4gICAgICBGbGV4UmVuZGVyVHlwZWRDb250ZW50LFxuICAgICAgeyBraW5kOiAncHJpbWl0aXZlJyB8ICd0ZW1wbGF0ZVJlZicgfVxuICAgID4sXG4gICAgdmlldzogRW1iZWRkZWRWaWV3UmVmPHVua25vd24+XG4gICkge1xuICAgIHN1cGVyKGluaXRpYWxDb250ZW50LCB2aWV3KVxuICB9XG5cbiAgb3ZlcnJpZGUgdXBkYXRlUHJvcHMocHJvcHM6IFJlY29yZDxzdHJpbmcsIGFueT4pIHtcbiAgICB0aGlzLnZpZXcubWFya0ZvckNoZWNrKClcbiAgfVxuXG4gIG92ZXJyaWRlIGRpcnR5Q2hlY2soKSB7XG4gICAgLy8gQmFzaWNhbGx5IGEgbm8tb3AuIFdoZW4gdGhlIHZpZXcgaXMgY3JlYXRlZCB2aWEgRW1iZWRkZWRWaWV3UmVmLCB3ZSBkb24ndCBuZWVkIHRvIGRvIGFueSBtYW51YWwgdXBkYXRlXG4gICAgLy8gc2luY2UgdGhpcyB0eXBlIG9mIGNvbnRlbnQgaGFzIGEgcHJveHkgYXMgYSBjb250ZXh0LCB0aGVuIGV2ZXJ5IHRpbWUgdGhlIHJvb3QgY29tcG9uZW50IGlzIGNoZWNrZWQgZm9yIGNoYW5nZXMsXG4gICAgLy8gdGhlIHByb3BlcnR5IGdldHRlciB3aWxsIGJlIHJlLWV2YWx1YXRlZC5cbiAgICAvL1xuICAgIC8vIElmIGluIGEgZnV0dXJlIHdlIG5lZWQgdG8gbWFudWFsbHkgbWFyayB0aGUgdmlldyBhcyBkaXJ0eSwganVzdCB1bmNvbW1lbnQgbmV4dCBsaW5lXG4gICAgLy8gdGhpcy52aWV3Lm1hcmtGb3JDaGVjaygpXG4gIH1cblxuICBvdmVycmlkZSBvbkRlc3Ryb3koY2FsbGJhY2s6IEZ1bmN0aW9uKSB7XG4gICAgdGhpcy52aWV3Lm9uRGVzdHJveShjYWxsYmFjaylcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgRmxleFJlbmRlckNvbXBvbmVudFZpZXcgZXh0ZW5kcyBGbGV4UmVuZGVyVmlldzxcbiAgRmxleFJlbmRlckNvbXBvbmVudFJlZjx1bmtub3duPlxuPiB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIGluaXRpYWxDb250ZW50OiBFeHRyYWN0PFxuICAgICAgRmxleFJlbmRlclR5cGVkQ29udGVudCxcbiAgICAgIHsga2luZDogJ2NvbXBvbmVudCcgfCAnZmxleFJlbmRlckNvbXBvbmVudCcgfVxuICAgID4sXG4gICAgdmlldzogRmxleFJlbmRlckNvbXBvbmVudFJlZjx1bmtub3duPlxuICApIHtcbiAgICBzdXBlcihpbml0aWFsQ29udGVudCwgdmlldylcbiAgfVxuXG4gIG92ZXJyaWRlIHVwZGF0ZVByb3BzKHByb3BzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSB7XG4gICAgc3dpdGNoICh0aGlzLmNvbnRlbnQua2luZCkge1xuICAgICAgY2FzZSAnY29tcG9uZW50Jzoge1xuICAgICAgICB0aGlzLnZpZXcuc2V0SW5wdXRzKHByb3BzKVxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgICAgY2FzZSAnZmxleFJlbmRlckNvbXBvbmVudCc6IHtcbiAgICAgICAgLy8gTm8tb3AuIFdoZW4gRmxleFJlbmRlckZsYWdzLlByb3BzUmVmZXJlbmNlQ2hhbmdlZCBpcyBzZXQsXG4gICAgICAgIC8vIEZsZXhSZW5kZXJDb21wb25lbnQgd2lsbCBiZSB1cGRhdGVkIGludG8gYGRpcnR5Q2hlY2tgLlxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG92ZXJyaWRlIGRpcnR5Q2hlY2soKSB7XG4gICAgc3dpdGNoICh0aGlzLmNvbnRlbnQua2luZCkge1xuICAgICAgY2FzZSAnY29tcG9uZW50Jzoge1xuICAgICAgICAvLyBDb21wb25lbnQgY29udGV4dCBpcyBjdXJyZW50bHkgdmFsdWF0ZWQgd2l0aCB0aGUgY2VsbCBjb250ZXh0LiBTaW5jZSBpdCdzIHJlZmVyZW5jZVxuICAgICAgICAvLyBzaG91bGRuJ3QgY2hhbmdlLCB3ZSBmb3JjZSBtYXJrIHRoZSBjb21wb25lbnQgYXMgZGlydHkgaW4gb3JkZXIgdG8gcmUtZXZhbHVhdGUgZnVuY3Rpb24gaW52b2NhdGlvbiBpbiB2aWV3LlxuICAgICAgICAvLyBOT1RFOiB0aGlzIHNob3VsZCBiZWhhdmUgbGlrZSBoYXZpbmcgYSBjb21wb25lbnQgd2l0aCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5EZWZhdWx0XG4gICAgICAgIHRoaXMudmlldy5tYXJrQXNEaXJ0eSgpXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgICBjYXNlICdmbGV4UmVuZGVyQ29tcG9uZW50Jzoge1xuICAgICAgICAvLyBHaXZlbiBjb250ZXh0IGluc3RhbmNlIHdpbGwgYWx3YXlzIGhhdmUgYSBkaWZmZXJlbnQgcmVmZXJlbmNlIHRoYW4gdGhlIHByZXZpb3VzIG9uZSxcbiAgICAgICAgLy8gc28gaW5zdGVhZCBvZiByZWNyZWF0aW5nIHRoZSBlbnRpcmUgdmlldywgd2Ugd2lsbCBvbmx5IHVwZGF0ZSB0aGUgY3VycmVudCB2aWV3XG4gICAgICAgIGlmICh0aGlzLnZpZXcuZXFUeXBlKHRoaXMuY29udGVudC5jb250ZW50KSkge1xuICAgICAgICAgIHRoaXMudmlldy51cGRhdGUodGhpcy5jb250ZW50LmNvbnRlbnQpXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy52aWV3Lm1hcmtBc0RpcnR5KClcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvdmVycmlkZSBvbkRlc3Ryb3koY2FsbGJhY2s6IEZ1bmN0aW9uKSB7XG4gICAgdGhpcy52aWV3LmNvbXBvbmVudFJlZi5vbkRlc3Ryb3koY2FsbGJhY2spXG4gIH1cbn1cbiJdfQ==