diff --git a/dictionaries/ui/layouts/en.dictionary.itop.activity-panel.php b/dictionaries/ui/layouts/en.dictionary.itop.activity-panel.php index 36e9f2a22..73d4bc77d 100644 --- a/dictionaries/ui/layouts/en.dictionary.itop.activity-panel.php +++ b/dictionaries/ui/layouts/en.dictionary.itop.activity-panel.php @@ -25,17 +25,17 @@ Dict::Add('EN US', 'English', 'English', array( // Activity tab 'UI:Layout:ActivityPanel:Tab:Activity:Title' => 'Activity', 'UI:Layout:ActivityPanel:Tab:Activity:Toolbar:CaselogsFilter:Title' => 'Case logs', - 'UI:Layout:ActivityPanel:Tab:Activity:Toolbar:CaselogsFilter:Tooltip' => 'Show / hide case log entries', + 'UI:Layout:ActivityPanel:Tab:Activity:Toolbar:CaselogsFilter:Tooltip' => 'Show / hide case log entries on this tab', 'UI:Layout:ActivityPanel:Tab:Activity:Toolbar:TransitionsFilter:Title' => 'State changes', - 'UI:Layout:ActivityPanel:Tab:Activity:Toolbar:TransitionsFilter:Tooltip' => 'Show / hide state changes', + 'UI:Layout:ActivityPanel:Tab:Activity:Toolbar:TransitionsFilter:Tooltip' => 'Show / hide state changes on this tab', 'UI:Layout:ActivityPanel:Tab:Activity:Toolbar:EditsFilter:Title' => 'Edits', - 'UI:Layout:ActivityPanel:Tab:Activity:Toolbar:EditsFilter:Tooltip' => 'Show / hide fields edits', + 'UI:Layout:ActivityPanel:Tab:Activity:Toolbar:EditsFilter:Tooltip' => 'Show / hide fields edits on this tab', // Case log tab 'UI:Layout:ActivityPanel:Tab:Caselog:Toolbar:OpenAll:Tooltip' => 'Open all messages', 'UI:Layout:ActivityPanel:Tab:Caselog:Toolbar:CloseAll:Tooltip' => 'Close all messages', - 'UI:Layout:ActivityPanel:Tab:Caselog:Toolbar:AuthorsCount:Tooltip' => 'Number of persons interacting in this log', - 'UI:Layout:ActivityPanel:Tab:Caselog:Toolbar:MessagesCount:Tooltip' => 'Number of messages in this log', + 'UI:Layout:ActivityPanel:Tab:Caselog:Toolbar:AuthorsCount:Tooltip' => 'Number of persons interacting in the visible entries', + 'UI:Layout:ActivityPanel:Tab:Caselog:Toolbar:MessagesCount:Tooltip' => 'Number of messages in the visible log(s)', // Placeholder 'UI:Layout:ActivityPanel:NoEntry:Placeholder:Hint' => 'It\'s calm up here, no activity yet', diff --git a/js/layouts/activity-panel/activity-panel.js b/js/layouts/activity-panel/activity-panel.js index 1f4f5595c..d2e88df76 100644 --- a/js/layouts/activity-panel/activity-panel.js +++ b/js/layouts/activity-panel/activity-panel.js @@ -42,9 +42,11 @@ $(function() tab_toggler: '[data-role="ibo-activity-panel--tab-toggler"]', tab_title: '[data-role="ibo-activity-panel--tab-title"]', tab_toolbar: '[data-role="ibo-activity-panel--tab-toolbar"]', - activity_filter: '[data-role="ibo-activity-panel--activity-filter"]', caselog_tab_open_all: '[data-role="ibo-activity-panel--caselog-open-all"]', caselog_tab_close_all: '[data-role="ibo-activity-panel--caselog-close-all"]', + activity_filter: '[data-role="ibo-activity-panel--activity-filter"]', + authors_count: '[data-role="ibo-activity-panel--tab-toolbar-info-authors-count"]', + messages_count: '[data-role="ibo-activity-panel--tab-toolbar-info-messages-count"]', compose_button: '[data-role="ibo-activity-panel--add-caselog-entry-button"]', caselog_entry_form: '[data-role="ibo-caselog-entry-form"]', entry_group: '[data-role="ibo-activity-panel--entry-group"]', @@ -59,6 +61,11 @@ $(function() tab_types: { caselog: 'caselog', activity: 'activity', + }, + entry_types: { + caselog: 'caselog', + transition: 'transition', + edits: 'edits', } }, @@ -67,6 +74,7 @@ $(function() { this.element.addClass('ibo-activity-panel'); this._bindEvents(); + this._UpdateMessagesCounters(); this._ReformatDateTimes(); // TODO 3.0.0: Modify PopoverMenu so we can pass it the ID of the block triggering the open/close @@ -390,6 +398,40 @@ $(function() this.element.find(this.js_selectors.entry + sExtraSelector)[sCallback](this.css_classes.is_closed); }, + /** + * Update the messages and users counters in the tabs toolbar + * + * @return {void} + * @private + */ + _UpdateMessagesCounters: function() + { + const me = this; + let iMessagesCount = 0; + let iUsersCount = 0; + let oUsers = {}; + + // Compute counts + this.element.find(this.js_selectors.entry + ':visible').each(function(){ + // Increase messages count + if (me.enums.entry_types.caselog === $(this).attr('data-entry-type')) { + iMessagesCount++; + } + + // Feed authors array so we can count them later + try { + oUsers[$(this).attr('data-entry-author-login')] = true; + } + catch (sError) { + // Do nothing, this is just in case the user's login has special chars that would break the object key + } + }); + iUsersCount = Object.keys(oUsers).length; + + // Update elements + this.element.find(this.js_selectors.messages_count).text(iMessagesCount); + this.element.find(this.js_selectors.authors_count).text(iUsersCount); + }, // - Helpers on entries _ApplyEntriesFilters: function() @@ -414,6 +456,7 @@ $(function() }); this._UpdateEntryGroupsVisibility(); + this._UpdateMessagesCounters(); }, _ShowAllEntries: function() { diff --git a/templates/base/layouts/activity-panel/tab-toolbar/layout.html.twig b/templates/base/layouts/activity-panel/tab-toolbar/layout.html.twig index 6f7732576..86467ac92 100644 --- a/templates/base/layouts/activity-panel/tab-toolbar/layout.html.twig +++ b/templates/base/layouts/activity-panel/tab-toolbar/layout.html.twig @@ -38,14 +38,16 @@
{% endblock %}