DisplaySwitcher.tsx 1.1 KB

12345678910111213141516171819202122232425262728293031323334
  1. import type { JSX } from 'react';
  2. import dynamic from 'next/dynamic';
  3. import { useHashChangedEffect } from '~/client/services/side-effects/hash-changed';
  4. import { useIsEditable, useRevisionIdFromUrl } from '~/states/page';
  5. import { EditorMode, useEditorMode, useReservedNextCaretLine } from '~/states/ui/editor';
  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 { editorMode } = useEditorMode();
  11. const isEditable = useIsEditable();
  12. const revisionIdFromUrl = useRevisionIdFromUrl();
  13. useHashChangedEffect();
  14. useReservedNextCaretLine();
  15. return (
  16. <LazyRenderer shouldRender={isEditable === true && editorMode === EditorMode.Editor}>
  17. {/* Display <PageEditorReadOnly /> when the user is intentionally viewing a specific (past) revision. */}
  18. { revisionIdFromUrl == null
  19. ? <PageEditor />
  20. : <PageEditorReadOnly />
  21. }
  22. </LazyRenderer>
  23. );
  24. };