@grafana/ui
Version:
Grafana Components Library
1 lines • 14.7 kB
Source Map (JSON)
{"version":3,"file":"renderers.cjs","sources":["../../../../../../src/components/Table/TableNG/Cells/renderers.tsx"],"sourcesContent":["import { clsx } from 'clsx';\nimport { memo, type MemoExoticComponent, type NamedExoticComponent } from 'react';\n\nimport { type Field, FieldType, type GrafanaTheme2, isDataFrame, isTimeSeriesFrame } from '@grafana/data';\n\nimport { TableCellDisplayMode, type TableCellOptions, type TableCustomCellOptions } from '../../types';\nimport {\n type TableCellRenderer,\n type TableCellRendererProps,\n type TableCellStyleOptions,\n type TableCellStyles,\n} from '../types';\nimport { getCellOptions } from '../utils';\n\nimport { ActionsCell, getStyles as getActionsCellStyles } from './ActionsCell';\nimport { AutoCell, getStyles as getAutoCellStyles, getJsonCellStyles } from './AutoCell';\nimport { BarGaugeCell } from './BarGaugeCell';\nimport { DataLinksCell, getStyles as getDataLinksStyles } from './DataLinksCell';\nimport { GeoCell, getStyles as getGeoCellStyles } from './GeoCell';\nimport { ImageCell, getStyles as getImageStyles } from './ImageCell';\nimport { MarkdownCell, getStyles as getMarkdownCellStyles } from './MarkdownCell';\nimport { PillCell, getStyles as getPillStyles } from './PillCell';\nimport { SparklineCell, getStyles as getSparklineCellStyles } from './SparklineCell';\n\nconst wrapComponentInMemo = <P extends object>(fn: React.FunctionComponent<P>, name: string) => {\n const result = memo<P>(fn);\n result.displayName = name;\n return result;\n};\n\nexport const AutoCellRenderer = wrapComponentInMemo(\n (props: TableCellRendererProps) => <AutoCell value={props.value} field={props.field} rowIdx={props.rowIdx} />,\n 'AutoCellRenderer'\n);\n\nfunction isCustomCellOptions(options: TableCellOptions): options is TableCustomCellOptions {\n return options.type === TableCellDisplayMode.Custom;\n}\n\nfunction mixinAutoCellStyles(fn: TableCellStyles): TableCellStyles {\n return (theme, options) => {\n const styles = fn(theme, options);\n return clsx(styles, getAutoCellStyles(theme, options));\n };\n}\n\ninterface CellRegistryEntry {\n renderer: MemoExoticComponent<TableCellRenderer> | NamedExoticComponent<TableCellRendererProps>;\n getStyles?: TableCellStyles;\n testField?: (field: Field) => boolean;\n}\n\nconst CELL_REGISTRY: Record<TableCellOptions['type'], CellRegistryEntry> = {\n [TableCellDisplayMode.Auto]: {\n renderer: AutoCellRenderer,\n getStyles: getAutoCellStyles,\n },\n [TableCellDisplayMode.ColorBackground]: {\n renderer: AutoCellRenderer,\n getStyles: getAutoCellStyles,\n },\n [TableCellDisplayMode.ColorText]: {\n renderer: AutoCellRenderer,\n getStyles: getAutoCellStyles,\n },\n [TableCellDisplayMode.JSONView]: {\n renderer: AutoCellRenderer,\n getStyles: mixinAutoCellStyles(getJsonCellStyles),\n },\n [TableCellDisplayMode.Actions]: {\n renderer: wrapComponentInMemo(\n (props: TableCellRendererProps) => (\n <ActionsCell field={props.field} rowIdx={props.rowIdx} getActions={props.getActions ?? (() => [])} />\n ),\n 'ActionsCellRenderer'\n ),\n getStyles: getActionsCellStyles,\n },\n [TableCellDisplayMode.DataLinks]: {\n renderer: wrapComponentInMemo(\n (props: TableCellRendererProps) => <DataLinksCell field={props.field} rowIdx={props.rowIdx} />,\n 'DataLinksCellRenderer'\n ),\n getStyles: getDataLinksStyles,\n },\n [TableCellDisplayMode.Gauge]: {\n renderer: wrapComponentInMemo(\n (props: TableCellRendererProps) => (\n <BarGaugeCell\n field={props.field}\n value={props.value}\n theme={props.theme}\n height={props.height}\n width={props.width}\n rowIdx={props.rowIdx}\n />\n ),\n 'BarGaugeCellRenderer'\n ),\n },\n [TableCellDisplayMode.Sparkline]: {\n // eslint-disable-next-line react/display-name\n renderer: wrapComponentInMemo(\n (props: TableCellRendererProps) => (\n <SparklineCell\n value={props.value}\n field={props.field}\n timeRange={props.timeRange}\n rowIdx={props.rowIdx}\n theme={props.theme}\n width={props.width}\n />\n ),\n 'SparklineCellRenderer'\n ),\n getStyles: getSparklineCellStyles,\n },\n [TableCellDisplayMode.Geo]: {\n renderer: wrapComponentInMemo(\n (props: TableCellRendererProps) => <GeoCell value={props.value} height={props.height} />,\n 'GeoCellRenderer'\n ),\n getStyles: getGeoCellStyles,\n },\n [TableCellDisplayMode.Image]: {\n renderer: wrapComponentInMemo(\n (props: TableCellRendererProps) => (\n <ImageCell cellOptions={props.cellOptions} field={props.field} value={props.value} rowIdx={props.rowIdx} />\n ),\n 'ImageCellRenderer'\n ),\n getStyles: getImageStyles,\n },\n [TableCellDisplayMode.Pill]: {\n renderer: wrapComponentInMemo(\n (props: TableCellRendererProps) => (\n <PillCell\n rowIdx={props.rowIdx}\n field={props.field}\n theme={props.theme}\n getTextColorForBackground={props.getTextColorForBackground}\n />\n ),\n 'PillCellRenderer'\n ),\n getStyles: getPillStyles,\n testField: (field: Field) =>\n field.type === FieldType.string ||\n (field.type === FieldType.other && field.values.some((val) => Array.isArray(val))),\n },\n [TableCellDisplayMode.Markdown]: {\n renderer: wrapComponentInMemo(\n (props: TableCellRendererProps) => (\n <MarkdownCell field={props.field} rowIdx={props.rowIdx} disableSanitizeHtml={props.disableSanitizeHtml} />\n ),\n 'MarkdownCellRenderer'\n ),\n getStyles: getMarkdownCellStyles,\n testField: (field: Field) => field.type === FieldType.string,\n },\n [TableCellDisplayMode.Custom]: {\n renderer: wrapComponentInMemo((props: TableCellRendererProps) => {\n if (!isCustomCellOptions(props.cellOptions) || !props.cellOptions.cellComponent) {\n return null; // nonsensical case, but better to typeguard it than throw.\n }\n const CustomCellComponent = props.cellOptions.cellComponent;\n return (\n <CustomCellComponent field={props.field} rowIndex={props.rowIdx} frame={props.frame} value={props.value} />\n );\n }, 'CustomCellRenderer'),\n },\n};\n\n/** @internal */\nexport function getCellRenderer(\n field: Field,\n cellOptions: TableCellOptions = getCellOptions(field)\n): TableCellRenderer {\n const cellType = cellOptions?.type ?? TableCellDisplayMode.Auto;\n if (cellType === TableCellDisplayMode.Auto) {\n return CELL_REGISTRY[getAutoRendererDisplayMode(field)].renderer;\n }\n\n // if the field fails the test for a specific renderer, fallback to Auto\n if (CELL_REGISTRY[cellType]?.testField && CELL_REGISTRY[cellType].testField(field) !== true) {\n return AutoCellRenderer;\n }\n\n // cautious fallback to Auto renderer in case some garbage cell type has been provided.\n return CELL_REGISTRY[cellType]?.renderer ?? AutoCellRenderer;\n}\n\n/** @internal */\nexport function getCellSpecificStyles(\n cellType: TableCellOptions['type'],\n field: Field,\n theme: GrafanaTheme2,\n options: TableCellStyleOptions\n): string | undefined {\n if (cellType === TableCellDisplayMode.Auto) {\n return getAutoRendererStyles(theme, options, field);\n }\n return CELL_REGISTRY[cellType]?.getStyles?.(theme, options);\n}\n\n/** @internal */\nfunction getAutoRendererStyles(theme: GrafanaTheme2, options: TableCellStyleOptions, field: Field): string | undefined {\n const impliedDisplayMode = getAutoRendererDisplayMode(field);\n if (impliedDisplayMode !== TableCellDisplayMode.Auto) {\n return CELL_REGISTRY[impliedDisplayMode]?.getStyles?.(theme, options);\n }\n return getAutoCellStyles(theme, options);\n}\n\n/** @internal */\nexport function getAutoRendererDisplayMode(field: Field): TableCellOptions['type'] {\n if (field.type === FieldType.geo) {\n return TableCellDisplayMode.Geo;\n }\n if (field.type === FieldType.frame) {\n const firstValue = field.values[0];\n if (isDataFrame(firstValue) && isTimeSeriesFrame(firstValue)) {\n return TableCellDisplayMode.Sparkline;\n }\n }\n return TableCellDisplayMode.Auto;\n}\n"],"names":["memo","jsx","AutoCell","TableCellDisplayMode","clsx","getAutoCellStyles","getJsonCellStyles","ActionsCell","getActionsCellStyles","DataLinksCell","getDataLinksStyles","BarGaugeCell","SparklineCell","getSparklineCellStyles","GeoCell","getGeoCellStyles","ImageCell","getImageStyles","PillCell","getPillStyles","FieldType","MarkdownCell","getMarkdownCellStyles","getCellOptions","isDataFrame","isTimeSeriesFrame"],"mappings":"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"}