diff --git a/components/dropdown/Dropdown.jsx b/components/dropdown/Dropdown.jsx index 2d4d7eca..844564e2 100644 --- a/components/dropdown/Dropdown.jsx +++ b/components/dropdown/Dropdown.jsx @@ -1,4 +1,5 @@ import React from 'react'; +import ReactDOM from 'react-dom'; import ClassNames from 'classnames'; import Input from '../input'; import events from '../utils/events'; @@ -30,6 +31,24 @@ class Dropdown extends React.Component { up: false }; + componentWillUpdate (prevState, nextState) { + if (!prevState.active && nextState.active) { + events.addEventsToDocument({click: this.handleDocumentClick}); + } + } + + componentDidUpdate (prevProps, prevState) { + if (prevState.active && !this.state.active) { + events.removeEventsFromDocument({click: this.handleDocumentClick}); + } + } + + handleDocumentClick = (event) => { + if (this.state.active && !events.targetIsDescendant(event, ReactDOM.findDOMNode(this))) { + this.setState({active: false}); + } + }; + handleMouseDown = (event) => { events.pauseEvent(event); const client = event.target.getBoundingClientRect();