Barista: Campo de filtro 2 - Levantamento de requisitos

Criado em 6 mai. 2020  ·  21Comentários  ·  Fonte: dynatrace-oss/barista

Como a implementação atual do componente de campo de filtro carece de alguns recursos que foram solicitados no passado, mas são realmente difíceis de corrigir no estado atual, estamos brincando com a ideia de criar uma segunda versão do campo de filtro. Quando iniciamos a primeira implementação do campo de filtro, muitos requisitos foram adicionados após a implementação inicial, o que dificultou muito o atendimento de todos eles.
Com esta versão queremos criar a lista de requisitos antecipadamente para melhor atender a expectativa do consumidor de bibliotecas.
Por favor, envolva-se e adicione a esta discussão, pois queremos ser especialmente minuciosos para evitar um cenário semelhante novamente.


Fonte de dados

Possibilidade de adicionar/definir filtros disponíveis para a fonte de dados do campo de filtro

Deve ser fácil definir quais filtros estão disponíveis, informar o tipo de filtro, seus filhos e validadores. Na implementação v1, isso é feito por meio de um objeto de configuração e da fonte de dados .

Possibilidade de anexar filtros disponíveis à fonte de dados de forma assíncrona

Esse é um recurso importante para carregar mais dados com base na entrada dos usuários. Isso pode variar de uma palavra especial filtrada em uma situação de preenchimento automático ou o caminho usado para um filtro especial. Deve ser possível estender os filtros atualmente disponíveis, bem como carregar a próxima etapa do filtro. (Refere-se ao nº 868)

Filtros selecionados (tags)

Um filtro selecionado consiste em uma chave, um valor e possivelmente alguns metadados que refletirão o estado das tags.

As exibições de chave e valor de tag devem ser personalizáveis

Conforme descrito em #1113, há um requisito para personalizar as propriedades key exibidas e possíveis value que são mostradas dentro de cada tag individual.

Os filtros selecionados devem ser fáceis de configurar programaticamente

Na implementação v1 os filtros só podem ser configurados por referência aos elementos que foram passados ​​no topo da fonte de dados, o que parece bastante tedioso. (Refere-se ao nº 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

Deve ser fácil alterar o estado de uma tag programaticamente

Deve ser fácil alterar o estado dos filtros atualmente definidos para editable / disabled / read-only . A implementação atual agora exige que o consumidor obtenha os filtros definidos no momento e encontre a instância que deseja manipular e adicione as alterações lá (refere-se a #848).

As tags podem ser editáveis

Deve ser possível para o usuário voltar para um filtro já definido e editar seu valor.

Conectores lógicos entre tags

Uma solicitação recorrente é adicionar conectores lógicos, ou seja, NOT , AND e OR à lista de tags.
Obrigado @subarroca por mencionar isso.

Agrupamentos lógicos

Como uma extensão para os conectores lógicos entre as tags, @petrabrunner também mencionou que as tags conectadas logicamente devem ser agrupadas entre parênteses.

Singularidade

Alguns filtros devem ser removidos da lista de filtros disponíveis, caso o filtro já tenha sido selecionado uma vez pelo usuário.

Tipos de filtro e extensões

Aninhamento de filtros

Os filtros devem ser encaixáveis, para fornecer ao usuário um caminho simples para filtrar o par de valor-chave real. Isso se reflete bastante bem no comportamento da v1.

Selecione de um conjunto (autocompletar)

Isso permitirá que o usuário selecione um único valor dos filtros fornecidos. Isso pode ser aninhado até que o último filtro seja selecionado, ou seja, escolher uma cidade dá ao usuário as seguintes opções de filtro: País > Estado > Região > Cidade
Esses conjuntos podem ter uma opção distinta, ou seja, se um dos conjuntos distintos for escolhido, não será possível selecionar outro do mesmo conjunto. Portanto, o conjunto não deve mais ser exibido como uma opção.

Texto livre com sugestões

Alguns filtros devem _apenas_ poder conter um texto livre, definido pelo usuário. A implementação atual oferece a opção de fornecer um texto. Não há indicação do que acontece como o texto é filtrado. Pode ser uma ideia adicionar alguns modos a esse tipo de filtro, ou seja, startWith , contains , exactMatch . Isso poderia dar ao consumidor um pouco mais de controle sobre a filtragem.

Alcance

Na implementação v1 o intervalo permite que o usuário escolha um ou dois valores e um destes operadores: greater than , less than , equals ou range (filtrado valor deve estar entre o primeiro e o segundo valor fornecido).
Deve ser possível fornecer valores padrão para cada campo, que é preenchido no intervalo.
Já houve pedidos para estender o intervalo para permitir operadores Maior que igual e menor que igual também. Além disso, em um modo de operador de intervalo, também deve haver a opção de cada valor ter greater/less ou greater/less than .
O intervalo também pode ser considerado uma extensão.

Seleção múltipla

Deve ser possível para um consumidor adicionar uma seleção múltipla (semelhante à seção _selecionar de uma tag_), mas não ter uma única seleção, mas uma configuração de seleção múltipla. Como @danielkaneider mencionou, isso está em simulações iniciais do campo de filtro e se parece muito com uma lista de caixas de seleção em uma sobreposição. (Edição de referência nº 1206)
Na minha opinião isso seria algo que também poderia ser considerado como uma extensão.

Intervalos com significado semântico personalizado

Isso também é altamente considerado para ser construído como uma extensão. Alguns casos de uso abrangem seleções de intervalo, que não seguem a lógica de intervalo numérico (ou seja, intervalos de número de versão levantados em #78 por @bmrozinski)

Extensão aos filtros

Deve ser possível para o consumidor fornecer facilmente sua própria versão de um filtro e personalizar a sobreposição de acordo com suas necessidades. O que deve ser considerado é criar uma interface entre o campo de filtro e a extensão, para que uma comunicação sólida entre a extensão e o campo de filtro possa acontecer.
Isso abriria muitas possibilidades para os consumidores melhorarem o campo do filtro e ajustá-lo às suas necessidades.

Atualmente considerado feito por meio de uma extensão (primeira ou terceira parte):

  • Alcance
  • Intervalos com significado semântico
  • Seleção múltipla
  • Seletor de data

Validação

Cada filtro enviado deve poder ser validado contra funções validadoras passadas. Na implementação v1, isso só era possível para o tipo free-text .

Filtragem de entrada

Quando o usuário estiver preenchendo ou selecionando um filtro, os filtros disponíveis devem ser exibidos e filtrados com base na entrada do usuário. A implementação da v1 já possui esse comportamento e gostaríamos de mantê-lo.

Suporte para integração de formulários angulares

Com base em https://github.com/dynatrace-oss/barista/issues/951#issuecomment -631519841 deve ser investigado se uma integração com o Angular Forms será viável (os valores dos campos de filtro podem ser bastante complexos). Mas isso é definitivamente algo para analisar.

filter-field needs discussion

Comentários muito úteis

Olá!

Recebemos alguns comentários sobre outro aspecto que poderia ser melhorado, ou seja, como o filtro lida com a entrada de texto médio/longo.

Atualmente, o widget apresenta uma "janela" de entrada de cerca de 24 a 25 caracteres, o que dificulta um pouco a revisão do texto inserido ou copiado e colado.
O widget, por exemplo, pode expandir e usar o espaço livre do lado direito, especialmente em telas grandes.

Screenshot 2020-10-23 at 09 29 30

A caixa azul destaca o tamanho da caixa de entrada, o texto de exemplo é: _este é um texto moderadamente longo_

Todos 21 comentários

parece ótimo caras. já tínhamos alguns requisitos em andamento sobre os quais queríamos entrar em contato com você. Eu vejo que eles já estão cobertos aqui

Pediram-nos para incluir AND, OR e NOT.
Também estados desabilitados, que você já está considerando

As primeiras simulações tinham uma seleção múltipla visualizada. Em vez de apenas obter uma lista de sugestões e selecionar uma, você obteria aquelas com caixas de seleção na frente; para que você possa selecionar vários deles. É uma versão mais simples do filtro AND e melhor do que inserir o mesmo filtro (por exemplo, país) várias vezes

Pediram-nos para incluir AND, OR e NOT.

Obrigado @subarroca por trazer isso à tona, adicionei isso à lista original de requisitos.

As primeiras simulações tinham uma seleção múltipla visualizada. Em vez de apenas obter uma lista de sugestões e selecionar uma, você obteria aquelas com caixas de seleção na frente;

Obrigado @danielkaneider por trazer isso à tona. Eu adicionei isso à lista original de requisitos.

Para alguns filtros pode haver uma grande quantidade de sugestões, por exemplo, tags. Seria bom limitá-los a N sugestões e exibir "Comece a digitar para ver mais" que seria buscado de forma assíncrona quando o usuário estiver digitando - tipo de pesquisa do lado do servidor.

Talvez valha a pena adicionar #78 aos requisitos.

Também estou contando com a implementação nº 78 no Filterfield v2. Os filtros de intervalo seriam perfeitos para casos de uso relacionados à filtragem de número de versão (por exemplo, 1.194.0).

Também estou contando com a implementação nº 78 no Filterfield v2.

Absolutamente. Já adicionei à lista. Embora eu considere que muitos deles são realmente construídos como uma extensão (ou seja, não fornecidos pela própria biblioteca barista), é bom ter todos esses casos de uso para extensões presentes também, para definirmos a interface entre o filtro- campo v2 e uma extensão personalizada melhor.

Temos exatamente o caso de uso que @Argeath descreveu, com muitas tags para filtragem na visualização de novos problemas. Queremos apenas retornar um subconjunto de tags do servidor, correspondendo à consulta que o usuário inseriu no campo de filtro. E podemos até ter que limitar esses resultados correspondentes, pois pode haver muitos. Portanto, uma maneira de indicar resultados "truncados" também seria bom.

Oi, ótimo ver que você planeja dar uma repaginada no filterfield ;)

o caso de uso que temos é um pouco complexo, e não sei se as sugestões acima já o cobrem completamente. Adoraríamos poder encadear termos de filtro com conectores lógicos (AND, OR,...)

fe:
mostrar tudo para (criador=usuário E gravidade=alta) OU (criador=usuário E gravidade=baixa)

sempre nos referimos a ele como "a maneira como o jira permite filtrar problemas".
Eu já vi as "seleções múltiplas para um tipo de filtro" e as instruções AND/OR - mas será possível definir termos de filtro com colchetes (ou qualquer outra maneira) e combiná-los com operadores lógicos?

@petrabrunner Infelizmente, não acho que este seja um caso de uso para o campo de filtro em particular, pois isso se assemelha cada vez mais a um padrão de linguagem de consulta. Com certeza também existem casos de uso para o seu tipo de consulta, mas eu tentaria não misturar a funcionalidade de linguagem de consulta com o campo de filtro.
O exemplo dado por você pode parecer funcionar em um contexto de campo de filtro, mas se você se referir a _como o jira permite filtrar problemas_, isso pode ficar mais complexo muito rapidamente.
TBH, mesmo os operadores lógicos no campo de filtro provavelmente são um trecho para isso. Atualmente estou tentando descobrir o que as pessoas esperariam do campo de filtros, se tudo aqui será construído ou mesmo viável é provavelmente uma discussão para mais tarde.

Vou adicionar agrupamento lógico à lista acima, mas esteja ciente de que isso pode estar muito abaixo na lista de prioridades.

@tomheller thx pela resposta - tbh. Eu já esperava isso - pois a lógica seria bastante extensa - mas imaginei que, se eu não falar sobre nosso caso de uso, você não sabe disso;)

Também precisaríamos do recurso de carregar dados para preenchimentos automáticos como parciais. Por exemplo, carregue as primeiras 100 opções e ao procurar uma opção carregue as filtradas do servidor.

O PR para a implementação atual pode ser visto aqui: https://github.com/dynatrace-oss/barista/pull/1021

Olá a todos, também temos algumas petições, classificadas de mais a menos prioritárias:

  • A capacidade de definir valores numéricos mínimo e máximo padrão para tipos de filtro de intervalo.
  • Um novo tipo de filtro: o seletor de data.

Obrigado!

Seria muito legal dar suporte a formas angulares nos campos de filtro ;), então fica mais fácil de gerenciar do ponto de vista do consumidor. Talvez expor um FilterFormControl para isso ajude

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

```html
formControlName="filtro"
label="Filtrar por"
aria-label="Filtrar por controle de formulário"
clearAllLabel="Limpar tudo"

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

Oi,
Será bom ter esse recurso também:

Categoria padrão: quando o usuário começa a dar gorjeta, esta tecla é selecionada. Ao fazer isso, o usuário pode pular a etapa de selecionar a chave. Nas imagens a seguir você pode ver um exemplo disso, sendo 'Nome' a categoria padrão para filtrar:

  1. Filtro não focado:
    image
  2. Filtro focado (o usuário clicou nele):
    image
  3. Gorjeta do usuário:
    image
  4. O usuário termina de dar gorjeta:
    image
  5. O usuário pressiona a tecla enter:
    image

Olá, equipe! Eu tenho outra petição também, esta seria a definição:

getTagsForFilterKey(chave: string) | DtFilterFieldTag[] | Retorna um array de DtFilterFieldTag com todas as correspondências onde a chave do DtFilterFieldTag contém o parâmetro key
-- | -- | --

TL;DR: Uma nova versão da atual função getTagForFilter , para melhor atender às nossas necessidades.

Conforme discutido com Markus Heimbach, ele propôs adicionar a possibilidade de que, se você digitar inicialmente e todas as opções forem filtradas, ainda poderá enviar este texto como uma entrada de texto livre.
Em outras palavras, um texto livre além do preenchimento automático para o nível raiz.

Conforme discutido com Markus Heimbach, ele propôs adicionar a possibilidade de que, se você digitar inicialmente e todas as opções forem filtradas, ainda poderá enviar este texto como uma entrada de texto livre.
Em outras palavras, um texto livre além do preenchimento automático para o nível raiz.

Mas acho que é basicamente isso que @SaraDavilaMendez já mencionou com https://github.com/dynatrace-oss/barista/issues/951#issuecomment -686365435

Conforme discutido com Markus Heimbach, ele propôs adicionar a possibilidade de que, se você digitar inicialmente e todas as opções forem filtradas, ainda poderá enviar este texto como uma entrada de texto livre.
Em outras palavras, um texto livre além do preenchimento automático para o nível raiz.

Mas acho que é basicamente isso que @SaraDavilaMendez já mencionou com #951 (comentário)

Obrigada. Faltou este comentário.

Olá!

Recebemos alguns comentários sobre outro aspecto que poderia ser melhorado, ou seja, como o filtro lida com a entrada de texto médio/longo.

Atualmente, o widget apresenta uma "janela" de entrada de cerca de 24 a 25 caracteres, o que dificulta um pouco a revisão do texto inserido ou copiado e colado.
O widget, por exemplo, pode expandir e usar o espaço livre do lado direito, especialmente em telas grandes.

Screenshot 2020-10-23 at 09 29 30

A caixa azul destaca o tamanho da caixa de entrada, o texto de exemplo é: _este é um texto moderadamente longo_

Movido para APM-266067

Esta página foi útil?
0 / 5 - 0 avaliações