DisplaySwitcher.tsx 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  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 { useIsEditable } from '~/stores/context';
  6. import { EditorMode, useEditorMode } from '~/stores/ui';
  7. import { LazyRenderer } from '../Common/LazyRenderer';
  8. const PageEditor = dynamic(() => import('../PageEditor'), { ssr: false });
  9. const EditorNavbarBottom = dynamic(() => import('../PageEditor/EditorNavbarBottom'), { ssr: false });
  10. type Props = {
  11. pageView: JSX.Element,
  12. }
  13. export const DisplaySwitcher = (props: Props): JSX.Element => {
  14. const { pageView } = props;
  15. const { data: editorMode = EditorMode.View } = useEditorMode();
  16. const { data: isEditable } = useIsEditable();
  17. usePageUpdatedEffect();
  18. useHashChangedEffect();
  19. const isViewMode = editorMode === EditorMode.View;
  20. return (
  21. <>
  22. { isViewMode && pageView }
  23. <LazyRenderer shouldRender={isEditable === true && editorMode === EditorMode.Editor}>
  24. <PageEditor />
  25. </LazyRenderer>
  26. { isEditable && !isViewMode && <EditorNavbarBottom /> }
  27. </>
  28. );
  29. };