1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 | 'use strict'
|
8 |
|
9 | import {wrap} from 'breact'
|
10 | import {clone} from 'asobj'
|
11 | import ApSpinner from './ap_spinner'
|
12 | import React, {PropTypes as types} from 'react'
|
13 |
|
14 |
|
15 | function withSpin (Component) {
|
16 | return wrap(Component, {
|
17 | propTypes: {
|
18 |
|
19 | spinning: types.bool,
|
20 |
|
21 | spinnerTheme: types.string,
|
22 |
|
23 | spinner: types.node
|
24 | },
|
25 |
|
26 | getDefaultProps () {
|
27 | return {
|
28 | spinning: false,
|
29 | spinnerTheme: ApSpinner.DEFAULT_THEME,
|
30 | spinner: null
|
31 | }
|
32 | },
|
33 |
|
34 | render () {
|
35 | const s = this
|
36 | let { props } = s
|
37 | let spinner = props.spinner || (
|
38 | <ApSpinner theme={ props.spinnerTheme }
|
39 | className='ap-spinner-cover'
|
40 | enabled={ props.spinning }/>
|
41 | )
|
42 | let componentProps = clone(props, {
|
43 | without: [ 'spinning', 'spinnerTheme', 'spinner' ]
|
44 | })
|
45 | return (
|
46 | <Component { ...componentProps }
|
47 | spinner={ spinner }
|
48 | >
|
49 | { props.children }
|
50 | </Component>
|
51 | )
|
52 | }
|
53 | })
|
54 | }
|
55 |
|
56 | export default withSpin
|