MaintenanceMode.tsx 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. import type { FC } from 'react';
  2. import React, { useCallback, useState } from 'react';
  3. import { useTranslation } from 'next-i18next';
  4. import { useMaintenanceModeActions } from '~/client/services/maintenance-mode';
  5. import { toastError, toastSuccess } 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 } =
  12. useMaintenanceModeActions();
  13. const [isModalOpen, setModalOpen] = useState<boolean>(false);
  14. const openModal = useCallback(() => {
  15. setModalOpen(true);
  16. }, []);
  17. const closeModal = useCallback(() => {
  18. setModalOpen(false);
  19. }, []);
  20. const onConfirmHandler = useCallback(async () => {
  21. closeModal();
  22. try {
  23. if (isMaintenanceMode) {
  24. endMaintenanceMode();
  25. } else {
  26. startMaintenanceMode();
  27. }
  28. } catch (err) {
  29. toastError(
  30. isMaintenanceMode
  31. ? t('admin:maintenance_mode.failed_to_end_maintenance_mode')
  32. : t('admin:maintenance_mode.failed_to_start_maintenance_mode'),
  33. );
  34. }
  35. toastSuccess(
  36. isMaintenanceMode
  37. ? t('admin:maintenance_mode.successfully_ended_maintenance_mode')
  38. : t('admin:maintenance_mode.successfully_started_maintenance_mode'),
  39. );
  40. }, [
  41. isMaintenanceMode,
  42. closeModal,
  43. startMaintenanceMode,
  44. endMaintenanceMode,
  45. t,
  46. ]);
  47. return (
  48. <div className="mb-5">
  49. <ConfirmModal
  50. isModalOpen={isModalOpen}
  51. warningMessage={
  52. isMaintenanceMode
  53. ? t('admin:maintenance_mode.warning_message_to_end')
  54. : t('admin:maintenance_mode.warning_message_to_start')
  55. }
  56. supplymentaryMessage={
  57. isMaintenanceMode
  58. ? null
  59. : t('admin:maintenance_mode.supplymentary_message_to_start')
  60. }
  61. confirmButtonTitle={
  62. isMaintenanceMode
  63. ? t('admin:maintenance_mode.end_maintenance_mode')
  64. : t('admin:maintenance_mode.start_maintenance_mode')
  65. }
  66. onConfirm={onConfirmHandler}
  67. onCancel={() => closeModal()}
  68. />
  69. <p className="card custom-card bg-warning-subtle">
  70. {t('admin:maintenance_mode.description')}
  71. <span className="text-warning mt-1">
  72. <span className="material-symbols-outlined">error</span>
  73. {t('admin:maintenance_mode.supplymentary_message_to_start')}
  74. </span>
  75. </p>
  76. <div className="mx-auto my-3">
  77. <button
  78. type="button"
  79. className="btn btn-success"
  80. onClick={() => openModal()}
  81. >
  82. {isMaintenanceMode
  83. ? t('admin:maintenance_mode.end_maintenance_mode')
  84. : t('admin:maintenance_mode.start_maintenance_mode')}
  85. </button>
  86. </div>
  87. </div>
  88. );
  89. };