import React from 'react'; import ReactDOM from 'react-dom'; import { Provider } from 'unstated'; import { I18nextProvider } from 'react-i18next'; import loggerFactory from '@alias/logger'; import SearchPage from './components/SearchPage'; import TagsList from './components/TagsList'; import PageEditor from './components/PageEditor'; // eslint-disable-next-line import/no-duplicates import OptionsSelector from './components/PageEditor/OptionsSelector'; // eslint-disable-next-line import/no-duplicates import { defaultEditorOptions, defaultPreviewOptions } from './components/PageEditor/OptionsSelector'; import SavePageControls from './components/SavePageControls'; import PageEditorByHackmd from './components/PageEditorByHackmd'; import Page from './components/Page'; import PageHistory from './components/PageHistory'; import PageComments from './components/PageComments'; import PageTimeline from './components/PageTimeline'; import CommentEditorLazyRenderer from './components/PageComment/CommentEditorLazyRenderer'; import PageAttachment from './components/PageAttachment'; import PageStatusAlert from './components/PageStatusAlert'; import RevisionPath from './components/Page/RevisionPath'; import TagLabels from './components/Page/TagLabels'; import PagePathAutoComplete from './components/PagePathAutoComplete'; import RecentCreated from './components/RecentCreated/RecentCreated'; import MyDraftList from './components/MyDraftList/MyDraftList'; import UserPictureList from './components/User/UserPictureList'; import TableOfContents from './components/TableOfContents'; import PersonalSettings from './components/Me/PersonalSettings'; import PageContainer from './services/PageContainer'; import CommentContainer from './services/CommentContainer'; import EditorContainer from './services/EditorContainer'; import TagContainer from './services/TagContainer'; import GrowiSubNavigation from './components/Navbar/GrowiSubNavigation'; import GrowiSubNavigationForUserPage from './components/Navbar/GrowiSubNavigationForUserPage'; import PersonalContainer from './services/PersonalContainer'; import { appContainer, componentMappings } from './bootstrap'; const logger = loggerFactory('growi:app'); const { i18n } = appContainer; const websocketContainer = appContainer.getContainer('WebsocketContainer'); // create unstated container instance const pageContainer = new PageContainer(appContainer); const commentContainer = new CommentContainer(appContainer); const editorContainer = new EditorContainer(appContainer, defaultEditorOptions, defaultPreviewOptions); const tagContainer = new TagContainer(appContainer); const personalContainer = new PersonalContainer(appContainer); const injectableContainers = [ appContainer, websocketContainer, pageContainer, commentContainer, editorContainer, tagContainer, personalContainer, ]; logger.info('unstated containers have been initialized'); /** * define components * key: id of element * value: React Element */ Object.assign(componentMappings, { 'search-page': , // 'revision-history': , 'tags-page': , 'create-page-name-input': , 'page-editor': , 'page-editor-options-selector': , 'page-status-alert': , 'save-page-controls': , 'page-timeline': , 'personal-setting': , }); // additional definitions if data exists if (pageContainer.state.pageId != null) { Object.assign(componentMappings, { 'page-editor-with-hackmd': , 'page-comments-list': , 'page-attachment': , 'page-comment-write': , 'revision-toc': , 'seen-user-list': , 'liker-list': , 'rename-page-name-input': , 'duplicate-page-name-input': , 'user-created-list': , 'user-draft-list': , }); } if (pageContainer.state.path != null) { Object.assign(componentMappings, { // eslint-disable-next-line quote-props 'page': , 'revision-path': , 'tag-label': , 'grw-subnav': , 'grw-subnav-for-user-page': , }); } Object.keys(componentMappings).forEach((key) => { const elem = document.getElementById(key); if (elem) { ReactDOM.render( {componentMappings[key]} , elem, ); } }); // うわーもうー (commented by Crowi team -- 2018.03.23 Yuki Takei) $('a[data-toggle="tab"][href="#revision-history"]').on('show.bs.tab', () => { ReactDOM.render( , document.getElementById('revision-history'), ); }); // initialize scrollpos-styler ScrollPosStyler.init();