import React from 'react';
import styled, { keyframes } from 'styled-components';
interface Props {
color?: string;
isActive: boolean;
margin?: string;
maskColor?: string;
radius?: number;
thickness?: number;
zIndex?: number;
}
interface MaskProps {
maskColor?: string;
zIndex?: number;
}
interface LoadingProps {
/**
* Gap from the top of browser
*/
margin?: string;
/**
* color of the wheel
*/
color?: string;
/**
* thickness of the wheel
*/
thickness?: number;
/**
* background color
*/
maskColor?: string;
/**
* how wide the radius of the circle should be (not the same as border radius)
*/
radius?: number;
}
const Loading = ({ color = '#000', isActive = false, margin = '10% auto', maskColor = 'rgba(255, 255, 255, 0.7)', radius = 60, thickness = 2, zIndex = 9999 }: Props) => {
if (isActive !== true) {
return ;
}
return (
);
};
export default Loading;
const LoadingMask = styled.aside`
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: ${({ maskColor }) => maskColor};
z-index: ${({ zIndex }) => zIndex};
`;
const spin = keyframes`
0% { transform: rotate(0deg); }
100% { transform: rotate(360deg); }
`;
const LoadingCover = styled.div`
margin: ${({ margin }) => margin};
border: ${({ maskColor, thickness }) => `${thickness}px solid ${maskColor}`};
border-top: ${({ thickness, color }) => `${thickness}px solid ${color}`};
border-radius: 50%;
width: ${({ radius }) => `${radius}px`};
height: ${({ radius }) => `${radius}px`};
animation: ${spin} 1.25s infinite;
`;