Skip to content

fix: remove emissão de objeto vazio ao realizar blur#1096

Merged
lucasn4s merged 2 commits into
mainfrom
bugfix/empty-select-model-value-on-focus
Jun 30, 2026
Merged

fix: remove emissão de objeto vazio ao realizar blur#1096
lucasn4s merged 2 commits into
mainfrom
bugfix/empty-select-model-value-on-focus

Conversation

@jvictordev1

@jvictordev1 jvictordev1 commented Jun 29, 2026

Copy link
Copy Markdown
Contributor

Por favor, verifique se o seu pull request está de acordo com o checklist abaixo:

  • A implementação feita possui testes (Caso haja um motivo para não haver testes/haver apenas testes de snapshot, descrever abaixo)
  • A documentação no mdx foi feita ou atualizada, caso necessário
  • O eslint passou localmente

1 - Resumo

Ao focar no select (com o mouse ou teclado) e depois desfocar o model era atualizado para um objeto vazio {}. Esse comportamento também acontecia quando selecionávamos uma opção, depois pesquisassemos por um item inexistente e desfocasse o input.

Isso é um problema pois nos nossos formulários o objeto vazio é truthy e, com isso, enviado ao back-end. Caso o usuário foque num select não obrigatório e tente enviar o formulário o back-end enviará um erro de validação ou, se não houver uma validação bem implementada, armazenará o objeto vazio na base.

2 - Tipo de pull request

  • 🧱 Novo componente
  • ✨ Nova feature ou melhoria
  • 🐛 Fix
  • 👨‍💻 Refatoração
  • 📝 Documentação
  • 🎨 Estilo
  • 🤖 Build ou CI/CD

3 - Esse PR fecha alguma issue? Favor referenciá-la

#1095

4 - Quais são os passos para avaliar o pull request?

  • Foque no select com o mouse ou teclado e depois desfoque sem selecionar nada; verifique que o evento update:model-value não é disparado
  • Com o input no modo searchable selecione um item qualquer, depois pesquise por um item inexistente e desfoque sem selecionar nada; verifique que o evento update:model-value é disparado com null

5 - Imagem ou exemplo de uso:

Gravacao.de.tela.de.2026-06-29.10-52-11.webm

6 - Esse pull request adiciona breaking changes?

  • Sim
  • Não

@github-actions github-actions Bot added the 🐛 Bug Algo não está funcionando label Jun 29, 2026
@greptile-apps

greptile-apps Bot commented Jun 29, 2026

Copy link
Copy Markdown
Contributor

Greptile Summary

Esta PR corrige dois comportamentos indevidos do Select: a emissão de {} ao focar e desfocar sem selecionar nada, e a não limpeza da seleção ao buscar um termo inexistente num campo pesquisável.

  • Select.vue – remoção do bloco problemático em hide(): o trecho que atribuía localValue.value = {} quando searchString estava vazia era a raiz da emissão de objeto vazio. Sua remoção é cirúrgica e correta; o caminho shouldClearSelection já cuidava do cenário legítimo de limpeza para selects pesquisáveis sem resultados.
  • filterOptions – expansão da condição: a condição props.searchable && props.addable passou para props.searchable, garantindo que searchString.value seja rastreado em qualquer componente pesquisável — necessário para que o bloco removido não voltasse a depender de searchString sempre vazia em componentes searchable && !addable.
  • Select.spec.js – novos testes: dois testes foram adicionados, cobrindo o foco+blur sem seleção e a preservação do valor ao pesquisar um item existente; falta, porém, um teste para o caminho em que a busca não retorna resultados e o blur deve emitir null.

Confidence Score: 4/5

A mudança é segura para merge; remove exatamente o bloco responsável pela emissão indevida e não altera nenhum outro comportamento do componente.

A lógica do fix está correta e o risco de regressão é baixo. O único ponto de atenção é a ausência de um teste para o caminho shouldClearSelection (busca sem resultados + blur → emit null), cenário explicitamente descrito na PR.

O arquivo src/tests/Select.spec.js merece atenção: falta o caso de teste onde o usuário pesquisa um termo que não existe em um select searchable e desfoca.

Important Files Changed

Filename Overview
src/components/Select.vue Remove o bloco que atribuía {} a localValue no blur, corrigindo a emissão indevida de objeto vazio; expande também o rastreamento de searchString para qualquer componente searchable (não apenas addable).
src/tests/Select.spec.js Adiciona dois testes para o fix, mas falta cobertura para o caminho shouldClearSelection (searchable + item sem resultado + blur → emit null) descrito na PR.

Reviews (1): Last reviewed commit: "fix: remove emissão de objeto vazio ao r..." | Re-trigger Greptile

Comment thread src/tests/Select.spec.js
@lucasn4s lucasn4s merged commit 556ea65 into main Jun 30, 2026
8 checks passed
@lucasn4s lucasn4s deleted the bugfix/empty-select-model-value-on-focus branch June 30, 2026 12:16
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

🐛 Bug Algo não está funcionando

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants