fix add assist dialog (#16275)

This commit is contained in:
Bram Kragten 2023-04-22 18:43:04 +02:00 committed by GitHub
parent 9dbdf611c5
commit cef3b99e16
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
10 changed files with 47 additions and 16 deletions

View File

@ -17,6 +17,7 @@ import "./ha-select";
import type { HaSelect } from "./ha-select";
const NONE = "__NONE_OPTION__";
@customElement("ha-conversation-agent-picker")
export class HaConversationAgentPicker extends LitElement {
@property() public value?: string;
@ -43,7 +44,7 @@ export class HaConversationAgentPicker extends LitElement {
(!this.language ||
this._agents
.find((agent) => agent.id === "homeassistant")
?.supported_languages?.includes(this.language))
?.supported_languages.includes(this.language))
? "homeassistant"
: NONE);
return html`
@ -71,7 +72,8 @@ export class HaConversationAgentPicker extends LitElement {
(agent) =>
html`<ha-list-item
.value=${agent.id}
.disabled=${agent.supported_languages?.length === 0}
.disabled=${agent.supported_languages !== "*" &&
agent.supported_languages.length === 0}
>
${agent.name}
</ha-list-item>`
@ -110,7 +112,11 @@ export class HaConversationAgentPicker extends LitElement {
value: selectedAgent?.supported_languages,
});
if (!selectedAgent || selectedAgent.supported_languages?.length === 0) {
if (
!selectedAgent ||
(selectedAgent.supported_languages !== "*" &&
selectedAgent.supported_languages.length === 0)
) {
this.value = undefined;
fireEvent(this, "value-changed", { value: this.value });
}
@ -148,6 +154,6 @@ declare global {
"ha-conversation-agent-picker": HaConversationAgentPicker;
}
interface HASSDomEvents {
"supported-languages-changed": { value: string[] | undefined };
"supported-languages-changed": { value: "*" | string[] | undefined };
}
}

View File

@ -27,6 +27,8 @@ export class HaLanguagePicker extends LitElement {
@property({ type: Boolean }) public nativeName = false;
@property({ type: Boolean }) public noSort = false;
@state() _defaultLanguages: string[] = [];
@query("ha-select") private _select!: HaSelect;
@ -77,9 +79,11 @@ export class HaLanguagePicker extends LitElement {
}));
}
options.sort((a, b) =>
caseInsensitiveStringCompare(a.label, b.label, locale.language)
);
if (!this.noSort) {
options.sort((a, b) =>
caseInsensitiveStringCompare(a.label, b.label, locale.language)
);
}
return options;
}
);

View File

@ -29,6 +29,7 @@ export class HaLanguageSelector extends LitElement {
.helper=${this.helper}
.languages=${this.selector.language?.languages}
.nativeName=${Boolean(this.selector?.language?.native_name)}
.noSort=${Boolean(this.selector?.language?.no_sort)}
.disabled=${this.disabled}
.required=${this.required}
></ha-language-picker>

View File

@ -6,7 +6,7 @@ import {
nothing,
PropertyValues,
} from "lit";
import { customElement, property, state } from "lit/decorators";
import { customElement, property, query, state } from "lit/decorators";
import { fireEvent } from "../common/dom/fire_event";
import { stopPropagation } from "../common/dom/stop_propagation";
import { debounce } from "../common/util/debounce";
@ -36,6 +36,8 @@ export class HaTTSVoicePicker extends LitElement {
@state() _voices?: TTSVoice[] | null;
@query("ha-select") private _select!: HaSelect;
protected render() {
if (!this._voices) {
return nothing;
@ -104,6 +106,14 @@ export class HaTTSVoicePicker extends LitElement {
}
}
protected updated(changedProperties: PropertyValues<this>) {
super.updated(changedProperties);
if (changedProperties.has("_voices") && this._select.value !== this.value) {
this._select.layoutOptions();
fireEvent(this, "value-changed", { value: this._select.value });
}
}
static get styles(): CSSResultGroup {
return css`
ha-select {

View File

@ -59,7 +59,7 @@ export interface AgentInfo {
export interface Agent {
id: string;
name: string;
supported_languages?: string[];
supported_languages: "*" | string[];
}
export const processConversationInput = (

View File

@ -215,6 +215,7 @@ export interface LanguageSelector {
language: {
languages?: string[];
native_name?: boolean;
no_sort?: boolean;
} | null;
}

View File

@ -5,6 +5,7 @@ import { LocalizeKeys } from "../../../../common/translations/localize";
import { AssistPipeline } from "../../../../data/assist_pipeline";
import { HomeAssistant } from "../../../../types";
import "../../../../components/ha-form/ha-form";
import { fireEvent } from "../../../../common/dom/fire_event";
@customElement("assist-pipeline-detail-conversation")
export class AssistPipelineDetailConversation extends LitElement {
@ -12,10 +13,10 @@ export class AssistPipelineDetailConversation extends LitElement {
@property() public data?: Partial<AssistPipeline>;
@state() private _supportedLanguages?: string[];
@state() private _supportedLanguages?: "*" | string[];
private _schema = memoizeOne(
(language?: string, supportedLanguages?: string[]) =>
(language?: string, supportedLanguages?: "*" | string[]) =>
[
{
name: "",
@ -30,12 +31,12 @@ export class AssistPipelineDetailConversation extends LitElement {
},
},
},
supportedLanguages?.length
supportedLanguages !== "*" && supportedLanguages?.length
? {
name: "conversation_language",
required: true,
selector: {
language: { languages: supportedLanguages },
language: { languages: supportedLanguages, no_sort: true },
},
}
: { name: "", type: "constant" },
@ -73,6 +74,14 @@ export class AssistPipelineDetailConversation extends LitElement {
}
private _supportedLanguagesChanged(ev) {
if (ev.detail.value === "*") {
// wait for update of conversation_engine
setTimeout(() => {
const value = { ...this.data };
value.conversation_language = "*";
fireEvent(this, "value-changed", { value });
}, 0);
}
this._supportedLanguages = ev.detail.value;
}

View File

@ -34,7 +34,7 @@ export class AssistPipelineDetailSTT extends LitElement {
name: "stt_language",
required: true,
selector: {
language: { languages: supportedLanguages },
language: { languages: supportedLanguages, no_sort: true },
},
}
: { name: "", type: "constant" },

View File

@ -34,7 +34,7 @@ export class AssistPipelineDetailTTS extends LitElement {
name: "tts_language",
required: true,
selector: {
language: { languages: supportedLanguages },
language: { languages: supportedLanguages, no_sort: true },
},
}
: { name: "", type: "constant" },

View File

@ -44,7 +44,7 @@ export class HaPickLanguageRow extends LitElement {
// Only fire event if language was changed. This prevents select updates when
// responding to hass changes.
if (ev.detail.value !== this.hass.language) {
fireEvent(this, "hass-language-select", ev.target.value);
fireEvent(this, "hass-language-select", ev.detail.value);
}
}