@dmlibs/dm-cmps 0.2.0 → 0.2.1

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dmlibs/dm-cmps",
3
- "version": "0.2.0",
3
+ "version": "0.2.1",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^22.0.0",
6
6
  "@angular/core": "^22.0.0"
@@ -56,6 +56,7 @@ declare class DmCmpsDataSource<T> implements DmCmpsDataSourceConfig<T> {
56
56
  firstPage(): number;
57
57
  lastPage(): number;
58
58
  getCurrentPageIndex(): number;
59
+ setCurrentPageIndex(index: number): number;
59
60
  getTotalPagesCount(): number;
60
61
  getFirstItemIndexInPage(): number;
61
62
  getLastItemIndexInPage(): number;
@@ -144,6 +145,12 @@ interface DmCmpsDataSourceConfig<T = any> {
144
145
  * @returns Current page index
145
146
  */
146
147
  getCurrentPageIndex: () => number;
148
+ /**
149
+ * Sets the current page index, clamped to the valid range [0, totalPagesCount - 1].
150
+ * @param index Requested page index
151
+ * @returns The applied (clamped) page index
152
+ */
153
+ setCurrentPageIndex: (index: number) => number;
147
154
  /**
148
155
  * Gets the total number of pages.
149
156
  * @returns Total pages count
@@ -822,6 +829,42 @@ interface DmTableColumnState {
822
829
  visible: boolean;
823
830
  order: number;
824
831
  }
832
+ interface DmTableSaveStateOptions {
833
+ /**
834
+ * Persist column visibility/order.
835
+ * @default true
836
+ */
837
+ columns?: boolean;
838
+ /**
839
+ * Persist the paginator page size (page index is never persisted).
840
+ * @default false
841
+ */
842
+ paginator?: boolean;
843
+ /**
844
+ * Persist the sort state.
845
+ * @default false
846
+ */
847
+ sort?: boolean;
848
+ /**
849
+ * Persist the search text term.
850
+ * @default false
851
+ */
852
+ filter?: boolean;
853
+ }
854
+ /** Serializable sort entry — DmCmpsDataSourceSort without sortFn. */
855
+ interface DmTablePersistedSort {
856
+ id?: string;
857
+ field: string;
858
+ direction: 'asc' | 'desc';
859
+ }
860
+ /** The blob stored in localStorage under `dm-table:state:<tableId>`. */
861
+ interface DmTablePersistedState {
862
+ version: 1;
863
+ columns?: DmTableColumnState[];
864
+ pageSize?: number;
865
+ sort?: DmTablePersistedSort[];
866
+ filter?: string;
867
+ }
825
868
  interface DmTablePrintData {
826
869
  headers: string[];
827
870
  rows: string[][];
@@ -1109,6 +1152,13 @@ interface DmTableInterface<T extends object> {
1109
1152
  * @default undefined
1110
1153
  */
1111
1154
  tableId: InputSignal<string | undefined>;
1155
+ /**
1156
+ * Save state - Controls which parts of the table state are persisted to the localStorage
1157
+ * (requires tableId). Columns state is persisted by default; paginator (page size),
1158
+ * sort and filter (search term) are opt-in.
1159
+ * @default { columns: true, paginator: false, sort: false, filter: false }
1160
+ */
1161
+ saveState: InputSignal<DmTableSaveStateOptions | undefined>;
1112
1162
  /**
1113
1163
  * Table data source - An array of objects that will be displayed in the table.
1114
1164
  * @required
@@ -1359,6 +1409,8 @@ declare class DmTable<T extends object> implements DmTableInterface<T> {
1359
1409
  protected DEFAULT_PAGINATOR_SETTINGS: _dmlibs_dm_cmps.DmTablePaginatorSettings;
1360
1410
  protected DEFAULT_TABLE_STYLE: DmTableStyle;
1361
1411
  tableId: _angular_core.InputSignal<string | undefined>;
1412
+ saveState: _angular_core.InputSignal<DmTableSaveStateOptions | undefined>;
1413
+ private readonly saveStateResolved;
1362
1414
  dataSource: _angular_core.InputSignal<T[]>;
1363
1415
  columns: _angular_core.InputSignal<DmTableColumn<T>[]>;
1364
1416
  noDataMessage: _angular_core.InputSignal<string>;
@@ -1398,8 +1450,11 @@ declare class DmTable<T extends object> implements DmTableInterface<T> {
1398
1450
  protected datasource: _angular_core.WritableSignal<DmCmpsDataSource<T>>;
1399
1451
  protected readonly runtimeColumns: _angular_core.Signal<DmTableRuntimeColumn<T>[]>;
1400
1452
  protected hoveredColumnHeaderIndex: _angular_core.WritableSignal<number | null>;
1401
- private columnStateStorage;
1453
+ private stateStorage;
1402
1454
  protected columnState: _angular_core.WritableSignal<DmTableColumnState[] | null>;
1455
+ /** Restored-from-storage or user-chosen page size; wins over paginatorSettings().pageSize. */
1456
+ private persistedPageSize;
1457
+ private restoredForTableId;
1403
1458
  protected readonly visibleRuntimeColumns: _angular_core.Signal<DmTableRuntimeColumn<T>[]>;
1404
1459
  protected readonly visibleColumns: _angular_core.Signal<DmTableColumn<T>[]>;
1405
1460
  private prevColumns;
@@ -1410,6 +1465,7 @@ declare class DmTable<T extends object> implements DmTableInterface<T> {
1410
1465
  protected readonly totalRowStyles: _angular_core.Signal<Map<string, Record<string, any>>>;
1411
1466
  constructor(sanitizer: DomSanitizer);
1412
1467
  private runEffects;
1468
+ private restoreNonColumnState;
1413
1469
  private initColumnState;
1414
1470
  private normalizeColumns;
1415
1471
  private isSameColumnDefinition;
@@ -1465,7 +1521,7 @@ declare class DmTable<T extends object> implements DmTableInterface<T> {
1465
1521
  protected rowDoubleClickHandler(row: T, event: Event): void;
1466
1522
  getDataForPrint: () => DmTablePrintData;
1467
1523
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DmTable<any>, never>;
1468
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<DmTable<any>, "dm-table", never, { "tableId": { "alias": "tableId"; "required": false; "isSignal": true; }; "dataSource": { "alias": "dataSource"; "required": true; "isSignal": true; }; "columns": { "alias": "columns"; "required": true; "isSignal": true; }; "noDataMessage": { "alias": "noDataMessage"; "required": false; "isSignal": true; }; "enableSearch": { "alias": "enableSearch"; "required": false; "isSignal": true; }; "searchPlaceholder": { "alias": "searchPlaceholder"; "required": false; "isSignal": true; }; "clearSearchTooltip": { "alias": "clearSearchTooltip"; "required": false; "isSignal": true; }; "searchInputAppearance": { "alias": "searchInputAppearance"; "required": false; "isSignal": true; }; "filterPredicate": { "alias": "filterPredicate"; "required": false; "isSignal": true; }; "enableSperatedSearch": { "alias": "enableSperatedSearch"; "required": false; "isSignal": true; }; "actionButtons": { "alias": "actionButtons"; "required": false; "isSignal": true; }; "enablePrint": { "alias": "enablePrint"; "required": false; "isSignal": true; }; "printButton": { "alias": "printButton"; "required": false; "isSignal": true; }; "enablePagination": { "alias": "enablePagination"; "required": false; "isSignal": true; }; "autoPaginationAboveRowsCount": { "alias": "autoPaginationAboveRowsCount"; "required": false; "isSignal": true; }; "paginatorSettings": { "alias": "paginatorSettings"; "required": false; "isSignal": true; }; "enableLoadingProgressbar": { "alias": "enableLoadingProgressbar"; "required": false; "isSignal": true; }; "enableColumnsDragAndDrop": { "alias": "enableColumnsDragAndDrop"; "required": false; "isSignal": true; }; "enableColumnsDragHandle": { "alias": "enableColumnsDragHandle"; "required": false; "isSignal": true; }; "enableTotalRow": { "alias": "enableTotalRow"; "required": false; "isSignal": true; }; "tableStyle": { "alias": "tableStyle"; "required": false; "isSignal": true; }; "tableClasses": { "alias": "tableClasses"; "required": false; "isSignal": true; }; "rowStyleFn": { "alias": "rowStyleFn"; "required": false; "isSignal": true; }; "disableRowHoverStyling": { "alias": "disableRowHoverStyling"; "required": false; "isSignal": true; }; "editColumnsVisibility": { "alias": "editColumnsVisibility"; "required": false; "isSignal": true; }; "editColumnsVisibilityButton": { "alias": "editColumnsVisibilityButton"; "required": false; "isSignal": true; }; "editColumnsVisibilitySelectAllLabel": { "alias": "editColumnsVisibilitySelectAllLabel"; "required": false; "isSignal": true; }; "onRowDoubleClick": { "alias": "onRowDoubleClick"; "required": false; "isSignal": true; }; "enableLogs": { "alias": "enableLogs"; "required": false; "isSignal": true; }; "rowIdentifierField": { "alias": "rowIdentifierField"; "required": false; "isSignal": true; }; }, { "rowDoubleClick": "rowDoubleClick"; }, never, never, true, never>;
1524
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DmTable<any>, "dm-table", never, { "tableId": { "alias": "tableId"; "required": false; "isSignal": true; }; "saveState": { "alias": "saveState"; "required": false; "isSignal": true; }; "dataSource": { "alias": "dataSource"; "required": true; "isSignal": true; }; "columns": { "alias": "columns"; "required": true; "isSignal": true; }; "noDataMessage": { "alias": "noDataMessage"; "required": false; "isSignal": true; }; "enableSearch": { "alias": "enableSearch"; "required": false; "isSignal": true; }; "searchPlaceholder": { "alias": "searchPlaceholder"; "required": false; "isSignal": true; }; "clearSearchTooltip": { "alias": "clearSearchTooltip"; "required": false; "isSignal": true; }; "searchInputAppearance": { "alias": "searchInputAppearance"; "required": false; "isSignal": true; }; "filterPredicate": { "alias": "filterPredicate"; "required": false; "isSignal": true; }; "enableSperatedSearch": { "alias": "enableSperatedSearch"; "required": false; "isSignal": true; }; "actionButtons": { "alias": "actionButtons"; "required": false; "isSignal": true; }; "enablePrint": { "alias": "enablePrint"; "required": false; "isSignal": true; }; "printButton": { "alias": "printButton"; "required": false; "isSignal": true; }; "enablePagination": { "alias": "enablePagination"; "required": false; "isSignal": true; }; "autoPaginationAboveRowsCount": { "alias": "autoPaginationAboveRowsCount"; "required": false; "isSignal": true; }; "paginatorSettings": { "alias": "paginatorSettings"; "required": false; "isSignal": true; }; "enableLoadingProgressbar": { "alias": "enableLoadingProgressbar"; "required": false; "isSignal": true; }; "enableColumnsDragAndDrop": { "alias": "enableColumnsDragAndDrop"; "required": false; "isSignal": true; }; "enableColumnsDragHandle": { "alias": "enableColumnsDragHandle"; "required": false; "isSignal": true; }; "enableTotalRow": { "alias": "enableTotalRow"; "required": false; "isSignal": true; }; "tableStyle": { "alias": "tableStyle"; "required": false; "isSignal": true; }; "tableClasses": { "alias": "tableClasses"; "required": false; "isSignal": true; }; "rowStyleFn": { "alias": "rowStyleFn"; "required": false; "isSignal": true; }; "disableRowHoverStyling": { "alias": "disableRowHoverStyling"; "required": false; "isSignal": true; }; "editColumnsVisibility": { "alias": "editColumnsVisibility"; "required": false; "isSignal": true; }; "editColumnsVisibilityButton": { "alias": "editColumnsVisibilityButton"; "required": false; "isSignal": true; }; "editColumnsVisibilitySelectAllLabel": { "alias": "editColumnsVisibilitySelectAllLabel"; "required": false; "isSignal": true; }; "onRowDoubleClick": { "alias": "onRowDoubleClick"; "required": false; "isSignal": true; }; "enableLogs": { "alias": "enableLogs"; "required": false; "isSignal": true; }; "rowIdentifierField": { "alias": "rowIdentifierField"; "required": false; "isSignal": true; }; }, { "rowDoubleClick": "rowDoubleClick"; }, never, never, true, never>;
1469
1525
  }
1470
1526
 
1471
1527
  declare class DmIcon {
@@ -1734,4 +1790,4 @@ declare class DmRunOncePipe implements PipeTransform {
1734
1790
  }
1735
1791
 
1736
1792
  export { DmCmpsDataSource, DmColorPicker, DmDatePipe, DmDateService, DmFilterByPipe, DmIcon, DmMatSelect, DmRunOncePipe, DmRunOncePipeSevice, DmSpinner, DmSpinnerService, DmTable };
1737
- export type { DmCmpsDataSourceSort, DmSelectOnSelectionChange, DmTableActionButton, DmTableClasses, DmTableColumn, DmTableColumnHeaderMenuItem, DmTablePaginatorSettings, DmTablePrintData, DmTableRowActionButton, DmTableRowDoubleClickEvent, DmTableStyle };
1793
+ export type { DmCmpsDataSourceSort, DmSelectOnSelectionChange, DmTableActionButton, DmTableClasses, DmTableColumn, DmTableColumnHeaderMenuItem, DmTableColumnState, DmTablePaginatorSettings, DmTablePersistedSort, DmTablePersistedState, DmTablePrintData, DmTableRowActionButton, DmTableRowDoubleClickEvent, DmTableSaveStateOptions, DmTableStyle };