diff options
Diffstat (limited to 'web-ui')
-rw-r--r-- | web-ui/app/js/mail_list/ui/mail_list.js | 15 | ||||
-rw-r--r-- | web-ui/test/spec/mail_list/ui/mail_list.spec.js | 21 |
2 files changed, 29 insertions, 7 deletions
diff --git a/web-ui/app/js/mail_list/ui/mail_list.js b/web-ui/app/js/mail_list/ui/mail_list.js index 7b518320..e873d279 100644 --- a/web-ui/app/js/mail_list/ui/mail_list.js +++ b/web-ui/app/js/mail_list/ui/mail_list.js @@ -75,7 +75,10 @@ define( if (data.ident) { self.attr.currentMailIdent = data.ident; } + self.attr.currentTag = data.tag || self.attr.currentTag; + + self.updateCheckAllCheckbox(); } function renderMails(mails) { @@ -132,17 +135,25 @@ define( }; this.respondWithCheckedMails = function (ev, caller) { - this.trigger(caller, events.ui.mail.hereChecked, { checkedMails : this.attr.checkedMails }); + this.trigger(caller, events.ui.mail.hereChecked, { checkedMails : this.checkedMailsForCurrentTag()}); }; this.updateCheckAllCheckbox = function () { - if (_.keys(this.attr.checkedMails).length > 0) { + if (this.checkedMailsForCurrentTag().length > 0) { this.trigger(document, events.ui.mails.hasMailsChecked, true); } else { this.trigger(document, events.ui.mails.hasMailsChecked, false); } }; + this.checkedMailsForCurrentTag = function() { + var checkedMailsForCurrentTag = _.filter(self.attr.checkedMails, function(mail) { + return _.contains(mail.tags, self.attr.currentTag); + }); + + return checkedMailsForCurrentTag.length > 0 ? checkedMailsForCurrentTag : {}; + } + this.addToSelectedMails = function (ev, data) { this.attr.checkedMails[data.mail.ident] = data.mail; this.updateCheckAllCheckbox(); diff --git a/web-ui/test/spec/mail_list/ui/mail_list.spec.js b/web-ui/test/spec/mail_list/ui/mail_list.spec.js index 9c01c6af..3bf7cce0 100644 --- a/web-ui/test/spec/mail_list/ui/mail_list.spec.js +++ b/web-ui/test/spec/mail_list/ui/mail_list.spec.js @@ -70,17 +70,18 @@ describeComponent('mail_list/ui/mail_list', function () { expect(this.component.attr.checkedMails).toEqual(checkedMails); }); - it('returns the list of checked mails to whomever requests them', function () { + it('returns the list of checked mails based on the current tag to whomever requests them', function () { var caller = {}; - this.component.attr.checkedMails = {'1': {}}; + this.component.attr.checkedMails = mailList; + this.component.attr.currentTag = 'inbox'; var mailHereCheckedEvent = spyOnEvent(caller, Pixelated.events.ui.mail.hereChecked); $(document).trigger(Pixelated.events.ui.mail.wantChecked, caller); - expect(mailHereCheckedEvent).toHaveBeenTriggeredOnAndWith(caller, { checkedMails: {'1': {} }}); + expect(mailHereCheckedEvent).toHaveBeenTriggeredOnAndWith(caller, { checkedMails: mailList }); }); - it('returns an empty list to whomever requests the checked mails if there are no checked mails', function () { + it('returns an empty list to whomever requests the checked mails if there are no checked mails with the current tag', function () { var caller = {}; var mailHereCheckedEvent = spyOnEvent(caller, Pixelated.events.ui.mail.hereChecked); @@ -101,8 +102,18 @@ describeComponent('mail_list/ui/mail_list', function () { expect(this.component.attr.checkedMails).toEqual({'2': {}, '3': {} }); }); - it('checks the check all checkbox if at least one mail is checked', function () { + it ('does not check the all checkbox if no mail checked has the current tag', function () { + var setCheckAllCheckboxEvent = spyOnEvent(document, Pixelated.events.ui.mails.hasMailsChecked); + this.component.attr.currentTag = 'inbox'; + + $(document).trigger(Pixelated.events.ui.mail.checked, {mail : {'1' : {tags: ['different']}}}); + + expect(setCheckAllCheckboxEvent).toHaveBeenTriggeredOnAndWith(document, false); + }); + + it('checks the check all checkbox if at least one mail is checked with the current tag', function () { var setCheckAllCheckboxEvent = spyOnEvent(document, Pixelated.events.ui.mails.hasMailsChecked); + this.component.attr.currentTag = 'inbox'; $(document).trigger(Pixelated.events.ui.mail.checked, {mail: mailList[0]}); |