Commit 21ed77d7 by Torkel Ödegaard Committed by GitHub

TemplateSrv: Fix interpolating strings with object variables (#28171)

parent 92c2a6c2
......@@ -687,4 +687,35 @@ describe('templateSrv', () => {
expect(target).toBe('2020-07');
});
});
describe('handle objects gracefully', () => {
beforeEach(() => {
initTemplateSrv([{ type: 'query', name: 'test', current: { value: { test: 'A' } } }]);
});
it('should not pass object to custom function', () => {
let passedValue: any = null;
_templateSrv.replace('this.${test}.filters', {}, (value: any) => {
passedValue = value;
});
expect(passedValue).toBe('[object Object]');
});
});
describe('handle objects gracefully and call toString if defined', () => {
beforeEach(() => {
const value = { test: 'A', toString: () => 'hello' };
initTemplateSrv([{ type: 'query', name: 'test', current: { value } }]);
});
it('should not pass object to custom function', () => {
let passedValue: any = null;
_templateSrv.replace('this.${test}.filters', {}, (value: any) => {
passedValue = value;
});
expect(passedValue).toBe('hello');
});
});
});
......@@ -112,6 +112,15 @@ export class TemplateSrv implements BaseTemplateSrv {
// for some scopedVars there is no variable
variable = variable || {};
if (value === null || value === undefined) {
return '';
}
// if it's an object transform value to string
if (!Array.isArray(value) && typeof value === 'object') {
value = `${value}`;
}
if (typeof format === 'function') {
return format(value, variable, this.formatValue);
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment