hotkey: Focus visible input filter field on query streams hotkey.

Earlier, if pm_list or stream_list was zoomed in and hitting `q`
hotkey would seemingly do nothing but in the background would add
highlighted class to `stream_row` and toggle stream-list-filter.

This commit fixes this behaviour by bringing focus to currently
visible input filter field.
This commit is contained in:
Pratik Chanda
2025-01-31 17:39:49 +05:30
committed by Tim Abbott
parent c071d952e1
commit 2a26f34983
4 changed files with 28 additions and 2 deletions

View File

@@ -1007,7 +1007,13 @@ export function process_hotkey(e, hotkey) {
);
return true;
case "query_streams":
if (pm_list.is_zoomed_in()) {
pm_list.focus_pm_search_filter();
} else if (stream_list.is_zoomed_in()) {
topic_list.focus_topic_search_filter();
} else {
stream_list.initiate_search();
}
return true;
case "query_users":
activity_ui.initiate_search();

View File

@@ -7,8 +7,10 @@ import {localstorage} from "./localstorage.ts";
import * as pm_list_data from "./pm_list_data.ts";
import * as pm_list_dom from "./pm_list_dom.ts";
import type {PMNode} from "./pm_list_dom.ts";
import * as popovers from "./popovers.ts";
import * as resize from "./resize.ts";
import * as scroll_util from "./scroll_util.ts";
import * as sidebar_ui from "./sidebar_ui.ts";
import * as ui_util from "./ui_util.ts";
import type {FullUnreadCountsData} from "./unread.ts";
import * as vdom from "./vdom.ts";
@@ -31,6 +33,13 @@ export function is_zoomed_in(): boolean {
return zoomed;
}
export function focus_pm_search_filter(): void {
popovers.hide_all();
sidebar_ui.show_left_sidebar();
const $filter = $(".direct-messages-list-filter").expectOne();
$filter.trigger("focus");
}
function get_private_messages_section_header(): JQuery {
return $("#direct-messages-section-header");
}

View File

@@ -8,7 +8,9 @@ import render_topic_list_item from "../templates/topic_list_item.hbs";
import * as blueslip from "./blueslip.ts";
import * as popover_menus from "./popover_menus.ts";
import * as popovers from "./popovers.ts";
import * as scroll_util from "./scroll_util.ts";
import * as sidebar_ui from "./sidebar_ui.ts";
import * as stream_topic_history from "./stream_topic_history.ts";
import * as stream_topic_history_util from "./stream_topic_history_util.ts";
import * as topic_list_data from "./topic_list_data.ts";
@@ -44,6 +46,13 @@ export function clear(): void {
active_widgets.clear();
}
export function focus_topic_search_filter(): void {
popovers.hide_all();
sidebar_ui.show_left_sidebar();
const $filter = $("#filter-topic-input").expectOne();
$filter.trigger("focus");
}
export function close(): void {
zoomed = false;
clear();

View File

@@ -83,7 +83,9 @@ const reactions = mock_esm("../src/reactions");
const read_receipts = mock_esm("../src/read_receipts");
const search = mock_esm("../src/search");
const settings_data = mock_esm("../src/settings_data");
const stream_list = mock_esm("../src/stream_list");
const stream_list = mock_esm("../src/stream_list", {
is_zoomed_in: () => false,
});
const stream_popover = mock_esm("../src/stream_popover");
const stream_settings_ui = mock_esm("../src/stream_settings_ui");