@6thquake/react-material
Version:
React components that implement Google's Material Design.
270 lines (227 loc) • 7.62 kB
JavaScript
"use strict";
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
var _react = _interopRequireWildcard(require("react"));
var _propTypes = _interopRequireDefault(require("prop-types"));
var _withStyles = _interopRequireDefault(require("../styles/withStyles"));
var _LinearProgress = _interopRequireDefault(require("@material-ui/core/LinearProgress"));
var _icons = require("@material-ui/icons");
var _colors = require("../colors");
var styles = function styles(theme) {
return {
lineicon: {
display: 'flex',
alignItems: 'center'
},
lineProgress: {
flex: 1
},
nubProgress: {
marginLeft: theme.spacing(2),
width: "".concat(35, "px"),
textAlign: 'left',
fontSize: "".concat(1, "em"),
verticalAlign: 'middle',
fontAamily: 'tahoma'
},
icondiv: {
width: 50
},
icon: {
marginLeft: theme.spacing(2),
'&:hover': {
color: _colors.red[200]
}
}
};
};
var Progress =
/*#__PURE__*/
function (_Component) {
(0, _inherits2.default)(Progress, _Component);
function Progress() {
var _this;
(0, _classCallCheck2.default)(this, Progress);
_this = (0, _possibleConstructorReturn2.default)(this, (0, _getPrototypeOf2.default)(Progress).call(this));
_this.timer = null;
_this.progress = function () {
var estimatedTime = _this.props.estimatedTime;
var completed = _this.state.completed;
var speed = estimatedTime > 0 ? Math.ceil(estimatedTime) : 4;
var diff = Math.floor((100 - completed) / speed);
_this.setState({
completed: completed + diff
});
};
_this.state = {
completed: 0,
show: false
};
return _this;
}
(0, _createClass2.default)(Progress, [{
key: "componentDidMount",
value: function componentDidMount() {
if (this.props.isPromise) {
this.timer = setInterval(this.progress, 300);
}
}
}, {
key: "componentDidUpdate",
value: function componentDidUpdate() {
var _this2 = this;
if (this.props.isPromise) {
if (this.state.completed === 100) {
setTimeout(function () {
return _this2.setState({
show: false,
completed: 0
});
}, 500);
} else {
if (this.timer) {
clearTimeout(this.timer);
}
this.timer = setTimeout(this.progress, 300);
}
}
}
}, {
key: "componentWillUnmount",
value: function componentWillUnmount() {
if (this.timer) {
clearInterval(this.timer);
}
}
}, {
key: "render",
value: function render() {
var _this$props = this.props,
isPromise = _this$props.isPromise,
baseProgress = _this$props.baseProgress,
showPercentage = _this$props.showPercentage,
value = _this$props.value,
error = _this$props.error,
others = (0, _objectWithoutProperties2.default)(_this$props, ["isPromise", "baseProgress", "showPercentage", "value", "error"]);
var _this$state = this.state,
completed = _this$state.completed,
show = _this$state.show;
var classes = this.props.classes;
if (baseProgress) {
return _react.default.createElement(_LinearProgress.default, this.props);
}
if (isPromise) {
return show ? _react.default.createElement(_LinearProgress.default, (0, _extends2.default)({
variant: "buffer",
value: completed
}, others)) : null;
}
if (!showPercentage) {
return _react.default.createElement(_LinearProgress.default, (0, _extends2.default)({
variant: "determinate",
value: value
}, others));
}
if (showPercentage) {
var zcomplete = Math.floor(value);
var finishOrError = zcomplete === 100 ? _react.default.createElement(_icons.Done, {
className: classes.icon,
color: "primary"
}) : error ? _react.default.createElement(_icons.HighlightOff, {
className: classes.icon,
color: "error"
}) : _react.default.createElement("span", {
className: classes.nubProgress
}, "".concat(zcomplete, "%"));
return _react.default.createElement("div", {
className: classes.lineicon
}, _react.default.createElement("div", {
className: classes.lineProgress
}, _react.default.createElement(_LinearProgress.default, (0, _extends2.default)({
variant: "determinate",
color: error ? 'secondary' : 'primary',
value: value
}, this.props))), _react.default.createElement("div", {
className: classes.icondiv
}, finishOrError));
}
}
}], [{
key: "getDerivedStateFromProps",
value: function getDerivedStateFromProps(nextProps, prevState) {
if (!prevState.preProps || nextProps.isPromise && nextProps !== prevState.preProps && nextProps.isFinish !== prevState.preProps.isFinish) {
return {
show: true,
completed: nextProps.isFinish ? 100 : 0,
preProps: nextProps
};
}
return null;
}
}]);
return Progress;
}(_react.Component);
Progress.propTypes = {
/**
* If true, simulation progress.
*/
baseProgress: _propTypes.default.bool,
/**
* The color of the component. It supports those theme colors that make sense for this component.
*/
color: _propTypes.default.oneOf(['primary', 'secondary']),
/**
* If true, progress wrong.
*/
error: _propTypes.default.bool,
/**
* Estimated time of the progress,when isPromise is true,the units is seconds.
*/
estimatedTime: _propTypes.default.number,
/**
* If true, progress finish when isPromise is true.
*/
isFinish: _propTypes.default.bool,
/**
* If true, it is a normal progress without percentage.
*/
isPromise: _propTypes.default.bool,
/**
* If true, progress with percentage.
*/
showPercentage: _propTypes.default.bool,
/**
* The value for the buffer variant. Value between 0 and 100.
*/
value: _propTypes.default.number,
/**
* Progress percentage,only when isPromise is false. Value between 0 and 100.
*/
valueBuffer: _propTypes.default.number,
/**
* The variant of progress indicator. Use indeterminate or query when there is no progress value.
*/
variant: _propTypes.default.string
};
Progress.defaultProps = {
value: 0,
error: false,
isFinish: false,
estimatedTime: 2,
valueBuffer: 10
};
var _default = (0, _withStyles.default)(styles, {
name: 'RMProgress'
})(Progress);
exports.default = _default;