diff --git a/src/frontend/apps/impress/src/features/docs/doc-editor/components/DocEditor.tsx b/src/frontend/apps/impress/src/features/docs/doc-editor/components/DocEditor.tsx
index 0cde3120..860d424e 100644
--- a/src/frontend/apps/impress/src/features/docs/doc-editor/components/DocEditor.tsx
+++ b/src/frontend/apps/impress/src/features/docs/doc-editor/components/DocEditor.tsx
@@ -1,31 +1,63 @@
-import { Loader } from '@openfun/cunningham-react';
-import { useRouter } from 'next/router';
-import { useEffect, useState } from 'react';
+import { useEffect } from 'react';
import { css } from 'styled-components';
-import * as Y from 'yjs';
-import { Box, Loading, Text, TextErrors } from '@/components';
-import { DocHeader, DocVersionHeader } from '@/docs/doc-header/';
-import {
- Doc,
- base64ToBlocknoteXmlFragment,
- useProviderStore,
-} from '@/docs/doc-management';
+import { Box, Loading } from '@/components';
+import { DocHeader } from '@/docs/doc-header/';
+import { Doc, useProviderStore } from '@/docs/doc-management';
import { TableContent } from '@/docs/doc-table-content/';
-import { Versions, useDocVersion } from '@/docs/doc-versioning/';
import { useSkeletonStore } from '@/features/skeletons';
import { useResponsiveStore } from '@/stores';
-import { BlockNoteEditor, BlockNoteEditorVersion } from './BlockNoteEditor';
+import { BlockNoteEditor } from './BlockNoteEditor';
+
+interface DocEditorContainerProps {
+ docHeader: React.ReactNode;
+ docEditor: React.ReactNode;
+}
+
+export const DocEditorContainer = ({
+ docHeader,
+ docEditor,
+}: DocEditorContainerProps) => {
+ const { isDesktop } = useResponsiveStore();
+
+ return (
+ <>
+
+
+ {docHeader}
+
+
+
+
+ {docEditor}
+
+
+
+ >
+ );
+};
interface DocEditorProps {
doc: Doc;
- versionId?: Versions['version_id'];
}
-export const DocEditor = ({ doc, versionId }: DocEditorProps) => {
+export const DocEditor = ({ doc }: DocEditorProps) => {
const { isDesktop } = useResponsiveStore();
- const isVersion = !!versionId && typeof versionId === 'string';
const { provider, isReady } = useProviderStore();
const { setIsSkeletonVisible } = useSkeletonStore();
const isProviderReady = isReady && provider;
@@ -42,7 +74,7 @@ export const DocEditor = ({ doc, versionId }: DocEditorProps) => {
return (
<>
- {isDesktop && !isVersion && (
+ {isDesktop && (
{
)}
-
-
- {isVersion ? : }
-
-
-
-
- {isVersion ? (
-
- ) : (
-
- )}
-
-
-
+ }
+ docEditor={}
+ />
>
);
};
-
-interface DocVersionEditorProps {
- docId: Doc['id'];
- versionId: Versions['version_id'];
-}
-
-export const DocVersionEditor = ({
- docId,
- versionId,
-}: DocVersionEditorProps) => {
- const {
- data: version,
- isLoading,
- isError,
- error,
- } = useDocVersion({
- docId,
- versionId,
- });
-
- const { replace } = useRouter();
- const [initialContent, setInitialContent] = useState();
-
- useEffect(() => {
- if (!version?.content) {
- return;
- }
-
- setInitialContent(base64ToBlocknoteXmlFragment(version.content));
- }, [version?.content]);
-
- if (isError && error) {
- if (error.status === 404) {
- void replace(`/404`);
- return null;
- }
-
- return (
-
-
- wifi_off
-
- ) : undefined
- }
- />
-
- );
- }
-
- if (isLoading || !version || !initialContent) {
- return (
-
-
-
- );
- }
-
- return ;
-};
diff --git a/src/frontend/apps/impress/src/features/docs/doc-editor/components/index.ts b/src/frontend/apps/impress/src/features/docs/doc-editor/components/index.ts
index 3a390c33..2e24346d 100644
--- a/src/frontend/apps/impress/src/features/docs/doc-editor/components/index.ts
+++ b/src/frontend/apps/impress/src/features/docs/doc-editor/components/index.ts
@@ -1,3 +1,4 @@
+export * from './BlockNoteEditor';
export * from './DocEditor';
export * from './EmojiPicker';
export * from './custom-blocks/';
diff --git a/src/frontend/apps/impress/src/features/docs/doc-header/components/index.ts b/src/frontend/apps/impress/src/features/docs/doc-header/components/index.ts
index ce2b58d4..b0e56b2d 100644
--- a/src/frontend/apps/impress/src/features/docs/doc-header/components/index.ts
+++ b/src/frontend/apps/impress/src/features/docs/doc-header/components/index.ts
@@ -1,2 +1,2 @@
export * from './DocHeader';
-export * from './DocVersionHeader';
+export * from './DocTitle';
diff --git a/src/frontend/apps/impress/src/features/docs/doc-versioning/components/DocVersionEditor.tsx b/src/frontend/apps/impress/src/features/docs/doc-versioning/components/DocVersionEditor.tsx
new file mode 100644
index 00000000..652a61ee
--- /dev/null
+++ b/src/frontend/apps/impress/src/features/docs/doc-versioning/components/DocVersionEditor.tsx
@@ -0,0 +1,83 @@
+import { Loader } from '@openfun/cunningham-react';
+import { useRouter } from 'next/router';
+import { useEffect, useState } from 'react';
+import * as Y from 'yjs';
+
+import { Box, Text, TextErrors } from '@/components';
+import { BlockNoteEditorVersion, DocEditorContainer } from '@/docs/doc-editor/';
+import { Doc, base64ToBlocknoteXmlFragment } from '@/docs/doc-management';
+import { Versions, useDocVersion } from '@/docs/doc-versioning/';
+
+import { DocVersionHeader } from './DocVersionHeader';
+
+interface DocVersionEditorProps {
+ docId: Doc['id'];
+ versionId: Versions['version_id'];
+}
+
+export const DocVersionEditor = ({
+ docId,
+ versionId,
+}: DocVersionEditorProps) => {
+ const {
+ data: version,
+ isLoading,
+ isError,
+ error,
+ } = useDocVersion({
+ docId,
+ versionId,
+ });
+
+ const { replace } = useRouter();
+ const [initialContent, setInitialContent] = useState();
+
+ useEffect(() => {
+ if (!version?.content) {
+ return;
+ }
+
+ setInitialContent(base64ToBlocknoteXmlFragment(version.content));
+ }, [version?.content]);
+
+ if (isError && error) {
+ if (error.status === 404) {
+ void replace(`/404`);
+ return null;
+ }
+
+ return (
+
+
+ wifi_off
+
+ ) : undefined
+ }
+ />
+
+ );
+ }
+
+ if (isLoading || !version || !initialContent) {
+ return (
+
+
+
+ );
+ }
+
+ return (
+ }
+ docEditor={}
+ />
+ );
+};
diff --git a/src/frontend/apps/impress/src/features/docs/doc-header/components/DocVersionHeader.tsx b/src/frontend/apps/impress/src/features/docs/doc-versioning/components/DocVersionHeader.tsx
similarity index 92%
rename from src/frontend/apps/impress/src/features/docs/doc-header/components/DocVersionHeader.tsx
rename to src/frontend/apps/impress/src/features/docs/doc-versioning/components/DocVersionHeader.tsx
index 511b803c..b3cc0a88 100644
--- a/src/frontend/apps/impress/src/features/docs/doc-header/components/DocVersionHeader.tsx
+++ b/src/frontend/apps/impress/src/features/docs/doc-versioning/components/DocVersionHeader.tsx
@@ -2,8 +2,7 @@ import { useTranslation } from 'react-i18next';
import { Box, HorizontalSeparator } from '@/components';
import { useCunninghamTheme } from '@/cunningham';
-
-import { DocTitleText } from './DocTitle';
+import { DocTitleText } from '@/docs/doc-header';
export const DocVersionHeader = () => {
const { spacingsTokens } = useCunninghamTheme();
diff --git a/src/frontend/apps/impress/src/features/docs/doc-versioning/components/ModalSelectVersion.tsx b/src/frontend/apps/impress/src/features/docs/doc-versioning/components/ModalSelectVersion.tsx
index b8efa43c..8c8b9a63 100644
--- a/src/frontend/apps/impress/src/features/docs/doc-versioning/components/ModalSelectVersion.tsx
+++ b/src/frontend/apps/impress/src/features/docs/doc-versioning/components/ModalSelectVersion.tsx
@@ -4,11 +4,11 @@ import { useTranslation } from 'react-i18next';
import { createGlobalStyle, css } from 'styled-components';
import { Box, ButtonCloseModal, Text } from '@/components';
-import { DocEditor } from '@/docs/doc-editor';
import { Doc } from '@/docs/doc-management';
import { Versions } from '../types';
+import { DocVersionEditor } from './DocVersionEditor';
import { ModalConfirmationVersion } from './ModalConfirmationVersion';
import { VersionList } from './VersionList';
@@ -81,7 +81,10 @@ export const ModalSelectVersion = ({
$align="center"
>
{selectedVersionId && (
-
+
)}
{!selectedVersionId && (