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) {