stream_list: Pinned streams are never grayed out as inactive.

We have had a longtime bug where the state of pinned streams would not
update properly from the greyed out/inactive state to the active state
when a first message arrived to them.

After some discussion, we determined that likely the right fix for
this is to simply configure pinned streams to never be marked as
inactive; that's more in line with the intended user experience.

Fixes #8201.
This commit is contained in:
YashRE42 2019-04-11 11:55:50 +05:30 committed by Tim Abbott
parent 807e5c7a1a
commit 1ab4eaf819
2 changed files with 55 additions and 1 deletions

View File

@ -159,6 +159,59 @@ run_test('create_sidebar_row', () => {
assert(removed); assert(removed);
}); });
run_test('pinned_streams_never_inactive', () => {
// Ensure that pinned streams are never treated as dormant ie never given "inactive" class
stream_data.clear_subscriptions();
var devel = {
name: 'devel',
stream_id: 100,
color: 'blue',
subscribed: true,
pin_to_top: true,
};
global.stream_data.add_sub('devel', devel);
var social = {
name: 'social',
stream_id: 200,
color: 'green',
subscribed: true,
};
global.stream_data.add_sub('social', social);
// we use social and devel created in create_social_sidebar_row() and create_devel_sidebar_row()
// non-pinned streams can be made inactive
var social_sidebar = $('<social sidebar row>');
var stream_id = social.stream_id;
var row = stream_list.stream_sidebar.get_row(stream_id);
stream_data.is_active = return_false;
stream_list.build_stream_list();
assert(social_sidebar.hasClass('inactive_stream'));
stream_data.is_active = return_true;
row.update_whether_active();
assert(!social_sidebar.hasClass('inactive_stream'));
stream_data.is_active = return_false;
row.update_whether_active();
assert(social_sidebar.hasClass('inactive_stream'));
// pinned streams can never be made inactive
var devel_sidebar = $('<devel sidebar row>');
stream_id = devel.stream_id;
row = stream_list.stream_sidebar.get_row(stream_id);
stream_data.is_active = return_false;
stream_list.build_stream_list();
assert(!devel_sidebar.hasClass('inactive_stream'));
row.update_whether_active();
assert(!devel_sidebar.hasClass('inactive_stream'));
});
set_global('$', global.make_zjquery()); set_global('$', global.make_zjquery());
function add_row(sub) { function add_row(sub) {
@ -552,6 +605,7 @@ run_test('separators_only_pinned', () => {
assert.deepEqual(appended_elems, expected_elems); assert.deepEqual(appended_elems, expected_elems);
}); });
run_test('update_count_in_dom', () => { run_test('update_count_in_dom', () => {
function make_elem(elem, count_selector, value_selector) { function make_elem(elem, count_selector, value_selector) {
var count = $(count_selector); var count = $(count_selector);

View File

@ -231,7 +231,7 @@ function build_stream_sidebar_row(sub) {
var list_item = build_stream_sidebar_li(sub); var list_item = build_stream_sidebar_li(sub);
self.update_whether_active = function () { self.update_whether_active = function () {
if (stream_data.is_active(sub)) { if (stream_data.is_active(sub) || sub.pin_to_top === true) {
list_item.removeClass('inactive_stream'); list_item.removeClass('inactive_stream');
} else { } else {
list_item.addClass('inactive_stream'); list_item.addClass('inactive_stream');