1- 'use strict'
2-
31require ( './Dropdown.scss' )
4- const React = require ( 'react' )
52
6- const Dropdown = {
7- getInitialState ( ) {
8- return { isHidden : true }
9- } ,
3+ import React , { Component } from 'react'
4+
5+ class Dropdown extends Component {
6+ constructor ( props ) {
7+ super ( props )
8+
9+ this . state = { isHidden : true }
10+
11+ this . onClickOutside = this . onClickOutside . bind ( this )
12+ this . onClick = this . onClick . bind ( this )
13+ this . onClickOtherDropdown = this . onClickOtherDropdown . bind ( this )
14+ }
15+
1016 onClickOutside ( evt ) {
1117 let currNode = evt . target
1218 let isDropdown = false
@@ -18,34 +24,42 @@ const Dropdown = {
1824 }
1925
2026 currNode = currNode . parentNode
27+
28+ if ( ! currNode . tagName )
29+ break
2130 } while ( currNode . tagName )
2231
2332 if ( ! isDropdown ) {
2433 this . setState ( { isHidden : true } )
2534 }
26- } ,
35+ }
36+
2737 onClick ( evt ) {
2838 const dropdownClicked = new Event ( 'dropdownClicked' )
2939
3040 document . dispatchEvent ( dropdownClicked )
3141
3242 this . setState ( { isHidden : ! this . state . isHidden } )
3343 evt . stopPropagation ( )
34- } ,
44+ }
45+
3546 onClickOtherDropdown ( ) {
3647 this . setState ( { isHidden : true } )
37- } ,
48+ }
49+
3850 componentDidMount ( ) {
3951 document . removeEventListener ( 'click' , this . onClickOutside )
4052 document . removeEventListener ( 'dropdownClicked' , this . onClickOtherDropdown )
4153
4254 document . addEventListener ( 'click' , this . onClickOutside )
4355 document . addEventListener ( 'dropdownClicked' , this . onClickOtherDropdown )
44- } ,
56+ }
57+
4558 componentWillUnmount ( ) {
4659 document . removeEventListener ( 'click' , this . onClickOutside )
4760 document . removeEventListener ( 'dropdownClicked' , this . onClickOtherDropdown )
48- } ,
61+ }
62+
4963 render ( ) {
5064 const pointerShadow = this . props . pointerShadow
5165 const noPointer = this . props . noPointer
@@ -70,14 +84,24 @@ const Dropdown = {
7084
7185 return (
7286 < div className = "dropdown-wrap" onClick = { this . onClick } ref = "Dropdown" >
73- { this . props . children [ 0 ] }
87+ {
88+ this . props . children . map ( ( child ) => {
89+ if ( child . props . className . indexOf ( 'dropdown-menu-header' ) > - 1 )
90+ return child
91+ } )
92+ }
7493
7594 < div className = { ndClasses } >
76- { this . props . children [ 1 ] }
95+ {
96+ this . props . children . map ( ( child ) => {
97+ if ( child . props . className . indexOf ( 'dropdown-menu-list' ) > - 1 )
98+ return child
99+ } )
100+ }
77101 </ div >
78102 </ div >
79103 )
80104 }
81105}
82106
83- module . exports = React . createClass ( Dropdown )
107+ export default Dropdown
0 commit comments