simple-circle-timer
Version:
Lightweight, easily implemented countdown timer with circular progress bar. Optional Play, Pause, and Reset buttons.
84 lines (72 loc) • 2.56 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _react = _interopRequireDefault(require("react"));
var _propTypes = _interopRequireDefault(require("prop-types"));
var _Circle = _interopRequireDefault(require("./Circle"));
var _useTimer2 = require("../hooks/useTimer");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
var Timer = function Timer(props) {
var minutes = props.minutes,
running = props.running,
setRunning = props.setRunning,
timeAtLoad = props.timeAtLoad,
reset = props.reset,
setReset = props.setReset,
showMs = props.showMs,
onComplete = props.onComplete;
var _useTimer = (0, _useTimer2.useTimer)(minutes, running, setRunning, timeAtLoad, reset, setReset, onComplete),
timeLeft = _useTimer.timeLeft;
var mins = Math.floor(timeLeft % 360000 / 60000);
var secs = Math.floor(timeLeft % 60000 / 1000);
var mils = Math.floor(timeLeft % 60000 / 10);
var pad = function pad(num) {
return ('00' + num).slice(-2);
};
var displayTime = "".concat(pad(mins), ":").concat(pad(secs)).concat(showMs ? ":".concat(pad(mils)) : '');
return /*#__PURE__*/_react["default"].createElement(_Circle["default"], {
size: props.size,
fontSize: props.fontSize,
minutes: props.minutes,
fill: props.fillColor,
bgColor: props.bgColor,
playState: running ? 'running' : 'paused',
reset: reset
}, timeLeft > 0 ? displayTime : props.completeMsg);
};
var _default = Timer;
exports["default"] = _default;
Timer.propTypes = {
size: _propTypes["default"].number,
fontSize: _propTypes["default"].number,
minutes: _propTypes["default"].number,
fillColor: _propTypes["default"].string,
bgColor: _propTypes["default"].string,
showMs: _propTypes["default"].bool,
onComplete: _propTypes["default"].func,
completeMsg: _propTypes["default"].string,
running: _propTypes["default"].oneOfType([_propTypes["default"].bool, _propTypes["default"].number]),
setRunning: _propTypes["default"].func,
timeAtLoad: _propTypes["default"].number,
reset: _propTypes["default"].bool,
setReset: _propTypes["default"].func
};
Timer.defaultProps = {
size: 200,
fontSize: 40,
minutes: 1,
fillColor: '#5bcc69',
bgColor: 'white',
showMs: false,
onComplete: function onComplete() {
return console.log('Timer complete');
},
completeMsg: '✓',
running: true,
setRunning: null,
timeAtLoad: Date.now(),
reset: false,
setReset: null
};