Skip to content

fix(CustomSelect): fix onInputChange callback when reset input value #8636

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 2 commits into
base: master
Choose a base branch
from

Conversation

EldarMuhamethanov
Copy link
Contributor

@EldarMuhamethanov EldarMuhamethanov commented Jun 4, 2025


  • Unit-тесты
  • Release notes

Описание

В компоненте CustomSelect событие onInputChange корректно уведомляет об изменениях значения поискового поля ввода (input) при взаимодействии пользователя. Однако при закрытии селекта метод close принудительно сбрасывает значение input (через setInputValue('')), но событие onInputChange при этом не вызывается. Это создает неопределенность: значение поля ввода изменилось, но подписчики onInputChange не получают уведомления.

Значение поля ввода сбрасывается в методе close (через setInputValue('')), но событие onInputChange не вызывается, что нарушает ожидания разработчика, использующего это событие для отслеживания изменений.

Изменения

  • При сбросе значения в input сделал вызов нативного ивента 'input' на поле ввода, чтобы спровоцировать вызов onInputChange c переданным событием
  • Также пришлось заменить обработчик onChange на onInput по причине того, что в React onChange работает не также как в нативном js - он работает точно также как и onInput, но его нельзя стригерить через dispatchEvent, а input событие можно. По логике ничего сломаться не должно

UPD

Вскрылся баг в CalendarTime: там использовался проп onInputChange, в котором мутировалось значение input и выбиралось соответствующее число. И получалось, что при вводе числа, а затем при его выборе, сначала число устанавливалось корректно, а потом из-за того, что значение в инпуте сбрасывалось, то и число тоже сбрасывалось.

Придумал следующее решение: в onChangeInput добавил вторым параметром reason - причина изменения значения в input со следующими возможными значениями: 'input' - ввод с клавиатуры, 'close-droppdown' - закрылся дропдаун и значение сбросилось, 'clear-by-button' - значение очищено нажатием на кнопку clear. В CalendarTime в обработчике onInputChange, если reason !== 'iinput' то дальше не обрабатываем

Release notes

Исправления

  • CustomSelect: Раньше при сбросе значения в input не србатывал колбэк onInputChange

@EldarMuhamethanov EldarMuhamethanov requested a review from a team as a code owner June 4, 2025 09:43
@github-actions github-actions bot added the ci:cherry-pick:patch Автоматизация: PR продублируется в ветку последнего минорного релиза для выпуска патча label Jun 4, 2025
Copy link
Contributor

github-actions bot commented Jun 4, 2025

size-limit report 📦

Path Size
JS 409.35 KB (+0.08% 🔺)
JS (gzip) 122.01 KB (+0.09% 🔺)
JS (brotli) 100.09 KB (-0.04% 🔽)
JS import Div (tree shaking) 1.56 KB (0%)
CSS 349.12 KB (0%)
CSS (gzip) 43.25 KB (0%)
CSS (brotli) 34.51 KB (0%)

Copy link
Contributor

github-actions bot commented Jun 4, 2025

e2e tests

Playwright Report

Copy link
Contributor

github-actions bot commented Jun 4, 2025

👀 Docs deployed

📦 Package ✅

yarn add @vkontakte/vkui@https://vkui-screenshot.hb.bizmrg.com/pull/8636/880b9b27f77ed52e8559c887be0851bba6be7839/pkg/@vkontakte/vkui/_pkg.tgz

Commit 880b9b2

Copy link

codecov bot commented Jun 4, 2025

Codecov Report

Attention: Patch coverage is 95.23810% with 1 line in your changes missing coverage. Please review.

Project coverage is 95.89%. Comparing base (df54785) to head (880b9b2).
Report is 47 commits behind head on master.

Files with missing lines Patch % Lines
.../vkui/src/components/CalendarTime/CalendarTime.tsx 83.33% 1 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##           master    #8636      +/-   ##
==========================================
- Coverage   95.89%   95.89%   -0.01%     
==========================================
  Files         416      416              
  Lines       11935    11948      +13     
  Branches     3949     3951       +2     
==========================================
+ Hits        11445    11457      +12     
- Misses        490      491       +1     
Flag Coverage Δ
unittests 95.89% <95.23%> (-0.01%) ⬇️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@EldarMuhamethanov EldarMuhamethanov marked this pull request as draft June 4, 2025 10:07
@EldarMuhamethanov EldarMuhamethanov removed the ci:cherry-pick:patch Автоматизация: PR продублируется в ветку последнего минорного релиза для выпуска патча label Jun 4, 2025
@EldarMuhamethanov EldarMuhamethanov marked this pull request as ready for review June 4, 2025 12:24
@vkcom-publisher vkcom-publisher added the pr-needs-work Автоматизация: PR автоматически закроется через 14 дней при отсутствии активности label Jun 12, 2025
@EldarMuhamethanov EldarMuhamethanov removed the pr-needs-work Автоматизация: PR автоматически закроется через 14 дней при отсутствии активности label Jun 16, 2025
@vkcom-publisher vkcom-publisher added pr-needs-work Автоматизация: PR автоматически закроется через 14 дней при отсутствии активности and removed pr-needs-work Автоматизация: PR автоматически закроется через 14 дней при отсутствии активности labels Jun 24, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[Bug]: Неконсистентное поведение onInputChange при закрытии CustomSelect
2 participants