Some refactoring

This commit is contained in:
jos 2017-07-13 12:20:48 +02:00
parent 94b7be90d3
commit f786940d8d
2 changed files with 16 additions and 10 deletions

View File

@ -39,7 +39,8 @@ export default class Menu extends Component {
return h('div', {
className: className,
'data-menu': 'true'
'data-menu': 'true',
ref: '',
},
this.props.items.map(this.renderMenuItem)
)
@ -175,8 +176,12 @@ export default class Menu extends Component {
// Attach event listener on next tick, else the current click to open
// the menu will immediately result in requestClose event as well
setTimeout(() => {
if (this.props.open && !this.handleRequestClose) {
this.handleRequestClose = (event) => this.props.onRequestClose()
if (!this.handleRequestClose) {
this.handleRequestClose = (event) => {
if (!findParentNode(event.target, 'data-menu', 'true')) {
this.props.onRequestClose()
}
}
window.addEventListener('click', this.handleRequestClose)
}
})

View File

@ -46,7 +46,8 @@ export default class ModeMenu extends Component {
}
componentWillUnmount () {
this.removeRequestCloseListener()
// remove on next tick, since a listener can be created on next tick too
setTimeout(() => this.removeRequestCloseListener())
}
updateRequestCloseListener () {
@ -59,18 +60,18 @@ export default class ModeMenu extends Component {
}
addRequestCloseListener () {
if (!this.handleRequestClose) {
// Attach event listener on next tick, else the current click to open
// the menu will immediately result in requestClose event as well
setTimeout(() => {
// Attach event listener on next tick, else the current click to open
// the menu will immediately result in requestClose event as well
setTimeout(() => {
if (!this.handleRequestClose) {
this.handleRequestClose = (event) => {
if (!findParentNode(event.target, 'data-menu', 'true')) {
this.props.onRequestClose()
}
}
window.addEventListener('click', this.handleRequestClose)
}, 0)
}
}
})
}
removeRequestCloseListener () {