diff --git a/packages/grafana-ui/package.json b/packages/grafana-ui/package.json index c05569cd0ac..646de900429 100644 --- a/packages/grafana-ui/package.json +++ b/packages/grafana-ui/package.json @@ -71,7 +71,7 @@ "react-transition-group": "4.4.1", "slate": "0.47.8", "tinycolor2": "1.4.1", - "uplot": "1.5.0" + "uplot": "1.5.1" }, "devDependencies": { "@rollup/plugin-commonjs": "16.0.0", diff --git a/packages/grafana-ui/src/components/GraphNG/utils.ts b/packages/grafana-ui/src/components/GraphNG/utils.ts index 260f23587a3..2ecf1cdfabd 100755 --- a/packages/grafana-ui/src/components/GraphNG/utils.ts +++ b/packages/grafana-ui/src/components/GraphNG/utils.ts @@ -8,7 +8,7 @@ import { FieldMatcherID, } from '@grafana/data'; import { AlignedFrameWithGapTest } from '../uPlot/types'; -import uPlot, { AlignedData } from 'uplot'; +import uPlot, { AlignedData, JoinNullMode } from 'uplot'; import { XYFieldMatchers } from './GraphNG'; // the results ofter passing though data @@ -43,7 +43,7 @@ export function mapDimesions(match: XYFieldMatchers, frame: DataFrame, frames?: export function alignDataFrames(frames: DataFrame[], fields?: XYFieldMatchers): AlignedFrameWithGapTest | null { const valuesFromFrames: AlignedData[] = []; const sourceFields: Field[] = []; - const skipGaps: boolean[][] = []; + const nullModes: JoinNullMode[][] = []; // Default to timeseries config if (!fields) { @@ -64,12 +64,12 @@ export function alignDataFrames(frames: DataFrame[], fields?: XYFieldMatchers): throw new Error('Only a single x field is supported'); } - let skipGapsFrame: boolean[] = []; + let nullModesFrame: JoinNullMode[] = []; // Add the first X axis if (!sourceFields.length) { sourceFields.push(dims.x[0]); - skipGapsFrame.push(true); + nullModesFrame.push(0); } const alignedData: AlignedData = [ @@ -79,15 +79,15 @@ export function alignDataFrames(frames: DataFrame[], fields?: XYFieldMatchers): // Add the Y values for (const field of dims.y) { let values = field.values.toArray(); - let spanNulls = field.config.custom.spanNulls || false; + let joinNullMode = field.config.custom.spanNulls ? 0 : 2; if (field.config.nullValueMode === NullValueMode.AsZero) { values = values.map(v => (v === null ? 0 : v)); - spanNulls = true; + joinNullMode = 0; } alignedData.push(values); - skipGapsFrame.push(spanNulls); + nullModesFrame.push(joinNullMode); // This will cache an appropriate field name in the field state getFieldDisplayName(field, frame, frames); @@ -95,7 +95,7 @@ export function alignDataFrames(frames: DataFrame[], fields?: XYFieldMatchers): } valuesFromFrames.push(alignedData); - skipGaps.push(skipGapsFrame); + nullModes.push(nullModesFrame); } if (valuesFromFrames.length === 0) { @@ -103,7 +103,7 @@ export function alignDataFrames(frames: DataFrame[], fields?: XYFieldMatchers): } // do the actual alignment (outerJoin on the first arrays) - let { data: alignedData, isGap } = uPlot.join(valuesFromFrames, skipGaps); + let { data: alignedData, isGap } = uPlot.join(valuesFromFrames, nullModes); if (alignedData!.length !== sourceFields.length) { throw new Error('outerJoinValues lost a field?'); diff --git a/yarn.lock b/yarn.lock index 02bd8830e65..802e67fd290 100644 --- a/yarn.lock +++ b/yarn.lock @@ -25703,10 +25703,10 @@ update-notifier@^2.5.0: semver-diff "^2.0.0" xdg-basedir "^3.0.0" -uplot@1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/uplot/-/uplot-1.5.0.tgz#c2814cd7a073ed12b0a1d2fc985f3d9cd33bf0cd" - integrity sha512-ghzlTe4rgoYiM98pMUJCplQhSmhyJV8Pv+obV3sHDoC+VBrZDc8fxXnUNGUVcKhUW2eqyeO5D0huardirwOmHw== +uplot@1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/uplot/-/uplot-1.5.1.tgz#5d5e846f76af2fd913ae980c00249f953072ea90" + integrity sha512-R4SfT2P60jKlZdh+mW40U2WzrN7976XLKdA9IsZ1SWLgVryvrqx6uFY5lF+o7GsFUWIW0pJOzaE/03+1gzuhOw== upper-case@^1.1.1: version "1.1.3"