mirror of
https://github.com/grafana/grafana.git
synced 2025-02-20 11:48:34 -06:00
* Fixes under public/app/plugins * Fixes under public/app/plugins/datasource * Fixes under public/app/features * Fixes under public/app/features * Fixes under public/app/features * Fixes under public/app/components * Fix PanelNotSupported test * Fix one more warning * Fix warning in usePanelSave * Fix traceview empty response * Azure monitor fixes * More fixes * Fix tests for azure monitor * Fixes after merging master * Add comment for disabled rules * Fixes after merging master * Fixes after merging master * Adress review comments * Fix azure tests * Address review feedbacks
55 lines
1.8 KiB
TypeScript
55 lines
1.8 KiB
TypeScript
import React, { ChangeEvent, FocusEvent, KeyboardEvent, ReactElement, useCallback, useEffect, useState } from 'react';
|
|
|
|
import { TextBoxVariableModel } from '../types';
|
|
import { toVariablePayload } from '../state/types';
|
|
import { changeVariableProp } from '../state/sharedReducer';
|
|
import { VariablePickerProps } from '../pickers/types';
|
|
import { Input } from '@grafana/ui';
|
|
import { variableAdapters } from '../adapters';
|
|
import { useDispatch } from 'react-redux';
|
|
|
|
export interface Props extends VariablePickerProps<TextBoxVariableModel> {}
|
|
|
|
export function TextBoxVariablePicker({ variable, onVariableChange }: Props): ReactElement {
|
|
const dispatch = useDispatch();
|
|
const [updatedValue, setUpdatedValue] = useState(variable.current.value);
|
|
useEffect(() => {
|
|
setUpdatedValue(variable.current.value);
|
|
}, [variable]);
|
|
|
|
const updateVariable = useCallback(() => {
|
|
if (variable.current.value === updatedValue) {
|
|
return;
|
|
}
|
|
|
|
dispatch(
|
|
changeVariableProp(
|
|
toVariablePayload({ id: variable.id, type: variable.type }, { propName: 'query', propValue: updatedValue })
|
|
)
|
|
);
|
|
|
|
if (onVariableChange) {
|
|
onVariableChange({
|
|
...variable,
|
|
current: { ...variable.current, value: updatedValue },
|
|
});
|
|
return;
|
|
}
|
|
|
|
variableAdapters.get(variable.type).updateOptions(variable);
|
|
}, [variable, updatedValue, dispatch, onVariableChange]);
|
|
|
|
const onChange = useCallback((event: ChangeEvent<HTMLInputElement>) => setUpdatedValue(event.target.value), [
|
|
setUpdatedValue,
|
|
]);
|
|
|
|
const onBlur = (e: FocusEvent<HTMLInputElement>) => updateVariable();
|
|
const onKeyDown = (event: KeyboardEvent<HTMLInputElement>) => {
|
|
if (event.keyCode === 13) {
|
|
updateVariable();
|
|
}
|
|
};
|
|
|
|
return <Input type="text" value={updatedValue} onChange={onChange} onBlur={onBlur} onKeyDown={onKeyDown} />;
|
|
}
|