From 8468df0ea59174158762ec2f283af216c456575e Mon Sep 17 00:00:00 2001 From: Erik Sundell Date: Fri, 22 Mar 2024 08:55:44 +0100 Subject: [PATCH 1/3] update config editor --- .../src/components/ConfigEditor.tsx | 40 ++++++++++--------- 1 file changed, 22 insertions(+), 18 deletions(-) diff --git a/packages/create-plugin/templates/datasource/src/components/ConfigEditor.tsx b/packages/create-plugin/templates/datasource/src/components/ConfigEditor.tsx index b37208e55..0e69a9134 100644 --- a/packages/create-plugin/templates/datasource/src/components/ConfigEditor.tsx +++ b/packages/create-plugin/templates/datasource/src/components/ConfigEditor.tsx @@ -3,16 +3,20 @@ import { InlineField, Input, SecretInput } from '@grafana/ui'; import { DataSourcePluginOptionsEditorProps } from '@grafana/data'; import { MyDataSourceOptions, MySecureJsonData } from '../types'; -interface Props extends DataSourcePluginOptionsEditorProps {} +interface Props extends DataSourcePluginOptionsEditorProps {} export function ConfigEditor(props: Props) { const { onOptionsChange, options } = props; + const { jsonData, secureJsonFields, secureJsonData } = options; + const onPathChange = (event: ChangeEvent) => { - const jsonData = { - ...options.jsonData, - path: event.target.value, - }; - onOptionsChange({ ...options, jsonData }); + onOptionsChange({ + ...options, + jsonData: { + ...jsonData, + path: event.target.value, + }, + }); }; // Secure field (only sent to the backend) @@ -39,29 +43,29 @@ export function ConfigEditor(props: Props) { }); }; - const { jsonData, secureJsonFields } = options; - const secureJsonData = (options.secureJsonData || {}) as MySecureJsonData; - return ( -
- + <> + - + -
+ ); } From d786aca1cbfd16e7e6deb61bf6433bdcfc5d8bdf Mon Sep 17 00:00:00 2001 From: Erik Sundell Date: Fri, 22 Mar 2024 12:54:51 +0100 Subject: [PATCH 2/3] more changes --- .../templates/backend/src/datasource.ts | 18 ++++++++++++--- .../datasource/src/components/QueryEditor.tsx | 23 +++++++++++++++---- .../templates/datasource/src/datasource.ts | 12 +++++++++- 3 files changed, 44 insertions(+), 9 deletions(-) diff --git a/packages/create-plugin/templates/backend/src/datasource.ts b/packages/create-plugin/templates/backend/src/datasource.ts index b542b8c33..1b62a7826 100644 --- a/packages/create-plugin/templates/backend/src/datasource.ts +++ b/packages/create-plugin/templates/backend/src/datasource.ts @@ -1,5 +1,5 @@ -import { DataSourceInstanceSettings, CoreApp } from '@grafana/data'; -import { DataSourceWithBackend } from '@grafana/runtime'; +import { DataSourceInstanceSettings, CoreApp, ScopedVars } from '@grafana/data'; +import { DataSourceWithBackend, getTemplateSrv } from '@grafana/runtime'; import { MyQuery, MyDataSourceOptions, DEFAULT_QUERY } from './types'; @@ -9,6 +9,18 @@ export class DataSource extends DataSourceWithBackend { - return DEFAULT_QUERY + return DEFAULT_QUERY; + } + + applyTemplateVariables(query: MyQuery, scopedVars: ScopedVars): Record { + return { + ...query, + queryText: getTemplateSrv().replace(query.queryText, scopedVars), + }; + } + + filterQuery(query: MyQuery): boolean { + // if no query has been provided, prevent the query from being executed + return !!query.queryText; } } diff --git a/packages/create-plugin/templates/datasource/src/components/QueryEditor.tsx b/packages/create-plugin/templates/datasource/src/components/QueryEditor.tsx index f9b0647ee..ec0787e3a 100644 --- a/packages/create-plugin/templates/datasource/src/components/QueryEditor.tsx +++ b/packages/create-plugin/templates/datasource/src/components/QueryEditor.tsx @@ -1,5 +1,5 @@ import React, { ChangeEvent } from 'react'; -import { InlineField, Input } from '@grafana/ui'; +import { InlineField, Input, Stack } from '@grafana/ui'; import { QueryEditorProps } from '@grafana/data'; import { DataSource } from '../datasource'; import { MyDataSourceOptions, MyQuery } from '../types'; @@ -20,13 +20,26 @@ export function QueryEditor({ query, onChange, onRunQuery }: Props) { const { queryText, constant } = query; return ( -
+ - + - + -
+ ); } diff --git a/packages/create-plugin/templates/datasource/src/datasource.ts b/packages/create-plugin/templates/datasource/src/datasource.ts index 92ee42eee..dbed18d10 100644 --- a/packages/create-plugin/templates/datasource/src/datasource.ts +++ b/packages/create-plugin/templates/datasource/src/datasource.ts @@ -1,4 +1,5 @@ import { + CoreApp, DataQueryRequest, DataQueryResponse, DataSourceApi, @@ -7,13 +8,22 @@ import { FieldType, } from '@grafana/data'; -import { MyQuery, MyDataSourceOptions } from './types'; +import { MyQuery, MyDataSourceOptions, DEFAULT_QUERY } from './types'; export class DataSource extends DataSourceApi { constructor(instanceSettings: DataSourceInstanceSettings) { super(instanceSettings); } + getDefaultQuery(_: CoreApp): Partial { + return DEFAULT_QUERY; + } + + filterQuery(query: MyQuery): boolean { + // if no query has been provided, prevent the query from being executed + return !!query.queryText; + } + async query(options: DataQueryRequest): Promise { const { range } = options; const from = range!.from.valueOf(); From 4c90be2fb9fa1867c01aab6db13c221ff7241776 Mon Sep 17 00:00:00 2001 From: Erik Sundell Date: Fri, 22 Mar 2024 12:57:31 +0100 Subject: [PATCH 3/3] remove gf form from tutorial --- .../docs/tutorials/build-a-streaming-data-source-plugin.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docusaurus/docs/tutorials/build-a-streaming-data-source-plugin.md b/docusaurus/docs/tutorials/build-a-streaming-data-source-plugin.md index 04460929c..031537d9d 100644 --- a/docusaurus/docs/tutorials/build-a-streaming-data-source-plugin.md +++ b/docusaurus/docs/tutorials/build-a-streaming-data-source-plugin.md @@ -79,7 +79,7 @@ export function QueryEditor({ query, onChange, onRunQuery }: Props) { const { upperLimit, lowerLimit, tickInterval } = query; return ( -
+ <> @@ -89,7 +89,7 @@ export function QueryEditor({ query, onChange, onRunQuery }: Props) { -
+ <> ); } ```