import React, { FC } from 'react'; import { StandardEditorProps } from '@grafana/data'; import { ColorPicker, Field, HorizontalGroup, InlineField, InlineFieldRow, InlineLabel, NumberValueEditor, RadioButtonGroup, SliderValueEditor, } from '@grafana/ui'; import { Observable } from 'rxjs'; import { useObservable } from 'react-use'; import { ColorDimensionEditor, ResourceDimensionEditor, ScaleDimensionEditor, ScalarDimensionEditor, TextDimensionEditor, } from 'app/features/dimensions/editors'; import { ScaleDimensionConfig, ResourceDimensionConfig, ColorDimensionConfig, ResourceFolderName, TextDimensionConfig, defaultTextConfig, ScalarDimensionConfig, } from 'app/features/dimensions/types'; import { defaultStyleConfig, GeometryTypeId, StyleConfig, TextAlignment, TextBaseline } from '../../style/types'; import { styleUsesText } from '../../style/utils'; import { LayerContentInfo } from '../../utils/getFeatures'; export interface StyleEditorOptions { layerInfo?: Observable; simpleFixedValues?: boolean; displayRotation?: boolean; } export const StyleEditor: FC> = ({ value, context, onChange, item, }) => { const settings = item.settings; const onSizeChange = (sizeValue: ScaleDimensionConfig | undefined) => { onChange({ ...value, size: sizeValue }); }; const onSymbolChange = (symbolValue: ResourceDimensionConfig | undefined) => { onChange({ ...value, symbol: symbolValue }); }; const onColorChange = (colorValue: ColorDimensionConfig | undefined) => { onChange({ ...value, color: colorValue }); }; const onOpacityChange = (opacityValue: number | undefined) => { onChange({ ...value, opacity: opacityValue }); }; const onRotationChange = (rotationValue: ScalarDimensionConfig | undefined) => { onChange({ ...value, rotation: rotationValue }); }; const onTextChange = (textValue: TextDimensionConfig | undefined) => { onChange({ ...value, text: textValue }); }; const onTextFontSizeChange = (fontSize: number | undefined) => { onChange({ ...value, textConfig: { ...value.textConfig, fontSize } }); }; const onTextOffsetXChange = (offsetX: number | undefined) => { onChange({ ...value, textConfig: { ...value.textConfig, offsetX } }); }; const onTextOffsetYChange = (offsetY: number | undefined) => { onChange({ ...value, textConfig: { ...value.textConfig, offsetY } }); }; const onTextAlignChange = (textAlign: unknown) => { onChange({ ...value, textConfig: { ...value.textConfig, textAlign: textAlign as TextAlignment } }); }; const onTextBaselineChange = (textBaseline: unknown) => { onChange({ ...value, textConfig: { ...value.textConfig, textBaseline: textBaseline as TextBaseline } }); }; let featuresHavePoints = false; if (settings?.layerInfo) { const propertyOptions = useObservable(settings?.layerInfo); featuresHavePoints = propertyOptions?.geometryType === GeometryTypeId.Point; } const hasTextLabel = styleUsesText(value); // Simple fixed value display if (settings?.simpleFixedValues) { return ( <> {featuresHavePoints && ( <> )} { onColorChange({ fixed: v }); }} /> ); } return ( <> {settings?.displayRotation && ( )} {hasTextLabel && ( <> )} ); };