LoginPage.tsx 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. import React, { FC } from 'react';
  2. import { UserSignup } from './UserSignup';
  3. import { LoginServiceButtons } from './LoginServiceButtons';
  4. import LoginCtrl from './LoginCtrl';
  5. import { LoginForm } from './LoginForm';
  6. import { ChangePassword } from './ChangePassword';
  7. import { CSSTransition } from 'react-transition-group';
  8. export const LoginPage: FC = () => {
  9. return (
  10. <div className="login container">
  11. <div className="login-content">
  12. <div className="login-branding">
  13. <img className="logo-icon" src="public/img/energylink_icon.svg" alt="Grafana" />
  14. <div className="logo-wordmark" />
  15. </div>
  16. <LoginCtrl>
  17. {({
  18. loginHint,
  19. passwordHint,
  20. isOauthEnabled,
  21. ldapEnabled,
  22. authProxyEnabled,
  23. disableLoginForm,
  24. disableUserSignUp,
  25. login,
  26. isLoggingIn,
  27. changePassword,
  28. skipPasswordChange,
  29. isChangingPassword,
  30. }) => (
  31. <div className="login-outer-box">
  32. <div className={`login-inner-box ${isChangingPassword ? 'hidden' : ''}`} id="login-view">
  33. {!disableLoginForm ? (
  34. <LoginForm
  35. displayForgotPassword={!(ldapEnabled || authProxyEnabled)}
  36. onSubmit={login}
  37. loginHint={loginHint}
  38. passwordHint={passwordHint}
  39. isLoggingIn={isLoggingIn}
  40. />
  41. ) : null}
  42. {isOauthEnabled ? (
  43. <>
  44. <div className="text-center login-divider">
  45. <div>
  46. <div className="login-divider-line" />
  47. </div>
  48. <div>
  49. <span className="login-divider-text">{disableLoginForm ? null : <span>or</span>}</span>
  50. </div>
  51. <div>
  52. <div className="login-divider-line" />
  53. </div>
  54. </div>
  55. <div className="clearfix" />
  56. <LoginServiceButtons />
  57. </>
  58. ) : null}
  59. {!disableUserSignUp ? <UserSignup /> : null}
  60. </div>
  61. <CSSTransition
  62. appear={true}
  63. mountOnEnter={true}
  64. in={isChangingPassword}
  65. timeout={250}
  66. classNames="login-inner-box"
  67. >
  68. <ChangePassword onSubmit={changePassword} onSkip={skipPasswordChange} focus={isChangingPassword} />
  69. </CSSTransition>
  70. </div>
  71. )}
  72. </LoginCtrl>
  73. <div className="clearfix" />
  74. </div>
  75. </div>
  76. );
  77. };