[release-11.5.5] Dashboard: Support TemplateSrv.containsTemplate in scenes context (#104182)

* Dashboard: Support TemplateSrv.containsTemplate in scenes context (#104072)

(cherry picked from commit 82184686dc)

* remove flaky

* Update public/app/features/templating/template_srv.ts

Co-authored-by: Scott Lepper <scott.lepper@gmail.com>

---------

Co-authored-by: Scott Lepper <scott.lepper@gmail.com>
pull/104632/head
Haris Rozajac 2 months ago committed by GitHub
parent 684227f7a5
commit 4042e67bfd
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 3
      e2e/various-suite/loki-editor.spec.ts
  2. 23
      public/app/features/templating/template_srv.test.ts
  3. 9
      public/app/features/templating/template_srv.ts

@ -22,7 +22,8 @@ describe('Loki Query Editor', () => {
e2e.flows.revertAllChanges();
});
it('Autocomplete features should work as expected.', () => {
// flaky test
it.skip('Autocomplete features should work as expected.', () => {
addDataSource();
cy.intercept(/labels?/, (req) => {

@ -905,6 +905,29 @@ describe('templateSrv', () => {
expect(podVar.current.text).toEqual(['podA', 'podB']);
});
it('Can use containsTemplate to check if a variable exists', () => {
window.__grafanaSceneContext = new EmbeddedScene({
$variables: new SceneVariableSet({
variables: [
new QueryVariable({ name: 'server', value: 'serverA', text: 'Server A', query: { refId: 'A' } }),
new QueryVariable({ name: 'pods', value: ['pA', 'pB'], text: ['podA', 'podB'], query: { refId: 'A' } }),
new DataSourceVariable({ name: 'ds', value: 'dsA', text: 'dsA', pluginId: 'prometheus' }),
new CustomVariable({ name: 'custom', value: 'A', text: 'A', query: 'A, B, C' }),
new IntervalVariable({ name: 'interval', value: '1m', intervals: ['1m', '2m'] }),
],
}),
body: new SceneCanvasText({ text: 'hello' }),
});
window.__grafanaSceneContext.activate();
expect(_templateSrv.containsTemplate('${server}')).toBe(true);
expect(_templateSrv.containsTemplate('${pods}')).toBe(true);
expect(_templateSrv.containsTemplate('${ds}')).toBe(true);
expect(_templateSrv.containsTemplate('${custom}')).toBe(true);
expect(_templateSrv.containsTemplate('${interval}')).toBe(true);
});
it('Should return timeRange from scenes context', () => {
window.__grafanaSceneContext = new EmbeddedScene({
body: new SceneCanvasText({ text: 'hello' }),

@ -200,6 +200,15 @@ export class TemplateSrv implements BaseTemplateSrv {
if (!target) {
return false;
}
// Scenes compatibility
if (window.__grafanaSceneContext && window.__grafanaSceneContext.isActive) {
// We are just checking that this is a valid variable reference, and we are not looking up the variable
this.regex.lastIndex = 0;
const match = this.regex.exec(target);
return !!match;
}
const name = this.getVariableName(target);
const variable = name && this.getVariableAtIndex(name);
return variable !== null && variable !== undefined;

Loading…
Cancel
Save