@grafana/ui
Version:
Grafana Components Library
1 lines • 10.9 kB
Source Map (JSON)
{"version":3,"file":"utils.mjs","sources":["../../../../src/graveyard/GraphNG/utils.ts"],"sourcesContent":["import { DataFrame, Field, FieldConfig, FieldType, outerJoinDataFrames, TimeRange } from '@grafana/data';\nimport {\n AxisPlacement,\n GraphDrawStyle,\n GraphFieldConfig,\n ScaleDistribution,\n ScaleDistributionConfig,\n} from '@grafana/schema';\n\nimport { FIXED_UNIT } from '../../components/uPlot/types';\n\nimport { applyNullInsertThreshold } from './nullInsertThreshold';\nimport { nullToUndefThreshold } from './nullToUndefThreshold';\nimport { XYFieldMatchers } from './types';\n\nfunction isVisibleBarField(f: Field) {\n return (\n f.type === FieldType.number && f.config.custom?.drawStyle === GraphDrawStyle.Bars && !f.config.custom?.hideFrom?.viz\n );\n}\n\nexport function getRefField(frame: DataFrame, refFieldName?: string | null) {\n return frame.fields.find((field) => {\n // note: getFieldDisplayName() would require full DF[]\n return refFieldName != null ? field.name === refFieldName : field.type === FieldType.time;\n });\n}\n\n// will mutate the DataFrame's fields' values\nfunction applySpanNullsThresholds(frame: DataFrame, refFieldName?: string | null) {\n const refField = getRefField(frame, refFieldName);\n\n let refValues = refField?.values;\n\n for (let i = 0; i < frame.fields.length; i++) {\n let field = frame.fields[i];\n\n if (field === refField || isVisibleBarField(field)) {\n continue;\n }\n\n let spanNulls = field.config.custom?.spanNulls;\n\n if (typeof spanNulls === 'number') {\n if (spanNulls !== -1 && refValues) {\n field.values = nullToUndefThreshold(refValues, field.values, spanNulls);\n }\n }\n }\n\n return frame;\n}\n\nexport function preparePlotFrame(frames: DataFrame[], dimFields: XYFieldMatchers, timeRange?: TimeRange | null) {\n let xField: Field;\n loop: for (let frame of frames) {\n for (let field of frame.fields) {\n if (dimFields.x(field, frame, frames)) {\n xField = field;\n break loop;\n }\n }\n }\n\n // apply null insertions at interval\n frames = frames.map((frame) => {\n if (!xField?.state?.nullThresholdApplied) {\n return applyNullInsertThreshold({\n frame,\n refFieldName: xField.name,\n refFieldPseudoMin: timeRange?.from.valueOf(),\n refFieldPseudoMax: timeRange?.to.valueOf(),\n });\n } else {\n return frame;\n }\n });\n\n let numBarSeries = 0;\n\n frames.forEach((frame) => {\n frame.fields.forEach((f) => {\n if (isVisibleBarField(f)) {\n // prevent minesweeper-expansion of nulls (gaps) when joining bars\n // since bar width is determined from the minimum distance between non-undefined values\n // (this strategy will still retain any original pre-join nulls, though)\n f.config.custom = {\n ...f.config.custom,\n spanNulls: -1,\n };\n\n numBarSeries++;\n }\n });\n });\n\n // to make bar widths of all series uniform (equal to narrowest bar series), find smallest distance between x points\n let minXDelta = Infinity;\n\n if (numBarSeries > 1) {\n frames.forEach((frame) => {\n if (!frame.fields.some(isVisibleBarField)) {\n return;\n }\n\n const xVals = xField.values;\n\n for (let i = 0; i < xVals.length; i++) {\n if (i > 0) {\n minXDelta = Math.min(minXDelta, xVals[i] - xVals[i - 1]);\n }\n }\n });\n }\n\n let alignedFrame = outerJoinDataFrames({\n frames,\n joinBy: dimFields.x,\n keep: dimFields.y,\n keepOriginIndices: true,\n });\n\n if (alignedFrame) {\n alignedFrame = applySpanNullsThresholds(alignedFrame, xField!.name);\n\n // append 2 null vals at minXDelta to bar series\n if (minXDelta !== Infinity) {\n alignedFrame.fields.forEach((f, fi) => {\n let vals = f.values;\n\n if (fi === 0) {\n let lastVal = vals[vals.length - 1];\n vals.push(lastVal + minXDelta, lastVal + 2 * minXDelta);\n } else if (isVisibleBarField(f)) {\n vals.push(null, null);\n } else {\n vals.push(undefined, undefined);\n }\n });\n\n alignedFrame.length += 2;\n }\n\n return alignedFrame;\n }\n\n return null;\n}\n\nexport function buildScaleKey(config: FieldConfig<GraphFieldConfig>, fieldType: FieldType) {\n const defaultPart = 'na';\n\n const scaleRange = `${config.min !== undefined ? config.min : defaultPart}-${\n config.max !== undefined ? config.max : defaultPart\n }`;\n\n const scaleSoftRange = `${config.custom?.axisSoftMin !== undefined ? config.custom.axisSoftMin : defaultPart}-${\n config.custom?.axisSoftMax !== undefined ? config.custom.axisSoftMax : defaultPart\n }`;\n\n const scalePlacement = `${\n config.custom?.axisPlacement !== undefined ? config.custom?.axisPlacement : AxisPlacement.Auto\n }`;\n\n const scaleUnit = config.unit ?? FIXED_UNIT;\n\n const scaleDistribution = config.custom?.scaleDistribution\n ? getScaleDistributionPart(config.custom.scaleDistribution)\n : ScaleDistribution.Linear;\n\n const scaleLabel = Boolean(config.custom?.axisLabel) ? config.custom!.axisLabel : defaultPart;\n\n return `${scaleUnit}/${scaleRange}/${scaleSoftRange}/${scalePlacement}/${scaleDistribution}/${scaleLabel}/${fieldType}`;\n}\n\nfunction getScaleDistributionPart(config: ScaleDistributionConfig) {\n if (config.type === ScaleDistribution.Log) {\n return `${config.type}${config.log}`;\n }\n return config.type;\n}\n"],"names":[],"mappings":"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"}