compose_typeahead: Exclude muted users from results.

Hides muted users from PM recipients and compose box
mention typeaheads.
This commit is contained in:
Abhijeet Prasad Bodas
2021-05-03 20:30:45 +05:30
committed by Tim Abbott
parent 04c355c248
commit 65249d90e9
2 changed files with 28 additions and 0 deletions

View File

@@ -39,6 +39,7 @@ const typeahead = zrequire("../shared/js/typeahead");
const compose_state = zrequire("compose_state");
zrequire("templates");
const typeahead_helper = zrequire("typeahead_helper");
const muting = zrequire("muting");
const people = zrequire("people");
const user_groups = zrequire("user_groups");
const stream_data = zrequire("stream_data");
@@ -1543,3 +1544,26 @@ test("message people", (override) => {
// harry is excluded since it has been deactivated.
assert.deepEqual(results, [hamletcharacters, hal]);
});
test("muted users excluded from results", () => {
// This logic is common to PM recipients as well as
// mentions typeaheads, so we need only test once.
let results;
const opts = {
want_groups: false,
want_broadcast: true,
};
// Nobody is muted
results = ct.get_person_suggestions("corde", opts);
assert.deepEqual(results, [cordelia]);
// Mute Cordelia, and test that she's excluded from results.
muting.add_muted_user(cordelia.user_id);
results = ct.get_person_suggestions("corde", opts);
assert.deepEqual(results, []);
// Make sure our muting logic doesn't break wildcard mentions.
results = ct.get_person_suggestions("all", opts);
assert.deepEqual(results, [mention_all]);
});

View File

@@ -14,6 +14,7 @@ import * as compose_state from "./compose_state";
import * as compose_ui from "./compose_ui";
import {$t} from "./i18n";
import * as message_store from "./message_store";
import * as muting from "./muting";
import {page_params} from "./page_params";
import * as people from "./people";
import * as rows from "./rows";
@@ -445,10 +446,13 @@ export function get_person_suggestions(query, opts) {
} else {
persons = all_persons;
}
// Exclude muted users from typeaheads.
persons = muting.filter_muted_users(persons);
if (opts.want_broadcast) {
persons = persons.concat(broadcast_mentions());
}
return persons.filter((item) => query_matches_person(query, item));
}