diff --git a/packages/node_modules/@node-red/editor-client/src/js/ui/common/typedInput.js b/packages/node_modules/@node-red/editor-client/src/js/ui/common/typedInput.js index 5072a12ca..d6f34ee71 100644 --- a/packages/node_modules/@node-red/editor-client/src/js/ui/common/typedInput.js +++ b/packages/node_modules/@node-red/editor-client/src/js/ui/common/typedInput.js @@ -46,12 +46,6 @@ opacity: 0.3 }).appendTo(container); this.elementDiv.show(); - if (!this.input.hasClass('red-ui-autoComplete')) { - this.input.autoComplete({ - search: contextAutoComplete({ input: that }), - minLength: 0 - }) - } } var mapDeprecatedIcon = function(icon) { if (/^red\/images\/typedInput\/.+\.png$/.test(icon)) { @@ -203,7 +197,8 @@ }); } - const contextAutoComplete = function(options) { + const contextAutoComplete = function() { + const that = this const getContextKeysFromRuntime = function(scope, store, searchKey, done) { contextKnownKeys[scope] = contextKnownKeys[scope] || {} contextKnownKeys[scope][store] = contextKnownKeys[scope][store] || new Set() @@ -242,7 +237,7 @@ const getContextKeys = function(key, done) { const keyParts = key.split('.') const partialKey = keyParts.pop() - let scope = options.input.propertyType + let scope = that.propertyType if (scope === 'flow') { // Get the flow id of the node we're editing const editStack = RED.editor.getEditStack() @@ -258,7 +253,7 @@ return } } - const store = options.input.optionValue + const store = (contextStoreOptions.length === 1) ? contextStoreOptions[0].value : that.optionValue const searchKey = keyParts.join('.') getContextKeysFromRuntime(scope, store, searchKey, function() { @@ -369,14 +364,16 @@ validate:RED.utils.validatePropertyExpression, parse: contextParse, export: contextExport, - valueLabel: contextLabel + valueLabel: contextLabel, + autoComplete: contextAutoComplete }, global: {value:"global",label:"global.",hasValue:true, options:[], validate:RED.utils.validatePropertyExpression, parse: contextParse, export: contextExport, - valueLabel: contextLabel + valueLabel: contextLabel, + autoComplete: contextAutoComplete }, str: {value:"str",label:"string",icon:"red/images/typedInput/az.svg"}, num: {value:"num",label:"number",icon:"red/images/typedInput/09.svg",validate: function(v) { @@ -625,6 +622,7 @@ } var nlsd = false; + let contextStoreOptions; $.widget( "nodered.typedInput", { _create: function() { @@ -636,7 +634,7 @@ } } var contextStores = RED.settings.context.stores; - var contextOptions = contextStores.map(function(store) { + contextStoreOptions = contextStores.map(function(store) { return {value:store,label: store, icon:''} }).sort(function(A,B) { if (A.value === RED.settings.context.default) { @@ -647,12 +645,12 @@ return A.value.localeCompare(B.value); } }) - if (contextOptions.length < 2) { + if (contextStoreOptions.length < 2) { allOptions.flow.options = []; allOptions.global.options = []; } else { - allOptions.flow.options = contextOptions; - allOptions.global.options = contextOptions; + allOptions.flow.options = contextStoreOptions; + allOptions.global.options = contextStoreOptions; } } nlsd = true; @@ -1344,6 +1342,16 @@ } else { this.optionSelectTrigger.hide(); } + if (opt.autoComplete) { + let searchFunction = opt.autoComplete + if (searchFunction.length === 0) { + searchFunction = opt.autoComplete.call(this) + } + this.input.autoComplete({ + search: searchFunction, + minLength: 0 + }) + } } this.optionMenu = this._createMenu(opt.options,opt,function(v){ if (!opt.multiple) { @@ -1386,8 +1394,12 @@ this.valueLabelContainer.hide(); this.elementDiv.show(); if (opt.autoComplete) { + let searchFunction = opt.autoComplete + if (searchFunction.length === 0) { + searchFunction = opt.autoComplete.call(this) + } this.input.autoComplete({ - search: opt.autoComplete, + search: searchFunction, minLength: 0 }) }