From 42622fe21e3ea8aa9bf1635315033963cb048096 Mon Sep 17 00:00:00 2001 From: Bram Kragten Date: Tue, 19 Nov 2024 15:35:44 +0100 Subject: [PATCH] Hide wake word in pipeline settings (#22879) * hide wake word in pipeline settings * move logic to pipeline-editor --- .../assist-pipeline-detail-wakeword.ts | 30 +++---------- .../dialog-voice-assistant-pipeline-detail.ts | 44 ++++++++++++++++++- src/translations/en.json | 8 ++-- 3 files changed, 52 insertions(+), 30 deletions(-) diff --git a/src/panels/config/voice-assistants/assist-pipeline-detail/assist-pipeline-detail-wakeword.ts b/src/panels/config/voice-assistants/assist-pipeline-detail/assist-pipeline-detail-wakeword.ts index 75e94ea3a5..d151abba21 100644 --- a/src/panels/config/voice-assistants/assist-pipeline-detail/assist-pipeline-detail-wakeword.ts +++ b/src/panels/config/voice-assistants/assist-pipeline-detail/assist-pipeline-detail-wakeword.ts @@ -1,5 +1,5 @@ import type { CSSResultGroup, PropertyValues } from "lit"; -import { css, html, LitElement, nothing } from "lit"; +import { css, html, LitElement } from "lit"; import { customElement, property, state } from "lit/decorators"; import memoizeOne from "memoize-one"; import type { LocalizeKeys } from "../../../../common/translations/localize"; @@ -8,7 +8,6 @@ import type { AssistPipeline } from "../../../../data/assist_pipeline"; import type { HomeAssistant } from "../../../../types"; import type { WakeWord } from "../../../../data/wake_word"; import { fetchWakeWordInfo } from "../../../../data/wake_word"; -import { documentationUrl } from "../../../../util/documentation-url"; import { fireEvent } from "../../../../common/dom/fire_event"; @customElement("assist-pipeline-detail-wakeword") @@ -79,12 +78,7 @@ export class AssistPipelineDetailWakeWord extends LitElement { } } - private _hasWakeWorkEntities = memoizeOne((states: HomeAssistant["states"]) => - Object.keys(states).some((entityId) => entityId.startsWith("wake_word.")) - ); - protected render() { - const hasWakeWorkEntities = this._hasWakeWorkEntities(this.hass.states); return html`
@@ -99,29 +93,17 @@ export class AssistPipelineDetailWakeWord extends LitElement { `ui.panel.config.voice_assistants.assistants.pipeline.detail.steps.wakeword.description` )}

+ + ${this.hass.localize( + `ui.panel.config.voice_assistants.assistants.pipeline.detail.steps.wakeword.note` + )} +
- ${!hasWakeWorkEntities - ? html`${this.hass.localize( - `ui.panel.config.voice_assistants.assistants.pipeline.detail.steps.wakeword.no_wake_words` - )} - ${this.hass.localize( - `ui.panel.config.voice_assistants.assistants.pipeline.detail.steps.wakeword.no_wake_words_link` - )}` - : nothing}
diff --git a/src/panels/config/voice-assistants/dialog-voice-assistant-pipeline-detail.ts b/src/panels/config/voice-assistants/dialog-voice-assistant-pipeline-detail.ts index 3cd566abf7..3404dd91ee 100644 --- a/src/panels/config/voice-assistants/dialog-voice-assistant-pipeline-detail.ts +++ b/src/panels/config/voice-assistants/dialog-voice-assistant-pipeline-detail.ts @@ -1,7 +1,8 @@ -import { mdiClose } from "@mdi/js"; +import { mdiClose, mdiDotsVertical } from "@mdi/js"; import type { CSSResultGroup } from "lit"; import { css, html, LitElement, nothing } from "lit"; import { customElement, property, state } from "lit/decorators"; +import memoizeOne from "memoize-one"; import { fireEvent } from "../../../common/dom/fire_event"; import "../../../components/ha-button"; import "../../../components/ha-dialog-header"; @@ -21,6 +22,7 @@ import "./assist-pipeline-detail/assist-pipeline-detail-wakeword"; import "./debug/assist-render-pipeline-events"; import type { VoiceAssistantPipelineDetailsDialogParams } from "./show-dialog-voice-assistant-pipeline-detail"; import { computeDomain } from "../../../common/entity/compute_domain"; +import { stopPropagation } from "../../../common/dom/stop_propagation"; @customElement("dialog-voice-assistant-pipeline-detail") export class DialogVoiceAssistantPipelineDetail extends LitElement { @@ -30,6 +32,8 @@ export class DialogVoiceAssistantPipelineDetail extends LitElement { @state() private _data?: Partial; + @state() private _hideWakeWord = false; + @state() private _cloudActive?: boolean; @state() private _error?: Record; @@ -42,11 +46,17 @@ export class DialogVoiceAssistantPipelineDetail extends LitElement { this._params = params; this._error = undefined; this._cloudActive = this._params.cloudActiveSubscription; + if (this._params.pipeline) { this._data = this._params.pipeline; + + this._hideWakeWord = + this._params.hideWakeWord || !this._data.wake_word_entity; return; } + this._hideWakeWord = true; + let sstDefault: string | undefined; let ttsDefault: string | undefined; if (this._cloudActive) { @@ -79,6 +89,7 @@ export class DialogVoiceAssistantPipelineDetail extends LitElement { public closeDialog(): void { this._params = undefined; this._data = undefined; + this._hideWakeWord = false; fireEvent(this, "dialog-closed", { dialog: this.localName }); } @@ -91,6 +102,10 @@ export class DialogVoiceAssistantPipelineDetail extends LitElement { this._supportedLanguages = languages; } + private _hasWakeWorkEntities = memoizeOne((states: HomeAssistant["states"]) => + Object.keys(states).some((entityId) => entityId.startsWith("wake_word.")) + ); + protected render() { if (!this._params || !this._data) { return nothing; @@ -118,6 +133,27 @@ export class DialogVoiceAssistantPipelineDetail extends LitElement { .path=${mdiClose} > ${title} + ${!this._hideWakeWord || + this._params.hideWakeWord || + !this._hasWakeWorkEntities(this.hass.states) + ? nothing + : html` + + + ${this.hass.localize( + "ui.panel.config.voice_assistants.assistants.pipeline.detail.add_streaming_wake_word" + )} + `}
${this._error @@ -171,7 +207,7 @@ export class DialogVoiceAssistantPipelineDetail extends LitElement { keys="tts_engine,tts_language,tts_voice" @value-changed=${this._valueChanged} > - ${this._params.hideWakeWord + ${this._hideWakeWord ? nothing : html`