import React from 'react'; import ReactDOM from 'react-dom'; import { Provider } from 'unstated'; import { I18nextProvider } from 'react-i18next'; import loggerFactory from '~/utils/logger'; import ErrorBoundary from '../components/ErrorBoudary'; import Sidebar from '../components/Sidebar'; import SearchPage from '../components/SearchPage'; import TagsList from '../components/TagsList'; import DisplaySwitcher from '../components/Page/DisplaySwitcher'; import { defaultEditorOptions, defaultPreviewOptions } from '../components/PageEditor/OptionsSelector'; import Page from '../components/Page'; import PageComments from '../components/PageComments'; import PageContentFooter from '../components/PageContentFooter'; import PageTimeline from '../components/PageTimeline'; import CommentEditorLazyRenderer from '../components/PageComment/CommentEditorLazyRenderer'; import PageManagement from '../components/Page/PageManagement'; import ShareLinkAlert from '../components/Page/ShareLinkAlert'; import DuplicatedAlert from '../components/Page/DuplicatedAlert'; import RedirectedAlert from '../components/Page/RedirectedAlert'; import RenamedAlert from '../components/Page/RenamedAlert'; import TrashPageList from '../components/TrashPageList'; import TrashPageAlert from '../components/Page/TrashPageAlert'; import NotFoundPage from '../components/NotFoundPage'; import NotFoundAlert from '../components/Page/NotFoundAlert'; import ForbiddenPage from '../components/ForbiddenPage'; import PageStatusAlert from '../components/PageStatusAlert'; import RecentCreated from '../components/RecentCreated/RecentCreated'; import RecentlyCreatedIcon from '../components/Icons/RecentlyCreatedIcon'; import MyDraftList from '../components/MyDraftList/MyDraftList'; import BookmarkIcon from '../components/Icons/BookmarkIcon'; import BookmarkList from '../components/PageList/BookmarkList'; import LikerList from '../components/User/LikerList'; import Fab from '../components/Fab'; import PersonalSettings from '../components/Me/PersonalSettings'; import GrowiSubNavigation from '../components/Navbar/GrowiSubNavigation'; import GrowiSubNavigationSwitcher from '../components/Navbar/GrowiSubNavigationSwitcher'; import NavigationContainer from '~/client/services/NavigationContainer'; import PageContainer from '~/client/services/PageContainer'; import PageHistoryContainer from '~/client/services/PageHistoryContainer'; import RevisionComparerContainer from '~/client/services/RevisionComparerContainer'; import CommentContainer from '~/client/services/CommentContainer'; import EditorContainer from '~/client/services/EditorContainer'; import TagContainer from '~/client/services/TagContainer'; import PersonalContainer from '~/client/services/PersonalContainer'; import PageAccessoriesContainer from '~/client/services/PageAccessoriesContainer'; import { appContainer, componentMappings } from './base'; const logger = loggerFactory('growi:cli:app'); appContainer.initContents(); const { i18n } = appContainer; const socketIoContainer = appContainer.getContainer('SocketIoContainer'); // create unstated container instance const navigationContainer = new NavigationContainer(appContainer); const pageContainer = new PageContainer(appContainer); const pageHistoryContainer = new PageHistoryContainer(appContainer, pageContainer); const revisionComparerContainer = new RevisionComparerContainer(appContainer, pageContainer); const commentContainer = new CommentContainer(appContainer); const editorContainer = new EditorContainer(appContainer, defaultEditorOptions, defaultPreviewOptions); const tagContainer = new TagContainer(appContainer); const personalContainer = new PersonalContainer(appContainer); const pageAccessoriesContainer = new PageAccessoriesContainer(appContainer); const injectableContainers = [ appContainer, socketIoContainer, navigationContainer, pageContainer, pageHistoryContainer, revisionComparerContainer, commentContainer, editorContainer, tagContainer, personalContainer, pageAccessoriesContainer, ]; logger.info('unstated containers have been initialized'); /** * define components * key: id of element * value: React Element */ Object.assign(componentMappings, { 'grw-sidebar-wrapper': , 'search-page': , // 'revision-history': , 'tags-page': , 'grw-page-status-alert-container': , 'trash-page-alert': , 'trash-page-list': , 'not-found-page': , 'not-found-alert': , 'forbidden-page': , 'page-timeline': , 'personal-setting': , 'my-drafts': , 'grw-fab-container': , 'share-link-alert': , 'duplicated-alert': , 'redirected-alert': , 'renamed-alert': , }); // additional definitions if data exists if (pageContainer.state.pageId != null) { Object.assign(componentMappings, { 'page-comments-list': , 'page-comment-write': , 'page-management': , 'liker-list': , 'page-content-footer': , 'recent-created-icon': , 'user-bookmark-icon': , }); // show the Page accessory modal when query of "compare" is requested if (revisionComparerContainer.getRevisionIDsToCompareAsParam().length > 0) { pageAccessoriesContainer.openPageAccessoriesModal('pageHistory'); } } if (pageContainer.state.creator != null) { Object.assign(componentMappings, { 'user-created-list': , 'user-bookmark-list': , }); } if (pageContainer.state.path != null) { Object.assign(componentMappings, { // eslint-disable-next-line quote-props 'page': , 'grw-subnav-container': , 'grw-subnav-switcher-container': , 'display-switcher': , }); } Object.keys(componentMappings).forEach((key) => { const elem = document.getElementById(key); if (elem) { ReactDOM.render( {componentMappings[key]} , elem, ); } }); // initialize scrollpos-styler ScrollPosStyler.init();