DisplaySwitcher.tsx 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. import React from 'react';
  2. import dynamic from 'next/dynamic';
  3. import { useHackmdDraftUpdatedEffect } from '~/client/services/side-effects/hackmd-draft-updated';
  4. import { useHashChangedEffect } from '~/client/services/side-effects/hash-changed';
  5. import { usePageUpdatedEffect } from '~/client/services/side-effects/page-updated';
  6. import { useIsEditable } from '~/stores/context';
  7. import { EditorMode, useEditorMode } from '~/stores/ui';
  8. import { LazyRenderer } from '../Common/LazyRenderer';
  9. const PageEditor = dynamic(() => import('../PageEditor'), { ssr: false });
  10. const EditorNavbarBottom = dynamic(() => import('../PageEditor/EditorNavbarBottom'), { ssr: false });
  11. type Props = {
  12. pageView: JSX.Element,
  13. }
  14. export const DisplaySwitcher = (props: Props): JSX.Element => {
  15. const { pageView } = props;
  16. const { data: editorMode = EditorMode.View } = useEditorMode();
  17. const { data: isEditable } = useIsEditable();
  18. usePageUpdatedEffect();
  19. useHashChangedEffect();
  20. useHackmdDraftUpdatedEffect();
  21. const isViewMode = editorMode === EditorMode.View;
  22. return (
  23. <>
  24. { isViewMode && pageView }
  25. <LazyRenderer shouldRender={isEditable === true && editorMode === EditorMode.Editor}>
  26. <PageEditor />
  27. </LazyRenderer>
  28. { isEditable && !isViewMode && <EditorNavbarBottom /> }
  29. </>
  30. );
  31. };