Home Reference Source Repository

src/components/icon/IconLoading.js

  1. /**
  2. * @author haw
  3. */
  4.  
  5. import React, {
  6. PropTypes
  7. } from 'react';
  8. import {classNames, px2rem} from '../util';
  9.  
  10. const prefix = 'icon-loading';
  11. const defaultSize = 34;
  12.  
  13. export default function IconLoading(props) {
  14. const {
  15. size,
  16. className,
  17. style,
  18. ...rest
  19. } = props;
  20. const loadingLeafs = createLeafs(prefix);
  21. let clazz = classNames(prefix, {
  22. [className]: className
  23. });
  24. let rem = px2rem(size);
  25. let scale = size / defaultSize;
  26. let scaleStyle = {
  27. transform: (`scale(${scale})`)
  28. };
  29. let newStyle = {
  30. ...style,
  31. width: `${rem}rem`,
  32. height: `${rem}rem`
  33. };
  34.  
  35. return (
  36. <div className={clazz} style={newStyle} {...rest}>
  37. <div style={scaleStyle}>{loadingLeafs}</div>
  38. </div>
  39. );
  40. }
  41.  
  42. IconLoading.propTypes = {
  43. size: PropTypes.number,
  44. style: PropTypes.object,
  45. className: PropTypes.string
  46. };
  47.  
  48. IconLoading.defaultProps = {
  49. size: defaultSize
  50. };
  51.  
  52. function createLeafs(prefix) {
  53. const count = 12;
  54. const leafPrefix = `${prefix}-leaf`;
  55. const leafs = [];
  56. let className;
  57.  
  58. for (let i = 0; i < count; i++) {
  59. className = classNames(leafPrefix, `${leafPrefix}-${i}`);
  60. leafs.push(<i className={className} key={i}></i>);
  61. }
  62.  
  63. return leafs;
  64. }