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

[@mantine/core] Menu - Close menu when menu target children change #2646

Merged
merged 32 commits into from Oct 6, 2022
Merged
Show file tree
Hide file tree
Changes from 31 commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
846e180
[@mantine/core] Select: only use open/close callback when value changes
wes337 Feb 19, 2022
9e8045f
[@mantine/core] Select: do not use early return
wes337 Feb 19, 2022
8f446fa
Merge remote-tracking branch 'upstream/master'
wes337 Feb 19, 2022
40ea5cd
Merge remote-tracking branch 'upstream/master'
wes337 Feb 23, 2022
e1c76d0
Merge remote-tracking branch 'upstream/master'
wes337 Feb 26, 2022
52f4349
Merge remote-tracking branch 'upstream/master'
wes337 Mar 6, 2022
a74533c
Merge remote-tracking branch 'upstream/master'
wes337 Mar 10, 2022
75852b2
Merge remote-tracking branch 'upstream/master'
wes337 Mar 26, 2022
bc2b0db
Merge remote-tracking branch 'upstream/master'
wes337 Mar 27, 2022
a3c4287
Merge remote-tracking branch 'upstream/master'
wes337 Apr 3, 2022
4afe44a
Merge remote-tracking branch 'upstream/master'
wes337 Apr 19, 2022
6ac338e
Merge remote-tracking branch 'upstream/master'
wes337 May 7, 2022
3c04aba
Merge remote-tracking branch 'upstream/master'
wes337 May 9, 2022
75c8f60
Merge remote-tracking branch 'upstream/master'
wes337 May 10, 2022
7ce8791
Merge remote-tracking branch 'upstream/master'
wes337 May 25, 2022
d96a3a6
Merge remote-tracking branch 'upstream/master'
wes337 May 30, 2022
936dbb3
Merge remote-tracking branch 'upstream/master'
wes337 Jun 11, 2022
a53a6e2
Merge remote-tracking branch 'upstream/master'
wes337 Jun 12, 2022
b4b3751
Merge remote-tracking branch 'upstream/master'
wes337 Jun 12, 2022
1053827
Merge remote-tracking branch 'upstream/master'
wes337 Jun 12, 2022
3ad1b2a
Merge remote-tracking branch 'upstream/master'
wes337 Jun 20, 2022
8e439e1
Merge remote-tracking branch 'upstream/master'
wes337 Jun 30, 2022
f576e77
Merge remote-tracking branch 'upstream/master'
wes337 Aug 7, 2022
52a9357
Merge remote-tracking branch 'upstream/master'
wes337 Aug 13, 2022
792867e
Merge remote-tracking branch 'upstream/master'
wes337 Aug 18, 2022
8b26c98
Merge remote-tracking branch 'upstream/master'
wes337 Aug 18, 2022
de793e2
Merge remote-tracking branch 'upstream/master'
wes337 Aug 29, 2022
10eeb78
Merge remote-tracking branch 'upstream/master'
wes337 Sep 4, 2022
481f5ac
Merge remote-tracking branch 'upstream/master'
wes337 Oct 6, 2022
e6f2220
[@mantine/core] Menu: close menu on menu target children cleanup
wes337 Oct 6, 2022
0fcc87a
[@mantine/core] Menu: close menu in useeffect
wes337 Oct 6, 2022
766ea49
[@mantine/core] Menu: dont invoke fn
wes337 Oct 6, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
41 changes: 40 additions & 1 deletion src/mantine-core/src/Menu/Menu.story.tsx
@@ -1,4 +1,4 @@
import React from 'react';
import React, { useState, useEffect } from 'react';
import { IconTable, IconSearch } from '@tabler/icons';
import { WithinOverlays } from '@mantine/storybook';
import { Menu } from './Menu';
Expand Down Expand Up @@ -87,3 +87,42 @@ export function MenuTargetWithTooltip() {
</div>
);
}

export function WithinStickyHeaderPortal() {
const [isSticky, setIsSticky] = useState(false);

useEffect(() => {
const makeSticky = () => {
setIsSticky(window.scrollY > 0);
};

document.addEventListener('scroll', makeSticky);

return () => {
document.removeEventListener('scroll', makeSticky);
};
});

return (
<div style={{ padding: 40, height: 2000 }}>
<div
className="header"
style={{ display: 'flex', position: 'sticky', top: 0, backgroundColor: 'lightgray' }}
>
<div>Header</div>
<div style={{ visibility: isSticky ? 'hidden' : 'visible' }}>
<Menu withinPortal>
<Menu.Target>
<Button>Open Menu</Button>
</Menu.Target>

<Menu.Dropdown>
<Menu.Item>Item 1</Menu.Item>
<Menu.Item>Item 2</Menu.Item>
</Menu.Dropdown>
</Menu>
</div>
</div>
</div>
);
}
4 changes: 3 additions & 1 deletion src/mantine-core/src/Menu/MenuTarget/MenuTarget.tsx
@@ -1,4 +1,4 @@
import React, { cloneElement, forwardRef } from 'react';
import React, { cloneElement, forwardRef, useEffect } from 'react';
import { isElement, createEventHandler } from '@mantine/utils';
import { useMenuContext } from '../Menu.context';
import { Popover } from '../../Popover';
Expand Down Expand Up @@ -35,6 +35,8 @@ export const MenuTarget = forwardRef<HTMLElement, MenuTargetProps>(
() => ctx.trigger === 'hover' && ctx.closeDropdown()
);

useEffect(() => ctx.closeDropdown(), [children]);
wes337 marked this conversation as resolved.
Show resolved Hide resolved

return (
<Popover.Target refProp={refProp} popupType="menu" ref={ref} {...others}>
{cloneElement(children, {
Expand Down