mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
Chore: reduce null check errors to 788 (currently over 798) (#23449)
* Fixed ts errors so build will succeed * Update packages/grafana-data/src/types/graph.ts Co-Authored-By: Ryan McKinley <ryantxu@gmail.com> * Feedback from code review * Leaving out trivial typing's * Fix error with color being undefined now. * fix test with timezone issue * Fixed test Co-authored-by: Ryan McKinley <ryantxu@gmail.com> Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
This commit is contained in:
parent
bbfe628a32
commit
3acc318d72
@ -11,7 +11,7 @@ export type GraphSeriesValue = number | null;
|
||||
|
||||
/** View model projection of a series */
|
||||
export interface GraphSeriesXY {
|
||||
color: string;
|
||||
color?: string;
|
||||
data: GraphSeriesValue[][]; // [x,y][]
|
||||
isVisible: boolean;
|
||||
label: string;
|
||||
|
@ -4,9 +4,10 @@ import { Field } from '../types/dataFrame';
|
||||
* Returns minimal time step from series time field
|
||||
* @param timeField
|
||||
*/
|
||||
export const getSeriesTimeStep = (timeField: Field) => {
|
||||
let previousTime;
|
||||
let minTimeStep;
|
||||
export const getSeriesTimeStep = (timeField: Field): number => {
|
||||
let previousTime: number | undefined;
|
||||
let minTimeStep: number | undefined;
|
||||
let returnTimeStep = Number.MAX_VALUE;
|
||||
|
||||
for (let i = 0; i < timeField.values.length; i++) {
|
||||
const currentTime = timeField.values.get(i);
|
||||
@ -15,16 +16,16 @@ export const getSeriesTimeStep = (timeField: Field) => {
|
||||
const timeStep = currentTime - previousTime;
|
||||
|
||||
if (minTimeStep === undefined) {
|
||||
minTimeStep = timeStep;
|
||||
returnTimeStep = timeStep;
|
||||
}
|
||||
|
||||
if (timeStep < minTimeStep) {
|
||||
minTimeStep = timeStep;
|
||||
if (timeStep < returnTimeStep) {
|
||||
returnTimeStep = timeStep;
|
||||
}
|
||||
}
|
||||
previousTime = currentTime;
|
||||
}
|
||||
return minTimeStep;
|
||||
return returnTimeStep;
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -82,7 +82,7 @@ export const GraphWithLegend: React.FunctionComponent<GraphWithLegendProps> = (p
|
||||
: acc.concat([
|
||||
{
|
||||
label: s.label,
|
||||
color: s.color,
|
||||
color: s.color || '',
|
||||
isVisible: s.isVisible,
|
||||
yAxis: s.yAxis.index,
|
||||
displayValues: s.info || [],
|
||||
|
@ -91,7 +91,7 @@ export default class TimeSeries {
|
||||
label: string;
|
||||
alias: string;
|
||||
aliasEscaped: string;
|
||||
color: string;
|
||||
color?: string;
|
||||
valueFormater: any;
|
||||
stats: any;
|
||||
legend: boolean;
|
||||
|
@ -11,6 +11,7 @@ import {
|
||||
} from './richHistory';
|
||||
import store from 'app/core/store';
|
||||
import { SortOrder } from './explore';
|
||||
import { dateTime } from '@grafana/data';
|
||||
|
||||
const mock: any = {
|
||||
history: [
|
||||
@ -164,6 +165,8 @@ describe('createDateStringFromTs', () => {
|
||||
|
||||
describe('createQueryHeading', () => {
|
||||
it('should correctly create heading for queries when sort order is ascending ', () => {
|
||||
// Have to offset the timezone of a 1 microsecond epoch, and then reverse the changes
|
||||
mock.history[0].ts = 1 + -1 * dateTime().utcOffset() * 60 * 1000;
|
||||
const heading = createQueryHeading(mock.history[0], SortOrder.Ascending);
|
||||
expect(heading).toEqual('January 1');
|
||||
});
|
||||
|
@ -113,7 +113,7 @@ describe('ResultProcessor', () => {
|
||||
[200, 5],
|
||||
[300, 6],
|
||||
],
|
||||
info: undefined,
|
||||
info: [],
|
||||
isVisible: true,
|
||||
yAxis: {
|
||||
index: 1,
|
||||
@ -234,7 +234,7 @@ describe('ResultProcessor', () => {
|
||||
[200, 5],
|
||||
[300, 6],
|
||||
],
|
||||
info: undefined,
|
||||
info: [],
|
||||
isVisible: true,
|
||||
yAxis: {
|
||||
index: 1,
|
||||
|
@ -105,25 +105,25 @@ interface AxisSide {
|
||||
min: number;
|
||||
}
|
||||
|
||||
function checkCorrectAxis(axis: any[]) {
|
||||
function checkCorrectAxis(axis: any[]): boolean {
|
||||
return axis.length === 2 && checkCorrectAxes(axis[0]) && checkCorrectAxes(axis[1]);
|
||||
}
|
||||
|
||||
function checkCorrectAxes(axes: any) {
|
||||
function checkCorrectAxes(axes: any): boolean {
|
||||
return 'min' in axes && 'max' in axes;
|
||||
}
|
||||
|
||||
function checkOneSide(yLeft: AxisSide, yRight: AxisSide) {
|
||||
function checkOneSide(yLeft: AxisSide, yRight: AxisSide): boolean {
|
||||
// on the one hand with respect to zero
|
||||
return (yLeft.min >= 0 && yRight.min >= 0) || (yLeft.max <= 0 && yRight.max <= 0);
|
||||
}
|
||||
|
||||
function checkTwoCross(yLeft: AxisSide, yRight: AxisSide) {
|
||||
function checkTwoCross(yLeft: AxisSide, yRight: AxisSide): boolean {
|
||||
// both across zero
|
||||
return yLeft.min <= 0 && yLeft.max >= 0 && yRight.min <= 0 && yRight.max >= 0;
|
||||
}
|
||||
|
||||
function checkOppositeSides(yLeft: AxisSide, yRight: AxisSide) {
|
||||
function checkOppositeSides(yLeft: AxisSide, yRight: AxisSide): boolean {
|
||||
// on the opposite sides with respect to zero
|
||||
return (yLeft.min >= 0 && yRight.max <= 0) || (yLeft.max <= 0 && yRight.min >= 0);
|
||||
}
|
||||
@ -141,13 +141,13 @@ function getRate(yLeft: AxisSide, yRight: AxisSide): number {
|
||||
const absLeftMax = Math.abs(yLeft.max);
|
||||
const absRightMin = Math.abs(yRight.min);
|
||||
const absRightMax = Math.abs(yRight.max);
|
||||
const upLeft = _.max([absLeftMin, absLeftMax]);
|
||||
const downLeft = _.min([absLeftMin, absLeftMax]);
|
||||
const upRight = _.max([absRightMin, absRightMax]);
|
||||
const downRight = _.min([absRightMin, absRightMax]);
|
||||
const upLeft = Math.max(absLeftMin, absLeftMax);
|
||||
const downLeft = Math.min(absLeftMin, absLeftMax);
|
||||
const upRight = Math.max(absRightMin, absRightMax);
|
||||
const downRight = Math.min(absRightMin, absRightMax);
|
||||
|
||||
const rateLeft = downLeft ? upLeft / downLeft : upLeft;
|
||||
const rateRight = downRight ? upRight / downRight : upRight;
|
||||
const rateLeft = downLeft !== 0 ? upLeft / downLeft : upLeft;
|
||||
const rateRight = downRight !== 0 ? upRight / downRight : upRight;
|
||||
|
||||
return rateLeft > rateRight ? rateLeft : rateRight;
|
||||
}
|
||||
|
@ -249,7 +249,7 @@ class GraphElement {
|
||||
return;
|
||||
} else {
|
||||
this.tooltip.clear(this.plot);
|
||||
let linksSupplier: LinkModelSupplier<FieldDisplay>;
|
||||
let linksSupplier: LinkModelSupplier<FieldDisplay> | undefined;
|
||||
|
||||
if (item) {
|
||||
// pickup y-axis index to know which field's config to apply
|
||||
@ -258,7 +258,7 @@ class GraphElement {
|
||||
const field = dataFrame.fields[item.series.fieldIndex];
|
||||
const dataIndex = this.getDataIndexWithNullValuesCorrection(item, dataFrame);
|
||||
|
||||
let links = this.panel.options.dataLinks || [];
|
||||
let links: any[] = this.panel.options.dataLinks || [];
|
||||
if (field.config.links && field.config.links.length) {
|
||||
// Append the configured links to the panel datalinks
|
||||
links = [...links, ...field.config.links];
|
||||
|
@ -170,17 +170,19 @@ export class TimeRegionManager {
|
||||
|
||||
fromEnd = dateTime(fromStart);
|
||||
|
||||
if (hRange.from.h <= hRange.to.h) {
|
||||
fromEnd.add(hRange.to.h - hRange.from.h, 'hours');
|
||||
} else if (hRange.from.h > hRange.to.h) {
|
||||
while (fromEnd.hour() !== hRange.to.h) {
|
||||
fromEnd.add(1, 'hours');
|
||||
}
|
||||
} else {
|
||||
fromEnd.add(24 - hRange.from.h, 'hours');
|
||||
if (fromEnd.hour) {
|
||||
if (hRange.from.h <= hRange.to.h) {
|
||||
fromEnd.add(hRange.to.h - hRange.from.h, 'hours');
|
||||
} else if (hRange.from.h > hRange.to.h) {
|
||||
while (fromEnd.hour() !== hRange.to.h) {
|
||||
fromEnd.add(1, 'hours');
|
||||
}
|
||||
} else {
|
||||
fromEnd.add(24 - hRange.from.h, 'hours');
|
||||
|
||||
while (fromEnd.hour() !== hRange.to.h) {
|
||||
fromEnd.add(1, 'hours');
|
||||
while (fromEnd.hour() !== hRange.to.h) {
|
||||
fromEnd.add(1, 'hours');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -62,8 +62,8 @@ export const getGraphSeriesModel = (
|
||||
});
|
||||
|
||||
if (points.length > 0) {
|
||||
const seriesStats = reduceField({ field, reducers: legendOptions.stats });
|
||||
let statsDisplayValues: DisplayValue[];
|
||||
const seriesStats = reduceField({ field, reducers: legendOptions.stats || [] });
|
||||
let statsDisplayValues: DisplayValue[] = [];
|
||||
|
||||
if (legendOptions.stats) {
|
||||
statsDisplayValues = legendOptions.stats.map<DisplayValue>(stat => {
|
||||
|
@ -16,7 +16,7 @@ export function getOpacityScale(
|
||||
options: { cardColor?: null; colorScale?: any; exponent?: any },
|
||||
maxValue: number,
|
||||
minValue = 0
|
||||
) {
|
||||
): any {
|
||||
let legendOpacityScale;
|
||||
if (options.colorScale === 'linear') {
|
||||
legendOpacityScale = d3
|
||||
|
@ -296,7 +296,7 @@ export class HeatmapCtrl extends MetricsPanelCtrl {
|
||||
// Directly support DataFrame
|
||||
onDataFramesReceived(data: DataFrame[]) {
|
||||
this.series = this.processor.getSeriesList({ dataList: data, range: this.range }).map(ts => {
|
||||
ts.color = null; // remove whatever the processor set
|
||||
ts.color = undefined; // remove whatever the processor set
|
||||
ts.flotpairs = ts.getFlotPairs(this.panel.nullPointMode);
|
||||
return ts;
|
||||
});
|
||||
|
@ -275,7 +275,7 @@ function pushToYBuckets(
|
||||
}
|
||||
if (buckets[bucketNum]) {
|
||||
buckets[bucketNum].values.push(value);
|
||||
buckets[bucketNum].points.push(point);
|
||||
buckets[bucketNum].points?.push(point);
|
||||
buckets[bucketNum].count += count;
|
||||
} else {
|
||||
buckets[bucketNum] = {
|
||||
|
@ -9,6 +9,8 @@ import { TableRenderer } from './renderer';
|
||||
import { isTableData, PanelEvents, PanelPlugin } from '@grafana/data';
|
||||
import { TemplateSrv } from 'app/features/templating/template_srv';
|
||||
import { dispatch } from 'app/store/store';
|
||||
import { ComponentType } from 'react';
|
||||
import { PanelProps } from '@grafana/data';
|
||||
import { applyFilterFromTable } from 'app/features/variables/adhoc/actions';
|
||||
|
||||
export class TablePanelCtrl extends MetricsPanelCtrl {
|
||||
@ -268,6 +270,6 @@ export class TablePanelCtrl extends MetricsPanelCtrl {
|
||||
}
|
||||
}
|
||||
|
||||
export const plugin = new PanelPlugin(null);
|
||||
export const plugin = new PanelPlugin((null as unknown) as ComponentType<PanelProps<any>>);
|
||||
plugin.angularPanelCtrl = TablePanelCtrl;
|
||||
plugin.setNoPadding();
|
||||
|
Loading…
Reference in New Issue
Block a user