UNPKG

react-bootstrap

Version:

Bootstrap 3 components build with React

173 lines (136 loc) 4.89 kB
/* eslint react/prop-types: [2, {ignore: "bsStyle"}] */ /* BootstrapMixin contains `bsStyle` type validation */ 'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } 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 classes = { active: this.props.active, progress: true, 'progress-striped': this.props.active || this.props.striped }; 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: (0, _classnames2['default'])(this.props.className, classes) }), content ); }, renderChildBar: function renderChildBar(child, index) { return (0, _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 ); } return _react2['default'].createElement( 'div', _extends({}, this.props, { className: (0, _classnames2['default'])(this.props.className, this.getBsClassSet()), 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'];