Skip to content

Commit cf2c325

Browse files
author
Andrei Arkhipov
authored
Merge pull request #5 from awibox/develop
#3: Problem with promiseTracker was fixed
2 parents bacd3f4 + 8495dbe commit cf2c325

File tree

3 files changed

+56
-48
lines changed

3 files changed

+56
-48
lines changed

dist/index.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

specs/Loader.spec.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,12 @@ describe('Loader', () => {
77
const component = shallow(<Loader loading={true} />);
88
expect(component).toMatchSnapshot();
99
});
10+
it('should not render', () => {
11+
const component = shallow(<Loader />);
12+
expect(component.get(0)).toEqual(null);
13+
});
14+
it('should render for promiseTracker', () => {
15+
const component = shallow(<Loader promiseTracker={() => ({ promiseInProgress: true })} />);
16+
expect(component).toExist();
17+
});
1018
});

src/components/Loader.js

Lines changed: 47 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React, { Component } from 'react';
1+
import React from 'react';
22
import PropTypes from 'prop-types';
33

44
const defaultLoaderStyle = {
@@ -21,54 +21,54 @@ const defaultSpinnerStyle = {
2121
height: 100,
2222
};
2323

24-
class Loader extends Component {
25-
static propTypes = {
26-
color: PropTypes.string,
27-
loading: PropTypes.bool,
28-
background: PropTypes.string,
24+
const Loader = (props) => {
25+
const { promiseInProgress } = props.promiseTracker ? props.promiseTracker() : false;
26+
const loaderStyle = {
27+
...defaultLoaderStyle,
28+
background: props.background,
2929
};
30+
const spinnerItemsArray = [
31+
{ transform: 'rotate(0 50 50)', begin: '-0.9166666666666666s' },
32+
{ transform: 'rotate(30 50 50)', begin: '-0.8333333333333334s' },
33+
{ transform: 'rotate(60 50 50)', begin: '-0.75s' },
34+
{ transform: 'rotate(90 50 50)', begin: '-0.6666666666666666s' },
35+
{ transform: 'rotate(120 50 50)', begin: '-0.5833333333333334s' },
36+
{ transform: 'rotate(150 50 50)', begin: '-0.5s' },
37+
{ transform: 'rotate(180 50 50)', begin: '-0.4166666666666667s' },
38+
{ transform: 'rotate(210 50 50)', begin: '-0.3333333333333333s' },
39+
{ transform: 'rotate(240 50 50)', begin: '-0.25s' },
40+
{ transform: 'rotate(270 50 50)', begin: '-0.16666666666666666s' },
41+
{ transform: 'rotate(300 50 50)', begin: '-0.08333333333333333s' },
42+
{ transform: 'rotate(330 50 50)', begin: '0s' },
43+
];
44+
return (
45+
props.loading || promiseInProgress
46+
? <div style={loaderStyle}>
47+
<div style={defaultSpinnerStyle}>
48+
<svg className="lds-spinner" width="100%" height="100%" xmlns="http://www.w3.org/2000/svg"
49+
viewBox="0 0 100 100" preserveAspectRatio="xMidYMid">
50+
{spinnerItemsArray.map((item) => <g key={item.transform} transform={item.transform}>
51+
<rect x="47" y="24" rx="9.4" ry="4.8" width="6" height="12" fill={props.color}>
52+
<animate attributeName="opacity" values="1;0" keyTimes="0;1" dur="1s" begin={item.begin} repeatCount="indefinite"/>
53+
</rect>
54+
</g>)}
55+
</svg>
56+
</div>
57+
</div> : ''
58+
);
59+
};
3060

31-
static defaultProps = {
32-
color: '#000',
33-
loading: false,
34-
background: 'rgba(255,255,255,.5)',
35-
};
61+
Loader.propTypes = {
62+
color: PropTypes.string,
63+
loading: PropTypes.bool,
64+
background: PropTypes.string,
65+
promiseTracker: PropTypes.any,
66+
};
3667

37-
render() {
38-
const loaderStyle = {
39-
...defaultLoaderStyle,
40-
background: this.props.background,
41-
};
42-
const spinnerItemsArray = [
43-
{ transform: 'rotate(0 50 50)', begin: '-0.9166666666666666s' },
44-
{ transform: 'rotate(30 50 50)', begin: '-0.8333333333333334s' },
45-
{ transform: 'rotate(60 50 50)', begin: '-0.75s' },
46-
{ transform: 'rotate(90 50 50)', begin: '-0.6666666666666666s' },
47-
{ transform: 'rotate(120 50 50)', begin: '-0.5833333333333334s' },
48-
{ transform: 'rotate(150 50 50)', begin: '-0.5s' },
49-
{ transform: 'rotate(180 50 50)', begin: '-0.4166666666666667s' },
50-
{ transform: 'rotate(210 50 50)', begin: '-0.3333333333333333s' },
51-
{ transform: 'rotate(240 50 50)', begin: '-0.25s' },
52-
{ transform: 'rotate(270 50 50)', begin: '-0.16666666666666666s' },
53-
{ transform: 'rotate(300 50 50)', begin: '-0.08333333333333333s' },
54-
{ transform: 'rotate(330 50 50)', begin: '0s' },
55-
];
56-
return (
57-
this.props.loading
58-
&& <div style={loaderStyle}>
59-
<div style={defaultSpinnerStyle}>
60-
<svg className="lds-spinner" width="100%" height="100%" xmlns="http://www.w3.org/2000/svg"
61-
viewBox="0 0 100 100" preserveAspectRatio="xMidYMid">
62-
{spinnerItemsArray.map((item) => <g key={item.transform} transform={item.transform}>
63-
<rect x="47" y="24" rx="9.4" ry="4.8" width="6" height="12" fill={this.props.color}>
64-
<animate attributeName="opacity" values="1;0" keyTimes="0;1" dur="1s" begin={item.begin} repeatCount="indefinite"/>
65-
</rect>
66-
</g>)}
67-
</svg>
68-
</div>
69-
</div>
70-
);
71-
}
72-
}
68+
Loader.defaultProps = {
69+
color: '#000',
70+
loading: false,
71+
background: 'rgba(255,255,255,.5)',
72+
};
7373

7474
export default Loader;

0 commit comments

Comments
 (0)