From 76f90e1449690832582d7feb1197afefa5f28913 Mon Sep 17 00:00:00 2001 From: karwosts <32912880+karwosts@users.noreply.github.com> Date: Mon, 20 Feb 2023 11:40:34 -0800 Subject: [PATCH] Fix errors in duration data processing in Automation UI Editor (#15422) Fix errors in duration data processing --- src/common/datetime/create_duration_data.ts | 12 ++++++++++-- .../condition/types/ha-automation-condition-state.ts | 3 ++- .../trigger/types/ha-automation-trigger-state.ts | 3 ++- 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/src/common/datetime/create_duration_data.ts b/src/common/datetime/create_duration_data.ts index 3b743471ca..d8e717b7e3 100644 --- a/src/common/datetime/create_duration_data.ts +++ b/src/common/datetime/create_duration_data.ts @@ -10,11 +10,19 @@ export const createDurationData = ( if (typeof duration !== "object") { if (typeof duration === "string" || isNaN(duration)) { const parts = duration?.toString().split(":") || []; + if (parts.length === 1) { + return { seconds: Number(parts[0]) }; + } + if (parts.length > 3) { + return undefined; + } + const seconds = Number(parts[2]) || 0; + const seconds_whole = Math.floor(seconds); return { hours: Number(parts[0]) || 0, minutes: Number(parts[1]) || 0, - seconds: Number(parts[2]) || 0, - milliseconds: Number(parts[3]) || 0, + seconds: seconds_whole, + milliseconds: Math.floor((seconds - seconds_whole) * 1000), }; } return { seconds: duration }; diff --git a/src/panels/config/automation/condition/types/ha-automation-condition-state.ts b/src/panels/config/automation/condition/types/ha-automation-condition-state.ts index 71b945562f..e61438ad3e 100644 --- a/src/panels/config/automation/condition/types/ha-automation-condition-state.ts +++ b/src/panels/config/automation/condition/types/ha-automation-condition-state.ts @@ -4,6 +4,7 @@ import { assert, boolean, literal, + number, object, optional, string, @@ -24,7 +25,7 @@ const stateConditionStruct = object({ entity_id: optional(string()), attribute: optional(string()), state: optional(string()), - for: optional(union([string(), forDictStruct])), + for: optional(union([number(), string(), forDictStruct])), enabled: optional(boolean()), }); diff --git a/src/panels/config/automation/trigger/types/ha-automation-trigger-state.ts b/src/panels/config/automation/trigger/types/ha-automation-trigger-state.ts index b17d3bfd71..2e6e67b18e 100644 --- a/src/panels/config/automation/trigger/types/ha-automation-trigger-state.ts +++ b/src/panels/config/automation/trigger/types/ha-automation-trigger-state.ts @@ -5,6 +5,7 @@ import { assert, assign, literal, + number, object, optional, string, @@ -31,7 +32,7 @@ const stateTriggerStruct = assign( attribute: optional(string()), from: optional(string()), to: optional(string()), - for: optional(union([string(), forDictStruct])), + for: optional(union([number(), string(), forDictStruct])), }) );