compose: Save messages as drafts when window loses focus.

Add a check for window blur and save any in-progress
messages as drafts. This will help prevent unnecessary
message loss for the user by creating drafts for them more
whenever they switch away from their Zulip tab.

Tested on my local Ubuntu development with a demo
organization and some of the premade profiles.

Fixes #35262.
This commit is contained in:
amcdowell226
2025-08-05 15:28:13 -07:00
committed by GitHub
parent f689dfc3c3
commit 124a32e819
3 changed files with 18 additions and 0 deletions

View File

@@ -156,6 +156,7 @@ function initialize_handlers({override}) {
override(realm, "realm_available_video_chat_providers", {disabled: {id: 0}});
override(realm, "realm_video_chat_provider", 0);
override(resize, "watch_manual_resize", noop);
disable_window_triggers(override);
compose_setup.initialize();
}
@@ -163,6 +164,10 @@ function disable_document_triggers(override) {
override(document, "to_$", () => $("document-stub"));
}
function disable_window_triggers(override) {
override(window, "to_$", () => $("window-stub"));
}
function on_compose_finished_trigger_do(f) {
$(document).on("compose_finished.zulip", f);
}
@@ -543,6 +548,8 @@ test_ui("finish", ({override, override_rewire}) => {
});
test_ui("initialize", ({override}) => {
disable_window_triggers(override);
let compose_actions_expected_opts;
let compose_actions_start_checked;

View File

@@ -78,6 +78,7 @@ function test(label, f) {
test("videos", ({override}) => {
override(realm, "realm_video_chat_provider", realm_available_video_chat_providers.disabled.id);
override(window, "to_$", () => $("window-stub"));
stub_out_video_calls();
@@ -280,6 +281,7 @@ test("videos", ({override}) => {
test("test_video_chat_button_toggle disabled", ({override}) => {
override(realm, "realm_video_chat_provider", realm_available_video_chat_providers.disabled.id);
override(window, "to_$", () => $("window-stub"));
compose_setup.initialize();
assert.equal($(".compose-control-buttons-container .video_link").visible(), false);
});
@@ -290,6 +292,7 @@ test("test_video_chat_button_toggle no url", ({override}) => {
"realm_video_chat_provider",
realm_available_video_chat_providers.jitsi_meet.id,
);
override(window, "to_$", () => $("window-stub"));
page_params.jitsi_server_url = null;
compose_setup.initialize();
assert.equal($(".compose-control-buttons-container .video_link").visible(), false);
@@ -302,6 +305,7 @@ test("test_video_chat_button_toggle enabled", ({override}) => {
realm_available_video_chat_providers.jitsi_meet.id,
);
override(realm, "realm_jitsi_server_url", "https://meet.jit.si");
override(window, "to_$", () => $("window-stub"));
compose_setup.initialize();
assert.equal($(".compose-control-buttons-container .video_link").visible(), true);
});