diff --git a/public/app/features/explore/MetaInfoText.tsx b/public/app/features/explore/MetaInfoText.tsx new file mode 100644 index 00000000000..0256373e2c5 --- /dev/null +++ b/public/app/features/explore/MetaInfoText.tsx @@ -0,0 +1,65 @@ +import React, { memo, useContext } from 'react'; +import { css } from 'emotion'; +import { GrafanaTheme } from '@grafana/data'; +import { stylesFactory, ThemeContext } from '@grafana/ui'; + +const getStyles = stylesFactory((theme: GrafanaTheme) => ({ + metaContainer: css` + flex: 1; + color: ${theme.colors.textWeak}; + margin-bottom: ${theme.spacing.d}; + min-width: 30%; + display: flex; + `, + metaItem: css` + margin-right: ${theme.spacing.d}; + display: flex; + align-items: baseline; + `, + metaLabel: css` + margin-right: calc(${theme.spacing.d} / 2); + font-size: ${theme.typography.size.sm}; + font-weight: ${theme.typography.weight.semibold}; + `, + metaValue: css` + font-family: ${theme.typography.fontFamily.monospace}; + `, +})); + +interface MetaItemProps { + label?: string; + value: string; +} + +const MetaInfoItem = memo(function MetaInfoItem(props: MetaItemProps) { + const theme = useContext(ThemeContext); + const style = getStyles(theme); + const { label, value } = props; + + return ( +
+ {label && {label}:} + {value} +
+ ); +}); + +export interface MetaInfoTextProps { + metaItems: MetaItemProps[]; +} + +export const MetaInfoText = memo(function MetaInfoText(props: MetaInfoTextProps) { + const theme = useContext(ThemeContext); + const style = getStyles(theme); + const { metaItems } = props; + + return ( +
+ {metaItems.map((item, index) => ( + + ))} +
+ ); +}); + +export default MetaInfoText;