diff --git a/src/dialogs/quick-bar/ha-quick-bar.ts b/src/dialogs/quick-bar/ha-quick-bar.ts index 80d9c5ccc4..29eea8ed36 100644 --- a/src/dialogs/quick-bar/ha-quick-bar.ts +++ b/src/dialogs/quick-bar/ha-quick-bar.ts @@ -45,9 +45,8 @@ import { navigate } from "../../common/navigate"; import { configSections } from "../../panels/config/ha-panel-config"; import { PageNavigation } from "../../layouts/hass-tabs-subpage"; import { canShowPage } from "../../common/config/can_show_page"; -import { getPanelIcon, getPanelNameTranslationKey } from "../../data/panel"; +import { getPanelNameTranslationKey } from "../../data/panel"; -const DEFAULT_NAVIGATION_ICON = "hass:arrow-right-circle"; const DEFAULT_SERVER_ICON = "hass:server"; interface QuickBarItem extends ScorableTextItem { @@ -57,7 +56,7 @@ interface QuickBarItem extends ScorableTextItem { action(data?: any): void; } -interface CommandItem extends QuickBarItem { +export interface CommandItem extends QuickBarItem { categoryKey: "reload" | "navigation" | "server_control"; categoryText: string; } @@ -96,6 +95,8 @@ export class QuickBar extends LitElement { @internalProperty() private _commandMode = false; + @internalProperty() private _commandType?: CommandItem["categoryKey"]; + @internalProperty() private _done = false; @query("search-input", false) private _filterInputField?: HTMLElement; @@ -104,6 +105,10 @@ export class QuickBar extends LitElement { public async showDialog(params: QuickBarParams) { this._commandMode = params.commandMode || this._toggleIfAlreadyOpened(); + this._commandType = params.commandType; + this._search = this._commandType + ? `${this._getCommandCategoryLabel(this._commandType).toLowerCase()} ` + : ""; this._initializeItemsIfNeeded(); this._opened = true; } @@ -385,9 +390,8 @@ export class QuickBar extends LitElement { const reloadableDomains = componentsWithService(this.hass, "reload").sort(); return reloadableDomains.map((domain) => { - const categoryText = this.hass.localize( - `ui.dialogs.quick-bar.commands.types.reload` - ); + const categoryKey = "reload"; + const categoryText = this._getCommandCategoryLabel(categoryKey); const primaryText = this.hass.localize(`ui.dialogs.quick-bar.commands.reload.${domain}`) || this.hass.localize( @@ -401,7 +405,7 @@ export class QuickBar extends LitElement { filterText: `${categoryText} ${primaryText}`, icon: domainIcon(domain), action: () => this.hass.callService(domain, "reload"), - categoryKey: "reload", + categoryKey, categoryText, }; }); @@ -412,9 +416,7 @@ export class QuickBar extends LitElement { return serverActions.map((action) => { const categoryKey = "server_control"; - const categoryText = this.hass.localize( - `ui.dialogs.quick-bar.commands.types.${categoryKey}` - ); + const categoryText = this._getCommandCategoryLabel(categoryKey); const primaryText = this.hass.localize( "ui.dialogs.quick-bar.commands.server_control.perform_action", "action", @@ -512,9 +514,7 @@ export class QuickBar extends LitElement { ): CommandItem[] { return items.map((item) => { const categoryKey = "navigation"; - const categoryText = this.hass.localize( - `ui.dialogs.quick-bar.commands.types.${categoryKey}` - ); + const categoryText = this._getCommandCategoryLabel(categoryKey); return { ...item, @@ -542,6 +542,10 @@ export class QuickBar extends LitElement { fuzzyFilterSort(filter.trimLeft(), items) ); + private _getCommandCategoryLabel = ( + categoryKey: CommandItem["categoryKey"] + ) => this.hass.localize(`ui.dialogs.quick-bar.commands.types.${categoryKey}`); + static get styles() { return [ haStyleDialog, diff --git a/src/dialogs/quick-bar/show-dialog-quick-bar.ts b/src/dialogs/quick-bar/show-dialog-quick-bar.ts index b003af2cfa..d9acdcd6be 100644 --- a/src/dialogs/quick-bar/show-dialog-quick-bar.ts +++ b/src/dialogs/quick-bar/show-dialog-quick-bar.ts @@ -1,8 +1,10 @@ import { fireEvent } from "../../common/dom/fire_event"; +import { CommandItem } from "./ha-quick-bar"; export interface QuickBarParams { entityFilter?: string; commandMode?: boolean; + commandType?: CommandItem["categoryKey"]; } export const loadQuickBar = () => diff --git a/src/state/quick-bar-mixin.ts b/src/state/quick-bar-mixin.ts index ceac362aa1..72267bfcff 100644 --- a/src/state/quick-bar-mixin.ts +++ b/src/state/quick-bar-mixin.ts @@ -7,6 +7,7 @@ import { } from "../dialogs/quick-bar/show-dialog-quick-bar"; import { HomeAssistant } from "../types"; import { storeState } from "../util/ha-pref-storage"; +import { CommandItem } from "../dialogs/quick-bar/ha-quick-bar"; declare global { interface HASSDomEvents { @@ -32,15 +33,22 @@ export default >(superClass: T) => tinykeys(window, { e: (ev) => this._showQuickBar(ev), c: (ev) => this._showQuickBar(ev, true), + g: (ev) => this._showQuickBar(ev, true, "navigation"), + r: (ev) => this._showQuickBar(ev, true, "reload"), + s: (ev) => this._showQuickBar(ev, true, "server_control"), }); } - private _showQuickBar(e: KeyboardEvent, commandMode = false) { + private _showQuickBar( + e: KeyboardEvent, + commandMode = false, + commandType?: CommandItem["categoryKey"] + ) { if (!this._canShowQuickBar(e)) { return; } - showQuickBar(this, { commandMode }); + showQuickBar(this, { commandMode, commandType }); } private _canShowQuickBar(e: KeyboardEvent) {