Skip to content

Commit

Permalink
feat: resolve modal when is destroyed
Browse files Browse the repository at this point in the history
  • Loading branch information
julianpereznext authored and josex2r committed Dec 21, 2021
1 parent 3fcf6d4 commit 998b8ca
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 14 deletions.
4 changes: 3 additions & 1 deletion addon/services/modal.js
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,9 @@ export default class ModalService extends Service.extend(Evented) {

this.trigger('open', model);

return model.get('promise');
return new Promise((resolve) => {
this.one('close', () => resolve(model.promise));
});
}

_closeByModel(model) {
Expand Down
44 changes: 31 additions & 13 deletions tests/integration/services/modal-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -230,26 +230,44 @@ module('Integration | Service | modal', (hooks) => {
assert.equal($element.length, 0, 'Modal is removed from DOM');
});

test('it triggers events when a modal is open/closed', (assert) => {
const done = assert.async();
test('it triggers events when a modal is open/closed', async(assert) => {
assert.expect(6);

let $element;

service.one('open', (modal) => {
assert.ok(1, 'modal is open');
assert.equal(modal.name, 'foo', 'modal exists as first argument');
assert.equal(
modal.name,
'foo',
'modal exists as first argument'
);
});

run(() => {
service.open('foo');
});
run(async() => {
const foo = await service.open('foo');

service.one('close', (modal) => {
assert.ok(1, 'modal is closed');
assert.equal(modal.name, 'foo', 'key exists as first argument');
done();
assert.equal(foo, 'foo');
});

run(() => {
service.close('foo');
});
await waitForScheduler();

$element = find('[data-id="modalFoo"][data-modal-show="true"]');

assert.equal($element.length, 1, 'Modal is displayed');

await waitForTimeout(ANIMATION_DELAY);

run(service.get('content.0'), 'resolve', 'foo');

$element = find('[data-id="modalFoo"]:not([data-modal-show="true"])');

assert.equal($element.length, 1, 'Modal is hidden');

await waitForTimeout(ANIMATION_DELAY);

$element = find('[data-id="modalFoo"]');

assert.equal($element.length, 0, 'Modal is removed from DOM');
});
});

0 comments on commit 998b8ca

Please sign in to comment.