{"version":3,"file":"TableCellInspector.mjs","sources":["../../../../src/components/Table/TableCellInspector.tsx"],"sourcesContent":["import { isString } from 'lodash';\nimport { useState } from 'react';\n\nimport { t, Trans } from '../../utils/i18n';\nimport { ClipboardButton } from '../ClipboardButton/ClipboardButton';\nimport { Drawer } from '../Drawer/Drawer';\nimport { Stack } from '../Layout/Stack/Stack';\nimport { CodeEditor } from '../Monaco/CodeEditor';\nimport { Tab, TabsBar } from '../Tabs';\n\nexport enum TableCellInspectorMode {\n  code = 'code',\n  text = 'text',\n}\n\ninterface TableCellInspectorProps {\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  value: any;\n  onDismiss: () => void;\n  mode: TableCellInspectorMode;\n}\n\nexport function TableCellInspector({ value, onDismiss, mode }: TableCellInspectorProps) {\n  let displayValue = value;\n  const [currentMode, setMode] = useState(mode);\n\n  if (isString(value)) {\n    const trimmedValue = value.trim();\n    // Exclude numeric strings like '123' from being displayed in code/JSON mode\n    if (trimmedValue[0] === '{' || trimmedValue[0] === '[' || mode === 'code') {\n      try {\n        value = JSON.parse(value);\n        displayValue = JSON.stringify(value, null, '  ');\n      } catch (error: any) {\n        // Display helpful error to help folks diagnose json errors\n        console.log(\n          'Failed to parse JSON in Table cell inspector (this will cause JSON to not print nicely): ',\n          error.message\n        );\n      }\n    }\n  } else {\n    displayValue = JSON.stringify(value);\n  }\n  let text = displayValue;\n\n  const tabs = [\n    {\n      label: 'Plain text',\n      value: 'text',\n    },\n    {\n      label: 'Code editor',\n      value: 'code',\n    },\n  ];\n\n  const changeTabs = () => {\n    setMode(currentMode === TableCellInspectorMode.text ? TableCellInspectorMode.code : TableCellInspectorMode.text);\n  };\n\n  const tabBar = (\n    <TabsBar>\n      {tabs.map((t, index) => (\n        <Tab key={`${t.value}-${index}`} label={t.label} active={t.value === currentMode} onChangeTab={changeTabs} />\n      ))}\n    </TabsBar>\n  );\n\n  return (\n    <Drawer onClose={onDismiss} title={t('grafana-ui.table.inspect-drawer-title', 'Inspect value')} tabs={tabBar}>\n      <Stack direction=\"column\" gap={2}>\n        <ClipboardButton icon=\"copy\" getText={() => text} style={{ marginLeft: 'auto', width: '200px' }}>\n          <Trans i18nKey=\"grafana-ui.table.copy\">Copy to Clipboard</Trans>\n        </ClipboardButton>\n        {currentMode === 'code' ? (\n          <CodeEditor\n            width=\"100%\"\n            height={500}\n            language=\"json\"\n            showLineNumbers={true}\n            showMiniMap={(text && text.length) > 100}\n            value={text}\n            readOnly={true}\n            wordWrap={true}\n          />\n        ) : (\n          <pre>{text}</pre>\n        )}\n      </Stack>\n    </Drawer>\n  );\n}\n"],"names":["TableCellInspectorMode","t"],"mappings":"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"}