fc-react-slider
Version:
A fully featured slider component made in React
72 lines (54 loc) • 2.33 kB
JavaScript
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = Rail;
var _react = require('react');
var _react2 = _interopRequireDefault(_react);
var _utils = require('./utils');
var _constants = require('./constants');
var _constants2 = _interopRequireDefault(_constants);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
/**
* Returns rail's position value of `left` for horizontal slider and `top`
* for vertical slider
* @param value
* @param min
* @param max
* @param orientation
* @returns {number} Value in Percentage
*/
function getDirectionPositionForRange(value, min, max, orientation) {
return (0, _utils.isVertical)(orientation) ?
// as upper value is used to calculate `top`;
Math.round(((max - value[1]) / max - min) * 100) : Math.round((value[0] / max - min) * 100);
}
function Rail(props) {
var _railStyle;
var value = props.value,
min = props.min,
max = props.max,
orientation = props.orientation,
isRangeType = props.isRangeType;
var difference = isRangeType ? value[1] - value[0] : value;
var dimensionValue = difference / (max - min) * 100;
var directionValue = getDirectionPositionForRange(value, min, max, orientation);
var railStyle = (_railStyle = {}, _defineProperty(_railStyle, _constants2.default[orientation].direction, directionValue + '%'), _defineProperty(_railStyle, _constants2.default[orientation].dimension, dimensionValue + '%'), _railStyle);
if (!isRangeType) {
railStyle[(0, _utils.isVertical)(orientation) ? 'bottom' : 'left'] = 0;
if ((0, _utils.isVertical)(orientation)) {
railStyle.top = 100 - dimensionValue + '%';
} else {
railStyle.left = 0;
}
}
return _react2.default.createElement('div', { className: 'slider-rail', style: railStyle });
}
Rail.propTypes = {
isRangeType: _react.PropTypes.bool.isRequired,
max: _react.PropTypes.number.isRequired,
min: _react.PropTypes.number.isRequired,
orientation: _react.PropTypes.string.isRequired,
value: _react.PropTypes.array.isRequired
};