From b1fb5d9417f5cce6ad9e01a3b02a29834bb1331d Mon Sep 17 00:00:00 2001 From: StumblingGamer <33354711+StumblingGamer@users.noreply.github.com> Date: Mon, 22 Jun 2026 11:03:23 -0400 Subject: [PATCH] Preserve tap action data for numeric picker actions Pass tap_action.data into numeric menu items and merge it with the selected picker value before calling the Home Assistant service. --- source/HomeAssistantMenuItemFactory.mc | 8 ++++++-- source/HomeAssistantNumericMenuItem.mc | 19 ++++++++++++++----- source/HomeAssistantView.mc | 1 + 3 files changed, 21 insertions(+), 7 deletions(-) diff --git a/source/HomeAssistantMenuItemFactory.mc b/source/HomeAssistantMenuItemFactory.mc index 6ee8ba6..5060c5c 100644 --- a/source/HomeAssistantMenuItemFactory.mc +++ b/source/HomeAssistantMenuItemFactory.mc @@ -163,6 +163,7 @@ class HomeAssistantMenuItemFactory { entity_id as Lang.String?, template as Lang.String?, action as Lang.String?, + data as Lang.Dictionary?, picker as Lang.Dictionary, options as { :exit as Lang.Boolean, @@ -171,9 +172,12 @@ class HomeAssistantMenuItemFactory { :icon as WatchUi.Bitmap } ) as WatchUi.MenuItem { - var data = null; if (entity_id != null) { - data = { "entity_id" => entity_id }; + if (data == null) { + data = { "entity_id" => entity_id }; + } else { + data["entity_id"] = entity_id; + } } var keys = mMenuItemOptions.keys(); for (var i = 0; i < keys.size(); i++) { diff --git a/source/HomeAssistantNumericMenuItem.mc b/source/HomeAssistantNumericMenuItem.mc index 0fcaa25..0f22fca 100644 --- a/source/HomeAssistantNumericMenuItem.mc +++ b/source/HomeAssistantNumericMenuItem.mc @@ -155,7 +155,10 @@ class HomeAssistantNumericMenuItem extends HomeAssistantMenuItem { // function onConfirm(b as Lang.Boolean) as Void { var dataAttribute = mPicker["data_attribute"] as Lang.String?; - var entity_id = mData["entity_id"] as Lang.String?; + var entity_id = null as Lang.String?; + if (mData != null) { + entity_id = mData["entity_id"] as Lang.String?; + } WatchUi.popView(WatchUi.SLIDE_RIGHT); WatchUi.requestUpdate(); @@ -164,12 +167,18 @@ class HomeAssistantNumericMenuItem extends HomeAssistantMenuItem { return; } if (mAction != null) { + var data = {} as Lang.Dictionary; + if (mData != null) { + var keys = mData.keys(); + for (var i = 0; i < keys.size(); i++) { + data[keys[i]] = mData[keys[i]]; + } + } + data["entity_id"] = entity_id.toString(); + data[dataAttribute.toString()] = mValue; mHomeAssistantService.call( mAction, - { - "entity_id" => entity_id.toString(), - dataAttribute.toString() => mValue - }, + data, mExit ); } diff --git a/source/HomeAssistantView.mc b/source/HomeAssistantView.mc index 0d86b9a..60c8cff 100644 --- a/source/HomeAssistantView.mc +++ b/source/HomeAssistantView.mc @@ -141,6 +141,7 @@ class HomeAssistantView extends WatchUi.Menu2 { entity, content, action, + data, picker, { :exit => exit,