fleet/frontend/components/forms/fields/Slider/Slider.jsx

56 lines
1.4 KiB
React
Raw Normal View History

import React from "react";
import PropTypes from "prop-types";
import classnames from "classnames";
import { pick } from "lodash";
2016-12-16 15:54:49 +00:00
import FormField from "components/forms/FormField";
2016-12-16 15:54:49 +00:00
const Slider = (props) => {
const { onChange, value, inactiveText = "Off", activeText = "On" } = props;
const baseClass = "fleet-slider";
2016-12-16 15:54:49 +00:00
const sliderBtnClass = classnames(baseClass, {
[`${baseClass}--active`]: value,
});
2016-12-16 15:54:49 +00:00
const sliderDotClass = classnames(`${baseClass}__dot`, {
[`${baseClass}__dot--active`]: value,
});
2016-12-16 15:54:49 +00:00
const handleClick = (evt) => {
evt.preventDefault();
return onChange(!value);
};
const formFieldProps = pick(props, ["hint", "label", "error", "name"]);
2016-12-16 15:54:49 +00:00
return (
<FormField {...formFieldProps} type="slider">
2016-12-27 15:32:30 +00:00
<div className={`${baseClass}__wrapper`}>
<span className={`${baseClass}__label ${baseClass}__label--inactive`}>
{inactiveText}
</span>
<button
className={`button button--unstyled ${sliderBtnClass}`}
onClick={handleClick}
>
2016-12-27 15:32:30 +00:00
<div className={sliderDotClass} />
</button>
<span className={`${baseClass}__label ${baseClass}__label--active`}>
{activeText}
</span>
2016-12-27 15:32:30 +00:00
</div>
2016-12-16 15:54:49 +00:00
</FormField>
);
};
Slider.propTypes = {
value: PropTypes.bool,
onChange: PropTypes.func,
inactiveText: PropTypes.string,
activeText: PropTypes.string,
};
export default Slider;