mirror of
https://github.com/zulip/zulip.git
synced 2025-10-28 02:23:57 +00:00
popover: Extract with_first_message_id helper.
This commit is contained in:
@@ -548,6 +548,43 @@ export function register_stream_handlers() {
|
||||
});
|
||||
}
|
||||
|
||||
function with_first_message_id(stream_id, topic_name, success_cb, error_cb) {
|
||||
// The API endpoint for editing messages to change their
|
||||
// content, topic, or stream requires a message ID.
|
||||
//
|
||||
// Because we don't have full data in the browser client, it's
|
||||
// possible that we might display a topic in the left sidebar
|
||||
// (and thus expose the UI for moving its topic to another
|
||||
// stream) without having a message ID that is definitely
|
||||
// within the topic. (The comments in stream_topic_history.js
|
||||
// discuss the tricky issues around message deletion that are
|
||||
// involved here).
|
||||
//
|
||||
// To ensure this option works reliably at a small latency
|
||||
// cost for a rare operation, we just ask the server for the
|
||||
// latest message ID in the topic.
|
||||
const data = {
|
||||
anchor: "newest",
|
||||
num_before: 1,
|
||||
num_after: 0,
|
||||
narrow: JSON.stringify([
|
||||
{operator: "stream", operand: stream_id},
|
||||
{operator: "topic", operand: topic_name},
|
||||
]),
|
||||
};
|
||||
|
||||
channel.get({
|
||||
url: "/json/messages",
|
||||
data,
|
||||
idempotent: true,
|
||||
success(data) {
|
||||
const message_id = data.messages[0].id;
|
||||
success_cb(message_id);
|
||||
},
|
||||
error_cb,
|
||||
});
|
||||
}
|
||||
|
||||
export function register_topic_handlers() {
|
||||
// Mute the topic
|
||||
$("body").on("click", ".sidebar-popover-mute-topic", (e) => {
|
||||
@@ -668,38 +705,11 @@ export function register_topic_handlers() {
|
||||
return;
|
||||
}
|
||||
|
||||
// The API endpoint for editing messages to change their
|
||||
// content, topic, or stream requires a message ID.
|
||||
//
|
||||
// Because we don't have full data in the browser client, it's
|
||||
// possible that we might display a topic in the left sidebar
|
||||
// (and thus expose the UI for moving its topic to another
|
||||
// stream) without having a message ID that is definitely
|
||||
// within the topic. (The comments in stream_topic_history.js
|
||||
// discuss the tricky issues around message deletion that are
|
||||
// involved here).
|
||||
//
|
||||
// To ensure this option works reliably at a small latency
|
||||
// cost for a rare operation, we just ask the server for the
|
||||
// latest message ID in the topic.
|
||||
const data = {
|
||||
anchor: "newest",
|
||||
num_before: 1,
|
||||
num_after: 0,
|
||||
narrow: JSON.stringify([
|
||||
{operator: "stream", operand: current_stream_id},
|
||||
{operator: "topic", operand: old_topic_name},
|
||||
]),
|
||||
};
|
||||
|
||||
message_edit.show_topic_move_spinner();
|
||||
channel.get({
|
||||
url: "/json/messages",
|
||||
data,
|
||||
idempotent: true,
|
||||
success(data) {
|
||||
const message_id = data.messages[0].id;
|
||||
|
||||
with_first_message_id(
|
||||
current_stream_id,
|
||||
old_topic_name,
|
||||
(message_id) => {
|
||||
if (old_topic_name.trim() === new_topic_name.trim()) {
|
||||
// We use `undefined` to tell the server that
|
||||
// there has been no change in the topic name.
|
||||
@@ -716,10 +726,10 @@ export function register_topic_handlers() {
|
||||
);
|
||||
}
|
||||
},
|
||||
error(xhr) {
|
||||
(xhr) => {
|
||||
message_edit.hide_topic_move_spinner();
|
||||
show_error_msg(xhr.responseJSON.msg);
|
||||
},
|
||||
});
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user