DisplaySwitcher.tsx 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. import React from 'react';
  2. import dynamic from 'next/dynamic';
  3. import { useHashChangedEffect } from '~/client/services/side-effects/hash-changed';
  4. import { usePageUpdatedEffect } from '~/client/services/side-effects/page-updated';
  5. import { useYjsDraftEffect } from '~/client/services/side-effects/yjs-draft';
  6. import { useIsEditable } from '~/stores/context';
  7. import { useIsLatestRevision } from '~/stores/page';
  8. import { EditorMode, useEditorMode } from '~/stores/ui';
  9. import { LazyRenderer } from '../Common/LazyRenderer';
  10. const PageEditor = dynamic(() => import('../PageEditor'), { ssr: false });
  11. const PageEditorReadOnly = dynamic(() => import('../PageEditor/PageEditorReadOnly').then(mod => mod.PageEditorReadOnly), { ssr: false });
  12. type Props = {
  13. pageView: JSX.Element,
  14. }
  15. export const DisplaySwitcher = (props: Props): JSX.Element => {
  16. const { pageView } = props;
  17. const { data: editorMode = EditorMode.View } = useEditorMode();
  18. const { data: isEditable } = useIsEditable();
  19. const { data: isLatestRevision } = useIsLatestRevision();
  20. usePageUpdatedEffect();
  21. useHashChangedEffect();
  22. useYjsDraftEffect();
  23. return (
  24. <>
  25. <div className="d-edit-none">
  26. {pageView}
  27. </div>
  28. <LazyRenderer shouldRender={isEditable === true && editorMode === EditorMode.Editor}>
  29. { isLatestRevision
  30. ? <PageEditor />
  31. : <PageEditorReadOnly />
  32. }
  33. </LazyRenderer>
  34. </>
  35. );
  36. };