Skip to content
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

remove disconnected autoPopovers during topMostPopoverAncestor algo #99

Conversation

keithamus
Copy link
Collaborator

@keithamus keithamus commented May 17, 2023

Prior to this change, a popover removed from the document would still be in the autoPopovers set, and subsequently topMostPopverAncestor would return disconnected elements, causing closeAllPopovers to hit an infinite loop:

  1. hidePopover is called
  2. closeAllPopovers is called
  3. topMostPopoverAncestor is called and returns disconnected element.
  4. hidePopover(topMost) is called but returns false, as the element is disconnected.
  5. topMostPopoverAncestor is called, but it returns the same element. Repeat step 4, infinite loop.

This commit alters topMostAutoPopover to check if the element is disconnected, and remove it from the set if so, only returning the first connected element.

  1. hidePopover is called
  2. closeAllPopovers is called
  3. topMostPopoverAncestor is called, the first element is disconnected, so it skips and returns the first connected element.
  4. hidePopover(topMost) is called and returns true.
  5. No infinite loop.

Steps to test/reproduce

Please explain how to best reproduce the issue and/or test the changes locally (including the pages/URLs/views/states to review).
I've added a new test file "edge-cases.spec". This includes a test which fails on the current build (times out due to the browser hanging), but passes with the changes.

Show me

Provide screenshots/animated gifs/videos if necessary.

Special thanks to @hmaurer for giving me an easy repro to this one!

@netlify
Copy link

netlify bot commented May 17, 2023

Deploy Preview for popover-polyfill ready!

Name Link
🔨 Latest commit 5a4486f
🔍 Latest deploy log https://app.netlify.com/sites/popover-polyfill/deploys/64658cbff9ad58000810a7fa
😎 Deploy Preview https://deploy-preview-99--popover-polyfill.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify site settings.

Prior to this change, a popover removed from the document would still be
in the autoPopovers set, and subsequently `topMostPopverAncestor` would
return disconnected elements, causing `closeAllPopovers` to hit an
infinite loop:

1. `hidePopover` is called
2. `closeAllPopovers` is called
3. `topMostPopoverAncestor` is called and returns disconnected element.
4. `hidePopover(topMost)` is called but returns false, as the element is
   disconnected.
5. `topMostPopoverAncestor` is called, but it returns the same element.
   Repeat step 4, infinite loop.

This commit alters `topMostAutoPopover` to check if the element is
disconnected, and remove it from the set if so, only returning the first
connected element.

1. `hidePopover` is called
2. `closeAllPopovers` is called
3. `topMostPopoverAncestor` is called, the first element is
   disconnected, so it skips and returns the first connected element.
4. `hidePopover(topMost)` is called and returns true.
5. No infinite loop.
@keithamus keithamus force-pushed the remove-disconnected-autopopovers-during-topmostpopoverancestor-algo branch from b997ec3 to 478e000 Compare May 17, 2023 10:23
@keithamus
Copy link
Collaborator Author

@jgerigmeyer could we get this one out as a 0.2.1 release please?

…ostpopoverancestor-algo

* main:
  chore(deps): Automated dependency upgrades
Copy link
Member

@jgerigmeyer jgerigmeyer left a comment

Choose a reason for hiding this comment

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

🎉

@jgerigmeyer jgerigmeyer merged commit 83d67e6 into main May 18, 2023
@jgerigmeyer jgerigmeyer deleted the remove-disconnected-autopopovers-during-topmostpopoverancestor-algo branch May 18, 2023 02:32
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.

2 participants