UNPKG

2.1 kBJSXView Raw
1/**
2 * apeman react package for spinner.
3 * @class ApSpinner
4 */
5
6'use strict'
7
8import React, {PropTypes as types} from 'react'
9import classnames from 'classnames'
10import {ApPureMixin} from 'apeman-react-mixin-pure'
11
12const SpinnerThemes = {
13 a: [ 'fa', 'fa-spin', 'fa-spinner' ],
14 b: [ 'fa', 'fa-spin', 'fa-circle-o-notch' ],
15 c: [ 'fa', 'fa-spin', 'fa-refresh' ],
16 d: [ 'fa', 'fa-spin', 'fa-gear' ],
17 e: [ 'fa', 'fa-spin', 'fa-pulse' ]
18}
19const SpinnerSizes = [
20 'medium',
21 'xx-small',
22 'x-small',
23 'small',
24 'large',
25 'x-large',
26 'xx-large',
27 'smaller',
28 'larger'
29]
30
31const DEFAULT_THEME = 'c'
32const DEFAULT_SIZE = 'medium'
33
34/** @lends ApSpinner */
35const ApSpinner = React.createClass({
36
37 // --------------------
38 // Specs
39 // --------------------
40 propTypes: {
41 /** Shows spin */
42 enabled: types.bool,
43 /** Theme of the spinner */
44 theme: types.oneOf(
45 Object.keys(SpinnerThemes)
46 ),
47 /** Size of spinner icon */
48 size: types.oneOf(SpinnerSizes),
49 /** show as cover */
50 cover: types.bool
51 },
52
53 mixins: [
54 ApPureMixin
55 ],
56
57 statics: {
58 DEFAULT_THEME: DEFAULT_THEME
59 },
60
61 getInitialState () {
62 return {}
63 },
64
65 getDefaultProps () {
66 return {
67 enabled: false,
68 theme: DEFAULT_THEME,
69 size: DEFAULT_SIZE
70 }
71 },
72
73 render () {
74 const s = this
75 let { props } = s
76 let className = classnames('ap-spinner', props.className, {
77 'ap-spinner-cover': !!props.cover,
78 'ap-spinner-enabled': !!props.enabled
79 })
80 return (
81 <div className={ className }
82 style={ Object.assign({}, props.style) }>
83 <span className={ classnames('ap-spinner-icon', SpinnerThemes[props.theme]) }
84 style={ {fontSize: props.size} }
85 >
86 </span>
87 </div>
88 )
89 },
90
91 // --------------------
92 // Lifecycle
93 // --------------------
94
95 componentDidMount () {
96 const s = this
97 s.setState({
98 iconVisible: true
99 })
100 },
101
102 componentWillUnmount () {
103 const s = this
104 }
105
106 // --------------------
107 // Custom
108 // --------------------
109
110})
111
112export default ApSpinner