desktop_integration: Convert module to TypeScript.

Signed-off-by: Anders Kaseorg <anders@zulip.com>
This commit is contained in:
Anders Kaseorg
2024-11-25 16:38:15 -08:00
committed by Tim Abbott
parent c4c1edfa6e
commit c1cd21d8d1
4 changed files with 29 additions and 17 deletions

View File

@@ -93,7 +93,7 @@ EXEMPT_FILES = make_set(
"web/src/debug.ts", "web/src/debug.ts",
"web/src/demo_organizations_ui.ts", "web/src/demo_organizations_ui.ts",
"web/src/deprecated_feature_notice.ts", "web/src/deprecated_feature_notice.ts",
"web/src/desktop_integration.js", "web/src/desktop_integration.ts",
"web/src/desktop_notifications.ts", "web/src/desktop_notifications.ts",
"web/src/dialog_widget.ts", "web/src/dialog_widget.ts",
"web/src/drafts.ts", "web/src/drafts.ts",

View File

@@ -1,4 +1,6 @@
import $ from "jquery"; import $ from "jquery";
import assert from "minimalistic-assert";
import {z} from "zod";
import * as browser_history from "./browser_history.ts"; import * as browser_history from "./browser_history.ts";
import * as channel from "./channel.ts"; import * as channel from "./channel.ts";
@@ -9,7 +11,7 @@ import * as message_store from "./message_store.ts";
import * as message_view from "./message_view.ts"; import * as message_view from "./message_view.ts";
import * as stream_data from "./stream_data.ts"; import * as stream_data from "./stream_data.ts";
export function initialize() { export function initialize(): void {
if (electron_bridge === undefined) { if (electron_bridge === undefined) {
return; return;
} }
@@ -33,18 +35,21 @@ export function initialize() {
electron_bridge.set_send_notification_reply_message_supported?.(true); electron_bridge.set_send_notification_reply_message_supported?.(true);
electron_bridge.on_event("send_notification_reply_message", (message_id, reply) => { electron_bridge.on_event("send_notification_reply_message", (message_id, reply) => {
const message = message_store.get(message_id); const message = message_store.get(message_id);
assert(message !== undefined);
const data = { const data = {
type: message.type, type: message.type,
content: reply, content: reply,
topic: message.topic, ...(message.type === "private"
? {
to: message.reply_to,
}
: {
to: stream_data.get_stream_name_from_id(message.stream_id),
topic: message.topic,
}),
}; };
if (message.type === "private") {
data.to = message.reply_to;
} else {
data.to = stream_data.get_stream_name_from_id(message.stream_id);
}
function success() { const success = (): void => {
if (message.type === "stream") { if (message.type === "stream") {
message_view.narrow_by_topic(message_id, {trigger: "desktop_notification_reply"}); message_view.narrow_by_topic(message_id, {trigger: "desktop_notification_reply"});
} else { } else {
@@ -52,15 +57,16 @@ export function initialize() {
trigger: "desktop_notification_reply", trigger: "desktop_notification_reply",
}); });
} }
} };
function error(error) { const error = (error: JQuery.jqXHR): void => {
assert(electron_bridge !== undefined);
electron_bridge.send_event("send_notification_reply_message_failed", { electron_bridge.send_event("send_notification_reply_message_failed", {
data, data,
message_id, message_id,
error, error,
}); });
} };
channel.post({ channel.post({
url: "/json/messages", url: "/json/messages",
@@ -77,14 +83,20 @@ export function initialize() {
channel.get({ channel.get({
url, url,
success(data) { success(raw_data) {
const data = z
.object({result: z.literal("success"), billing_access_url: z.string()})
.parse(raw_data);
window.open(data.billing_access_url, "_blank", "noopener,noreferrer"); window.open(data.billing_access_url, "_blank", "noopener,noreferrer");
}, },
error(xhr) { error(xhr) {
if (xhr.responseJSON?.msg) { const parsed = z
.object({result: z.literal("error"), msg: z.string()})
.safeParse(xhr.responseJSON);
if (parsed.success) {
feedback_widget.show({ feedback_widget.show({
populate($container) { populate($container) {
$container.text(xhr.responseJSON.msg); $container.text(parsed.data.msg);
}, },
title_text: $t({defaultMessage: "Error"}), title_text: $t({defaultMessage: "Error"}),
}); });

View File

@@ -23,7 +23,7 @@ export type ElectronBridge = {
) => void) & ) => void) &
(( ((
eventName: "send_notification_reply_message", eventName: "send_notification_reply_message",
listener: (message_id: unknown, reply: unknown) => void, listener: (message_id: number, reply: string) => void,
) => void); ) => void);
new_notification?: ( new_notification?: (
title: string, title: string,

View File

@@ -35,7 +35,7 @@ import * as compose_tooltips from "./compose_tooltips.ts";
import * as composebox_typeahead from "./composebox_typeahead.ts"; import * as composebox_typeahead from "./composebox_typeahead.ts";
import * as condense from "./condense.ts"; import * as condense from "./condense.ts";
import * as copy_and_paste from "./copy_and_paste.ts"; import * as copy_and_paste from "./copy_and_paste.ts";
import * as desktop_integration from "./desktop_integration.js"; import * as desktop_integration from "./desktop_integration.ts";
import * as desktop_notifications from "./desktop_notifications.ts"; import * as desktop_notifications from "./desktop_notifications.ts";
import * as drafts from "./drafts.ts"; import * as drafts from "./drafts.ts";
import * as drafts_overlay_ui from "./drafts_overlay_ui.js"; import * as drafts_overlay_ui from "./drafts_overlay_ui.js";