import styled from '@emotion/styled';
import LoadingIndicator from 'sentry/components/loadingIndicator';
import theme from 'sentry/utils/theme';
export type LoadingContainerProps = {
children?: React.ReactNode;
className?: string;
isLoading?: boolean;
isReloading?: boolean;
maskBackgroundColor?: string;
};
type MaskProps = {
isReloading: boolean;
maskBackgroundColor: string;
};
export default function LoadingContainer({
isLoading = false,
isReloading = false,
maskBackgroundColor = theme.white,
className,
children,
}: LoadingContainerProps) {
const isLoadingOrReloading = isLoading || isReloading;
return (
{isLoadingOrReloading && (
)}
{children}
);
}
const Container = styled('div')`
position: relative;
`;
const LoadingMask = styled('div')`
position: absolute;
z-index: 1;
background-color: ${p => p.maskBackgroundColor};
width: 100%;
height: 100%;
opacity: ${p => (p.isReloading ? '0.6' : '1')};
`;
const Indicator = styled(LoadingIndicator)`
position: absolute;
z-index: 3;
width: 100%;
`;