Skip to content

Единая фильтрация объектов

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

Пресет фильтрации

ts
/**
 * @description Общий пресет фильтрации объектов. Это переносимый контракт для
 * сохранения и применения фильтра в разных приложениях и представлениях.
 */
export interface LibObjectFilterPreset
  extends LibObjectFilterSearch, LibObjectFilterTagGroupFilter {
  propertyFilters: LibObjectFilterPropertyFilters;
}
ts
/**
 * @description Текстовый запрос, который потребитель применяет к своему набору
 * полей объекта.
 */
export interface LibObjectFilterSearch {
  search: string;
}

Свойства объекта selectedFilters

selectedFilters — часть пресета для фильтрации по свойствам объекта. В текущей доменной модели сюда входят тип объекта, наличие логики, наличие привязанных драйверов и наличие аварий. Набор доступных значений задаётся через filterOptions, поэтому компонент отображает эти свойства как обычное дерево выбора и не привязывает UI к конкретной модели хранения.

ts
/**
 * @description Фильтры по свойствам объекта, которые не относятся к текстовому
 * поиску и теговым группам. Пустой массив `objectTypes` не ограничивает типы.
 */
export interface LibObjectFilterPropertyFilters {
  objectTypes: string[];
  hasLogic: boolean;
  hasDrivers: boolean;
  hasAlarms: boolean;
  /**
   * «Все» — явное отсутствие ограничений по свойствам. Доминирует: проверки
   * типов и флагов пропускаются. Единый контракт дерева и представлений.
   */
  hasAll?: boolean;
}

Теговые группы tagGroups

tagGroups — структурная часть пресета для теговой фильтрации. Внешний массив групп работает как «или» между альтернативами, внутренний массив тегов работает как «и» внутри одной группы. Такой формат валидируется как обычные данные и не требует дополнительного разбора перед выполнением фильтра.

ts
/**
 * @description Структурный контракт тегового фильтра. Внешний массив работает
 * как OR между группами, внутренний массив работает как AND между тегами внутри
 * одной группы. Такой формат хранится и передаётся без парсинга строкового DSL.
 */
export type LibObjectFilterTagGroups = string[][];

Mentioned In