datatrails: UI improvements (#81427)

* fix: datatrails: limit width of metric description

* fix: datatrails: use vertical radio list for long label list

* fix: datatrails: reduce spacing between header items

* fix: datatrails: reduce gap in lower toolbar

* fix: change to use Select component for longer lists
This commit is contained in:
Darren Janeczek 2024-01-31 09:27:44 -05:00 committed by GitHub
parent a7f2249878
commit c8f47e0c54
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 30 additions and 8 deletions

View File

@ -19,7 +19,7 @@ import {
SceneQueryRunner, SceneQueryRunner,
VariableDependencyConfig, VariableDependencyConfig,
} from '@grafana/scenes'; } from '@grafana/scenes';
import { Button, Field, RadioButtonGroup, useStyles2 } from '@grafana/ui'; import { Button, Field, Select, RadioButtonGroup, useStyles2 } from '@grafana/ui';
import { ALL_VARIABLE_VALUE } from 'app/features/variables/constants'; import { ALL_VARIABLE_VALUE } from 'app/features/variables/constants';
import { getAutoQueriesForMetric } from '../AutomaticMetricQueries/AutoQueryEngine'; import { getAutoQueriesForMetric } from '../AutomaticMetricQueries/AutoQueryEngine';
@ -109,7 +109,11 @@ export class BreakdownScene extends SceneObjectBase<BreakdownSceneState> {
this.setState(stateUpdate); this.setState(stateUpdate);
} }
public onChange = (value: string) => { public onChange = (value?: string) => {
if (!value) {
return;
}
const variable = this.getVariable(); const variable = this.getVariable();
if (value === ALL_VARIABLE_VALUE) { if (value === ALL_VARIABLE_VALUE) {
@ -125,13 +129,26 @@ export class BreakdownScene extends SceneObjectBase<BreakdownSceneState> {
const { labels, body, loading, value } = model.useState(); const { labels, body, loading, value } = model.useState();
const styles = useStyles2(getStyles); const styles = useStyles2(getStyles);
const useHorizontalLabelSelector = labels.length <= 6;
return ( return (
<div className={styles.container}> <div className={styles.container}>
{loading && <div>Loading...</div>} {loading && <div>Loading...</div>}
<div className={styles.controls}> <div className={styles.controls}>
<Field label="By label"> {!loading && (
<RadioButtonGroup options={labels} value={value} onChange={model.onChange} /> <Field label="By label">
</Field> {useHorizontalLabelSelector ? (
<RadioButtonGroup options={labels} value={value} onChange={model.onChange} />
) : (
<Select
options={labels}
value={value}
onChange={(selected) => model.onChange(selected.value)}
className={styles.select}
/>
)}
</Field>
)}
{body instanceof LayoutSwitcher && ( {body instanceof LayoutSwitcher && (
<div className={styles.controlsRight}> <div className={styles.controlsRight}>
<body.Selector model={body} /> <body.Selector model={body} />
@ -172,6 +189,9 @@ function getStyles(theme: GrafanaTheme2) {
display: 'flex', display: 'flex',
justifyContent: 'flex-end', justifyContent: 'flex-end',
}), }),
select: css({
minWidth: theme.spacing(16),
}),
}; };
} }

View File

@ -92,7 +92,9 @@ export class MetricOverviewScene extends SceneObjectBase<MetricOverviewSceneStat
<> <>
<Stack direction="column" gap={0.5}> <Stack direction="column" gap={0.5}>
<Text weight={'medium'}>Description</Text> <Text weight={'medium'}>Description</Text>
{metadata?.help ? <div>{metadata?.help}</div> : <i>No description available</i>} <div style={{ maxWidth: 360 }}>
{metadata?.help ? <div>{metadata?.help}</div> : <i>No description available</i>}
</div>
</Stack> </Stack>
<Stack direction="column" gap={0.5}> <Stack direction="column" gap={0.5}>
<Text weight={'medium'}>Type</Text> <Text weight={'medium'}>Type</Text>

View File

@ -233,7 +233,7 @@ function getStyles(theme: GrafanaTheme2) {
}), }),
controls: css({ controls: css({
display: 'flex', display: 'flex',
gap: theme.spacing(2), gap: theme.spacing(1),
alignItems: 'flex-end', alignItems: 'flex-end',
flexWrap: 'wrap', flexWrap: 'wrap',
}), }),

View File

@ -162,7 +162,7 @@ export class MetricActionBar extends SceneObjectBase<MetricActionBarState> {
return ( return (
<Box paddingY={1}> <Box paddingY={1}>
<div className={styles.actions}> <div className={styles.actions}>
<Stack gap={2}> <Stack gap={1}>
<ToolbarButton <ToolbarButton
variant={'canvas'} variant={'canvas'}
icon="compass" icon="compass"