admin.jsx 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. import React from 'react';
  2. import ReactDOM from 'react-dom';
  3. import { I18nextProvider } from 'react-i18next';
  4. import { SWRConfig } from 'swr';
  5. import { Provider } from 'unstated';
  6. import AdminAppContainer from '~/client/services/AdminAppContainer';
  7. import AdminBasicSecurityContainer from '~/client/services/AdminBasicSecurityContainer';
  8. import AdminCustomizeContainer from '~/client/services/AdminCustomizeContainer';
  9. import AdminExternalAccountsContainer from '~/client/services/AdminExternalAccountsContainer';
  10. import AdminGeneralSecurityContainer from '~/client/services/AdminGeneralSecurityContainer';
  11. import AdminGitHubSecurityContainer from '~/client/services/AdminGitHubSecurityContainer';
  12. import AdminGoogleSecurityContainer from '~/client/services/AdminGoogleSecurityContainer';
  13. import AdminHomeContainer from '~/client/services/AdminHomeContainer';
  14. import AdminImportContainer from '~/client/services/AdminImportContainer';
  15. import AdminLdapSecurityContainer from '~/client/services/AdminLdapSecurityContainer';
  16. import AdminLocalSecurityContainer from '~/client/services/AdminLocalSecurityContainer';
  17. import AdminMarkDownContainer from '~/client/services/AdminMarkDownContainer';
  18. import AdminNotificationContainer from '~/client/services/AdminNotificationContainer';
  19. import AdminOidcSecurityContainer from '~/client/services/AdminOidcSecurityContainer';
  20. import AdminSamlSecurityContainer from '~/client/services/AdminSamlSecurityContainer';
  21. import AdminSlackIntegrationLegacyContainer from '~/client/services/AdminSlackIntegrationLegacyContainer';
  22. import AdminSocketIoContainer from '~/client/services/AdminSocketIoContainer';
  23. import AdminTwitterSecurityContainer from '~/client/services/AdminTwitterSecurityContainer';
  24. import AdminUserGroupDetailContainer from '~/client/services/AdminUserGroupDetailContainer';
  25. import AdminUsersContainer from '~/client/services/AdminUsersContainer';
  26. import ContextExtractor from '~/client/services/ContextExtractor';
  27. import loggerFactory from '~/utils/logger';
  28. import { swrGlobalConfiguration } from '~/utils/swr-utils';
  29. import AdminHome from '../components/Admin/AdminHome/AdminHome';
  30. import AppSettingsPage from '../components/Admin/App/AppSettingsPage';
  31. import { AuditLogManagement } from '../components/Admin/AuditLogManagement';
  32. import AdminNavigation from '../components/Admin/Common/AdminNavigation';
  33. import Customize from '../components/Admin/Customize/Customize';
  34. import ExportArchiveDataPage from '../components/Admin/ExportArchiveDataPage';
  35. import FullTextSearchManagement from '../components/Admin/FullTextSearchManagement';
  36. import ImportDataPage from '../components/Admin/ImportDataPage';
  37. import LegacySlackIntegration from '../components/Admin/LegacySlackIntegration/LegacySlackIntegration';
  38. import ManageExternalAccount from '../components/Admin/ManageExternalAccount';
  39. import MarkdownSetting from '../components/Admin/MarkdownSetting/MarkDownSetting';
  40. import ManageGlobalNotification from '../components/Admin/Notification/ManageGlobalNotification';
  41. import NotificationSetting from '../components/Admin/Notification/NotificationSetting';
  42. import SecurityManagement from '../components/Admin/Security/SecurityManagement';
  43. import SlackIntegration from '../components/Admin/SlackIntegration/SlackIntegration';
  44. import UserGroupPage from '../components/Admin/UserGroup/UserGroupPage';
  45. import UserGroupDetailPage from '../components/Admin/UserGroupDetail/UserGroupDetailPage';
  46. import UserManagement from '../components/Admin/UserManagement';
  47. import ErrorBoundary from '../components/ErrorBoudary';
  48. import { appContainer, componentMappings } from './base';
  49. const logger = loggerFactory('growi:admin');
  50. appContainer.initContents();
  51. const { i18n } = appContainer;
  52. // create unstated container instance
  53. const adminAppContainer = new AdminAppContainer(appContainer);
  54. const adminImportContainer = new AdminImportContainer(appContainer);
  55. const adminSocketIoContainer = new AdminSocketIoContainer(appContainer);
  56. const adminHomeContainer = new AdminHomeContainer(appContainer);
  57. const adminCustomizeContainer = new AdminCustomizeContainer(appContainer);
  58. const adminUsersContainer = new AdminUsersContainer(appContainer);
  59. const adminExternalAccountsContainer = new AdminExternalAccountsContainer(appContainer);
  60. const adminNotificationContainer = new AdminNotificationContainer(appContainer);
  61. const adminSlackIntegrationLegacyContainer = new AdminSlackIntegrationLegacyContainer(appContainer);
  62. const adminMarkDownContainer = new AdminMarkDownContainer(appContainer);
  63. const adminUserGroupDetailContainer = new AdminUserGroupDetailContainer(appContainer);
  64. const socketIoContainer = appContainer.getContainer('SocketIoContainer');
  65. const injectableContainers = [
  66. appContainer,
  67. adminAppContainer,
  68. adminImportContainer,
  69. adminSocketIoContainer,
  70. adminHomeContainer,
  71. adminCustomizeContainer,
  72. adminUsersContainer,
  73. adminExternalAccountsContainer,
  74. adminNotificationContainer,
  75. adminSlackIntegrationLegacyContainer,
  76. adminMarkDownContainer,
  77. adminUserGroupDetailContainer,
  78. socketIoContainer,
  79. ];
  80. logger.info('unstated containers have been initialized');
  81. /**
  82. * define components
  83. * key: id of element
  84. * value: React Element
  85. */
  86. Object.assign(componentMappings, {
  87. 'admin-home': <AdminHome />,
  88. 'admin-app': <AppSettingsPage />,
  89. 'admin-markdown-setting': <MarkdownSetting />,
  90. 'admin-customize': <Customize />,
  91. 'admin-importer': <ImportDataPage />,
  92. 'admin-export-page': <ExportArchiveDataPage />,
  93. 'admin-notification-setting': <NotificationSetting />,
  94. 'admin-slack-integration': <SlackIntegration />,
  95. 'admin-slack-integration-legacy': <LegacySlackIntegration />,
  96. 'admin-global-notification-setting': <ManageGlobalNotification />,
  97. 'admin-user-page': <UserManagement />,
  98. 'admin-external-account-setting': <ManageExternalAccount />,
  99. 'admin-user-group-detail': <UserGroupDetailPage />,
  100. 'admin-full-text-search-management': <FullTextSearchManagement />,
  101. 'admin-user-group-page': <UserGroupPage />,
  102. 'admin-audit-log': <AuditLogManagement />,
  103. 'admin-navigation': <AdminNavigation />,
  104. });
  105. const renderMainComponents = () => {
  106. Object.keys(componentMappings).forEach((key) => {
  107. const elem = document.getElementById(key);
  108. if (elem) {
  109. ReactDOM.render(
  110. <I18nextProvider i18n={i18n}>
  111. <ErrorBoundary>
  112. <Provider inject={injectableContainers}>
  113. {componentMappings[key]}
  114. </Provider>
  115. </ErrorBoundary>
  116. </I18nextProvider>,
  117. elem,
  118. );
  119. }
  120. });
  121. };
  122. // extract context before rendering main components
  123. const elem = document.getElementById('growi-context-extractor');
  124. if (elem != null) {
  125. ReactDOM.render(
  126. <SWRConfig value={swrGlobalConfiguration}>
  127. <ContextExtractor></ContextExtractor>
  128. </SWRConfig>,
  129. elem,
  130. renderMainComponents,
  131. );
  132. }
  133. else {
  134. renderMainComponents();
  135. }
  136. const adminSecuritySettingElem = document.getElementById('admin-security-setting');
  137. if (adminSecuritySettingElem != null) {
  138. const adminGeneralSecurityContainer = new AdminGeneralSecurityContainer(appContainer);
  139. const adminLocalSecurityContainer = new AdminLocalSecurityContainer(appContainer);
  140. const adminLdapSecurityContainer = new AdminLdapSecurityContainer(appContainer);
  141. const adminSamlSecurityContainer = new AdminSamlSecurityContainer(appContainer);
  142. const adminOidcSecurityContainer = new AdminOidcSecurityContainer(appContainer);
  143. const adminBasicSecurityContainer = new AdminBasicSecurityContainer(appContainer);
  144. const adminGoogleSecurityContainer = new AdminGoogleSecurityContainer(appContainer);
  145. const adminGitHubSecurityContainer = new AdminGitHubSecurityContainer(appContainer);
  146. const adminTwitterSecurityContainer = new AdminTwitterSecurityContainer(appContainer);
  147. const adminSecurityContainers = [
  148. adminGeneralSecurityContainer, adminLocalSecurityContainer, adminLdapSecurityContainer, adminSamlSecurityContainer,
  149. adminOidcSecurityContainer, adminBasicSecurityContainer, adminGoogleSecurityContainer, adminGitHubSecurityContainer, adminTwitterSecurityContainer,
  150. ];
  151. ReactDOM.render(
  152. <I18nextProvider i18n={i18n}>
  153. <ErrorBoundary>
  154. <Provider inject={[...injectableContainers, ...adminSecurityContainers]}>
  155. <SecurityManagement />
  156. </Provider>
  157. </ErrorBoundary>
  158. </I18nextProvider>,
  159. adminSecuritySettingElem,
  160. );
  161. }