diff --git a/app/src/components/ChartPanel/ChartSettings/RangeSettings.tsx b/app/src/components/ChartPanel/ChartSettings/RangeSettings.tsx index 58a214f..034e33c 100644 --- a/app/src/components/ChartPanel/ChartSettings/RangeSettings.tsx +++ b/app/src/components/ChartPanel/ChartSettings/RangeSettings.tsx @@ -1,4 +1,4 @@ -import React, { useCallback, useState, ChangeEvent, MouseEvent } from 'react' +import React, { useCallback, useState, ChangeEvent, MouseEvent, useRef, useEffect, useMemo } from 'react' import { ChartParameters } from '../../../reducers/Charts' import { Menu, TextField, Typography } from '@material-ui/core' import { connect } from 'react-redux' @@ -19,37 +19,71 @@ function RangeSettings(props: Props) { const [rangeFrom, setRangeFrom] = useState(props.chart.range && props.chart.range.from) const [rangeTo, setRangeTo] = useState(props.chart.range && props.chart.range.to) useRangeStateToFireUpdateAction(rangeFrom, rangeTo, props) - const dismissTabKey = (e: React.KeyboardEvent) => { + const rangeFromRef = useRef() + const rangeToRef = useRef() + + useEffect(() => { + rangeFromRef.current && rangeFromRef.current.focus() + }, [props.open]) + + const handleKeyEvents = (e: React.KeyboardEvent) => { if (e.keyCode === KeyCodes.tab) { + // Switch focus between those two + if (document.activeElement === rangeFromRef.current) { + rangeToRef.current && rangeToRef.current.focus() + } else { + rangeFromRef.current && rangeFromRef.current.focus() + } + + // Prevent closing the menu e.stopPropagation() + // Prevent default tab behavior (focus/blur) + e.preventDefault() + } else if (e.keyCode === KeyCodes.enter) { + props.onClose() } } const setFromHandler = useCallback((e: ChangeEvent) => setRangeFrom(e.target.value), []) const setToHandler = useCallback((e: ChangeEvent) => setRangeTo(e.target.value), []) - return ( - - Define custom ranges for the Y-Axis -
- - -
-
+ return useMemo( + () => ( + + Define custom ranges for the Y-Axis +
+ + +
+
+ ), + [rangeFrom, rangeTo, props.open] ) }