rsuite
Version:
A suite of react components
77 lines (64 loc) • 2.31 kB
JavaScript
import * as React from 'react';
import classNames from 'classnames';
import prefix, { defaultClassPrefix } from '../utils/prefix';
import { precisionMath } from './utils';
var addPrefix = prefix(defaultClassPrefix('slider'));
function Mark(props) {
var _classNames;
var mark = props.mark,
last = props.last,
renderMark = props.renderMark;
var classes = classNames(addPrefix('mark'), (_classNames = {}, _classNames[addPrefix('last-mark')] = last, _classNames));
if (renderMark) {
return React.createElement("span", {
className: classes
}, React.createElement("span", {
className: addPrefix('mark-content')
}, renderMark(mark)));
}
return null;
}
function Graduated(props) {
var step = props.step,
min = props.min,
max = props.max,
count = props.count,
value = props.value,
renderMark = props.renderMark;
var activeIndexs = [];
var startIndex = 0;
var endIndex = 0;
if (Array.isArray(value)) {
var start = value[0],
end = value[1];
startIndex = precisionMath(start / step - min / step);
endIndex = precisionMath(end / step - min / step);
activeIndexs.push(precisionMath(Math.ceil((start - min) / (max - min) * count)));
activeIndexs.push(precisionMath(Math.ceil((end - min) / (max - min) * count)));
} else {
endIndex = precisionMath(value / step - min / step);
activeIndexs.push(precisionMath(Math.ceil((value - min) / (max - min) * count)));
}
var graduatedItems = [];
for (var i = 0; i < count; i += 1) {
var _classNames2;
var classes = classNames((_classNames2 = {}, _classNames2[addPrefix('pass')] = i >= startIndex && i <= endIndex, _classNames2[addPrefix('active')] = ~activeIndexs.indexOf(i), _classNames2));
var _mark = precisionMath(i * step + min);
var last = i === count - 1;
graduatedItems.push(React.createElement("li", {
className: classes,
key: i
}, React.createElement(Mark, {
mark: _mark,
renderMark: renderMark
}), last ? React.createElement(Mark, {
mark: _mark,
renderMark: renderMark,
last: last
}) : null));
}
return React.createElement("div", {
className: addPrefix('graduator')
}, React.createElement("ul", null, graduatedItems));
}
export default Graduated;