import { css, cx } from '@emotion/css'; import { useId } from 'react'; import Highlighter from 'react-highlight-words'; import { DynamicConfigValue, FieldConfigOptionsRegistry, FieldConfigProperty, FieldOverrideContext, GrafanaTheme2, } from '@grafana/data'; import { useTranslate } from '@grafana/i18n'; import { Counter, Field, HorizontalGroup, IconButton, Label, useStyles2 } from '@grafana/ui'; import { OptionsPaneCategory } from './OptionsPaneCategory'; interface DynamicConfigValueEditorProps { property: DynamicConfigValue; registry: FieldConfigOptionsRegistry; onChange: (value: DynamicConfigValue) => void; context: FieldOverrideContext; onRemove: () => void; isSystemOverride?: boolean; searchQuery: string; } export const DynamicConfigValueEditor = ({ property, context, registry, onChange, onRemove, isSystemOverride, searchQuery, }: DynamicConfigValueEditorProps) => { const styles = useStyles2(getStyles); const { t } = useTranslate(); const item = registry?.getIfExists(property.id); const componentId = useId(); if (!item) { return null; } const isCollapsible = Array.isArray(property.value) || property.id === FieldConfigProperty.Thresholds || property.id === FieldConfigProperty.Links || property.id === FieldConfigProperty.Mappings; const labelCategory = item.category?.filter((c) => c !== item.name); let editor; /* eslint-disable react/display-name */ const renderLabel = (includeDescription = true, includeCounter = false) => (isExpanded = false) => ( {!isSystemOverride && (
)}
); /* eslint-enable react/display-name */ if (isCollapsible) { editor = ( { onChange(value); }} item={item} context={context} /> ); } else { editor = (
{ onChange(value); }} item={item} context={context} id={componentId} />
); } return (
{editor}
); }; const getStyles = (theme: GrafanaTheme2) => ({ collapsibleOverrideEditor: css({ label: 'collapsibleOverrideEditor', '& + .dynamicConfigValueEditor--nonCollapsible': { marginTop: theme.spacing(1), }, }), });