DisplaySwitcher.jsx 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. import React from 'react';
  2. import { TabContent, TabPane } from 'reactstrap';
  3. import propTypes from 'prop-types';
  4. import { withUnstatedContainers } from '../UnstatedUtils';
  5. import PageContainer from '~/client/services/PageContainer';
  6. import { EditorMode, useEditorMode } from '~/stores/ui';
  7. import Editor from '../PageEditor';
  8. import Page from '../Page';
  9. import UserInfo from '../User/UserInfo';
  10. import TableOfContents from '../TableOfContents';
  11. import ContentLinkButtons from '../ContentLinkButtons';
  12. import PageAccessories from '../PageAccessories';
  13. import PageEditorByHackmd from '../PageEditorByHackmd';
  14. import EditorNavbarBottom from '../PageEditor/EditorNavbarBottom';
  15. const DisplaySwitcher = (props) => {
  16. const {
  17. pageContainer,
  18. } = props;
  19. const { isPageExist, pageUser } = pageContainer.state;
  20. const { data: editorMode } = useEditorMode();
  21. const isViewMode = editorMode === EditorMode.View;
  22. return (
  23. <>
  24. <TabContent activeTab={editorMode}>
  25. <TabPane tabId={EditorMode.View}>
  26. <div className="d-flex flex-column flex-lg-row-reverse">
  27. <div className="grw-side-contents-container">
  28. <div className="grw-side-contents-sticky-container">
  29. <div className="border-bottom pb-1">
  30. <PageAccessories isNotFoundPage={!isPageExist} />
  31. </div>
  32. <div className="d-none d-lg-block">
  33. <div id="revision-toc" className="revision-toc">
  34. <TableOfContents />
  35. </div>
  36. <ContentLinkButtons />
  37. </div>
  38. </div>
  39. </div>
  40. <div className="flex-grow-1 flex-basis-0 mw-0">
  41. {pageUser && <UserInfo pageUser={pageUser} />}
  42. <Page />
  43. </div>
  44. </div>
  45. </TabPane>
  46. <TabPane tabId={EditorMode.Editor}>
  47. <div id="page-editor">
  48. <Editor />
  49. </div>
  50. </TabPane>
  51. <TabPane tabId={EditorMode.HackMD}>
  52. <div id="page-editor-with-hackmd">
  53. <PageEditorByHackmd />
  54. </div>
  55. </TabPane>
  56. </TabContent>
  57. {!isViewMode && <EditorNavbarBottom /> }
  58. </>
  59. );
  60. };
  61. DisplaySwitcher.propTypes = {
  62. pageContainer: propTypes.instanceOf(PageContainer).isRequired,
  63. };
  64. export default withUnstatedContainers(DisplaySwitcher, [PageContainer]);