-
Notifications
You must be signed in to change notification settings - Fork 186
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
fix(CustomSelect): refactor logic of empty value #7822
fix(CustomSelect): refactor logic of empty value #7822
Conversation
size-limit report 📦
|
This pull request is automatically built and testable in CodeSandbox. To see build info of the built libraries, click here or the icon next to each commit SHA. |
e2e tests |
👀 Docs deployed
Commit 7168752 |
Codecov ReportAttention: Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## master #7822 +/- ##
==========================================
- Coverage 95.17% 95.17% -0.01%
==========================================
Files 376 376
Lines 11021 11041 +20
Branches 3662 3664 +2
==========================================
+ Hits 10489 10508 +19
- Misses 532 533 +1
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Sentry. |
# Conflicts: # packages/vkui/src/components/CustomSelect/Readme.md
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Классная идея и реализация 👍 🔥
Я бы ещё явно в доке Select прописал про необходимость использовать null
в качестве значения для не выбранной опции, чтобы не было сюрпризов.
Отдельной секцией, не только в пропе.
И примеры с null
в доках Select, CustomSelect, NativeSelect.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Класс!
Теперь можно будет аккуратно убрать dispatch событий onChange, чтобы не мимикрировать под нативный onChange
VKUI/packages/vkui/src/components/CustomSelect/CustomSelect.tsx
Lines 482 to 484 in e871f60
if (shouldTriggerOnChangeWhenControlledAndInnerValueIsOutOfSync) { | |
const event = new Event('change', { bubbles: true }); | |
selectElRef.current?.dispatchEvent(event); |
selectElRef.current?.dispatchEvent(event); |
Но это уже отдельно можно сделать.
Co-authored-by: Andrey Medvedev <[email protected]>
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
❤️ 💅
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🚀 💅
Описание
Сейчас в компоненте
CustomSelect
есть проблема с тем, что у option может бытьvalue=""
, но у нас это значение используется для невыбранного состояния. Нужно придумать как разделить этий кейсы.Изменения
value=""
. Решил, что для невыбранного состояния можно использоватьnull
.undefined
не подойдет, так как он используется дляUncontrolled
компонентов.value
в него прокинутьnull
, то он конвертирует его в пустую строку(""
), что мешает использоватьnull
в качестве невыбранного состояния. Решил, что можно использовать специальную строку для отображения невыбранного состоянияonChange
при сбросе выбранного значения через кнопкуclear
. Выходит, что получаются следующие типы:SelectValue
вNativeSelectValue
и наоборотonChange
. Туда будет прокидываться новоеvalue
. В документации указал, что рекомендуется использовать именно второе значение. Сделал вторым параметром, чтобы не ломать обратную совместимость, возможно в будущем стоит поменять местами с первым.value
иdefaultValue
написал про использованиеnull
вместоundefined
для указания невыбранного состоянияControlled
иUncontrolled
компонента. Добавил варнинг в таком случае.UPD
onChange
событияChangeEvent
Release notes
Исправления
value=""
issue [Bug]: Недетерминированное поведение CustomSelect и пустого value #7696Улучшения
null
вместоundefined
или пустой строки. То же самое относится и к CustomSelect и NativeSelectBREAKING CHANGE
Select: в колбэк
onChange
вместо ChangeEvent теперь прокидывается новое значение. То же самое относится и к CustomSelect и NativeSelectПример