From 25c69aaef48916ed07874b19528a90e4fb1a8c4a Mon Sep 17 00:00:00 2001 From: Francis Lachapelle Date: Mon, 13 Dec 2021 14:30:39 -0500 Subject: [PATCH] fix(mail(js)): resolve draft mailbox from popup window Fixes #5442 --- .../js/Mailer/Account.service.js | 14 ++++++++++---- .../js/Mailer/Mailbox.service.js | 15 +++++++++++++-- UI/WebServerResources/js/Mailer/Mailer.popup.js | 2 +- .../js/Mailer/Message.service.js | 3 ++- 4 files changed, 26 insertions(+), 8 deletions(-) diff --git a/UI/WebServerResources/js/Mailer/Account.service.js b/UI/WebServerResources/js/Mailer/Account.service.js index da8049440..61ae14e23 100644 --- a/UI/WebServerResources/js/Mailer/Account.service.js +++ b/UI/WebServerResources/js/Mailer/Account.service.js @@ -25,9 +25,12 @@ identity.textSignature = _.map(element.contents(), 'textContent').join(' ').trim(); } }); - _.forEach(this.$mailboxes, function(mailboxData, i, mailboxes) { - mailboxes[i] = new Account.$Mailbox(_this, mailboxData); - }); + if (this.$mailboxes) { + // Create instances of Mailbox + Account.$Mailbox.$unwrapCollection(this, Account.$q.when({ mailboxes: this.$mailboxes })).then(function(collection) { + _this.$mailboxes = collection; + }); + } } else { // The promise will be unwrapped first @@ -362,6 +365,9 @@ }; mailbox = _find(this.$mailboxes); + if (mailbox == null) + throw Error('No mailbox found matching path ' + path); + return mailbox; }; @@ -565,7 +571,7 @@ if (deep) { _.forEach(this.$mailboxes, function(mailbox) { - mailboxes.push(mailbox.$omit()); + mailboxes.push(mailbox.$omit(deep)); }); account.$mailboxes = mailboxes; } diff --git a/UI/WebServerResources/js/Mailer/Mailbox.service.js b/UI/WebServerResources/js/Mailer/Mailbox.service.js index a695b9f6e..c1745b630 100644 --- a/UI/WebServerResources/js/Mailer/Mailbox.service.js +++ b/UI/WebServerResources/js/Mailer/Mailbox.service.js @@ -991,8 +991,16 @@ * @desc Return a sanitized object used to send to the server. * @return an object literal copy of the Mailbox instance */ - Mailbox.prototype.$omit = function() { - var mailbox = {}; + Mailbox.prototype.$omit = function(deep) { + var mailbox = {}, + _visit = function(children) { + var childrenArray = []; + _.forEach(children, function(o) { + childrenArray.push(o.$omit(deep)); + }); + return childrenArray; + }; + angular.forEach(this, function(value, key) { if (key != 'constructor' && key != 'children' && @@ -1003,6 +1011,9 @@ mailbox[key] = value; } }); + if (deep && this.children) { + mailbox.children = _visit(this.children); + } return mailbox; }; diff --git a/UI/WebServerResources/js/Mailer/Mailer.popup.js b/UI/WebServerResources/js/Mailer/Mailer.popup.js index 23f80b042..9e4913fd5 100644 --- a/UI/WebServerResources/js/Mailer/Mailer.popup.js +++ b/UI/WebServerResources/js/Mailer/Mailer.popup.js @@ -175,7 +175,7 @@ $window.opener.$mailboxController.selectedFolder.path == mailboxId) { // The message mailbox is opened in the parent window mailbox = new Mailbox(stateAccount, - $window.opener.$mailboxController.selectedFolder.$omit()); + $window.opener.$mailboxController.selectedFolder.$omit(true)); } } diff --git a/UI/WebServerResources/js/Mailer/Message.service.js b/UI/WebServerResources/js/Mailer/Message.service.js index 8745940b4..174faefe0 100644 --- a/UI/WebServerResources/js/Mailer/Message.service.js +++ b/UI/WebServerResources/js/Mailer/Message.service.js @@ -132,7 +132,8 @@ _this.flags.splice(i, 1,'_' + flag); } }); - this.isread = !!this.isread; + // isread will be undefined when composing a new message -- assume unseen flag is not set. + this.isread = angular.isDefined(this.isread) ? !!this.isread : true; }; /**