mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
UI/ClickOutsideWrapper: Adds parent prop for situations where event should be on document (#27221)
This commit is contained in:
parent
093477c036
commit
262a42b249
@ -10,6 +10,7 @@ export interface Props {
|
||||
* Runs the 'onClick' function when pressing a key outside of the current element. Defaults to true.
|
||||
*/
|
||||
includeButtonPress: boolean;
|
||||
parent: Window | Document;
|
||||
}
|
||||
|
||||
interface State {
|
||||
@ -19,22 +20,24 @@ interface State {
|
||||
export class ClickOutsideWrapper extends PureComponent<Props, State> {
|
||||
static defaultProps = {
|
||||
includeButtonPress: true,
|
||||
parent: window,
|
||||
};
|
||||
state = {
|
||||
hasEventListener: false,
|
||||
};
|
||||
|
||||
componentDidMount() {
|
||||
document.addEventListener('mousedown', this.onOutsideClick, false);
|
||||
this.props.parent.addEventListener('click', this.onOutsideClick, false);
|
||||
if (this.props.includeButtonPress) {
|
||||
document.addEventListener('keydown', this.onOutsideClick, false);
|
||||
// Use keyup since keydown already has an eventlistener on window
|
||||
this.props.parent.addEventListener('keyup', this.onOutsideClick, false);
|
||||
}
|
||||
}
|
||||
|
||||
componentWillUnmount() {
|
||||
document.removeEventListener('mousedown', this.onOutsideClick, false);
|
||||
this.props.parent.removeEventListener('click', this.onOutsideClick, false);
|
||||
if (this.props.includeButtonPress) {
|
||||
document.removeEventListener('keydown', this.onOutsideClick, false);
|
||||
this.props.parent.removeEventListener('keyup', this.onOutsideClick, false);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -180,7 +180,7 @@ export class PanelHeader extends Component<Props, State> {
|
||||
<span className="panel-title-text">{title}</span>
|
||||
<Icon name="angle-down" className="panel-menu-toggle" />
|
||||
{this.state.panelMenuOpen && (
|
||||
<ClickOutsideWrapper onClick={this.closeMenu}>
|
||||
<ClickOutsideWrapper onClick={this.closeMenu} parent={document}>
|
||||
<PanelHeaderMenu items={menuItems} />
|
||||
</ClickOutsideWrapper>
|
||||
)}
|
||||
|
Loading…
Reference in New Issue
Block a user