Conversation
Greptile SummaryEste PR corrige o disparo duplo do evento Causa raiz: a função Mudanças principais:
Confidence Score: 4/5
|
| Filename | Overview |
|---|---|
| src/components/Select.vue | Correção do duplo disparo de update:modelValue — a função hide() não emite mais null ao fechar o dropdown sem busca, e o watcher de localValue agora só propaga ao model quando o valor existe em localOptions. A remoção de deep: true é segura pois localValue.value é sempre reatribuído diretamente. |
| package.json | Bump de versão de 3.154.10 para 3.154.11. |
| package-lock.json | Bump de 3.154.9 para 3.154.11, pulando 3.154.10 — indica que o package-lock.json estava desatualizado em relação ao package.json (3.154.10) no branch main antes desse PR. |
Sequence Diagram
sequenceDiagram
participant User
participant Input
participant hide()
participant watch(localValue)
participant model
Note over User,model: Fluxo ANTES do fix (bug)
User->>Input: clica na opção (mousedown → selectItem)
Input->>Input: localValue.value = cloneDeep(opção)
Input->>hide(): blur dispara hide()
hide()->>model: model.value = null ❌ (1ª emissão)
watch(localValue)->>model: model.value = opção ✅ (2ª emissão)
Note over User,model: Fluxo DEPOIS do fix
User->>Input: clica na opção (mousedown → selectItem)
Input->>Input: localValue.value = cloneDeep(opção)
Input->>hide(): blur dispara hide()
hide()->>hide(): shouldClearSelection = false (há opções)
hide()->>Input: localValue.value mantido (opção existe em localOptions)
watch(localValue)->>watch(localValue): compatibleOptions encontrado ✅
watch(localValue)->>model: model.value = opção ✅ (única emissão)
Comments Outside Diff (1)
-
src/components/Select.vue, line 543-556 (link)Limpeza de seleção apenas quando não há opções filtradas
A nova condição
shouldClearSelection(props.searchable && !props.addable && localOptions.value.length === 0) é mais precisa do que a antiga (!searchString.value && !props.addable), que limpava o model em todo blur de um select não-addable — incluindo no clique em uma opção —, causando o duplo disparo relatado.Um ponto de atenção:
localOptions.valuereferenciada aqui ainda é a lista filtrada (a restauração parapristineOptionsocorre apenas nonextTickmais abaixo na mesma função). Esse comportamento é intencional e correto para determinar se o usuário pesquisou e não encontrou nada, mas vale deixar um comentário inline no código para evitar confusão futura.Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!
Last reviewed commit: bdee403
Por favor, verifique se o seu pull request está de acordo com o checklist abaixo:
1 - Resumo
2 - Tipo de pull request
3 - Esse PR fecha alguma issue? Favor referenciá-la
4 - Quais são os passos para avaliar o pull request?
update:modelValue, a primeira com o valornulle a segunda com o valor da opção que você selecionou;5 - Imagem ou exemplo de uso:
6 - Esse pull request adiciona breaking changes?