From 4a8d86f151a01ef5d9e63b6b6f5449ccf8211706 Mon Sep 17 00:00:00 2001 From: Aman Agrawal Date: Sat, 28 Jun 2025 02:45:51 +0530 Subject: [PATCH] overlays: Add overlay to display scheduled reminders. --- templates/zerver/app/index.html | 1 + tools/test-js-with-node | 1 + web/src/hash_parser.ts | 1 + web/src/hashchange.ts | 7 + web/src/hotkey.js | 10 ++ web/src/left_sidebar_navigation_area.ts | 13 ++ web/src/message_reminder.ts | 33 +++++ web/src/overlays.ts | 4 + web/src/reminders_overlay_ui.ts | 131 ++++++++++++++++++ web/src/server_events_dispatch.js | 20 +++ web/src/state_data.ts | 12 ++ web/src/ui_init.js | 4 + web/styles/left_sidebar.css | 2 + web/styles/scheduled_messages.css | 5 + web/templates/left_sidebar.hbs | 10 ++ web/templates/reminder_list.hbs | 27 ++++ web/templates/reminders_overlay.hbs | 17 +++ web/templates/tooltip_templates.hbs | 10 ++ web/tests/dispatch.test.cjs | 27 ++++ web/tests/hotkey.test.cjs | 1 + .../left_sidebar_navigation_area.test.cjs | 9 ++ web/tests/lib/events.cjs | 23 +++ 22 files changed, 368 insertions(+) create mode 100644 web/src/reminders_overlay_ui.ts create mode 100644 web/templates/reminder_list.hbs create mode 100644 web/templates/reminders_overlay.hbs diff --git a/templates/zerver/app/index.html b/templates/zerver/app/index.html index 00204cb694..a649ddbcdb 100644 --- a/templates/zerver/app/index.html +++ b/templates/zerver/app/index.html @@ -139,6 +139,7 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=1943053 -->
+
diff --git a/tools/test-js-with-node b/tools/test-js-with-node index 805b3a6c99..77eb6345df 100755 --- a/tools/test-js-with-node +++ b/tools/test-js-with-node @@ -193,6 +193,7 @@ EXEMPT_FILES = make_set( "web/src/recent_view_ui.ts", "web/src/reload.ts", "web/src/reload_setup.js", + "web/src/reminders_overlay_ui.ts", "web/src/resize.ts", "web/src/resize_handler.ts", "web/src/rows.ts", diff --git a/web/src/hash_parser.ts b/web/src/hash_parser.ts index 85e03f93eb..20cd38676b 100644 --- a/web/src/hash_parser.ts +++ b/web/src/hash_parser.ts @@ -66,6 +66,7 @@ export function is_overlay_hash(hash: string | undefined): boolean { "search-operators", "about-zulip", "scheduled", + "reminders", "user", ]; const main_hash = get_hash_category(hash); diff --git a/web/src/hashchange.ts b/web/src/hashchange.ts index 9eaccc2e29..f82404ab55 100644 --- a/web/src/hashchange.ts +++ b/web/src/hashchange.ts @@ -20,6 +20,7 @@ import {page_params} from "./page_params.ts"; import * as people from "./people.ts"; import * as popovers from "./popovers.ts"; import * as recent_view_ui from "./recent_view_ui.ts"; +import * as reminders_overlay_ui from "./reminders_overlay_ui.ts"; import * as scheduled_messages_overlay_ui from "./scheduled_messages_overlay_ui.ts"; import * as settings from "./settings.ts"; import * as settings_panel_menu from "./settings_panel_menu.ts"; @@ -260,6 +261,7 @@ function do_hashchange_normal(from_reload: boolean, restore_selected_id: boolean case "#settings": case "#about-zulip": case "#scheduled": + case "#reminders": blueslip.error("overlay logic skipped for: " + hash[0]); break; default: @@ -504,6 +506,11 @@ function do_hashchange_overlay(old_hash: string | undefined): void { return; } + if (base === "reminders") { + reminders_overlay_ui.launch(); + return; + } + if (base === "user") { const user_id = Number.parseInt(hash_parser.get_current_hash_section(), 10); if (!people.is_known_user_id(user_id)) { diff --git a/web/src/hotkey.js b/web/src/hotkey.js index d756e9a93a..3eda8c6d86 100644 --- a/web/src/hotkey.js +++ b/web/src/hotkey.js @@ -47,6 +47,7 @@ import * as reactions from "./reactions.ts"; import * as read_receipts from "./read_receipts.ts"; import * as recent_view_ui from "./recent_view_ui.ts"; import * as recent_view_util from "./recent_view_util.ts"; +import * as reminders_overlay_ui from "./reminders_overlay_ui.ts"; import * as scheduled_messages_overlay_ui from "./scheduled_messages_overlay_ui.ts"; import * as search from "./search.ts"; import {message_edit_history_visibility_policy_values} from "./settings_config.ts"; @@ -616,6 +617,11 @@ export function process_enter_key(e) { return true; } + if (overlays.reminders_open()) { + reminders_overlay_ui.handle_keyboard_events("enter"); + return true; + } + // Transfer the enter keypress from button to the `` tag inside // it since it is the trigger for the popover.