compose_actions: Add hooks for compose.js modules.

This commit cuts the dependency on `compose.js` module for
`compose_actions.js` module by introducing a hook system for
registering different hooks from external modules.
This commit is contained in:
Lalit
2023-06-18 12:19:55 +05:30
committed by Tim Abbott
parent 239b6737c0
commit 039b29c260
4 changed files with 36 additions and 7 deletions

View File

@@ -417,7 +417,19 @@ export function render_and_show_preview($preview_spinner, $preview_content_box,
}
}
function setup_compose_actions_hooks() {
compose_actions.register_compose_box_clear_hook(clear_invites);
compose_actions.register_compose_box_clear_hook(clear_private_stream_alert);
compose_actions.register_compose_box_clear_hook(clear_preview_area);
compose_actions.register_compose_cancel_hook(abort_xhr);
compose_actions.register_compose_cancel_hook(abort_video_callbacks);
}
export function initialize() {
// Register hooks for compose_actions.
setup_compose_actions_hooks();
$("#below-compose-content .video_link").toggle(compute_show_video_chat_button());
$("#compose-textarea").on("keydown", (event) => {

View File

@@ -6,7 +6,6 @@ import $ from "jquery";
import * as fenced_code from "../shared/src/fenced_code";
import * as channel from "./channel";
import * as compose from "./compose";
import * as compose_banner from "./compose_banner";
import * as compose_fade from "./compose_fade";
import * as compose_pm_pill from "./compose_pm_pill";
@@ -32,6 +31,23 @@ import * as stream_bar from "./stream_bar";
import * as stream_data from "./stream_data";
import * as unread_ops from "./unread_ops";
const compose_clear_box_hooks = [];
const compose_cancel_hooks = [];
export function register_compose_box_clear_hook(hook) {
compose_clear_box_hooks.push(hook);
}
export function register_compose_cancel_hook(hook) {
compose_cancel_hooks.push(hook);
}
function call_hooks(hooks) {
for (const f of hooks) {
f();
}
}
export function blur_compose_inputs() {
$(".message_comp").find("input, textarea, button, #private_message_recipient").trigger("blur");
}
@@ -61,16 +77,14 @@ export function clear_textarea() {
}
function clear_box() {
compose.clear_invites();
call_hooks(compose_clear_box_hooks);
// TODO: Better encapsulate at-mention warnings.
compose_validate.clear_topic_resolved_warning();
compose_validate.clear_wildcard_warnings($("#compose_banners"));
compose.clear_private_stream_alert();
compose_validate.set_user_acknowledged_wildcard_flag(false);
compose_state.set_recipient_edited_manually(false);
compose.clear_preview_area();
clear_textarea();
compose_validate.check_overflow_text();
$("#compose-textarea").removeData("draft-id");
@@ -280,8 +294,7 @@ export function cancel() {
$("#compose_close").hide();
clear_box();
compose_banner.clear_message_sent_banners();
compose.abort_xhr();
compose.abort_video_callbacks(undefined);
call_hooks(compose_cancel_hooks);
compose_state.set_message_type(false);
compose_pm_pill.clear();
$(document).trigger("compose_canceled.zulip");

View File

@@ -35,7 +35,10 @@ autosize.update = () => {};
mock_esm("autosize", {default: autosize});
const channel = mock_esm("../src/channel");
const compose_actions = mock_esm("../src/compose_actions");
const compose_actions = mock_esm("../src/compose_actions", {
register_compose_cancel_hook: noop,
register_compose_box_clear_hook: noop,
});
const compose_fade = mock_esm("../src/compose_fade");
const compose_pm_pill = mock_esm("../src/compose_pm_pill");
const loading = mock_esm("../src/loading");

View File

@@ -229,6 +229,7 @@ test("start", ({override, override_rewire, mock_template}) => {
abort_xhr_called = true;
});
compose_actions.register_compose_cancel_hook(compose.abort_xhr);
$("#compose-textarea").set_height(50);
assert_hidden("#compose_controls");