Skip to content

Commit

Permalink
Remove initialUpdate logic from floating Mutation observer callback (#…
Browse files Browse the repository at this point in the history
…6567) (#6571)

Убираем лишнюю оптимизацию из логики обновления позиции плавающего элемента.

У нас была дополнительная проверка на вызов коллбэка `MutationObserver`, с помощью которой мы пропускали обновление попапа при первом вызове коллбэка.
На сколько мы обсудили с @inomdzhon эта проверка была добавлена как оптимизация, чтобы не допустить лишнего ререндера при маунте.
Судя по результатам исследования у нас нету такой проблемы с ререндером из-за `MutationObserver` и эту проверку мы можем просто убрать.

А убрать нам её нужно, потому что она не даёт правильно спозиционировать опции `ChipsSelect`, если селект находится внизу окна, тем самым опции рендерятся сверху селекта. Если пользователь сразу после фокуса на селекте вводит текст, который оставляет одну-две опции в списке, то оставшиеся опции будут оторваны,  спозиционированы сильно выше селекта. Это происходит потому, что не срабатывает `update()` позиции опций, как раз из-за этой логики. И только при первом изменении размера списка опций. Если ввести текст, который вновь поменяет размер списка, позиционирование будет верным.
  • Loading branch information
mendrew authored and actions-user committed Feb 14, 2024
1 parent f5d71c0 commit fe169c5
Showing 1 changed file with 1 addition and 8 deletions.
9 changes: 1 addition & 8 deletions packages/vkui/src/lib/floating/adapters.ts
Original file line number Diff line number Diff line change
Expand Up @@ -35,14 +35,7 @@ export function autoUpdateFloatingElement(
// код с `MutationObserver`.
let observer: MutationObserver | null = null;
if (elementResize) {
let initialUpdate = true;
observer = new MutationObserver(() => {
if (!initialUpdate) {
update();
}

initialUpdate = false;
});
observer = new MutationObserver(update);

if (reference instanceof Element) {
observer.observe(reference, {
Expand Down

0 comments on commit fe169c5

Please sign in to comment.