import { DynamicConfigValue, FieldConfigOptionsRegistry, FieldOverrideContext, GrafanaTheme } from '@grafana/data'; import React from 'react'; import { Counter, Field, HorizontalGroup, IconButton, Label, stylesFactory, useTheme } from '@grafana/ui'; import { css, cx } from 'emotion'; import { OptionsGroup } from './OptionsGroup'; interface DynamicConfigValueEditorProps { property: DynamicConfigValue; registry: FieldConfigOptionsRegistry; onChange: (value: DynamicConfigValue) => void; context: FieldOverrideContext; onRemove: () => void; isCollapsible?: boolean; } export const DynamicConfigValueEditor: React.FC = ({ property, context, registry, onChange, onRemove, isCollapsible, }) => { const theme = useTheme(); const styles = getStyles(theme); const item = registry?.getIfExists(property.id); if (!item) { return null; } let editor; const renderLabel = (includeDescription = true, includeCounter = false) => (isExpanded = false) => (
); if (isCollapsible) { editor = ( { onChange(value); }} item={item} context={context} /> ); } else { editor = (
{ onChange(value); }} item={item} context={context} />
); } return (
{editor}
); }; const getStyles = stylesFactory((theme: GrafanaTheme) => { return { collapsibleOverrideEditor: css` label: collapsibleOverrideEditor; & + .dynamicConfigValueEditor--nonCollapsible { margin-top: ${theme.spacing.formSpacingBase}px; } `, }; });