@tanstack/angular-table
Version:
Headless UI for building powerful tables & datagrids for Angular.
44 lines • 7.86 kB
JavaScript
import { reflectComponentType, } from '@angular/core';
/**
* Helper function to create a [@link FlexRenderComponent] instance, with better type-safety.
*
* - options object must be passed when the given component instance contains at least one required signal input.
* - options/inputs is typed with the given component inputs
* - options/outputs is typed with the given component outputs
*/
export function flexRenderComponent(component, ...options) {
const { inputs, injector, outputs } = options?.[0] ?? {};
return new FlexRenderComponent(component, inputs, injector, outputs);
}
/**
* Wrapper class for a component that will be used as content for {@link FlexRenderDirective}
*
* Prefer {@link flexRenderComponent} helper for better type-safety
*/
export class FlexRenderComponent {
component;
inputs;
injector;
outputs;
mirror;
allowedInputNames = [];
allowedOutputNames = [];
constructor(component, inputs, injector, outputs) {
this.component = component;
this.inputs = inputs;
this.injector = injector;
this.outputs = outputs;
const mirror = reflectComponentType(component);
if (!mirror) {
throw new Error(`[-table/angular] The provided symbol is not a component`);
}
this.mirror = mirror;
for (const input of this.mirror.inputs) {
this.allowedInputNames.push(input.propName);
}
for (const output of this.mirror.outputs) {
this.allowedOutputNames.push(output.propName);
}
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxleC1yZW5kZXItY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2ZsZXgtcmVuZGVyL2ZsZXgtcmVuZGVyLWNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBS0wsb0JBQW9CLEdBRXJCLE1BQU0sZUFBZSxDQUFBO0FBNER0Qjs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUsbUJBQW1CLENBS2pDLFNBQTJCLEVBQzNCLEdBQUcsT0FFK0M7SUFFbEQsTUFBTSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLEdBQUcsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFBO0lBQ3hELE9BQU8sSUFBSSxtQkFBbUIsQ0FBQyxTQUFTLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQTtBQUN0RSxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sT0FBTyxtQkFBbUI7SUFNbkI7SUFDQTtJQUNBO0lBQ0E7SUFSRixNQUFNLENBQTZCO0lBQ25DLGlCQUFpQixHQUFhLEVBQUUsQ0FBQTtJQUNoQyxrQkFBa0IsR0FBYSxFQUFFLENBQUE7SUFFMUMsWUFDVyxTQUEyQixFQUMzQixNQUEyQixFQUMzQixRQUFtQixFQUNuQixPQUE2QjtRQUg3QixjQUFTLEdBQVQsU0FBUyxDQUFrQjtRQUMzQixXQUFNLEdBQU4sTUFBTSxDQUFxQjtRQUMzQixhQUFRLEdBQVIsUUFBUSxDQUFXO1FBQ25CLFlBQU8sR0FBUCxPQUFPLENBQXNCO1FBRXRDLE1BQU0sTUFBTSxHQUFHLG9CQUFvQixDQUFDLFNBQVMsQ0FBQyxDQUFBO1FBQzlDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNaLE1BQU0sSUFBSSxLQUFLLENBQ2Isa0VBQWtFLENBQ25FLENBQUE7UUFDSCxDQUFDO1FBQ0QsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUE7UUFDcEIsS0FBSyxNQUFNLEtBQUssSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBQzdDLENBQUM7UUFDRCxLQUFLLE1BQU0sTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDekMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUE7UUFDL0MsQ0FBQztJQUNILENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudE1pcnJvcixcbiAgSW5qZWN0b3IsXG4gIElucHV0U2lnbmFsLFxuICBPdXRwdXRFbWl0dGVyUmVmLFxuICByZWZsZWN0Q29tcG9uZW50VHlwZSxcbiAgVHlwZSxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcblxudHlwZSBJbnB1dHM8VD4gPSB7XG4gIFtLIGluIGtleW9mIFQgYXMgVFtLXSBleHRlbmRzIElucHV0U2lnbmFsPGluZmVyIFI+XG4gICAgPyBLXG4gICAgOiBuZXZlcl0/OiBUW0tdIGV4dGVuZHMgSW5wdXRTaWduYWw8aW5mZXIgUj4gPyBSIDogbmV2ZXJcbn1cblxudHlwZSBPdXRwdXRzPFQ+ID0ge1xuICBbSyBpbiBrZXlvZiBUIGFzIFRbS10gZXh0ZW5kcyBPdXRwdXRFbWl0dGVyUmVmPGluZmVyIFI+XG4gICAgPyBLXG4gICAgOiBuZXZlcl0/OiBUW0tdIGV4dGVuZHMgT3V0cHV0RW1pdHRlclJlZjxpbmZlciBSPlxuICAgID8gT3V0cHV0RW1pdHRlclJlZjxSPlsnZW1pdCddXG4gICAgOiBuZXZlclxufVxuXG50eXBlIE9wdGlvbmFsS2V5czxULCBLID0ga2V5b2YgVD4gPSBLIGV4dGVuZHMga2V5b2YgVFxuICA/IFRbS10gZXh0ZW5kcyBSZXF1aXJlZDxUPltLXVxuICAgID8gdW5kZWZpbmVkIGV4dGVuZHMgVFtLXVxuICAgICAgPyBLXG4gICAgICA6IG5ldmVyXG4gICAgOiBLXG4gIDogbmV2ZXJcblxuaW50ZXJmYWNlIEZsZXhSZW5kZXJSZXF1aXJlZE9wdGlvbnM8XG4gIFRJbnB1dHMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICBUT3V0cHV0cyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4sXG4+IHtcbiAgLyoqXG4gICAqIENvbXBvbmVudCBpbnN0YW5jZSBpbnB1dHMuIFRoZXkgd2lsbCBiZSBzZXQgdmlhIFtjb21wb25lbnRSZWYuc2V0SW5wdXQgQVBJXShodHRwczovL2FuZ3VsYXIuZGV2L2FwaS9jb3JlL0NvbXBvbmVudFJlZiNzZXRJbnB1dClcbiAgICovXG4gIGlucHV0czogVElucHV0c1xuICAvKipcbiAgICogQ29tcG9uZW50IGluc3RhbmNlIG91dHB1dHMuXG4gICAqL1xuICBvdXRwdXRzPzogVE91dHB1dHNcbiAgLyoqXG4gICAqIE9wdGlvbmFsIHtAbGluayBJbmplY3Rvcn0gdGhhdCB3aWxsIGJlIHVzZWQgd2hlbiByZW5kZXJpbmcgdGhlIGNvbXBvbmVudFxuICAgKi9cbiAgaW5qZWN0b3I/OiBJbmplY3RvclxufVxuXG5pbnRlcmZhY2UgRmxleFJlbmRlck9wdGlvbnM8XG4gIFRJbnB1dHMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICBUT3V0cHV0cyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4sXG4+IHtcbiAgLyoqXG4gICAqIENvbXBvbmVudCBpbnN0YW5jZSBpbnB1dHMuIFRoZXkgd2lsbCBiZSBzZXQgdmlhIFtjb21wb25lbnRSZWYuc2V0SW5wdXQgQVBJXShodHRwczovL2FuZ3VsYXIuZGV2L2FwaS9jb3JlL0NvbXBvbmVudFJlZiNzZXRJbnB1dClcbiAgICovXG4gIGlucHV0cz86IFRJbnB1dHNcbiAgLyoqXG4gICAqIENvbXBvbmVudCBpbnN0YW5jZSBvdXRwdXRzLlxuICAgKi9cbiAgb3V0cHV0cz86IFRPdXRwdXRzXG4gIC8qKlxuICAgKiBPcHRpb25hbCB7QGxpbmsgSW5qZWN0b3J9IHRoYXQgd2lsbCBiZSB1c2VkIHdoZW4gcmVuZGVyaW5nIHRoZSBjb21wb25lbnRcbiAgICovXG4gIGluamVjdG9yPzogSW5qZWN0b3Jcbn1cblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdG8gY3JlYXRlIGEgW0BsaW5rIEZsZXhSZW5kZXJDb21wb25lbnRdIGluc3RhbmNlLCB3aXRoIGJldHRlciB0eXBlLXNhZmV0eS5cbiAqXG4gKiAtIG9wdGlvbnMgb2JqZWN0IG11c3QgYmUgcGFzc2VkIHdoZW4gdGhlIGdpdmVuIGNvbXBvbmVudCBpbnN0YW5jZSBjb250YWlucyBhdCBsZWFzdCBvbmUgcmVxdWlyZWQgc2lnbmFsIGlucHV0LlxuICogLSBvcHRpb25zL2lucHV0cyBpcyB0eXBlZCB3aXRoIHRoZSBnaXZlbiBjb21wb25lbnQgaW5wdXRzXG4gKiAtIG9wdGlvbnMvb3V0cHV0cyBpcyB0eXBlZCB3aXRoIHRoZSBnaXZlbiBjb21wb25lbnQgb3V0cHV0c1xuICovXG5leHBvcnQgZnVuY3Rpb24gZmxleFJlbmRlckNvbXBvbmVudDxcbiAgVENvbXBvbmVudCA9IGFueSxcbiAgVElucHV0cyBleHRlbmRzIElucHV0czxUQ29tcG9uZW50PiA9IElucHV0czxUQ29tcG9uZW50PixcbiAgVE91dHB1dHMgZXh0ZW5kcyBPdXRwdXRzPFRDb21wb25lbnQ+ID0gT3V0cHV0czxUQ29tcG9uZW50Pixcbj4oXG4gIGNvbXBvbmVudDogVHlwZTxUQ29tcG9uZW50PixcbiAgLi4ub3B0aW9uczogT3B0aW9uYWxLZXlzPFRJbnB1dHM+IGV4dGVuZHMgbmV2ZXJcbiAgICA/IFtGbGV4UmVuZGVyT3B0aW9uczxUSW5wdXRzLCBUT3V0cHV0cz4/XVxuICAgIDogW0ZsZXhSZW5kZXJSZXF1aXJlZE9wdGlvbnM8VElucHV0cywgVE91dHB1dHM+XVxuKSB7XG4gIGNvbnN0IHsgaW5wdXRzLCBpbmplY3Rvciwgb3V0cHV0cyB9ID0gb3B0aW9ucz8uWzBdID8/IHt9XG4gIHJldHVybiBuZXcgRmxleFJlbmRlckNvbXBvbmVudChjb21wb25lbnQsIGlucHV0cywgaW5qZWN0b3IsIG91dHB1dHMpXG59XG5cbi8qKlxuICogV3JhcHBlciBjbGFzcyBmb3IgYSBjb21wb25lbnQgdGhhdCB3aWxsIGJlIHVzZWQgYXMgY29udGVudCBmb3Ige0BsaW5rIEZsZXhSZW5kZXJEaXJlY3RpdmV9XG4gKlxuICogUHJlZmVyIHtAbGluayBmbGV4UmVuZGVyQ29tcG9uZW50fSBoZWxwZXIgZm9yIGJldHRlciB0eXBlLXNhZmV0eVxuICovXG5leHBvcnQgY2xhc3MgRmxleFJlbmRlckNvbXBvbmVudDxUQ29tcG9uZW50ID0gYW55PiB7XG4gIHJlYWRvbmx5IG1pcnJvcjogQ29tcG9uZW50TWlycm9yPFRDb21wb25lbnQ+XG4gIHJlYWRvbmx5IGFsbG93ZWRJbnB1dE5hbWVzOiBzdHJpbmdbXSA9IFtdXG4gIHJlYWRvbmx5IGFsbG93ZWRPdXRwdXROYW1lczogc3RyaW5nW10gPSBbXVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHJlYWRvbmx5IGNvbXBvbmVudDogVHlwZTxUQ29tcG9uZW50PixcbiAgICByZWFkb25seSBpbnB1dHM/OiBJbnB1dHM8VENvbXBvbmVudD4sXG4gICAgcmVhZG9ubHkgaW5qZWN0b3I/OiBJbmplY3RvcixcbiAgICByZWFkb25seSBvdXRwdXRzPzogT3V0cHV0czxUQ29tcG9uZW50PlxuICApIHtcbiAgICBjb25zdCBtaXJyb3IgPSByZWZsZWN0Q29tcG9uZW50VHlwZShjb21wb25lbnQpXG4gICAgaWYgKCFtaXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFtAdGFuc3RhY2stdGFibGUvYW5ndWxhcl0gVGhlIHByb3ZpZGVkIHN5bWJvbCBpcyBub3QgYSBjb21wb25lbnRgXG4gICAgICApXG4gICAgfVxuICAgIHRoaXMubWlycm9yID0gbWlycm9yXG4gICAgZm9yIChjb25zdCBpbnB1dCBvZiB0aGlzLm1pcnJvci5pbnB1dHMpIHtcbiAgICAgIHRoaXMuYWxsb3dlZElucHV0TmFtZXMucHVzaChpbnB1dC5wcm9wTmFtZSlcbiAgICB9XG4gICAgZm9yIChjb25zdCBvdXRwdXQgb2YgdGhpcy5taXJyb3Iub3V0cHV0cykge1xuICAgICAgdGhpcy5hbGxvd2VkT3V0cHV0TmFtZXMucHVzaChvdXRwdXQucHJvcE5hbWUpXG4gICAgfVxuICB9XG59XG4iXX0=