import React, {createElement, cloneElement} from 'react'; import {findDOMNode} from 'react-dom'; import {toArrayChildren} from './utils'; import assign from 'object-assign'; class AntNumber extends React.Component { constructor(props) { super(props); const children = toArrayChildren(this.props.children); this.state = { children, }; } getNumberOnly(c) { const childrenToReturn = []; for (let i = -1; i < 11; i++) { let count = i >= 10 ? i - 10 : i; count = i === -1 ? 9 : count; const children =
{count}
; childrenToReturn.push(children); } const key = 'only_' + c; return createElement('span', {className: `${this.props.prefixCls}-only`, key: key}, childrenToReturn); } getNumberElement(props) { const count = props.count; if (!count || count === '') { return null; } let length = count.toString().length; let childrenWap = []; const a = childrenWap.length || 0; if (length < a) { childrenWap.splice(0, 1); } let i = a;//length - 1; while (i < length) { const children = this.getNumberOnly(i); childrenWap.unshift(children); i++; } const height = findDOMNode(this).offsetHeight; childrenWap = childrenWap.map((child, j)=> { let oneData = Number(count.toString()[j]); let offsetTop = -(oneData + 1) * height; return cloneElement(child, {style: {transform: 'translateY(' + offsetTop + 'px)'}}); }); return childrenWap; } updateChildren(props) { if (typeof props.count === 'string') { return this.setState({ children: [props.count] }); } let newChildren = this.getNumberElement(props); //newChildren = this.addStyle(props, newChildren); if (newChildren && newChildren.length) { this.setState({ children: newChildren }); } } componentDidMount() { this.updateChildren(this.props); } componentWillReceiveProps(nextProps) { this.updateChildren(nextProps); } render() { const childrenToRender = this.state.children; const props = assign({}, this.props, {className: this.props.prefixCls + ' ' + this.props.className}); return createElement(this.props.component, props, childrenToRender); } } AntNumber.defaultProps = { prefixCls: 'ant-number', count: null, component: 'sup' }; AntNumber.propTypes = { count: React.PropTypes.oneOfType([ React.PropTypes.string, React.PropTypes.number ]), component: React.PropTypes.string }; export default AntNumber;