MaintenanceMode.tsx 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. import React, { FC, useState, useCallback } from 'react';
  2. import { useTranslation } from 'react-i18next';
  3. import loggerFactory from '~/utils/logger';
  4. import { withUnstatedContainers } from '../../UnstatedUtils';
  5. import { ConfirmModal } from './ConfirmModal';
  6. import { toastSuccess, toastError } from '~/client/util/apiNotification';
  7. import AdminAppContainer from '~/client/services/AdminAppContainer';
  8. const logger = loggerFactory('growi:maintenanceMode');
  9. type Props = {
  10. adminAppContainer: AdminAppContainer,
  11. };
  12. const MaintenanceMode: FC<Props> = (props: Props) => {
  13. const { t } = useTranslation();
  14. const { adminAppContainer } = props;
  15. const [isModalOpen, setModalOpen] = useState<boolean>(false);
  16. const [isMaintenanceMode, setMaintenanceMode] = useState<boolean | undefined>(adminAppContainer.state.isMaintenanceMode);
  17. const openModal = () => { setModalOpen(true) };
  18. const closeModal = () => { setModalOpen(false) };
  19. const onConfirmHandler = useCallback(async() => {
  20. closeModal();
  21. try {
  22. if (isMaintenanceMode) {
  23. await adminAppContainer.endMaintenanceMode();
  24. setMaintenanceMode(false);
  25. }
  26. else {
  27. await adminAppContainer.startMaintenanceMode();
  28. setMaintenanceMode(true);
  29. }
  30. }
  31. catch (err) {
  32. toastError(isMaintenanceMode ? t('maintenance_mode.failed_to_end_maintenance_mode') : t('maintenance_mode.failed_to_start_maintenance_mode'));
  33. }
  34. toastSuccess(isMaintenanceMode ? t('maintenance_mode.successfully_ended_maintenance_mode') : t('maintenance_mode.successfully_started_maintenance_mode'));
  35. }, [isMaintenanceMode, adminAppContainer, closeModal]);
  36. return (
  37. <div className="mb-5">
  38. <ConfirmModal
  39. isModalOpen={isModalOpen}
  40. warningMessage={t('admin:maintenance_mode.warning_message')}
  41. supplymentaryMessage={t('admin:maintenance_mode.supplymentary_message')}
  42. confirmButtonTitle={isMaintenanceMode ? t('maintenance_mode.end_maintenance_mode') : t('maintenance_mode.start_maintenance_mode')}
  43. onConfirm={onConfirmHandler}
  44. onCancel={() => closeModal()}
  45. />
  46. <p className="card well">
  47. {t('admin:maintenance_mode.description')}
  48. <br />
  49. <br />
  50. <span className="text-warning">
  51. <i className="icon-exclamation icon-fw"></i>
  52. {t('admin:maintenance_mode.supplymentary_message')}
  53. </span>
  54. </p>
  55. <div className="row my-3">
  56. <div className="mx-auto">
  57. <button type="button" className="btn btn-success" onClick={() => openModal()}>
  58. {isMaintenanceMode ? t('maintenance_mode.end_maintenance_mode') : t('maintenance_mode.start_maintenance_mode')}
  59. </button>
  60. </div>
  61. </div>
  62. </div>
  63. );
  64. };
  65. export default withUnstatedContainers(MaintenanceMode, [AdminAppContainer]);