{"version":3,"file":"StateText.cjs","sources":["../../../../../../src/grafana/rules/components/state/StateText.tsx"],"sourcesContent":["import { ReactNode } from 'react';\n\nimport { Trans } from '@grafana/i18n';\nimport { Icon, Stack, Text } from '@grafana/ui';\n\nimport { StateDot } from './StateDot';\nimport { Health, State } from './types';\n\n// we're making a distinction here between the \"state\" of the rule and its \"health\".\n// When the type is \"recording\" we only support the health property.\ntype CommonStateTextProps = {\n  health?: Health;\n  isPaused?: boolean;\n};\n\ninterface AlertingStateTextProps extends CommonStateTextProps {\n  type?: 'alerting';\n  state?: State;\n}\n\ninterface RecordingStateTextProps extends CommonStateTextProps {\n  type: 'recording';\n  state?: never;\n}\n\ntype StateTextProps = AlertingStateTextProps | RecordingStateTextProps;\n\nexport const StateText = ({ state, health, type = 'alerting', isPaused = false }: StateTextProps) => {\n  if (isPaused) {\n    return <PausedText />;\n  }\n\n  let stateLabel: string;\n  let color: TextColor;\n\n  switch (state) {\n    case 'normal':\n      color = 'success';\n      stateLabel = 'Normal';\n      break;\n    case 'firing':\n      color = 'error';\n      stateLabel = 'Firing';\n      break;\n    case 'pending':\n      color = 'warning';\n      stateLabel = 'Pending';\n      break;\n    case 'recovering':\n      color = 'warning';\n      stateLabel = 'Recovering';\n      break;\n    case 'unknown':\n    default:\n      color = 'unknown';\n      stateLabel = 'Unknown';\n      break;\n  }\n\n  // if the rule is in \"error\" health we don't really care about the state\n  if (health === 'error') {\n    color = 'error';\n    stateLabel = 'Error';\n  }\n\n  if (health === 'nodata') {\n    color = 'warning';\n    stateLabel = 'No data';\n  }\n\n  // recording rule badge\n  // @TODO do recording rules support \"nodata\" state?\n  if (type === 'recording') {\n    const text = health === 'error' ? 'Recording error' : 'Recording';\n    const color = health === 'error' ? 'error' : 'success';\n\n    return <InnerText color={color} text={text} />;\n  }\n\n  return <InnerText color={color} text={stateLabel} />;\n};\n\n// the generic badge component\ntype TextColor = 'success' | 'error' | 'warning' | 'unknown';\n\ninterface InnerTextProps {\n  color: TextColor;\n  text: NonNullable<ReactNode>;\n}\n\n// the inner badge component doesn't care about the semantics of \"state\" or \"health\" but just renders\n// a badge in a specific text color and a dot in matching color.\n// We currently don't expose this component outside of this file.\nfunction InnerText({ color, text }: InnerTextProps) {\n  const textColor = color === 'unknown' ? 'secondary' : color;\n\n  return (\n    <Stack direction=\"row\" gap={0.5} wrap=\"nowrap\" flex=\"0 0 auto\" alignItems=\"center\">\n      <StateDot color={color} />\n      <Text variant=\"bodySmall\" color={textColor}>\n        {text}\n      </Text>\n    </Stack>\n  );\n}\n\nfunction PausedText() {\n  return (\n    <Text variant=\"bodySmall\" color=\"warning\">\n      <Stack direction=\"row\" gap={0.5} wrap=\"nowrap\" flex=\"0 0 auto\" alignItems=\"center\">\n        <Icon name=\"pause\" size=\"xs\" />\n        <Trans i18nKey=\"alerting.paused-badge.paused\">Paused</Trans>\n      </Stack>\n    </Text>\n  );\n}\n"],"names":["color","jsx","jsxs","Stack","StateDot","Text","Icon","Trans"],"mappings":"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"}