Массовые действия в таблицах: паттерны, роли и масштабирование

Массовые действия в таблицах — это ускоритель рутины и источник рисков. Они экономят сотни кликов, но при неверном UX приводят к потерям данных, ошибочным скидкам и «заморозке» очередей. В статье собрали конструктор: выбор и области, батч-операции, состояния, подтверждения, отмену, пермиссии и журналирование. Разберём сценарии e-commerce, B2B-админок и разработка NFT маркетплейса, где одна операция может затронуть сотни лотов и кошельков. Коротко коснёмся влияния процессов на экономику и зачем продуктовой команде периодически нужна токеномика консультация — чтобы корректно оценивать комиссии, блокировки и возвраты. Сроки/стоимость разработки уточняйте по контактам на сайте.

1) Выбор: чекбоксы, диапазоны, «все»

Массовые действия начинаются с выбора. Паттерн «чекбокс в шапке» понятен, но его смысл меняется: «выбрано на странице» или «выбрано всё по фильтру». Всегда явно проговаривайте область применения операции. При выборе «все N строк по фильтру» показывайте второе подтверждение и возможность сузить выбор.

  • Состояния чекбокса: пусто/частично/всё; индикатор количества выбранного.
  • Мультивыбор с клавиатуры (shift-диапазоны) и быстрые операции в шапке.
  • Сохранение выбора при пагинации и изменении фильтров — опционально, но прозрачно.
  • «Выбраны все на странице / выбрать все по фильтру (12 450)» — две разные опции.

2) Бар действий и контекст

После выбора появляется панель действий: над списком или «липкая» внизу. Она содержит только релевантные операции с учётом ролей и статусов. Внутри — «легкие» действия (метки/категории) и «тяжёлые» (удаление, списание, пересчёт), у вторых есть подтверждение и журнал.

Композиция бара

  • Действие + число выбранных + «снять выделение».
  • Второй ряд: фильтры/поиск/пресеты — не исчезают от выбора.
  • Подсказка времени операции: «≈15 сек для 1 000 записей» (если доступно).

3) Подтверждения, отмена, очередь

Массовая операция должна быть «мягкой». Если возможно — сделайте её обратимой (undo) в течение короткого окна. Если операция асинхронная — показывайте очередь/прогресс и статус по сегментам: «применено к 823/1000, ошибки — 6». Предложите экспорт/лог с ID неудачных строк для повторного запуска.

  1. Confirm-диалог с текстом «что произойдёт», областью действия и побочными эффектами.
  2. Undo-тост/панель (если безопасно); таймер обратного действия.
  3. Асинхронность: очередь, ретраи, idempotency key, лог операций.

4) Права и видимость действий

Действия зависят от роли, статуса строки и доменных ограничений. Нельзя «массово» выдать скидку больше лимита или изменить критичные поля без доп-подтверждения у владельца. Лучше скрыть недоступные операции, чем показывать «серые» кнопки без объяснений.

Чек-лист прав

  • Матрица ролей × действий × статусов.
  • Лимиты и бюджетные пороги; эскалация на апруверов.
  • Логи с автором, временем, областью и результатом.

5) Производительность и устойчивость

Серверу всё равно, «красиво» у вас или нет — ему нужны батчи, очереди и идемпотентность. UI не должен отправлять 10 000 запросов по одному. Выполняйте операции пакетами, показывайте прогресс и не блокируйте интерфейс. Повтор — безопасен: одна и та же операция с одинаковым ключом не должна дублироваться.

  • Batch API, ограничения на размер пакета, экспоненциальные ретраи.
  • Idempotency key на операцию; защита от двойного клика.
  • Серверная фильтрация и пагинация; виртуализация рендеринга в UI.
  • Оповещения о завершении (уведомления/почта) для долгих задач.

6) Доменные кейсы: e-commerce, B2B, NFT

В интернет-магазинах массовые действия — про цены, остатки, статусы заказов, метки клиентов. В B2B-админках — про доступы, SLA, пересчёт отчётов. В разработка NFT маркетплейса — про массовые изменения комиссий, статусов лотов, роялти и заморозки. Здесь напрямую влияет экономика: газ/комиссии/очереди. Поэтому командам раз в квартал полезна токеномика консультация, чтобы сверить UX с финансовыми ограничениями сети/провайдера.

7) Ошибки и пустые состояния

Ошибки при массовых действиях не должны превращать интерфейс в «чёрный ящик». Показывайте понятные причины: «превышен лимит», «нет прав», «конфликт версий», «запись удалена». Пустые состояния — это не «ноль», а приглашение к действию (фильтры/импорт/создание пресета).

8) Анти-паттерны

  • Кнопка «Удалить всё» без второго подтверждения и лога.
  • Скрытая область применения: «думал, что страница, а применилось ко всем».
  • «Остановить операцию» без гарантий консистентности и пояснений.
  • Блокировка UI на весь процесс без фона и прогресса.

Итог: массовые действия в таблицах — это о прозрачности области, мягких подтверждениях, ролях, журнале и устойчивости. В доменах с транзакционными издержками (включая NFT/блокчейн) UX обязан учитывать комиссии и очереди — иначе вы «оптимизируете» только клики, но не экономику. Сроки/стоимость разработки уточняйте по контактам на сайте.