diff --git a/package.json b/package.json index 84ffff1..6af4f3a 100644 --- a/package.json +++ b/package.json @@ -64,7 +64,7 @@ "dependencies": { "@babel/runtime": "^7.10.1", "classnames": "^2.2.6", - "rc-trigger": "^5.0.4", + "rc-trigger": "^5.2.18", "rc-util": "^5.17.0" } } diff --git a/src/Dropdown.tsx b/src/Dropdown.tsx index c800c46..64e7fab 100644 --- a/src/Dropdown.tsx +++ b/src/Dropdown.tsx @@ -63,7 +63,7 @@ function Dropdown(props: DropdownProps, ref) { } = props; const [triggerVisible, setTriggerVisible] = React.useState(); - const mergedVisible = 'visible' in props ? visible : triggerVisible; + const mergedVisible = visible !== undefined ? visible : triggerVisible; const triggerRef = React.useRef(null); React.useImperativeHandle(ref, () => triggerRef.current); diff --git a/tests/__snapshots__/basic.test.js.snap b/tests/__snapshots__/basic.test.js.snap index 911b563..9f0c104 100644 --- a/tests/__snapshots__/basic.test.js.snap +++ b/tests/__snapshots__/basic.test.js.snap @@ -10,7 +10,7 @@ Array [
    { expect(dropdown.find('.my-button').hasClass('rc-dropdown-open')).toBe(true); }); - it('supports constrolled visible prop', () => { + it('supports controlled visible prop', () => { const onVisibleChange = jest.fn(); const dropdown = mount( { expect(getPopupDomNode(dropdown).classList.contains('rc-dropdown-hidden')).toBe(true); }); + it('controls visibility when visible is undefined', async () => { + // Make sure dropdown component is still "" + let clicked; + let overlayClicked; + + function onClick({ key }) { + clicked = key; + } + + function onOverlayClick({ key }) { + overlayClicked = key; + } + + const menu = ( + + + one + + + two + + ); + const dropdown = mount( + + + , + ); + expect(dropdown.find('.my-button')).toBeTruthy(); + expect(dropdown.find('.rc-dropdown')).toBeTruthy(); + + dropdown.find('.my-button').simulate('click'); + expect(clicked).toBeUndefined(); + expect(getPopupDomNode(dropdown).classList.contains('rc-dropdown-hidden')).toBe(false); + + dropdown.find('.my-menuitem').simulate('click'); + expect(clicked).toBe('1'); + expect(overlayClicked).toBe('1'); + expect(getPopupDomNode(dropdown).classList.contains('rc-dropdown-hidden')).toBe(true); + }); + it('re-align works', async () => { const buttonStyle = { width: 600, height: 20, marginLeft: 100 }; const menu = (