Skip to content

Conversation

EldarMuhamethanov
Copy link
Contributor


  • Unit-тесты
  • Release notes

Описание

Исправляет баг, при котором компонент мог зависать в состоянии exiting при очень быстром открытии/закрытии (например: открыть → сразу закрыть). Корневая причина — полагание только на событие transitionend, которое в ряде реальных сценариев не гарантировано:

  • transition может не стартовать (CSS-значения до/после совпадают), поэтому transitionend не придёт;
  • есть transition-delay или задержки, которые разбегаются с ожиданиями в JS;
  • переход мог быть отменён/удален или элемент получил display: none до конца анимации;
  • при множественных свойствах анимации transitionend генерируется по каждому свойству и не всегда даёт простую семантику "анимация завершена" для корневого элемента.

Из-за этого хук иногда оставался в exiting — ни transitionend, ни логика в JS не переводили состояние дальше.

Изменения

  • Добавлена страховка: хук вычисляет ожидаемую длительность анимации (через getComputedStyletransition-duration + transition-delay) и ставит fallback-таймер при входе в активные состояния (appearing, entering, exiting).
  • Если transitionend приходит — таймер очищается и завершение происходит по событию. Если событие не пришло — таймер форсирует завершение, предотвращая "зависание".

Release notes

Исправления

  • При очень быстром открытии и закрытии ModalCard, ModalPage приложение фризило из-за того, что модальное окно не переходило в конечную фазу анимации

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

github-actions bot commented Aug 22, 2025

size-limit report 📦

Path Size
JS 409.74 KB (+0.11% 🔺)
JS (gzip) 124.16 KB (+0.12% 🔺)
JS (brotli) 102.08 KB (+0.2% 🔺)
JS import Div (tree shaking) 1.55 KB (0%)
CSS 351.65 KB (0%)
CSS (gzip) 43.59 KB (0%)
CSS (brotli) 34.76 KB (0%)

Copy link
Contributor

github-actions bot commented Aug 22, 2025

e2e tests

Playwright Report

Copy link

codecov bot commented Aug 22, 2025

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 96.03%. Comparing base (68dac1a) to head (99fc17f).
⚠️ Report is 9 commits behind head on master.

Additional details and impacted files
@@           Coverage Diff           @@
##           master    #8890   +/-   ##
=======================================
  Coverage   96.02%   96.03%           
=======================================
  Files         428      428           
  Lines       12449    12472   +23     
  Branches     4105     4113    +8     
=======================================
+ Hits        11954    11977   +23     
  Misses        495      495           
Flag Coverage Δ
unittests 96.03% <100.00%> (+<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.

Copy link
Contributor

github-actions bot commented Aug 22, 2025

👀 Docs deployed

📦 Package ✅

yarn add @vkontakte/vkui@https://vkui-screenshot.hb.bizmrg.com/pull/8890/99fc17f872fa357c520d3caa0b4a0d337ad5be86/pkg/@vkontakte/vkui/_pkg.tgz

Commit 99fc17f

Copy link
Contributor

@inomdzhon inomdzhon left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍

а в useCSSKeyframesAnimationController нужно повторить?

@EldarMuhamethanov
Copy link
Contributor Author

а в useCSSKeyframesAnimationController нужно повторить?

Там логика немного другая. Лучше, если будут кейсы, тогда поправим

Copy link
Contributor

github-actions bot commented Aug 28, 2025

📊 Найдены изменения в собранных файлах: Отчет

Commit 99fc17f

@EldarMuhamethanov EldarMuhamethanov merged commit b5fe8ca into master Sep 2, 2025
30 checks passed
@EldarMuhamethanov EldarMuhamethanov deleted the e.muhamethanov/8888/fix-fast-open-close-modal branch September 2, 2025 07:37
vkcom-publisher pushed a commit that referenced this pull request Sep 2, 2025
* fix(useCSSTransition): fix fast state changing

* fix(useCSSTransition): fix import

* fix: fix code review

* fix: add condition when duration <= 0

* fix: delete useStateWithPrev

* fix: add timer delay

* test: fix test

* test: add test

* fix: use useIsomorphicLayoutEffect instead of useEffect

* fix: use useIsomorphicLayoutEffect instead of useEffect
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
ci:cherry-pick:patch Автоматизация: PR продублируется в ветку последнего минорного релиза для выпуска патча
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[Bug]: Быстрое открытие и закрытие модалки фризит интерфейс
3 participants