grafana/public/app/features/explore/Graph/exploreGraphStyleUtils.ts
Giordano Ricci 2a9381e998
Explore: Refactor ExploreGraph (#58660)
* WIP

* revert collapse changes

* use HorizontalGroup instead of custom styles

* fix tests

* use import aliases
2022-11-16 11:16:27 +01:00

58 lines
1.8 KiB
TypeScript

import produce from 'immer';
import { FieldConfigSource } from '@grafana/data';
import { GraphDrawStyle, GraphFieldConfig, StackingMode } from '@grafana/schema';
import { ExploreGraphStyle } from 'app/types';
export type FieldConfig = FieldConfigSource<GraphFieldConfig>;
export function applyGraphStyle(config: FieldConfig, style: ExploreGraphStyle): FieldConfig {
return produce(config, (draft) => {
if (draft.defaults.custom === undefined) {
draft.defaults.custom = {};
}
const { custom } = draft.defaults;
if (custom.stacking === undefined) {
custom.stacking = { group: 'A' };
}
switch (style) {
case 'lines':
custom.drawStyle = GraphDrawStyle.Line;
custom.stacking.mode = StackingMode.None;
custom.fillOpacity = 0;
break;
case 'bars':
custom.drawStyle = GraphDrawStyle.Bars;
custom.stacking.mode = StackingMode.None;
custom.fillOpacity = 100;
break;
case 'points':
custom.drawStyle = GraphDrawStyle.Points;
custom.stacking.mode = StackingMode.None;
custom.fillOpacity = 0;
break;
case 'stacked_lines':
custom.drawStyle = GraphDrawStyle.Line;
custom.stacking.mode = StackingMode.Normal;
custom.fillOpacity = 100;
break;
case 'stacked_bars':
custom.drawStyle = GraphDrawStyle.Bars;
custom.stacking.mode = StackingMode.Normal;
custom.fillOpacity = 100;
break;
default: {
// should never happen
// NOTE: casting to `never` will cause typescript
// to verify that the switch statement checks every possible
// enum-value
const invalidValue: never = style;
throw new Error(`Invalid graph-style: ${invalidValue}`);
}
}
});
}