mirror of
https://github.com/home-assistant/frontend.git
synced 2025-07-27 11:16:35 +00:00
Add run action to dropdown (#11817)
This commit is contained in:
parent
bad184210d
commit
be491451d5
@ -1,8 +1,13 @@
|
|||||||
import { HomeAssistant } from "../types";
|
import { HomeAssistant } from "../types";
|
||||||
|
|
||||||
interface ValidationResult {
|
interface ValidConfig {
|
||||||
valid: boolean;
|
valid: true;
|
||||||
error: string | null;
|
error: null;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface InvalidConfig {
|
||||||
|
valid: false;
|
||||||
|
error: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
type ValidKeys = "trigger" | "action" | "condition";
|
type ValidKeys = "trigger" | "action" | "condition";
|
||||||
@ -12,7 +17,7 @@ export const validateConfig = <
|
|||||||
>(
|
>(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
config: T
|
config: T
|
||||||
): Promise<Record<keyof T, ValidationResult>> =>
|
): Promise<Record<keyof T, ValidConfig | InvalidConfig>> =>
|
||||||
hass.callWS({
|
hass.callWS({
|
||||||
type: "validate_config",
|
type: "validate_config",
|
||||||
...config,
|
...config,
|
||||||
|
@ -1,7 +1,10 @@
|
|||||||
import { HomeAssistant } from "../types";
|
import { HomeAssistant } from "../types";
|
||||||
import { Action } from "./script";
|
import { Action } from "./script";
|
||||||
|
|
||||||
export const callExecuteScript = (hass: HomeAssistant, sequence: Action[]) =>
|
export const callExecuteScript = (
|
||||||
|
hass: HomeAssistant,
|
||||||
|
sequence: Action | Action[]
|
||||||
|
) =>
|
||||||
hass.callWS({
|
hass.callWS({
|
||||||
type: "execute_script",
|
type: "execute_script",
|
||||||
sequence,
|
sequence,
|
||||||
|
@ -16,10 +16,16 @@ import "../../../../components/ha-icon-button";
|
|||||||
import "../../../../components/ha-select";
|
import "../../../../components/ha-select";
|
||||||
import type { HaSelect } from "../../../../components/ha-select";
|
import type { HaSelect } from "../../../../components/ha-select";
|
||||||
import type { HaYamlEditor } from "../../../../components/ha-yaml-editor";
|
import type { HaYamlEditor } from "../../../../components/ha-yaml-editor";
|
||||||
|
import { validateConfig } from "../../../../data/config";
|
||||||
import { Action, getActionType } from "../../../../data/script";
|
import { Action, getActionType } from "../../../../data/script";
|
||||||
import { showConfirmationDialog } from "../../../../dialogs/generic/show-dialog-box";
|
import { callExecuteScript } from "../../../../data/service";
|
||||||
|
import {
|
||||||
|
showAlertDialog,
|
||||||
|
showConfirmationDialog,
|
||||||
|
} from "../../../../dialogs/generic/show-dialog-box";
|
||||||
import { haStyle } from "../../../../resources/styles";
|
import { haStyle } from "../../../../resources/styles";
|
||||||
import type { HomeAssistant } from "../../../../types";
|
import type { HomeAssistant } from "../../../../types";
|
||||||
|
import { showToast } from "../../../../util/toast";
|
||||||
import "./types/ha-automation-action-activate_scene";
|
import "./types/ha-automation-action-activate_scene";
|
||||||
import "./types/ha-automation-action-choose";
|
import "./types/ha-automation-action-choose";
|
||||||
import "./types/ha-automation-action-condition";
|
import "./types/ha-automation-action-condition";
|
||||||
@ -180,6 +186,11 @@ export default class HaAutomationActionRow extends LitElement {
|
|||||||
.label=${this.hass.localize("ui.common.menu")}
|
.label=${this.hass.localize("ui.common.menu")}
|
||||||
.path=${mdiDotsVertical}
|
.path=${mdiDotsVertical}
|
||||||
></ha-icon-button>
|
></ha-icon-button>
|
||||||
|
<mwc-list-item>
|
||||||
|
${this.hass.localize(
|
||||||
|
"ui.panel.config.automation.editor.actions.run_action"
|
||||||
|
)}
|
||||||
|
</mwc-list-item>
|
||||||
<mwc-list-item .disabled=${!this._uiModeAvailable}>
|
<mwc-list-item .disabled=${!this._uiModeAvailable}>
|
||||||
${yamlMode
|
${yamlMode
|
||||||
? this.hass.localize(
|
? this.hass.localize(
|
||||||
@ -290,17 +301,54 @@ export default class HaAutomationActionRow extends LitElement {
|
|||||||
private _handleAction(ev: CustomEvent<ActionDetail>) {
|
private _handleAction(ev: CustomEvent<ActionDetail>) {
|
||||||
switch (ev.detail.index) {
|
switch (ev.detail.index) {
|
||||||
case 0:
|
case 0:
|
||||||
this._switchYamlMode();
|
this._runAction();
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
fireEvent(this, "duplicate");
|
this._switchYamlMode();
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
|
fireEvent(this, "duplicate");
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
this._onDelete();
|
this._onDelete();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private async _runAction() {
|
||||||
|
const validated = await validateConfig(this.hass, {
|
||||||
|
action: this.action,
|
||||||
|
});
|
||||||
|
|
||||||
|
if (!validated.action.valid) {
|
||||||
|
showAlertDialog(this, {
|
||||||
|
title: this.hass.localize(
|
||||||
|
"ui.panel.config.automation.editor.actions.invalid_action"
|
||||||
|
),
|
||||||
|
text: validated.action.error,
|
||||||
|
});
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
await callExecuteScript(this.hass, this.action);
|
||||||
|
} catch (err: any) {
|
||||||
|
showAlertDialog(this, {
|
||||||
|
title: this.hass.localize(
|
||||||
|
"ui.panel.config.automation.editor.actions.run_action_error"
|
||||||
|
),
|
||||||
|
text: err.message || err,
|
||||||
|
});
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
showToast(this, {
|
||||||
|
message: this.hass.localize(
|
||||||
|
"ui.panel.config.automation.editor.actions.run_action_success"
|
||||||
|
),
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
private _onDelete() {
|
private _onDelete() {
|
||||||
showConfirmationDialog(this, {
|
showConfirmationDialog(this, {
|
||||||
text: this.hass.localize(
|
text: this.hass.localize(
|
||||||
|
@ -1826,6 +1826,10 @@
|
|||||||
"introduction": "The actions are what Home Assistant will do when the automation is triggered.",
|
"introduction": "The actions are what Home Assistant will do when the automation is triggered.",
|
||||||
"learn_more": "Learn more about actions",
|
"learn_more": "Learn more about actions",
|
||||||
"add": "Add action",
|
"add": "Add action",
|
||||||
|
"invalid_action": "Invalid action",
|
||||||
|
"run_action": "Run action",
|
||||||
|
"run_action_error": "Error running action",
|
||||||
|
"run_action_success": "Action run successfully",
|
||||||
"duplicate": "[%key:ui::panel::config::automation::editor::triggers::duplicate%]",
|
"duplicate": "[%key:ui::panel::config::automation::editor::triggers::duplicate%]",
|
||||||
"delete": "[%key:ui::panel::mailbox::delete_button%]",
|
"delete": "[%key:ui::panel::mailbox::delete_button%]",
|
||||||
"delete_confirm": "[%key:ui::panel::config::automation::editor::triggers::delete_confirm%]",
|
"delete_confirm": "[%key:ui::panel::config::automation::editor::triggers::delete_confirm%]",
|
||||||
|
Loading…
x
Reference in New Issue
Block a user