AppSettingsPageContents.tsx 4.0 KB

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