diff --git a/src/components/AppConfig/AppConfig.tsx b/src/components/AppConfig/AppConfig.tsx index a7af658..ff57e97 100644 --- a/src/components/AppConfig/AppConfig.tsx +++ b/src/components/AppConfig/AppConfig.tsx @@ -1,7 +1,7 @@ -import React, { useState, ChangeEvent } from 'react'; -import { Button, Field, Input, useStyles2, FieldSet } from '@grafana/ui'; +import React, { useState, ChangeEvent, useEffect } from 'react'; +import { Button, Field, Input, useStyles2, FieldSet, TagList } from '@grafana/ui'; import { PluginConfigPageProps, AppPluginMeta, PluginMeta, GrafanaTheme2 } from '@grafana/data'; -import { getBackendSrv, locationService } from '@grafana/runtime'; +import { getBackendSrv, getDataSourceSrv, locationService } from '@grafana/runtime'; import { css } from '@emotion/css'; import { testIds } from '../testIds'; import { lastValueFrom } from 'rxjs'; @@ -13,6 +13,7 @@ export type JsonData = { type State = { // The regex pattern to match datasource datasource: string; + matchingDatasources?: string[]; }; interface Props extends PluginConfigPageProps> {} @@ -27,10 +28,31 @@ export const AppConfig = ({ plugin }: Props) => { const onChangeDatasource = (event: ChangeEvent) => { setState({ ...state, - datasource: event.target.value.trim(), + datasource: event.target.value, }); }; + const onDiscoverDatasources = () => { + const datasources = getDataSourceSrv() + .getList({ type: 'prometheus' }); + + const matchingNames: string[] = [] + datasources.forEach((ds) => { + if (ds.name.match(state.datasource)) { + matchingNames.push(ds.name) + } + }) + + setState({ + ...state, + matchingDatasources: matchingNames, + }); + } + + useEffect(() => { + onDiscoverDatasources(); + }) + return (
{/* ENABLE / DISABLE PLUGIN */} @@ -78,7 +100,7 @@ export const AppConfig = ({ plugin }: Props) => { {/* CUSTOM SETTINGS */}
{/* API Url */} - + { value={state?.datasource} placeholder={`E.g.: Prometheus`} onChange={onChangeDatasource} + onBlur={onDiscoverDatasources} /> + 9} tags={state.matchingDatasources || []} />