UNPKG

@grafana/ui

Version:
1 lines 9.23 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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"}