ui/lib/shared/addon/components/outside-click/component.js

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);
}
})