UNPKG

@grafana/ui

Version:
1 lines 6.29 kB
{"version":3,"file":"BarGaugeCell.mjs","sources":["../../../../../src/components/Table/Cells/BarGaugeCell.tsx"],"sourcesContent":["import { useState } from 'react';\n\nimport { type ThresholdsConfig, ThresholdsMode, VizOrientation, getFieldConfigWithMinMax } from '@grafana/data';\nimport { BarGaugeDisplayMode, BarGaugeValueMode, TableCellDisplayMode } from '@grafana/schema';\n\nimport { BarGauge } from '../../BarGauge/BarGauge';\nimport { DataLinksActionsTooltip, renderSingleLink } from '../DataLinksActionsTooltip';\nimport {\n type DataLinksActionsTooltipCoords,\n getAlignmentFactor,\n getCellOptions,\n getDataLinksActionsTooltipUtils,\n} from '../cellUtils';\nimport { type TableCellProps } from '../types';\n\nconst defaultScale: ThresholdsConfig = {\n mode: ThresholdsMode.Absolute,\n steps: [\n {\n color: 'blue',\n value: -Infinity,\n },\n {\n color: 'green',\n value: 20,\n },\n ],\n};\n\nexport const BarGaugeCell = (props: TableCellProps) => {\n const { field, innerWidth, tableStyles, cell, cellProps, row } = props;\n const displayValue = field.display!(cell.value);\n const cellOptions = getCellOptions(field);\n\n let config = getFieldConfigWithMinMax(field, false);\n if (!config.thresholds) {\n config = {\n ...config,\n thresholds: defaultScale,\n };\n }\n\n // Set default display mode and update if defined\n // and update the valueMode if defined\n let barGaugeMode: BarGaugeDisplayMode = BarGaugeDisplayMode.Gradient;\n let valueDisplayMode: BarGaugeValueMode | undefined = undefined;\n\n if (cellOptions.type === TableCellDisplayMode.Gauge) {\n barGaugeMode = cellOptions.mode ?? BarGaugeDisplayMode.Gradient;\n valueDisplayMode =\n cellOptions.valueDisplayMode !== undefined ? cellOptions.valueDisplayMode : BarGaugeValueMode.Text;\n }\n\n const getLinks = () => {\n if (typeof field.getLinks !== 'function') {\n return [];\n }\n\n return field.getLinks({ valueRowIndex: row.index });\n };\n\n const alignmentFactors = getAlignmentFactor(field, displayValue, cell.row.index);\n\n const renderComponent = () => {\n return (\n <BarGauge\n width={innerWidth}\n height={tableStyles.cellHeightInner}\n field={config}\n display={field.display}\n text={{ valueSize: 14 }}\n value={displayValue}\n orientation={VizOrientation.Horizontal}\n theme={tableStyles.theme}\n alignmentFactors={alignmentFactors}\n itemSpacing={1}\n lcdCellWidth={8}\n displayMode={barGaugeMode}\n valueDisplayMode={valueDisplayMode}\n />\n );\n };\n\n const [tooltipCoords, setTooltipCoords] = useState<DataLinksActionsTooltipCoords>();\n const { shouldShowLink, hasMultipleLinksOrActions } = getDataLinksActionsTooltipUtils(getLinks());\n const shouldShowTooltip = hasMultipleLinksOrActions && tooltipCoords !== undefined;\n\n const links = getLinks();\n\n return (\n // eslint-disable-next-line jsx-a11y/click-events-have-key-events, jsx-a11y/no-static-element-interactions\n <div\n {...cellProps}\n className={tableStyles.cellContainer}\n style={{ ...cellProps.style, cursor: hasMultipleLinksOrActions ? 'context-menu' : 'auto' }}\n onClick={({ clientX, clientY }) => {\n setTooltipCoords({ clientX, clientY });\n }}\n >\n {shouldShowLink ? (\n renderSingleLink(links[0], renderComponent())\n ) : shouldShowTooltip ? (\n <DataLinksActionsTooltip\n links={links}\n value={renderComponent()}\n coords={tooltipCoords}\n onTooltipClose={() => setTooltipCoords(undefined)}\n />\n ) : (\n renderComponent()\n )}\n </div>\n );\n};\n"],"names":[],"mappings":"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"}