Maintenance.tsx 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. import type { JSX } from 'react';
  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 '~/states/global';
  6. export const Maintenance = (): JSX.Element => {
  7. const { t } = useTranslation();
  8. const currentUser = useCurrentUser();
  9. const logoutHandler = async() => {
  10. try {
  11. await apiv3Post('/logout');
  12. window.location.reload();
  13. }
  14. catch (err) {
  15. toastError(err);
  16. }
  17. };
  18. return (
  19. <div className="text-center">
  20. <h1><span className="material-symbols-outlined large">error</span></h1>
  21. <h1 className="text-center">{ t('maintenance_mode.maintenance_mode') }</h1>
  22. <h3>{ t('maintenance_mode.growi_is_under_maintenance') }</h3>
  23. <hr />
  24. <div className="text-start">
  25. {currentUser?.admin
  26. && (
  27. <p>
  28. <span className="material-symbols-outlined">arrow_circle_right</span>
  29. <a className="btn btn-link" href="/admin">{ t('maintenance_mode.admin_page') }</a>
  30. </p>
  31. )}
  32. {currentUser != null
  33. ? (
  34. <p>
  35. <span className="material-symbols-outlined">arrow_circle_right</span>
  36. <a className="btn btn-link" onClick={logoutHandler} id="maintanounse-mode-logout">{ t('maintenance_mode.logout') }</a>
  37. </p>
  38. )
  39. : (
  40. <p>
  41. <span className="material-symbols-outlined">arrow_circle_right</span>
  42. <a className="btn btn-link" href="/login">{ t('maintenance_mode.login') }</a>
  43. </p>
  44. )
  45. }
  46. </div>
  47. </div>
  48. );
  49. };