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

bug: Nesting Collapse in Dropdown menu results in unintended Dropdown behaviour #3116

Open
angus6b23 opened this issue Jul 1, 2024 · 4 comments

Comments

@angus6b23
Copy link

What version of daisyUI are you using?

v4.12.10

Which browsers are you seeing the problem on?

All browsers

Reproduction URL

https://codepen.io/Angus-Wan/pen/JjqQgMq

Describe your issue

Steps to reproduce:

  1. Wrap a collapse component (using details and summary element) inside a dropdown menu (display on hover)
  2. Hover over the dropdown button, the menu display normally
  3. Hover out, the menu disappear normally
  4. Hover over somewhere near the position of the collapse component without hovering the dropdown button, the menu display unexpectedly

Please see the codepen for the action.

Copy link

github-actions bot commented Jul 1, 2024

Thank you @angus6b23 for reporting issues. It helps daisyUI a lot 💚
I'll be working on issues one by one. I will help with this one as soon as a I find a solution.
In the meantime providing more details and reproduction links would be helpful.

@andrianarivo
Copy link

Same here, nesting Dropdown > Accordion

@dvdokkum
Copy link

dvdokkum commented Sep 9, 2024

I'm also having this issue. It looks like this has come up before here: #2761 but note that the provided working code example is no longer working... the collapse elements are clickable even when the dropdown is closed.

@jo-gross
Copy link

I had the same problem, my first workaround was to implement a listener watching the open/close change to set an local state which hides the collapse when the dropdown was closed.

const [isLocalMenuOpen, setIsLocalMenuOpen] = useState(false);
  useEffect(() => {
    const dropdown = dropdownContainerRef.current;

    const handleFocus = () => {
      setIsLocalMenuOpen(true);
    };

    const handleBlur = () => {
      setIsLocalMenuOpen(false);
    };

    if (dropdown) {
      dropdown.addEventListener('focus', handleFocus);
      dropdown.addEventListener('blur', handleBlur);
    }

    return () => {
      if (dropdown) {
        dropdown.removeEventListener('focus', handleFocus);
        dropdown.removeEventListener('blur', handleBlur);
      }
    };
  }, []);

...
<div className={`collapse-content ${isLocalMenuOpen?'':'hidden'}`}>
...

But in the end, I wasn't happy with this approach, so I scrapped it and implemented something on my own. If this gets resolved, I'll give it another try.

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

No branches or pull requests

4 participants