@tanstack/angular-table 9.0.0-alpha.1 → 9.0.0-alpha.11
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/dist/fesm2022/tanstack-angular-table.mjs +1370 -239
- package/dist/fesm2022/tanstack-angular-table.mjs.map +1 -1
- package/dist/types/tanstack-angular-table.d.ts +767 -0
- package/package.json +27 -17
- package/src/angularReactivityFeature.ts +210 -0
- package/src/flex-render/context.ts +14 -0
- package/src/flex-render/flags.ts +34 -0
- package/src/flex-render/flexRenderComponent.ts +288 -0
- package/src/flex-render/flexRenderComponentFactory.ts +241 -0
- package/src/flex-render/renderer.ts +376 -0
- package/src/flex-render/view.ts +165 -0
- package/src/flexRender.ts +124 -0
- package/src/helpers/cell.ts +104 -0
- package/src/helpers/createTableHook.ts +480 -0
- package/src/helpers/flexRenderCell.ts +136 -0
- package/src/helpers/header.ts +99 -0
- package/src/helpers/table.ts +87 -0
- package/src/index.ts +17 -70
- package/src/injectTable.ts +123 -0
- package/src/{lazy-signal-initializer.ts → lazySignalInitializer.ts} +2 -2
- package/src/reactivityUtils.ts +232 -0
- package/dist/esm2022/flex-render.mjs +0 -133
- package/dist/esm2022/index.mjs +0 -48
- package/dist/esm2022/lazy-signal-initializer.mjs +0 -43
- package/dist/esm2022/proxy.mjs +0 -83
- package/dist/esm2022/tanstack-angular-table.mjs +0 -5
- package/dist/flex-render.d.ts +0 -30
- package/dist/index.d.ts +0 -5
- package/dist/lazy-signal-initializer.d.ts +0 -5
- package/dist/proxy.d.ts +0 -3
- package/src/__tests__/createAngularTable.test.ts +0 -95
- package/src/__tests__/flex-render.test.ts +0 -156
- package/src/__tests__/lazy-init.test.ts +0 -124
- package/src/__tests__/test-setup.ts +0 -12
- package/src/__tests__/test-utils.ts +0 -62
- package/src/flex-render.ts +0 -164
- package/src/proxy.ts +0 -97
|
@@ -1,133 +0,0 @@
|
|
|
1
|
-
import { ChangeDetectorRef, ComponentRef, Directive, EmbeddedViewRef, Inject, inject, InjectionToken, Injector, Input, TemplateRef, ViewContainerRef, } from '@angular/core';
|
|
2
|
-
import * as i0 from "@angular/core";
|
|
3
|
-
export class FlexRenderDirective {
|
|
4
|
-
viewContainerRef;
|
|
5
|
-
templateRef;
|
|
6
|
-
content = undefined;
|
|
7
|
-
props = {};
|
|
8
|
-
injector = inject(Injector);
|
|
9
|
-
constructor(viewContainerRef, templateRef) {
|
|
10
|
-
this.viewContainerRef = viewContainerRef;
|
|
11
|
-
this.templateRef = templateRef;
|
|
12
|
-
}
|
|
13
|
-
ref = null;
|
|
14
|
-
ngOnInit() {
|
|
15
|
-
this.ref = this.render();
|
|
16
|
-
}
|
|
17
|
-
ngDoCheck() {
|
|
18
|
-
if (this.ref instanceof ComponentRef) {
|
|
19
|
-
this.ref.injector.get(ChangeDetectorRef).markForCheck();
|
|
20
|
-
}
|
|
21
|
-
else if (this.ref instanceof EmbeddedViewRef) {
|
|
22
|
-
this.ref.markForCheck();
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
render() {
|
|
26
|
-
this.viewContainerRef.clear();
|
|
27
|
-
const { content, props } = this;
|
|
28
|
-
if (!this.content) {
|
|
29
|
-
return null;
|
|
30
|
-
}
|
|
31
|
-
if (typeof content === 'string' || typeof content === 'number') {
|
|
32
|
-
return this.renderStringContent();
|
|
33
|
-
}
|
|
34
|
-
if (typeof content === 'function') {
|
|
35
|
-
return this.renderContent(content(props));
|
|
36
|
-
}
|
|
37
|
-
return null;
|
|
38
|
-
}
|
|
39
|
-
renderContent(content) {
|
|
40
|
-
if (typeof content === 'string' || typeof content === 'number') {
|
|
41
|
-
return this.renderStringContent();
|
|
42
|
-
}
|
|
43
|
-
if (content instanceof TemplateRef) {
|
|
44
|
-
return this.viewContainerRef.createEmbeddedView(content, this.getTemplateRefContext());
|
|
45
|
-
}
|
|
46
|
-
else if (content instanceof FlexRenderComponent) {
|
|
47
|
-
return this.renderComponent(content);
|
|
48
|
-
}
|
|
49
|
-
else {
|
|
50
|
-
return null;
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
renderStringContent() {
|
|
54
|
-
const context = () => {
|
|
55
|
-
return typeof this.content === 'string' ||
|
|
56
|
-
typeof this.content === 'number'
|
|
57
|
-
? this.content
|
|
58
|
-
: this.content?.(this.props);
|
|
59
|
-
};
|
|
60
|
-
return this.viewContainerRef.createEmbeddedView(this.templateRef, {
|
|
61
|
-
get $implicit() {
|
|
62
|
-
return context();
|
|
63
|
-
},
|
|
64
|
-
});
|
|
65
|
-
}
|
|
66
|
-
renderComponent(flexRenderComponent) {
|
|
67
|
-
const { component, inputs, injector } = flexRenderComponent;
|
|
68
|
-
const getContext = () => this.props;
|
|
69
|
-
const proxy = new Proxy(this.props, {
|
|
70
|
-
get: (_, key) => getContext()?.[key],
|
|
71
|
-
});
|
|
72
|
-
const componentInjector = Injector.create({
|
|
73
|
-
parent: injector ?? this.injector,
|
|
74
|
-
providers: [{ provide: FlexRenderComponentProps, useValue: proxy }],
|
|
75
|
-
});
|
|
76
|
-
const componentRef = this.viewContainerRef.createComponent(component, {
|
|
77
|
-
injector: componentInjector,
|
|
78
|
-
});
|
|
79
|
-
for (const prop in inputs) {
|
|
80
|
-
if (componentRef.instance?.hasOwnProperty(prop)) {
|
|
81
|
-
componentRef.setInput(prop, inputs[prop]);
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
return componentRef;
|
|
85
|
-
}
|
|
86
|
-
getTemplateRefContext() {
|
|
87
|
-
const getContext = () => this.props;
|
|
88
|
-
return {
|
|
89
|
-
get $implicit() {
|
|
90
|
-
return getContext();
|
|
91
|
-
},
|
|
92
|
-
};
|
|
93
|
-
}
|
|
94
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: FlexRenderDirective, deps: [{ token: ViewContainerRef }, { token: TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });
|
|
95
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.9", type: FlexRenderDirective, isStandalone: true, selector: "[flexRender]", inputs: { content: ["flexRender", "content"], props: ["flexRenderProps", "props"], injector: ["flexRenderInjector", "injector"] }, ngImport: i0 });
|
|
96
|
-
}
|
|
97
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: FlexRenderDirective, decorators: [{
|
|
98
|
-
type: Directive,
|
|
99
|
-
args: [{
|
|
100
|
-
selector: '[flexRender]',
|
|
101
|
-
standalone: true,
|
|
102
|
-
}]
|
|
103
|
-
}], ctorParameters: () => [{ type: i0.ViewContainerRef, decorators: [{
|
|
104
|
-
type: Inject,
|
|
105
|
-
args: [ViewContainerRef]
|
|
106
|
-
}] }, { type: i0.TemplateRef, decorators: [{
|
|
107
|
-
type: Inject,
|
|
108
|
-
args: [TemplateRef]
|
|
109
|
-
}] }], propDecorators: { content: [{
|
|
110
|
-
type: Input,
|
|
111
|
-
args: [{ required: true, alias: 'flexRender' }]
|
|
112
|
-
}], props: [{
|
|
113
|
-
type: Input,
|
|
114
|
-
args: [{ required: true, alias: 'flexRenderProps' }]
|
|
115
|
-
}], injector: [{
|
|
116
|
-
type: Input,
|
|
117
|
-
args: [{ required: false, alias: 'flexRenderInjector' }]
|
|
118
|
-
}] } });
|
|
119
|
-
export class FlexRenderComponent {
|
|
120
|
-
component;
|
|
121
|
-
inputs;
|
|
122
|
-
injector;
|
|
123
|
-
constructor(component, inputs = {}, injector) {
|
|
124
|
-
this.component = component;
|
|
125
|
-
this.inputs = inputs;
|
|
126
|
-
this.injector = injector;
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
const FlexRenderComponentProps = new InjectionToken('[@tanstack/angular-table] Flex render component context props');
|
|
130
|
-
export function injectFlexRenderContext() {
|
|
131
|
-
return inject(FlexRenderComponentProps);
|
|
132
|
-
}
|
|
133
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxleC1yZW5kZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZmxleC1yZW5kZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLGlCQUFpQixFQUNqQixZQUFZLEVBQ1osU0FBUyxFQUVULGVBQWUsRUFDZixNQUFNLEVBQ04sTUFBTSxFQUNOLGNBQWMsRUFDZCxRQUFRLEVBQ1IsS0FBSyxFQUVMLFdBQVcsRUFFWCxnQkFBZ0IsR0FDakIsTUFBTSxlQUFlLENBQUE7O0FBY3RCLE1BQU0sT0FBTyxtQkFBbUI7SUFrQlg7SUFFQTtJQWhCbkIsT0FBTyxHQUlTLFNBQVMsQ0FBQTtJQUd6QixLQUFLLEdBQVcsRUFBWSxDQUFBO0lBRzVCLFFBQVEsR0FBYSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUE7SUFFckMsWUFFbUIsZ0JBQWtDLEVBRWxDLFdBQTZCO1FBRjdCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFFbEMsZ0JBQVcsR0FBWCxXQUFXLENBQWtCO0lBQzdDLENBQUM7SUFFSixHQUFHLEdBQTZELElBQUksQ0FBQTtJQUVwRSxRQUFRO1FBQ04sSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUE7SUFDMUIsQ0FBQztJQUVELFNBQVM7UUFDUCxJQUFJLElBQUksQ0FBQyxHQUFHLFlBQVksWUFBWSxFQUFFLENBQUM7WUFDckMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLENBQUMsWUFBWSxFQUFFLENBQUE7UUFDekQsQ0FBQzthQUFNLElBQUksSUFBSSxDQUFDLEdBQUcsWUFBWSxlQUFlLEVBQUUsQ0FBQztZQUMvQyxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFBO1FBQ3pCLENBQUM7SUFDSCxDQUFDO0lBRUQsTUFBTTtRQUNKLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsQ0FBQTtRQUM3QixN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TUFBTSx3QkFBd0IsR0FBRyxJQUFJLGNBQWMsQ0FDakQsK0RBQStELENBQ2hFLENBQUE7QUFFRCxNQUFNLFVBQVUsdUJBQXVCO0lBQ3JDLE9BQU8sTUFBTSxDQUFJLHdCQUF3QixDQUFDLENBQUE7QUFDNUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnRSZWYsXG4gIERpcmVjdGl2ZSxcbiAgdHlwZSBEb0NoZWNrLFxuICBFbWJlZGRlZFZpZXdSZWYsXG4gIEluamVjdCxcbiAgaW5qZWN0LFxuICBJbmplY3Rpb25Ub2tlbixcbiAgSW5qZWN0b3IsXG4gIElucHV0LFxuICB0eXBlIE9uSW5pdCxcbiAgVGVtcGxhdGVSZWYsXG4gIHR5cGUgVHlwZSxcbiAgVmlld0NvbnRhaW5lclJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcblxuZXhwb3J0IHR5cGUgRmxleFJlbmRlckNvbnRlbnQ8VFByb3BzIGV4dGVuZHMgTm9uTnVsbGFibGU8dW5rbm93bj4+ID1cbiAgfCBzdHJpbmdcbiAgfCBudW1iZXJcbiAgfCBGbGV4UmVuZGVyQ29tcG9uZW50PFRQcm9wcz5cbiAgfCBUZW1wbGF0ZVJlZjx7ICRpbXBsaWNpdDogVFByb3BzIH0+XG4gIHwgbnVsbFxuICB8IHVuZGVmaW5lZFxuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbZmxleFJlbmRlcl0nLFxuICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBGbGV4UmVuZGVyRGlyZWN0aXZlPFRQcm9wcyBleHRlbmRzIE5vbk51bGxhYmxlPHVua25vd24+PlxuICBpbXBsZW1lbnRzIE9uSW5pdCwgRG9DaGVja1xue1xuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSwgYWxpYXM6ICdmbGV4UmVuZGVyJyB9KVxuICBjb250ZW50OlxuICAgIHwgbnVtYmVyXG4gICAgfCBzdHJpbmdcbiAgICB8ICgocHJvcHM6IFRQcm9wcykgPT4gRmxleFJlbmRlckNvbnRlbnQ8VFByb3BzPilcbiAgICB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZFxuXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlLCBhbGlhczogJ2ZsZXhSZW5kZXJQcm9wcycgfSlcbiAgcHJvcHM6IFRQcm9wcyA9IHt9IGFzIFRQcm9wc1xuXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiBmYWxzZSwgYWxpYXM6ICdmbGV4UmVuZGVySW5qZWN0b3InIH0pXG4gIGluamVjdG9yOiBJbmplY3RvciA9IGluamVjdChJbmplY3RvcilcblxuICBjb25zdHJ1Y3RvcihcbiAgICBASW5qZWN0KFZpZXdDb250YWluZXJSZWYpXG4gICAgcHJpdmF0ZSByZWFkb25seSB2aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmLFxuICAgIEBJbmplY3QoVGVtcGxhdGVSZWYpXG4gICAgcHJpdmF0ZSByZWFkb25seSB0ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55PlxuICApIHt9XG5cbiAgcmVmPzogQ29tcG9uZW50UmVmPHVua25vd24+IHwgRW1iZWRkZWRWaWV3UmVmPHVua25vd24+IHwgbnVsbCA9IG51bGxcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnJlZiA9IHRoaXMucmVuZGVyKClcbiAgfVxuXG4gIG5nRG9DaGVjaygpIHtcbiAgICBpZiAodGhpcy5yZWYgaW5zdGFuY2VvZiBDb21wb25lbnRSZWYpIHtcbiAgICAgIHRoaXMucmVmLmluamVjdG9yLmdldChDaGFuZ2VEZXRlY3RvclJlZikubWFya0ZvckNoZWNrKClcbiAgICB9IGVsc2UgaWYgKHRoaXMucmVmIGluc3RhbmNlb2YgRW1iZWRkZWRWaWV3UmVmKSB7XG4gICAgICB0aGlzLnJlZi5tYXJrRm9yQ2hlY2soKVxuICAgIH1cbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICB0aGlzLnZpZXdDb250YWluZXJSZWYuY2xlYXIoKVxuICAgIGNvbnN0IHsgY29udGVudCwgcHJvcHMgfSA9IHRoaXNcbiAgICBpZiAoIXRoaXMuY29udGVudCkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGNvbnRlbnQgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBjb250ZW50ID09PSAnbnVtYmVyJykge1xuICAgICAgcmV0dXJuIHRoaXMucmVuZGVyU3RyaW5nQ29udGVudCgpXG4gICAgfVxuICAgIGlmICh0eXBlb2YgY29udGVudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIHRoaXMucmVuZGVyQ29udGVudChjb250ZW50KHByb3BzKSlcbiAgICB9XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVyQ29udGVudChjb250ZW50OiBGbGV4UmVuZGVyQ29udGVudDxUUHJvcHM+KSB7XG4gICAgaWYgKHR5cGVvZiBjb250ZW50ID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgY29udGVudCA9PT0gJ251bWJlcicpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlbmRlclN0cmluZ0NvbnRlbnQoKVxuICAgIH1cbiAgICBpZiAoY29udGVudCBpbnN0YW5jZW9mIFRlbXBsYXRlUmVmKSB7XG4gICAgICByZXR1cm4gdGhpcy52aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUVtYmVkZGVkVmlldyhcbiAgICAgICAgY29udGVudCxcbiAgICAgICAgdGhpcy5nZXRUZW1wbGF0ZVJlZkNvbnRleHQoKVxuICAgICAgKVxuICAgIH0gZWxzZSBpZiAoY29udGVudCBpbnN0YW5jZW9mIEZsZXhSZW5kZXJDb21wb25lbnQpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlbmRlckNvbXBvbmVudChjb250ZW50KVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVyU3RyaW5nQ29udGVudCgpOiBFbWJlZGRlZFZpZXdSZWY8dW5rbm93bj4ge1xuICAgIGNvbnN0IGNvbnRleHQgPSAoKSA9PiB7XG4gICAgICByZXR1cm4gdHlwZW9mIHRoaXMuY29udGVudCA9PT0gJ3N0cmluZycgfHxcbiAgICAgICAgdHlwZW9mIHRoaXMuY29udGVudCA9PT0gJ251bWJlcidcbiAgICAgICAgPyB0aGlzLmNvbnRlbnRcbiAgICAgICAgOiB0aGlzLmNvbnRlbnQ/Lih0aGlzLnByb3BzKVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy52aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLnRlbXBsYXRlUmVmLCB7XG4gICAgICBnZXQgJGltcGxpY2l0KCkge1xuICAgICAgICByZXR1cm4gY29udGV4dCgpXG4gICAgICB9LFxuICAgIH0pXG4gIH1cblxuICBwcml2YXRlIHJlbmRlckNvbXBvbmVudChcbiAgICBmbGV4UmVuZGVyQ29tcG9uZW50OiBGbGV4UmVuZGVyQ29tcG9uZW50PFRQcm9wcz5cbiAgKTogQ29tcG9uZW50UmVmPHVua25vd24+IHtcbiAgICBjb25zdCB7IGNvbXBvbmVudCwgaW5wdXRzLCBpbmplY3RvciB9ID0gZmxleFJlbmRlckNvbXBvbmVudFxuXG4gICAgY29uc3QgZ2V0Q29udGV4dCA9ICgpID0+IHRoaXMucHJvcHNcblxuICAgIGNvbnN0IHByb3h5ID0gbmV3IFByb3h5KHRoaXMucHJvcHMsIHtcbiAgICAgIGdldDogKF8sIGtleSkgPT4gZ2V0Q29udGV4dCgpPy5ba2V5IGFzIGtleW9mIHR5cGVvZiBfXSxcbiAgICB9KVxuXG4gICAgY29uc3QgY29tcG9uZW50SW5qZWN0b3IgPSBJbmplY3Rvci5jcmVhdGUoe1xuICAgICAgcGFyZW50OiBpbmplY3RvciA/PyB0aGlzLmluamVjdG9yLFxuICAgICAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBGbGV4UmVuZGVyQ29tcG9uZW50UHJvcHMsIHVzZVZhbHVlOiBwcm94eSB9XSxcbiAgICB9KVxuXG4gICAgY29uc3QgY29tcG9uZW50UmVmID0gdGhpcy52aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUNvbXBvbmVudChjb21wb25lbnQsIHtcbiAgICAgIGluamVjdG9yOiBjb21wb25lbnRJbmplY3RvcixcbiAgICB9KVxuICAgIGZvciAoY29uc3QgcHJvcCBpbiBpbnB1dHMpIHtcbiAgICAgIGlmIChjb21wb25lbnRSZWYuaW5zdGFuY2U/Lmhhc093blByb3BlcnR5KHByb3ApKSB7XG4gICAgICAgIGNvbXBvbmVudFJlZi5zZXRJbnB1dChwcm9wLCBpbnB1dHNbcHJvcF0pXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjb21wb25lbnRSZWZcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VGVtcGxhdGVSZWZDb250ZXh0KCkge1xuICAgIGNvbnN0IGdldENvbnRleHQgPSAoKSA9PiB0aGlzLnByb3BzXG4gICAgcmV0dXJuIHtcbiAgICAgIGdldCAkaW1wbGljaXQoKSB7XG4gICAgICAgIHJldHVybiBnZXRDb250ZXh0KClcbiAgICAgIH0sXG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBGbGV4UmVuZGVyQ29tcG9uZW50PFQgZXh0ZW5kcyBOb25OdWxsYWJsZTx1bmtub3duPj4ge1xuICBjb25zdHJ1Y3RvcihcbiAgICByZWFkb25seSBjb21wb25lbnQ6IFR5cGU8dW5rbm93bj4sXG4gICAgcmVhZG9ubHkgaW5wdXRzOiBUID0ge30gYXMgVCxcbiAgICByZWFkb25seSBpbmplY3Rvcj86IEluamVjdG9yXG4gICkge31cbn1cblxuY29uc3QgRmxleFJlbmRlckNvbXBvbmVudFByb3BzID0gbmV3IEluamVjdGlvblRva2VuPE5vbk51bGxhYmxlPHVua25vd24+PihcbiAgJ1tAdGFuc3RhY2svYW5ndWxhci10YWJsZV0gRmxleCByZW5kZXIgY29tcG9uZW50IGNvbnRleHQgcHJvcHMnXG4pXG5cbmV4cG9ydCBmdW5jdGlvbiBpbmplY3RGbGV4UmVuZGVyQ29udGV4dDxUIGV4dGVuZHMgTm9uTnVsbGFibGU8dW5rbm93bj4+KCk6IFQge1xuICByZXR1cm4gaW5qZWN0PFQ+KEZsZXhSZW5kZXJDb21wb25lbnRQcm9wcylcbn1cbiJdfQ==
|
package/dist/esm2022/index.mjs
DELETED
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
import { computed, signal } from '@angular/core';
|
|
2
|
-
import { createTable, } from '@tanstack/table-core';
|
|
3
|
-
import { lazyInit } from './lazy-signal-initializer';
|
|
4
|
-
import { proxifyTable } from './proxy';
|
|
5
|
-
export * from '@tanstack/table-core';
|
|
6
|
-
export { FlexRenderComponent, FlexRenderDirective, injectFlexRenderContext, } from './flex-render';
|
|
7
|
-
export function createAngularTable(options) {
|
|
8
|
-
return lazyInit(() => {
|
|
9
|
-
const resolvedOptions = {
|
|
10
|
-
state: {},
|
|
11
|
-
onStateChange: () => { },
|
|
12
|
-
renderFallbackValue: null,
|
|
13
|
-
...options(),
|
|
14
|
-
};
|
|
15
|
-
const table = createTable(resolvedOptions);
|
|
16
|
-
// By default, manage table state here using the table's initial state
|
|
17
|
-
const state = signal(table.initialState);
|
|
18
|
-
// Compose table options using computed.
|
|
19
|
-
// This is to allow `tableSignal` to listen and set table option
|
|
20
|
-
const updatedOptions = computed(() => {
|
|
21
|
-
// listen to table state changed
|
|
22
|
-
const tableState = state();
|
|
23
|
-
// listen to input options changed
|
|
24
|
-
const tableOptions = options();
|
|
25
|
-
return {
|
|
26
|
-
...table.options,
|
|
27
|
-
...resolvedOptions,
|
|
28
|
-
...tableOptions,
|
|
29
|
-
state: { ...tableState, ...tableOptions.state },
|
|
30
|
-
onStateChange: updater => {
|
|
31
|
-
const value = updater instanceof Function ? updater(tableState) : updater;
|
|
32
|
-
state.set(value);
|
|
33
|
-
resolvedOptions.onStateChange?.(updater);
|
|
34
|
-
},
|
|
35
|
-
};
|
|
36
|
-
});
|
|
37
|
-
// convert table instance to signal for proxify to listen to any table state and options changes
|
|
38
|
-
const tableSignal = computed(() => {
|
|
39
|
-
table.setOptions(updatedOptions());
|
|
40
|
-
return table;
|
|
41
|
-
}, {
|
|
42
|
-
equal: () => false,
|
|
43
|
-
});
|
|
44
|
-
// proxify Table instance to provide ability for consumer to listen to any table state changes
|
|
45
|
-
return proxifyTable(tableSignal);
|
|
46
|
-
});
|
|
47
|
-
}
|
|
48
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBZSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFDN0QsT0FBTyxFQUtMLFdBQVcsR0FFWixNQUFNLHNCQUFzQixDQUFBO0FBQzdCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQTtBQUNwRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sU0FBUyxDQUFBO0FBRXRDLGNBQWMsc0JBQXNCLENBQUE7QUFFcEMsT0FBTyxFQUVMLG1CQUFtQixFQUNuQixtQkFBbUIsRUFDbkIsdUJBQXVCLEdBQ3hCLE1BQU0sZUFBZSxDQUFBO0FBRXRCLE1BQU0sVUFBVSxrQkFBa0IsQ0FDaEMsT0FBa0M7SUFFbEMsT0FBTyxRQUFRLENBQUMsR0FBRyxFQUFFO1FBQ25CLE1BQU0sZUFBZSxHQUFHO1lBQ3RCLEtBQUssRUFBRSxFQUFFO1lBQ1QsYUFBYSxFQUFFLEdBQUcsRUFBRSxHQUFFLENBQUM7WUFDdkIsbUJBQW1CLEVBQUUsSUFBSTtZQUN6QixHQUFHLE9BQU8sRUFBRTtTQUNiLENBQUE7UUFFRCxNQUFNLEtBQUssR0FBRyxXQUFXLENBQUMsZUFBZSxDQUFDLENBQUE7UUFFMUMsc0VBQXNFO1FBQ3RFLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBYSxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUE7UUFFcEQsd0NBQXdDO1FBQ3hDLGdFQUFnRTtRQUNoRSxNQUFNLGNBQWMsR0FBRyxRQUFRLENBQThCLEdBQUcsRUFBRTtZQUNoRSxnQ0FBZ0M7WUFDaEMsTUFBTSxVQUFVLEdBQUcsS0FBSyxFQUFFLENBQUE7WUFDMUIsa0NBQWtDO1lBQ2xDLE1BQU0sWUFBWSxHQUFHLE9BQU8sRUFBRSxDQUFBO1lBQzlCLE9BQU87Z0JBQ0wsR0FBRyxLQUFLLENBQUMsT0FBTztnQkFDaEIsR0FBRyxlQUFlO2dCQUNsQixHQUFHLFlBQVk7Z0JBQ2YsS0FBSyxFQUFFLEVBQUUsR0FBRyxVQUFVLEVBQUUsR0FBRyxZQUFZLENBQUMsS0FBSyxFQUFFO2dCQUMvQyxhQUFhLEVBQUUsT0FBTyxDQUFDLEVBQUU7b0JBQ3ZCLE1BQU0sS0FBSyxHQUNULE9BQU8sWUFBWSxRQUFRLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFBO29CQUM3RCxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFBO29CQUNoQixlQUFlLENBQUMsYUFBYSxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUE7Z0JBQzFDLENBQUM7YUFDRixDQUFBO1FBQ0gsQ0FBQyxDQUFDLENBQUE7UUFFRixnR0FBZ0c7UUFDaEcsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUMxQixHQUFHLEVBQUU7WUFDSCxLQUFLLENBQUMsVUFBVSxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUE7WUFDbEMsT0FBTyxLQUFLLENBQUE7UUFDZCxDQUFDLEVBQ0Q7WUFDRSxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsS0FBSztTQUNuQixDQUNGLENBQUE7UUFFRCw4RkFBOEY7UUFDOUYsT0FBTyxZQUFZLENBQUMsV0FBVyxDQUFDLENBQUE7SUFDbEMsQ0FBQyxDQUFDLENBQUE7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29tcHV0ZWQsIHR5cGUgU2lnbmFsLCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHtcbiAgUm93RGF0YSxcbiAgVGFibGVPcHRpb25zLFxuICBUYWJsZU9wdGlvbnNSZXNvbHZlZCxcbiAgVGFibGVTdGF0ZSxcbiAgY3JlYXRlVGFibGUsXG4gIHR5cGUgVGFibGUsXG59IGZyb20gJ0B0YW5zdGFjay90YWJsZS1jb3JlJ1xuaW1wb3J0IHsgbGF6eUluaXQgfSBmcm9tICcuL2xhenktc2lnbmFsLWluaXRpYWxpemVyJ1xuaW1wb3J0IHsgcHJveGlmeVRhYmxlIH0gZnJvbSAnLi9wcm94eSdcblxuZXhwb3J0ICogZnJvbSAnQHRhbnN0YWNrL3RhYmxlLWNvcmUnXG5cbmV4cG9ydCB7XG4gIHR5cGUgRmxleFJlbmRlckNvbnRlbnQsXG4gIEZsZXhSZW5kZXJDb21wb25lbnQsXG4gIEZsZXhSZW5kZXJEaXJlY3RpdmUsXG4gIGluamVjdEZsZXhSZW5kZXJDb250ZXh0LFxufSBmcm9tICcuL2ZsZXgtcmVuZGVyJ1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQW5ndWxhclRhYmxlPFREYXRhIGV4dGVuZHMgUm93RGF0YT4oXG4gIG9wdGlvbnM6ICgpID0+IFRhYmxlT3B0aW9uczxURGF0YT5cbik6IFRhYmxlPFREYXRhPiAmIFNpZ25hbDxUYWJsZTxURGF0YT4+IHtcbiAgcmV0dXJuIGxhenlJbml0KCgpID0+IHtcbiAgICBjb25zdCByZXNvbHZlZE9wdGlvbnMgPSB7XG4gICAgICBzdGF0ZToge30sXG4gICAgICBvblN0YXRlQ2hhbmdlOiAoKSA9PiB7fSxcbiAgICAgIHJlbmRlckZhbGxiYWNrVmFsdWU6IG51bGwsXG4gICAgICAuLi5vcHRpb25zKCksXG4gICAgfVxuXG4gICAgY29uc3QgdGFibGUgPSBjcmVhdGVUYWJsZShyZXNvbHZlZE9wdGlvbnMpXG5cbiAgICAvLyBCeSBkZWZhdWx0LCBtYW5hZ2UgdGFibGUgc3RhdGUgaGVyZSB1c2luZyB0aGUgdGFibGUncyBpbml0aWFsIHN0YXRlXG4gICAgY29uc3Qgc3RhdGUgPSBzaWduYWw8VGFibGVTdGF0ZT4odGFibGUuaW5pdGlhbFN0YXRlKVxuXG4gICAgLy8gQ29tcG9zZSB0YWJsZSBvcHRpb25zIHVzaW5nIGNvbXB1dGVkLlxuICAgIC8vIFRoaXMgaXMgdG8gYWxsb3cgYHRhYmxlU2lnbmFsYCB0byBsaXN0ZW4gYW5kIHNldCB0YWJsZSBvcHRpb25cbiAgICBjb25zdCB1cGRhdGVkT3B0aW9ucyA9IGNvbXB1dGVkPFRhYmxlT3B0aW9uc1Jlc29sdmVkPFREYXRhPj4oKCkgPT4ge1xuICAgICAgLy8gbGlzdGVuIHRvIHRhYmxlIHN0YXRlIGNoYW5nZWRcbiAgICAgIGNvbnN0IHRhYmxlU3RhdGUgPSBzdGF0ZSgpXG4gICAgICAvLyBsaXN0ZW4gdG8gaW5wdXQgb3B0aW9ucyBjaGFuZ2VkXG4gICAgICBjb25zdCB0YWJsZU9wdGlvbnMgPSBvcHRpb25zKClcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnRhYmxlLm9wdGlvbnMsXG4gICAgICAgIC4uLnJlc29sdmVkT3B0aW9ucyxcbiAgICAgICAgLi4udGFibGVPcHRpb25zLFxuICAgICAgICBzdGF0ZTogeyAuLi50YWJsZVN0YXRlLCAuLi50YWJsZU9wdGlvbnMuc3RhdGUgfSxcbiAgICAgICAgb25TdGF0ZUNoYW5nZTogdXBkYXRlciA9PiB7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPVxuICAgICAgICAgICAgdXBkYXRlciBpbnN0YW5jZW9mIEZ1bmN0aW9uID8gdXBkYXRlcih0YWJsZVN0YXRlKSA6IHVwZGF0ZXJcbiAgICAgICAgICBzdGF0ZS5zZXQodmFsdWUpXG4gICAgICAgICAgcmVzb2x2ZWRPcHRpb25zLm9uU3RhdGVDaGFuZ2U/Lih1cGRhdGVyKVxuICAgICAgICB9LFxuICAgICAgfVxuICAgIH0pXG5cbiAgICAvLyBjb252ZXJ0IHRhYmxlIGluc3RhbmNlIHRvIHNpZ25hbCBmb3IgcHJveGlmeSB0byBsaXN0ZW4gdG8gYW55IHRhYmxlIHN0YXRlIGFuZCBvcHRpb25zIGNoYW5nZXNcbiAgICBjb25zdCB0YWJsZVNpZ25hbCA9IGNvbXB1dGVkKFxuICAgICAgKCkgPT4ge1xuICAgICAgICB0YWJsZS5zZXRPcHRpb25zKHVwZGF0ZWRPcHRpb25zKCkpXG4gICAgICAgIHJldHVybiB0YWJsZVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgZXF1YWw6ICgpID0+IGZhbHNlLFxuICAgICAgfVxuICAgIClcblxuICAgIC8vIHByb3hpZnkgVGFibGUgaW5zdGFuY2UgdG8gcHJvdmlkZSBhYmlsaXR5IGZvciBjb25zdW1lciB0byBsaXN0ZW4gdG8gYW55IHRhYmxlIHN0YXRlIGNoYW5nZXNcbiAgICByZXR1cm4gcHJveGlmeVRhYmxlKHRhYmxlU2lnbmFsKVxuICB9KVxufVxuIl19
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
import { untracked } from '@angular/core';
|
|
2
|
-
/**
|
|
3
|
-
* Implementation from @tanstack/angular-query
|
|
4
|
-
* {@link https://github.com/TanStack/query/blob/main/packages/angular-query-experimental/src/util/lazy-init/lazy-init.ts}
|
|
5
|
-
*/
|
|
6
|
-
export function lazyInit(initializer) {
|
|
7
|
-
let object = null;
|
|
8
|
-
const initializeObject = () => {
|
|
9
|
-
if (!object) {
|
|
10
|
-
object = untracked(() => initializer());
|
|
11
|
-
}
|
|
12
|
-
};
|
|
13
|
-
queueMicrotask(() => initializeObject());
|
|
14
|
-
const table = () => { };
|
|
15
|
-
return new Proxy(table, {
|
|
16
|
-
apply(target, thisArg, argArray) {
|
|
17
|
-
initializeObject();
|
|
18
|
-
if (typeof object === 'function') {
|
|
19
|
-
return Reflect.apply(object, thisArg, argArray);
|
|
20
|
-
}
|
|
21
|
-
return Reflect.apply(target, thisArg, argArray);
|
|
22
|
-
},
|
|
23
|
-
get(_, prop, receiver) {
|
|
24
|
-
initializeObject();
|
|
25
|
-
return Reflect.get(object, prop, receiver);
|
|
26
|
-
},
|
|
27
|
-
has(_, prop) {
|
|
28
|
-
initializeObject();
|
|
29
|
-
return Reflect.has(object, prop);
|
|
30
|
-
},
|
|
31
|
-
ownKeys() {
|
|
32
|
-
initializeObject();
|
|
33
|
-
return Reflect.ownKeys(object);
|
|
34
|
-
},
|
|
35
|
-
getOwnPropertyDescriptor() {
|
|
36
|
-
return {
|
|
37
|
-
enumerable: true,
|
|
38
|
-
configurable: true,
|
|
39
|
-
};
|
|
40
|
-
},
|
|
41
|
-
});
|
|
42
|
-
}
|
|
43
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF6eS1zaWduYWwtaW5pdGlhbGl6ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGF6eS1zaWduYWwtaW5pdGlhbGl6ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUV6Qzs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsUUFBUSxDQUFtQixXQUFvQjtJQUM3RCxJQUFJLE1BQU0sR0FBYSxJQUFJLENBQUE7SUFFM0IsTUFBTSxnQkFBZ0IsR0FBRyxHQUFHLEVBQUU7UUFDNUIsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ1osTUFBTSxHQUFHLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFBO1FBQ3pDLENBQUM7SUFDSCxDQUFDLENBQUE7SUFFRCxjQUFjLENBQUMsR0FBRyxFQUFFLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFBO0lBRXhDLE1BQU0sS0FBSyxHQUFHLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQTtJQUV0QixPQUFPLElBQUksS0FBSyxDQUFJLEtBQVUsRUFBRTtRQUM5QixLQUFLLENBQUMsTUFBUyxFQUFFLE9BQVksRUFBRSxRQUFlO1lBQzVDLGdCQUFnQixFQUFFLENBQUE7WUFDbEIsSUFBSSxPQUFPLE1BQU0sS0FBSyxVQUFVLEVBQUUsQ0FBQztnQkFDakMsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUE7WUFDakQsQ0FBQztZQUNELE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFhLEVBQUUsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFBO1FBQ3hELENBQUM7UUFDRCxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxRQUFRO1lBQ25CLGdCQUFnQixFQUFFLENBQUE7WUFDbEIsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQVcsRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUE7UUFDakQsQ0FBQztRQUNELEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSTtZQUNULGdCQUFnQixFQUFFLENBQUE7WUFDbEIsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQVcsRUFBRSxJQUFJLENBQUMsQ0FBQTtRQUN2QyxDQUFDO1FBQ0QsT0FBTztZQUNMLGdCQUFnQixFQUFFLENBQUE7WUFDbEIsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQVcsQ0FBQyxDQUFBO1FBQ3JDLENBQUM7UUFDRCx3QkFBd0I7WUFDdEIsT0FBTztnQkFDTCxVQUFVLEVBQUUsSUFBSTtnQkFDaEIsWUFBWSxFQUFFLElBQUk7YUFDbkIsQ0FBQTtRQUNILENBQUM7S0FDRixDQUFDLENBQUE7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdW50cmFja2VkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcblxuLyoqXG4gKiBJbXBsZW1lbnRhdGlvbiBmcm9tIEB0YW5zdGFjay9hbmd1bGFyLXF1ZXJ5XG4gKiB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL1RhblN0YWNrL3F1ZXJ5L2Jsb2IvbWFpbi9wYWNrYWdlcy9hbmd1bGFyLXF1ZXJ5LWV4cGVyaW1lbnRhbC9zcmMvdXRpbC9sYXp5LWluaXQvbGF6eS1pbml0LnRzfVxuICovXG5leHBvcnQgZnVuY3Rpb24gbGF6eUluaXQ8VCBleHRlbmRzIG9iamVjdD4oaW5pdGlhbGl6ZXI6ICgpID0+IFQpOiBUIHtcbiAgbGV0IG9iamVjdDogVCB8IG51bGwgPSBudWxsXG5cbiAgY29uc3QgaW5pdGlhbGl6ZU9iamVjdCA9ICgpID0+IHtcbiAgICBpZiAoIW9iamVjdCkge1xuICAgICAgb2JqZWN0ID0gdW50cmFja2VkKCgpID0+IGluaXRpYWxpemVyKCkpXG4gICAgfVxuICB9XG5cbiAgcXVldWVNaWNyb3Rhc2soKCkgPT4gaW5pdGlhbGl6ZU9iamVjdCgpKVxuXG4gIGNvbnN0IHRhYmxlID0gKCkgPT4ge31cblxuICByZXR1cm4gbmV3IFByb3h5PFQ+KHRhYmxlIGFzIFQsIHtcbiAgICBhcHBseSh0YXJnZXQ6IFQsIHRoaXNBcmc6IGFueSwgYXJnQXJyYXk6IGFueVtdKTogYW55IHtcbiAgICAgIGluaXRpYWxpemVPYmplY3QoKVxuICAgICAgaWYgKHR5cGVvZiBvYmplY3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIFJlZmxlY3QuYXBwbHkob2JqZWN0LCB0aGlzQXJnLCBhcmdBcnJheSlcbiAgICAgIH1cbiAgICAgIHJldHVybiBSZWZsZWN0LmFwcGx5KHRhcmdldCBhcyBhbnksIHRoaXNBcmcsIGFyZ0FycmF5KVxuICAgIH0sXG4gICAgZ2V0KF8sIHByb3AsIHJlY2VpdmVyKSB7XG4gICAgICBpbml0aWFsaXplT2JqZWN0KClcbiAgICAgIHJldHVybiBSZWZsZWN0LmdldChvYmplY3QgYXMgVCwgcHJvcCwgcmVjZWl2ZXIpXG4gICAgfSxcbiAgICBoYXMoXywgcHJvcCkge1xuICAgICAgaW5pdGlhbGl6ZU9iamVjdCgpXG4gICAgICByZXR1cm4gUmVmbGVjdC5oYXMob2JqZWN0IGFzIFQsIHByb3ApXG4gICAgfSxcbiAgICBvd25LZXlzKCkge1xuICAgICAgaW5pdGlhbGl6ZU9iamVjdCgpXG4gICAgICByZXR1cm4gUmVmbGVjdC5vd25LZXlzKG9iamVjdCBhcyBUKVxuICAgIH0sXG4gICAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgfVxuICAgIH0sXG4gIH0pXG59XG4iXX0=
|
package/dist/esm2022/proxy.mjs
DELETED
|
@@ -1,83 +0,0 @@
|
|
|
1
|
-
import { computed, untracked } from '@angular/core';
|
|
2
|
-
export function proxifyTable(tableSignal) {
|
|
3
|
-
const internalState = tableSignal;
|
|
4
|
-
return new Proxy(internalState, {
|
|
5
|
-
apply() {
|
|
6
|
-
return tableSignal();
|
|
7
|
-
},
|
|
8
|
-
get(target, property) {
|
|
9
|
-
if (target[property]) {
|
|
10
|
-
return target[property];
|
|
11
|
-
}
|
|
12
|
-
const table = untracked(tableSignal);
|
|
13
|
-
/**
|
|
14
|
-
* Attempt to convert all accessors into computed ones,
|
|
15
|
-
* excluding handlers as they do not retain any reactive value
|
|
16
|
-
*/
|
|
17
|
-
if (property.startsWith('get') &&
|
|
18
|
-
!property.endsWith('Handler') &&
|
|
19
|
-
!property.endsWith('Model')) {
|
|
20
|
-
const maybeFn = table[property];
|
|
21
|
-
if (typeof maybeFn === 'function') {
|
|
22
|
-
Object.defineProperty(target, property, {
|
|
23
|
-
value: toComputed(tableSignal, maybeFn),
|
|
24
|
-
configurable: true,
|
|
25
|
-
enumerable: true,
|
|
26
|
-
});
|
|
27
|
-
return target[property];
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
// @ts-expect-error
|
|
31
|
-
return (target[property] = table[property]);
|
|
32
|
-
},
|
|
33
|
-
has(_, prop) {
|
|
34
|
-
return !!untracked(tableSignal)[prop];
|
|
35
|
-
},
|
|
36
|
-
ownKeys() {
|
|
37
|
-
return Reflect.ownKeys(untracked(tableSignal));
|
|
38
|
-
},
|
|
39
|
-
getOwnPropertyDescriptor() {
|
|
40
|
-
return {
|
|
41
|
-
enumerable: true,
|
|
42
|
-
configurable: true,
|
|
43
|
-
};
|
|
44
|
-
},
|
|
45
|
-
});
|
|
46
|
-
}
|
|
47
|
-
/**
|
|
48
|
-
* Here we'll handle all type of accessors:
|
|
49
|
-
* - 0 argument -> e.g. table.getCanNextPage())
|
|
50
|
-
* - 0~1 arguments -> e.g. table.getIsSomeRowsPinned(position?)
|
|
51
|
-
* - 1 required argument -> e.g. table.getColumn(columnId)
|
|
52
|
-
* - 1+ argument -> e.g. table.getRow(id, searchAll?)
|
|
53
|
-
*
|
|
54
|
-
* Since we are not able to detect automatically the accessors parameters,
|
|
55
|
-
* we'll wrap all accessors into a cached function wrapping a computed
|
|
56
|
-
* that return it's value based on the given parameters
|
|
57
|
-
*/
|
|
58
|
-
function toComputed(signal, fn) {
|
|
59
|
-
const hasArgs = fn.length > 0;
|
|
60
|
-
if (!hasArgs) {
|
|
61
|
-
return computed(() => {
|
|
62
|
-
void signal();
|
|
63
|
-
return fn();
|
|
64
|
-
});
|
|
65
|
-
}
|
|
66
|
-
const computedCache = {};
|
|
67
|
-
return (...argsArray) => {
|
|
68
|
-
const serializedArgs = serializeArgs(...argsArray);
|
|
69
|
-
if (computedCache.hasOwnProperty(serializedArgs)) {
|
|
70
|
-
return computedCache[serializedArgs]?.();
|
|
71
|
-
}
|
|
72
|
-
const computedSignal = computed(() => {
|
|
73
|
-
void signal();
|
|
74
|
-
return fn(...argsArray);
|
|
75
|
-
});
|
|
76
|
-
computedCache[serializedArgs] = computedSignal;
|
|
77
|
-
return computedSignal();
|
|
78
|
-
};
|
|
79
|
-
}
|
|
80
|
-
function serializeArgs(...args) {
|
|
81
|
-
return JSON.stringify(args);
|
|
82
|
-
}
|
|
83
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJveHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHJveHkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBZSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFLaEUsTUFBTSxVQUFVLFlBQVksQ0FDMUIsV0FBNkI7SUFFN0IsTUFBTSxhQUFhLEdBQUcsV0FBNkIsQ0FBQTtJQUVuRCxPQUFPLElBQUksS0FBSyxDQUFDLGFBQWEsRUFBRTtRQUM5QixLQUFLO1lBQ0gsT0FBTyxXQUFXLEVBQUUsQ0FBQTtRQUN0QixDQUFDO1FBQ0QsR0FBRyxDQUFDLE1BQU0sRUFBRSxRQUF3QjtZQUNsQyxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO2dCQUNyQixPQUFPLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQTtZQUN6QixDQUFDO1lBQ0QsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFBO1lBQ3BDOzs7ZUFHRztZQUNILElBQ0UsUUFBUSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUM7Z0JBQzFCLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUM7Z0JBQzdCLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFDM0IsQ0FBQztnQkFDRCxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFxQixDQUFBO2dCQUNuRCxJQUFJLE9BQU8sT0FBTyxLQUFLLFVBQVUsRUFBRSxDQUFDO29CQUNsQyxNQUFNLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUU7d0JBQ3RDLEtBQUssRUFBRSxVQUFVLENBQUMsV0FBVyxFQUFFLE9BQU8sQ0FBQzt3QkFDdkMsWUFBWSxFQUFFLElBQUk7d0JBQ2xCLFVBQVUsRUFBRSxJQUFJO3FCQUNqQixDQUFDLENBQUE7b0JBQ0YsT0FBTyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUE7Z0JBQ3pCLENBQUM7WUFDSCxDQUFDO1lBQ0QsbUJBQW1CO1lBQ25CLE9BQU8sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUE7UUFDN0MsQ0FBQztRQUNELEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBb0I7WUFDekIsT0FBTyxDQUFDLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQ3ZDLENBQUM7UUFDRCxPQUFPO1lBQ0wsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFBO1FBQ2hELENBQUM7UUFDRCx3QkFBd0I7WUFDdEIsT0FBTztnQkFDTCxVQUFVLEVBQUUsSUFBSTtnQkFDaEIsWUFBWSxFQUFFLElBQUk7YUFDbkIsQ0FBQTtRQUNILENBQUM7S0FDRixDQUFDLENBQUE7QUFDSixDQUFDO0FBRUQ7Ozs7Ozs7Ozs7R0FVRztBQUNILFNBQVMsVUFBVSxDQUFJLE1BQXdCLEVBQUUsRUFBWTtJQUMzRCxNQUFNLE9BQU8sR0FBRyxFQUFFLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQTtJQUM3QixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDYixPQUFPLFFBQVEsQ0FBQyxHQUFHLEVBQUU7WUFDbkIsS0FBSyxNQUFNLEVBQUUsQ0FBQTtZQUNiLE9BQU8sRUFBRSxFQUFFLENBQUE7UUFDYixDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRCxNQUFNLGFBQWEsR0FBb0MsRUFBRSxDQUFBO0lBRXpELE9BQU8sQ0FBQyxHQUFHLFNBQWdCLEVBQUUsRUFBRTtRQUM3QixNQUFNLGNBQWMsR0FBRyxhQUFhLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQTtRQUNsRCxJQUFJLGFBQWEsQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQztZQUNqRCxPQUFPLGFBQWEsQ0FBQyxjQUFjLENBQUMsRUFBRSxFQUFFLENBQUE7UUFDMUMsQ0FBQztRQUNELE1BQU0sY0FBYyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUU7WUFDbkMsS0FBSyxNQUFNLEVBQUUsQ0FBQTtZQUNiLE9BQU8sRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUE7UUFDekIsQ0FBQyxDQUFDLENBQUE7UUFFRixhQUFhLENBQUMsY0FBYyxDQUFDLEdBQUcsY0FBYyxDQUFBO1FBRTlDLE9BQU8sY0FBYyxFQUFFLENBQUE7SUFDekIsQ0FBQyxDQUFBO0FBQ0gsQ0FBQztBQUVELFNBQVMsYUFBYSxDQUFDLEdBQUcsSUFBVztJQUNuQyxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUE7QUFDN0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbXB1dGVkLCB0eXBlIFNpZ25hbCwgdW50cmFja2VkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcbmltcG9ydCB7IHR5cGUgVGFibGUgfSBmcm9tICdAdGFuc3RhY2svdGFibGUtY29yZSdcblxudHlwZSBUYWJsZVNpZ25hbDxUPiA9IFRhYmxlPFQ+ICYgU2lnbmFsPFRhYmxlPFQ+PlxuXG5leHBvcnQgZnVuY3Rpb24gcHJveGlmeVRhYmxlPFQ+KFxuICB0YWJsZVNpZ25hbDogU2lnbmFsPFRhYmxlPFQ+PlxuKTogVGFibGU8VD4gJiBTaWduYWw8VGFibGU8VD4+IHtcbiAgY29uc3QgaW50ZXJuYWxTdGF0ZSA9IHRhYmxlU2lnbmFsIGFzIFRhYmxlU2lnbmFsPFQ+XG5cbiAgcmV0dXJuIG5ldyBQcm94eShpbnRlcm5hbFN0YXRlLCB7XG4gICAgYXBwbHkoKSB7XG4gICAgICByZXR1cm4gdGFibGVTaWduYWwoKVxuICAgIH0sXG4gICAgZ2V0KHRhcmdldCwgcHJvcGVydHk6IGtleW9mIFRhYmxlPFQ+KTogYW55IHtcbiAgICAgIGlmICh0YXJnZXRbcHJvcGVydHldKSB7XG4gICAgICAgIHJldHVybiB0YXJnZXRbcHJvcGVydHldXG4gICAgICB9XG4gICAgICBjb25zdCB0YWJsZSA9IHVudHJhY2tlZCh0YWJsZVNpZ25hbClcbiAgICAgIC8qKlxuICAgICAgICogQXR0ZW1wdCB0byBjb252ZXJ0IGFsbCBhY2Nlc3NvcnMgaW50byBjb21wdXRlZCBvbmVzLFxuICAgICAgICogZXhjbHVkaW5nIGhhbmRsZXJzIGFzIHRoZXkgZG8gbm90IHJldGFpbiBhbnkgcmVhY3RpdmUgdmFsdWVcbiAgICAgICAqL1xuICAgICAgaWYgKFxuICAgICAgICBwcm9wZXJ0eS5zdGFydHNXaXRoKCdnZXQnKSAmJlxuICAgICAgICAhcHJvcGVydHkuZW5kc1dpdGgoJ0hhbmRsZXInKSAmJlxuICAgICAgICAhcHJvcGVydHkuZW5kc1dpdGgoJ01vZGVsJylcbiAgICAgICkge1xuICAgICAgICBjb25zdCBtYXliZUZuID0gdGFibGVbcHJvcGVydHldIGFzIEZ1bmN0aW9uIHwgbmV2ZXJcbiAgICAgICAgaWYgKHR5cGVvZiBtYXliZUZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHksIHtcbiAgICAgICAgICAgIHZhbHVlOiB0b0NvbXB1dGVkKHRhYmxlU2lnbmFsLCBtYXliZUZuKSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgfSlcbiAgICAgICAgICByZXR1cm4gdGFyZ2V0W3Byb3BlcnR5XVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICByZXR1cm4gKHRhcmdldFtwcm9wZXJ0eV0gPSB0YWJsZVtwcm9wZXJ0eV0pXG4gICAgfSxcbiAgICBoYXMoXywgcHJvcDoga2V5b2YgVGFibGU8VD4pIHtcbiAgICAgIHJldHVybiAhIXVudHJhY2tlZCh0YWJsZVNpZ25hbClbcHJvcF1cbiAgICB9LFxuICAgIG93bktleXMoKSB7XG4gICAgICByZXR1cm4gUmVmbGVjdC5vd25LZXlzKHVudHJhY2tlZCh0YWJsZVNpZ25hbCkpXG4gICAgfSxcbiAgICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB9XG4gICAgfSxcbiAgfSlcbn1cblxuLyoqXG4gKiBIZXJlIHdlJ2xsIGhhbmRsZSBhbGwgdHlwZSBvZiBhY2Nlc3NvcnM6XG4gKiAtIDAgYXJndW1lbnQgLT4gZS5nLiB0YWJsZS5nZXRDYW5OZXh0UGFnZSgpKVxuICogLSAwfjEgYXJndW1lbnRzIC0+IGUuZy4gdGFibGUuZ2V0SXNTb21lUm93c1Bpbm5lZChwb3NpdGlvbj8pXG4gKiAtIDEgcmVxdWlyZWQgYXJndW1lbnQgLT4gZS5nLiB0YWJsZS5nZXRDb2x1bW4oY29sdW1uSWQpXG4gKiAtIDErIGFyZ3VtZW50IC0+IGUuZy4gdGFibGUuZ2V0Um93KGlkLCBzZWFyY2hBbGw/KVxuICpcbiAqIFNpbmNlIHdlIGFyZSBub3QgYWJsZSB0byBkZXRlY3QgYXV0b21hdGljYWxseSB0aGUgYWNjZXNzb3JzIHBhcmFtZXRlcnMsXG4gKiB3ZSdsbCB3cmFwIGFsbCBhY2Nlc3NvcnMgaW50byBhIGNhY2hlZCBmdW5jdGlvbiB3cmFwcGluZyBhIGNvbXB1dGVkXG4gKiB0aGF0IHJldHVybiBpdCdzIHZhbHVlIGJhc2VkIG9uIHRoZSBnaXZlbiBwYXJhbWV0ZXJzXG4gKi9cbmZ1bmN0aW9uIHRvQ29tcHV0ZWQ8VD4oc2lnbmFsOiBTaWduYWw8VGFibGU8VD4+LCBmbjogRnVuY3Rpb24pIHtcbiAgY29uc3QgaGFzQXJncyA9IGZuLmxlbmd0aCA+IDBcbiAgaWYgKCFoYXNBcmdzKSB7XG4gICAgcmV0dXJuIGNvbXB1dGVkKCgpID0+IHtcbiAgICAgIHZvaWQgc2lnbmFsKClcbiAgICAgIHJldHVybiBmbigpXG4gICAgfSlcbiAgfVxuXG4gIGNvbnN0IGNvbXB1dGVkQ2FjaGU6IFJlY29yZDxzdHJpbmcsIFNpZ25hbDx1bmtub3duPj4gPSB7fVxuXG4gIHJldHVybiAoLi4uYXJnc0FycmF5OiBhbnlbXSkgPT4ge1xuICAgIGNvbnN0IHNlcmlhbGl6ZWRBcmdzID0gc2VyaWFsaXplQXJncyguLi5hcmdzQXJyYXkpXG4gICAgaWYgKGNvbXB1dGVkQ2FjaGUuaGFzT3duUHJvcGVydHkoc2VyaWFsaXplZEFyZ3MpKSB7XG4gICAgICByZXR1cm4gY29tcHV0ZWRDYWNoZVtzZXJpYWxpemVkQXJnc10/LigpXG4gICAgfVxuICAgIGNvbnN0IGNvbXB1dGVkU2lnbmFsID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgdm9pZCBzaWduYWwoKVxuICAgICAgcmV0dXJuIGZuKC4uLmFyZ3NBcnJheSlcbiAgICB9KVxuXG4gICAgY29tcHV0ZWRDYWNoZVtzZXJpYWxpemVkQXJnc10gPSBjb21wdXRlZFNpZ25hbFxuXG4gICAgcmV0dXJuIGNvbXB1dGVkU2lnbmFsKClcbiAgfVxufVxuXG5mdW5jdGlvbiBzZXJpYWxpemVBcmdzKC4uLmFyZ3M6IGFueVtdKSB7XG4gIHJldHVybiBKU09OLnN0cmluZ2lmeShhcmdzKVxufVxuIl19
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Generated bundle index. Do not edit.
|
|
3
|
-
*/
|
|
4
|
-
export * from './index';
|
|
5
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFuc3RhY2stYW5ndWxhci10YWJsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90YW5zdGFjay1hbmd1bGFyLXRhYmxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuIl19
|
package/dist/flex-render.d.ts
DELETED
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import { ComponentRef, type DoCheck, EmbeddedViewRef, Injector, type OnInit, TemplateRef, type Type, ViewContainerRef } from '@angular/core';
|
|
2
|
-
import * as i0 from "@angular/core";
|
|
3
|
-
export type FlexRenderContent<TProps extends NonNullable<unknown>> = string | number | FlexRenderComponent<TProps> | TemplateRef<{
|
|
4
|
-
$implicit: TProps;
|
|
5
|
-
}> | null | undefined;
|
|
6
|
-
export declare class FlexRenderDirective<TProps extends NonNullable<unknown>> implements OnInit, DoCheck {
|
|
7
|
-
private readonly viewContainerRef;
|
|
8
|
-
private readonly templateRef;
|
|
9
|
-
content: number | string | ((props: TProps) => FlexRenderContent<TProps>) | undefined;
|
|
10
|
-
props: TProps;
|
|
11
|
-
injector: Injector;
|
|
12
|
-
constructor(viewContainerRef: ViewContainerRef, templateRef: TemplateRef<any>);
|
|
13
|
-
ref?: ComponentRef<unknown> | EmbeddedViewRef<unknown> | null;
|
|
14
|
-
ngOnInit(): void;
|
|
15
|
-
ngDoCheck(): void;
|
|
16
|
-
render(): ComponentRef<unknown> | EmbeddedViewRef<unknown>;
|
|
17
|
-
private renderContent;
|
|
18
|
-
private renderStringContent;
|
|
19
|
-
private renderComponent;
|
|
20
|
-
private getTemplateRefContext;
|
|
21
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<FlexRenderDirective<any>, never>;
|
|
22
|
-
static ɵdir: i0.ɵɵDirectiveDeclaration<FlexRenderDirective<any>, "[flexRender]", never, { "content": { "alias": "flexRender"; "required": true; }; "props": { "alias": "flexRenderProps"; "required": true; }; "injector": { "alias": "flexRenderInjector"; "required": false; }; }, {}, never, never, true, never>;
|
|
23
|
-
}
|
|
24
|
-
export declare class FlexRenderComponent<T extends NonNullable<unknown>> {
|
|
25
|
-
readonly component: Type<unknown>;
|
|
26
|
-
readonly inputs: T;
|
|
27
|
-
readonly injector?: Injector;
|
|
28
|
-
constructor(component: Type<unknown>, inputs?: T, injector?: Injector);
|
|
29
|
-
}
|
|
30
|
-
export declare function injectFlexRenderContext<T extends NonNullable<unknown>>(): T;
|
package/dist/index.d.ts
DELETED
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import { type Signal } from '@angular/core';
|
|
2
|
-
import { RowData, TableOptions, type Table } from '@tanstack/table-core';
|
|
3
|
-
export * from '@tanstack/table-core';
|
|
4
|
-
export { type FlexRenderContent, FlexRenderComponent, FlexRenderDirective, injectFlexRenderContext, } from './flex-render';
|
|
5
|
-
export declare function createAngularTable<TData extends RowData>(options: () => TableOptions<TData>): Table<TData> & Signal<Table<TData>>;
|
package/dist/proxy.d.ts
DELETED
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
import { describe, test } from 'vitest'
|
|
2
|
-
import {
|
|
3
|
-
type ColumnDef,
|
|
4
|
-
createAngularTable,
|
|
5
|
-
getCoreRowModel,
|
|
6
|
-
type Table,
|
|
7
|
-
} from '../index'
|
|
8
|
-
import { Component, input, isSignal, signal, untracked } from '@angular/core'
|
|
9
|
-
import { TestBed } from '@angular/core/testing'
|
|
10
|
-
import { setSignalInputs } from './test-utils'
|
|
11
|
-
|
|
12
|
-
describe('createAngularTable', () => {
|
|
13
|
-
test('should render with required signal inputs', () => {
|
|
14
|
-
@Component({
|
|
15
|
-
selector: 'app-fake',
|
|
16
|
-
template: ``,
|
|
17
|
-
standalone: true,
|
|
18
|
-
})
|
|
19
|
-
class FakeComponent {
|
|
20
|
-
data = input.required<any[]>()
|
|
21
|
-
|
|
22
|
-
table = createAngularTable(() => ({
|
|
23
|
-
data: this.data(),
|
|
24
|
-
columns: [],
|
|
25
|
-
getCoreRowModel: getCoreRowModel(),
|
|
26
|
-
}))
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
const fixture = TestBed.createComponent(FakeComponent)
|
|
30
|
-
setSignalInputs(fixture.componentInstance, {
|
|
31
|
-
data: [],
|
|
32
|
-
})
|
|
33
|
-
|
|
34
|
-
fixture.detectChanges()
|
|
35
|
-
})
|
|
36
|
-
|
|
37
|
-
describe('Proxy table', () => {
|
|
38
|
-
type Data = { id: string; title: string }
|
|
39
|
-
const data = signal<Data[]>([{ id: '1', title: 'Title' }])
|
|
40
|
-
const columns: ColumnDef<Data>[] = [
|
|
41
|
-
{ id: 'id', header: 'Id', cell: context => context.getValue() },
|
|
42
|
-
{ id: 'title', header: 'Title', cell: context => context.getValue() },
|
|
43
|
-
]
|
|
44
|
-
const table = createAngularTable(() => ({
|
|
45
|
-
data: data(),
|
|
46
|
-
columns: columns,
|
|
47
|
-
getCoreRowModel: getCoreRowModel(),
|
|
48
|
-
getRowId: row => row.id,
|
|
49
|
-
}))
|
|
50
|
-
const tablePropertyKeys = Object.keys(table())
|
|
51
|
-
|
|
52
|
-
test('table must be a signal', () => {
|
|
53
|
-
expect(isSignal(table)).toEqual(true)
|
|
54
|
-
})
|
|
55
|
-
|
|
56
|
-
test('supports "in" operator', () => {
|
|
57
|
-
expect('getCoreRowModel' in table).toBe(true)
|
|
58
|
-
expect('options' in table).toBe(true)
|
|
59
|
-
expect('notFound' in table).toBe(false)
|
|
60
|
-
})
|
|
61
|
-
|
|
62
|
-
test('supports "Object.keys"', () => {
|
|
63
|
-
const keys = Object.keys(table())
|
|
64
|
-
expect(Object.keys(table)).toEqual(keys)
|
|
65
|
-
})
|
|
66
|
-
|
|
67
|
-
test.each(
|
|
68
|
-
tablePropertyKeys.map(property => [
|
|
69
|
-
property,
|
|
70
|
-
testShouldBeComputedProperty(untracked(table), property),
|
|
71
|
-
])
|
|
72
|
-
)('property (%s) is computed -> (%s)', (name, expected) => {
|
|
73
|
-
const tableProperty = table[name as keyof typeof table]
|
|
74
|
-
expect(isSignal(tableProperty)).toEqual(expected)
|
|
75
|
-
})
|
|
76
|
-
})
|
|
77
|
-
})
|
|
78
|
-
|
|
79
|
-
const testShouldBeComputedProperty = (
|
|
80
|
-
table: Table<any>,
|
|
81
|
-
propertyName: string
|
|
82
|
-
) => {
|
|
83
|
-
if (propertyName.endsWith('Handler') || propertyName.endsWith('Model')) {
|
|
84
|
-
return false
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
if (propertyName.startsWith('get')) {
|
|
88
|
-
// Only properties with no arguments are computed
|
|
89
|
-
const fn = table[propertyName as keyof Table<any>]
|
|
90
|
-
// Cannot test if is lazy computed since we return the unwrapped value
|
|
91
|
-
return fn instanceof Function && fn.length === 0
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
return false
|
|
95
|
-
}
|
|
@@ -1,156 +0,0 @@
|
|
|
1
|
-
import { describe, expect, test } from 'vitest'
|
|
2
|
-
import {
|
|
3
|
-
ChangeDetectionStrategy,
|
|
4
|
-
ChangeDetectorRef,
|
|
5
|
-
Component,
|
|
6
|
-
inject,
|
|
7
|
-
Input,
|
|
8
|
-
input,
|
|
9
|
-
type OnInit,
|
|
10
|
-
type TemplateRef,
|
|
11
|
-
ViewChild,
|
|
12
|
-
} from '@angular/core'
|
|
13
|
-
import { createColumnHelper } from '@tanstack/table-core'
|
|
14
|
-
import {
|
|
15
|
-
FlexRenderComponent,
|
|
16
|
-
FlexRenderDirective,
|
|
17
|
-
injectFlexRenderContext,
|
|
18
|
-
} from '../flex-render'
|
|
19
|
-
import { type ComponentFixture, TestBed } from '@angular/core/testing'
|
|
20
|
-
import { setFixtureSignalInput, setFixtureSignalInputs } from './test-utils'
|
|
21
|
-
|
|
22
|
-
interface Data {
|
|
23
|
-
id: string
|
|
24
|
-
title: string
|
|
25
|
-
description: string
|
|
26
|
-
status: 'success' | 'failed' | 'pending'
|
|
27
|
-
favorite?: boolean
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
describe('FlexRenderDirective', () => {
|
|
31
|
-
const helper = createColumnHelper<Data>()
|
|
32
|
-
|
|
33
|
-
test('should render primitives', async () => {
|
|
34
|
-
const fixture = TestBed.createComponent(TestRenderComponent)
|
|
35
|
-
|
|
36
|
-
// String
|
|
37
|
-
setFixtureSignalInputs(fixture, {
|
|
38
|
-
content: 'My value',
|
|
39
|
-
context: {},
|
|
40
|
-
})
|
|
41
|
-
expectPrimitiveValueIs(fixture, 'My value')
|
|
42
|
-
|
|
43
|
-
// Numbers
|
|
44
|
-
setFixtureSignalInputs(fixture, {
|
|
45
|
-
content: 0,
|
|
46
|
-
context: {},
|
|
47
|
-
})
|
|
48
|
-
expectPrimitiveValueIs(fixture, '0')
|
|
49
|
-
|
|
50
|
-
// Functions that returns primitives
|
|
51
|
-
setFixtureSignalInputs(fixture, {
|
|
52
|
-
content: () => 'My value 2',
|
|
53
|
-
context: {},
|
|
54
|
-
})
|
|
55
|
-
expectPrimitiveValueIs(fixture, 'My value 2')
|
|
56
|
-
|
|
57
|
-
// Null
|
|
58
|
-
setFixtureSignalInputs(fixture, {
|
|
59
|
-
content: () => null,
|
|
60
|
-
context: {},
|
|
61
|
-
})
|
|
62
|
-
expectPrimitiveValueIs(fixture, '')
|
|
63
|
-
|
|
64
|
-
// Undefined
|
|
65
|
-
setFixtureSignalInputs(fixture, {
|
|
66
|
-
content: () => undefined,
|
|
67
|
-
context: {},
|
|
68
|
-
})
|
|
69
|
-
expectPrimitiveValueIs(fixture, '')
|
|
70
|
-
})
|
|
71
|
-
|
|
72
|
-
test('should render TemplateRef', () => {
|
|
73
|
-
@Component({
|
|
74
|
-
template: `
|
|
75
|
-
<ng-template #template let-context>{{ context.property }}</ng-template>
|
|
76
|
-
`,
|
|
77
|
-
standalone: true,
|
|
78
|
-
})
|
|
79
|
-
class FakeTemplateRefComponent {
|
|
80
|
-
@ViewChild('template', { static: true })
|
|
81
|
-
templateRef!: TemplateRef<any>
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
const templateRef = TestBed.createComponent(FakeTemplateRefComponent)
|
|
85
|
-
.componentInstance.templateRef
|
|
86
|
-
|
|
87
|
-
const fixture = TestBed.createComponent(TestRenderComponent)
|
|
88
|
-
setFixtureSignalInputs(fixture, {
|
|
89
|
-
content: () => templateRef,
|
|
90
|
-
context: {
|
|
91
|
-
property: 'Property context value',
|
|
92
|
-
},
|
|
93
|
-
})
|
|
94
|
-
|
|
95
|
-
expect(fixture.nativeElement.textContent).toEqual('Property context value')
|
|
96
|
-
|
|
97
|
-
setFixtureSignalInput(fixture, 'context', { property: 'Updated value' })
|
|
98
|
-
fixture.detectChanges()
|
|
99
|
-
|
|
100
|
-
expect(fixture.nativeElement.textContent).toEqual('Updated value')
|
|
101
|
-
})
|
|
102
|
-
|
|
103
|
-
test('should render components', () => {
|
|
104
|
-
@Component({
|
|
105
|
-
template: `{{ context.property }}`,
|
|
106
|
-
standalone: true,
|
|
107
|
-
})
|
|
108
|
-
class FakeComponent {
|
|
109
|
-
context = injectFlexRenderContext<{ property: string }>()
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
const fixture = TestBed.createComponent(TestRenderComponent)
|
|
113
|
-
setFixtureSignalInputs(fixture, {
|
|
114
|
-
content: () => new FlexRenderComponent(FakeComponent),
|
|
115
|
-
context: {
|
|
116
|
-
property: 'Context value',
|
|
117
|
-
},
|
|
118
|
-
})
|
|
119
|
-
|
|
120
|
-
expect(fixture.nativeElement.textContent).toEqual('Context value')
|
|
121
|
-
|
|
122
|
-
setFixtureSignalInput(fixture, 'context', { property: 'Updated value' })
|
|
123
|
-
fixture.detectChanges()
|
|
124
|
-
|
|
125
|
-
expect(fixture.nativeElement.textContent).toEqual('Updated value')
|
|
126
|
-
})
|
|
127
|
-
})
|
|
128
|
-
|
|
129
|
-
@Component({
|
|
130
|
-
selector: 'app-test-render',
|
|
131
|
-
template: `
|
|
132
|
-
<ng-container *flexRender="content(); props: context(); let renderValue">
|
|
133
|
-
<span [innerHTML]="renderValue"></span>
|
|
134
|
-
</ng-container>
|
|
135
|
-
`,
|
|
136
|
-
standalone: true,
|
|
137
|
-
imports: [FlexRenderDirective],
|
|
138
|
-
})
|
|
139
|
-
class TestRenderComponent {
|
|
140
|
-
readonly content = input.required<FlexRenderDirectiveAllowedContent>()
|
|
141
|
-
|
|
142
|
-
readonly context = input.required<Record<string, unknown>>()
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
type FlexRenderDirectiveAllowedContent = FlexRenderDirective<
|
|
146
|
-
NonNullable<unknown>
|
|
147
|
-
>['content']
|
|
148
|
-
|
|
149
|
-
function expectPrimitiveValueIs(
|
|
150
|
-
fixture: ComponentFixture<unknown>,
|
|
151
|
-
value: unknown
|
|
152
|
-
) {
|
|
153
|
-
const span = fixture.nativeElement.querySelector('span')
|
|
154
|
-
expect(span).toBeDefined()
|
|
155
|
-
expect(span.innerHTML).toEqual(value)
|
|
156
|
-
}
|