Barista: Поле фильтра 2 — сбор требований

Созданный на 6 мая 2020  ·  21Комментарии  ·  Источник: dynatrace-oss/barista

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


Источник данных

Возможность добавлять/устанавливать доступные фильтры в источник данных поля фильтра

Должно быть легко определить, какие фильтры доступны, указать тип фильтра, его дочерние элементы и валидаторы. В реализации v1 это делается через объект конфигурации и источник данных .

Возможность асинхронно добавлять доступные фильтры к источнику данных

Это ключевая функция для загрузки большего количества данных на основе ввода пользователей. Это может варьироваться от специального слова, которое фильтруется в ситуации автозаполнения, или пути к специальному фильтру. Должна быть возможность расширить доступные в настоящее время фильтры, а также загрузить следующий шаг фильтрации. (Относится к #868)

Выбранные фильтры (теги)

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

Отображение ключа и значения тега должно быть настраиваемым

Как указано в #1113, необходимо настроить отображаемые key и возможные свойства value , которые отображаются внутри каждого отдельного тега.

Выбранные фильтры должны легко устанавливаться программно.

В реализации v1 фильтры могут быть установлены только по ссылке на элементы, которые были переданы поверх источника данных, что кажется довольно утомительным. (Относится к #473)

https://github.com/dynatrace-oss/barista/blob/fa98ac150b6d324f5c3eaed990c6d6c5f155f318/libs/examples/src/filter-field/filter-field-programmatic-filters-example/filter-field-programmatic-filters-example.ts# L67 -L77

Должно быть легко изменить состояние тега программно.

Должно быть легко изменить состояние текущих установленных фильтров на editable / disabled / read-only . Текущая реализация прямо сейчас требует, чтобы потребитель получил текущие установленные фильтры и нашел экземпляр, которым он хочет манипулировать, и добавил туда изменения (см. #848).

Теги можно редактировать

Пользователь должен иметь возможность вернуться к уже установленному фильтру и отредактировать его значение.

Логические соединители между тегами

Повторяющийся запрос заключается в добавлении логических соединителей, т. е NOT , AND и OR в список тегов.
Спасибо @subarroca за упоминание об этом.

Логические группировки

В дополнение к логическим соединителям между тегами @petrabrunner также упомянул, что логически связанные теги должны группироваться в круглых скобках.

Уникальность

Некоторые фильтры должны быть удалены из списка доступных фильтров, если фильтр уже выбран пользователем.

Типы фильтров и расширения

Вложение фильтров

Фильтры должны быть вложенными, чтобы предоставить пользователю простой путь для фильтрации до фактической пары ключ-значение. Это довольно хорошо отражено в поведении v1.

Выбрать из набора (автозаполнение)

Это позволит пользователю выбрать одно значение из предоставленных фильтров. Его можно вкладывать до тех пор, пока не будет выбран последний фильтр, т. е. выбор города дает пользователю следующие параметры фильтра: Страна > Штат > Регион > Город.
Эти наборы могут иметь отдельный параметр, что означает, что если выбран один из различных наборов, невозможно выбрать другой из того же набора. Поэтому набор больше не должен отображаться как вариант.

Свободный текст с предложениями

Некоторые фильтры должны _просто_ иметь возможность удерживать произвольный текст, определенный пользователем. Текущая реализация дает возможность предоставить текст. Нет никаких указаний на то, что происходит, как фильтруется текст. Может быть идея добавить пару режимов к этому типу фильтра, т.е. startWith , contains , exactMatch . Это может дать потребителю немного больше контроля над фильтрацией.

Диапазон

В реализации v1 диапазон позволяет пользователю выбрать одно или два значения и один из следующих операторов: greater than , less than , equals или range (отфильтровано). значение должно быть между первым и вторым предоставленным значением).
Должна быть возможность указать значения по умолчанию для каждого поля, которое заполняется в диапазоне.
Уже поступили запросы на расширение диапазона, чтобы разрешить операторы больше, чем равно, и меньше, чем равно. Кроме того, в режиме оператора Range также должен быть выбор для каждого значения: greater/less или greater/less than .
Ассортимент также можно рассматривать как расширение.

Выбор из нескольких вариантов

У потребителя должна быть возможность добавить множественный выбор (аналогично _select из раздела tag_), но не с одним выбором, а с настройкой множественного выбора. Как упомянул @danielkaneider , это было в первоначальных макетах поля фильтра и очень похоже на список флажков в наложении. (Справочная проблема № 1206)
На мой взгляд, это было бы чем-то, что также можно было бы рассматривать как расширение.

Диапазоны с пользовательским семантическим значением

Это также высоко считается построенным в качестве расширения. Некоторые варианты использования охватывают выбор диапазона, который не соответствует логике числового диапазона (например, диапазоны номеров версий , поднятые в # 78 @bmrozinski).

Расширение к фильтрам

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

В настоящее время считается, что это делается через расширение (первое или третье лицо):

  • Диапазон
  • Диапазоны со смысловым значением
  • Выбор из нескольких вариантов
  • Датапикер

Проверка

Каждый отправленный фильтр должен быть проверен на соответствие переданным функциям валидатора. В реализации v1 это было возможно только для типа free-text .

Входная фильтрация

Когда пользователь находится в процессе заполнения или выбора фильтра, доступные фильтры должны отображаться и фильтроваться на основе ввода пользователя. Реализация v1 уже поддерживает это поведение, и мы хотели бы сохранить его.

Поддержка интеграции с Angular Forms

На основании https://github.com/dynatrace-oss/barista/issues/951#issuecomment -631519841 следует выяснить, будет ли возможна интеграция с Angular Forms (значения полей фильтра могут быть довольно сложными). Но это определенно то, на что стоит обратить внимание.

filter-field needs discussion

Самый полезный комментарий

Привет!

Мы получили отзывы о другом аспекте, который можно было бы улучшить, а именно о том, как фильтр работает с вводом среднего/длинного текста.

В настоящее время виджет представляет собой входное «окно» размером около 24-25 символов, что немного затрудняет просмотр текста, который вводится или копируется.
Виджет, например, может расширяться и использовать свободное пространство справа, особенно на больших экранах.

Screenshot 2020-10-23 at 09 29 30

Синее поле выделяет размер поля ввода, пример текста: _это умеренно длинный текст_

Все 21 Комментарий

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

Нас попросили включить И, ИЛИ и НЕ.
Также отключенные состояния, которые вы уже рассматриваете

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

Нас попросили включить И, ИЛИ и НЕ.

Спасибо @subarroca за это, я добавил это в первоначальный список требований.

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

Спасибо @danielkaneider за то, что подняли эту тему. Я добавил это в первоначальный список требований.

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

Возможно, стоит добавить #78 к требованиям.

Я также рассчитываю на реализацию #78 в Filterfield v2. Фильтры диапазона были бы идеальными для вариантов использования, касающихся фильтрации номера версии (например, 1.194.0).

Я также рассчитываю на реализацию #78 в Filterfield v2.

Абсолютно. Я добавил его в список. Хотя я считаю, что многие из них на самом деле созданы как расширения (то есть не предоставляются самой библиотекой бариста), хорошо иметь все эти варианты использования для расширений, чтобы мы могли определить интерфейс между фильтром и поле v2 и пользовательское расширение лучше.

У нас есть именно тот вариант использования, который описал @Argeath , с множеством тегов для фильтрации в новом представлении проблем. Мы хотим вернуть только подмножество тегов с сервера, соответствующее запросу, который пользователь ввел в поле фильтра. И нам, возможно, даже придется ограничить эти совпадающие результаты, поскольку их может быть слишком много. Таким образом, способ указать «усеченные» результаты также был бы хорош.

Привет, приятно видеть, что вы планируете изменить поле фильтра;)

вариант использования, который у нас есть, немного сложен, и я не знаю, полностью ли его охватывают приведенные выше предложения. Мы хотели бы иметь возможность связывать термины фильтра с логическими соединителями (И, ИЛИ,...)

фе:
показать все для (создатель=userx И серьезность=высокая) ИЛИ (создатель=пользователь И серьезность=низкая)

мы всегда называем это «способом, которым jira позволяет фильтровать задачи».
Я уже видел «множественный выбор для одного типа фильтра» и операторы И/ИЛИ, но можно ли будет определить термины фильтра с помощью скобок (или любым другим способом) и объединить их с логическими операторами?

@petrabrunner К сожалению, я не думаю, что это вариант использования, в частности, для поля фильтра, поскольку это все больше и больше напоминает шаблон языка запросов. Конечно, есть варианты использования и для вашего типа запросов, но я бы постарался не смешивать функциональность языка запросов с полем фильтра.
Может показаться, что приведенный вами пример работает в контексте поля фильтра, но если вы обратитесь к _способу, которым jira позволяет фильтровать задачи_, это может очень быстро усложниться.
TBH, даже логические операторы в поле фильтра, вероятно, являются натяжкой. В настоящее время я пытаюсь выяснить, чего люди ожидают от поля фильтра, если все здесь будет построено или даже возможно, это, вероятно, обсуждение на потом.

Я собираюсь добавить логическую группировку к приведенному выше списку, но имейте в виду, что это может быть очень далеко в списке приоритетов.

@tomheller спасибо за ответ - tbh. Я уже ожидал этого - так как логика будет довольно обширной - но я подумал, что если я не расскажу вам о нашем варианте использования, вы о нем не знаете ;)

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

PR для текущей реализации можно увидеть здесь: https://github.com/dynatrace-oss/barista/pull/1021 .

Всем привет, у нас тоже есть пара петиций, отсортированных от большего к меньшему приоритету:

  • Возможность установить минимальные и максимальные числовые значения по умолчанию для типов фильтров диапазона.
  • Новый тип фильтра: выбор даты.

Спасибо!

Было бы очень здорово поддерживать угловые формы в полях фильтра ;), так проще управлять с точки зрения потребителя. Может быть, разоблачение FilterFormControl для этого поможет

  interface FilterFormControl {
    field: string;
    value: FilterValue // any basically
    operator?: 'AND' | 'OR' | 'NOT'
    ...
  }  

```html
formControlName="фильтр"
label="Фильтровать по"
aria-label="Фильтровать по форме"
clearAllLabel="Очистить все"

```ts
// comes from a saved config
initFilters = [{
  field: 'foo',
  value: 'bar'
}];
form: FormGroup({
  filter: new FormControl(initFilters)
});

Привет,
Было бы неплохо иметь эту функцию:

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

  1. Фильтр не сфокусирован:
    image
  2. Фильтр сфокусирован (пользователь нажал на него):
    image
  3. Чаевые пользователя:
    image
  4. Пользователь завершает чаевые:
    image
  5. Пользователь нажимает клавишу ввода:
    image

Привет, команда! У меня есть еще одна петиция, это будет определение:

getTagsForFilterKey (ключ: строка) | DtFilterFieldTag[] | Возвращает массив DtFilterFieldTag со всеми совпадениями, где ключ DtFilterFieldTag содержит параметр key
-- | -- | --

Вкратце: новая версия текущей функции getTagForFilter , чтобы лучше удовлетворять наши потребности.

Как обсуждалось с Маркусом Хеймбахом, он предложил добавить возможность того, что если вы вводите текст изначально и все параметры отфильтрованы, вы все равно можете отправить этот текст как ввод произвольного текста.
Другими словами, свободный текст в дополнение к автозаполнению для корневого уровня.

Как обсуждалось с Маркусом Хеймбахом, он предложил добавить возможность того, что если вы вводите текст изначально и все параметры отфильтрованы, вы все равно можете отправить этот текст как ввод произвольного текста.
Другими словами, свободный текст в дополнение к автозаполнению для корневого уровня.

Но я думаю, что в основном это то, о чем @SaraDavilaMendez уже упоминала в https://github.com/dynatrace-oss/barista/issues/951#issuecomment -686365435.

Как обсуждалось с Маркусом Хеймбахом, он предложил добавить возможность того, что если вы вводите текст изначально и все параметры отфильтрованы, вы все равно можете отправить этот текст как ввод произвольного текста.
Другими словами, свободный текст в дополнение к автозаполнению для корневого уровня.

Но я думаю, что в основном это то, о чем @SaraDavilaMendez уже упоминала в #951 (комментарий)

Спасибо. Пропустил этот комментарий.

Привет!

Мы получили отзывы о другом аспекте, который можно было бы улучшить, а именно о том, как фильтр работает с вводом среднего/длинного текста.

В настоящее время виджет представляет собой входное «окно» размером около 24-25 символов, что немного затрудняет просмотр текста, который вводится или копируется.
Виджет, например, может расширяться и использовать свободное пространство справа, особенно на больших экранах.

Screenshot 2020-10-23 at 09 29 30

Синее поле выделяет размер поля ввода, пример текста: _это умеренно длинный текст_

Перенесено в APM-266067

Была ли эта страница полезной?
0 / 5 - 0 рейтинги