mirror of
https://github.com/grafana/grafana.git
synced 2025-08-02 08:22:20 +08:00
Loki: Update labels in log browser when time range changes (#37520)
* Refresh label when time range changes * Refactor solution * Add tests * Update tests comments * Update test * Update public/app/plugins/datasource/loki/components/LokiQueryField.tsx * Update public/app/plugins/datasource/loki/components/LokiQueryField.tsx
This commit is contained in:
@ -1,6 +1,4 @@
|
||||
// Libraries
|
||||
import React, { ReactNode } from 'react';
|
||||
|
||||
import {
|
||||
SlatePrism,
|
||||
TypeaheadOutput,
|
||||
@ -11,17 +9,13 @@ import {
|
||||
DOMUtil,
|
||||
Icon,
|
||||
} from '@grafana/ui';
|
||||
|
||||
// Utils & Services
|
||||
// dom also includes Element polyfills
|
||||
import { Plugin, Node } from 'slate';
|
||||
import { LokiLabelBrowser } from './LokiLabelBrowser';
|
||||
|
||||
// Types
|
||||
import { ExploreQueryFieldProps } from '@grafana/data';
|
||||
import { LokiQuery, LokiOptions } from '../types';
|
||||
import { LanguageMap, languages as prismLanguages } from 'prismjs';
|
||||
import LokiLanguageProvider, { LokiHistoryItem } from '../language_provider';
|
||||
import { shouldRefreshLabels } from '../language_utils';
|
||||
import LokiDatasource from '../datasource';
|
||||
|
||||
function getChooserText(hasSyntax: boolean, hasLogLabels: boolean) {
|
||||
@ -98,6 +92,18 @@ export class LokiQueryField extends React.PureComponent<LokiQueryFieldProps, Lok
|
||||
this.setState({ labelsLoaded: true });
|
||||
}
|
||||
|
||||
componentDidUpdate(prevProps: LokiQueryFieldProps) {
|
||||
const {
|
||||
range,
|
||||
datasource: { languageProvider },
|
||||
} = this.props;
|
||||
const refreshLabels = shouldRefreshLabels(range, prevProps.range);
|
||||
// We want to refresh labels when range changes (we round up intervals to a minute)
|
||||
if (refreshLabels) {
|
||||
languageProvider.fetchLabels();
|
||||
}
|
||||
}
|
||||
|
||||
onChangeLabelBrowser = (selector: string) => {
|
||||
this.onChangeQuery(selector, true);
|
||||
this.setState({ labelBrowserVisible: false });
|
||||
|
Reference in New Issue
Block a user