show current value in dropdown when its not part of list

This commit is contained in:
Sven Klemm 2018-07-09 11:22:03 +02:00
parent 09c06ced14
commit 76275cae37

View File

@ -15,7 +15,7 @@ var template = `
/** @ngInject */ /** @ngInject */
export function sqlPartEditorDirective($compile, templateSrv) { export function sqlPartEditorDirective($compile, templateSrv) {
var paramTemplate = '<input type="text" class="hide input-mini"></input>'; var paramTemplate = '<input type="text" class="hide input-medium"></input>';
return { return {
restrict: 'E', restrict: 'E',
@ -30,6 +30,7 @@ export function sqlPartEditorDirective($compile, templateSrv) {
var partDef = part.def; var partDef = part.def;
var $paramsContainer = elem.find('.query-part-parameters'); var $paramsContainer = elem.find('.query-part-parameters');
var debounceLookup = $scope.debounce; var debounceLookup = $scope.debounce;
var cancelBlur = null;
$scope.partActions = []; $scope.partActions = [];
@ -53,7 +54,23 @@ export function sqlPartEditorDirective($compile, templateSrv) {
} }
} }
function inputBlur(paramIndex) { $scope.inputBlur = function(paramIndex) {
cancelBlur = setTimeout($scope.switchToLink, 200);
};
$scope.updater = function(value) {
if (value === part.params[paramIndex]) {
clearTimeout(cancelBlur);
$input.focus();
}
return value;
setTimeout(function() {
$scope.inputBlur.call($input[0], paramIndex);
}, 0);
return value;
};
$scope.switchToLink = function(paramIndex) {
/*jshint validthis:true */ /*jshint validthis:true */
var $input = $(this); var $input = $(this);
var $link = $input.prev(); var $link = $input.prev();
@ -70,12 +87,12 @@ export function sqlPartEditorDirective($compile, templateSrv) {
$input.hide(); $input.hide();
$link.show(); $link.show();
} };
function inputKeyPress(paramIndex, e) { function inputKeyPress(paramIndex, e) {
/*jshint validthis:true */ /*jshint validthis:true */
if (e.which === 13) { if (e.which === 13) {
inputBlur.call(this, paramIndex); $scope.inputBlur.call(this, paramIndex);
} }
} }
@ -105,6 +122,12 @@ export function sqlPartEditorDirective($compile, templateSrv) {
var dynamicOptions = _.map(result, function(op) { var dynamicOptions = _.map(result, function(op) {
return op.value; return op.value;
}); });
// add current value to dropdown if its not in resultset
if (_.indexOf(dynamicOptions, part.params[paramIndex]) === -1) {
dynamicOptions.unshift(part.params[paramIndex]);
}
callback(dynamicOptions); callback(dynamicOptions);
}); });
}); });
@ -116,12 +139,7 @@ export function sqlPartEditorDirective($compile, templateSrv) {
source: typeaheadSource, source: typeaheadSource,
minLength: 0, minLength: 0,
items: 1000, items: 1000,
updater: function(value) { updater: $scope.updater,
setTimeout(function() {
inputBlur.call($input[0], paramIndex);
}, 0);
return value;
},
}); });
var typeahead = $input.data('typeahead'); var typeahead = $input.data('typeahead');
@ -157,13 +175,13 @@ export function sqlPartEditorDirective($compile, templateSrv) {
} }
var paramValue = templateSrv.highlightVariablesAsHtml(part.params[index]); var paramValue = templateSrv.highlightVariablesAsHtml(part.params[index]);
var $paramLink = $('<a class="graphite-func-param-link pointer">' + paramValue + '</a>'); var $paramLink = $('<a class="">' + paramValue + '</a>');
var $input = $(paramTemplate); var $input = $(paramTemplate);
$paramLink.appendTo($paramsContainer); $paramLink.appendTo($paramsContainer);
$input.appendTo($paramsContainer); $input.appendTo($paramsContainer);
$input.blur(_.partial(inputBlur, index)); $input.blur(_.partial($scope.inputBlur, index));
$input.keyup(inputKeyDown); $input.keyup(inputKeyDown);
$input.keypress(_.partial(inputKeyPress, index)); $input.keypress(_.partial(inputKeyPress, index));
$paramLink.click(_.partial(clickFuncParam, index)); $paramLink.click(_.partial(clickFuncParam, index));