node-red-dashboard icon indicating copy to clipboard operation
node-red-dashboard copied to clipboard

msg.ui_update clears values in ´text´ node

Open Switchblade2 opened this issue 3 months ago • 1 comments

Current Behavior

If I send msg.payload and msg.ui_update in one msg to the text node then all is ok. But if I only send msg.ui_update, it first looks ok, but if the web-page is reloaded, then value in the text field is erased.

it was ok in 1.26.0 but not 1.27.0

Expected Behavior

The value should remain after reloading the webpage

Steps To Reproduce

Test flow: Click on A to set a value and colour. After Reloading webpage the value will remain (as expected) Click on B to change the colour. Reloading the webpage will cause the value to disappear. Click on C to set a new value. After Reloading webpage the value will remain (as expected) So all is ok if you press A or C, but pressing C and then reloading webpage will cause the issue. In my normal use case C is sent hourly followed by B if certain conditions are met. So I will often find the text field without value when I open the dashboard.

[ { "id": "9b512d81403d76be", "type": "inject", "z": "27e5b3e5cc7a2679", "name": "B", "props": [ { "p": "payload" }, { "p": "topic", "vt": "str" } ], "repeat": "", "crontab": "", "once": false, "onceDelay": 0.1, "topic": "", "payload": "", "payloadType": "date", "x": 170, "y": 840, "wires": [ [ "0bf7bac0ab238b06" ] ] }, { "id": "429e4c30238f509c", "type": "function", "z": "27e5b3e5cc7a2679", "name": "payload & ui_update", "func": "msg = {}\n\nmsg.payload = (6.669).toFixed(1);\nmsg.ui_update = { color: \"#66cd00\" }\n\nreturn msg;", "outputs": 1, "timeout": 0, "noerr": 0, "initialize": "", "finalize": "", "libs": [], "x": 360, "y": 800, "wires": [ [ "c0221554f3a9397b" ] ] }, { "id": "c0221554f3a9397b", "type": "ui-text", "z": "27e5b3e5cc7a2679", "group": "e1c6e6cb771c2108", "order": 3, "width": "2", "height": "1", "name": "kWh price", "label": "¢/kWh prices", "format": "{{msg.payload}}", "layout": "col-center", "style": true, "font": "Arial,Arial,Helvetica,sans-serif", "fontSize": "14", "color": "#717171", "wrapText": false, "className": "", "value": "payload", "valueType": "msg", "x": 620, "y": 840, "wires": [] }, { "id": "f465a9ea7844b18b", "type": "inject", "z": "27e5b3e5cc7a2679", "name": "A", "props": [ { "p": "payload" }, { "p": "topic", "vt": "str" } ], "repeat": "", "crontab": "", "once": false, "onceDelay": 0.1, "topic": "", "payload": "", "payloadType": "date", "x": 170, "y": 800, "wires": [ [ "429e4c30238f509c" ] ] }, { "id": "0bf7bac0ab238b06", "type": "function", "z": "27e5b3e5cc7a2679", "name": "ui_update", "func": "msg = {}\n\nmsg.ui_update = { color: \"#E67E22\"} \n\nreturn msg;", "outputs": 1, "timeout": 0, "noerr": 0, "initialize": "", "finalize": "", "libs": [], "x": 320, "y": 840, "wires": [ [ "c0221554f3a9397b" ] ] }, { "id": "c488230ad9e3768c", "type": "function", "z": "27e5b3e5cc7a2679", "name": "payload", "func": "msg = {}\n\nmsg.payload = (1.669).toFixed(1);\n\nreturn msg;", "outputs": 1, "timeout": 0, "noerr": 0, "initialize": "", "finalize": "", "libs": [], "x": 320, "y": 880, "wires": [ [ "c0221554f3a9397b" ] ] }, { "id": "e611cf750224745d", "type": "inject", "z": "27e5b3e5cc7a2679", "name": "C", "props": [ { "p": "payload" }, { "p": "topic", "vt": "str" } ], "repeat": "", "crontab": "", "once": false, "onceDelay": 0.1, "topic": "", "payload": "", "payloadType": "date", "x": 170, "y": 880, "wires": [ [ "c488230ad9e3768c" ] ] }, { "id": "e1c6e6cb771c2108", "type": "ui-group", "name": "test", "page": "cf478244c05a3ad7", "width": "3", "height": 1, "order": 1, "showTitle": false, "className": "", "visible": "true", "disabled": "false", "groupType": "default" }, { "id": "cf478244c05a3ad7", "type": "ui-page", "name": "Tasks", "ui": "8071e69eb67e4e66", "path": "/page1", "icon": "home", "layout": "grid", "theme": "6cf98fc8cedde7c6", "breakpoints": [ { "name": "Default", "px": "0", "cols": "3" }, { "name": "Tablet", "px": "576", "cols": "6" }, { "name": "Desktop", "px": "1024", "cols": "12" } ], "order": 11, "className": "", "visible": "true", "disabled": "false" }, { "id": "8071e69eb67e4e66", "type": "ui-base", "name": "Tamariu", "path": "/dashboard", "appIcon": "", "includeClientData": false, "acceptsClientConfig": [ "ui-control", "ui-notification" ], "showPathInSidebar": false, "headerContent": "dashboard", "navigationStyle": "temporary", "titleBarStyle": "default", "showReconnectNotification": false, "notificationDisplayTime": 5, "showDisconnectNotification": false, "allowInstall": true }, { "id": "6cf98fc8cedde7c6", "type": "ui-theme", "name": "Green", "colors": { "surface": "#ffffff", "primary": "#01bb0c", "bgPage": "#eeeeee", "groupBg": "#ffffff", "groupOutline": "#b1dd8c" }, "sizes": { "density": "comfortable", "pagePadding": "12px", "groupGap": "12px", "groupBorderRadius": "9px", "widgetGap": "18px" } } ]

Environment

  • Dashboard version: 1.28.0
  • Node-RED version: 4.0.8
  • Node.js version:
  • npm version:
  • Platform/OS:
  • Browser:

Have you provided an initial effort estimate for this issue?

I have provided an initial effort estimate

Switchblade2 avatar Oct 05 '25 15:10 Switchblade2

I suspect this was introduced with the value formatting changes in the text node. If I remember correctly the gauge node also has those updates. I haven't got time to check that at the moment.

Initially reported in https://discourse.nodered.org/t/msg-ui-update-clears-values-in-text-node/99270

colinl avatar Oct 05 '25 15:10 colinl

In fact this will affect several other node types too.

colinl avatar Nov 18 '25 09:11 colinl

This is fixed in the next dashboard release.

colinl avatar Dec 13 '25 17:12 colinl