From 005fba5ca36cc2b0a572cdc42ab45624a90696f4 Mon Sep 17 00:00:00 2001 From: Thomas Nordquist Date: Mon, 24 Jun 2019 12:47:22 +0200 Subject: [PATCH] Prevent tab-event closing the chart range settings --- .../ChartSettings/RangeSettings.tsx | 60 ++++++++++++------- app/src/effects/useKeyEventHandler.tsx | 31 ---------- 2 files changed, 37 insertions(+), 54 deletions(-) delete mode 100644 app/src/effects/useKeyEventHandler.tsx diff --git a/app/src/components/ChartPanel/ChartSettings/RangeSettings.tsx b/app/src/components/ChartPanel/ChartSettings/RangeSettings.tsx index 12293c5..58a214f 100644 --- a/app/src/components/ChartPanel/ChartSettings/RangeSettings.tsx +++ b/app/src/components/ChartPanel/ChartSettings/RangeSettings.tsx @@ -1,43 +1,38 @@ -import * as React from 'react' +import React, { useCallback, useState, ChangeEvent, MouseEvent } from 'react' import { ChartParameters } from '../../../reducers/Charts' -import { Menu, MenuItem, TextField, Typography } from '@material-ui/core' +import { Menu, TextField, Typography } from '@material-ui/core' import { connect } from 'react-redux' import { bindActionCreators } from 'redux' import { chartActions } from '../../../actions' +import { KeyCodes } from '../../../utils/KeyCodes' -function RangeSettings(props: { +interface Props { actions: { chart: typeof chartActions } chart: ChartParameters anchorEl?: Element open: boolean onClose: () => void -}) { - const dismissClick = React.useCallback((e: React.MouseEvent) => e.stopPropagation(), []) - const [rangeFrom, setRangeFrom] = React.useState( - props.chart.range && props.chart.range.from - ) - const [rangeTo, setRangeTo] = React.useState(props.chart.range && props.chart.range.to) +} - React.useEffect(() => { - const from = parseFloat(rangeFrom as any) - const to = parseFloat(rangeTo as any) - props.actions.chart.updateChart({ - topic: props.chart.topic, - dotPath: props.chart.dotPath, - range: { - from: isNaN(from) ? undefined : from, - to: isNaN(to) ? undefined : to, - }, - }) - }, [rangeFrom, rangeTo]) +function RangeSettings(props: Props) { + const dismissClick = useCallback((e: MouseEvent) => e.stopPropagation(), []) + 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) => { + if (e.keyCode === KeyCodes.tab) { + e.stopPropagation() + } + } - const setFromHandler = React.useCallback((e: React.ChangeEvent) => setRangeFrom(e.target.value), []) - const setToHandler = React.useCallback((e: React.ChangeEvent) => setRangeTo(e.target.value), []) + 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
{ + const from = parseFloat(rangeFrom as any) + const to = parseFloat(rangeTo as any) + props.actions.chart.updateChart({ + topic: props.chart.topic, + dotPath: props.chart.dotPath, + range: { + from: isNaN(from) ? undefined : from, + to: isNaN(to) ? undefined : to, + }, + }) + }, [rangeFrom, rangeTo]) +} diff --git a/app/src/effects/useKeyEventHandler.tsx b/app/src/effects/useKeyEventHandler.tsx deleted file mode 100644 index 0ef85d3..0000000 --- a/app/src/effects/useKeyEventHandler.tsx +++ /dev/null @@ -1,31 +0,0 @@ -import { KeyCodes } from '../utils/KeyCodes' -import { useCallback } from 'react' - -export function useKeyEventHandler(key: KeyCodes, callback: () => void, dependencies: Array = []) { - return useKeyEventHandlers([{ key, callback }], dependencies) -} - -export function useKeyEventHandlers( - actions: Array<{ - key: KeyCodes - callback: (event: KeyboardEvent) => void - preventDefault?: boolean - stopPropagation?: boolean - }>, - dependencies: Array = [] -) { - return useCallback(() => { - return function handleKeyEvent(event: KeyboardEvent) { - const action = actions.find(a => a.key === event.keyCode) - if (action) { - action.callback(event) - if (action.preventDefault !== false) { - event.preventDefault() - } - if (action.stopPropagation !== false) { - event.stopPropagation() - } - } - } - }, dependencies) -}