mirror of
https://github.com/grafana/grafana.git
synced 2025-02-20 11:48:34 -06:00
* Style: made outlined buttons and used it in Alert component * Refactor: clean up state on load data source failure * Refactor: test data source thunk created * Refactor: move logic to changeDatasource and call that from intialize * Refactor: move load explore datasources to own thunk * Refactor: move logic to updateDatasourceInstanceAction * Tests: reducer tests * Test(Explore): Added tests and made thunkTester async * Fix(Explore): Fixed so that we do not render StartPage if there is no StartPage * Fix(Explore): Missed type in merge * Refactor: Thunktester did not fail tests on async failures and prevented queires from running on datasource failures * Feat: Fadein error alert to prevent flickering * Feat: Refresh labels after reconnect * Refactor: Move useLokiForceLabels into useLokiLabels from PR comments * Feat: adds refresh metrics to Prometheus languageprovider * Style: removes padding for connected datasources * Chore: remove implicit anys
62 lines
2.0 KiB
TypeScript
62 lines
2.0 KiB
TypeScript
import { useState, useEffect } from 'react';
|
|
// @ts-ignore
|
|
import Prism from 'prismjs';
|
|
import { DatasourceStatus } from '@grafana/ui/src/types/plugin';
|
|
|
|
import LokiLanguageProvider from 'app/plugins/datasource/loki/language_provider';
|
|
import { useLokiLabels } from 'app/plugins/datasource/loki/components/useLokiLabels';
|
|
import { CascaderOption } from 'app/plugins/datasource/loki/components/LokiQueryFieldForm';
|
|
import { useRefMounted } from 'app/core/hooks/useRefMounted';
|
|
|
|
const PRISM_SYNTAX = 'promql';
|
|
|
|
/**
|
|
*
|
|
* @param languageProvider
|
|
* @description Initializes given language provider, exposes Loki syntax and enables loading label option values
|
|
*/
|
|
export const useLokiSyntax = (languageProvider: LokiLanguageProvider, datasourceStatus: DatasourceStatus) => {
|
|
const mounted = useRefMounted();
|
|
// State
|
|
const [languageProviderInitialized, setLanguageProviderInitilized] = useState(false);
|
|
const [syntax, setSyntax] = useState(null);
|
|
|
|
/**
|
|
* Holds information about currently selected option from rc-cascader to perform effect
|
|
* that loads option values not fetched yet. Based on that useLokiLabels hook decides whether or not
|
|
* the option requires additional data fetching
|
|
*/
|
|
const [activeOption, setActiveOption] = useState<CascaderOption[]>();
|
|
|
|
const { logLabelOptions, setLogLabelOptions, refreshLabels } = useLokiLabels(
|
|
languageProvider,
|
|
languageProviderInitialized,
|
|
activeOption,
|
|
datasourceStatus
|
|
);
|
|
|
|
// Async
|
|
const initializeLanguageProvider = async () => {
|
|
await languageProvider.start();
|
|
Prism.languages[PRISM_SYNTAX] = languageProvider.getSyntax();
|
|
if (mounted.current) {
|
|
setLogLabelOptions(languageProvider.logLabelOptions);
|
|
setSyntax(languageProvider.getSyntax());
|
|
setLanguageProviderInitilized(true);
|
|
}
|
|
};
|
|
|
|
// Effects
|
|
useEffect(() => {
|
|
initializeLanguageProvider();
|
|
}, []);
|
|
|
|
return {
|
|
isSyntaxReady: languageProviderInitialized,
|
|
syntax,
|
|
logLabelOptions,
|
|
setActiveOption,
|
|
refreshLabels,
|
|
};
|
|
};
|