import { useEffect, useState } from 'react'; import { useTimeout } from 'react-use'; import { useDataContext } from '../providers/DataProvider'; import styles from './ValueLoader.module.css'; const MAX_PROGRESS_BARS = 3; interface Props { message?: string; } function ValueLoader(props: Props) { const { message = 'Loading data' } = props; const { valuesStore, addProgressListener, removeProgressListener } = useDataContext(); const [progress, setProgress] = useState(); useEffect(() => { addProgressListener(setProgress); return () => removeProgressListener(setProgress); }, [addProgressListener, removeProgressListener, setProgress]); // Wait a bit before showing loader to avoid flash const [isReady] = useTimeout(100); if (!isReady()) { return null; } return (
{progress && (
{progress.slice(0, MAX_PROGRESS_BARS).map((val, index) => ( // eslint-disable-line react/no-array-index-key ))}
)}

{message}...

); } export default ValueLoader;