Canvas: Text input cursor jumping (#57133)
Co-authored-by: nmarrs <nathanielmarrs@gmail.com>
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
import { css } from '@emotion/css';
|
import { css } from '@emotion/css';
|
||||||
import React, { useCallback } from 'react';
|
import React, { useCallback, useEffect, useRef } from 'react';
|
||||||
import { useObservable } from 'react-use';
|
import { useObservable } from 'react-use';
|
||||||
import { of } from 'rxjs';
|
import { of } from 'rxjs';
|
||||||
|
|
||||||
@@ -38,10 +38,14 @@ const TextEdit = (props: CanvasElementProps<TextConfig, TextData>) => {
|
|||||||
let panelData: DataFrame[];
|
let panelData: DataFrame[];
|
||||||
panelData = context.instanceState?.scene?.data.series;
|
panelData = context.instanceState?.scene?.data.series;
|
||||||
|
|
||||||
const onTextChange = (event: React.SyntheticEvent<HTMLInputElement>) => {
|
const textRef = useRef<string>(config.text?.fixed ?? '');
|
||||||
const { value: textValue } = event.currentTarget;
|
|
||||||
saveText(textValue);
|
// Save text on TextEdit unmount
|
||||||
};
|
useEffect(() => {
|
||||||
|
return () => {
|
||||||
|
saveText(textRef.current);
|
||||||
|
};
|
||||||
|
});
|
||||||
|
|
||||||
const onKeyDown = (event: React.KeyboardEvent<HTMLInputElement>) => {
|
const onKeyDown = (event: React.KeyboardEvent<HTMLInputElement>) => {
|
||||||
if (event.key === 'Enter') {
|
if (event.key === 'Enter') {
|
||||||
@@ -53,6 +57,10 @@ const TextEdit = (props: CanvasElementProps<TextConfig, TextData>) => {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const onKeyUp = (event: React.KeyboardEvent<HTMLInputElement>) => {
|
||||||
|
textRef.current = event.currentTarget.value;
|
||||||
|
};
|
||||||
|
|
||||||
const saveText = useCallback(
|
const saveText = useCallback(
|
||||||
(textValue: string) => {
|
(textValue: string) => {
|
||||||
let selectedElement: ElementState;
|
let selectedElement: ElementState;
|
||||||
@@ -80,7 +88,7 @@ const TextEdit = (props: CanvasElementProps<TextConfig, TextData>) => {
|
|||||||
const styles = useStyles2(getStyles(data));
|
const styles = useStyles2(getStyles(data));
|
||||||
return (
|
return (
|
||||||
<div className={styles.inlineEditorContainer}>
|
<div className={styles.inlineEditorContainer}>
|
||||||
{panelData && <Input value={config.text?.fixed ?? ''} onChange={onTextChange} onKeyDown={onKeyDown} autoFocus />}
|
{panelData && <Input defaultValue={config.text?.fixed ?? ''} onKeyDown={onKeyDown} onKeyUp={onKeyUp} autoFocus />}
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user