MaintenanceMode.tsx 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. import type { FC } from 'react';
  2. import React, { useState, useCallback } from 'react';
  3. import { useTranslation } from 'next-i18next';
  4. import { toastSuccess, toastError } from '~/client/util/toastr';
  5. import { useIsMaintenanceMode } from '~/stores/maintenanceMode';
  6. import loggerFactory from '~/utils/logger';
  7. import { ConfirmModal } from './ConfirmModal';
  8. const logger = loggerFactory('growi:maintenanceMode');
  9. export const MaintenanceMode: FC = () => {
  10. const { t } = useTranslation();
  11. const {
  12. data: isMaintenanceMode, start: startMaintenanceMode, end: endMaintenanceMode,
  13. } = useIsMaintenanceMode();
  14. const [isModalOpen, setModalOpen] = useState<boolean>(false);
  15. const openModal = useCallback(() => { setModalOpen(true) }, []);
  16. const closeModal = useCallback(() => { setModalOpen(false) }, []);
  17. const onConfirmHandler = useCallback(async() => {
  18. closeModal();
  19. try {
  20. if (isMaintenanceMode) {
  21. endMaintenanceMode();
  22. }
  23. else {
  24. startMaintenanceMode();
  25. }
  26. }
  27. catch (err) {
  28. toastError(isMaintenanceMode ? t('admin:maintenance_mode.failed_to_end_maintenance_mode') : t('admin:maintenance_mode.failed_to_start_maintenance_mode'));
  29. }
  30. // eslint-disable-next-line max-len
  31. toastSuccess(isMaintenanceMode ? t('admin:maintenance_mode.successfully_ended_maintenance_mode') : t('admin:maintenance_mode.successfully_started_maintenance_mode'));
  32. }, [isMaintenanceMode, closeModal, startMaintenanceMode, endMaintenanceMode, t]);
  33. return (
  34. <div className="mb-5">
  35. <ConfirmModal
  36. isModalOpen={isModalOpen}
  37. warningMessage={isMaintenanceMode ? t('admin:maintenance_mode.warning_message_to_end') : t('admin:maintenance_mode.warning_message_to_start')}
  38. // eslint-disable-next-line max-len
  39. supplymentaryMessage={isMaintenanceMode ? null : t('admin:maintenance_mode.supplymentary_message_to_start')}
  40. confirmButtonTitle={isMaintenanceMode ? t('admin:maintenance_mode.end_maintenance_mode') : t('admin:maintenance_mode.start_maintenance_mode')}
  41. onConfirm={onConfirmHandler}
  42. onCancel={() => closeModal()}
  43. />
  44. <p className="card custom-card bg-warning-subtle">
  45. {t('admin:maintenance_mode.description')}
  46. <span className="text-warning mt-1">
  47. <span className="material-symbols-outlined">error</span>
  48. {t('admin:maintenance_mode.supplymentary_message_to_start')}
  49. </span>
  50. </p>
  51. <div className="mx-auto my-3">
  52. <button type="button" className="btn btn-success" onClick={() => openModal()}>
  53. {isMaintenanceMode ? t('admin:maintenance_mode.end_maintenance_mode') : t('admin:maintenance_mode.start_maintenance_mode')}
  54. </button>
  55. </div>
  56. </div>
  57. );
  58. };