Custom FD Widget not (remain) deployed

I had built a custom FD widget for a date picking application. once I deploy, the widget works just fine as expected, however when AFTER deploying the flow, when i reload the editor, i find the widget(s) in a 'ready to deploy' state (blue dot on right hand upper corner). I tried, Full Deploy, Modified Flow deploy, Modified Node Deploy, restart flow but same result.
I dont see any functional issues (that i can see), but want to understand what is happening.
the other example flows of FD widgets are working fine without any issue. that is they remain deployed unless i make some changes in them.

not_deploying

[{"id":"23d8e302dcbca1ff","type":"flexdash custom","z":"d96da0cbca7c8342","fd_container":"28d1859702cdf729","fd_cols":"2","fd_rows":"1","fd_array":false,"fd_array_max":10,"fd_output_topic":"","fd_loopback":false,"name":"From Date","title":"From Date","sfc_source":"\n<template>\n  <div class=\"pushbutton d-flex align-center justify-center\">\n <input type=\"datetime-local\" value=\"\" @change=\"changed($event.target.value)\" >\n   </div>\n</template>\n\n\n<style scoped>\n  .label { color: red; }\n</style>\n\n<script>\nexport default {\n  // Props are the inputs to the widget.\n  // They can be set dynamically using Node-RED messages using `msg.<prop>`.\n  // In a \"custom widget\" like this one they cannot be set via the Node-RED flow editor:\n  // use the default values in the lines below instead.\n  props: {\n    label: { default: \"clickme\" }, // text to show inside button\n    output: { default: \"\" }, // value to output when clicked\n  },\n\n  emits: ['send'], // declare to Vue that this component emits a 'send' event\n\n  // simple methods within the component\n  \n  methods: {\n    changed(ev)  {console.log(\"Date picker event:\", ev)\n      this.$emit('send', ev)},\n  },\n  \n}\n</script>\n","import_map":{},"x":150,"y":100,"wires":[["386f862bdc5b0471"]]},{"id":"386f862bdc5b0471","type":"change","z":"d96da0cbca7c8342","name":"","rules":[{"t":"change","p":"payload","pt":"msg","from":"T","fromt":"str","to":" ","tot":"str"},{"t":"set","p":"fdate","pt":"flow","to":"payload","tot":"msg"},{"t":"set","p":"tdate","pt":"flow","to":"payload","tot":"msg"},{"t":"set","p":"topic","pt":"msg","to":"fdate","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":340,"y":100,"wires":[["2e2314bcd8812c26"]]},{"id":"2e2314bcd8812c26","type":"join","z":"d96da0cbca7c8342","name":"","mode":"custom","build":"object","property":"payload","propertyType":"msg","key":"topic","joiner":"\\n","joinerType":"str","accumulate":false,"timeout":"","count":"2","reduceRight":false,"reduceExp":"","reduceInit":"","reduceInitType":"","reduceFixup":"","x":510,"y":120,"wires":[["ebb86858fdd669e7"]]},{"id":"628e865828f5a266","type":"change","z":"d96da0cbca7c8342","name":"","rules":[{"t":"change","p":"payload","pt":"msg","from":"T","fromt":"str","to":" ","tot":"str"},{"t":"set","p":"tdate","pt":"flow","to":"payload","tot":"msg"},{"t":"set","p":"topic","pt":"msg","to":"tdate","tot":"str"},{"t":"set","p":"complete","pt":"msg","to":"true","tot":"bool"}],"action":"","property":"","from":"","to":"","reg":false,"x":340,"y":140,"wires":[["2e2314bcd8812c26"]]},{"id":"ebb86858fdd669e7","type":"change","z":"d96da0cbca7c8342","name":"","rules":[{"t":"set","p":"enabled","pt":"msg","to":"true","tot":"bool"},{"t":"set","p":"title","pt":"msg","to":"Fetch Data For Date Range","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":680,"y":100,"wires":[["3502135c929c2dac","64b830c4cd67f4e1"]]},{"id":"70c86d349449eafb","type":"flexdash custom","z":"d96da0cbca7c8342","fd_container":"28d1859702cdf729","fd_cols":2,"fd_rows":"1","fd_array":false,"fd_array_max":10,"fd_output_topic":"","fd_loopback":false,"name":"To Date","title":"To Date","sfc_source":"\n<template>\n  <div class=\"pushbutton d-flex align-center justify-center\">\n <input type=\"datetime-local\" value=dd @change=\"changed($event.target.value)\" >\n  </div>\n</template>\n\n\n<style scoped>\n  .label { color: red; }\n</style>\n\n<script>\nexport default {\n  // Props are the inputs to the widget.\n  // They can be set dynamically using Node-RED messages using `msg.<prop>`.\n  // In a \"custom widget\" like this one they cannot be set via the Node-RED flow editor:\n  // use the default values in the lines below instead.\n  props: {\n    label: { default: \"clickme\" }, // text to show inside button\n    output: { default: \"\" }, // value to output when clicked\n  },\n\n  emits: ['send'], // declare to Vue that this component emits a 'send' event\n\n  // simple methods within the component\n  \n  methods: {\n    changed(ev) {\n      console.log(\"Date picker event:\", ev)\n      this.$emit('send', ev)\n    },\n  },\n  \n}\n</script>\n","import_map":{},"x":160,"y":140,"wires":[["628e865828f5a266"]]},{"id":"3502135c929c2dac","type":"fd-push-button","z":"d96da0cbca7c8342","fd_container":"28d1859702cdf729","fd_cols":"2","fd_rows":1,"fd_array":false,"fd_array_max":10,"fd_output_topic":"","fd_loopback":false,"name":"Fetch1","title":"","popup_info":"","enabled":"true","color":"light-green-accent-3","output_value":1440,"icon":"","x":870,"y":120,"wires":[["aaaf6fa15c49afe5","a1f1fa82f610e7fd"]]},{"id":"64b830c4cd67f4e1","type":"debug","z":"d96da0cbca7c8342","name":"debug 98","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":1020,"y":80,"wires":[]},{"id":"95005e11a4473674","type":"inject","z":"d96da0cbca7c8342","name":"","props":[{"p":"enabled","v":"false","vt":"bool"}],"repeat":"","crontab":"","once":true,"onceDelay":0.1,"topic":"","x":710,"y":60,"wires":[["3502135c929c2dac"]]},{"id":"705bea0ed940347f","type":"change","z":"d96da0cbca7c8342","name":"","rules":[{"t":"set","p":"enabled","pt":"msg","to":"false","tot":"bool"},{"t":"set","p":"title","pt":"msg","to":"Select a Date Range","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":745,"y":140,"wires":[["3502135c929c2dac"]],"l":false},{"id":"aaaf6fa15c49afe5","type":"link out","z":"d96da0cbca7c8342","name":"link out 94","mode":"link","links":["903ec5e123d306aa"],"x":955,"y":120,"wires":[]},{"id":"a1f1fa82f610e7fd","type":"change","z":"d96da0cbca7c8342","name":"","rules":[{"t":"set","p":"payload1","pt":"msg","to":"fdate","tot":"flow"},{"t":"set","p":"payload2","pt":"msg","to":"tdate","tot":"flow"},{"t":"set","p":"label","pt":"msg","to":"payload1&'-to-'&payload2","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":700,"y":220,"wires":[["eb81d1954c7ee562"]]},{"id":"15c0335039c7a0f5","type":"delay","z":"d96da0cbca7c8342","name":"","pauseType":"delay","timeout":"250","timeoutUnits":"milliseconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"allowrate":false,"outputs":1,"x":685,"y":140,"wires":[["705bea0ed940347f"]],"l":false},{"id":"eb81d1954c7ee562","type":"fd-label","z":"d96da0cbca7c8342","fd_container":"28d1859702cdf729","fd_cols":"3","fd_rows":1,"fd_array":false,"fd_array_max":10,"name":"","title":"Selected Data Range","popup_info":"","label":null,"color":"","align":"center","justify":"center","weight":"400","size":"100%","padding":"4px","x":870,"y":220,"wires":[]},{"id":"903ec5e123d306aa","type":"link in","z":"d96da0cbca7c8342","name":"link in 110","links":["aaaf6fa15c49afe5"],"x":625,"y":140,"wires":[["15c0335039c7a0f5"]]},{"id":"28d1859702cdf729","type":"flexdash container","name":"charts","kind":"StdGrid","fd_children":",23d8e302dcbca1ff,70c86d349449eafb,3502135c929c2dac,eb81d1954c7ee562","title":"","tab":"9f23b0158f8280e3","min_cols":"1","max_cols":"20","unicast":"","parent":"","solid":false,"cols":"1","rows":"1"},{"id":"9f23b0158f8280e3","type":"flexdash tab","name":"charts","icon":"mdi-chart-line","title":"charts","fd_children":",28d1859702cdf729","fd":"e8f5aea52ab49500"}]
1 Like

Thanks for posting the repro. This is a bug :boom:. You edited the nodes in FlexDash, which posts a mutation on the node in the flow editor, which causes the blue dot. For some reason, even though you deploy, that mutation gets resurrected and reapplied when you reopen the flow editor. I've seen some odd behavior that I could never reproduce that could be caused by this so I'm glad I know have a plausible explanation. The workaround is to restart Node-RED when you see this, it clear the mutation queue. I'm currently working on removing all of this machinery so I don't know whether I'll manage to produce an intermediate fix.

1 Like

scary of this word. if i need to not worried, then i will live with it. if you are cognizant of and working on it, i can wait, as long as its doing its Job.

1 Like

Well, the worst outcome is that it may revert a change you make in the flow editor. For example, if you change a widget rows to 2 in FlexDash and then you change it back to 1 in the flow editor, and then you reload the flow editor the change-to-2 will be repeated, i.e., it wipes out you changing it back to 1.

1 Like

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.