diff --git a/packages/node_modules/@node-red/editor-client/src/js/ui/common/treeList.js b/packages/node_modules/@node-red/editor-client/src/js/ui/common/treeList.js index 19d65c591..baab6acda 100644 --- a/packages/node_modules/@node-red/editor-client/src/js/ui/common/treeList.js +++ b/packages/node_modules/@node-red/editor-client/src/js/ui/common/treeList.js @@ -41,6 +41,7 @@ * sublabel: 'Local', // a sub-label for the item * icon: 'fa fa-rocket', // (optional) icon for the item * checkbox: true/false, // (optional) if present, display checkbox accordingly + * radio: 'group-name', // (optional) if present, display radio box - using group-name to set radio group * selected: true/false, // (optional) whether the item is selected or not * children: [] | function(done,item) // (optional) an array of child items, or a function * // that will call the `done` callback with an array @@ -640,6 +641,41 @@ } } selectWrapper.appendTo(label) + } else if (item.radio) { + var selectWrapper = $(''); + var cb = $('').prop('name', item.radio).prop('checked',item.selected).appendTo(selectWrapper); + cb.on('click', function(e) { + e.stopPropagation(); + }); + cb.on('change', function(e) { + item.selected = this.checked; + that._selected.forEach(function(selectedItem) { + if (selectedItem.radio === item.radio) { + selectedItem.treeList.label.removeClass("selected"); + selectedItem.selected = false; + that._selected.delete(selectedItem); + } + }) + if (item.selected) { + that._selected.add(item); + } else { + that._selected.delete(item); + } + label.toggleClass("selected",this.checked); + that._trigger("select",e,item); + }) + if (!item.children) { + label.on("click", function(e) { + e.stopPropagation(); + cb.trigger("click"); + }) + } + item.treeList.select = function(v) { + if (v !== item.selected) { + cb.trigger("click"); + } + } + selectWrapper.appendTo(label) } else { label.on("click", function(e) { if (!that.options.multi) {