diff --git a/packages/grafana-data/src/dataframe/DataFrameView.ts b/packages/grafana-data/src/dataframe/DataFrameView.ts index 0568bbc690c..b96055813c9 100644 --- a/packages/grafana-data/src/dataframe/DataFrameView.ts +++ b/packages/grafana-data/src/dataframe/DataFrameView.ts @@ -53,15 +53,15 @@ export class DataFrameView extends FunctionalVector { * Helper function to return the {@link DisplayProcessor} for a given field column. * @param colIndex - the field column index for the data frame. */ - getFieldDisplayProcessor(colIndex: number): DisplayProcessor | null { + getFieldDisplayProcessor(colIndex: number): DisplayProcessor | undefined { if (!this.dataFrame || !this.dataFrame.fields) { - return null; + return undefined; } const field = this.dataFrame.fields[colIndex]; if (!field || !field.display) { - return null; + return undefined; } return field.display; diff --git a/public/app/plugins/datasource/mixed/MixedDataSource.ts b/public/app/plugins/datasource/mixed/MixedDataSource.ts index 1f171e83a29..3fe232cc8b8 100644 --- a/public/app/plugins/datasource/mixed/MixedDataSource.ts +++ b/public/app/plugins/datasource/mixed/MixedDataSource.ts @@ -40,9 +40,9 @@ export class MixedDatasource extends DataSourceApi { const mixed: BatchedQueries[] = []; for (const key in sets) { const targets = sets[key]; - const dsName = targets[0].datasource; + const dsName: string | undefined = targets[0].datasource; mixed.push({ - datasource: getDataSourceSrv().get(dsName), + datasource: getDataSourceSrv().get(dsName, request.scopedVars), targets, }); } diff --git a/public/app/plugins/panel/alertlist/module.ts b/public/app/plugins/panel/alertlist/module.ts index d3faa5ca1f0..f165508f71a 100644 --- a/public/app/plugins/panel/alertlist/module.ts +++ b/public/app/plugins/panel/alertlist/module.ts @@ -90,10 +90,10 @@ class AlertListPanel extends PanelCtrl { if (this.panel.show === 'current') { getAlertsPromise = this.getCurrentAlertState(); - } - - if (this.panel.show === 'changes') { + } else if (this.panel.show === 'changes') { getAlertsPromise = this.getStateChanges(); + } else { + getAlertsPromise = Promise.resolve(); } getAlertsPromise.then(() => { diff --git a/public/app/plugins/panel/annolist/AnnoListPanel.tsx b/public/app/plugins/panel/annolist/AnnoListPanel.tsx index 5f7e9b31510..63342c6b4aa 100644 --- a/public/app/plugins/panel/annolist/AnnoListPanel.tsx +++ b/public/app/plugins/panel/annolist/AnnoListPanel.tsx @@ -4,20 +4,17 @@ import React, { PureComponent } from 'react'; import { AnnoOptions } from './types'; import { AnnotationEvent, AppEvents, dateTime, DurationUnit, PanelProps } from '@grafana/data'; import { Tooltip } from '@grafana/ui'; -import { getBackendSrv } from '@grafana/runtime'; +import { getBackendSrv, getLocationSrv } from '@grafana/runtime'; import { AbstractList } from '@grafana/ui/src/components/List/AbstractList'; import { TagBadge } from 'app/core/components/TagFilter/TagBadge'; import { getDashboardSrv } from 'app/features/dashboard/services/DashboardSrv'; import appEvents from 'app/core/app_events'; - -import { updateLocation } from 'app/core/actions'; -import { store } from 'app/store/store'; import { css, cx } from 'emotion'; interface UserInfo { - id: number; - login: string; - email: string; + id?: number; + login?: string; + email?: string; } interface Props extends PanelProps {} @@ -108,6 +105,10 @@ export class AnnoListPanel extends PureComponent { onAnnoClick = (e: React.SyntheticEvent, anno: AnnotationEvent) => { e.stopPropagation(); + if (!anno.time) { + return; + } + const { options } = this.props; const dashboardSrv = getDashboardSrv(); const current = dashboardSrv.getCurrent(); @@ -122,12 +123,10 @@ export class AnnoListPanel extends PureComponent { } if (current.id === anno.dashboardId) { - store.dispatch( - updateLocation({ - query: params, - partial: true, - }) - ); + getLocationSrv().update({ + query: params, + partial: true, + }); return; } @@ -136,12 +135,10 @@ export class AnnoListPanel extends PureComponent { .then((res: any[]) => { if (res && res.length && res[0].id === anno.dashboardId) { const dash = res[0]; - store.dispatch( - updateLocation({ - query: params, - path: dash.url, - }) - ); + getLocationSrv().update({ + query: params, + path: dash.url, + }); return; } appEvents.emit(AppEvents.alertWarning, ['Unknown Dashboard: ' + anno.dashboardId]); @@ -164,7 +161,7 @@ export class AnnoListPanel extends PureComponent { return t.add(incr, unit as DurationUnit).valueOf(); } - onTagClick = (e: React.SyntheticEvent, tag: string, remove: boolean) => { + onTagClick = (e: React.SyntheticEvent, tag: string, remove?: boolean) => { e.stopPropagation(); const queryTags = remove ? this.state.queryTags.filter(item => item !== tag) : [...this.state.queryTags, tag]; @@ -188,7 +185,7 @@ export class AnnoListPanel extends PureComponent { }); }; - renderTags = (tags: string[], remove: boolean): JSX.Element | null => { + renderTags = (tags?: string[], remove?: boolean): JSX.Element | null => { if (!tags || !tags.length) { return null; } @@ -197,7 +194,7 @@ export class AnnoListPanel extends PureComponent { {tags.map(tag => { return ( this.onTagClick(e, tag, remove)} className="pointer"> - + ); })} @@ -251,7 +248,9 @@ export class AnnoListPanel extends PureComponent { {showTags && this.renderTags(anno.tags, false)} - {showTime && {dashboard.formatDate(anno.time)}} + + {showTime && anno.time && {dashboard.formatDate(anno.time)}} + ); diff --git a/public/app/plugins/panel/bargauge/BarGaugePanel.tsx b/public/app/plugins/panel/bargauge/BarGaugePanel.tsx index 4768c3ba40a..50e9a37eb8c 100644 --- a/public/app/plugins/panel/bargauge/BarGaugePanel.tsx +++ b/public/app/plugins/panel/bargauge/BarGaugePanel.tsx @@ -6,6 +6,7 @@ import { getFieldDisplayValues, PanelProps, FieldConfig, + DisplayProcessor, DisplayValue, } from '@grafana/data'; import { BarGauge, DataLinksContextMenu, VizRepeater, VizRepeaterRenderValueProps } from '@grafana/ui'; @@ -13,6 +14,7 @@ import { BarGauge, DataLinksContextMenu, VizRepeater, VizRepeaterRenderValueProp import { config } from 'app/core/config'; import { BarGaugeOptions } from './types'; import { DataLinksContextMenuApi } from '@grafana/ui/src/components/DataLinks/DataLinksContextMenu'; +import { isNumber } from 'lodash'; export class BarGaugePanel extends PureComponent> { renderComponent = ( @@ -24,6 +26,11 @@ export class BarGaugePanel extends PureComponent> { const { field, display, view, colIndex } = value; const { openMenu, targetClassName } = menuProps; + let processor: DisplayProcessor | undefined = undefined; + if (view && isNumber(colIndex)) { + processor = view!.getFieldDisplayProcessor(colIndex as number); + } + return ( > { height={height} orientation={orientation} field={field} - display={view?.getFieldDisplayProcessor(colIndex)} + display={processor} theme={config.theme} itemSpacing={this.getItemSpacing()} displayMode={options.displayMode} diff --git a/public/app/plugins/panel/graph/Legend/Legend.tsx b/public/app/plugins/panel/graph/Legend/Legend.tsx index f4cd97a7b59..eb8832fc798 100644 --- a/public/app/plugins/panel/graph/Legend/Legend.tsx +++ b/public/app/plugins/panel/graph/Legend/Legend.tsx @@ -286,18 +286,19 @@ class LegendTable extends PureComponent> { - {seriesList.map((series, i) => ( -