Pagination
<sf-pagination> — подвал длинного списка или таблицы: сколько всего
записей, на какой странице читатель, как перейти на другую и сколько записей
показывать. Он собирает раскладку обычной
пагинации с полем номера между
стрелками, как в табличном представлении. Данные компонент не загружает:
приложение передаёт числа и по событиям загружает нужную страницу.
Пример
Применение
Числа
total — сколько записей всего, page-size — сколько на странице,
current — номер текущей страницы, начиная с единицы. Число страниц
компонент считает сам и держит current в его пределах. При total="0"
переходы и выбор размера не показываются.
Состав подвала
В начале строки — общее количество. В середине — подпись «Страницы:», стрелки «В
начало» и «Предыдущая страница», поле с номером текущей страницы и стрелки
«Следующая страница» и «Последняя». Стрелки назад видны со второй страницы,
стрелки вперёд — пока следующая страница есть. В поле можно набрать любой
номер и нажать Enter; номер за пределами списка приводится к первой или
последней странице.
В конце строки — кнопка «Показать ещё» и выбор размера страницы. Кнопку убирает
top="false", выбор размера — show-page-size="false"; варианты размера
задаёт page-sizes, по умолчанию 10,20,30,40. show-more-busy делает
кнопку «Показать ещё» занятой, пока приложение догружает записи.
middle="false" убирает всю строку подвала.
Переход и события
Компонент сам меняет current и page-size и сообщает об изменении
всплывающим событием; приложение по нему загружает записи. В event.detail
каждого события есть также component.
| Событие | Когда | Поля event.detail |
|---|---|---|
sf-page-change |
открыта другая страница | previous, current, total, pageCount, pageSize |
sf-page-size-change |
выбран другой размер страницы | previous, pageSize, current, total, pageCount |
sf-show-more |
нажата «Показать ещё» | current, total, pageSize, pageCount, hasNext, item |
sf-count-request |
запрошено общее количество | reason, current, pageSize |
При смене размера current остаётся в пределах нового числа страниц.
goToPage(n), setPageSize(n) и showMore() делают то же из кода,
onPageChange(handler) передаёт обработчику номер новой страницы первым
аргументом.
Количество неизвестно
Список, который не считает записи на каждом запросе, задаёт
count-known="false" и сообщает has-next, есть ли следующая страница.
Тогда вместо числа в начале строки стоит ссылка «Показать количество» — если задан
can-count. Нажатие на неё, на стрелку «Последняя» и отметка «Для всех»
отправляют sf-count-request с причиной в detail.reason: total,
last-page или action-for-all. Пока приложение считает, компонент
показывает короткое ожидание; ответ приходит атрибутами total,
count-known и снятым counting.
Действия с отмеченными
actions и selected-count добавляют панель действий с отмеченными
строками: сколько отмечено, список действий, «Применить» и сброс
выделения. Панель видна, пока selected-count больше нуля. Действия задаются
строкой значение:Подпись через |, флаги disabled и selected идут
после ::. Действие по умолчанию не выбрано, поэтому «Применить» недоступна,
пока пользователь не выберет его сам. show-action-for-all добавляет отметку
«Для всех» — применить действие ко всем записям под фильтром.
Компонент не хранит выделение: selected-count передаёт приложение, а
sf-action-change (previous, action), sf-action-for-all-change
(previous, actionForAll), sf-action-apply (action, actionForAll,
current, total, pageSize, pageCount) и sf-selection-clear
(selectedCount, total) сообщают ему о выборе пользователя.
bottom="false" убирает панель, если действия показывает соседний компонент.
<sf-pagination
aria-label="Страницы заказов"
current="1"
total="240"
page-size="20"
selected-count="3"
actions="archive:Архивировать|export:Выгрузить|delete:Удалить"
></sf-pagination>
const pagination = document.querySelector('sf-pagination');
pagination.addEventListener('sf-page-change', async (event) => {
const {current, pageSize} = event.detail;
renderRows(await loadOrders({page: current, size: pageSize}));
});
pagination.addEventListener('sf-action-apply', async (event) => {
await applyToSelected(event.detail.action);
pagination.setAttribute('selected-count', '0');
});
Подписи
Все подписи — «Всего:», «Страницы:», «Показать ещё», «На странице:» и
доступные имена стрелок — берутся из языка страницы: на русской странице они
русские. Атрибуты total-label, pages-label, previous-label,
next-label, first-label, last-label, page-field-label и другие из
справочника заменяют отдельные слова.
Доступность
- Корень — ориентир
nav. Имя по умолчанию — «Страницы результатов»; если на странице несколько списков, задайте каждому своё вaria-label. - Стрелки — кнопки-иконки с доступными именами и подсказками. Поле номера
подписано «Страница:» и переходит по
Enter; стрелки и поле — обычные остановкиTab. - Переход сам ничего не объявляет. Сообщите о загрузке новых записей в
области с
role="status", если они появляются не рядом с подвалом. - Панель действий с отмеченными — область с именем «Действия с отмеченными»; у кнопки сброса выделения есть имя «Снять выделение».
Справочник API
Раздел собран из манифеста компонента выпуска ui-106d5901f8c3 и обновляется вместе с выпуском. Чтобы исправить описание, исправьте манифест.
Каждому атрибуту соответствует свойство элемента с тем же именем в camelCase: search-placeholder — searchPlaceholder. Свойство атрибута template называется templateName.
| Тег | <sf-pagination> |
| Назначение | Навигация по коллекции, разбитой на пронумерованные страницы, на основе источника данных. |
| Контракт | smart.pagination, версия 1.0.1 |
| Поставка | выпуск Framework ui-106d5901f8c3 |
| Жизненный цикл | экспериментальный: API может меняться между выпусками |
| Готовность | принят в продукт |
| Заготовка до прихода кода | сервер пишет data-sf-skeleton="block"; своего скелетона при загрузке данных нет (Заготовка до прихода кода) |
Атрибуты
template—string, по умолчаниюdefault. Имя шаблона.top—boolean, по умолчаниюtrue. Показывает совместимый блок «показать ещё».middle—boolean, по умолчаниюtrue. Показывает навигацию по страницам и сводку по коллекции.bottom—boolean, по умолчаниюtrue. Разрешает совместимый раздел пакетных действий.top-class—string, по умолчанию пусто. Утилитарные классы Framework для раздела «показать ещё».main-class—string, по умолчанию пусто. Утилитарные классы Framework для раздела навигации.bottom-class—string, по умолчанию пусто. Утилитарные классы Framework для раздела пакетных действий.aria-label—string, по умолчанию пусто. Доступное имя области навигации. Пусто — текст на языке страницы (по-английски «Result pages»).pages-label—string, по умолчанию пусто. Видимая подпись перед элементами страниц. Пусто — текст на языке страницы (по-английски «Pages:»).page-label—string, по умолчанию пусто. Доступная приставка к номеру страницы. Пусто — текст на языке страницы (по-английски «Page»).previous-label—string, по умолчанию пусто. Доступное имя действия «предыдущая страница». Пусто — текст на языке страницы (по-английски «Previous page»).next-label—string, по умолчанию пусто. Доступное имя действия «следующая страница». Пусто — текст на языке страницы (по-английски «Next page»).last-label—string, по умолчанию пусто. Видимая подпись действия «последняя страница» для совместимости. Пусто — текст на языке страницы (по-английски «Last»).total-label—string, по умолчанию пусто. Видимая подпись общего числа записей. Пусто — текст на языке страницы (по-английски «Total:»).selected-label—string, по умолчанию пусто. Видимая подпись числа выбранных записей. Пусто — текст на языке страницы (по-английски «Selected:»).selected-count—integer, по умолчанию0, значения: от 0. Количество выбранных элементов, ограниченное диапазоном от нуля до общего количества.show-more-text—string, по умолчанию пусто. Подпись действия «показать ещё» для совместимости. Пусто — текст на языке страницы (по-английски «Show more»).current—integer, по умолчанию1, значения: от 1. Текущий номер страницы, начиная с единицы.total—integer, по умолчанию10, значения: от 0. Неотрицательное общее число элементов.page-size—integer, по умолчанию10, значения: от 1. Положительное число элементов на странице.page-sizes—string, по умолчанию10,20,30,40. Варианты размера страницы — положительные числа через запятую.show-page-size—boolean, по умолчаниюtrue. Показывает выбор размера страницы для непустой коллекции.page-size-label—string, по умолчанию пусто. Видимая и доступная подпись выбора размера страницы. Пусто — текст на языке страницы (по-английски «Per page:»).show-actions—boolean, по умолчаниюtrue. Показывает групповые действия, если они переданы.actions—string, по умолчанию пусто. Определения совместимых пакетных действий, разделённые вертикальной чертой.action—string, по умолчанию пусто. Значение выбранного группового действия.action-apply-text—string, по умолчанию пусто. Подпись кнопки, которая применяет действие к выбранному. Пусто — текст на языке страницы (по-английски «Apply»).show-action-for-all—boolean, по умолчаниюfalse. Показывает совместимый переключатель «все элементы».action-for-all—boolean, по умолчаниюfalse. Текущее значение переключателя «все элементы».action-for-all-label—string, по умолчанию пусто. Подпись переключателя «для всех». Пусто — текст на языке страницы (по-английски «For all»).actions-label—string, по умолчанию пусто. Доступное имя списка действий над выбранным. Пусто — текст на языке страницы (по-английски «Action for the selected records»).action-choose-label—string, по умолчанию пусто. Подсказка в списке действий над выбранным, пока действие не выбрано. Пусто — текст на языке страницы (по-английски «Choose an action»).actions-region-label—string, по умолчанию пусто. Доступное имя панели, которая появляется, пока строки отмечены. Пусто — текст на языке страницы (по-английски «Actions for the selected»).clear-selection-label—string, по умолчанию пусто. Доступное имя и подсказка элемента, который снимает выбор. Пусто — текст на языке страницы (по-английски «Clear the selection»).count-known—boolean, по умолчаниюtrue. Известно ли количество записей. Хост, который не считает каждый ответ, задаёт false, и представление предлагает подсчитать количество вместо того, чтобы показывать его.can-count—boolean, по умолчаниюfalse. Может ли хост подсчитать количество по запросу. Без этого представление ничего не предлагает и ничего не запрашивает.counting—boolean, по умолчаниюfalse. Счётчик загружается; вместо числа отображается короткое ожидание.has-next—boolean, по умолчаниюfalse. Существует ли следующая страница. Определяет переход вперёд и «Показать ещё», когда общее количество не передано.show-count-label—string, по умолчанию пусто. Текст элемента, который просит хост посчитать записи. Пусто — текст на языке страницы (по-английски «Show the number»).counting-label—string, по умолчанию пусто. Доступное имя короткого ожидания, пока число записей в пути. Пусто — текст на языке страницы (по-английски «Counting»).first-label—string, по умолчанию пусто. Доступное имя и подсказка элемента, который переходит на первую страницу. Пусто — текст на языке страницы (по-английски «First»).page-field-label—string, по умолчанию пусто. Подпись поля, в которое вводят номер страницы. Пусто — текст на языке страницы (по-английски «Page:»).show-more-busy—boolean, по умолчаниюfalse. Отмечает кнопку «Показать ещё» как занятую, пока хост загружает следующую порцию; она отключена и показывает индикатор загрузки.size—string, по умолчанию1, значения:1/2,1. Ступень лестницы размеров для полей, кнопок, подписей и номеров страниц: 1 или плотная 1/2, как в админке.
Методы
getTopSection()— возвращаетobject|null. Возвращает элемент верхней секции (.sf-pagination-top) или null, если она не отрисована.getMainSection()— возвращаетobject|null. Возвращает элемент основной секции (.sf-pagination-main) или null, если она не отрисована.getBottomSection()— возвращаетobject|null. Возвращает элемент нижней секции (.sf-pagination-bottom) или null, если она не отрисована.goToPage(page: number|string)— возвращаетobject. Переходит на страницу: номер разбирается как целое число и ограничивается диапазоном 1..pageCount, если количество известно (иначе только снизу значением 1). Отправляет sf-page-change, когда страница действительно меняется; ничего не делает, если известно, что всего страниц ноль.showMore(item?: object)— возвращаетobject. Отправляет sf-show-more с текущими параметрами пагинации и переданным пунктом; не выполняет запрос и не меняет состояние.setPageSize(size: number|string)— возвращаетobject. Устанавливает положительный размер страницы, удерживает текущую страницу в пределах нового числа страниц и отправляет sf-page-size-change. Неположительный, нечисловой или неизменный размер игнорируется.setAction(action: string)— возвращаетobject. Выбирает групповое действие по значению (пустое значение сбрасывает выбор) и отправляет sf-action-change, если оно отличается от текущего.setActionForAll(value: boolean)— возвращаетobject. Задаёт, применяется ли групповое действие ко всем записям под фильтром, и отправляет sf-action-for-all-change. При включении также запрашивает количество (sf-count-request с reason action-for-all), если оно ещё неизвестно.setState(nextState: object)— возвращаетobject. Записывает каждый ключ как атрибут в kebab-case: false, null, undefined или пустая строка удаляет атрибут, true устанавливает его пустым, всё остальное приводится к строке.onPageChange(handler: function, options?: object|boolean)— возвращаетobject. Добавляет обработчик sf-page-change; обработчик вызывается с (current, detail, event). Обработчик, не являющийся функцией, игнорируется.onShowMore(handler: function, options?: object|boolean)— возвращаетobject. Добавляет обработчик sf-show-more; обработчик вызывается с (detail, event). Обработчик, не являющийся функцией, игнорируется.
События
Все события приходят на сам элемент и всплывают. Общие события базового элемента перечислены в главе Жизненный цикл → Этапы.
sf-action-apply—detail:{ component: object, tagName: string, template: string, action: string, actionForAll: boolean, current: number, total: number, pageSize: number, pageCount: number|null }.sf-action-change—detail:{ component: object, tagName: string, template: string, previous: string, action: string }.sf-action-for-all-change—detail:{ component: object, tagName: string, template: string, previous: boolean, actionForAll: boolean }.sf-count-request—detail:{ component: object, tagName: string, template: string, reason: string, current: number, pageSize: number }.sf-page-change—detail:{ component: object, tagName: string, template: string, previous: number, current: number, total: number, pageCount: number|null, pageSize: number }.sf-page-size-change—detail:{ component: object, tagName: string, template: string, previous: number, pageSize: number, current: number, total: number, pageCount: number }.sf-selection-clear—detail:{ component: object, tagName: string, template: string, selectedCount: number, total: number }.sf-show-more—detail:{ component: object, tagName: string, template: string, current: number, total: number, pageSize: number, pageCount: number|null, hasNext: boolean, item: object|null }.
Доступность
- Роль: навигация (
navigation). - Доступное имя: обязательно.
- Клавиши:
Tab. - Фокус: Tab переходит только к включённым нативным действиям. Фокус использует общее оформление focus-visible только для клавиатуры и остаётся видимым в режиме forced colors; пропущенные страницы не получают фокус.
Минимальная разметка
<sf-pagination aria-label="Страницы результатов поиска" current="2" total="96" page-size="10" top="false" bottom="false" show-page-size="false"></sf-pagination>
Источник
simai/ui@106d5901f8c3b4f23131ce0e7ede5dbd8abfe4f4:distr/smart/paginationsimai/ui@106d5901f8c3b4f23131ce0e7ede5dbd8abfe4f4:distr/rule/rule.json#name=cl-pagination
См. также
- Dropdown — выбор размера страницы устроен так же.