From 01466aed2f827586a3c612b46e94d139075647e4 Mon Sep 17 00:00:00 2001 From: Curtis Cummings Date: Tue, 9 Jul 2019 15:08:30 -0400 Subject: [PATCH] fix(DropdownMenu): Allow positionFixed prop to be passed through (#1538) Allow the positionFixed prop to be passed through to the Popper component Fixes #1473 --- docs/lib/Components/DropdownsPage.js | 4 +++- src/DropdownMenu.js | 5 ++++- src/__tests__/DropdownMenu.spec.js | 11 +++++++++++ 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/docs/lib/Components/DropdownsPage.js b/docs/lib/Components/DropdownsPage.js index cdc86b236..302cb63e0 100644 --- a/docs/lib/Components/DropdownsPage.js +++ b/docs/lib/Components/DropdownsPage.js @@ -94,7 +94,9 @@ DropdownMenu.propTypes = { cssModule: PropTypes.object, // Custom modifiers that are passed to DropdownMenu.js, see https://popper.js.org/popper-documentation.html#modifiers modifiers: PropTypes.object, - persist: PropTypes.bool // presist the popper, even when closed. See #779 for reasoning + persist: PropTypes.bool, // presist the popper, even when closed. See #779 for reasoning + // passed to popper, see https://popper.js.org/popper-documentation.html#Popper.Defaults.positionFixed + positionFixed: PropTypes.bool }; DropdownItem.propTypes = { diff --git a/src/DropdownMenu.js b/src/DropdownMenu.js index 7e23327c4..119d8615e 100644 --- a/src/DropdownMenu.js +++ b/src/DropdownMenu.js @@ -14,6 +14,7 @@ const propTypes = { className: PropTypes.string, cssModule: PropTypes.object, persist: PropTypes.bool, + positionFixed: PropTypes.bool, }; const defaultProps = { @@ -33,7 +34,7 @@ const directionPositionMap = { class DropdownMenu extends React.Component { render() { - const { className, cssModule, right, tag, flip, modifiers, persist, ...attrs } = this.props; + const { className, cssModule, right, tag, flip, modifiers, persist, positionFixed, ...attrs } = this.props; const classes = mapToCssModules(classNames( className, 'dropdown-menu', @@ -54,11 +55,13 @@ class DropdownMenu extends React.Component { ...modifiers, ...noFlipModifier, } : modifiers; + const popperPositionFixed = !!positionFixed; return ( {({ ref, style, placement }) => ( { expect(wrapper.find(Popper).prop('modifiers')).toEqual({ flip: { enabled: false } }); }); + it('should position using fixed mode when positionFixed is true', () => { + isOpen = true; + const wrapper = mount( + + Ello world + + ); + + expect(wrapper.find(Popper).prop('positionFixed')).toBe(true); + }); + it('should not render multiple children when isOpen is false', () => { const wrapper = mount(