DisplaySwitcher.tsx 1.0 KB

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