admin.jsx 7.4 KB

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