{"version":3,"file":"CellActions.cjs","sources":["../../../../src/components/Table/CellActions.tsx"],"sourcesContent":["import { isPlainObject } from 'lodash';\nimport { useCallback } from 'react';\nimport * as React from 'react';\n\nimport { t } from '@grafana/i18n';\n\nimport { IconSize } from '../../types/icon';\nimport { IconButton } from '../IconButton/IconButton';\nimport { Stack } from '../Layout/Stack/Stack';\nimport { TooltipPlacement } from '../Tooltip/types';\n\nimport { TableCellInspectorMode } from './TableCellInspector';\nimport { FILTER_FOR_OPERATOR, FILTER_OUT_OPERATOR, TableCellProps } from './types';\nimport { getTextAlign } from './utils';\n\ninterface CellActionProps extends TableCellProps {\n  previewMode: TableCellInspectorMode;\n}\n\ninterface CommonButtonProps {\n  size: IconSize;\n  showFilters?: boolean;\n  tooltipPlacement: TooltipPlacement;\n}\n\nexport function CellActions({\n  field,\n  cell,\n  previewMode,\n  showFilters,\n  onCellFilterAdded,\n  setInspectCell,\n}: CellActionProps) {\n  const isRightAligned = getTextAlign(field) === 'flex-end';\n  const inspectEnabled = Boolean(field.config.custom?.inspect);\n  const commonButtonProps: CommonButtonProps = {\n    size: 'sm',\n    tooltipPlacement: 'top',\n  };\n\n  const onFilterFor = useCallback(\n    (event: React.MouseEvent<HTMLButtonElement>) => {\n      if (onCellFilterAdded) {\n        onCellFilterAdded({ key: field.name, operator: FILTER_FOR_OPERATOR, value: cell.value });\n      }\n    },\n    [cell, field, onCellFilterAdded]\n  );\n  const onFilterOut = useCallback(\n    (event: React.MouseEvent<HTMLButtonElement>) => {\n      if (onCellFilterAdded) {\n        onCellFilterAdded({ key: field.name, operator: FILTER_OUT_OPERATOR, value: cell.value });\n      }\n    },\n    [cell, field, onCellFilterAdded]\n  );\n\n  return (\n    <div className={`cellActions${isRightAligned ? ' cellActionsLeft' : ''}`}>\n      <Stack gap={0.5}>\n        {inspectEnabled && (\n          <IconButton\n            name=\"eye\"\n            tooltip={t('grafana-ui.table.cell-inspect', 'Inspect value')}\n            onClick={() => {\n              if (setInspectCell) {\n                let mode = TableCellInspectorMode.text;\n                let inspectValue = cell.value;\n                try {\n                  const parsed = typeof inspectValue === 'string' ? JSON.parse(inspectValue) : inspectValue;\n                  if (Array.isArray(parsed) || isPlainObject(parsed)) {\n                    inspectValue = JSON.stringify(parsed, null, 2);\n                    mode = TableCellInspectorMode.code;\n                  }\n                } catch {\n                  // do nothing\n                }\n                setInspectCell({ value: inspectValue, mode });\n              }\n            }}\n            {...commonButtonProps}\n          />\n        )}\n        {showFilters && (\n          <IconButton\n            name={'search-plus'}\n            onClick={onFilterFor}\n            tooltip={t('grafana-ui.table.cell-filter-on', 'Filter for value')}\n            {...commonButtonProps}\n          />\n        )}\n        {showFilters && (\n          <IconButton\n            name={'search-minus'}\n            onClick={onFilterOut}\n            tooltip={t('grafana-ui.table.cell-filter-out', 'Filter out value')}\n            {...commonButtonProps}\n          />\n        )}\n      </Stack>\n    </div>\n  );\n}\n"],"names":["getTextAlign","useCallback","FILTER_FOR_OPERATOR","FILTER_OUT_OPERATOR","jsx","jsxs","Stack","IconButton","t","TableCellInspectorMode","isPlainObject"],"mappings":"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"}