UNPKG

1.34 kBJSXView Raw
1/**
2 * Higher order component with spinner
3 * @function withSpin
4 * @param {function} Component - A component constructor
5 * @returns {function} - Wrapped component
6 */
7'use strict'
8
9import {wrap} from 'breact'
10import {clone} from 'asobj'
11import ApSpinner from './ap_spinner'
12import React, {PropTypes as types} from 'react'
13
14/** @lends withSpin */
15function withSpin (Component) {
16 return wrap(Component, {
17 propTypes: {
18 /** Show loading spinner */
19 spinning: types.bool,
20 /** Theme of the spinner */
21 spinnerTheme: types.string,
22 /** Spinner instance */
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
56export default withSpin