Compare commits

...

9 Commits

Author SHA1 Message Date
Kristina Durivage
41c9322753 Merge branch 'main' of https://github.com/grafana/grafana into kristina/config-query-mapping 2025-10-21 13:33:39 -05:00
Kristina Durivage
b943c0c7c6 cleanup
Some checks failed
CodeQL checks / Detect whether code changed (push) Has been cancelled
CodeQL checks / Analyze (actions) (push) Has been cancelled
CodeQL checks / Analyze (go) (push) Has been cancelled
CodeQL checks / Analyze (javascript) (push) Has been cancelled
2025-09-15 09:07:57 -05:00
Kristina Durivage
21e0c70c71 Condense? logic
Some checks failed
CodeQL checks / Detect whether code changed (push) Has been cancelled
CodeQL checks / Analyze (actions) (push) Has been cancelled
CodeQL checks / Analyze (go) (push) Has been cancelled
CodeQL checks / Analyze (javascript) (push) Has been cancelled
2025-09-14 21:16:57 -05:00
Kristina Durivage
a846041548 Cleanup and get it working messily 2025-09-14 20:37:06 -05:00
Kristina Durivage
0f5c5f4398 Merge branch 'main' of https://github.com/grafana/grafana into kristina/config-query-mapping 2025-09-14 13:52:22 -05:00
Kristina Durivage
8a4f25e5fb Merge branch 'main' of https://github.com/grafana/grafana into kristina/config-query-mapping
Some checks failed
CodeQL checks / Detect whether code changed (push) Has been cancelled
CodeQL checks / Analyze (actions) (push) Has been cancelled
CodeQL checks / Analyze (go) (push) Has been cancelled
CodeQL checks / Analyze (javascript) (push) Has been cancelled
2025-09-11 12:36:38 -05:00
Kristina Durivage
3237e2840a Merge branch 'main' into kristina/config-query-mapping 2025-09-08 08:06:00 -05:00
Kristina Durivage
76eb38e56b try to use existing field mapping logic - WIP
Some checks failed
CodeQL checks / Detect whether code changed (push) Has been cancelled
CodeQL checks / Analyze (actions) (push) Has been cancelled
CodeQL checks / Analyze (go) (push) Has been cancelled
CodeQL checks / Analyze (javascript) (push) Has been cancelled
2025-09-07 21:20:20 -05:00
Kristina Durivage
f2f1663dba WIP 2025-09-05 16:59:38 -05:00
3 changed files with 50 additions and 6 deletions

View File

@@ -10,10 +10,12 @@ import {
TransformerCategory,
} from '@grafana/data';
import { t } from '@grafana/i18n';
import { fieldMatchersUI, InlineField, InlineFieldRow, Select, useStyles2 } from '@grafana/ui';
import { Checkbox, fieldMatchersUI, InlineField, InlineFieldRow, Select, useStyles2 } from '@grafana/ui';
//import { FieldNamePicker } from '@grafana/ui/internal';
import { getTransformationContent } from '../docs/getTransformationContent';
import { FieldToConfigMappingEditor } from '../fieldToConfigMapping/FieldToConfigMappingEditor';
import { configMapHandlers } from '../fieldToConfigMapping/fieldToConfigMapping';
import darkImage from '../images/dark/configFromData.svg';
import lightImage from '../images/light/configFromData.svg';
@@ -85,6 +87,13 @@ export function ConfigFromQueryTransformerEditor({ input, onChange, options }: P
onChange={onMatcherConfigChange}
/>
</InlineField>
<InlineField>
<Checkbox
label={t('transformers.config-from-query-transformer-editor.label-mapping', 'Map results')}
onChange={(evt) => onChange({ ...options, isDisplayNameMapping: evt.currentTarget.checked })}
value={options.isDisplayNameMapping}
/>
</InlineField>
</InlineFieldRow>
<InlineFieldRow>
{configFrame && (
@@ -92,7 +101,12 @@ export function ConfigFromQueryTransformerEditor({ input, onChange, options }: P
frame={configFrame}
mappings={options.mappings}
onChange={(mappings) => onChange({ ...options, mappings })}
withReducers
withReducers={!options.isDisplayNameMapping}
configOverride={
options.isDisplayNameMapping
? configMapHandlers.filter((cmh) => cmh.key === 'mappings.value' || cmh.key === 'mappings.text')
: undefined
}
/>
)}
</InlineFieldRow>

View File

@@ -22,6 +22,7 @@ export interface ConfigFromQueryTransformOptions {
configRefId?: string;
mappings: FieldToConfigMapping[];
applyTo?: MatcherConfig;
isDisplayNameMapping?: boolean;
}
export function extractConfigFromQuery(options: ConfigFromQueryTransformOptions, data: DataFrame[]) {
@@ -73,6 +74,27 @@ export function extractConfigFromQuery(options: ConfigFromQueryTransformOptions,
for (const field of frame.fields) {
if (matcher(field, frame, data)) {
const dataConfig = getFieldConfigFromFrame(reducedConfigFrame, 0, mappingResult);
if (options.isDisplayNameMapping) {
const nameFrame = data.find((d) => d.refId === options.configRefId);
const mappingValueName = options.mappings.find(
(mapping) => mapping.handlerKey === 'mappings.value'
)?.fieldName;
const mappingTextName = options.mappings.find((mapping) => mapping.handlerKey === 'mappings.text')?.fieldName;
if (nameFrame && mappingValueName !== undefined && mappingTextName !== undefined) {
const mapValueField = nameFrame.fields.find((frameNameField) => frameNameField.name === mappingValueName);
const mapTextField = nameFrame.fields.find((field) => field.name === mappingTextName);
const keyIndex = mapValueField?.values.indexOf(field.name) ?? -1;
if (keyIndex !== -1 && mapTextField !== undefined) {
const newDisplayName = mapTextField.values[keyIndex];
// only add the property if a new name
if (newDisplayName !== undefined) {
dataConfig.displayName = newDisplayName;
}
}
}
}
outputFrame.fields.push({
...field,
config: {

View File

@@ -25,14 +25,22 @@ export interface Props {
onChange: (mappings: FieldToConfigMapping[]) => void;
withReducers?: boolean;
withNameAndValue?: boolean;
configOverride?: FieldToConfigMapHandler[];
}
export function FieldToConfigMappingEditor({ frame, mappings, onChange, withReducers, withNameAndValue }: Props) {
export function FieldToConfigMappingEditor({
frame,
mappings,
onChange,
withReducers,
withNameAndValue,
configOverride,
}: Props) {
const styles = useStyles2(getStyles);
const rows = getViewModelRows(frame, mappings, withNameAndValue);
const configProps = configMapHandlers.map((def) => configHandlerToSelectOption(def, false)) as Array<
SelectableValue<string>
>;
const configProps = (configOverride ?? configMapHandlers).map((def) =>
configHandlerToSelectOption(def, false)
) as Array<SelectableValue<string>>;
const hasAdditionalSettings = mappings.reduce(
(prev, mapping) => prev || createsArgumentsEditor(mapping.handlerKey),
false