11// Adapted from https://github.com/mlaursen/react-dd-menu/blob/master/src/js/DropdownMenu.js
22
3- import React , { PureComponent , PropTypes } from 'react' ;
4- import ReactDOM from 'react-dom' ;
5- import CSSTransitionGroup from 'react-transition-group/CSSTransitionGroup' ;
6- import classnames from 'classnames' ;
3+ /* eslint react/no-find-dom-node: 0 */
74
8- const TAB = 9 ;
9- const SPACEBAR = 32 ;
10- const ALIGNMENTS = [ 'center' , 'right' , 'left' ] ;
11- const MENU_SIZES = [ 'sm' , 'md' , 'lg' , 'xl' ] ;
5+ import React , { PureComponent , PropTypes } from "react"
6+ import ReactDOM from "react-dom"
7+ import CSSTransitionGroup from "react-transition-group/CSSTransitionGroup"
8+ import classnames from "classnames"
9+
10+ const TAB = 9
11+ const SPACEBAR = 32
12+ const ALIGNMENTS = [ "center" , "right" , "left" ]
13+ const MENU_SIZES = [ "sm" , "md" , "lg" , "xl" ]
1214
1315
1416export default class DropdownMenu extends PureComponent {
@@ -34,7 +36,7 @@ export default class DropdownMenu extends PureComponent {
3436
3537 static defaultProps = {
3638 inverse : false ,
37- align : ' center' ,
39+ align : " center" ,
3840 animAlign : null ,
3941 textAlign : null ,
4042 menuAlign : null ,
@@ -53,100 +55,100 @@ export default class DropdownMenu extends PureComponent {
5355
5456 componentDidUpdate ( prevProps ) {
5557 if ( this . props . isOpen === prevProps . isOpen ) {
56- return ;
58+ return
5759 }
5860
59- const menuItems = ReactDOM . findDOMNode ( this ) . querySelector ( ' .dd-menu > .dd-menu-items' ) ;
61+ const menuItems = ReactDOM . findDOMNode ( this ) . querySelector ( " .dd-menu > .dd-menu-items" )
6062 if ( this . props . isOpen && ! prevProps . isOpen ) {
61- this . lastWindowClickEvent = this . handleClickOutside ;
62- document . addEventListener ( ' click' , this . lastWindowClickEvent ) ;
63+ this . lastWindowClickEvent = this . handleClickOutside
64+ document . addEventListener ( " click" , this . lastWindowClickEvent )
6365 if ( this . props . closeOnInsideClick ) {
64- menuItems . addEventListener ( ' click' , this . props . close ) ;
66+ menuItems . addEventListener ( " click" , this . props . close )
6567 }
66- menuItems . addEventListener ( ' onkeydown' , this . close ) ;
68+ menuItems . addEventListener ( " onkeydown" , this . close )
6769 } else if ( ! this . props . isOpen && prevProps . isOpen ) {
68- document . removeEventListener ( ' click' , this . lastWindowClickEvent ) ;
70+ document . removeEventListener ( " click" , this . lastWindowClickEvent )
6971 if ( prevProps . closeOnInsideClick ) {
70- menuItems . removeEventListener ( ' click' , this . props . close ) ;
72+ menuItems . removeEventListener ( " click" , this . props . close )
7173 }
72- menuItems . removeEventListener ( ' onkeydown' , this . close ) ;
74+ menuItems . removeEventListener ( " onkeydown" , this . close )
7375
74- this . lastWindowClickEvent = null ;
76+ this . lastWindowClickEvent = null
7577 }
7678 }
7779
7880 componentWillUnmount ( ) {
7981 if ( this . lastWindowClickEvent ) {
80- document . removeEventListener ( ' click' , this . lastWindowClickEvent ) ;
82+ document . removeEventListener ( " click" , this . lastWindowClickEvent )
8183 }
8284 }
8385
8486 close = ( e ) => {
85- const key = e . which || e . keyCode ;
87+ const key = e . which || e . keyCode
8688 if ( key === SPACEBAR ) {
87- this . props . close ( ) ;
88- e . preventDefault ( ) ;
89+ this . props . close ( )
90+ e . preventDefault ( )
8991 }
9092 } ;
9193
9294 handleClickOutside = ( e ) => {
9395 if ( ! this . props . closeOnOutsideClick ) {
94- return ;
96+ return
9597 }
9698
97- const node = ReactDOM . findDOMNode ( this ) ;
98- let target = e . target ;
99+ const node = ReactDOM . findDOMNode ( this )
100+ let target = e . target
99101
100102 while ( target . parentNode ) {
101103 if ( target === node ) {
102- return ;
104+ return
103105 }
104106
105- target = target . parentNode ;
107+ target = target . parentNode
106108 }
107109
108- this . props . close ( e ) ;
110+ this . props . close ( e )
109111 } ;
110112
111113 handleKeyDown = ( e ) => {
112- const key = e . which || e . keyCode ;
114+ const key = e . which || e . keyCode
113115 if ( key !== TAB ) {
114- return ;
116+ return
115117 }
116118
117- const items = ReactDOM . findDOMNode ( this ) . querySelectorAll ( ' button,a' ) ;
118- const id = e . shiftKey ? 1 : items . length - 1 ;
119+ const items = ReactDOM . findDOMNode ( this ) . querySelectorAll ( " button,a" )
120+ const id = e . shiftKey ? 1 : items . length - 1
119121
120122 if ( e . target === items [ id ] ) {
121- this . props . close ( e ) ;
123+ this . props . close ( e )
122124 }
123125 } ;
124126
125127
126128 render ( ) {
127- const { menuAlign, align, inverse, size, className } = this . props ;
129+ const { menuAlign, align, inverse, size, className } = this . props
128130
129131 const menuClassName = classnames (
130- ' dd-menu' ,
132+ " dd-menu" ,
131133 `dd-menu-${ menuAlign || align } ` ,
132- { ' dd-menu-inverse' : inverse } ,
134+ { " dd-menu-inverse" : inverse } ,
133135 className ,
134- size ? ( ' dd-menu-' + size ) : null
135- ) ;
136+ size ? ( " dd-menu-" + size ) : null
137+ )
136138
137- const { textAlign, upwards, animAlign, animate, enterTimeout, leaveTimeout } = this . props ;
139+ const { textAlign, upwards, animAlign, animate, enterTimeout, leaveTimeout } = this . props
138140
139- const listClassName = ' dd-items-' + ( textAlign || align ) ;
141+ const listClassName = " dd-items-" + ( textAlign || align )
140142 const transitionProps = {
141- transitionName : ' grow-from-' + ( upwards ? ' up-' : '' ) + ( animAlign || align ) ,
142- component : ' div' ,
143- className : classnames ( ' dd-menu-items' , { ' dd-items-upwards' : upwards } ) ,
143+ transitionName : " grow-from-" + ( upwards ? " up-" : "" ) + ( animAlign || align ) ,
144+ component : " div" ,
145+ className : classnames ( " dd-menu-items" , { " dd-items-upwards" : upwards } ) ,
144146 onKeyDown : this . handleKeyDown ,
145147 transitionEnter : animate ,
146148 transitionLeave : animate ,
147149 transitionEnterTimeout : enterTimeout ,
148150 transitionLeaveTimeout : leaveTimeout ,
149- } ;
151+ }
150152
151153 return (
152154 < div className = { menuClassName } >
@@ -157,6 +159,6 @@ export default class DropdownMenu extends PureComponent {
157159 }
158160 </ CSSTransitionGroup >
159161 </ div >
160- ) ;
162+ )
161163 }
162164}
0 commit comments