access-attempt-screen.tsx 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. import { FC } from 'react'
  2. import { useTranslation } from 'react-i18next'
  3. export const AccessAttemptScreen: FC<{
  4. loadingScreenBrandHeight: string
  5. inflight: boolean
  6. accessError: string | boolean
  7. }> = ({ loadingScreenBrandHeight, inflight, accessError }) => {
  8. const { t } = useTranslation()
  9. return (
  10. <div className="loading-screen">
  11. <div className="loading-screen-brand-container">
  12. <div
  13. className="loading-screen-brand"
  14. style={{ height: loadingScreenBrandHeight }}
  15. />
  16. </div>
  17. <h3 className="loading-screen-label text-center">
  18. {t('join_project')}
  19. {inflight && <LoadingScreenEllipses />}
  20. </h3>
  21. {accessError && (
  22. <div className="global-alerts text-center">
  23. <div>
  24. <br />
  25. {accessError === 'not_found' ? (
  26. <div>
  27. <h4 aria-live="assertive">Project not found</h4>
  28. </div>
  29. ) : (
  30. <div>
  31. <div className="alert alert-danger" aria-live="assertive">
  32. {t('token_access_failure')}
  33. </div>
  34. <p>
  35. <a href="/">{t('home')}</a>
  36. </p>
  37. </div>
  38. )}
  39. </div>
  40. </div>
  41. )}
  42. </div>
  43. )
  44. }
  45. const LoadingScreenEllipses = () => (
  46. <span aria-hidden>
  47. <span className="loading-screen-ellip">.</span>
  48. <span className="loading-screen-ellip">.</span>
  49. <span className="loading-screen-ellip">.</span>
  50. </span>
  51. )