mirror of
https://github.com/grafana/grafana.git
synced 2025-02-03 20:21:01 -06:00
10badea19e
* Babel: Updates babel dependencies to latest version * Emotion: Upgrade form 10 to 11 * Fixing tests * Updated to use emotion/css instead in test
58 lines
1.6 KiB
TypeScript
58 lines
1.6 KiB
TypeScript
import React, { FC } from 'react';
|
|
import { css } from '@emotion/css';
|
|
import { stylesFactory, useTheme, Tab, TabsBar } from '@grafana/ui';
|
|
import { GrafanaTheme, SelectableValue, PanelData, getValueFormat, formattedValueToString } from '@grafana/data';
|
|
import { InspectTab } from '../inspector/types';
|
|
|
|
interface Props {
|
|
tab: InspectTab;
|
|
tabs: Array<{ label: string; value: InspectTab }>;
|
|
data?: PanelData;
|
|
onSelectTab: (tab: SelectableValue<InspectTab>) => void;
|
|
}
|
|
|
|
export const InspectSubtitle: FC<Props> = ({ tab, tabs, onSelectTab, data }) => {
|
|
const theme = useTheme();
|
|
const styles = getStyles(theme);
|
|
|
|
return (
|
|
<>
|
|
{data && <div className="muted">{formatStats(data)}</div>}
|
|
<TabsBar className={styles.tabsBar}>
|
|
{tabs.map((t, index) => {
|
|
return (
|
|
<Tab
|
|
key={`${t.value}-${index}`}
|
|
label={t.label}
|
|
active={t.value === tab}
|
|
onChangeTab={() => onSelectTab(t)}
|
|
/>
|
|
);
|
|
})}
|
|
</TabsBar>
|
|
</>
|
|
);
|
|
};
|
|
|
|
const getStyles = stylesFactory((theme: GrafanaTheme) => {
|
|
return {
|
|
tabsBar: css`
|
|
padding-left: ${theme.spacing.md};
|
|
margin: ${theme.spacing.lg} -${theme.spacing.sm} -${theme.spacing.lg} -${theme.spacing.lg};
|
|
`,
|
|
};
|
|
});
|
|
|
|
function formatStats(data: PanelData) {
|
|
const { request } = data;
|
|
if (!request) {
|
|
return '';
|
|
}
|
|
|
|
const queryCount = request.targets.length;
|
|
const requestTime = request.endTime ? request.endTime - request.startTime : 0;
|
|
const formatted = formattedValueToString(getValueFormat('ms')(requestTime));
|
|
|
|
return `${queryCount} queries with total query time of ${formatted}`;
|
|
}
|