DisplaySwitcher.tsx 1.1 KB

1234567891011121314151617181920212223242526272829303132
  1. import dynamic from 'next/dynamic';
  2. import { useHashChangedEffect } from '~/client/services/side-effects/hash-changed';
  3. import { useSaveNextCaretLine } from '~/client/services/side-effects/save-next-caret-line';
  4. import { useIsEditable } from '~/stores-universal/context';
  5. import { EditorMode, useEditorMode } from '~/stores-universal/ui';
  6. import { useIsLatestRevision } from '~/stores/page';
  7. import { LazyRenderer } from '../Common/LazyRenderer';
  8. const PageEditor = dynamic(() => import('../PageEditor'), { ssr: false });
  9. const PageEditorReadOnly = dynamic(() => import('../PageEditor/PageEditorReadOnly').then(mod => mod.PageEditorReadOnly), { ssr: false });
  10. export const DisplaySwitcher = (): JSX.Element => {
  11. const { data: editorMode = EditorMode.View } = useEditorMode();
  12. const { data: isEditable } = useIsEditable();
  13. const { data: isLatestRevision } = useIsLatestRevision();
  14. useHashChangedEffect();
  15. useSaveNextCaretLine();
  16. return (
  17. <LazyRenderer shouldRender={isEditable === true && editorMode === EditorMode.Editor}>
  18. { isLatestRevision
  19. ? <PageEditor />
  20. : <PageEditorReadOnly />
  21. }
  22. </LazyRenderer>
  23. );
  24. };