import React, { useState, useEffect } from "react"; import ReactDOM from "react-dom"; import classNames from "classnames"; export interface LoadingProps { loading?: boolean; fullScreen?: boolean; } export const Loading: React.SFC = (props: LoadingProps) => { const [loading, setLoading] = useState(false), [showing, setShowing] = useState(false); const fullScreen: boolean = props.fullScreen === undefined ? true : props.fullScreen; useEffect(() => { if (props.loading === true) { setLoading(true); setTimeout(() => { setShowing(true); }, 100); } else if (props.loading === false) { setShowing(false); setTimeout(() => { setLoading(false); }, 500); } }, [props.loading]); const classes: string = classNames("rlf-loading-indicator", { "full-screen": fullScreen, showing: showing }); const getIndicator = (): JSX.Element | null => { if (loading) { return (
); } return null; }; if (props.fullScreen) { return ReactDOM.createPortal(getIndicator(), document.body); } else { return getIndicator(); } };