diff --git a/web/e2e-tests/lib/common.ts b/web/e2e-tests/lib/common.ts index 378fb6b35f..d8c2c8b547 100644 --- a/web/e2e-tests/lib/common.ts +++ b/web/e2e-tests/lib/common.ts @@ -49,7 +49,9 @@ export const pm_recipient = { }, async expect(page: Page, expected: string): Promise { - const actual_recipients = await page.evaluate(() => zulip_test.private_message_recipient()); + const actual_recipients = await page.evaluate(() => + zulip_test.private_message_recipient_emails(), + ); assert.equal(actual_recipients, expected); }, }; diff --git a/web/src/compose.js b/web/src/compose.js index ead6f9fa6b..607242f1ac 100644 --- a/web/src/compose.js +++ b/web/src/compose.js @@ -93,7 +93,7 @@ export function create_message_object(message_content = compose_state.message_co if (message.type === "private") { // TODO: this should be collapsed with the code in composebox_typeahead.ts - const recipient = compose_state.private_message_recipient(); + const recipient = compose_state.private_message_recipient_emails(); const emails = util.extract_pm_recipients(recipient); message.to = emails; message.reply_to = recipient; diff --git a/web/src/compose_actions.ts b/web/src/compose_actions.ts index 129d401730..8bb8a5e541 100644 --- a/web/src/compose_actions.ts +++ b/web/src/compose_actions.ts @@ -272,7 +272,8 @@ function same_recipient_as_before(opts: ComposeActionsOpts): boolean { opts.stream_id === compose_state.stream_id() && opts.topic === compose_state.topic()) || (opts.message_type === "private" && - opts.private_message_recipient === compose_state.private_message_recipient())) + opts.private_message_recipient === + compose_state.private_message_recipient_emails())) ); } @@ -361,7 +362,7 @@ export let start = (raw_opts: ComposeActionsStartOpts): void => { compose_recipient.update_topic_displayed_text(opts.topic); // Set the recipients with a space after each comma, so it looks nice. - compose_state.private_message_recipient( + compose_state.private_message_recipient_emails( opts.private_message_recipient.replaceAll(/,\s*/g, ", "), ); diff --git a/web/src/compose_fade.ts b/web/src/compose_fade.ts index eaeef8b776..842e47ee65 100644 --- a/web/src/compose_fade.ts +++ b/web/src/compose_fade.ts @@ -34,7 +34,9 @@ export function set_focused_recipient(msg_type?: "private" | "stream"): void { } else if (msg_type === "private") { // Normalize the recipient list so it matches the one used when // adding the message (see message_helper.process_new_message()). - const reply_to = util.normalize_recipients(compose_state.private_message_recipient()); + const reply_to = util.normalize_recipients( + compose_state.private_message_recipient_emails(), + ); const to_user_ids = people.reply_to_to_user_ids_string(reply_to); focused_recipient = { type: msg_type, @@ -83,7 +85,7 @@ function fade_messages(): void { if ( message_lists.current !== expected_msg_list || !compose_state.composing() || - compose_state.private_message_recipient() !== expected_recipient + compose_state.private_message_recipient_emails() !== expected_recipient ) { return; } @@ -101,7 +103,7 @@ function fade_messages(): void { }, 0, message_lists.current, - compose_state.private_message_recipient(), + compose_state.private_message_recipient_emails(), ); } diff --git a/web/src/compose_recipient.ts b/web/src/compose_recipient.ts index 5fd05c6ed4..9cf0dda4f4 100644 --- a/web/src/compose_recipient.ts +++ b/web/src/compose_recipient.ts @@ -37,7 +37,7 @@ function composing_to_current_topic_narrow(): boolean { } function composing_to_current_private_message_narrow(): boolean { - const compose_state_recipient = compose_state.private_message_recipient(); + const compose_state_recipient = compose_state.private_message_recipient_emails(); const narrow_state_recipient = narrow_state.pm_emails_string(); if (narrow_state_recipient === undefined) { return false; @@ -72,7 +72,7 @@ export let update_narrow_to_recipient_visibility = (): void => { return; } } else if (message_type === "private") { - const recipients = compose_state.private_message_recipient(); + const recipients = compose_state.private_message_recipient_emails(); if ( recipients && !composing_to_current_private_message_narrow() && @@ -152,7 +152,7 @@ function switch_message_type(message_type: MessageType): void { trigger: "switch_message_type", stream_id: compose_state.stream_id()!, topic: compose_state.topic(), - private_message_recipient: compose_state.private_message_recipient(), + private_message_recipient: compose_state.private_message_recipient_emails(), }; update_compose_for_message_type(opts); update_compose_area_placeholder_text(); @@ -287,7 +287,7 @@ function on_hidden_callback(): void { // after updating the stream. ui_util.place_caret_at_end(util.the($("input#stream_message_recipient_topic"))); } else { - if (compose_state.private_message_recipient().length === 0) { + if (compose_state.private_message_recipient_emails().length === 0) { $("#private_message_recipient").trigger("focus").trigger("select"); } else { $("textarea#compose-textarea").trigger("focus"); diff --git a/web/src/compose_state.ts b/web/src/compose_state.ts index d6d219e9e6..bcde9cf3de 100644 --- a/web/src/compose_state.ts +++ b/web/src/compose_state.ts @@ -215,7 +215,7 @@ export function focus_in_empty_compose( // Check whether the current input element is empty for each input type. switch (focused_element_id) { case "private_message_recipient": - return private_message_recipient().length === 0; + return private_message_recipient_emails().length === 0; case "stream_message_recipient_topic": return topic() === ""; case "compose_select_recipient_widget_wrapper": @@ -225,9 +225,9 @@ export function focus_in_empty_compose( return false; } -export function private_message_recipient(): string; -export function private_message_recipient(value: string): undefined; -export function private_message_recipient(value?: string): string | undefined { +export function private_message_recipient_emails(): string; +export function private_message_recipient_emails(value: string): undefined; +export function private_message_recipient_emails(value?: string): string | undefined { if (typeof value === "string") { compose_pm_pill.set_from_emails(value); return undefined; @@ -253,11 +253,11 @@ export function has_full_recipient(): boolean { const has_topic = topic() !== "" || !realm.realm_mandatory_topics; return stream_id() !== undefined && has_topic; } - return private_message_recipient() !== ""; + return private_message_recipient_emails() !== ""; } export function update_email(user_id: number, new_email: string): void { - let reply_to = private_message_recipient(); + let reply_to = private_message_recipient_emails(); if (!reply_to) { return; @@ -265,7 +265,7 @@ export function update_email(user_id: number, new_email: string): void { reply_to = people.update_email_in_reply_to(reply_to, user_id, new_email); - private_message_recipient(reply_to); + private_message_recipient_emails(reply_to); } let _can_restore_drafts = true; diff --git a/web/src/compose_validate.ts b/web/src/compose_validate.ts index 425dc373f9..1eb53a07ee 100644 --- a/web/src/compose_validate.ts +++ b/web/src/compose_validate.ts @@ -904,7 +904,8 @@ function validate_private_message(show_banner = true): boolean { const user_ids = compose_pm_pill.get_user_ids(); const user_ids_string = util.sorted_ids(user_ids).join(","); const $banner_container = $("#compose_banners"); - const missing_direct_message_recipient = compose_state.private_message_recipient().length === 0; + const missing_direct_message_recipient = + compose_state.private_message_recipient_emails().length === 0; if (missing_direct_message_recipient) { report_validation_error( diff --git a/web/src/drafts.ts b/web/src/drafts.ts index 3aeaded4d7..7b72fb7391 100644 --- a/web/src/drafts.ts +++ b/web/src/drafts.ts @@ -314,7 +314,7 @@ export function snapshot_message(): LocalStorageDraft | undefined { updatedAt: getTimestamp(), }; if (message.type === "private") { - const recipient = compose_state.private_message_recipient(); + const recipient = compose_state.private_message_recipient_emails(); return { ...message, type: "private", @@ -484,7 +484,7 @@ export function current_recipient_data(): { return { stream_name: undefined, topic: undefined, - private_recipients: compose_state.private_message_recipient(), + private_recipients: compose_state.private_message_recipient_emails(), }; } return { diff --git a/web/src/message_view.ts b/web/src/message_view.ts index 24e3444aac..dc3d5abb69 100644 --- a/web/src/message_view.ts +++ b/web/src/message_view.ts @@ -1463,7 +1463,7 @@ export function to_compose_target(): void { } if (compose_state.get_message_type() === "private") { - const recipient_string = compose_state.private_message_recipient(); + const recipient_string = compose_state.private_message_recipient_emails(); const emails = util.extract_pm_recipients(recipient_string); const invalid = emails.filter((email) => !people.is_valid_email_for_compose(email)); // If there are no recipients or any recipient is diff --git a/web/src/reload.ts b/web/src/reload.ts index 53472c4188..6bf8a6f9f6 100644 --- a/web/src/reload.ts +++ b/web/src/reload.ts @@ -69,7 +69,9 @@ function preserve_state(send_after_reload: boolean, save_compose: boolean): void url += "+topic=" + encodeURIComponent(compose_state.topic()); } else if (msg_type === "private") { url += "+msg_type=private"; - url += "+recipient=" + encodeURIComponent(compose_state.private_message_recipient()); + url += + "+recipient=" + + encodeURIComponent(compose_state.private_message_recipient_emails()); } if (msg_type) { diff --git a/web/src/zulip_test.ts b/web/src/zulip_test.ts index c68b22a46e..4210b3422c 100644 --- a/web/src/zulip_test.ts +++ b/web/src/zulip_test.ts @@ -3,7 +3,7 @@ // Puppeteer tests. It should not be used in the code itself. export {set_wildcard_mention_threshold, wildcard_mention_threshold} from "./compose_validate.ts"; -export {private_message_recipient} from "./compose_state.ts"; +export {private_message_recipient_emails} from "./compose_state.ts"; export {current as current_msg_list} from "./message_lists.ts"; export {get_stream_id, get_sub, get_subscriber_count} from "./stream_data.ts"; export {get_by_user_id as get_person_by_user_id, get_user_id_from_name} from "./people.ts"; diff --git a/web/tests/compose_actions.test.cjs b/web/tests/compose_actions.test.cjs index 0d567ccf15..1fbd9f8e1e 100644 --- a/web/tests/compose_actions.test.cjs +++ b/web/tests/compose_actions.test.cjs @@ -109,7 +109,7 @@ function assert_hidden(sel) { assert.ok(!$(sel).visible()); } -function override_private_message_recipient({override}) { +function override_private_message_recipient_emails({override}) { let recipient; override(compose_pm_pill, "set_from_emails", (value) => { recipient = value; @@ -146,7 +146,7 @@ test("initial_state", () => { test("start", ({override, override_rewire, mock_template}) => { mock_banners(); - override_private_message_recipient({override}); + override_private_message_recipient_emails({override}); override_rewire(compose_actions, "autosize_message_content", noop); override_rewire(compose_actions, "expand_compose_box", noop); override_rewire(compose_actions, "complete_starting_tasks", noop); @@ -259,7 +259,7 @@ test("start", ({override, override_rewire, mock_template}) => { assert_hidden("input#stream_message_recipient_topic"); assert_visible("#compose-direct-recipient"); - assert.equal(compose_state.private_message_recipient(), "foo@example.com"); + assert.equal(compose_state.private_message_recipient_emails(), "foo@example.com"); assert.equal($("textarea#compose-textarea").val(), "hello"); assert.equal(compose_state.get_message_type(), "private"); assert.ok(compose_state.composing()); @@ -272,7 +272,7 @@ test("start", ({override, override_rewire, mock_template}) => { start(opts); - assert.equal(compose_state.private_message_recipient(), ""); + assert.equal(compose_state.private_message_recipient_emails(), ""); assert.equal(compose_state.get_message_type(), "private"); assert.ok(compose_state.composing()); @@ -310,7 +310,7 @@ test("respond_to_message", ({override, override_rewire, mock_template}) => { override_rewire(compose_recipient, "on_compose_select_recipient_update", noop); override_rewire(compose_recipient, "check_posting_policy_for_compose_box", noop); - override_private_message_recipient({override}); + override_private_message_recipient_emails({override}); mock_template("inline_decorated_channel_name.hbs", false, noop); override(realm, "realm_direct_message_permission_group", nobody.id); @@ -336,7 +336,7 @@ test("respond_to_message", ({override, override_rewire, mock_template}) => { }; respond_to_message(opts); - assert.equal(compose_state.private_message_recipient(), "alice@example.com"); + assert.equal(compose_state.private_message_recipient_emails(), "alice@example.com"); // Test stream const denmark = { @@ -373,7 +373,7 @@ test("reply_with_mention", ({override, override_rewire, mock_template}) => { $elem.set_find_results(".message-textarea", $textarea); $elem.set_find_results(".message-limit-indicator", $indicator); - override_private_message_recipient({override}); + override_private_message_recipient_emails({override}); override_rewire(compose_recipient, "check_posting_policy_for_compose_box", noop); mock_template("inline_decorated_channel_name.hbs", false, noop); @@ -448,7 +448,7 @@ test("quote_message", ({disallow, override, override_rewire}) => { override_rewire(compose_actions, "complete_starting_tasks", noop); override_rewire(compose_actions, "clear_textarea", noop); - override_private_message_recipient({override}); + override_private_message_recipient_emails({override}); let selected_message; override(message_lists.current, "get", (id) => (id === 100 ? selected_message : undefined)); diff --git a/web/tests/compose_state.test.cjs b/web/tests/compose_state.test.cjs index ca8b1ee480..6425089085 100644 --- a/web/tests/compose_state.test.cjs +++ b/web/tests/compose_state.test.cjs @@ -15,7 +15,7 @@ const {set_realm} = zrequire("state_data"); const realm = {}; set_realm(realm); -run_test("private_message_recipient", ({override}) => { +run_test("private_message_recipient_emails", ({override}) => { let emails; override(compose_pm_pill, "set_from_emails", (value) => { emails = value; @@ -23,8 +23,8 @@ run_test("private_message_recipient", ({override}) => { override(compose_pm_pill, "get_emails", () => emails); - compose_state.private_message_recipient("fred@fred.org"); - assert.equal(compose_state.private_message_recipient(), "fred@fred.org"); + compose_state.private_message_recipient_emails("fred@fred.org"); + assert.equal(compose_state.private_message_recipient_emails(), "fred@fred.org"); }); run_test("has_full_recipient", ({override}) => { @@ -51,9 +51,9 @@ run_test("has_full_recipient", ({override}) => { assert.equal(compose_state.has_full_recipient(), true); compose_state.set_message_type("private"); - compose_state.private_message_recipient(""); + compose_state.private_message_recipient_emails(""); assert.equal(compose_state.has_full_recipient(), false); - compose_state.private_message_recipient("foo@zulip.com"); + compose_state.private_message_recipient_emails("foo@zulip.com"); assert.equal(compose_state.has_full_recipient(), true); }); diff --git a/web/tests/compose_validate.test.cjs b/web/tests/compose_validate.test.cjs index e7a64eb9b4..91d2445203 100644 --- a/web/tests/compose_validate.test.cjs +++ b/web/tests/compose_validate.test.cjs @@ -229,7 +229,7 @@ test_ui("validate", ({mock_template, override}) => { initialize_pm_pill(mock_template); add_content_to_compose_box(); - compose_state.private_message_recipient(""); + compose_state.private_message_recipient_emails(""); let pm_recipient_error_rendered = false; override(realm, "realm_direct_message_permission_group", everyone.id); override(realm, "realm_direct_message_initiator_group", everyone.id); @@ -246,7 +246,7 @@ test_ui("validate", ({mock_template, override}) => { pm_recipient_error_rendered = false; people.add_active_user(bob); - compose_state.private_message_recipient("bob@example.com"); + compose_state.private_message_recipient_emails("bob@example.com"); assert.ok(compose_validate.validate()); assert.ok(!pm_recipient_error_rendered); @@ -280,7 +280,7 @@ test_ui("validate", ({mock_template, override}) => { initialize_pm_pill(mock_template); add_content_to_compose_box(); - compose_state.private_message_recipient("welcome-bot@example.com"); + compose_state.private_message_recipient_emails("welcome-bot@example.com"); $("#send_message_form").set_find_results(".message-textarea", $("textarea#compose-textarea")); assert.ok(compose_validate.validate()); @@ -301,7 +301,7 @@ test_ui("validate", ({mock_template, override}) => { return ""; }); initialize_pm_pill(mock_template); - compose_state.private_message_recipient("welcome-bot@example.com"); + compose_state.private_message_recipient_emails("welcome-bot@example.com"); $("textarea#compose-textarea").toggleClass = (classname, value) => { assert.equal(classname, "invalid"); assert.equal(value, expected_invalid_state); @@ -851,7 +851,7 @@ test_ui("test_warn_if_guest_in_dm_recipient", ({mock_template, override}) => { compose_state.set_message_type("private"); initialize_pm_pill(mock_template); - compose_state.private_message_recipient("guest@example.com"); + compose_state.private_message_recipient_emails("guest@example.com"); const classname = compose_banner.CLASSNAMES.guest_in_dm_recipient_warning; let $banner = $(`#compose_banners .${CSS.escape(classname)}`); @@ -883,7 +883,7 @@ test_ui("test_warn_if_guest_in_dm_recipient", ({mock_template, override}) => { people.add_active_user(new_guest); initialize_pm_pill(mock_template); - compose_state.private_message_recipient("guest@example.com, new_guest@example.com"); + compose_state.private_message_recipient_emails("guest@example.com, new_guest@example.com"); $banner = $(`#compose_banners .${CSS.escape(classname)}`); $banner.length = 1; let is_updated = false;