UNPKG

yqcloud-ui

Version:

An enterprise-class UI design language and React-based implementation

160 lines (128 loc) 5.57 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _extends2 = require('babel-runtime/helpers/extends'); var _extends3 = _interopRequireDefault(_extends2); var _objectWithoutProperties2 = require('babel-runtime/helpers/objectWithoutProperties'); var _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2); var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck'); var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); var _possibleConstructorReturn2 = require('babel-runtime/helpers/possibleConstructorReturn'); var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); var _inherits2 = require('babel-runtime/helpers/inherits'); var _inherits3 = _interopRequireDefault(_inherits2); var _react = require('react'); var _react2 = _interopRequireDefault(_react); var _propTypes = require('prop-types'); var _propTypes2 = _interopRequireDefault(_propTypes); var _enhancer = require('./enhancer'); var _enhancer2 = _interopRequireDefault(_enhancer); var _types = require('./types'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } /* eslint react/prop-types: 0 */ var Circle = function (_Component) { (0, _inherits3['default'])(Circle, _Component); function Circle() { (0, _classCallCheck3['default'])(this, Circle); return (0, _possibleConstructorReturn3['default'])(this, _Component.apply(this, arguments)); } Circle.prototype.getPathStyles = function getPathStyles() { var _props = this.props, percent = _props.percent, strokeWidth = _props.strokeWidth, _props$gapDegree = _props.gapDegree, gapDegree = _props$gapDegree === undefined ? 0 : _props$gapDegree, gapPosition = _props.gapPosition; var radius = 50 - strokeWidth / 2; var beginPositionX = 0; var beginPositionY = -radius; var endPositionX = 0; var endPositionY = -2 * radius; switch (gapPosition) { case 'left': beginPositionX = -radius; beginPositionY = 0; endPositionX = 2 * radius; endPositionY = 0; break; case 'right': beginPositionX = radius; beginPositionY = 0; endPositionX = -2 * radius; endPositionY = 0; break; case 'bottom': beginPositionY = radius; endPositionY = 2 * radius; break; default: } var pathString = 'M 50,50 m ' + beginPositionX + ',' + beginPositionY + '\n a ' + radius + ',' + radius + ' 0 1 1 ' + endPositionX + ',' + -endPositionY + '\n a ' + radius + ',' + radius + ' 0 1 1 ' + -endPositionX + ',' + endPositionY; var len = Math.PI * 2 * radius; var trailPathStyle = { strokeDasharray: len - gapDegree + 'px ' + len + 'px', strokeDashoffset: '-' + gapDegree / 2 + 'px', transition: 'stroke-dashoffset .3s ease 0s, stroke-dasharray .3s ease 0s, stroke .3s' }; var strokePathStyle = { strokeDasharray: percent / 100 * (len - gapDegree) + 'px ' + len + 'px', strokeDashoffset: '-' + gapDegree / 2 + 'px', transition: 'stroke-dashoffset .3s ease 0s, stroke-dasharray .3s ease 0s, stroke .3s, stroke-width .06s ease .3s' // eslint-disable-line }; return { pathString: pathString, trailPathStyle: trailPathStyle, strokePathStyle: strokePathStyle }; }; Circle.prototype.render = function render() { var _this2 = this; var _props2 = this.props, prefixCls = _props2.prefixCls, strokeWidth = _props2.strokeWidth, trailWidth = _props2.trailWidth, strokeColor = _props2.strokeColor, percent = _props2.percent, trailColor = _props2.trailColor, strokeLinecap = _props2.strokeLinecap, style = _props2.style, className = _props2.className, restProps = (0, _objectWithoutProperties3['default'])(_props2, ['prefixCls', 'strokeWidth', 'trailWidth', 'strokeColor', 'percent', 'trailColor', 'strokeLinecap', 'style', 'className']); var _getPathStyles = this.getPathStyles(), pathString = _getPathStyles.pathString, trailPathStyle = _getPathStyles.trailPathStyle, strokePathStyle = _getPathStyles.strokePathStyle; delete restProps.percent; delete restProps.gapDegree; delete restProps.gapPosition; return _react2['default'].createElement('svg', (0, _extends3['default'])({ className: prefixCls + '-circle ' + className, viewBox: '0 0 100 100', style: style }, restProps), _react2['default'].createElement('path', { className: prefixCls + '-circle-trail', d: pathString, stroke: trailColor, strokeWidth: trailWidth || strokeWidth, fillOpacity: '0', style: trailPathStyle }), _react2['default'].createElement('path', { className: prefixCls + '-circle-path', d: pathString, strokeLinecap: strokeLinecap, stroke: strokeColor, strokeWidth: this.props.percent === 0 ? 0 : strokeWidth, fillOpacity: '0', ref: function ref(path) { _this2.path = path; }, style: strokePathStyle })); }; return Circle; }(_react.Component); Circle.propTypes = (0, _extends3['default'])({}, _types.propTypes, { gapPosition: _propTypes2['default'].oneOf(['top', 'bottom', 'left', 'right']) }); Circle.defaultProps = (0, _extends3['default'])({}, _types.defaultProps, { gapPosition: 'top' }); exports['default'] = (0, _enhancer2['default'])(Circle); module.exports = exports['default'];