compose_state: Rename private_message_recipient to clarify it stores emails.

This will add clarity as we move towards using ids more and emails
less.
This commit is contained in:
Evy Kassirer
2025-05-05 16:55:22 +02:00
committed by Tim Abbott
parent b3ef64c932
commit 464b7f4540
14 changed files with 51 additions and 43 deletions

View File

@@ -49,7 +49,9 @@ export const pm_recipient = {
},
async expect(page: Page, expected: string): Promise<void> {
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);
},
};

View File

@@ -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;

View File

@@ -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, ", "),
);

View File

@@ -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(),
);
}

View File

@@ -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");

View File

@@ -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;

View File

@@ -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(

View File

@@ -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 {

View File

@@ -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

View File

@@ -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) {

View File

@@ -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";

View File

@@ -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));

View File

@@ -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);
});

View File

@@ -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 "<banner-stub>";
});
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;