From fe169c5c716281394b6541c088185ce96b6bce51 Mon Sep 17 00:00:00 2001 From: Andrey Medvedev Date: Wed, 14 Feb 2024 13:34:51 +0300 Subject: [PATCH] Remove initialUpdate logic from floating Mutation observer callback (#6567) (#6571) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Убираем лишнюю оптимизацию из логики обновления позиции плавающего элемента. У нас была дополнительная проверка на вызов коллбэка `MutationObserver`, с помощью которой мы пропускали обновление попапа при первом вызове коллбэка. На сколько мы обсудили с @inomdzhon эта проверка была добавлена как оптимизация, чтобы не допустить лишнего ререндера при маунте. Судя по результатам исследования у нас нету такой проблемы с ререндером из-за `MutationObserver` и эту проверку мы можем просто убрать. А убрать нам её нужно, потому что она не даёт правильно спозиционировать опции `ChipsSelect`, если селект находится внизу окна, тем самым опции рендерятся сверху селекта. Если пользователь сразу после фокуса на селекте вводит текст, который оставляет одну-две опции в списке, то оставшиеся опции будут оторваны, спозиционированы сильно выше селекта. Это происходит потому, что не срабатывает `update()` позиции опций, как раз из-за этой логики. И только при первом изменении размера списка опций. Если ввести текст, который вновь поменяет размер списка, позиционирование будет верным. --- packages/vkui/src/lib/floating/adapters.ts | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/packages/vkui/src/lib/floating/adapters.ts b/packages/vkui/src/lib/floating/adapters.ts index 6a04c75d0a..e0c73888d6 100644 --- a/packages/vkui/src/lib/floating/adapters.ts +++ b/packages/vkui/src/lib/floating/adapters.ts @@ -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, {