mirror of https://github.com/rancher/ui.git
50 lines
1.1 KiB
JavaScript
50 lines
1.1 KiB
JavaScript
import Component from '@ember/component';
|
|
import layout from './template';
|
|
|
|
export default Component.extend({
|
|
classNames: ['outside-click'],
|
|
|
|
onOutsideClick: null,
|
|
|
|
layout,
|
|
isOutside: false,
|
|
|
|
init() {
|
|
this._super(...arguments);
|
|
this._boundHandleDown = this.handleDown.bind(this);
|
|
this._boundHandleUp = this.handleUp.bind(this);
|
|
},
|
|
|
|
didInsertElement() {
|
|
this._super(...arguments);
|
|
document.addEventListener('mousedown', this._boundHandleDown, true);
|
|
document.addEventListener('mouseup', this._boundHandleUp, true);
|
|
},
|
|
|
|
willDestroyElement() {
|
|
this._super(...arguments);
|
|
document.removeEventListener('mousedown', this._boundHandleDown, true);
|
|
document.removeEventListener('mouseup', this._boundHandleUp, true);
|
|
},
|
|
|
|
handleDown(e) {
|
|
if (this.isDestroyed || this.isDestroying) {
|
|
return;
|
|
}
|
|
|
|
if (!this.element.contains(e.target)) {
|
|
this.set('isOutside', true);
|
|
}
|
|
},
|
|
|
|
handleUp(e) {
|
|
if (this.get('isOutside')) {
|
|
this.sendAction('onOutsideClick', e);
|
|
}
|
|
if (this.isDestroyed || this.isDestroying) {
|
|
return;
|
|
}
|
|
this.set('isOutside', false);
|
|
}
|
|
})
|