UNPKG

@grafana/ui

Version:
1 lines 11.9 kB
{"version":3,"file":"utils.mjs","sources":["../../../../src/components/VizTooltip/utils.ts"],"sourcesContent":["import { FALLBACK_COLOR, Field, FieldType, formattedValueToString, getFieldColorModeForField } from '@grafana/data';\nimport { SortOrder, TooltipDisplayMode } from '@grafana/schema';\n\nimport { ColorIndicatorStyles } from './VizTooltipColorIndicator';\nimport { ColorIndicator, ColorPlacement, VizTooltipItem } from './types';\n\nexport const calculateTooltipPosition = (\n xPos = 0,\n yPos = 0,\n tooltipWidth = 0,\n tooltipHeight = 0,\n xOffset = 0,\n yOffset = 0,\n windowWidth = 0,\n windowHeight = 0\n) => {\n let x = xPos;\n let y = yPos;\n\n const overflowRight = Math.max(xPos + xOffset + tooltipWidth - (windowWidth - xOffset), 0);\n const overflowLeft = Math.abs(Math.min(xPos - xOffset - tooltipWidth - xOffset, 0));\n const wouldOverflowRight = overflowRight > 0;\n const wouldOverflowLeft = overflowLeft > 0;\n\n const overflowBelow = Math.max(yPos + yOffset + tooltipHeight - (windowHeight - yOffset), 0);\n const overflowAbove = Math.abs(Math.min(yPos - yOffset - tooltipHeight - yOffset, 0));\n const wouldOverflowBelow = overflowBelow > 0;\n const wouldOverflowAbove = overflowAbove > 0;\n\n if (wouldOverflowRight && wouldOverflowLeft) {\n x = overflowRight > overflowLeft ? xOffset : windowWidth - xOffset - tooltipWidth;\n } else if (wouldOverflowRight) {\n x = xPos - xOffset - tooltipWidth;\n } else {\n x = xPos + xOffset;\n }\n\n if (wouldOverflowBelow && wouldOverflowAbove) {\n y = overflowBelow > overflowAbove ? yOffset : windowHeight - yOffset - tooltipHeight;\n } else if (wouldOverflowBelow) {\n y = yPos - yOffset - tooltipHeight;\n } else {\n y = yPos + yOffset;\n }\n return { x, y };\n};\n\nexport const getColorIndicatorClass = (colorIndicator: string, styles: ColorIndicatorStyles) => {\n switch (colorIndicator) {\n case ColorIndicator.series:\n return styles.series;\n case ColorIndicator.value:\n return styles.value;\n case ColorIndicator.hexagon:\n return styles.hexagon;\n case ColorIndicator.pie_1_4:\n return styles.pie_1_4;\n case ColorIndicator.pie_2_4:\n return styles.pie_2_4;\n case ColorIndicator.pie_3_4:\n return styles.pie_3_4;\n case ColorIndicator.marker_sm:\n return styles.marker_sm;\n case ColorIndicator.marker_md:\n return styles.marker_md;\n case ColorIndicator.marker_lg:\n return styles.marker_lg;\n default:\n return styles.value;\n }\n};\n\nconst numberCmp = (a: VizTooltipItem, b: VizTooltipItem) => a.numeric! - b.numeric!;\nconst collator = new Intl.Collator(undefined, { numeric: true, sensitivity: 'base' });\nconst stringCmp = (a: VizTooltipItem, b: VizTooltipItem) => collator.compare(`${a.value}`, `${b.value}`);\n\nexport const getContentItems = (\n fields: Field[],\n xField: Field,\n dataIdxs: Array<number | null>,\n seriesIdx: number | null | undefined,\n mode: TooltipDisplayMode,\n sortOrder: SortOrder,\n fieldFilter = (field: Field) => true,\n hideZeros = false,\n _restFields?: Field[]\n): VizTooltipItem[] => {\n let rows: VizTooltipItem[] = [];\n\n let allNumeric = true;\n\n for (let i = 0; i < fields.length; i++) {\n const field = fields[i];\n\n if (\n field === xField ||\n field.type === FieldType.time ||\n !fieldFilter(field) ||\n field.config.custom?.hideFrom?.tooltip\n ) {\n continue;\n }\n\n // in single mode, skip all but closest field\n if (mode === TooltipDisplayMode.Single && seriesIdx !== i) {\n continue;\n }\n\n let dataIdx = dataIdxs[i];\n\n // omit non-hovered\n if (dataIdx == null) {\n continue;\n }\n\n if (!(field.type === FieldType.number || field.type === FieldType.boolean || field.type === FieldType.enum)) {\n allNumeric = false;\n }\n\n const v = fields[i].values[dataIdx];\n\n if ((v == null && field.config.noValue == null) || (hideZeros && v === 0)) {\n continue;\n }\n\n const display = field.display!(v); // super expensive :(\n\n // sort NaN and non-numeric to bottom (regardless of sort order)\n const numeric = !Number.isNaN(display.numeric)\n ? display.numeric\n : sortOrder === SortOrder.Descending\n ? Number.MIN_SAFE_INTEGER\n : Number.MAX_SAFE_INTEGER;\n\n const { colorIndicator, colorPlacement } = getIndicatorAndPlacement(field);\n\n rows.push({\n label: field.state?.displayName ?? field.name,\n value: formattedValueToString(display),\n color: display.color ?? FALLBACK_COLOR,\n colorIndicator,\n colorPlacement,\n isActive: mode === TooltipDisplayMode.Multi && seriesIdx === i,\n numeric,\n lineStyle: field.config.custom?.lineStyle,\n });\n }\n\n _restFields?.forEach((field) => {\n if (!field.config.custom?.hideFrom?.tooltip) {\n const { colorIndicator, colorPlacement } = getIndicatorAndPlacement(field);\n const display = field.display!(field.values[dataIdxs[0]!]);\n\n rows.push({\n label: field.state?.displayName ?? field.name,\n value: formattedValueToString(display),\n color: FALLBACK_COLOR,\n colorIndicator,\n colorPlacement,\n lineStyle: field.config.custom?.lineStyle,\n isHiddenFromViz: true,\n });\n }\n });\n\n if (sortOrder !== SortOrder.None && rows.length > 1) {\n const cmp = allNumeric ? numberCmp : stringCmp;\n const mult = sortOrder === SortOrder.Descending ? -1 : 1;\n rows.sort((a, b) => mult * cmp(a, b));\n }\n\n return rows;\n};\n\nconst getIndicatorAndPlacement = (field: Field) => {\n const colorMode = getFieldColorModeForField(field);\n\n let colorIndicator = ColorIndicator.series;\n let colorPlacement = ColorPlacement.first;\n\n if (colorMode.isByValue) {\n colorIndicator = ColorIndicator.value;\n colorPlacement = ColorPlacement.trailing;\n }\n\n return { colorIndicator, colorPlacement };\n};\n"],"names":["_a","_b","_c","_d","_e"],"mappings":"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"}