blob: aa351ccd244c734478573a9887a6b9034179192f (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
|
import { ChangeEvent, Component, ReactElement } from 'react';
import { observer } from 'mobx-react';
import classnames from 'classnames';
import { noop } from 'lodash';
interface IProps {
field: any;
className?: string;
showLabel?: boolean;
disabled?: boolean;
type?: 'range' | 'number';
onSliderChange?: (e: ChangeEvent) => void;
}
// TODO: [TS DEBT] Should this file be converted into the coding style similar to './toggle/index.tsx'?
@observer
class Slider extends Component<IProps> {
onChange(e: ChangeEvent<HTMLInputElement>): void {
const { field, onSliderChange = noop } = this.props;
field.onChange(e);
onSliderChange(e);
}
render(): ReactElement {
const {
field,
className = '',
showLabel = true,
disabled = false,
type = 'range',
} = this.props;
if (field.value === '' && field.default !== '') {
field.value = field.default;
}
return (
<div
className={classnames([
'franz-form__field',
'franz-form__slider-wrapper',
className,
])}
>
<div className="slider-container">
<input
className="slider"
type={type}
id={field.id}
name={field.name}
value={field.value}
min="1"
max="100"
onChange={e => (disabled ? null : this.onChange(e))}
/>
</div>
{field.error && <div className={field.error}>{field.error}</div>}
{field.label && showLabel && (
<label className="franz-form__label" htmlFor={field.id}>
{field.label}
</label>
)}
</div>
);
}
}
export default Slider;
|