UNPKG

@grafana/alerting

Version:

Grafana Alerting Library – Build vertical integrations on top of the industry-leading alerting solution

1 lines 5.95 kB
{"version":3,"file":"StateText.cjs","sources":["../../../../../../src/grafana/rules/components/state/StateText.tsx"],"sourcesContent":["import { type ComponentProps, type ReactNode } from 'react';\n\nimport { Trans } from '@grafana/i18n';\nimport { Icon, Stack, Text } from '@grafana/ui';\n\nimport { StateDot } from './StateDot';\nimport { type Health, type 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 'inhibited':\n color = 'info';\n stateLabel = 'Inhibited';\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 isRecordingError = health === 'error';\n const recordingText = isRecordingError ? 'Recording error' : 'Recording';\n const recordingColor: TextColor = isRecordingError ? 'error' : 'success';\n\n return <InnerText color={recordingColor} text={recordingText} />;\n }\n\n return <InnerText color={color} text={stateLabel} />;\n};\n\n// the generic badge component\ntype TextColor = 'success' | 'error' | 'warning' | 'unknown' | 'info';\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 let textColor: ComponentProps<typeof Text>['color'];\n if (color === 'unknown') {\n textColor = 'secondary';\n } else {\n textColor = color;\n }\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":["jsx","jsxs","Stack","StateDot","Text","Icon","Trans"],"mappings":"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"}