From 8c06712ab7d30dcafb6744ad7b51c159f7a51bff Mon Sep 17 00:00:00 2001 From: Bram Kragten Date: Wed, 26 Apr 2023 12:10:17 +0200 Subject: [PATCH] Allow to select a pipeline in voice command dialog (#16291) --- src/components/ha-button.ts | 3 + .../ha-voice-command-dialog.ts | 135 +++++++++++++++++- src/translations/en.json | 3 +- 3 files changed, 133 insertions(+), 8 deletions(-) diff --git a/src/components/ha-button.ts b/src/components/ha-button.ts index 318fe8c483..959f679431 100644 --- a/src/components/ha-button.ts +++ b/src/components/ha-button.ts @@ -13,6 +13,9 @@ export class HaButton extends Button { margin-inline-end: 8px; direction: var(--direction); } + .mdc-button { + height: var(--button-height, 36px); + } `, ]; } diff --git a/src/dialogs/voice-command-dialog/ha-voice-command-dialog.ts b/src/dialogs/voice-command-dialog/ha-voice-command-dialog.ts index b70541d337..ae97087550 100644 --- a/src/dialogs/voice-command-dialog/ha-voice-command-dialog.ts +++ b/src/dialogs/voice-command-dialog/ha-voice-command-dialog.ts @@ -1,9 +1,11 @@ import "@material/mwc-button/mwc-button"; import { + mdiChevronDown, mdiClose, mdiHelpCircleOutline, mdiMicrophone, mdiSend, + mdiStar, } from "@mdi/js"; import { css, @@ -16,14 +18,19 @@ import { import { customElement, property, query, state } from "lit/decorators"; import { LocalStorage } from "../../common/decorators/local-storage"; import { fireEvent } from "../../common/dom/fire_event"; +import { stopPropagation } from "../../common/dom/stop_propagation"; +import "../../components/ha-button"; +import "../../components/ha-button-menu"; import "../../components/ha-dialog"; import "../../components/ha-header-bar"; import "../../components/ha-icon-button"; +import "../../components/ha-list-item"; import "../../components/ha-textfield"; import type { HaTextField } from "../../components/ha-textfield"; import { AssistPipeline, getAssistPipeline, + listAssistPipelines, runAssistPipeline, } from "../../data/assist_pipeline"; import { AgentInfo, getAgentInfo } from "../../data/conversation"; @@ -55,6 +62,10 @@ export class HaVoiceCommandDialog extends LitElement { @state() private _showSendButton = false; + @state() private _pipelines?: AssistPipeline[]; + + @state() private _preferredPipeline?: string; + @query("#scroll-container") private _scrollContainer!: HTMLDivElement; @query("#message-input") private _messageInput!: HaTextField; @@ -84,6 +95,7 @@ export class HaVoiceCommandDialog extends LitElement { public async closeDialog(): Promise { this._opened = false; this._pipeline = undefined; + this._pipelines = undefined; this._agentInfo = undefined; this._conversation = undefined; this._conversationId = null; @@ -107,15 +119,56 @@ export class HaVoiceCommandDialog extends LitElement { >
- - ${this.hass.localize("ui.dialogs.voice_command.title")} - +
+ ${this.hass.localize("ui.dialogs.voice_command.title")} + + + ${this._pipeline?.name} + + + ${this._pipelines?.map( + (pipeline) => html` + ${pipeline.name}${pipeline.id === this._preferredPipeline + ? html`` + : nothing} + ` + )} + ${this.hass.user?.is_admin + ? html`
  • + ${this.hass.localize( + "ui.dialogs.voice_command.manage_assistants" + )}` + : nothing} +
    +