UNPKG

@grafana/ui

Version:
1 lines 9.2 kB
{"version":3,"file":"DefaultCell.mjs","sources":["../../../../../src/components/Table/Cells/DefaultCell.tsx"],"sourcesContent":["import { cx } from '@emotion/css';\nimport { ReactElement } from 'react';\nimport * as React from 'react';\n\nimport { DisplayValue, formattedValueToString } from '@grafana/data';\nimport { TableCellDisplayMode } from '@grafana/schema';\n\nimport { useStyles2 } from '../../../themes';\nimport { getCellLinks } from '../../../utils';\nimport { clearLinkButtonStyles } from '../../Button';\nimport { DataLinksContextMenu } from '../../DataLinks/DataLinksContextMenu';\nimport { CellActions } from '../CellActions';\nimport { TableCellInspectorMode } from '../TableCellInspector';\nimport { TableStyles } from '../TableRT/styles';\nimport { TableCellProps, CustomCellRendererProps, TableCellOptions } from '../types';\nimport { getCellColors, getCellOptions } 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 const hasLinks = Boolean(getCellLinks(field, row)?.length);\n const clearButtonStyle = useStyles2(clearLinkButtonStyles);\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\n return (\n <div key={key} {...rest} className={cellStyle}>\n {hasLinks ? (\n <DataLinksContextMenu links={() => getCellLinks(field, row) || []}>\n {(api) => {\n if (api.openMenu) {\n return (\n <button\n className={cx(clearButtonStyle, getLinkStyle(tableStyles, cellOptions, api.targetClassName))}\n onClick={api.openMenu}\n >\n {value}\n </button>\n );\n } else {\n return <div className={getLinkStyle(tableStyles, cellOptions, api.targetClassName)}>{value}</div>;\n }\n }}\n </DataLinksContextMenu>\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\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 definied 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\nfunction getLinkStyle(tableStyles: TableStyles, cellOptions: TableCellOptions, targetClassName: string | undefined) {\n if (cellOptions.type === TableCellDisplayMode.Auto) {\n return cx(tableStyles.cellLink, targetClassName);\n }\n\n return cx(tableStyles.cellLinkForColoredCell, targetClassName);\n}\n"],"names":[],"mappings":"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"}