grafana/public/app/plugins/panel/logs/useDatasourcesFromTargets.ts
Sven Grossmann 4e474161a1
Logs: Add show context to dashboard panel (#80403)
* Logs: Add show context to dashboard panel

* add prop to enable show context toggle

* update test

* adjust tests

* add query targets as a dependency

* extract `useDatasourcesFromTargets` hook

* add tests

* remove comment
2024-01-12 19:19:00 +02:00

32 lines
953 B
TypeScript

import { useState } from 'react';
import { useAsync } from 'react-use';
import { DataSourceApi } from '@grafana/data';
import { getDataSourceSrv } from '@grafana/runtime';
import { DataQuery } from '@grafana/schema';
export const useDatasourcesFromTargets = (targets: DataQuery[] | undefined): Map<string, DataSourceApi> => {
const [dataSourcesMap, setDataSourcesMap] = useState(new Map<string, DataSourceApi>());
useAsync(async () => {
if (!targets) {
setDataSourcesMap(new Map<string, DataSourceApi>());
return;
}
const raw = await Promise.all(
targets
.filter((target) => !!target.datasource?.uid)
.map((target) =>
getDataSourceSrv()
.get(target.datasource?.uid)
.then((ds) => ({ key: target.refId, ds }))
)
);
setDataSourcesMap(new Map<string, DataSourceApi>(raw.map(({ key, ds }) => [key, ds])));
}, [targets]);
return dataSourcesMap;
};