@tanstack/angular-table
Version:
Headless UI for building powerful tables & datagrids for Angular.
49 lines • 7.39 kB
JavaScript
import { computed, signal } from '@angular/core';
import { createTable, } from '@tanstack/table-core';
import { lazyInit } from './lazy-signal-initializer';
import { proxifyTable } from './proxy';
export * from '@tanstack/table-core';
export { FlexRenderDirective, FlexRenderDirective as FlexRender, injectFlexRenderContext, } from './flex-render';
export { FlexRenderComponent, flexRenderComponent, } from './flex-render/flex-render-component';
export function createAngularTable(options) {
return lazyInit(() => {
const resolvedOptions = {
state: {},
onStateChange: () => { },
renderFallbackValue: null,
...options(),
};
const table = createTable(resolvedOptions);
// By default, manage table state here using the table's initial state
const state = signal(table.initialState);
// Compose table options using computed.
// This is to allow `tableSignal` to listen and set table option
const updatedOptions = computed(() => {
// listen to table state changed
const tableState = state();
// listen to input options changed
const tableOptions = options();
return {
...table.options,
...resolvedOptions,
...tableOptions,
state: { ...tableState, ...tableOptions.state },
onStateChange: updater => {
const value = updater instanceof Function ? updater(tableState) : updater;
state.set(value);
resolvedOptions.onStateChange?.(updater);
},
};
});
// convert table instance to signal for proxify to listen to any table state and options changes
const tableSignal = computed(() => {
table.setOptions(updatedOptions());
return table;
}, {
equal: () => false,
});
// proxify Table instance to provide ability for consumer to listen to any table state changes
return proxifyTable(tableSignal);
});
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBZSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFDN0QsT0FBTyxFQUtMLFdBQVcsR0FFWixNQUFNLHNCQUFzQixDQUFBO0FBQzdCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQTtBQUNwRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sU0FBUyxDQUFBO0FBRXRDLGNBQWMsc0JBQXNCLENBQUE7QUFFcEMsT0FBTyxFQUVMLG1CQUFtQixFQUNuQixtQkFBbUIsSUFBSSxVQUFVLEVBQ2pDLHVCQUF1QixHQUV4QixNQUFNLGVBQWUsQ0FBQTtBQUV0QixPQUFPLEVBQ0wsbUJBQW1CLEVBQ25CLG1CQUFtQixHQUNwQixNQUFNLHFDQUFxQyxDQUFBO0FBRTVDLE1BQU0sVUFBVSxrQkFBa0IsQ0FDaEMsT0FBa0M7SUFFbEMsT0FBTyxRQUFRLENBQUMsR0FBRyxFQUFFO1FBQ25CLE1BQU0sZUFBZSxHQUFHO1lBQ3RCLEtBQUssRUFBRSxFQUFFO1lBQ1QsYUFBYSxFQUFFLEdBQUcsRUFBRSxHQUFFLENBQUM7WUFDdkIsbUJBQW1CLEVBQUUsSUFBSTtZQUN6QixHQUFHLE9BQU8sRUFBRTtTQUNiLENBQUE7UUFFRCxNQUFNLEtBQUssR0FBRyxXQUFXLENBQUMsZUFBZSxDQUFDLENBQUE7UUFFMUMsc0VBQXNFO1FBQ3RFLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBYSxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUE7UUFFcEQsd0NBQXdDO1FBQ3hDLGdFQUFnRTtRQUNoRSxNQUFNLGNBQWMsR0FBRyxRQUFRLENBQThCLEdBQUcsRUFBRTtZQUNoRSxnQ0FBZ0M7WUFDaEMsTUFBTSxVQUFVLEdBQUcsS0FBSyxFQUFFLENBQUE7WUFDMUIsa0NBQWtDO1lBQ2xDLE1BQU0sWUFBWSxHQUFHLE9BQU8sRUFBRSxDQUFBO1lBQzlCLE9BQU87Z0JBQ0wsR0FBRyxLQUFLLENBQUMsT0FBTztnQkFDaEIsR0FBRyxlQUFlO2dCQUNsQixHQUFHLFlBQVk7Z0JBQ2YsS0FBSyxFQUFFLEVBQUUsR0FBRyxVQUFVLEVBQUUsR0FBRyxZQUFZLENBQUMsS0FBSyxFQUFFO2dCQUMvQyxhQUFhLEVBQUUsT0FBTyxDQUFDLEVBQUU7b0JBQ3ZCLE1BQU0sS0FBSyxHQUNULE9BQU8sWUFBWSxRQUFRLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFBO29CQUM3RCxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFBO29CQUNoQixlQUFlLENBQUMsYUFBYSxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUE7Z0JBQzFDLENBQUM7YUFDRixDQUFBO1FBQ0gsQ0FBQyxDQUFDLENBQUE7UUFFRixnR0FBZ0c7UUFDaEcsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUMxQixHQUFHLEVBQUU7WUFDSCxLQUFLLENBQUMsVUFBVSxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUE7WUFDbEMsT0FBTyxLQUFLLENBQUE7UUFDZCxDQUFDLEVBQ0Q7WUFDRSxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsS0FBSztTQUNuQixDQUNGLENBQUE7UUFFRCw4RkFBOEY7UUFDOUYsT0FBTyxZQUFZLENBQUMsV0FBVyxDQUFDLENBQUE7SUFDbEMsQ0FBQyxDQUFDLENBQUE7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29tcHV0ZWQsIHR5cGUgU2lnbmFsLCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHtcbiAgUm93RGF0YSxcbiAgVGFibGVPcHRpb25zLFxuICBUYWJsZU9wdGlvbnNSZXNvbHZlZCxcbiAgVGFibGVTdGF0ZSxcbiAgY3JlYXRlVGFibGUsXG4gIHR5cGUgVGFibGUsXG59IGZyb20gJ0B0YW5zdGFjay90YWJsZS1jb3JlJ1xuaW1wb3J0IHsgbGF6eUluaXQgfSBmcm9tICcuL2xhenktc2lnbmFsLWluaXRpYWxpemVyJ1xuaW1wb3J0IHsgcHJveGlmeVRhYmxlIH0gZnJvbSAnLi9wcm94eSdcblxuZXhwb3J0ICogZnJvbSAnQHRhbnN0YWNrL3RhYmxlLWNvcmUnXG5cbmV4cG9ydCB7XG4gIHR5cGUgRmxleFJlbmRlckNvbnRlbnQsXG4gIEZsZXhSZW5kZXJEaXJlY3RpdmUsXG4gIEZsZXhSZW5kZXJEaXJlY3RpdmUgYXMgRmxleFJlbmRlcixcbiAgaW5qZWN0RmxleFJlbmRlckNvbnRleHQsXG4gIHR5cGUgRmxleFJlbmRlckNvbXBvbmVudFByb3BzLFxufSBmcm9tICcuL2ZsZXgtcmVuZGVyJ1xuXG5leHBvcnQge1xuICBGbGV4UmVuZGVyQ29tcG9uZW50LFxuICBmbGV4UmVuZGVyQ29tcG9uZW50LFxufSBmcm9tICcuL2ZsZXgtcmVuZGVyL2ZsZXgtcmVuZGVyLWNvbXBvbmVudCdcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUFuZ3VsYXJUYWJsZTxURGF0YSBleHRlbmRzIFJvd0RhdGE+KFxuICBvcHRpb25zOiAoKSA9PiBUYWJsZU9wdGlvbnM8VERhdGE+XG4pOiBUYWJsZTxURGF0YT4gJiBTaWduYWw8VGFibGU8VERhdGE+PiB7XG4gIHJldHVybiBsYXp5SW5pdCgoKSA9PiB7XG4gICAgY29uc3QgcmVzb2x2ZWRPcHRpb25zID0ge1xuICAgICAgc3RhdGU6IHt9LFxuICAgICAgb25TdGF0ZUNoYW5nZTogKCkgPT4ge30sXG4gICAgICByZW5kZXJGYWxsYmFja1ZhbHVlOiBudWxsLFxuICAgICAgLi4ub3B0aW9ucygpLFxuICAgIH1cblxuICAgIGNvbnN0IHRhYmxlID0gY3JlYXRlVGFibGUocmVzb2x2ZWRPcHRpb25zKVxuXG4gICAgLy8gQnkgZGVmYXVsdCwgbWFuYWdlIHRhYmxlIHN0YXRlIGhlcmUgdXNpbmcgdGhlIHRhYmxlJ3MgaW5pdGlhbCBzdGF0ZVxuICAgIGNvbnN0IHN0YXRlID0gc2lnbmFsPFRhYmxlU3RhdGU+KHRhYmxlLmluaXRpYWxTdGF0ZSlcblxuICAgIC8vIENvbXBvc2UgdGFibGUgb3B0aW9ucyB1c2luZyBjb21wdXRlZC5cbiAgICAvLyBUaGlzIGlzIHRvIGFsbG93IGB0YWJsZVNpZ25hbGAgdG8gbGlzdGVuIGFuZCBzZXQgdGFibGUgb3B0aW9uXG4gICAgY29uc3QgdXBkYXRlZE9wdGlvbnMgPSBjb21wdXRlZDxUYWJsZU9wdGlvbnNSZXNvbHZlZDxURGF0YT4+KCgpID0+IHtcbiAgICAgIC8vIGxpc3RlbiB0byB0YWJsZSBzdGF0ZSBjaGFuZ2VkXG4gICAgICBjb25zdCB0YWJsZVN0YXRlID0gc3RhdGUoKVxuICAgICAgLy8gbGlzdGVuIHRvIGlucHV0IG9wdGlvbnMgY2hhbmdlZFxuICAgICAgY29uc3QgdGFibGVPcHRpb25zID0gb3B0aW9ucygpXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi50YWJsZS5vcHRpb25zLFxuICAgICAgICAuLi5yZXNvbHZlZE9wdGlvbnMsXG4gICAgICAgIC4uLnRhYmxlT3B0aW9ucyxcbiAgICAgICAgc3RhdGU6IHsgLi4udGFibGVTdGF0ZSwgLi4udGFibGVPcHRpb25zLnN0YXRlIH0sXG4gICAgICAgIG9uU3RhdGVDaGFuZ2U6IHVwZGF0ZXIgPT4ge1xuICAgICAgICAgIGNvbnN0IHZhbHVlID1cbiAgICAgICAgICAgIHVwZGF0ZXIgaW5zdGFuY2VvZiBGdW5jdGlvbiA/IHVwZGF0ZXIodGFibGVTdGF0ZSkgOiB1cGRhdGVyXG4gICAgICAgICAgc3RhdGUuc2V0KHZhbHVlKVxuICAgICAgICAgIHJlc29sdmVkT3B0aW9ucy5vblN0YXRlQ2hhbmdlPy4odXBkYXRlcilcbiAgICAgICAgfSxcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgLy8gY29udmVydCB0YWJsZSBpbnN0YW5jZSB0byBzaWduYWwgZm9yIHByb3hpZnkgdG8gbGlzdGVuIHRvIGFueSB0YWJsZSBzdGF0ZSBhbmQgb3B0aW9ucyBjaGFuZ2VzXG4gICAgY29uc3QgdGFibGVTaWduYWwgPSBjb21wdXRlZChcbiAgICAgICgpID0+IHtcbiAgICAgICAgdGFibGUuc2V0T3B0aW9ucyh1cGRhdGVkT3B0aW9ucygpKVxuICAgICAgICByZXR1cm4gdGFibGVcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGVxdWFsOiAoKSA9PiBmYWxzZSxcbiAgICAgIH1cbiAgICApXG5cbiAgICAvLyBwcm94aWZ5IFRhYmxlIGluc3RhbmNlIHRvIHByb3ZpZGUgYWJpbGl0eSBmb3IgY29uc3VtZXIgdG8gbGlzdGVuIHRvIGFueSB0YWJsZSBzdGF0ZSBjaGFuZ2VzXG4gICAgcmV0dXJuIHByb3hpZnlUYWJsZSh0YWJsZVNpZ25hbClcbiAgfSlcbn1cbiJdfQ==