Директива qTableSave
Директива qTableSave позволяет сохранять такие табличные настройки как: ширина столбцов и порядок столбцов, параметры пагинации, сортировка, параметры табличных фильтров.
С чего начать
Установите библиотеку
npm install @diasoft/qpalette-table-addons
Импортируйте модуль сохранения табличных настроек:
import { QTableSaveModule } from '@diasoft/qpalette-table-addons';
imports: [
...
QTableSaveModule,
...
]
Встройте директиву в тег таблицы и укажите в ней необходимый табличный идентификатор:
Примеры
Сохранение настроек осуществляется для любого количества таблиц на странице. В качестве рабочих примеров таблиц с сохряющимися настройками ниже будут представлены три таблицы с различным функционалом.
Порядок и ширина столбцов
У данной таблицы есть функционал по изменению ширины стоблцов, а так же возможность их произвольного расположения. Попробуйте поменять порядок и ширину столбцов и перезагрузите страницу.
<p-table
qTableSave="reorderResizeTable"
[value]="productsReorder"
[columns]="cols"
[reorderableColumns]="true"
[resizableColumns]="true"
responsiveLayout="scroll"
>
<ng-template pTemplate="header" let-columns>
<tr #tableHeader>
<th style="width: 3rem"></th>
<th *ngFor="let col of columns" pReorderableColumn pResizableColumn>
{ { col.header } }
</th>
</tr>
</ng-template>
<ng-template pTemplate="body" let-rowData let-columns="columns" let-index="rowIndex">
<tr [pReorderableRow]="index">
<td>
<span class="pi pi-bars" [pReorderableRowHandle]="index"></span>
</td>
<td *ngFor="let col of columns">
{ { rowData[col.field] } }
</td>
</tr>
</ng-template>
</p-table>
Пагинация, фильтрация, сортировка
У данной таблицы есть функционал сортировки данных в столбцах, встроенные фильтры и пагинатор. Попробуйте поменять различные настройки и перезагрузите страницу.
<p-table
qTableSave="pagFilSortTable"
[value]="customersFilterMenu"
[rows]="3"
[reorderableColumns]="true"
styleClass="p-datatable-striped"
[showCurrentPageReport]="true"
[rowsPerPageOptions]="[1, 2, 3, 4, 5]"
[paginator]="true"
currentPageReportTemplate="Показано: с {first} по {last} из {totalRecords} строк"
>
<ng-template pTemplate="header">
<tr>
<th pSortableColumn="name">
<div class="p-d-flex p-jc-between p-ai-center">
<p-sortIcon field="name"></p-sortIcon>
Name
<p-columnFilter type="text" field="name" display="menu"></p-columnFilter>
</div>
</th>
<th pSortableColumn="country.name">
<div class="p-d-flex p-jc-between p-ai-center">
<p-sortIcon field="country.name"></p-sortIcon>
Country
<p-columnFilter type="text" field="country.name" display="menu"></p-columnFilter>
</div>
</th>
<th>
<div class="p-d-flex p-jc-between p-ai-center">
Date
<p-columnFilter type="date" field="date" display="menu"></p-columnFilter>
</div>
</th>
</tr>
</ng-template>
<ng-template pTemplate="body" let-customer>
<tr>
<td>
{ { customer.name } }
</td>
<td>
<span class="image-text">{ { customer.country.name } }</span>
</td>
<td>
{ { customer.date | 'date: MM/dd/yyyy'} }
</td>
</tr>
</ng-template>
<ng-template pTemplate="emptymessage">
<tr>
<td colspan="7">No customers found.</td>
</tr>
</ng-template>
</p-table>
Toggle
У данной таблицы есть функционал включения/отключения столбцов с помощью toggle. Попробуйте выбрать нужные столбцы и перезагрузите страницу.
col.header
<p-table
#toggledTable
qTableSave="toggleTable"
[toggledSelectedColumns]="toggledSelectedColumns$ | async"
[columns]="selectedColumns"
[value]="productsReorder"
responsiveLayout="scroll"
>
<ng-template pTemplate="header" let-columns>
<tr>
<th *ngFor="let col of columns">
{ { col.header } }
</th>
<th style="width: 8rem; text-align: right">
<button
(click)="tableMenu.toggle($event)"
pButton
type="button"
icon="pi pi-sliders-v"
class="p-button-text p-button-secondary p-button-sm"
></button>
</th>
</tr>
</ng-template>
<ng-template pTemplate="body" let-product let-columns="columns">
<tr>
<td *ngFor="let col of columns">
{ { product[col.field] } }
</td>
<td class="">
<div class="p-d-flex p-jc-end">
<button
(click)="clauseMenu.toggle($event)"
pButton
type="button"
icon="pi pi-ellipsis-h"
class="p-button-plain p-button-text p-button-sm"
></button>
</div>
</td>
</tr>
</ng-template>
</p-table>
<p-tieredMenu #tableMenu [model]="tableMenuItems" [popup]="true" appendTo="body"></p-tieredMenu>
<p-menu #clauseMenu [popup]="true" [model]="clauseMenuItems"></p-menu>
<p-dialog header="Отображение колонок" [(visible)]="colsToggle" [style]="{ width: '20rem' }" [contentStyle]="{ padding: '0' }">
<p-listbox
[options]="cols"
[(ngModel)]="toggledTable.columns"
(onChange)="onChangeToggle(toggledTable.columns)"
[metaKeySelection]="false"
[checkbox]="true"
[filter]="true"
[multiple]="true"
optionLabel="name"
>
<ng-template let-col pTemplate="item">
<div class="country-item">
<div>{ { col.header } }</div>
</div>
</ng-template>
</p-listbox>
</p-dialog>