DisplaySwitcher.jsx 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  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. import HashChanged from '../EventListeneres/HashChanged';
  16. import { useIsEditable } from '~/stores/context';
  17. const DisplaySwitcher = (props) => {
  18. const {
  19. pageContainer,
  20. } = props;
  21. const { isPageExist, pageUser } = pageContainer.state;
  22. const { data: isEditable } = useIsEditable();
  23. const { data: editorMode } = useEditorMode();
  24. const isViewMode = editorMode === EditorMode.View;
  25. return (
  26. <>
  27. <TabContent activeTab={editorMode}>
  28. <TabPane tabId={EditorMode.View}>
  29. <div className="d-flex flex-column flex-lg-row-reverse">
  30. { isPageExist && (
  31. <div className="grw-side-contents-container">
  32. <div className="grw-side-contents-sticky-container">
  33. <div className="border-bottom pb-1">
  34. <PageAccessories />
  35. </div>
  36. <div className="d-none d-lg-block">
  37. <div id="revision-toc" className="revision-toc">
  38. <TableOfContents />
  39. </div>
  40. <ContentLinkButtons />
  41. </div>
  42. </div>
  43. </div>
  44. ) }
  45. <div className="flex-grow-1 flex-basis-0 mw-0">
  46. {pageUser && <UserInfo pageUser={pageUser} />}
  47. <Page />
  48. </div>
  49. </div>
  50. </TabPane>
  51. { isEditable && (
  52. <TabPane tabId={EditorMode.Editor}>
  53. <div id="page-editor">
  54. <Editor />
  55. </div>
  56. </TabPane>
  57. ) }
  58. { isEditable && (
  59. <TabPane tabId={EditorMode.HackMD}>
  60. <div id="page-editor-with-hackmd">
  61. <PageEditorByHackmd />
  62. </div>
  63. </TabPane>
  64. ) }
  65. </TabContent>
  66. { isEditable && !isViewMode && <EditorNavbarBottom /> }
  67. { isEditable && <HashChanged></HashChanged> }
  68. </>
  69. );
  70. };
  71. DisplaySwitcher.propTypes = {
  72. pageContainer: propTypes.instanceOf(PageContainer).isRequired,
  73. };
  74. export default withUnstatedContainers(DisplaySwitcher, [PageContainer]);