← Admin Panel

Списки — поиск, фильтры, пагинация

admin panel · workzone
Табличные экраны панели (пользователи, аудит, API-ключи, ACL) делят строку поиска, фасетные фильтры и пагинацию. Поведение единое, экраны задают лишь своё (что ищется, какие фасеты) и ссылаются сюда.
2 Сборка запроса поиск, фильтры, страница → один вызов
Фасеты: ИЛИ внутри · И между
Значения внутри одного фасета — по ИЛИ, разные фасеты — по И (строки на пересечении). Число активных фасетов — счётчиком у контрола.
Поиск ∩ фильтры — один запрос
q и активные фасеты идут в одном вызове по И, не двумя запросами. В полёте только последний: новый ввод отменяет устаревший (защита от гонки).
Страница и сортировка — в том же запросе
Номер страницы, её размер и сортировка едут в том же вызове, что q и фасеты. Любое изменение запроса — новый текст, фасет, сортировка — сбрасывает на 1-ю страницу: иначе можно остаться на странице, которой в новом наборе нет.
Состояние — в адресе страницы
Поиск, фасеты, страница и сортировка — в query-параметрах URL: refresh и ссылка сохраняют выборку. Адрес — единственный носитель этого состояния.
3 Результат и состояния что видит пользователь в ответ
Единый набор для всего экрана
Результат (поиск ∩ фильтры) — один набор: от него таблица, счётчик, пагинация и экспорт v2. Экспорт выгружает то же, что видно; выгрузки в обход контролов нет.
Загрузка — каркас, затем прежние строки
Холодный старт списка — skeleton-строки в форме таблицы; смена страницы, фасета или сортировки — прежние строки остаются (keep-previous), не мигают в пустоту. Общий словарь состояний загрузки и правило выбора — Shared UI.
Пусто · очистка · ошибка
Совпадений нет — «ничего не найдено» с подсказкой сбросить. Очистка — крестиком или Esc, сброс возвращает полный список. Запрос упал — инлайн-ошибка с повтором в области данных, при полном обвале — системная заглушка.