UNPKG

@grafana/ui

Version:
1 lines 9.28 kB
{"version":3,"file":"DefaultCell.mjs","sources":["../../../../../src/components/Table/Cells/DefaultCell.tsx"],"sourcesContent":["import { ReactElement, useState } from 'react';\nimport * as React from 'react';\n\nimport { DisplayValue, formattedValueToString } from '@grafana/data';\nimport { TableCellDisplayMode } from '@grafana/schema';\n\nimport { getCellLinks } from '../../../utils/table';\nimport { CellActions } from '../CellActions';\nimport { DataLinksActionsTooltip, renderSingleLink } from '../DataLinksActionsTooltip';\nimport { TableCellInspectorMode } from '../TableCellInspector';\nimport { TableStyles } from '../TableRT/styles';\nimport { TableCellProps, CustomCellRendererProps, TableCellOptions } from '../types';\nimport {\n DataLinksActionsTooltipCoords,\n getCellColors,\n getCellOptions,\n getDataLinksActionsTooltipUtils,\n tooltipOnClickHandler,\n} from '../utils';\n\nexport const DefaultCell = (props: TableCellProps) => {\n const { field, cell, tableStyles, row, cellProps, frame, rowStyled, rowExpanded, textWrapped, height } = props;\n const inspectEnabled = Boolean(field.config.custom?.inspect);\n const displayValue = field.display!(cell.value);\n\n const showFilters = props.onCellFilterAdded && field.config.filterable;\n const showActions = (showFilters && cell.value !== undefined) || inspectEnabled;\n const cellOptions = getCellOptions(field);\n let value: string | ReactElement;\n\n const OG_TWEET_LENGTH = 140; // 🙏\n\n if (cellOptions.type === TableCellDisplayMode.Custom) {\n const CustomCellComponent: React.ComponentType<CustomCellRendererProps> = cellOptions.cellComponent;\n value = <CustomCellComponent field={field} value={cell.value} rowIndex={row.index} frame={frame} />;\n } else {\n if (React.isValidElement(cell.value)) {\n value = cell.value;\n } else {\n value = formattedValueToString(displayValue);\n }\n }\n\n const isStringValue = typeof value === 'string';\n\n // Text should wrap when the content length is less than or equal to the length of an OG tweet and it contains whitespace\n const textShouldWrap = displayValue.text.length <= OG_TWEET_LENGTH && /\\s/.test(displayValue.text);\n const cellStyle = getCellStyle(\n tableStyles,\n cellOptions,\n displayValue,\n inspectEnabled,\n isStringValue,\n textShouldWrap,\n textWrapped,\n rowStyled,\n rowExpanded\n );\n\n if (isStringValue) {\n let justifyContent = cellProps.style?.justifyContent;\n\n if (justifyContent === 'flex-end') {\n cellProps.style = { ...cellProps.style, textAlign: 'right' };\n } else if (justifyContent === 'center') {\n cellProps.style = { ...cellProps.style, textAlign: 'center' };\n }\n }\n\n if (height) {\n cellProps.style = { ...cellProps.style, height };\n }\n\n if (textWrapped) {\n cellProps.style = { ...cellProps.style, textWrap: 'wrap' };\n }\n\n const { key, ...rest } = cellProps;\n const links = getCellLinks(field, row) || [];\n\n const [tooltipCoords, setTooltipCoords] = useState<DataLinksActionsTooltipCoords>();\n const { shouldShowLink, hasMultipleLinksOrActions } = getDataLinksActionsTooltipUtils(links);\n const shouldShowTooltip = hasMultipleLinksOrActions && tooltipCoords !== undefined;\n\n return (\n // eslint-disable-next-line jsx-a11y/click-events-have-key-events,jsx-a11y/no-static-element-interactions\n <div\n key={key}\n {...rest}\n className={cellStyle}\n style={{ ...cellProps.style, cursor: hasMultipleLinksOrActions ? 'context-menu' : 'auto' }}\n onClick={tooltipOnClickHandler(setTooltipCoords)}\n >\n {shouldShowLink ? (\n renderSingleLink(links[0], value, getLinkStyle(tableStyles, cellOptions))\n ) : shouldShowTooltip ? (\n <DataLinksActionsTooltip\n links={links}\n value={value}\n coords={tooltipCoords}\n onTooltipClose={() => setTooltipCoords(undefined)}\n />\n ) : isStringValue ? (\n `${value}`\n ) : (\n <div className={tableStyles.cellText}>{value}</div>\n )}\n\n {showActions && <CellActions {...props} previewMode={TableCellInspectorMode.text} showFilters={showFilters} />}\n </div>\n );\n};\n\nconst getLinkStyle = (tableStyles: TableStyles, cellOptions: TableCellOptions) => {\n if (cellOptions.type === TableCellDisplayMode.Auto) {\n return tableStyles.cellLink;\n }\n\n return tableStyles.cellLinkForColoredCell;\n};\n\nfunction getCellStyle(\n tableStyles: TableStyles,\n cellOptions: TableCellOptions,\n displayValue: DisplayValue,\n disableOverflowOnHover = false,\n isStringValue = false,\n shouldWrapText = false,\n textWrapped = false,\n rowStyled = false,\n rowExpanded = false\n) {\n // Setup color variables\n let textColor: string | undefined = undefined;\n let bgColor: string | undefined = undefined;\n let bgHoverColor: string | undefined = undefined;\n\n // Get colors\n const colors = getCellColors(tableStyles.theme, cellOptions, displayValue);\n textColor = colors.textColor;\n bgColor = colors.bgColor;\n bgHoverColor = colors.bgHoverColor;\n\n // If we have defined colors return those styles\n // Otherwise we return default styles\n return tableStyles.buildCellContainerStyle(\n textColor,\n bgColor,\n bgHoverColor,\n !disableOverflowOnHover,\n isStringValue,\n shouldWrapText,\n textWrapped,\n rowStyled,\n rowExpanded\n );\n}\n"],"names":[],"mappings":"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"}