UNPKG

@rxap/material-table-system

Version:

This package provides a set of Angular directives, components, and services to enhance and customize Angular Material tables. It includes features such as row selection, column filtering, expandable rows, table actions, and more. The goal is to simplify c

1,269 lines (1,098 loc) 50.9 kB
<!doctype html> <html class="no-js" lang=""> <head> <meta charset="utf-8"> <meta http-equiv="x-ua-compatible" content="ie=edge"> <title>angular-material-table-system</title> <meta name="description" content=""> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="icon" type="image/x-icon" href="../images/favicon.ico"> <link rel="stylesheet" href="../styles/style.css"> <link rel="stylesheet" href="../styles/dark.css"> </head> <body> <script> // Blocking script to avoid flickering dark mode // Dark mode toggle button var useDark = window.matchMedia('(prefers-color-scheme: dark)'); var darkModeState = useDark.matches; var $darkModeToggleSwitchers = document.querySelectorAll('.dark-mode-switch input'); var $darkModeToggles = document.querySelectorAll('.dark-mode-switch'); var darkModeStateLocal = localStorage.getItem('compodoc_darkmode-state'); function checkToggle(check) { for (var i = 0; i < $darkModeToggleSwitchers.length; i++) { $darkModeToggleSwitchers[i].checked = check; } } function toggleDarkMode(state) { if (window.localStorage) { localStorage.setItem('compodoc_darkmode-state', state); } checkToggle(state); const hasClass = document.body.classList.contains('dark'); if (state) { for (var i = 0; i < $darkModeToggles.length; i++) { $darkModeToggles[i].classList.add('dark'); } if (!hasClass) { document.body.classList.add('dark'); } } else { for (var i = 0; i < $darkModeToggles.length; i++) { $darkModeToggles[i].classList.remove('dark'); } if (hasClass) { document.body.classList.remove('dark'); } } } useDark.addEventListener('change', function (evt) { toggleDarkMode(evt.matches); }); if (darkModeStateLocal) { darkModeState = darkModeStateLocal === 'true'; } toggleDarkMode(darkModeState); </script> <div class="navbar navbar-default navbar-fixed-top d-md-none p-0"> <div class="d-flex"> <a href="../" class="navbar-brand">angular-material-table-system</a> <button type="button" class="btn btn-default btn-menu ion-ios-menu" id="btn-menu"></button> </div> </div> <div class="xs-menu menu" id="mobile-menu"> <div id="book-search-input" role="search"><input type="text" placeholder="Type to search"></div> <compodoc-menu></compodoc-menu> </div> <div class="container-fluid main"> <div class="row main"> <div class="d-none d-md-block menu"> <compodoc-menu mode="normal"></compodoc-menu> </div> <!-- START CONTENT --> <div class="content directive"> <div class="content-data"> <ol class="breadcrumb"> <li class="breadcrumb-item">Directives</li> <li class="breadcrumb-item" >TableDataSourceDirective</li> </ol> <ul class="nav nav-tabs" role="tablist"> <li class="nav-item"> <a href="#info" class="nav-link" class="nav-link active" role="tab" id="info-tab" data-bs-toggle="tab" data-link="info">Info</a> </li> <li class="nav-item"> <a href="#source" class="nav-link" role="tab" id="source-tab" data-bs-toggle="tab" data-link="source">Source</a> </li> </ul> <div class="tab-content"> <div class="tab-pane fade active in" id="info"> <p class="comment"> <h3>File</h3> </p> <p class="comment"> <code>src/lib/table-data-source.directive.ts</code> </p> <p class="comment"> <h3>Implements</h3> </p> <p class="comment"> <code>OnInit</code> <code>OnDestroy</code> </p> <section data-compodoc="block-metadata"> <h3>Metadata</h3> <table class="table table-sm table-hover metadata"> <tbody> <tr> <td class="col-md-3">Selector</td> <td class="col-md-9"><code>table[mat-table][rxapTableDataSource],mat-table[rxapTableDataSource]</code></td> </tr> <tr> <td class="col-md-3">Standalone</td> <td class="col-md-9"><code>true</code></td> </tr> <tr> <td class="col-md-3">exportAs</td> <td class="col-md-9"><code>rxapTableDataSource</code></td> </tr> </tbody> </table> </section> <section data-compodoc="block-index"> <h3 id="index">Index</h3> <table class="table table-sm table-bordered index-table"> <tbody> <tr> <td class="col-md-4"> <h6><b>Properties</b></h6> </td> </tr> <tr> <td class="col-md-4"> <ul class="index-list"> <li> <span class="modifier">Protected</span> <a href="#_subscription" >_subscription</a> </li> <li> <span class="modifier">Public</span> <span class="modifier">Readonly</span> <a href="#error$" >error$</a> </li> <li> <span class="modifier">Public</span> <span class="modifier">Readonly</span> <a href="#hasError$" >hasError$</a> </li> <li> <span class="modifier">Public</span> <span class="modifier">Readonly</span> <a href="#loading$" >loading$</a> </li> <li> <span class="modifier">Public</span> <span class="modifier">Optional</span> <a href="#method" >method</a> </li> </ul> </td> </tr> <tr> <td class="col-md-4"> <h6><b>Methods</b></h6> </td> </tr> <tr> <td class="col-md-4"> <ul class="index-list"> <li> <span class="modifier">Public</span> <a href="#refresh" >refresh</a> </li> <li> <span class="modifier">Public</span> <a href="#reset" >reset</a> </li> <li> <span class="modifier">Public</span> <a href="#retry" >retry</a> </li> </ul> </td> </tr> <tr> <td class="col-md-4"> <h6><b>Inputs</b></h6> </td> </tr> <tr> <td class="col-md-4"> <ul class="index-list"> <li> <a href="#dataSource" >dataSource</a> </li> <li> <a href="#id" >id</a> </li> <li> <a href="#paginator" >paginator</a> </li> <li> <a href="#parameters" >parameters</a> </li> <li> <a href="#rxapTableDataSource" class="deprecated-name">rxapTableDataSource</a> </li> </ul> </td> </tr> <tr> <td class="col-md-4"> <h6><b>Accessors</b></h6> </td> </tr> <tr> <td class="col-md-4"> <ul class="index-list"> <li> <a href="#setDataSource" >setDataSource</a> </li> <li> <a href="#lastRefreshed" >lastRefreshed</a> </li> <li> <a href="#remoteMethod" >remoteMethod</a> </li> <li> <a href="#sourceRemoteMethod" >sourceRemoteMethod</a> </li> </ul> </td> </tr> </tbody> </table> </section> <section data-compodoc="block-constructor"> <h3 id="constructor">Constructor</h3> <table class="table table-sm table-bordered"> <tbody> <tr> <td class="col-md-4"> <code>constructor(matTable: CdkTable<Data>, cdr: ChangeDetectorRef, sourceMethod: Method<[] | any | TableEvent | any> | null, sourceDataSource: AbstractTableDataSource<Data> | null, adapterFactory: <a href="https://www.typescriptlang.org/docs/handbook/basic-types.html" target="_blank">any</a>, matSort: MatSort | null, tableFilter: <a href="../injectables/TableFilterService.html" target="_self">TableFilterService | null</a>, _tableFilter: FilterLike | null)</code> </td> </tr> <tr> <td class="col-md-4"> <div class="io-line">Defined in <a href="" data-line="117" class="link-to-prism">src/lib/table-data-source.directive.ts:117</a></div> </td> </tr> <tr> <td class="col-md-4"> <div> <b>Parameters :</b> <table class="params"> <thead> <tr> <td>Name</td> <td>Type</td> <td>Optional</td> </tr> </thead> <tbody> <tr> <td>matTable</td> <td> <code>CdkTable&lt;Data&gt;</code> </td> <td> No </td> </tr> <tr> <td>cdr</td> <td> <code>ChangeDetectorRef</code> </td> <td> No </td> </tr> <tr> <td>sourceMethod</td> <td> <code>Method&lt;[] | any | TableEvent | any&gt; | null</code> </td> <td> No </td> </tr> <tr> <td>sourceDataSource</td> <td> <code>AbstractTableDataSource&lt;Data&gt; | null</code> </td> <td> No </td> </tr> <tr> <td>adapterFactory</td> <td> <code><a href="https://www.typescriptlang.org/docs/handbook/basic-types.html" target="_blank" >any</a></code> </td> <td> No </td> </tr> <tr> <td>matSort</td> <td> <code>MatSort | null</code> </td> <td> No </td> </tr> <tr> <td>tableFilter</td> <td> <code><a href="../injectables/TableFilterService.html" target="_self" >TableFilterService | null</a></code> </td> <td> No </td> </tr> <tr> <td>_tableFilter</td> <td> <code>FilterLike | null</code> </td> <td> No </td> </tr> </tbody> </table> </div> </td> </tr> </tbody> </table> </section> <section data-compodoc="block-inputs"> <h3 id="inputs">Inputs</h3> <table class="table table-sm table-bordered"> <tbody> <tr> <td class="col-md-4"> <a name="dataSource"></a> <b>dataSource</b> </td> </tr> <tr> <td class="col-md-4"> <i>Type : </i> <code>AbstractTableDataSource&lt;Data&gt;</code> </td> </tr> <tr> <td class="col-md-2" colspan="2"> <div class="io-line">Defined in <a href="" data-line="85" class="link-to-prism">src/lib/table-data-source.directive.ts:85</a></div> </td> </tr> </tbody> </table> <table class="table table-sm table-bordered"> <tbody> <tr> <td class="col-md-4"> <a name="id"></a> <b>id</b> </td> </tr> <tr> <td class="col-md-4"> <i>Type : </i> <code><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/string" target="_blank" >string</a></code> </td> </tr> <tr> <td class="col-md-4"> <i>Required : </i>&nbsp;<b>true</b> </td> </tr> <tr> <td class="col-md-2" colspan="2"> <div class="io-line">Defined in <a href="" data-line="81" class="link-to-prism">src/lib/table-data-source.directive.ts:81</a></div> </td> </tr> </tbody> </table> <table class="table table-sm table-bordered"> <tbody> <tr> <td class="col-md-4"> <a name="paginator"></a> <b>paginator</b> </td> </tr> <tr> <td class="col-md-4"> <i>Type : </i> <code>MatPaginator</code> </td> </tr> <tr> <td class="col-md-2" colspan="2"> <div class="io-line">Defined in <a href="" data-line="76" class="link-to-prism">src/lib/table-data-source.directive.ts:76</a></div> </td> </tr> </tbody> </table> <table class="table table-sm table-bordered"> <tbody> <tr> <td class="col-md-4"> <a name="parameters"></a> <b>parameters</b> </td> </tr> <tr> <td class="col-md-4"> <i>Type : </i> <code>Observable&lt;Record&lt;string, any&gt;&gt;</code> </td> </tr> <tr> <td class="col-md-2" colspan="2"> <div class="io-line">Defined in <a href="" data-line="83" class="link-to-prism">src/lib/table-data-source.directive.ts:83</a></div> </td> </tr> </tbody> </table> <table class="table table-sm table-bordered"> <tbody> <tr> <td class="col-md-4"> <a name="rxapTableDataSource"></a> <b>rxapTableDataSource</b> </td> </tr> <tr> <td class="col-md-4"> <i>Type : </i> <code>AbstractTableDataSource | string</code> </td> </tr> <tr> <td class="col-md-2" colspan="2"> <div class="io-line">Defined in <a href="" data-line="69" class="link-to-prism">src/lib/table-data-source.directive.ts:69</a></div> </td> </tr> </tbody> </table> </section> <section data-compodoc="block-methods"> <h3 id="methods"> Methods </h3> <table class="table table-sm table-bordered"> <tbody> <tr> <td class="col-md-4"> <a name="refresh"></a> <span class="name"> <span class="modifier">Public</span> <span ><b>refresh</b></span> <a href="#refresh"><span class="icon ion-ios-link"></span></a> </span> </td> </tr> <tr> <td class="col-md-4"> <span class="modifier-icon icon ion-ios-reset"></span> <code>refresh()</code> </td> </tr> <tr> <td class="col-md-4"> <div class="io-line">Defined in <a href="" data-line="235" class="link-to-prism">src/lib/table-data-source.directive.ts:235</a></div> </td> </tr> <tr> <td class="col-md-4"> <div class="io-description"> <b>Returns : </b> <code><a href="https://www.typescriptlang.org/docs/handbook/basic-types.html" target="_blank" >void</a></code> </div> </td> </tr> </tbody> </table> <table class="table table-sm table-bordered"> <tbody> <tr> <td class="col-md-4"> <a name="reset"></a> <span class="name"> <span class="modifier">Public</span> <span ><b>reset</b></span> <a href="#reset"><span class="icon ion-ios-link"></span></a> </span> </td> </tr> <tr> <td class="col-md-4"> <span class="modifier-icon icon ion-ios-reset"></span> <code>reset()</code> </td> </tr> <tr> <td class="col-md-4"> <div class="io-line">Defined in <a href="" data-line="243" class="link-to-prism">src/lib/table-data-source.directive.ts:243</a></div> </td> </tr> <tr> <td class="col-md-4"> <div class="io-description"> <b>Returns : </b> <code><a href="https://www.typescriptlang.org/docs/handbook/basic-types.html" target="_blank" >void</a></code> </div> </td> </tr> </tbody> </table> <table class="table table-sm table-bordered"> <tbody> <tr> <td class="col-md-4"> <a name="retry"></a> <span class="name"> <span class="modifier">Public</span> <span ><b>retry</b></span> <a href="#retry"><span class="icon ion-ios-link"></span></a> </span> </td> </tr> <tr> <td class="col-md-4"> <span class="modifier-icon icon ion-ios-reset"></span> <code>retry()</code> </td> </tr> <tr> <td class="col-md-4"> <div class="io-line">Defined in <a href="" data-line="239" class="link-to-prism">src/lib/table-data-source.directive.ts:239</a></div> </td> </tr> <tr> <td class="col-md-4"> <div class="io-description"> <b>Returns : </b> <code><a href="https://www.typescriptlang.org/docs/handbook/basic-types.html" target="_blank" >void</a></code> </div> </td> </tr> </tbody> </table> </section> <section data-compodoc="block-properties"> <h3 id="inputs"> Properties </h3> <table class="table table-sm table-bordered"> <tbody> <tr> <td class="col-md-4"> <a name="_subscription"></a> <span class="name"> <span class="modifier">Protected</span> <span ><b>_subscription</b></span> <a href="#_subscription"><span class="icon ion-ios-link"></span></a> </span> </td> </tr> <tr> <td class="col-md-4"> <i>Default value : </i><code>new Subscription()</code> </td> </tr> <tr> <td class="col-md-4"> <div class="io-line">Defined in <a href="" data-line="114" class="link-to-prism">src/lib/table-data-source.directive.ts:114</a></div> </td> </tr> </tbody> </table> <table class="table table-sm table-bordered"> <tbody> <tr> <td class="col-md-4"> <a name="error$"></a> <span class="name"> <span class="modifier">Public</span> <span class="modifier">Readonly</span> <span ><b>error$</b></span> <a href="#error$"><span class="icon ion-ios-link"></span></a> </span> </td> </tr> <tr> <td class="col-md-4"> <i>Default value : </i><code>new Subject&lt;unknown&gt;()</code> </td> </tr> <tr> <td class="col-md-4"> <div class="io-line">Defined in <a href="" data-line="91" class="link-to-prism">src/lib/table-data-source.directive.ts:91</a></div> </td> </tr> </tbody> </table> <table class="table table-sm table-bordered"> <tbody> <tr> <td class="col-md-4"> <a name="hasError$"></a> <span class="name"> <span class="modifier">Public</span> <span class="modifier">Readonly</span> <span ><b>hasError$</b></span> <a href="#hasError$"><span class="icon ion-ios-link"></span></a> </span> </td> </tr> <tr> <td class="col-md-4"> <i>Default value : </i><code>new ToggleSubject()</code> </td> </tr> <tr> <td class="col-md-4"> <div class="io-line">Defined in <a href="" data-line="89" class="link-to-prism">src/lib/table-data-source.directive.ts:89</a></div> </td> </tr> </tbody> </table> <table class="table table-sm table-bordered"> <tbody> <tr> <td class="col-md-4"> <a name="loading$"></a> <span class="name"> <span class="modifier">Public</span> <span class="modifier">Readonly</span> <span ><b>loading$</b></span> <a href="#loading$"><span class="icon ion-ios-link"></span></a> </span> </td> </tr> <tr> <td class="col-md-4"> <i>Default value : </i><code>new ToggleSubject(true)</code> </td> </tr> <tr> <td class="col-md-4"> <div class="io-line">Defined in <a href="" data-line="78" class="link-to-prism">src/lib/table-data-source.directive.ts:78</a></div> </td> </tr> </tbody> </table> <table class="table table-sm table-bordered"> <tbody> <tr> <td class="col-md-4"> <a name="method"></a> <span class="name"> <span class="modifier">Public</span> <span class="modifier">Optional</span> <span ><b>method</b></span> <a href="#method"><span class="icon ion-ios-link"></span></a> </span> </td> </tr> <tr> <td class="col-md-4"> <i>Type : </i> <code>Method&lt;Data[] | TableEvent&gt;</code> </td> </tr> <tr> <td class="col-md-4"> <div class="io-line">Defined in <a href="" data-line="87" class="link-to-prism">src/lib/table-data-source.directive.ts:87</a></div> </td> </tr> </tbody> </table> </section> <section data-compodoc="block-accessors"> <h3 id="accessors"> Accessors </h3> <table class="table table-sm table-bordered"> <tbody> <tr> <td class="col-md-4"> <a name="setDataSource"></a> <span class="name"><b>setDataSource</b><a href="#setDataSource"><span class="icon ion-ios-link"></span></a></span> </td> </tr> <tr> <td class="col-md-4"> <span class="accessor"><b>set</b><code>setDataSource(dataSource: AbstractTableDataSource<Data> | string)</code></span> </td> </tr> <tr> <td class="col-md-4"> <div class="io-line">Defined in <a href="" data-line="69" class="link-to-prism">src/lib/table-data-source.directive.ts:69</a></div> </td> </tr> <tr> <td class="col-md-4"> <div class="io-description"> <b>Parameters :</b> <table class="params"> <thead> <tr> <td>Name</td> <td>Type</td> <td>Optional</td> </tr> </thead> <tbody> <tr> <td>dataSource</td> <td> <code>AbstractTableDataSource&lt;Data&gt; | string</code> </td> <td> No </td> </tr> </tbody> </table> </div> <div> </div> <div class="io-description"> <b>Returns : </b> <code><a href="https://www.typescriptlang.org/docs/handbook/basic-types.html" target="_blank" >void</a></code> </div> </td> </tr> </tbody> </table> <table class="table table-sm table-bordered"> <tbody> <tr> <td class="col-md-4"> <a name="lastRefreshed"></a> <span class="name"><b>lastRefreshed</b><a href="#lastRefreshed"><span class="icon ion-ios-link"></span></a></span> </td> </tr> <tr> <td class="col-md-4"> <span class="accessor"><b>get</b><code>lastRefreshed()</code></span> </td> </tr> <tr> <td class="col-md-4"> <div class="io-line">Defined in <a href="" data-line="93" class="link-to-prism">src/lib/table-data-source.directive.ts:93</a></div> </td> </tr> </tbody> </table> <table class="table table-sm table-bordered"> <tbody> <tr> <td class="col-md-4"> <a name="remoteMethod"></a> <span class="name"><b>remoteMethod</b><a href="#remoteMethod"><span class="icon ion-ios-link"></span></a></span> </td> </tr> <tr> <td class="col-md-4"> <span class="accessor"><b>get</b><code>remoteMethod()</code></span> </td> </tr> <tr> <td class="col-md-4"> <div class="io-line">Defined in <a href="" data-line="100" class="link-to-prism">src/lib/table-data-source.directive.ts:100</a></div> </td> </tr> <tr> <td class="col-md-4"> <div> </div> <div class="io-description"> <b>Returns : </b> <code>Method | undefined</code> </div> </td> </tr> </tbody> </table> <table class="table table-sm table-bordered"> <tbody> <tr> <td class="col-md-4"> <a name="sourceRemoteMethod"></a> <span class="name"><b>sourceRemoteMethod</b><a href="#sourceRemoteMethod"><span class="icon ion-ios-link"></span></a></span> </td> </tr> <tr> <td class="col-md-4"> <span class="accessor"><b>get</b><code>sourceRemoteMethod()</code></span> </td> </tr> <tr> <td class="col-md-4"> <div class="io-line">Defined in <a href="" data-line="107" class="link-to-prism">src/lib/table-data-source.directive.ts:107</a></div> </td> </tr> <tr> <td class="col-md-4"> <div> </div> <div class="io-description"> <b>Returns : </b> <code>Method | null</code> </div> </td> </tr> </tbody> </table> </section> </div> <div class="tab-pane fade tab-source-code" id="source"> <pre class="line-numbers compodoc-sourcecode"><code class="language-typescript">import { CdkTable } from &#x27;@angular/cdk/table&#x27;; import { ChangeDetectorRef, Directive, Inject, InjectionToken, Input, isDevMode, OnDestroy, OnInit, Optional, } from &#x27;@angular/core&#x27;; import type { MatPaginator } from &#x27;@angular/material/paginator&#x27;; import { MatSort } from &#x27;@angular/material/sort&#x27;; import { pipeDataSource } from &#x27;@rxap/data-source&#x27;; import { PaginatorLike } from &#x27;@rxap/data-source/pagination&#x27;; import { AbstractTableDataSource, DynamicTableDataSource, FilterLike, RXAP_TABLE_METHOD, SortLike, TableEvent, } from &#x27;@rxap/data-source/table&#x27;; import { Method } from &#x27;@rxap/pattern&#x27;; import { ToggleSubject } from &#x27;@rxap/rxjs&#x27;; import { Observable, Subject, Subscription, } from &#x27;rxjs&#x27;; import { tap } from &#x27;rxjs/operators&#x27;; import { TableFilterService } from &#x27;./table-filter/table-filter.service&#x27;; export { RXAP_TABLE_METHOD } from &#x27;@rxap/data-source/table&#x27;; /** * @deprecated use TABLE_METHOD instead */ export const TABLE_REMOTE_METHOD &#x3D; RXAP_TABLE_METHOD; export const TABLE_REMOTE_METHOD_ADAPTER_FACTORY &#x3D; new InjectionToken( &#x27;table-remote-method-adapter-factory&#x27;, ); export const RXAP_TABLE_FILTER &#x3D; new InjectionToken(&#x27;rxap/material-table-system/table-filter&#x27;); export const TABLE_DATA_SOURCE &#x3D; new InjectionToken(&#x27;table-data-source&#x27;); export type TableRemoteMethodAdapterFactory&lt; Data extends Record&lt;string, any&gt; &#x3D; Record&lt;string, any&gt; &gt; &#x3D; ( method: Method, paginator?: PaginatorLike, sort?: SortLike | null, filter?: FilterLike | null, parameters?: Observable&lt;Record&lt;string, any&gt;&gt;, ) &#x3D;&gt; Method&lt;Data[], TableEvent&gt;; @Directive({ selector: &#x27;table[mat-table][rxapTableDataSource],mat-table[rxapTableDataSource]&#x27;, exportAs: &#x27;rxapTableDataSource&#x27;, standalone: true, }) export class TableDataSourceDirective&lt;Data extends Record&lt;string, any&gt; &#x3D; any&gt; implements OnInit, OnDestroy { /** * @deprecated use dataSource instead */ // eslint-disable-next-line @angular-eslint/no-input-rename @Input(&#x27;rxapTableDataSource&#x27;) public set setDataSource(dataSource: AbstractTableDataSource&lt;Data&gt; | &#x27;&#x27;) { if (typeof dataSource !&#x3D;&#x3D; &#x27;string&#x27;) { this.dataSource &#x3D; dataSource; } } @Input() public paginator?: MatPaginator; public readonly loading$ &#x3D; new ToggleSubject(true); @Input({ required: true }) public id!: string; @Input() public parameters?: Observable&lt;Record&lt;string, any&gt;&gt;; @Input() public dataSource?: AbstractTableDataSource&lt;Data&gt;; public method?: Method&lt;Data[], TableEvent&gt;; public readonly hasError$ &#x3D; new ToggleSubject(); public readonly error$ &#x3D; new Subject&lt;unknown&gt;(); public get lastRefreshed(): Date | null { return this.dataSource?.lastRefreshed ?? null; } /** * @deprecated use method instead */ public get remoteMethod(): Method&lt;Data[], TableEvent&gt; | undefined { return this.method; } /** * @deprecated use sourceMethod instead */ public get sourceRemoteMethod(): Method&lt; Data[] | any, TableEvent | any &gt; | null { return this.sourceMethod; } protected _subscription &#x3D; new Subscription(); private readonly adapterFactory: TableRemoteMethodAdapterFactory&lt;Data&gt; | null &#x3D; null; constructor( @Inject(CdkTable) private readonly matTable: CdkTable&lt;Data&gt;, protected readonly cdr: ChangeDetectorRef, @Optional() @Inject(RXAP_TABLE_METHOD) private readonly sourceMethod: Method&lt;Data[] | any, TableEvent | any&gt; | null, @Optional() @Inject(TABLE_DATA_SOURCE) private readonly sourceDataSource: AbstractTableDataSource&lt;Data&gt; | null, @Optional() @Inject(TABLE_REMOTE_METHOD_ADAPTER_FACTORY) adapterFactory: any, @Optional() @Inject(MatSort) private readonly matSort: MatSort | null, @Optional() @Inject(TableFilterService) private readonly tableFilter: TableFilterService | null, @Optional() @Inject(RXAP_TABLE_FILTER) private readonly _tableFilter: FilterLike | null, ) { this.matTable.trackBy &#x3D; this.trackBy; this.adapterFactory &#x3D; adapterFactory; this.retry &#x3D; this.retry.bind(this); this.refresh &#x3D; this.refresh.bind(this); this.reset &#x3D; this.reset.bind(this); } private trackBy(index: number, item: Data): string | number { return item[&#x27;uuid&#x27;] ?? index; } public ngOnInit() { const tableFilter &#x3D; this._tableFilter ?? this.tableFilter ?? undefined; if (!this.dataSource) { if (this.sourceDataSource) { this.dataSource &#x3D; this.sourceDataSource; } else if (this.sourceMethod) { if (this.adapterFactory) { this.method &#x3D; this.adapterFactory( this.sourceMethod, this.paginator, this.matSort, tableFilter, this.parameters, ); } else { this.method &#x3D; this.sourceMethod; } this.dataSource &#x3D; new DynamicTableDataSource&lt;Data&gt;( this.method, this.paginator, this.matSort, tableFilter, this.parameters, this.method.metadata ?? { id: this.id }, ); } if (!this.dataSource) { throw new Error( &#x27;The TABLE_DATA_SOURCE and RXAP_TABLE_METHOD token are not defined!&#x27;, ); } } this.dataSource.paginator &#x3D; this.paginator; this.dataSource.sort &#x3D; this.matSort ?? undefined; this.dataSource.filter &#x3D; tableFilter; this.dataSource.parameters &#x3D; this.parameters; if (this.dataSource instanceof DynamicTableDataSource) { this.dataSource.setPaginator(this.paginator, this.id); this.dataSource.setSort(this.matSort, this.id); this.dataSource.setFilter(tableFilter, this.id); this.dataSource.setParameters(this.parameters, this.id); } this._subscription.add( this.dataSource.loading$.pipe( tap(loading &#x3D;&gt; this.loading$.next(!!loading)), ).subscribe(), ); this._subscription.add( this.dataSource.hasError$.pipe( tap(hasError &#x3D;&gt; this.hasError$.next(!!hasError)), ).subscribe(), ); this._subscription.add( this.dataSource.error$.pipe( tap(error &#x3D;&gt; this.error$.next(error)), ).subscribe(), ); // create the id property for the mat table component. // the instance of the mat table component is used as viewer object // with the set of the id property it is possible to use the same data source // instance for multiple table component simultaneously // on connect the data source can then use the correct paginator/matSort/tableFilter/parameters instance // to create the TableEvent objects Reflect.set(this.matTable, &#x27;id&#x27;, this.id); this.matTable.dataSource &#x3D; pipeDataSource(this.dataSource, tap(rowList &#x3D;&gt; { if (rowList.some((element: any) &#x3D;&gt; !element.__metadata__)) { if (isDevMode()) { console.debug(&#x27;Ensure to use the NormalizeTableRow function to normalize the table row!&#x27;); } rowList.forEach((element: any) &#x3D;&gt; { element.__metadata__ ??&#x3D; {}; element.__metadata__.loading$ ??&#x3D; new ToggleSubject(); }); } })); } public ngOnDestroy() { this._subscription?.unsubscribe(); } public refresh() { this.dataSource?.refresh(); } public retry() { this.dataSource?.retry(); } public reset() { if (this.tableFilter) { this.tableFilter.reset(); } else { this.dataSource?.reset(); } } } </code></pre> </div> </div> </div><div class="search-results"> <div class="has-results"> <h1 class="search-results-title"><span class='search-results-count'></span> results matching "<span class='search-query'></span>"</h1> <ul class="search-results-list"></ul> </div> <div class="no-results"> <h1 class="search-results-title">No results matching "<span class='search-query'></span>"</h1> </div> </div> </div> <!-- END CONTENT --> </div> </div> <label class="dark-mode-switch"> <input type="checkbox"> <span class="slider"> <svg class="slider-icon" viewBox="0 0 24 24" fill="none" height="20" stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" width="20" xmlns="http://www.w3.org/2000/svg"> <path d="M21 12.79A9 9 0 1111.21 3 7 7 0 0021 12.79z"></path> </svg> </span> </label> <script> var COMPODOC_CURRENT_PAGE_DEPTH = 1; var COMPODOC_CURRENT_PAGE_CONTEXT = 'directive'; var COMPODOC_CURRENT_PAGE_URL = 'TableDataSourceDirective.html'; var MAX_SEARCH_RESULTS = 15; </script> <script> $darkModeToggleSwitchers = document.querySelectorAll('.dark-mode-switch input'); checkToggle(darkModeState); if ($darkModeToggleSwitchers.length > 0) { for (var i = 0; i < $darkModeToggleSwitchers.length; i++) { $darkModeToggleSwitchers[i].addEventListener('change', function (event) { darkModeState = !darkModeState; toggleDarkMode(darkModeState); }); } } </script> <script src="../js/libs/custom-elements.min.js"></script> <script src="../js/libs/lit-html.js"></script> <script src="../js/menu-wc.js" defer></script> <script nomodule src="../js/menu-wc_es5.js" defer></script> <script s