Vaadin-combo-box: Preso em um estado inválido

Criado em 22 jul. 2019  ·  6Comentários  ·  Fonte: vaadin/vaadin-combo-box

Descrição


Quando vaadin-combo-box é necessário e vaadin-combo-box foi selecionado, mas nada é escolhido, o vaadin-text-field interno será marcado como inválido ao desmarcar vaadin-combo-box . No entanto, se o atributo obrigatório for removido nesse ínterim, o vaadin-text-field interno ainda está no estado inválido.

Resultado esperado


Alterar os atributos (ou pelo menos o atributo obrigatório) em vaadin-combo-box deve acionar uma revalidação do vaadin-text-field subjacente.

Resultado real


O vaadin-text-field está preso em um estado inválido. O formulário não pode ser enviado devido a este estado inválido.

Demonstração ao vivo


https://ring-umbra.glitch.me

Passos para reproduzir

  1. Abra a demonstração
  2. Clique em vaadin-combo-box . As opções serão exibidas, mas não selecione um item (clique em algum lugar no espaço em branco)
  3. Marque a caixa de seleção para tornar o campo obrigatório.
  4. Repita a etapa 2, o vaadin-combo-box ficará vermelho e em um estado inválido.
  5. Desmarque a caixa de seleção, o campo não é mais obrigatório
  6. Repita a etapa 2, o vaadin-combo-box permanecerá em um estado inválido
  7. Selecione algo entre vaadin-combo-box
  8. Use o botão limpar para esvaziar o vaadin-combo-box : o vaadin-combo-box ainda está em um estado inválido, embora não seja mais necessário.

Alterar o atributo inválido no vaadin-combo-box não resolve o problema também, parece que este valor não está refletido no vaadin-text-field interno.

Navegadores afetados

  • [x] Chrome
  • [x] Firefox
  • [] Safari
  • [x] Edge
  • [x] IE 11
  • [] iOS Safari
  • [] Android Chrome

_Acho que os outros navegadores têm o mesmo problema, mas não consegui testá-los_

bug

Todos 6 comentários

Em vez disso, parece ser um bug em vaadin-text-field . vaadin-combo-box apenas sincroniza as propriedades required e invalid com as propriedades internas vaadin-text-field .

Acho que alterar dinamicamente o estado required (ou outras restrições de validação) simplesmente não foi considerado ao desenvolver o componente.

A validação considera required , pattern , maxlength e minlength . Se qualquer um deles for definido, ele define invalid booleano com base no valor de retorno de checkValidity() no nativo <input> . Se nenhum deles estiver definido, você ainda pode definir manualmente invalid para true ou false base em sua própria lógica e vaadin-text-field mantém o estado inválido como tem foi definido.

O problema parece ser que quando você tem apenas uma dessas restrições de validação definidas (por exemplo, required ) e o campo foi validado e se tornou inválido, e então você remove a restrição, ele não executa checkValidity() na entrada nativa mais e mantém o estado invalid (como se tivesse sido adicionado manualmente). Basicamente, o campo de texto nunca remove automaticamente o estado invalid quando não há restrições de validação ativas.

Acho que a lógica adequada aqui seria observar quando qualquer uma das required , pattern , maxlength ou minlength restrições são removidas _and_ invalid == true já, então defina this.invalid = this.inputElement.checkValidity();

Isso pode ser reproduzido com vaadin-text-field apenas por ter:

<vaadin-text-field required="{{tfRequired}}"></vaadin-text-field><br>
<label>Required <input type="checkbox" checked="{{tfRequired::change}}"></label>
  1. ativar a caixa de seleção (torna o campo de texto obrigatório)
  2. focar e desfocar o campo de texto (torna-o inválido, pois ainda está vazio)
  3. desative a caixa de seleção (torna o campo de texto não obrigatório)
  4. escreva algo no campo de texto e desfoque-o, observe que o campo de texto ainda é mostrado como inválido

Abri um problema sobre isso aqui https://github.com/vaadin/vaadin-text-field/issues/400, mas deixarei esse problema de caixa de combinação aqui para melhor visibilidade se alguém perceber o problema com a caixa de combinação. Isso deve ser fechado depois que o problema do campo de texto acima for corrigido.

Esta correção foi lançada em vaadin-text-field v2.3.9 e v2.4.10 .

Posso confirmar que está funcionando conforme o esperado agora. Obrigado voor pelo bom trabalho, @Haprog! 😄

Por falar nisso. afaik os WebJars para vaadin-text-field v2.3.9 e v2.4.10 estão quebrados, então se você precisar usá-los do Java (Vaadin 10–13 ou Vaadin 14 em modo de compatibilidade), você precisa esperar um pouco. Devemos lançar v2.3.10 e v2.4.11 em breve com WebJars funcionais.

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

Questões relacionadas

sohrabtaee picture sohrabtaee  ·  4Comentários

GoceRibeski picture GoceRibeski  ·  19Comentários

mas4ivv picture mas4ivv  ·  16Comentários

OlliTietavainenVaadin picture OlliTietavainenVaadin  ·  6Comentários

steffen-harbich-cognitum picture steffen-harbich-cognitum  ·  8Comentários