aboutsummaryrefslogtreecommitdiffstats
path: root/src/components/ui/Slider.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/components/ui/Slider.js')
-rw-r--r--src/components/ui/Slider.js65
1 files changed, 65 insertions, 0 deletions
diff --git a/src/components/ui/Slider.js b/src/components/ui/Slider.js
new file mode 100644
index 000000000..b00a6a3f8
--- /dev/null
+++ b/src/components/ui/Slider.js
@@ -0,0 +1,65 @@
1import React, { Component } from 'react';
2import PropTypes from 'prop-types';
3import { observer } from 'mobx-react';
4import classnames from 'classnames';
5import { Field } from 'mobx-react-form';
6
7export default @observer class Slider extends Component {
8 static propTypes = {
9 field: PropTypes.instanceOf(Field).isRequired,
10 className: PropTypes.string,
11 showLabel: PropTypes.bool,
12 disabled: PropTypes.bool,
13 };
14
15 static defaultProps = {
16 className: '',
17 showLabel: true,
18 disabled: false,
19 };
20
21 onChange(e) {
22 const { field } = this.props;
23
24 field.onChange(e);
25 }
26
27 render() {
28 const {
29 field,
30 className,
31 showLabel,
32 disabled,
33 } = this.props;
34
35 if (field.value === '' && field.default !== '') {
36 field.value = field.default;
37 }
38
39 return (
40 <div
41 className={classnames([
42 'franz-form__field',
43 'franz-form__slider-wrapper',
44 className,
45 ])}
46 >
47 <div className="slider-container">
48 <input
49 className="slider"
50 type="range"
51 id={field.id}
52 name={field.name}
53 value={field.value}
54 min="1"
55 max="100"
56 onChange={e => (!disabled ? this.onChange(e) : null)}
57 />
58 </div>
59
60 {field.error && <div className={field.error}>{field.error}</div>}
61 {field.label && showLabel && <label className="franz-form__label" htmlFor={field.id}>{field.label}</label>}
62 </div>
63 );
64 }
65}