MaintenanceMode.tsx 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  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('admin:maintenance_mode.failed_to_end_maintenance_mode') : t('admin:maintenance_mode.failed_to_start_maintenance_mode'));
  33. }
  34. // eslint-disable-next-line max-len
  35. toastSuccess(isMaintenanceMode ? t('admin:maintenance_mode.successfully_ended_maintenance_mode') : t('admin:maintenance_mode.successfully_started_maintenance_mode'));
  36. }, [isMaintenanceMode, adminAppContainer, closeModal]);
  37. return (
  38. <div className="mb-5">
  39. <ConfirmModal
  40. isModalOpen={isModalOpen}
  41. warningMessage={isMaintenanceMode ? t('admin:maintenance_mode.warning_message_to_end') : t('admin:maintenance_mode.warning_message_to_start')}
  42. // eslint-disable-next-line max-len
  43. supplymentaryMessage={isMaintenanceMode ? null : t('admin:maintenance_mode.supplymentary_message_to_start')}
  44. confirmButtonTitle={isMaintenanceMode ? t('admin:maintenance_mode.end_maintenance_mode') : t('admin:maintenance_mode.start_maintenance_mode')}
  45. onConfirm={onConfirmHandler}
  46. onCancel={() => closeModal()}
  47. />
  48. <p className="card well">
  49. {t('admin:maintenance_mode.description')}
  50. <br />
  51. <br />
  52. <span className="text-warning">
  53. <i className="icon-exclamation icon-fw"></i>
  54. {t('admin:maintenance_mode.supplymentary_message_to_start')}
  55. </span>
  56. </p>
  57. <div className="row my-3">
  58. <div className="mx-auto">
  59. <button type="button" className="btn btn-success" onClick={() => openModal()}>
  60. {isMaintenanceMode ? t('admin:maintenance_mode.end_maintenance_mode') : t('admin:maintenance_mode.start_maintenance_mode')}
  61. </button>
  62. </div>
  63. </div>
  64. </div>
  65. );
  66. };
  67. export default withUnstatedContainers(MaintenanceMode, [AdminAppContainer]);