UNPKG

@tanstack/angular-table

Version:

Headless UI for building powerful tables & datagrids for Angular.

49 lines 7.39 kB
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==