![]()
Фильтры
Функционал в разработке
Функционал фильтрации в интерфейсе представляет из себя набор фильтров и кнопку, при клике на которую выпадает панель фильтров. По умолчанию в таблице может быть выведен набор фильтров, далее пользователь может настраивать его под себя с помощью панели.
Панель фильтров
Панель содержит:
- Раздел с фильтрами. Здесь можно кликать на чекбоксы, таким образом, добавлять или убирать фильтр в обертку над таблицей. Фильтры, которые стоят по умолчанию, тоже можно убрать, кроме тех случаев, когда эта возможность выключена специально;
- Раздел с наборами фильтров. Здесь можно переключаться между наборами с помощью радиокнопок;
- Кнопку "Сохранить как набор". Она позволяет сохранить выбранные фильтры и их значения как набор;
- Кнопку сброса значений. Она очищает значения всех фильтров, добавленных в обертку над таблицей;
- Кнопку сброса набора фильтров к набору по умолчанию. Она приводит набор фильтров, добавленных в таблицу, к тому, который был добавлен по умолчанию.

Создание набора фильтров
Набор фильтров - это пользовательский набор фильтров со значениями, который на данный момент сохраняется локально. Чтобы создать набор, нужно:
-
Чекнуть желаемые фильтры на вкладке Фильтры;
-
Задать в фильтрах значения, которые вам нужны. Если этого не сделать, то набор запомнит фильтры без значений, и их каждый раз нужно будет вводить вручную;
-
Нажать в панели на кнопку Сохранить как набор;
-
Набор сохранен. Чтобы просмотреть весь список наборов, нужно переключиться на соответствующую вкладку;

-
По умолчанию набору присваивается наименование. Чтобы его изменить (или удалить набор), нужно навести на пункт мышкой и кликнуть по иконке карандаша (или корзины для удаления);

-
С помощью инлайн-редактирования можно изменить наименование набора;

-
При нажатии на иконку
bookmarkнабор фильтров выведется в баннер как избранный, то есть можно будет включать-выключать набор и видеть статистику. При наведении на иконку появляется подсказка “Показывать набор в баннере”.
Зафиксировать можно не более 3х наборов.
| Набор не в баннере | Набор в баннере |
|---|---|
![]() | ![]() |

Очистка значений фильтров
Чтобы очистить значения всех фильтров, нужно нажать на иконку с перечеркнутой воронкой (левая). Также под очистку значений будет выделена горячая клавиша cmd+shift+clear.

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

Фильтры с отрицанием
В случае, когда в фильтре нужно выбрать все значения за исключением одного, нужно использовать фильтр с кнопкой toggle button.
При зажатой кнопке в грид выведутся записи, которые соответствуют всем значениям за исключением одного, выбранного в фильтре.
Хотим видеть задачи всех спринтов, кроме спринта 16.04.2024-30.04.2024:

Хотим видеть задачи спринта 16.04.2024-30.04.2024:

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

Значение нашлось среди исполнителей:

Значение нашлось в атрибуте Тема:

DebounceTime для компонентов ввода
DebounceTime — это оператор RxJS, который используется для ограничения частоты событий в приложениях. Он задерживает обработку событий до тех пор, пока не пройдет заданный период времени без новых событий.
Свойство следует использовать при фильтрации, например таблиц или больших списков, как одноуровневых, так и с вложенностью.
Принцип работы
Оператор работает следующим образом:
- При возникновении события запускается таймер
- Если в течение заданного времени появляется новое событие, таймер сбрасывается
- Только после истечения таймера без новых событий происходит обработка последнего значения
Рекомендации по применению
- Оптимальная задержка — выбирайте время задержки в зависимости от задачи (обычно 200-500 мс для ввода текста, 300-1000 мс для других действий).
- Типы полей — в целом debounceTime можно использовать для любых типов полей. Однако не всегда есть необходимость это делать. Например, поле dropdown будет отправлять только одно поле в единый момент времени, и так как компонент после выбора значения закрывается, нет жесткой необходимости использовать свойство.
Пример использования в формате директивы:
import { Directive, EventEmitter, Output, OnDestroy } from '@angular/core';
import { NgModel } from '@angular/forms';
import { Subscription } from 'rxjs';
import { debounceTime, distinctUntilChanged } from 'rxjs/operators';
@Directive({
selector: '[QDebounceInput]',
providers: [NgModel]
})
export class DebounceInputDirective implements OnDestroy {
@Output() QDebounceInput = new EventEmitter<string>();
private subscription: Subscription;
constructor(private ngModel: NgModel) {
this.subscription = this.ngModel.valueChanges
?.pipe(
debounceTime(500),
distinctUntilChanged()
)
.subscribe(value => {
this.QDebounceInput.emit(value);
});
}
ngOnDestroy() {
this.subscription?.unsubscribe();
}
}<input
type="text"
[(ngModel)]="searchQuery"
pInputText
QDebounceInput
(QDebounceInput)="onSearch($event)"
placeholder="Введите поисковый запрос..."
>Рекомендуемые типы полей:
- Autocomplete (opens in a new tab) (Автодополнение)
- Calendar (opens in a new tab) (Календарь)
- InputNumber (opens in a new tab) (Числовое поле)
- InputText (opens in a new tab) (Текстовое поле)
- Textarea (opens in a new tab) (Текстовая область)
- ToggleButton (opens in a new tab) (Переключатель)

