vgdynamictable
v0.3.7
Published
Динамическая таблица с поддержкой: - статических и серверных данных - пагинации - сортировки (одиночной и мультисортировки) - поиска и фильтрации - синхронизации состояния в URL - тем и локализации
Readme
vegas-dynamicTable
Динамическая таблица с поддержкой:
- статических и серверных данных
- пагинации
- сортировки (одиночной и мультисортировки)
- поиска и фильтрации
- синхронизации состояния в URL
- тем и локализации
Основные настройки (DEFAULT_OPTIONS)
search
enabled(boolean) включение модуля поискаdebouncems(number) задержка вводаparam(string) имя query-параметра, по умолчаниюqinputselector(string) селектор поля поиска
filters
enable(boolean) включение модуля фильтровform(string | HTMLElement) селектор/узел формы с полями[data-filter-field]debounce(number) задержка в авто-режимеapply('auto' | 'manual') применять сразу или по кнопкеbutton.apply,button.reset(string) селекторы кнопокfieldAttr,partAttr,typeAttr,operatorAttr(string) data-driven контракт полейurlState(object) синхронизация фильтров в URL (prefix,pageKey,perPageKey,sortKey)- В remote-запросах ключи фильтров автоматически маппятся через
urlState.prefix(напримерdate -> f-date,date_op -> f-date_op); явныйrequest.parammapвсегда имеет приоритет.
sortable
enabled(boolean)initialfield(string)initialdir('asc' | 'desc')multi(boolean) мультисортировкаmultiwithshift(boolean) мультисортировка только сShiftfields(string[] | string) whitelist sortable fields bydata-field(['name','price']orname,price)
pagination
enabled,page,perpage,maxvisiblepages,ellipsis,quickjump,perpageoptions
urlstate
enabled(boolean) синхронизация состояния таблицы в URLmode('replace' | 'push') режим обновления historyinclude.pagination(boolean)include.sort(boolean)listen.popstate(boolean) восстановление состояния поBack/Forward
callbacks
onInit(detail, instance)onBeforeLoad(detail, instance)onDataLoaded(detail, instance)onError(detail, instance)onSortChange(detail, instance)onPageChange(detail, instance)onPerPageChange(detail, instance)onSearch(detail, instance)onFiltersChange(detail, instance)onReset(detail, instance)
events
enabled(boolean) включить/выключитьCustomEventprefix(string) префикс имени события, по умолчаниюvgdtbubbles(boolean) режим всплытия события
Пример: событие сортировки vgdt:sortchange, загрузки vgdt:dataloaded, ошибки vgdt:error.
Для editable-режима: vgdt:rowcheck, vgdt:checkall, vgdt:rowreorder.
Data-атрибуты
Пример таблицы:
<table
data-vg-table
data-request-route="/api/v1/table/filters.php"
data-search-enable="true"
data-search-input="#table-filters-search"
data-filters-enable="true"
data-filters-form="#table-filters-form"
data-filters-apply="manual"
data-filters-button-apply="[data-filter-apply]"
data-filters-button-reset="[data-filter-reset]"
data-filters-urlstate-enable="true"
data-filters-urlstate-prefix="f."
data-sort-multi="true"
data-sort-multi-with-shift="true"
data-sort-fields="name,price,stock"
></table>Per-column override:
<th data-field="price" data-sortable="false">Price</th>Поля формы фильтров:
<input data-filter-field="min_price" />
<input data-filter-field="max_price" />
<select data-filter-field="category_id"></select>Дополнительные элементы управления:
data-filter-applydata-filter-resetdata-filter-errors
Пример подписки на события:
const table = document.querySelector('[data-vg-table]');
table.addEventListener('vgdt:dataloaded', (event) => {
console.log('Rows loaded:', event.detail.rows.length);
});
table.addEventListener('vgdt:error', (event) => {
console.error('Load failed:', event.detail.message);
});Backend API
GET /api/v1/table.php
Базовый endpoint таблицы с пагинацией, сортировкой и фильтрами.
GET /api/v1/table/filters.php
Поддерживает параметры:
q,category_id,min_price,max_pricestock_min,rating_minpage,per_pagesort,dir
Формат мультисортировки:
sort=name,pricedir=asc,desc
Формат успешного ответа
data: массив строк таблицыmeta:page,per_page,pages,total,sort,dir,filters,request_id,timestamp_utc
Формат ошибки
error.codeerror.messageerror.detailserror.request_id
Доступность (A11y)
Реализовано:
aria-sortдля сортируемых заголовковaria-liveдля статусов загрузки/пустого результата/ошибкиaria-invalidдля невалидных полей фильтра
