UNPKG

@grafana/ui

Version:
1 lines 6.28 kB
{"version":3,"file":"CellActions.cjs","sources":["../../../../src/components/Table/CellActions.tsx"],"sourcesContent":["import { useCallback } from 'react';\nimport * as React from 'react';\n\nimport { t } from '@grafana/i18n';\n\nimport { type IconSize } from '../../types/icon';\nimport { IconButton } from '../IconButton/IconButton';\nimport { Stack } from '../Layout/Stack/Stack';\nimport { type TooltipPlacement } from '../Tooltip/types';\n\nimport { TableCellInspectorMode } from './TableCellInspector';\nimport { getTextAlign } from './cellUtils';\nimport { FILTER_FOR_OPERATOR, FILTER_OUT_OPERATOR, type TableCellProps } from './types';\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 const isPlainObj =\n typeof parsed === 'object' &&\n parsed !== null &&\n !Array.isArray(parsed) &&\n (Object.getPrototypeOf(parsed) === Object.prototype || Object.getPrototypeOf(parsed) === null);\n if (Array.isArray(parsed) || isPlainObj) {\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"],"mappings":"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"}