Maintenance.tsx 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. import type { IUserHasId } from '@growi/core';
  2. import { useTranslation } from 'next-i18next';
  3. import { apiv3Post } from '~/client/util/apiv3-client';
  4. import { toastError } from '~/client/util/toastr';
  5. import { useCurrentUser } from '~/stores-universal/context';
  6. type Props = {
  7. currentUser: IUserHasId,
  8. };
  9. export const Maintenance = (props: Props): JSX.Element => {
  10. const { t } = useTranslation();
  11. useCurrentUser(props.currentUser ?? null);
  12. const logoutHandler = async() => {
  13. try {
  14. await apiv3Post('/logout');
  15. window.location.reload();
  16. }
  17. catch (err) {
  18. toastError(err);
  19. }
  20. };
  21. return (
  22. <div className="text-center">
  23. <h1><span className="material-symbols-outlined large">error</span></h1>
  24. <h1 className="text-center">{ t('maintenance_mode.maintenance_mode') }</h1>
  25. <h3>{ t('maintenance_mode.growi_is_under_maintenance') }</h3>
  26. <hr />
  27. <div className="text-start">
  28. {props.currentUser?.admin
  29. && (
  30. <p>
  31. <span className="material-symbols-outlined">arrow_circle_right</span>
  32. <a className="btn btn-link" href="/admin">{ t('maintenance_mode.admin_page') }</a>
  33. </p>
  34. )}
  35. {props.currentUser != null
  36. ? (
  37. <p>
  38. <span className="material-symbols-outlined">arrow_circle_right</span>
  39. <a className="btn btn-link" onClick={logoutHandler} id="maintanounse-mode-logout">{ t('maintenance_mode.logout') }</a>
  40. </p>
  41. )
  42. : (
  43. <p>
  44. <span className="material-symbols-outlined">arrow_circle_right</span>
  45. <a className="btn btn-link" href="/login">{ t('maintenance_mode.login') }</a>
  46. </p>
  47. )
  48. }
  49. </div>
  50. </div>
  51. );
  52. };