FredericHeem/starhackit

View on GitHub
client/src/components/screenLoader/screenLoader.js

Summary

Maintainability
A
1 hr
Test Coverage
/* @jsxImportSource @emotion/react */
import { css } from "@emotion/react";
import spinner from "mdlean/lib/spinner";

const screenLoader = (context) => {
  const {
    tr,
    theme: { palette },
  } = context;
  const Spinner = spinner(context);
  return ({ loading, message = tr.t("Loading...") }) => (
    <div
      css={css`
        position: fixed;
        width: 100vw;
        top: 0;
        left: 0;
        height: 100vh;
        display: flex;
        align-items: center;
        justify-content: center;
        background-color: ${palette.grey[100]};
        transition: opacity 0.3s ease-in-out;
        opacity: ${loading ? 0.9 : 0};
        z-index: ${loading ? 3 : -3};
      `}
    >
      <div
        css={css`
          display: flex;
          align-items: center;
          justify-content: center;
          font-size: 1.3rem;
          font-weight: 600;
        `}
      >
        <span>{message}</span>
        <Spinner />
      </div>
    </div>
  );
};

export default screenLoader;