grafana/public/app/features/transformers/editors/RenameByRegexTransformer.tsx
Jev Forsberg a99485ba33
Transformations: Build help content for all standard transformers (#74052)
* 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>
2023-11-07 09:29:45 -07:00

138 lines
4.1 KiB
TypeScript

import { css } from '@emotion/css';
import React from 'react';
import {
DataTransformerID,
standardTransformers,
TransformerRegistryItem,
TransformerUIProps,
stringToJsRegex,
TransformerCategory,
} from '@grafana/data';
import { RenameByRegexTransformerOptions } from '@grafana/data/src/transformations/transformers/renameByRegex';
import { Field, Input } from '@grafana/ui';
import { getTransformationContent } from '../docs/getTransformationContent';
interface RenameByRegexTransformerEditorProps extends TransformerUIProps<RenameByRegexTransformerOptions> {}
interface RenameByRegexTransformerEditorState {
regex?: string;
renamePattern?: string;
isRegexValid?: boolean;
}
export class RenameByRegexTransformerEditor extends React.PureComponent<
RenameByRegexTransformerEditorProps,
RenameByRegexTransformerEditorState
> {
constructor(props: RenameByRegexTransformerEditorProps) {
super(props);
this.state = {
regex: props.options.regex,
renamePattern: props.options.renamePattern,
isRegexValid: true,
};
}
handleRegexChange = (e: React.FormEvent<HTMLInputElement>) => {
const regex = e.currentTarget.value;
let isRegexValid = true;
if (regex) {
try {
if (regex) {
stringToJsRegex(regex);
}
} catch (e) {
isRegexValid = false;
}
}
this.setState((previous) => ({ ...previous, regex, isRegexValid }));
};
handleRenameChange = (e: React.FormEvent<HTMLInputElement>) => {
const renamePattern = e.currentTarget.value;
this.setState((previous) => ({ ...previous, renamePattern }));
};
handleRegexBlur = (e: React.FocusEvent<HTMLInputElement>) => {
const regex = e.currentTarget.value;
let isRegexValid = true;
try {
if (regex) {
stringToJsRegex(regex);
}
} catch (e) {
isRegexValid = false;
}
this.setState({ isRegexValid }, () => {
if (isRegexValid) {
this.props.onChange({ ...this.props.options, regex });
}
});
};
handleRenameBlur = (e: React.FocusEvent<HTMLInputElement>) => {
const renamePattern = e.currentTarget.value;
this.setState({ renamePattern }, () => this.props.onChange({ ...this.props.options, renamePattern }));
};
render() {
const { regex, renamePattern, isRegexValid } = this.state;
return (
<>
<div className="gf-form-inline">
<div className="gf-form gf-form--grow">
<div className="gf-form-label width-8">Match</div>
<Field
invalid={!isRegexValid}
error={!isRegexValid ? 'Invalid pattern' : undefined}
className={css`
margin-bottom: 0;
`}
>
<Input
placeholder="Regular expression pattern"
value={regex || ''}
onChange={this.handleRegexChange}
onBlur={this.handleRegexBlur}
width={25}
/>
</Field>
</div>
</div>
<div className="gf-form-inline">
<div className="gf-form gf-form--grow">
<div className="gf-form-label width-8">Replace</div>
<Field
className={css`
margin-bottom: 0;
`}
>
<Input
placeholder="Replacement pattern"
value={renamePattern || ''}
onChange={this.handleRenameChange}
onBlur={this.handleRenameBlur}
width={25}
/>
</Field>
</div>
</div>
</>
);
}
}
export const renameByRegexTransformRegistryItem: TransformerRegistryItem<RenameByRegexTransformerOptions> = {
id: DataTransformerID.renameByRegex,
editor: RenameByRegexTransformerEditor,
transformation: standardTransformers.renameByRegexTransformer,
name: standardTransformers.renameByRegexTransformer.name,
description: 'Renames part of the query result by using regular expression with placeholders.',
categories: new Set([TransformerCategory.ReorderAndRename]),
help: getTransformationContent(DataTransformerID.renameByRegex).helperDocs,
};