Стандарты проектирования
Панель детализации списка (Master–Detail)


Панель детализации списка (Master–Detail)

Конфигурация паттерна «Разделённый экран (Split Screen)».

Назначение

Экран, где слева располагается список однотипных объектов, а справа — полное содержимое того объекта, который выбран в списке. При выборе другого элемента слева содержимое справа полностью заменяется. Левая часть служит навигацией и выбором, правая — просмотром или редактированием выбранного объекта. Типичный пример — список сотрудников слева, карточка выбранного сотрудника справа.

Конфигурация решает задачу быстрого перебора: пользователь просматривает и сравнивает детали ряда однотипных объектов, не совершая переход на отдельную страницу и не открывая дровер, и позволяет выполнять с содержимым простые действия.

Типовые сценарии применения: Клиенты → карточка клиента; заказы → детали заказа; сотрудники → данные сотрудника; организации → отделы; проекты → задачи проекта.

Конфигурация подчиняется общим правилам разделённого экрана: разделитель, поведение сторон, упрощённая шапка. Ниже описаны только частные правила Master–Detail.

Критерии использования

Применимость конфигурации проверяется в три шага. Порядок обязателен: каждый следующий шаг имеет смысл только при пройденном предыдущем.

Шаг 1. Обязательные условия

Конфигурация применяется, только если выполняются все условия.

  • Слева — набор экземпляров БО для выбора. Список сущностей одного класса: клиенты, заказы, сотрудники, документы и т.п., а не разные блоки с индивидуальным наполнением.
  • Справа — полный самостоятельный объект. Правая часть показывает выбранный объект целиком, а не пояснение к нему.
  • Правая часть осмысленна без левой. Если убрать список слева, содержимое справа остаётся самодостаточным — этот объект можно было бы открыть отдельной страницей без потери смысла.
  • Объектов много, и пользователь перебирает их последовательно. Углубление в выбранный объект — основной сценарий работы, а не редкое действие.
  • Работа потоковая: пользователь обрабатывает объекты один за другим в рамках одной сессии.

Если условия не выполняются, применяется таблица, дровер или отдельная страница.

Шаг 2. Усиливающие признаки

Достаточно выполнения одного признака, чтобы Master–Detail стал основным представлением раздела.

  • Пользователю важно сравнивать соседние объекты, переключаясь между ними без потери позиции в списке.
  • Объект распознаётся по двум–четырём ключевым атрибутам — коллекция умещается в узкую колонку.
  • Коллекция обозримая: десятки или сотни объектов, а не тысячи без фильтрации.
  • С выбранным объектом выполняются простые действия — согласовать, сменить статус, ответить, поправить несколько полей.

Если не выполняется ни один признак, стоит сравнить конфигурацию с таблицей и дровером: возможно, детализация нужна реже, чем кажется.

Шаг 3. Стоп-факторы

Любой из перечисленных факторов перевешивает результаты шагов 1 и 2.

  • Детализация объекта отображается в виде таблицы — применяется связанная таблица.
  • Детализация нужна редко — применяется дровер.
  • Главная задача экрана — углублённый просмотр и редактирование одного объекта с большим количеством действий, выполняемых не потоково, — применяется отдельная страница.

Признак выбора: детализация объекта табличная — связанная таблица; детали разнородные (карточка, форма, набор атрибутов, предпросмотр, чат) — Список со связанной оберткой.

Стандарты проектирования

Обязательные правила

  • В шапке размещается минимально необходимый набор фильтров.
  • Экземпляр бизнес-объекта в коллекции отображает только атрибуты, нужные для распознавания; полный набор сведений выводится в деталь справа.
  • Строка или карточка целиком является областью выбора.
  • В правой стороне отображаются детали только одного экземпляра объекта; выбор нового объекта меняет содержимое правой стороны.
  • Действия над коллекцией целиком размещаются слева, действия над выбранным объектом — справа.
  • Левая сторона не содержит вкладок разделов объекта — всё наполнение находится в правой стороне.
  • Правая сторона не имеет возможности закрытия, она всегда открыта.
  • Заголовок детали соответствует наименованию экземпляра бизнес-объекта в коллекции.
  • Если детализация в виде таблицы, используется связанная таблица.
  • Пока объект не выбран, правая сторона отображает пустое состояние с указанием выбрать объект из списка.
  • Общие правила разделённого экрана — разделитель 50/50, минимальная ширина стороны 400 пикселей, независимый скролл сторон — действуют без изменений.

Настраиваемые параметры

Параметры делятся на два уровня хранения: договорённость команды задаётся на уровне экрана и действует на всех, персональное удобство сохраняется локально и никому больше не видно.

Задаются в настройках экрана

  • Состав атрибутов экземпляра в коллекции. Определяет, по каким атрибутам пользователь распознаёт объект. По умолчанию — наименование и один–два ключевых атрибута.
  • Представление коллекции: список строк или карточки. Карточки применяются, когда для распознавания нужны статус, аватар или несколько строк атрибутов.
  • Сортировка по умолчанию. Задаёт порядок перебора, например по дате поступления для потоковой обработки.
  • Состав вкладок детали и вкладка, открываемая по умолчанию.

Сохраняются локально у пользователя

  • Положение разделителя. Ширина сторон восстанавливается при следующем открытии экрана.
  • Применённые фильтры, поиск и сортировка коллекции.
  • Активная вкладка детали. При переборе объектов открывается та же вкладка, если она есть у нового объекта.
  • Последний выбранный объект. При возврате на экран выбор и позиция прокрутки восстанавливаются.

Ограничения

  • Конфигурация состоит ровно из двух сторон. Третья колонка или вложенный Master–Detail внутри детали не допускаются: для иерархий применяется древовидное меню или переход на отдельную страницу.
  • Правая сторона не закрывается и не заменяется модальным окном или дровером поверх коллекции.
  • Табличная детализация в правой стороне не размещается — применяется связанная таблица.
  • Действия над отдельным объектом не дублируются в строке коллекции.
  • При множественном выборе в коллекции правая сторона не показывает деталь одного объекта: отображается пустое состояние с числом выбранных объектов и доступными массовыми действиями.

Состав и компоненты

Конфигурацию образуют две стороны: ведущая левая с коллекцией и подчинённая правая с детализацией выбранного объекта.

Левая сторона (коллекция)

Левая сторона — ведущая: она содержит коллекцию однотипных экземпляров бизнес-объектов и управляет содержимым правой стороны. Список остаётся видимым постоянно, поэтому пользователь перебирает объекты, не теряя контроль над списком.

Обязательно

  • Шапка — заголовок (наименование бизнес-объекта) и действия над коллекцией (добавление, удаление и т.п.).
  • Коллекция — область однотипных экземпляров бизнес-объектов для последовательного перебора.

Опционально

  • Кнопка «Назад».
  • Базовые фильтры и поле поиска.

Поведение

  • Каждый экземпляр бизнес-объекта показывает набор ключевых атрибутов, достаточный для распознавания среди похожих.
  • Строка или карточка целиком является областью выбора.
  • Выбранный объект выделяется заливкой; выделение сохраняется при прокрутке.
  • Действия над коллекцией целиком (добавление объекта, массовые операции) размещаются на левой стороне; действия над отдельным объектом относятся к правой стороне и здесь не дублируются.

Состояния. Загрузка, пустая коллекция, нет результатов после фильтрации, объект выбран, объект не выбран.

Правая сторона (детализация)

Правая сторона — подчинённая: она отображает детализацию экземпляра объекта, выбранного слева. Правая сторона предназначена для просмотра и простых действий над одним экземпляром объекта, а не для углублённой работы с ним.

Обязательно

  • Заголовок детали — идентифицирует объект, соответствует его наименованию в коллекции.
  • Содержание — основная область стороны.

Опционально

  • Вкладки разделов — если информация детализации объединяется в несколько групп.
  • Действия над объектом — рядом с заголовком либо в области действий внизу.

Поведение

  • Содержание отображает сведения о выбранном экземпляре бизнес-объекта — ключевые атрибуты, предпросмотр файла, форму, чат — в зависимости от бизнес-задачи.
  • Несколько групп информации разделяются вкладками, переключение вкладок не затрагивает левую сторону.
  • Действия относятся к выбранному экземпляру бизнес-объекта. Первичное действие выделяется акцентной кнопкой. Глобальные действия объекта из коллекции здесь не дублируются.

Состояния. Пустое состояние (объект не выбран) с указанием выбрать объект из списка, отображение детали, переключение вкладок, редактирование.

Сквозные сценарии

Выбор объекта

Выбор выполняется нажатием на строку или карточку целиком. Содержимое правой стороны полностью заменяется, прокрутка детали возвращается в начало.

Выделение выбранного объекта в коллекции сохраняется при прокрутке, фильтрации и обновлении данных, пока объект остаётся в выдаче.

Фильтрация и поиск

Фильтры и поиск применяются к коллекции и не затрагивают содержимое детали. Если выбранный объект остаётся в выдаче, выбор сохраняется. Если объект перестаёт проходить условия, выбор снимается, и правая сторона показывает пустое состояние.

Добавление объекта

Кнопка добавления находится в шапке левой стороны. Новый объект появляется в коллекции выбранным, а правая сторона открывает его в режиме редактирования. Отмена добавления возвращает выбор к ранее выбранному объекту.

Удаление объекта

После удаления выбирается следующий объект коллекции, а если удалён последний — предыдущий. Если коллекция опустела, отображается состояние пустой коллекции.

Открытие в отдельной вкладке

Если работа с объектом требует больше места или действий, деталь открывается в новой вкладке действием в шапке детали — в соответствии со стандартом вкладок технологических платформ. Разделённый экран при этом остаётся на месте.

Изменение ширины сторон

Ширина сторон меняется перетаскиванием разделителя по общим правилам: исходное соотношение 50/50, минимальная ширина стороны — 400 пикселей. Положение разделителя сохраняется локально у пользователя.

Состояния экрана

Состояния делятся на два уровня. Состояния экрана затрагивают обе стороны и взаимоисключающи; состояния правой стороны зависят от выбора в коллекции.

Загрузка

Левая сторона показывает скелетоны строк коллекции, правая — скелетон детали. Шапка и разделитель отображаются сразу.

Объект не выбран

Коллекция загружена, выбор не сделан. Правая сторона показывает пустое состояние с указанием выбрать объект из списка. Автоматический выбор первого объекта допускается, если сценарий предполагает последовательный перебор с начала коллекции.

Нет результатов после фильтрации

Данные есть, но не проходят по условиям. Левая сторона показывает пояснение и действие сброса фильтров; правая — пустое состояние. Предлагать добавление объекта здесь неуместно.

Ошибка загрузки

Ошибка коллекции отображается на левой стороне с действием повторной загрузки. Ошибка загрузки детали отображается только на правой стороне: коллекция остаётся доступной, и пользователь может выбрать другой объект.

Цветовая индикация

Применяется стандарт цветовой индикации Q.Palette со следующими уточнениями для Master–Detail.

  • Выбранный объект выделяется заливкой состояния выбора, а не цветом статуса.
  • Наведение визуально отличается от выбора и не смещает выделение.
  • Статусы объектов в коллекции и детали отображаются тегами; цвета берутся из преднабора палитры.
  • Просроченные даты и превышенные значения выделяются красным — по общему правилу выделения текста цветом.

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

  • Пройдены все три шага критериев использования, стоп-факторы отсутствуют.
  • Слева коллекция однотипных объектов, справа — полная деталь выбранного.
  • Соблюдены общие правила разделённого экрана: 50/50 по умолчанию, минимум 400 пикселей, независимый скролл сторон.
  • Экземпляр в коллекции показывает только атрибуты, нужные для распознавания.
  • Строка или карточка целиком является областью выбора; выбранный объект выделен заливкой.
  • Действия над коллекцией — слева, действия над объектом — справа, без дублирования.
  • Правая сторона не закрывается; определено пустое состояние «объект не выбран».
  • Смена выбора с несохранёнными изменениями сопровождается вопросом о сохранении.
  • Определено поведение выбора при фильтрации, добавлении и удалении.
  • Определены состояния загрузки, пустой коллекции, отсутствия результатов и ошибки.
  • Табличная детализация вынесена в связанную таблицу.