Files
grafana/public/app/core/components/QueryOperationRow/OperationRowHelp.tsx
Ashley Harrison 47f8717149 React: Use new JSX transform (#88802)
* update eslint, tsconfig + esbuild to handle new jsx transform

* remove thing that breaks the new jsx transform

* remove react imports

* adjust grafana-icons build

* is this the correct syntax?

* try this

* well this was much easier than expected...

* change grafana-plugin-configs webpack config

* fixes

* fix lockfile

* fix 2 more violations

* use path.resolve instead of require.resolve

* remove react import

* fix react imports

* more fixes

* remove React import

* remove import React from docs

* remove another react import
2024-06-25 12:43:47 +01:00

52 lines
1.5 KiB
TypeScript

import { css, cx } from '@emotion/css';
import * as React from 'react';
import { GrafanaTheme2, renderMarkdown } from '@grafana/data';
import { useStyles2 } from '@grafana/ui';
export interface Props extends React.HTMLAttributes<HTMLDivElement> {
children?: React.ReactNode;
markdown?: string;
onRemove?: () => void;
styleOverrides?: { [key: string]: string };
}
export const OperationRowHelp = React.memo(
React.forwardRef<HTMLDivElement, Props>(
({ className, children, markdown, styleOverrides, onRemove, ...otherProps }, ref) => {
const styles = useStyles2((theme) => getStyles(theme, styleOverrides?.borderTop));
return (
<div className={cx(styles.wrapper, className)} {...otherProps} ref={ref}>
{markdown && markdownHelper(markdown)}
{children}
</div>
);
}
)
);
function markdownHelper(markdown: string) {
const helpHtml = renderMarkdown(markdown);
return <div className="markdown-html" dangerouslySetInnerHTML={{ __html: helpHtml }} />;
}
OperationRowHelp.displayName = 'OperationRowHelp';
const getStyles = (theme: GrafanaTheme2, borderTop?: string) => {
const borderRadius = theme.shape.radius.default;
const themeBackgroundColor = theme.colors.background.secondary;
return {
wrapper: css`
padding: ${theme.spacing(2)};
border: 2px solid ${themeBackgroundColor};
border-top: ${borderTop ? borderTop + themeBackgroundColor : 'none'};
border-radius: 0 0 ${borderRadius} ${borderRadius};
position: relative;
top: -4px;
`,
};
};