12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- import React, { FormEvent, PureComponent } from 'react';
- import { MapDispatchToProps, MapStateToProps } from 'react-redux';
- import { selectors } from '@grafana/e2e-selectors';
- import { VerticalGroup } from '@grafana/ui';
- import { connectWithStore } from 'app/core/utils/connectWithReduxStore';
- import { StoreState } from 'app/types';
- import { SelectionOptionsEditor } from '../editor/SelectionOptionsEditor';
- import { VariableSectionHeader } from '../editor/VariableSectionHeader';
- import { VariableTextAreaField } from '../editor/VariableTextAreaField';
- import { OnPropChangeArguments, VariableEditorProps } from '../editor/types';
- import { changeVariableMultiValue } from '../state/actions';
- import { CustomVariableModel, VariableWithMultiSupport } from '../types';
- interface OwnProps extends VariableEditorProps<CustomVariableModel> {}
- interface ConnectedProps {}
- interface DispatchProps {
- changeVariableMultiValue: typeof changeVariableMultiValue;
- }
- export type Props = OwnProps & ConnectedProps & DispatchProps;
- class CustomVariableEditorUnconnected extends PureComponent<Props> {
- onChange = (event: FormEvent<HTMLTextAreaElement>) => {
- this.props.onPropChange({
- propName: 'query',
- propValue: event.currentTarget.value,
- });
- };
- onSelectionOptionsChange = async ({ propName, propValue }: OnPropChangeArguments<VariableWithMultiSupport>) => {
- this.props.onPropChange({ propName, propValue, updateOptions: true });
- };
- onBlur = (event: FormEvent<HTMLTextAreaElement>) => {
- this.props.onPropChange({
- propName: 'query',
- propValue: event.currentTarget.value,
- updateOptions: true,
- });
- };
- render() {
- return (
- <VerticalGroup spacing="xs">
- <VariableSectionHeader name="Custom options" />
- <VerticalGroup spacing="md">
- <VerticalGroup spacing="none">
- <VariableTextAreaField
- name="Values separated by comma"
- value={this.props.variable.query}
- placeholder="1, 10, mykey : myvalue, myvalue, escaped\,value"
- onChange={this.onChange}
- onBlur={this.onBlur}
- required
- width={50}
- labelWidth={27}
- testId={selectors.pages.Dashboard.Settings.Variables.Edit.CustomVariable.customValueInput}
- />
- </VerticalGroup>
- <SelectionOptionsEditor
- variable={this.props.variable}
- onPropChange={this.onSelectionOptionsChange}
- onMultiChanged={this.props.changeVariableMultiValue}
- />{' '}
- </VerticalGroup>
- </VerticalGroup>
- );
- }
- }
- const mapStateToProps: MapStateToProps<ConnectedProps, OwnProps, StoreState> = (state, ownProps) => ({});
- const mapDispatchToProps: MapDispatchToProps<DispatchProps, OwnProps> = {
- changeVariableMultiValue,
- };
- export const CustomVariableEditor = connectWithStore(
- CustomVariableEditorUnconnected,
- mapStateToProps,
- mapDispatchToProps
- );
|