mirror of
https://github.com/grafana/grafana.git
synced 2025-02-20 11:48:34 -06:00
* Add and configure eslint-plugin-import * Fix the lint:ts npm command * Autofix + prettier all the files * Manually fix remaining files * Move jquery code in jest-setup to external file to safely reorder imports * Resolve issue caused by circular dependencies within Prometheus * Update .betterer.results * Fix missing // @ts-ignore * ignore iconBundle.ts * Fix missing // @ts-ignore
152 lines
4.5 KiB
TypeScript
152 lines
4.5 KiB
TypeScript
import {
|
|
Field,
|
|
FieldType,
|
|
getFieldDisplayName,
|
|
PanelOptionsEditorBuilder,
|
|
PanelPlugin,
|
|
SelectableValue,
|
|
} from '@grafana/data';
|
|
import { config } from '@grafana/runtime';
|
|
import { GraphFieldConfig } from '@grafana/schema';
|
|
import { commonOptionsBuilder } from '@grafana/ui';
|
|
|
|
import { defaultGraphConfig, getGraphFieldConfig } from '../timeseries/config';
|
|
|
|
import { CandlestickPanel } from './CandlestickPanel';
|
|
import { CandlestickData, candlestickFieldsInfo, FieldPickerInfo, prepareCandlestickFields } from './fields';
|
|
import {
|
|
defaultColors,
|
|
CandlestickOptions,
|
|
VizDisplayMode,
|
|
ColorStrategy,
|
|
defaultPanelOptions,
|
|
CandleStyle,
|
|
} from './models.gen';
|
|
import { CandlestickSuggestionsSupplier } from './suggestions';
|
|
|
|
const modeOptions = [
|
|
{ label: 'Candles', value: VizDisplayMode.Candles },
|
|
{ label: 'Volume', value: VizDisplayMode.Volume },
|
|
{ label: 'Both', value: VizDisplayMode.CandlesVolume },
|
|
] as Array<SelectableValue<VizDisplayMode>>;
|
|
|
|
const candleStyles = [
|
|
{ label: 'Candles', value: CandleStyle.Candles },
|
|
{ label: 'OHLC Bars', value: CandleStyle.OHLCBars },
|
|
] as Array<SelectableValue<CandleStyle>>;
|
|
|
|
const colorStrategies = [
|
|
{ label: 'Since Open', value: ColorStrategy.OpenClose },
|
|
{ label: 'Since Prior Close', value: ColorStrategy.CloseClose },
|
|
] as Array<SelectableValue<ColorStrategy>>;
|
|
|
|
const numericFieldFilter = (f: Field) => f.type === FieldType.number;
|
|
|
|
function addFieldPicker(
|
|
builder: PanelOptionsEditorBuilder<CandlestickOptions>,
|
|
info: FieldPickerInfo,
|
|
data: CandlestickData | null
|
|
) {
|
|
let placeholderText = 'Auto ';
|
|
|
|
if (data) {
|
|
const current = data[info.key] as Field;
|
|
|
|
if (current?.config) {
|
|
placeholderText += '= ' + getFieldDisplayName(current);
|
|
|
|
if (current === data?.open && info.key !== 'open') {
|
|
placeholderText += ` (${info.defaults.join(',')})`;
|
|
}
|
|
} else {
|
|
placeholderText += `(${info.defaults.join(',')})`;
|
|
}
|
|
}
|
|
|
|
builder.addFieldNamePicker({
|
|
path: `fields.${info.key}`,
|
|
name: info.name,
|
|
description: info.description,
|
|
settings: {
|
|
filter: numericFieldFilter,
|
|
placeholderText,
|
|
},
|
|
});
|
|
}
|
|
|
|
export const plugin = new PanelPlugin<CandlestickOptions, GraphFieldConfig>(CandlestickPanel)
|
|
.useFieldConfig(getGraphFieldConfig(defaultGraphConfig))
|
|
.setPanelOptions((builder, context) => {
|
|
const opts = context.options ?? defaultPanelOptions;
|
|
const info = prepareCandlestickFields(context.data, opts, config.theme2);
|
|
|
|
builder
|
|
.addRadio({
|
|
path: 'mode',
|
|
name: 'Mode',
|
|
description: '',
|
|
defaultValue: defaultPanelOptions.mode,
|
|
settings: {
|
|
options: modeOptions,
|
|
},
|
|
})
|
|
.addRadio({
|
|
path: 'candleStyle',
|
|
name: 'Candle style',
|
|
description: '',
|
|
defaultValue: defaultPanelOptions.candleStyle,
|
|
settings: {
|
|
options: candleStyles,
|
|
},
|
|
showIf: (opts) => opts.mode !== VizDisplayMode.Volume,
|
|
})
|
|
.addRadio({
|
|
path: 'colorStrategy',
|
|
name: 'Color strategy',
|
|
description: '',
|
|
defaultValue: defaultPanelOptions.colorStrategy,
|
|
settings: {
|
|
options: colorStrategies,
|
|
},
|
|
})
|
|
.addColorPicker({
|
|
path: 'colors.up',
|
|
name: 'Up color',
|
|
defaultValue: defaultColors.up,
|
|
})
|
|
.addColorPicker({
|
|
path: 'colors.down',
|
|
name: 'Down color',
|
|
defaultValue: defaultColors.down,
|
|
});
|
|
|
|
addFieldPicker(builder, candlestickFieldsInfo.open, info);
|
|
if (opts.mode !== VizDisplayMode.Volume) {
|
|
addFieldPicker(builder, candlestickFieldsInfo.high, info);
|
|
addFieldPicker(builder, candlestickFieldsInfo.low, info);
|
|
}
|
|
addFieldPicker(builder, candlestickFieldsInfo.close, info);
|
|
|
|
if (opts.mode !== VizDisplayMode.Candles) {
|
|
addFieldPicker(builder, candlestickFieldsInfo.volume, info);
|
|
}
|
|
|
|
builder.addRadio({
|
|
path: 'includeAllFields',
|
|
name: 'Additional fields',
|
|
description: 'Use standard timeseries options to configure any fields not mapped above',
|
|
defaultValue: defaultPanelOptions.includeAllFields,
|
|
settings: {
|
|
options: [
|
|
{ label: 'Ignore', value: false },
|
|
{ label: 'Include', value: true },
|
|
],
|
|
},
|
|
});
|
|
|
|
// commonOptionsBuilder.addTooltipOptions(builder);
|
|
commonOptionsBuilder.addLegendOptions(builder);
|
|
})
|
|
.setDataSupport({ annotations: true, alertStates: true })
|
|
.setSuggestionsSupplier(new CandlestickSuggestionsSupplier());
|