Fixed input numbers in player settings

main
Boris Sekachev 6 years ago
parent e55deb7142
commit b12ae3471b

@ -11,6 +11,8 @@ import Tooltip from 'antd/lib/tooltip';
import InputNumber from 'antd/lib/input-number'; import InputNumber from 'antd/lib/input-number';
import Text from 'antd/lib/typography/Text'; import Text from 'antd/lib/typography/Text';
import { clamp } from 'utils/math';
interface Props { interface Props {
startFrame: number; startFrame: number;
stopFrame: number; stopFrame: number;
@ -69,13 +71,7 @@ function PlayerNavigation(props: Props): JSX.Element {
// https://stackoverflow.com/questions/38256332/in-react-whats-the-difference-between-onchange-and-oninput // https://stackoverflow.com/questions/38256332/in-react-whats-the-difference-between-onchange-and-oninput
onChange={(value: number | undefined) => { onChange={(value: number | undefined) => {
if (typeof (value) === 'number') { if (typeof (value) === 'number') {
setFrameInputValue( setFrameInputValue(clamp(value, stopFrame, startFrame));
Math.max(
Math.min(
Number(value), stopFrame,
), startFrame,
),
);
} }
}} }}
onBlur={() => { onBlur={() => {

@ -4,28 +4,17 @@
import React from 'react'; import React from 'react';
import { import { Row, Col } from 'antd/lib/grid';
Row, import Checkbox, { CheckboxChangeEvent } from 'antd/lib/checkbox';
Col, import Slider from 'antd/lib/slider';
Checkbox, import Select from 'antd/lib/select';
Slider, import InputNumber from 'antd/lib/input-number';
Select, import Icon from 'antd/lib/icon';
InputNumber,
Icon,
} from 'antd';
import Text from 'antd/lib/typography/Text'; import Text from 'antd/lib/typography/Text';
import { CheckboxChangeEvent } from 'antd/lib/checkbox';
import {
BackJumpIcon,
ForwardJumpIcon,
} from 'icons';
import { import { clamp } from 'utils/math';
FrameSpeed, import { BackJumpIcon, ForwardJumpIcon } from 'icons';
GridColor, import { FrameSpeed, GridColor } from 'reducers/interfaces';
} from 'reducers/interfaces';
interface Props { interface Props {
frameStep: number; frameStep: number;
@ -78,18 +67,24 @@ export default function PlayerSettingsComponent(props: Props): JSX.Element {
onChangeSaturationLevel, onChangeSaturationLevel,
} = props; } = props;
const minFrameStep = 2;
const maxFrameStep = 1000;
const minGridSize = 5;
const maxGridSize = 1000;
return ( return (
<div className='cvat-player-settings'> <div className='cvat-player-settings'>
<Row type='flex' align='bottom' className='cvat-player-settings-step'> <Row type='flex' align='bottom' className='cvat-player-settings-step'>
<Col> <Col>
<Text className='cvat-text-color'> Player step </Text> <Text className='cvat-text-color'> Player step </Text>
<InputNumber <InputNumber
min={2} min={minFrameStep}
max={1000} max={maxFrameStep}
value={frameStep} value={frameStep}
onChange={(value: number | undefined): void => { onChange={(value: number | undefined): void => {
if (value) { if (typeof (value) === 'number') {
onChangeFrameStep(value); onChangeFrameStep(clamp(value, minFrameStep, maxFrameStep));
} }
}} }}
/> />
@ -138,14 +133,14 @@ export default function PlayerSettingsComponent(props: Props): JSX.Element {
<Col span={8} className='cvat-player-settings-grid-size'> <Col span={8} className='cvat-player-settings-grid-size'>
<Text className='cvat-text-color'> Grid size </Text> <Text className='cvat-text-color'> Grid size </Text>
<InputNumber <InputNumber
min={5} min={minGridSize}
max={1000} max={maxGridSize}
step={1} step={1}
value={gridSize} value={gridSize}
disabled={!grid} disabled={!grid}
onChange={(value: number | undefined): void => { onChange={(value: number | undefined): void => {
if (value) { if (typeof (value) === 'number') {
onChangeGridSize(value); onChangeGridSize(clamp(value, minGridSize, maxGridSize));
} }
}} }}
/> />

@ -9,6 +9,8 @@ import Checkbox, { CheckboxChangeEvent } from 'antd/lib/checkbox';
import InputNumber from 'antd/lib/input-number'; import InputNumber from 'antd/lib/input-number';
import Text from 'antd/lib/typography/Text'; import Text from 'antd/lib/typography/Text';
import { clamp } from 'utils/math';
interface Props { interface Props {
autoSave: boolean; autoSave: boolean;
autoSaveInterval: number; autoSaveInterval: number;
@ -63,10 +65,10 @@ export default function WorkspaceSettingsComponent(props: Props): JSX.Element {
onChange={(value: number | undefined): void => { onChange={(value: number | undefined): void => {
if (typeof (value) === 'number') { if (typeof (value) === 'number') {
onChangeAutoSaveInterval( onChangeAutoSaveInterval(
Math.max( clamp(
Math.min( value,
Number(value), maxAutoSaveInterval, minAutoSaveInterval,
), minAutoSaveInterval, maxAutoSaveInterval,
) * 60 * 1000, ) * 60 * 1000,
); );
} }
@ -100,13 +102,7 @@ export default function WorkspaceSettingsComponent(props: Props): JSX.Element {
value={aamZoomMargin} value={aamZoomMargin}
onChange={(value: number | undefined): void => { onChange={(value: number | undefined): void => {
if (typeof (value) === 'number') { if (typeof (value) === 'number') {
onChangeAAMZoomMargin( onChangeAAMZoomMargin(clamp(value, minAAMMargin, maxAAMMargin));
Math.max(
Math.min(
Number(value), maxAAMMargin,
), minAAMMargin,
),
);
} }
}} }}
/> />

@ -0,0 +1,4 @@
/* eslint-disable-next-line import/prefer-default-export */
export function clamp(value: number, min: number, max: number): number {
return Math.max(Math.min(value, max), min);
}
Loading…
Cancel
Save