Files
grafana/public/app/features/alerting/unified/components/rule-editor/NeedHelpInfo.tsx
Alex Khomenko 25779bb6e5 Stack: Use the component from grafana/ui (#77543)
* grafana/ui: Move Stack out of unstable

* grafana/ui: Replace imports

* Replace the import from experimental

* Cleanup

* Remove invalid prop

* Add flexGrow

* Remove Stack used in Field

* Remove import
2023-11-06 18:15:52 +02:00

60 lines
1.6 KiB
TypeScript

import { css } from '@emotion/css';
import React from 'react';
import { GrafanaTheme2 } from '@grafana/data';
import { Icon, Text, Toggletip, useStyles2, Stack } from '@grafana/ui';
interface NeedHelpInfoProps {
contentText: string | JSX.Element;
externalLink?: string;
linkText?: string;
title: string;
}
export function NeedHelpInfo({ contentText, externalLink, linkText, title }: NeedHelpInfoProps) {
const styles = useStyles2(getStyles);
return (
<Toggletip
content={<div className={styles.mutedText}>{contentText}</div>}
title={
<Stack gap={1} direction="row">
<Icon name="question-circle" />
{title}
</Stack>
}
footer={
externalLink ? (
<a href={externalLink} target="_blank" rel="noreferrer">
<Stack direction="row" gap={0.5} alignItems="center">
<Text color="link">
{linkText} <Icon size="sm" name="external-link-alt" />
</Text>
</Stack>
</a>
) : undefined
}
closeButton={true}
placement="bottom-start"
>
<div className={styles.helpInfo}>
<Stack direction="row" alignItems="center" gap={0.5}>
<Icon name="question-circle" size="sm" />
<Text variant="bodySmall" color="primary">
Need help?
</Text>
</Stack>
</div>
</Toggletip>
);
}
const getStyles = (theme: GrafanaTheme2) => ({
mutedText: css`
color: ${theme.colors.text.secondary};
font-size: ${theme.typography.size.sm};
`,
helpInfo: css`
cursor: pointer;
text-decoration: underline;
`,
});