grafana/public/app/features/explore/MetaInfoText.tsx
Ivana Huckova 3f39b4b601
Loki: Visually distinguish error logs for LogQL2 (#28359)
* Loki: Add errored logs and update UI

* Update messaging

* Add icon and tooltip for errored logs

* Update name of variable for more semantic meaning

* Add tests

* Update test

* Refactor, remove unnecessary state

* Update packages/grafana-data/src/types/logs.ts

* Update packages/grafana-ui/src/components/Logs/LogDetails.tsx

Co-authored-by: Giordano Ricci <gio.ricci@grafana.com>

Co-authored-by: Giordano Ricci <gio.ricci@grafana.com>
2020-10-21 19:11:32 +02:00

70 lines
1.8 KiB
TypeScript

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;
.logs-meta-item__error {
color: ${theme.palette.red};
}
`,
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};
`,
}));
export interface MetaItemProps {
label?: string;
value: string;
}
export const MetaInfoItem = memo(function MetaInfoItem(props: MetaItemProps) {
const theme = useContext(ThemeContext);
const style = getStyles(theme);
const { label, value } = props;
return (
<div className={style.metaItem}>
{label && <span className={style.metaLabel}>{label}:</span>}
<span className={style.metaValue}>{value}</span>
</div>
);
});
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 (
<div className={style.metaContainer}>
{metaItems.map((item, index) => (
<MetaInfoItem key={`${index}-${item.label}`} label={item.label} value={item.value} />
))}
</div>
);
});
export default MetaInfoText;