diff --git a/web/src/compose_reply.ts b/web/src/compose_reply.ts index a3be95d722..7cd5dad3ac 100644 --- a/web/src/compose_reply.ts +++ b/web/src/compose_reply.ts @@ -321,6 +321,7 @@ export function quote_message(opts: { void channel.get({ url: "/json/messages/" + message_id, + data: {allow_empty_topic_name: true}, success(raw_data) { const data = z.object({raw_content: z.string()}).parse(raw_data); replace_content(message, data.raw_content); diff --git a/web/src/message_edit.ts b/web/src/message_edit.ts index 79b2ed63c4..3d07b946fc 100644 --- a/web/src/message_edit.ts +++ b/web/src/message_edit.ts @@ -669,6 +669,7 @@ export function start($row: JQuery, edit_box_open_callback?: () => void): void { const msg_list = message_lists.current; void channel.get({ url: "/json/messages/" + message.id, + data: {allow_empty_topic_name: true}, success(data) { const {raw_content} = z.object({raw_content: z.string()}).parse(data); if (message_lists.current === msg_list) { @@ -1582,6 +1583,7 @@ export function with_first_message_id( {operator: "channel", operand: stream_id}, {operator: "topic", operand: topic_name}, ]), + allow_empty_topic_name: true, }; void channel.get({ @@ -1617,6 +1619,7 @@ export function is_message_oldest_or_newest( {operator: "channel", operand: stream_id}, {operator: "topic", operand: topic_name}, ]), + allow_empty_topic_name: true, }; void channel.get({ diff --git a/web/src/message_edit_history.ts b/web/src/message_edit_history.ts index 0ca87acae5..a84d1140ff 100644 --- a/web/src/message_edit_history.ts +++ b/web/src/message_edit_history.ts @@ -114,7 +114,10 @@ export function fetch_and_render_message_history(message: Message): void { show_loading_indicator(); void channel.get({ url: "/json/messages/" + message.id + "/history", - data: {message_id: JSON.stringify(message.id)}, + data: { + message_id: JSON.stringify(message.id), + allow_empty_topic_name: true, + }, success(raw_data) { const data = server_message_history_schema.parse(raw_data); diff --git a/web/src/message_events.ts b/web/src/message_events.ts index 64fc7e0a91..69499a89c5 100644 --- a/web/src/message_events.ts +++ b/web/src/message_events.ts @@ -192,6 +192,7 @@ export let update_views_filtered_on_message_property = ( data: { message_ids: JSON.stringify(message_ids), narrow: JSON.stringify(filter.terms()), + allow_empty_topic_name: true, }, success(data) { const messages_to_add: Message[] = []; @@ -216,6 +217,7 @@ export let update_views_filtered_on_message_property = ( url: "/json/messages", data: { message_ids: JSON.stringify(messages_to_fetch), + allow_empty_topic_name: true, // We don't filter by narrow here since we can // apply the filter locally and the fetched message // can be used to update other message lists and diff --git a/web/src/message_fetch.ts b/web/src/message_fetch.ts index 211900c041..01727ff426 100644 --- a/web/src/message_fetch.ts +++ b/web/src/message_fetch.ts @@ -59,6 +59,7 @@ type MessageFetchAPIParams = { num_after: number; client_gravatar: boolean; narrow?: string; + allow_empty_topic_name: boolean; }; let first_messages_fetch = true; @@ -329,6 +330,7 @@ function get_parameters_for_message_fetch_api(opts: MessageFetchOptions): Messag num_before: opts.num_before, num_after: opts.num_after, client_gravatar: true, + allow_empty_topic_name: true, }; const msg_list_data = opts.msg_list_data; diff --git a/web/src/message_flags.ts b/web/src/message_flags.ts index db8717b640..aae6de5c5e 100644 --- a/web/src/message_flags.ts +++ b/web/src/message_flags.ts @@ -110,6 +110,7 @@ export function unstar_all_messages_in_topic(stream_id: number, topic: string): {operator: "topic", operand: topic}, {operator: "is", operand: "starred"}, ]), + allow_empty_topic_name: true, }; void channel.get({ diff --git a/web/src/message_view.ts b/web/src/message_view.ts index 64bb306220..382b97007c 100644 --- a/web/src/message_view.ts +++ b/web/src/message_view.ts @@ -555,6 +555,7 @@ export let show = (raw_terms: NarrowTerm[], show_opts: ShowMessageViewOpts): voi // for it. channel.get({ url: `/json/messages/${id_info.target_id}`, + data: {allow_empty_topic_name: true}, success(raw_data) { const data = fetch_message_response_schema.parse(raw_data); // After the message is fetched, we make the diff --git a/web/src/state_data.ts b/web/src/state_data.ts index e13d817280..0dfea7b99e 100644 --- a/web/src/state_data.ts +++ b/web/src/state_data.ts @@ -334,6 +334,7 @@ export const realm_schema = z.object({ config: z.record(z.string()), }), ), + realm_empty_topic_display_name: z.string(), realm_enable_guest_user_indicator: z.boolean(), realm_enable_read_receipts: z.boolean(), realm_enable_spectator_access: z.boolean(), diff --git a/web/src/stream_topic_history_util.ts b/web/src/stream_topic_history_util.ts index aad50f6693..61e41bbae9 100644 --- a/web/src/stream_topic_history_util.ts +++ b/web/src/stream_topic_history_util.ts @@ -56,6 +56,7 @@ export function update_topic_last_message_id( anchor: "newest", num_before: 1, num_after: 0, + allow_empty_topic_name: true, }, success(data) { const {messages} = z diff --git a/web/src/ui_init.js b/web/src/ui_init.js index d9ec6e3edf..7ef8dd2061 100644 --- a/web/src/ui_init.js +++ b/web/src/ui_init.js @@ -709,6 +709,7 @@ $(() => { // Set this to true when stream typing notifications are implemented. stream_typing_notifications: false, user_settings_object: true, + empty_topic_name: true, }), client_gravatar: false, }; diff --git a/web/tests/message_flags.test.cjs b/web/tests/message_flags.test.cjs index edeb7599d4..b855a5f6e0 100644 --- a/web/tests/message_flags.test.cjs +++ b/web/tests/message_flags.test.cjs @@ -143,6 +143,7 @@ run_test("unstar_all_in_topic", ({override}) => { {operator: "topic", operand: "topic"}, {operator: "is", operand: "starred"}, ]), + allow_empty_topic_name: true, }); assert.deepEqual(channel_post_opts.data, { diff --git a/web/tests/stream_topic_history.test.cjs b/web/tests/stream_topic_history.test.cjs index a3065aed61..d22f613b69 100644 --- a/web/tests/stream_topic_history.test.cjs +++ b/web/tests/stream_topic_history.test.cjs @@ -426,6 +426,7 @@ test("ask_server_for_latest_topic_data", () => { narrow: '[{"operator":"stream","operand":1080},{"operator":"topic","operand":"Topic1"}]', num_after: 0, num_before: 1, + allow_empty_topic_name: true, }); success_callback = opts.success; };