diff --git a/frontend_tests/node_tests/stream_sort.js b/frontend_tests/node_tests/stream_sort.js index 0c7de10d8b..a766e2a5fa 100644 --- a/frontend_tests/node_tests/stream_sort.js +++ b/frontend_tests/node_tests/stream_sort.js @@ -2,7 +2,7 @@ zrequire("stream_data"); zrequire("stream_sort"); run_test("no_subscribed_streams", () => { - assert.equal(stream_sort.sort_groups(""), undefined); + assert.equal(stream_sort.sort_groups([]), undefined); assert.equal(stream_sort.first_stream_id(), undefined); }); @@ -44,7 +44,7 @@ stream_data.add_sub(clarinet); stream_data.add_sub(weaving); function sort_groups(query) { - const streams = stream_data.subscribed_streams(); + const streams = stream_data.subscribed_stream_ids(); return stream_sort.sort_groups(streams, query); } @@ -53,9 +53,9 @@ run_test("basics", (override) => { // Test sorting into categories/alphabetized let sorted = sort_groups(""); - assert.deepEqual(sorted.pinned_streams, ["scalene"]); - assert.deepEqual(sorted.normal_streams, ["clarinet", "fast tortoise"]); - assert.deepEqual(sorted.dormant_streams, ["pneumonia"]); + assert.deepEqual(sorted.pinned_streams, [scalene.stream_id]); + assert.deepEqual(sorted.normal_streams, [clarinet.stream_id, fast_tortoise.stream_id]); + assert.deepEqual(sorted.dormant_streams, [pneumonia.stream_id]); // Test cursor helpers. assert.equal(stream_sort.first_stream_id(), scalene.stream_id); @@ -68,7 +68,7 @@ run_test("basics", (override) => { // Test filtering sorted = sort_groups("s"); - assert.deepEqual(sorted.pinned_streams, ["scalene"]); + assert.deepEqual(sorted.pinned_streams, [scalene.stream_id]); assert.deepEqual(sorted.normal_streams, []); assert.deepEqual(sorted.dormant_streams, []); @@ -80,17 +80,17 @@ run_test("basics", (override) => { sorted = sort_groups("PnEuMoNiA"); assert.deepEqual(sorted.pinned_streams, []); assert.deepEqual(sorted.normal_streams, []); - assert.deepEqual(sorted.dormant_streams, ["pneumonia"]); + assert.deepEqual(sorted.dormant_streams, [pneumonia.stream_id]); // Test searching part of word sorted = sort_groups("tortoise"); assert.deepEqual(sorted.pinned_streams, []); - assert.deepEqual(sorted.normal_streams, ["fast tortoise"]); + assert.deepEqual(sorted.normal_streams, [fast_tortoise.stream_id]); assert.deepEqual(sorted.dormant_streams, []); // Test searching stream with spaces sorted = sort_groups("fast t"); assert.deepEqual(sorted.pinned_streams, []); - assert.deepEqual(sorted.normal_streams, ["fast tortoise"]); + assert.deepEqual(sorted.normal_streams, [fast_tortoise.stream_id]); assert.deepEqual(sorted.dormant_streams, []); }); diff --git a/static/js/stream_list.js b/static/js/stream_list.js index acd0c84321..f8901a0485 100644 --- a/static/js/stream_list.js +++ b/static/js/stream_list.js @@ -87,7 +87,7 @@ exports.build_stream_list = function () { // sidebar rows. Our job here is to build the bigger widget, // which largely is a matter of arranging the individual rows in // the right order. - const streams = stream_data.subscribed_streams(); + const streams = stream_data.subscribed_stream_ids(); if (streams.length === 0) { return; } @@ -103,9 +103,8 @@ exports.build_stream_list = function () { const parent = $("#stream_filters"); const elems = []; - function add_sidebar_li(stream) { - const sub = stream_data.get_sub(stream); - const sidebar_row = exports.stream_sidebar.get_row(sub.stream_id); + function add_sidebar_li(stream_id) { + const sidebar_row = exports.stream_sidebar.get_row(stream_id); sidebar_row.update_whether_active(); elems.push(sidebar_row.get_li()); } diff --git a/static/js/stream_sort.js b/static/js/stream_sort.js index 4356284646..21b96bc660 100644 --- a/static/js/stream_sort.js +++ b/static/js/stream_sort.js @@ -8,9 +8,22 @@ let all_streams = []; exports.get_streams = function () { // Right now this is only used for testing, but we should // use it for things like hotkeys that cycle through streams. - return all_streams; + const sorted_streams = all_streams.map((stream_id) => + stream_data.maybe_get_stream_name(stream_id), + ); + return sorted_streams; }; +function compare_function(a, b) { + const stream_a = stream_data.get_sub_by_id(a); + const stream_b = stream_data.get_sub_by_id(b); + + const stream_name_a = stream_a ? stream_a.name : ""; + const stream_name_b = stream_b ? stream_b.name : ""; + + return util.strcmp(stream_name_a, stream_name_b); +} + function filter_streams_by_search(streams, search_term) { if (search_term === "") { return streams; @@ -21,7 +34,7 @@ function filter_streams_by_search(streams, search_term) { const filtered_streams = streams.filter((stream) => search_terms.some((search_term) => { - const lower_stream_name = stream.toLowerCase(); + const lower_stream_name = stream_data.get_sub_by_id(stream).name.toLowerCase(); const cands = lower_stream_name.split(" "); cands.push(lower_stream_name); return cands.some((name) => name.startsWith(search_term)); @@ -47,7 +60,7 @@ exports.sort_groups = function (streams, search_term) { const dormant_streams = []; for (const stream of streams) { - const sub = stream_data.get_sub(stream); + const sub = stream_data.get_sub_by_id(stream); const pinned = sub.pin_to_top; if (pinned) { pinned_streams.push(stream); @@ -58,9 +71,9 @@ exports.sort_groups = function (streams, search_term) { } } - pinned_streams.sort(util.strcmp); - normal_streams.sort(util.strcmp); - dormant_streams.sort(util.strcmp); + pinned_streams.sort(compare_function); + normal_streams.sort(compare_function); + dormant_streams.sort(compare_function); const same_as_before = previous_pinned !== undefined && @@ -84,26 +97,12 @@ exports.sort_groups = function (streams, search_term) { }; }; -function pos(stream_id) { - const sub = stream_data.get_sub_by_id(stream_id); - const name = sub.name; - const i = all_streams.indexOf(name); - - if (i < 0) { - return; - } - - return i; -} - function maybe_get_stream_id(i) { if (i < 0 || i >= all_streams.length) { return; } - const name = all_streams[i]; - const stream_id = stream_data.get_stream_id(name); - return stream_id; + return all_streams[i]; } exports.first_stream_id = function () { @@ -111,9 +110,9 @@ exports.first_stream_id = function () { }; exports.prev_stream_id = function (stream_id) { - const i = pos(stream_id); + const i = all_streams.indexOf(stream_id); - if (i === undefined) { + if (i < 0) { return; } @@ -121,9 +120,9 @@ exports.prev_stream_id = function (stream_id) { }; exports.next_stream_id = function (stream_id) { - const i = pos(stream_id); + const i = all_streams.indexOf(stream_id); - if (i === undefined) { + if (i < 0) { return; }