44 lines
1.6 KiB
JavaScript
44 lines
1.6 KiB
JavaScript
const statestore = require('../store/state.js')
|
|
|
|
module.exports = function (RED) {
|
|
function DropdownNode (config) {
|
|
// create node in Node-RED
|
|
RED.nodes.createNode(this, config)
|
|
const node = this
|
|
|
|
// which group are we rendering this widget
|
|
const group = RED.nodes.getNode(config.group)
|
|
|
|
const evts = {
|
|
onChange: true,
|
|
beforeSend: function (msg) {
|
|
if (msg.ui_update) {
|
|
const update = msg.ui_update
|
|
if (update.options) {
|
|
// dynamically set "options" property
|
|
statestore.set(group.getBase(), node, msg, 'options', update.options)
|
|
}
|
|
if (typeof update.label !== 'undefined') {
|
|
// dynamically set "label" property
|
|
statestore.set(group.getBase(), node, msg, 'label', update.label)
|
|
}
|
|
if (typeof update.multiple !== 'undefined') {
|
|
// dynamically set "label" property
|
|
statestore.set(group.getBase(), node, msg, 'multiple', update.multiple)
|
|
}
|
|
}
|
|
if (msg.options) {
|
|
// backward compatibility support
|
|
statestore.set(group.getBase(), node, msg, 'options', msg.options)
|
|
}
|
|
return msg
|
|
}
|
|
}
|
|
|
|
// inform the dashboard UI that we are adding this node
|
|
group.register(node, config, evts)
|
|
}
|
|
|
|
RED.nodes.registerType('ui-dropdown', DropdownNode)
|
|
}
|