mirror of
https://github.com/home-assistant/frontend.git
synced 2025-07-24 09:46:36 +00:00
fix add assist dialog (#16275)
This commit is contained in:
parent
9dbdf611c5
commit
cef3b99e16
@ -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 };
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
);
|
||||
|
@ -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>
|
||||
|
@ -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 {
|
||||
|
@ -59,7 +59,7 @@ export interface AgentInfo {
|
||||
export interface Agent {
|
||||
id: string;
|
||||
name: string;
|
||||
supported_languages?: string[];
|
||||
supported_languages: "*" | string[];
|
||||
}
|
||||
|
||||
export const processConversationInput = (
|
||||
|
@ -215,6 +215,7 @@ export interface LanguageSelector {
|
||||
language: {
|
||||
languages?: string[];
|
||||
native_name?: boolean;
|
||||
no_sort?: boolean;
|
||||
} | null;
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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" },
|
||||
|
@ -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" },
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user