mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
* baldm0mma/transformation_info_modal * baldm0mma/transformation_info_modal/ add getDisplayContent * baldm0mma/transformation_info_modal/ reamove OperationRowHelp * baldm0mma/transformation_info_modal/ update prepMarkdown * baldm0mma/transformation_help_modal/ add example mkdwn * baldm0mma/transformation_help_modal/ add examples anno * baldm0mma/transformation_info_modal/ add calFieldHelper * baldm0mma/transformation_info_modal/ remove file * baldm0mma/transformation_info_modal/ add CalculateFieldHelper * baldm0mma/transformation_info_modal/ add TransformationEditorHelperModal * baldm0mma/transformation_info_modal/ add getHelperContent * baldm0mma/transformation_info_modal/ move TransformationEditorHelperModal * baldm0mma/transformation_info_modal/ add ReactElement * baldm0mma/transformations_info_modal * baldm0mma/transformation_info_modal/ update props for TransformationEditorHelperModal * baldm0mma/transformation_info_modal/ test * test * baldm0mma/transformation_info_modal/ reset vscode auth * baldm0mma/transformation_info_modal/ update getHelperContent * baldm0mma/transformations_info_modal/ add items for rebuilding markdown to react component * test * test * baldm0mma/transformations_info_modal/ remove comment in TransformationOperationRow * test * baldm0mma/transformation_info_modal/ add element to typing * baldm0mma/transformation_info_modal/ update getHelperContent with help component * baldm0mma/transformation_info_modal/ update modal title * baldm0mma/transformation_info_modal/ move logic to tranforms * baldm0mma/transformation_info_modal/ remove unused comments * baldm0mma/transformation_info_modal/ update standard reg * baldm0mma/trfansformation_info_modal/ remove context styling * baldm0mma/transformation_info_modal/ add content for CalculateFieldHelper * baldm0mma/transformation_info_modal/ add ConcatenateHelper * baldm0mma/transformations_info_modal/ add ConcatenateHelper * baldm0mma/transformation_info_modal/ add ConfigFromQueryHelper * baldm0mma/transformations/info_modal/ add ConvertFieldTypeHelper * baldm0mma/transformation_info_modal/ add CreateHeatmapHelp * baldm0mma/transformation_info_modal/ add ExtractFieldsHelper * baldm0mma/transformation_info_modal/ add FilterFieldsByNameHelper * baldm0mma/transformation_info_modal/ add FilterFieldsByNameHelper * baldm0mma/transformation_info_modal/ add OperationRowHelp to parse markdown * baldm0mma/transformation_info_modal/ remove commented out markdown * baldm0mma/transformations_info_modal/ remove comment * baldm0mma/transformation_info_modal/ update configFromQueryTransformRegistryItem * baldm0mma/transformation_info_modal/ update ConcatenateHelper * baldm0mma/transformation_info_modal/ update ConvertFieldTypeHelper * baldm0mma/transformation_info_modal/ update ExtractFieldsHelper * baldm0mma/transformation_info_modal/ update FieldLookupHelper * baldm0mma/transformation_info_modal/ update TransformationEditorHelperModal with determineContentDisplay() * baldm0mma/transformation_info_modal/ add FilterByRefIdHelper * baldm0mma/transformation_info_modal/ add FilterByValueHelper * baldm0mma/transformation_info_modal/ update file ext * baldm0mma/transformation_info_modal/ add GroupByHelper * baldm0mma/transformation_info_modal/ add HistogramHelper * baldm0mma/transformation_info_modal/ add JoinByFieldHelper * baldm0mma/transformation_info_modal/ add JoinByLabelsHelper * baldm0mma/transformations_info_modal/ add LabelsToFieldsHelper * baldm0mma/transformation_info_modal/ add LimitHelper * baldm0mma/transformation_info_modal/ add MergeHelper * baldm0mma/transformation_info_modal/ add PartitionByValuesHelper * baldm0mma/transformation_info_modal/ add ReduceHelper * baldm0mma/transformation_info_modal/ add RenameByRegexHelper * baldm0mma/transformation_info_modal/ add SeriesToRowsHelper * baldm0mma/transformation_info_modal/ add SortByHelper * baldm0mma/transformations_info_modal/ add spatial * baldm0mma/transformation_info_modal/ update to markdown * baldm0mma/transformation_info_modal/ remove comments * baldm0mma/transformation_info_modal/ update boarder with theme * baldm0mma/transformation_info_modal/ add test suite * baldm0mma/transformation_info_modal/ update tests * baldm0mma/transformation_info_modal/ update test to run on all transformations * baldm0mma/transformation_info_modaol/ add TimeSeriesTableHelper * baldm0mma/transformation_info_modal/ update concatenateHelper * baldm0mma/transformation_info_modal/ update calculateFieldHelper * baldmomma/transformation_info_modal/ update naming * baldm0mma/transformation_info_modal/ update getLinkToDocs location * baldm0mma/transformation_info_modal/ update docs * baldm0mma/transformation_info_modal/ update language * baldm0mma/transformation_info_modal/ rename test * baldm0mma/transformation_info_modal/ update naming 2 * baldm0mma/transformation_info_modal/ update to helper * baldm0mma/transformation_info_modal/ update docs * Apply suggestions from @imatwawana Co-authored-by: Isabel <76437239+imatwawana@users.noreply.github.com> * baldm0mma/transformation_info_modal/ update convertFieldTypeHelper capitalization * Hack around with generating Markdown from transformations helpers (#75677) ```console $ cd docs $ make sources/panels-visualizations/query-transform-data/transform-data/index.md $ make docs ``` Browse to http://localhost:3003/docs/grafana/latest/panels-visualizations/query-transform-data/transform-data/ Signed-off-by: Jack Baldry <jack.baldry@grafana.com> * baldm0mma/transformation_info_modal/ add calculateFieldHelper * baldm0mma/transformation_info_modal/ update concatenate * baldm0mma/transformation_info_modal/ add fieldLookup * baldm0mma/transformation_info_modal/ add filterFieldsByName * baldm0mma/transformation_info_modal/ add joinByField * baldm0mma/transformation_info_modal/ update renameByRegex * baldm0mma/transformation_info_modal/ update getHelperContent * baldm0mma/transformation_info_modal/ update calculateFieldTransformRegistryItem * baldm0mma/transformation_info_modal/ update concatenateTransformRegistryItem * baldm0mma/transformation_info_modal/ update configFromDataTransformer * baldm0mma/transformation_info_modal/ update extractFieldsTransformRegistryItem * baldm0mma/transformation_info_modal/ update formatTimeTransformerRegistryItem * baldm0mma/transformation_info_modal/ update heatmapTransformRegistryItem * baldm0mma/transformation_info_modal/ update mergeTransformerRegistryItem * baldm0mma/transformation_info_modal/ update timeSeriesTableTransformRegistryItem * baldm0mma/transformation_info_modal/ update doc builder * baldm0mma/transformation_info_modal/ update docs * baldm0mma/transformation_info_modal/ remove console log * baldm0mma/transformation_info_modal/ update console log * baldm0mma/transformation_info_modal/ update gitignore * baldm0mma/transformation_info_modal/ update calculateField * baldm0mma/transformation_info_modal/ add links * baldm0mma/transformation_info_modal/ update template * baldm0mma/transformation_info_modal/ update template with images * baldm0mma/transformation_info_modal/ build markdown * baldm0mma/transformations_info_modal/update with links * baldm0mma/transformation_info_modal/ update links * baldm0mma/transformation_info_modal/ apdate FormatTimeTransfomerEditor * baldm0mma/transformation_indo_modal/ update HeatmapTransformerEditor * baldm0mma/transformation_indo_modal/ update ConfigFromQueryTransformerEditor * baldm0mma/transformation_indo_modal/ update CalculateFieldTransformerEditor * baldm0mma/transformation_indo_modal/ update ConcatenateTransformerEditor * baldm0mma/transformation_indo_modal/ update FilterByNameTransformerEditor * baldm0mma/transformation_indo_modal/ update FilterByRefIdTransformerEditor * baldm0mma/transformation_indo_modal/ update GroupByTransformerEditor * baldm0mma/transformation_indo_modal/ update GroupingToMatrixTransformerEditor get helper * baldm0mma/transformation_indo_modal/ update SeriesToFieldsTransformerEditor get helper * baldm0mma/transformation_indo_modal/ update LabelsAsFieldsTransformerEditor * baldm0mma/transformation_info_modal/ update MergeTransformerEditor * baldm0mma/transformation_info_modal/ update OrganizeFieldsTransformerEditor * baldm0mma/transformation_info_modal/ update ReduceTransformerEditor * baldm0mma/transformation_info_modal/ update RenameByRegexTransformerEditor * baldm0mma/transformation_info_modal/ update SeriesToRowsTransformerEditor * baldm0mma/transformation_info_modal/ update SortByTransformerEditor * baldm0mma/transformation_info_modal/ update extractFieldsTransformerEditor * baldm0mma/transformation_info_modal/ update FilterByValueTransformerEditor * baldm0mma/transformation_info_modal/ update JoinByLabelsTransformerEditor * baldm0mma/transformation_info_modal/ update FieldLookupTransformerEditor * baldm0mma/transformation_info_modal/ update PartitionByValuesEditor * baldm0mma/transformation_info_modal/ update PrepareTimeSeriesEditor * baldm0mma/transformation_info_modal/ update RowsToFieldsTransformerEditor * baldm0mma/transformation_info_modal/ update spatialTransformRegistryItem * baldm0mma/transformation_info_modal/ update timeSeriesTableTransformRegistryItem * baldm0mma/transformation_info_modal/ update to helperDocs * baldm0mma/transformation_info_modal/ update built markdown * baldm0mma/transformation_info_modal/ run prettier * baldm0mma/transformation_info_modal/ update comments in getTransformationContent * baldm0mma/transformation_info_modal/ add removeMarkdownAnchorLinks * baldm0mma/transformation_info_modal/ update annos in getTransformationContent * baldm0mma/transformation_info_modal/ add requisite url prefix to markdown images * baldm0mma/transformation_info_modal/ add cleanMarkdownOfUnwantedSyntax * baldm0mma/transformation_info_modal/ update annos in content.ts * baldm0mma/transformation_info_modal/ update e2e tests with always-visiable trabnsformation * baldm0mma/transformation_info_modal/ remove note * baldm0mma/transformation_info_modal/ add annotation in getTransformationContent * baldm0mma/transformation_info_modal/ update e2e test naming --------- Signed-off-by: Jack Baldry <jack.baldry@grafana.com> Co-authored-by: Isabel <76437239+imatwawana@users.noreply.github.com> Co-authored-by: Jack Baldry <jack.baldry@grafana.com>
169 lines
5.3 KiB
TypeScript
169 lines
5.3 KiB
TypeScript
import React, { useMemo } from 'react';
|
|
|
|
import {
|
|
PluginState,
|
|
SelectableValue,
|
|
TransformerRegistryItem,
|
|
TransformerUIProps,
|
|
TransformerCategory,
|
|
} from '@grafana/data';
|
|
import { Alert, HorizontalGroup, InlineField, InlineFieldRow, Select, ValuePicker } from '@grafana/ui';
|
|
|
|
import { getTransformationContent } from '../docs/getTransformationContent';
|
|
import { getDistinctLabels } from '../utils';
|
|
|
|
import { joinByLabelsTransformer, JoinByLabelsTransformOptions } from './joinByLabels';
|
|
|
|
export interface Props extends TransformerUIProps<JoinByLabelsTransformOptions> {}
|
|
|
|
export function JoinByLabelsTransformerEditor({ input, options, onChange }: Props) {
|
|
const info = useMemo(() => {
|
|
let warn: React.ReactNode = undefined;
|
|
const distinct = getDistinctLabels(input);
|
|
const valueOptions = Array.from(distinct).map((value) => ({ label: value, value }));
|
|
let valueOption = valueOptions.find((v) => v.value === options.value);
|
|
if (!valueOption && options.value) {
|
|
valueOption = { label: `${options.value} (not found)`, value: options.value };
|
|
valueOptions.push(valueOption);
|
|
}
|
|
|
|
if (!input.length) {
|
|
warn = <Alert title="No input found">No input (or labels) found</Alert>;
|
|
} else if (distinct.size === 0) {
|
|
warn = <Alert title="No labels found">The input does not contain any labels</Alert>;
|
|
}
|
|
|
|
// Show the selected values
|
|
distinct.delete(options.value);
|
|
const joinOptions = Array.from(distinct).map((value) => ({ label: value, value }));
|
|
|
|
let addOptions = joinOptions;
|
|
const hasJoin = Boolean(options.join?.length);
|
|
let addText = 'Join';
|
|
if (hasJoin) {
|
|
addOptions = joinOptions.filter((v) => !options.join!.includes(v.value));
|
|
} else {
|
|
addText = joinOptions.map((v) => v.value).join(', '); // all the fields
|
|
}
|
|
|
|
return { warn, valueOptions, valueOption, joinOptions, addOptions, addText, hasJoin, key: Date.now() };
|
|
}, [options, input]);
|
|
|
|
const updateJoinValue = (idx: number, value?: string) => {
|
|
if (!options.join) {
|
|
return; // nothing to do
|
|
}
|
|
|
|
const join = options.join.slice();
|
|
if (!value) {
|
|
join.splice(idx, 1);
|
|
if (!join.length) {
|
|
onChange({ ...options, join: undefined });
|
|
return;
|
|
}
|
|
} else {
|
|
join[idx] = value;
|
|
}
|
|
|
|
// Remove duplicates and the value field
|
|
const t = new Set(join);
|
|
if (options.value) {
|
|
t.delete(options.value);
|
|
}
|
|
onChange({ ...options, join: Array.from(t) });
|
|
};
|
|
|
|
const addJoin = (sel: SelectableValue<string>) => {
|
|
const v = sel?.value;
|
|
if (!v) {
|
|
return;
|
|
}
|
|
const join = options.join ? options.join.slice() : [];
|
|
join.push(v);
|
|
onChange({ ...options, join });
|
|
};
|
|
|
|
const labelWidth = 10;
|
|
const noOptionsMessage = 'No labels found';
|
|
|
|
return (
|
|
<div>
|
|
{info.warn}
|
|
|
|
<InlineFieldRow>
|
|
<InlineField
|
|
error="required"
|
|
invalid={!Boolean(options.value?.length)}
|
|
label={'Value'}
|
|
labelWidth={labelWidth}
|
|
tooltip="Select the label indicating the values name"
|
|
>
|
|
<Select
|
|
options={info.valueOptions}
|
|
value={info.valueOption}
|
|
onChange={(v) => onChange({ ...options, value: v.value! })}
|
|
noOptionsMessage={noOptionsMessage}
|
|
/>
|
|
</InlineField>
|
|
</InlineFieldRow>
|
|
{info.hasJoin ? (
|
|
options.join!.map((v, idx) => (
|
|
<InlineFieldRow key={v + idx}>
|
|
<InlineField
|
|
label={'Join'}
|
|
labelWidth={labelWidth}
|
|
error="Unable to join by the value label"
|
|
invalid={v === options.value}
|
|
>
|
|
<HorizontalGroup>
|
|
<Select
|
|
options={info.joinOptions}
|
|
value={info.joinOptions.find((o) => o.value === v)}
|
|
isClearable={true}
|
|
onChange={(v) => updateJoinValue(idx, v?.value)}
|
|
noOptionsMessage={noOptionsMessage}
|
|
/>
|
|
{Boolean(info.addOptions.length && idx === options.join!.length - 1) && (
|
|
<ValuePicker
|
|
icon="plus"
|
|
label={''}
|
|
options={info.addOptions}
|
|
onChange={addJoin}
|
|
variant="secondary"
|
|
/>
|
|
)}
|
|
</HorizontalGroup>
|
|
</InlineField>
|
|
</InlineFieldRow>
|
|
))
|
|
) : (
|
|
<>
|
|
{Boolean(info.addOptions.length) && (
|
|
<InlineFieldRow>
|
|
<InlineField label={'Join'} labelWidth={labelWidth}>
|
|
<Select
|
|
options={info.addOptions}
|
|
placeholder={info.addText}
|
|
onChange={addJoin}
|
|
noOptionsMessage={noOptionsMessage}
|
|
/>
|
|
</InlineField>
|
|
</InlineFieldRow>
|
|
)}
|
|
</>
|
|
)}
|
|
</div>
|
|
);
|
|
}
|
|
|
|
export const joinByLabelsTransformRegistryItem: TransformerRegistryItem<JoinByLabelsTransformOptions> = {
|
|
id: joinByLabelsTransformer.id,
|
|
editor: JoinByLabelsTransformerEditor,
|
|
transformation: joinByLabelsTransformer,
|
|
name: joinByLabelsTransformer.name,
|
|
description: joinByLabelsTransformer.description,
|
|
state: PluginState.beta,
|
|
categories: new Set([TransformerCategory.Combine]),
|
|
help: getTransformationContent(joinByLabelsTransformer.id).helperDocs,
|
|
};
|