Files
zulip/web/src/scheduled_messages.js
2023-04-17 16:59:25 -07:00

103 lines
3.8 KiB
JavaScript

import $ from "jquery";
import * as channel from "./channel";
import * as compose from "./compose";
import * as compose_actions from "./compose_actions";
import * as compose_fade from "./compose_fade";
import * as compose_ui from "./compose_ui";
import * as narrow from "./narrow";
import * as overlays from "./overlays";
import * as people from "./people";
import * as popover_menus from "./popover_menus";
// This is only updated when user opens the scheduled messages overlay.
export let scheduled_messages_data = [];
export function override_scheduled_messages_data(data) {
scheduled_messages_data = data;
}
export function edit_scheduled_message(scheduled_msg_id) {
const scheduled_msg = scheduled_messages_data.find(
(msg) => msg.message_id === scheduled_msg_id,
);
let compose_args;
if (scheduled_msg.type === "stream") {
compose_args = {
type: "stream",
stream: scheduled_msg.stream_name,
topic: scheduled_msg.topic,
content: scheduled_msg.content,
};
} else {
const recipient_emails = [];
if (scheduled_msg.to) {
for (const recipient_id of scheduled_msg.to) {
recipient_emails.push(people.get_by_user_id(recipient_id).email);
}
}
compose_args = {
type: scheduled_msg.type,
private_message_recipient: recipient_emails.join(","),
content: scheduled_msg.content,
};
}
if (compose_args.type === "stream") {
narrow.activate(
[
{operator: "stream", operand: compose_args.stream},
{operator: "topic", operand: compose_args.topic},
],
{trigger: "edit scheduled message"},
);
} else {
narrow.activate([{operator: "pm-with", operand: compose_args.private_message_recipient}], {
trigger: "edit scheduled message",
});
}
overlays.close_overlay("scheduled");
compose_fade.clear_compose();
compose.clear_preview_area();
compose_actions.start(compose_args.type, compose_args);
compose_ui.autosize_textarea($("#compose-textarea"));
$("#compose-textarea").attr("data-scheduled-message-id", scheduled_msg_id);
popover_menus.show_schedule_confirm_button(scheduled_msg.formatted_send_at_time, true);
}
export function delete_scheduled_message(scheduled_msg_id) {
channel.del({
url: "/json/scheduled_messages/" + scheduled_msg_id,
success() {
// TODO: Do this via events received from the server in server_events_dispatch.
if (overlays.scheduled_messages_open()) {
$(
`#scheduled_messages_overlay .scheduled-message-row[data-message-id=${scheduled_msg_id}]`,
).remove();
}
if ($("#compose-textarea").attr("data-scheduled-message-id")) {
const compose_scheduled_msg_id = $("#compose-textarea").attr(
"data-scheduled-message-id",
);
// If user deleted the scheduled message which is being edited in compose, we clear
// the scheduled message id from there which converts this editing state into a normal
// schedule message state. So, clicking "Schedule" will now create a new scheduled message.
if (compose_scheduled_msg_id === scheduled_msg_id) {
$("#compose-textarea").removeAttr("data-scheduled-message-id");
}
}
},
});
}
export function delete_scheduled_message_if_sent_directly() {
// Delete old scheduled message if it was sent.
if ($("#compose-textarea").attr("data-scheduled-message-id")) {
delete_scheduled_message($("#compose-textarea").attr("data-scheduled-message-id"));
$("#compose-textarea").removeAttr("data-scheduled-message-id");
}
}