MaintenanceMode.tsx 2.7 KB

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