{"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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"}