src/components/FeatureLoader/index.tsx (41 lines of code) (raw):

import React, { useEffect, useState } from 'react'; import styled from 'styled-components'; import Spinner from '@components/Spinner'; // // Full page loader that hides everything until finished. We want to be // sure that feature flags are loaded before showing the app so we dont get weird layout shifts // const FeatureFlagLoader: React.FC = () => { const [show, setShow] = useState(false); useEffect(() => { const t = setTimeout(() => { setShow(true); }, 1000); return () => clearTimeout(t); }, []); return ( <LoadContainer> <div style={{ marginTop: '3rem' }}> <Spinner md /> </div> <Overlay show={!show} /> </LoadContainer> ); }; const LoadContainer = styled.div` width: 100%; height: 100%; display: flex; justify-content: center; position: absolute; left: 0; top: 0; background: #fff; `; const Overlay = styled.div<{ show: boolean }>` width: 100%; height: 100%; position: absolute; left: 0; top: 0; background: #fff; transition: 1s opacity; opacity: ${(p) => (p.show ? '1' : '0')}; `; export default FeatureFlagLoader;