@100mslive/roomkit-react
Version:

89 lines (84 loc) • 2.92 kB
JSX
import React, { useCallback, useState } from 'react';
import { InfoIcon } from '@100mslive/react-icons';
import { Flex, Input, Label, Text, Tooltip } from '../../../';
import { DialogRow } from '../../primitives/DialogContent';
import {
RTMP_RECORD_DEFAULT_RESOLUTION,
RTMP_RECORD_RESOLUTION_MAX,
RTMP_RECORD_RESOLUTION_MIN,
} from '../../common/constants';
export const ResolutionInput = ({ onResolutionChange, disabled, tooltipText, css, testId }) => {
const [resolution, setResolution] = useState(RTMP_RECORD_DEFAULT_RESOLUTION);
const resolutionChangeHandler = useCallback(
event => {
const { name, value } = event.target;
let width = name === 'resWidth' ? Number(value) : resolution.width;
let height = name === 'resHeight' ? Number(value) : resolution.height;
if (width === 0) {
width = null;
}
if (height === 0) {
height = null;
}
const newResolution = {
width: !isNaN(width) ? width : RTMP_RECORD_DEFAULT_RESOLUTION.width,
height: !isNaN(height) ? height : RTMP_RECORD_DEFAULT_RESOLUTION.height,
};
setResolution(newResolution);
},
[resolution],
);
return (
<DialogRow breakSm css={css}>
<Flex gap={1}>
<Label css={{ mb: '$8' }}>Resolution</Label>
{tooltipText && (
<Tooltip title={tooltipText}>
<div>
<InfoIcon color="#B0C3DB" />
</div>
</Tooltip>
)}
</Flex>
<Flex
justify="between"
css={{ width: !tooltipText ? '100%' : '70%', '@sm': { width: '100%' } }}
gap={2}
direction="column"
>
<Flex justify="between" gap={2}>
<Flex direction="column" css={{ width: '50%' }}>
<Text variant="xs">Width</Text>
<Input
data-testid={`${testId}_width`}
css={{ width: '100%', mt: '$4' }}
name="resWidth"
value={resolution.width}
onChange={resolutionChangeHandler}
readOnly={disabled}
min={RTMP_RECORD_RESOLUTION_MIN}
max={RTMP_RECORD_RESOLUTION_MAX}
onBlur={() => onResolutionChange(resolution)}
type="number"
/>
</Flex>
<Flex direction="column" css={{ width: '50%' }}>
<Text variant="xs">Height</Text>
<Input
data-testid={`${testId}_height`}
css={{ width: '100%', mt: '$4' }}
name="resHeight"
value={resolution.height}
onChange={resolutionChangeHandler}
onBlur={() => onResolutionChange(resolution)}
readOnly={disabled}
min={RTMP_RECORD_RESOLUTION_MIN}
max={RTMP_RECORD_RESOLUTION_MAX}
type="number"
/>
</Flex>
</Flex>
</Flex>
</DialogRow>
);
};