Appearance
Единая фильтрация объектов
LibObjectFilter задаёт единый контракт фильтрации объектов. Компонент объединяет текстовый поиск, фильтры по свойствам объекта и структурные группы тегов в один пресет, который можно сохранить и применить в разных представлениях без привязки к конкретному источнику данных или способу отображения.
Пресет фильтрации
ts
/**
* @description Общий пресет фильтрации объектов. Это переносимый контракт для
* сохранения и применения фильтра в разных приложениях и представлениях.
*/
export interface LibObjectFilterPreset
extends LibObjectFilterSearch, LibObjectFilterTagGroupFilter {
propertyFilters: LibObjectFilterPropertyFilters;
}Текстовый поиск search
search — текстовая часть общего пресета фильтрации. Компонент хранит пользовательский запрос отдельно от правил отбора, а потребитель применяет его к своему набору полей. Это позволяет использовать один и тот же UI для простого поиска по отображаемым данным и для расширенного поиска по техническим идентификаторам или связанным полям.
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[][];