11import React from 'react' ;
22import PropTypes from 'prop-types' ;
33
4- const defaultLoaderStyle = {
5- position : 'absolute' ,
6- top : 0 ,
7- left : 0 ,
8- right : 0 ,
9- bottom : 0 ,
10- zIndex : 10 ,
11- background : 'rgba(255,255,255,.5)' ,
12- backfaceVisibility : 'hidden' ,
13- } ;
4+ const Loader = ( props ) => {
5+ const {
6+ color, background, loading, promiseTracker, zIndex,
7+ } = props ;
148
15- const defaultSpinnerStyle = {
16- position : 'absolute' ,
17- left : '50%' ,
18- top : '50%' ,
19- transform : 'translate(-50%, -50%)' ,
20- width : 100 ,
21- height : 100 ,
22- } ;
9+ const defaultLoaderStyle = {
10+ position : 'absolute' ,
11+ top : 0 ,
12+ left : 0 ,
13+ right : 0 ,
14+ bottom : 0 ,
15+ zIndex,
16+ background : 'rgba(255,255,255,.5)' ,
17+ backfaceVisibility : 'hidden' ,
18+ } ;
2319
24- const Loader = ( props ) => {
25- const { promiseInProgress } = props . promiseTracker ? props . promiseTracker ( ) : false ;
20+ const defaultSpinnerStyle = {
21+ position : 'absolute' ,
22+ left : '50%' ,
23+ top : '50%' ,
24+ transform : 'translate(-50%, -50%)' ,
25+ width : 100 ,
26+ height : 100 ,
27+ } ;
28+
29+ const { promiseInProgress } = promiseTracker ? promiseTracker ( ) : false ;
2630 const loaderStyle = {
2731 ...defaultLoaderStyle ,
28- background : props . background ,
32+ background,
2933 } ;
3034 const spinnerItemsArray = [
3135 { transform : 'rotate(0 50 50)' , begin : '-0.9166666666666666s' } ,
@@ -42,13 +46,13 @@ const Loader = (props) => {
4246 { transform : 'rotate(330 50 50)' , begin : '0s' } ,
4347 ] ;
4448 return (
45- props . loading || promiseInProgress
49+ loading || promiseInProgress
4650 ? < div style = { loaderStyle } >
4751 < div style = { defaultSpinnerStyle } >
4852 < svg className = "lds-spinner" width = "100%" height = "100%" xmlns = "http://www.w3.org/2000/svg"
4953 viewBox = "0 0 100 100" preserveAspectRatio = "xMidYMid" >
5054 { 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 } >
55+ < rect x = "47" y = "24" rx = "9.4" ry = "4.8" width = "6" height = "12" fill = { color } >
5256 < animate attributeName = "opacity" values = "1;0" keyTimes = "0;1" dur = "1s" begin = { item . begin } repeatCount = "indefinite" />
5357 </ rect >
5458 </ g > ) }
@@ -63,13 +67,15 @@ Loader.propTypes = {
6367 loading : PropTypes . bool ,
6468 background : PropTypes . string ,
6569 promiseTracker : PropTypes . any ,
70+ zIndex : PropTypes . number ,
6671} ;
6772
6873Loader . defaultProps = {
6974 color : '#000' ,
7075 loading : false ,
7176 background : 'rgba(255,255,255,.5)' ,
7277 promiseTracker : false ,
78+ zIndex : 999 ,
7379} ;
7480
7581export default Loader ;
0 commit comments