import Component from '@ember/component'; import { set } from '@ember/object'; import Slotted from 'block-slots'; import A11yDialog from 'a11y-dialog'; import { schedule } from '@ember/runloop'; export default Component.extend(Slotted, { tagName: '', onclose: function() {}, onopen: function() {}, isOpen: false, actions: { connect: function($el) { this.dialog = new A11yDialog($el); this.dialog.on('hide', () => { schedule('afterRender', _ => set(this, 'isOpen', false)); this.onclose({ target: $el }) }); this.dialog.on('show', () => { set(this, 'isOpen', true) this.onopen({ target: $el }) }); if (this.open) { this.actions.open.apply(this, []); } }, disconnect: function($el) { this.dialog.destroy(); }, open: function() { this.dialog.show(); }, close: function() { this.dialog.hide(); }, }, });