UNPKG

react-bootstrap

Version:

Bootstrap 3 components build with React

170 lines (133 loc) 4.64 kB
/* eslint react/prop-types: [2, {ignore: "bsStyle"}] */ /* BootstrapMixin contains `bsStyle` type validation */ 'use strict'; var _extends = require('babel-runtime/helpers/extends')['default']; var _interopRequireDefault = require('babel-runtime/helpers/interop-require-default')['default']; exports.__esModule = true; var _react = require('react'); var _react2 = _interopRequireDefault(_react); var _Interpolate = require('./Interpolate'); var _Interpolate2 = _interopRequireDefault(_Interpolate); var _BootstrapMixin = require('./BootstrapMixin'); var _BootstrapMixin2 = _interopRequireDefault(_BootstrapMixin); var _classnames = require('classnames'); var _classnames2 = _interopRequireDefault(_classnames); var _utilsValidComponentChildren = require('./utils/ValidComponentChildren'); var _utilsValidComponentChildren2 = _interopRequireDefault(_utilsValidComponentChildren); var ProgressBar = _react2['default'].createClass({ displayName: 'ProgressBar', propTypes: { min: _react.PropTypes.number, now: _react.PropTypes.number, max: _react.PropTypes.number, label: _react.PropTypes.node, srOnly: _react.PropTypes.bool, striped: _react.PropTypes.bool, active: _react.PropTypes.bool, children: onlyProgressBar, className: _react2['default'].PropTypes.string, interpolateClass: _react.PropTypes.node, isChild: _react.PropTypes.bool }, mixins: [_BootstrapMixin2['default']], getDefaultProps: function getDefaultProps() { return { bsClass: 'progress-bar', min: 0, max: 100 }; }, getPercentage: function getPercentage(now, min, max) { var roundPrecision = 1000; return Math.round((now - min) / (max - min) * 100 * roundPrecision) / roundPrecision; }, render: function render() { if (this.props.isChild) { return this.renderProgressBar(); } var content = undefined; if (this.props.children) { content = _utilsValidComponentChildren2['default'].map(this.props.children, this.renderChildBar); } else { content = this.renderProgressBar(); } return _react2['default'].createElement( 'div', _extends({}, this.props, { className: _classnames2['default'](this.props.className, 'progress') }), content ); }, renderChildBar: function renderChildBar(child, index) { return _react.cloneElement(child, { isChild: true, key: child.key ? child.key : index }); }, renderProgressBar: function renderProgressBar() { var percentage = this.getPercentage(this.props.now, this.props.min, this.props.max); var label = undefined; if (typeof this.props.label === 'string') { label = this.renderLabel(percentage); } else { label = this.props.label; } if (this.props.srOnly) { label = _react2['default'].createElement( 'span', { className: "sr-only" }, label ); } var classes = _classnames2['default'](this.props.className, this.getBsClassSet(), { active: this.props.active, 'progress-bar-striped': this.props.active || this.props.striped }); return _react2['default'].createElement( 'div', _extends({}, this.props, { className: classes, role: "progressbar", style: { width: percentage + '%' }, 'aria-valuenow': this.props.now, 'aria-valuemin': this.props.min, 'aria-valuemax': this.props.max }), label ); }, renderLabel: function renderLabel(percentage) { var InterpolateClass = this.props.interpolateClass || _Interpolate2['default']; return _react2['default'].createElement( InterpolateClass, { now: this.props.now, min: this.props.min, max: this.props.max, percent: percentage, bsStyle: this.props.bsStyle }, this.props.label ); } }); /** * Custom propTypes checker */ function onlyProgressBar(props, propName, componentName) { if (props[propName]) { var _ret = (function () { var error = undefined, childIdentifier = undefined; _react2['default'].Children.forEach(props[propName], function (child) { if (child.type !== ProgressBar) { childIdentifier = child.type.displayName ? child.type.displayName : child.type; error = new Error('Children of ' + componentName + ' can contain only ProgressBar components. Found ' + childIdentifier); } }); return { v: error }; })(); if (typeof _ret === 'object') return _ret.v; } } exports['default'] = ProgressBar; module.exports = exports['default'];