From 228b75ae835f6b27148579e5fcd397a08997b69b Mon Sep 17 00:00:00 2001 From: Paul Bottein Date: Mon, 10 Jul 2023 13:33:50 +0200 Subject: [PATCH] Simplify script/automation action description with nested conditions/triggers (#17252) --- src/data/script_i18n.ts | 82 +++++++++------------------------------- src/translations/en.json | 9 +++-- 2 files changed, 23 insertions(+), 68 deletions(-) diff --git a/src/data/script_i18n.ts b/src/data/script_i18n.ts index 3cd8a36818..c6d4122b00 100644 --- a/src/data/script_i18n.ts +++ b/src/data/script_i18n.ts @@ -1,17 +1,18 @@ +import { ensureArray } from "../common/array/ensure-array"; import { formatDuration } from "../common/datetime/format_duration"; import secondsToDuration from "../common/datetime/seconds_to_duration"; -import { ensureArray } from "../common/array/ensure-array"; import { computeStateName } from "../common/entity/compute_state_name"; +import { formatListWithAnds } from "../common/string/format-list"; import { isTemplate } from "../common/string/has-template"; import { HomeAssistant } from "../types"; import { Condition } from "./automation"; -import { describeCondition, describeTrigger } from "./automation_i18n"; +import { describeCondition } from "./automation_i18n"; import { localizeDeviceAutomationAction } from "./device_automation"; import { computeDeviceName } from "./device_registry"; import { + EntityRegistryEntry, computeEntityRegistryName, entityRegistryById, - EntityRegistryEntry, } from "./entity_registry"; import { domainToName } from "./integration"; import { @@ -21,7 +22,6 @@ import { DelayAction, DeviceAction, EventAction, - getActionType, IfAction, ParallelAction, PlayMediaAction, @@ -30,8 +30,8 @@ import { StopAction, VariablesAction, WaitForTriggerAction, + getActionType, } from "./script"; -import { formatListWithAnds } from "../common/string/format-list"; const actionTranslationBaseKey = "ui.panel.config.automation.editor.actions.type"; @@ -273,12 +273,9 @@ const tryDescribeAction = ( `${actionTranslationBaseKey}.wait_for_trigger.description.wait_for_a_trigger` ); } - const triggerNames = triggers.map((trigger) => - describeTrigger(trigger, hass, entityRegistry) - ); return hass.localize( - `${actionTranslationBaseKey}.wait_for_trigger.description.wait_for_triggers_with_name`, - { triggers: formatListWithAnds(hass.locale, triggerNames) } + `${actionTranslationBaseKey}.wait_for_trigger.description.wait_for_triggers`, + { count: triggers.length } ); } @@ -326,52 +323,13 @@ const tryDescribeAction = ( if (actionType === "if") { const config = action as IfAction; - let ifConditions: string[] = []; - if (Array.isArray(config.if)) { - const conditions = ensureArray(config.if); - conditions.forEach((condition) => { - ifConditions.push(describeCondition(condition, hass, entityRegistry)); - }); - } else { - ifConditions = [config.if]; + if (config.else !== undefined) { + return hass.localize( + `${actionTranslationBaseKey}.if.description.if_else` + ); } - let elseActions: string[] = []; - if (config.else) { - if (Array.isArray(config.else)) { - const actions = ensureArray(config.else); - actions.forEach((currentAction) => { - elseActions.push( - describeAction(hass, entityRegistry, currentAction, undefined) - ); - }); - } else { - elseActions = [ - describeAction(hass, entityRegistry, config.else, undefined), - ]; - } - } - - let thenActions: string[] = []; - if (Array.isArray(config.then)) { - const actions = ensureArray(config.then); - actions.forEach((currentAction) => { - thenActions.push( - describeAction(hass, entityRegistry, currentAction, undefined) - ); - }); - } else { - thenActions = [ - describeAction(hass, entityRegistry, config.then, undefined), - ]; - } - - return hass.localize(`${actionTranslationBaseKey}.if.description.full`, { - hasElse: config.else !== undefined, - action: formatListWithAnds(hass.locale, thenActions), - conditions: formatListWithAnds(hass.locale, ifConditions), - elseAction: formatListWithAnds(hass.locale, elseActions), - }); + return hass.localize(`${actionTranslationBaseKey}.if.description.if`); } if (actionType === "choose") { @@ -400,20 +358,16 @@ const tryDescribeAction = ( { count: count } ); } else if ("while" in config.repeat) { - const conditions = ensureArray(config.repeat.while).map((condition) => - describeCondition(condition, hass, entityRegistry) - ); + const conditions = ensureArray(config.repeat.while); chosenAction = hass.localize( - `${actionTranslationBaseKey}.repeat.description.while`, - { conditions: formatListWithAnds(hass.locale, conditions) } + `${actionTranslationBaseKey}.repeat.description.while_count`, + { count: conditions.length } ); } else if ("until" in config.repeat) { - const conditions = ensureArray(config.repeat.until).map((condition) => - describeCondition(condition, hass, entityRegistry) - ); + const conditions = ensureArray(config.repeat.until); chosenAction = hass.localize( - `${actionTranslationBaseKey}.repeat.description.until`, - { conditions: formatListWithAnds(hass.locale, conditions) } + `${actionTranslationBaseKey}.repeat.description.until_count`, + { count: conditions.length } ); } else if ("for_each" in config.repeat) { const items = ensureArray(config.repeat.for_each).map((item) => diff --git a/src/translations/en.json b/src/translations/en.json index 44bf822d05..05ff2b775e 100644 --- a/src/translations/en.json +++ b/src/translations/en.json @@ -2621,7 +2621,7 @@ "continue_timeout": "[%key:ui::panel::config::automation::editor::actions::type::wait_template::continue_timeout%]", "description": { "wait_for_a_trigger": "Wait for a trigger", - "wait_for_triggers_with_name": "Wait for ''{triggers}''" + "wait_for_triggers": "Wait for {count} {count, plural,\n one {trigger}\n other {triggers}\n}" } }, "condition": { @@ -2679,8 +2679,8 @@ "description": { "full": "Repeat an action {chosenAction}", "count": "{count} {count, plural,\n one {time}\n other {times}\n}", - "while": "while ''{conditions}'' is true", - "until": "until ''{conditions}'' is true", + "while_count": "while {count} {count, plural,\n one {condition matches}\n other {conditions match}\n} ", + "until_count": "until {count} {count, plural,\n one {condition matches}\n other {conditions match}\n} ", "for_each": "for every item: {items}" } }, @@ -2705,7 +2705,8 @@ "else": "Else", "add_else": "Add else", "description": { - "full": "Perform ''{action}'' if ''{conditions}''{hasElse, select, \n true { otherwise ''{elseAction}''} \n other {}\n } " + "if": "Conditionally execute an action", + "if_else": "Conditionally execute an action and default to another action" } }, "stop": {