diff --git a/web/src/compose_validate.js b/web/src/compose_validate.js index a1c4c5325b..9ca51dcbe4 100644 --- a/web/src/compose_validate.js +++ b/web/src/compose_validate.js @@ -691,3 +691,22 @@ export function validate(scheduling_message) { } return validate_stream_message(scheduling_message); } + +export function convert_mentions_to_silent_in_direct_messages(mention_text, full_name, user_id) { + if (compose_state.get_message_type() !== "private") { + return mention_text; + } + + const recipient_user_id = compose_pm_pill.get_user_ids(); + if (recipient_user_id.toString() !== user_id.toString()) { + return mention_text; + } + + const mention_str = people.get_mention_syntax(full_name, user_id, false); + const silent_mention_str = people.get_mention_syntax(full_name, user_id, true); + mention_text = mention_text.replace(mention_str, silent_mention_str); + // also replace other mentions... + compose_ui.replace_syntax(mention_str, silent_mention_str); + + return mention_text; +} diff --git a/web/src/composebox_typeahead.js b/web/src/composebox_typeahead.js index 7ee4b1ceeb..785ffd7e36 100644 --- a/web/src/composebox_typeahead.js +++ b/web/src/composebox_typeahead.js @@ -862,15 +862,20 @@ export function content_typeahead_selected(item, event) { // that functionality yet, and we haven't gotten much // feedback on this being an actual pitfall. } else { - const mention_text = people.get_mention_syntax( + let mention_text = people.get_mention_syntax( item.full_name, item.user_id, is_silent, ); - beginning += mention_text + " "; if (!is_silent) { compose_validate.warn_if_mentioning_unsubscribed_user(item, $textbox); + mention_text = compose_validate.convert_mentions_to_silent_in_direct_messages( + mention_text, + item.full_name, + item.user_id, + ); } + beginning += mention_text + " "; } break; } diff --git a/web/tests/composebox_typeahead.test.js b/web/tests/composebox_typeahead.test.js index 4142dcf003..d00f8f471f 100644 --- a/web/tests/composebox_typeahead.test.js +++ b/web/tests/composebox_typeahead.test.js @@ -476,6 +476,11 @@ test("content_typeahead_selected", ({override}) => { fake_this.completing = "mention"; override(compose_validate, "warn_if_mentioning_unsubscribed_user", () => {}); + override( + compose_validate, + "convert_mentions_to_silent_in_direct_messages", + (mention_text) => mention_text, + ); fake_this.query = "@**Mark Tw"; fake_this.token = "Mark Tw";