admin.jsx 8.1 KB

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