AppSettingsPageContents.tsx 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. import React, { useEffect } from 'react';
  2. import { useTranslation } from 'next-i18next';
  3. import AdminAppContainer from '~/client/services/AdminAppContainer';
  4. import { toastError } from '~/client/util/toastr';
  5. import { useIsMaintenanceMode } from '~/stores/maintenanceMode';
  6. import { toArrayIfNot } from '~/utils/array-utils';
  7. import loggerFactory from '~/utils/logger';
  8. import { withUnstatedContainers } from '../../UnstatedUtils';
  9. import AppSetting from './AppSetting';
  10. import FileUploadSetting from './FileUploadSetting';
  11. import MailSetting from './MailSetting';
  12. import { MaintenanceMode } from './MaintenanceMode';
  13. import SiteUrlSetting from './SiteUrlSetting';
  14. import V5PageMigration from './V5PageMigration';
  15. const logger = loggerFactory('growi:appSettings');
  16. type Props = {
  17. adminAppContainer: AdminAppContainer,
  18. }
  19. const AppSettingsPageContents = (props: Props) => {
  20. const { t } = useTranslation('admin');
  21. const { adminAppContainer } = props;
  22. const { data: isMaintenanceMode } = useIsMaintenanceMode();
  23. const { isV5Compatible } = adminAppContainer.state;
  24. useEffect(() => {
  25. const fetchAppSettingsData = async() => {
  26. await adminAppContainer.retrieveAppSettingsData();
  27. };
  28. try {
  29. fetchAppSettingsData();
  30. }
  31. catch (err) {
  32. const errs = toArrayIfNot(err);
  33. toastError(errs);
  34. logger.error(errs);
  35. }
  36. }, [adminAppContainer]);
  37. return (
  38. <div data-testid="admin-app-settings">
  39. {
  40. // Alert message will be displayed in case that the GROWI is under maintenance
  41. isMaintenanceMode && (
  42. <div className="alert alert-danger alert-link" role="alert">
  43. <h3 className="alert-heading">
  44. {t('admin:maintenance_mode.maintenance_mode')}
  45. </h3>
  46. <p>
  47. {t('admin:maintenance_mode.description')}
  48. </p>
  49. <hr />
  50. <a className="btn-link" href="#maintenance-mode" rel="noopener noreferrer">
  51. <i className="fa fa-fw fa-arrow-down ml-1" aria-hidden="true"></i>
  52. <strong>{t('admin:maintenance_mode.end_maintenance_mode')}</strong>
  53. </a>
  54. </div>
  55. )
  56. }
  57. {
  58. !isV5Compatible
  59. && (
  60. <div className="row">
  61. <div className="col-lg-12">
  62. <h2 className="admin-setting-header" data-testid="v5-page-migration">{t('V5 Page Migration')}</h2>
  63. <V5PageMigration />
  64. </div>
  65. </div>
  66. )
  67. }
  68. <div className="row">
  69. <div className="col-lg-12">
  70. <h2 className="admin-setting-header">{t('headers.app_settings', { ns: 'commons' })}</h2>
  71. <AppSetting />
  72. </div>
  73. </div>
  74. <div className="row mt-5">
  75. <div className="col-lg-12">
  76. <h2 className="admin-setting-header">{t('app_setting.site_url.title')}</h2>
  77. <SiteUrlSetting />
  78. </div>
  79. </div>
  80. <div className="row mt-5">
  81. <div className="col-lg-12">
  82. <h2 className="admin-setting-header" id="mail-settings">{t('app_setting.mail_settings')}</h2>
  83. <MailSetting />
  84. </div>
  85. </div>
  86. <div className="row mt-5">
  87. <div className="col-lg-12">
  88. <h2 className="admin-setting-header">{t('admin:app_setting.file_upload_settings')}</h2>
  89. <FileUploadSetting />
  90. </div>
  91. </div>
  92. <div className="row">
  93. <div className="col-lg-12">
  94. <h2 className="admin-setting-header" id="maintenance-mode">{t('admin:maintenance_mode.maintenance_mode')}</h2>
  95. <MaintenanceMode />
  96. </div>
  97. </div>
  98. </div>
  99. );
  100. };
  101. /**
  102. * Wrapper component for using unstated
  103. */
  104. const AppSettingsPageContentsWrapper = withUnstatedContainers(AppSettingsPageContents, [AdminAppContainer]);
  105. export default AppSettingsPageContentsWrapper;