diff --git a/frontend_tests/node_tests/stream_pill.js b/frontend_tests/node_tests/stream_pill.js index 2f1138b7c0..430f3a2aa3 100644 --- a/frontend_tests/node_tests/stream_pill.js +++ b/frontend_tests/node_tests/stream_pill.js @@ -5,6 +5,7 @@ const {strict: assert} = require("assert"); const {zrequire} = require("../zjsunit/namespace"); const {run_test} = require("../zjsunit/test"); +const peer_data = zrequire("peer_data"); zrequire("stream_data"); zrequire("stream_pill"); @@ -12,24 +13,25 @@ const denmark = { stream_id: 1, name: "Denmark", subscribed: true, - subscriber_count: 10, }; const sweden = { stream_id: 2, name: "Sweden", subscribed: false, - subscriber_count: 30, }; +peer_data.set_subscribers(denmark.stream_id, [1, 2, 3]); +peer_data.set_subscribers(sweden.stream_id, [1, 2, 3, 4, 5]); + const denmark_pill = { stream_name: denmark.name, stream_id: denmark.stream_id, - display_value: "#" + denmark.name + ": " + denmark.subscriber_count + " users", + display_value: "#Denmark: 3 users", }; const sweden_pill = { stream_name: sweden.name, stream_id: sweden.stream_id, - display_value: "#" + sweden.name + ": " + sweden.subscriber_count + " users", + display_value: "#Sweden: 5 users", }; const subs = [denmark, sweden]; diff --git a/static/js/message_view_header.js b/static/js/message_view_header.js index bf22375a13..9223f472e3 100644 --- a/static/js/message_view_header.js +++ b/static/js/message_view_header.js @@ -2,15 +2,10 @@ const render_message_view_header = require("../templates/message_view_header.hbs"); +const peer_data = require("./peer_data"); const rendered_markdown = require("./rendered_markdown"); -function get_sub_count(current_stream) { - const sub_count = current_stream.subscriber_count; - return sub_count; -} - -function get_formatted_sub_count(current_stream) { - let sub_count = get_sub_count(current_stream); +function get_formatted_sub_count(sub_count) { if (sub_count >= 1000) { // parseInt() is used to floor the value of division to an integer sub_count = Number.parseInt(sub_count / 1000, 10) + "k"; @@ -42,8 +37,9 @@ function make_message_view_header(filter) { // the current user can access. const current_stream = filter._sub; message_view_header.rendered_narrow_description = current_stream.rendered_description; - message_view_header.sub_count = get_sub_count(current_stream); - message_view_header.formatted_sub_count = get_formatted_sub_count(current_stream); + const sub_count = peer_data.get_subscriber_count(current_stream.stream_id); + message_view_header.sub_count = sub_count; + message_view_header.formatted_sub_count = get_formatted_sub_count(sub_count); // the "title" is passed as a variable and doesn't get translated (nor should it) message_view_header.sub_count_tooltip_text = i18n.t( "__count__ users are subscribed to #__title__", diff --git a/static/js/stream_pill.js b/static/js/stream_pill.js index f17b93929e..e3868672e9 100644 --- a/static/js/stream_pill.js +++ b/static/js/stream_pill.js @@ -3,7 +3,8 @@ const peer_data = require("./peer_data"); function display_pill(sub) { - return "#" + sub.name + ": " + sub.subscriber_count + " users"; + const sub_count = peer_data.get_subscriber_count(sub.stream_id); + return "#" + sub.name + ": " + sub_count + " users"; } exports.create_item_from_stream_name = function (stream_name, current_items) { diff --git a/static/js/stream_ui_updates.js b/static/js/stream_ui_updates.js index 7aed1be493..022bb71508 100644 --- a/static/js/stream_ui_updates.js +++ b/static/js/stream_ui_updates.js @@ -174,16 +174,22 @@ exports.update_subscribers_count = function (sub, just_subscribed) { // If the streams overlay isn't open, we don't need to rerender anything. return; } + const stream_row = subs.row_for_stream_id(sub.stream_id); + const sub_count = peer_data.get_subscriber_count(sub.stream_id); + if ( !sub.can_access_subscribers || (just_subscribed && sub.invite_only) || page_params.is_guest ) { - const rendered_sub_count = render_subscription_count(sub); + const rendered_sub_count = render_subscription_count({ + can_access_subscribers: sub.can_access_subscribers, + subscriber_count: sub_count, + }); stream_row.find(".subscriber-count").expectOne().html(rendered_sub_count); } else { - stream_row.find(".subscriber-count-text").expectOne().text(sub.subscriber_count); + stream_row.find(".subscriber-count-text").expectOne().text(sub_count); } };