Hi folks,
A couple of years ago I developed my first custom node (node-red-contrib-msg-resend), which a couple of numeric inputs on the config screen:

Both numeric values can be set dynamically via the input message (msg.resend_interval and msg.resend_max_count). This means that the config screen input contains the default values AND these values can dynamically be overwritten via the input message.
Now I would like to allow the user to choose which msg field he wants to use (e.g. msg.payload.interval), instead of forcing him to use the msg.resend_xxxx fields.
This means I have to use typed inputs like this:

But then the interval is specified on the config screen OR in the input message.
So that would break existing flows...
Anybody has an idea how I can accomplish this?
Thanks !!
Bart
Is it just a matter of sequencing the priorities? - use msg. if set; if not, use msg.resend_interval if present; if not, use number.
Assuming you have an input along the lines of:
<div class="form-row">
<label for="node-input-interval"><i class="fa fa-file-text-o"></i> Interval</label>
<input type="text" id="node-input-interval" style="width:70%">
<input type="hidden" id="node-input-intervalType">
</div>
Then the logic would be something like:
if (intervalType === 'msg') {
await RED.util.evaluateNodeProperty(...
} else if (msg.hasOwnProperty('resend_interval') {
...overridden from msg
} else if (intervalType === 'number') {
...use number entered
} else {
...confused now
}
For this to work for existing code, I expect you would have to default intervalType to 'number'.
Hi Michael,
Thanks for the assistance! Yes indeed, but in the early days I thought that the config screen contained the default values, which could be overwritten by a control message. But with the typedinput (containing an "msg" and a "num" option), which one of both you want ...
But at first sight your code snippet indeed should work. Will have to mention in my readme that the resend_xxx input message fields are read for legacy reasons ...
Thanks a lot!!
Bart