[FIX] web: close, already closed dialog

Before this commit, when trying to close an already closed dialog, an
error is raised.

closes odoo-dev/odoo#928

Signed-off-by: Géry Debongnie (ged) <ged@openerp.com>
This commit is contained in:
Jorge Pinna Puissant
2021-06-18 21:31:30 +02:00
committed by Aaron Bohy
parent 22bb866588
commit 774ca5571a
2 changed files with 36 additions and 4 deletions
@@ -31,11 +31,13 @@ export class DialogContainer extends Component {
}
closeDialog(id) {
if (this.dialogs[id].options && this.dialogs[id].options.onCloseCallback) {
this.dialogs[id].options.onCloseCallback();
if (this.dialogs[id]) {
if (this.dialogs[id].options && this.dialogs[id].options.onCloseCallback) {
this.dialogs[id].options.onCloseCallback();
}
delete this.dialogs[id];
this.render();
}
delete this.dialogs[id];
this.render();
}
errorCallBack(id) {
@@ -72,6 +72,36 @@ QUnit.test("Simple rendering with a single dialog", async (assert) => {
assert.containsNone(target, ".o_dialog_manager portal");
assert.containsNone(target, ".o_dialog_container .o_dialog");
});
QUnit.test("Simple rendering and close a single dialog", async (assert) => {
assert.expect(9);
class CustomDialog extends Dialog {}
CustomDialog.title = "Welcome";
pseudoWebClient = await mount(PseudoWebClient, { env, target });
assert.containsOnce(target, ".o_dialog_manager");
assert.containsNone(target, ".o_dialog_manager portal");
assert.containsNone(target, ".o_dialog_container .o_dialog");
const dialogId = env.services.dialog.open(CustomDialog);
await nextTick();
assert.containsOnce(target, ".o_dialog_manager portal");
assert.containsOnce(target, ".o_dialog_container .o_dialog");
assert.strictEqual(target.querySelector("header .modal-title").textContent, "Welcome");
env.services.dialog.close(dialogId);
await nextTick();
assert.containsOnce(target, ".o_dialog_manager");
assert.containsNone(target, ".o_dialog_manager portal");
assert.containsNone(target, ".o_dialog_container .o_dialog");
// Call a second time, the close on the dialog.
// As the dialog is already close, this call is just ignored. No error should be raised.
env.services.dialog.close(dialogId);
await nextTick();
});
QUnit.test("rendering with two dialogs", async (assert) => {
assert.expect(12);
class CustomDialog extends Dialog {