diff --git a/src/frontend/apps/impress/package.json b/src/frontend/apps/impress/package.json
index ea1ab6d8..38fef7a6 100644
--- a/src/frontend/apps/impress/package.json
+++ b/src/frontend/apps/impress/package.json
@@ -106,7 +106,6 @@
"stylelint-config-standard": "39.0.1",
"stylelint-prettier": "5.0.3",
"typescript": "*",
- "vite-tsconfig-paths": "6.1.1",
"vitest": "4.1.0",
"webpack": "5.105.4",
"workbox-webpack-plugin": "7.1.0"
diff --git a/src/frontend/apps/impress/src/features/docs/doc-editor/hook/useSaveDoc.tsx b/src/frontend/apps/impress/src/features/docs/doc-editor/hook/useSaveDoc.tsx
index 5d949fe7..1954c0b7 100644
--- a/src/frontend/apps/impress/src/features/docs/doc-editor/hook/useSaveDoc.tsx
+++ b/src/frontend/apps/impress/src/features/docs/doc-editor/hook/useSaveDoc.tsx
@@ -3,7 +3,7 @@ import { useCallback, useEffect, useState } from 'react';
import * as Y from 'yjs';
import { useUpdateDoc } from '@/docs/doc-management/';
-import { KEY_LIST_DOC_VERSIONS } from '@/docs/doc-versioning';
+import { KEY_LIST_DOC_VERSIONS } from '@/docs/doc-versioning/api/useDocVersions';
import { toBase64 } from '@/utils/string';
import { isFirefox } from '@/utils/userAgent';
diff --git a/src/frontend/apps/impress/src/features/docs/doc-export/__tests__/ExportMIT.test.tsx b/src/frontend/apps/impress/src/features/docs/doc-export/__tests__/ExportMIT.test.tsx
index 9ae3e731..3e5f3c3c 100644
--- a/src/frontend/apps/impress/src/features/docs/doc-export/__tests__/ExportMIT.test.tsx
+++ b/src/frontend/apps/impress/src/features/docs/doc-export/__tests__/ExportMIT.test.tsx
@@ -1,4 +1,9 @@
import { afterAll, afterEach, describe, expect, it, vi } from 'vitest';
+
+vi.mock('@/docs/doc-export/components/ModalExport', () => ({
+ ModalExport: vi.fn(),
+}));
+
const originalEnv = process.env.NEXT_PUBLIC_PUBLISH_AS_MIT;
describe('useModuleExport', () => {
@@ -16,12 +21,12 @@ describe('useModuleExport', () => {
const Export = await import('@/features/docs/doc-export/');
expect(Export.default).toBeUndefined();
- }, 15000);
+ });
it('should load modules when NEXT_PUBLIC_PUBLISH_AS_MIT is false', async () => {
process.env.NEXT_PUBLIC_PUBLISH_AS_MIT = 'false';
const Export = await import('@/features/docs/doc-export/');
expect(Export.default).toHaveProperty('ModalExport');
- }, 15000);
+ });
});
diff --git a/src/frontend/apps/impress/src/features/docs/doc-header/__tests__/DocToolBoxLicence.spec.tsx b/src/frontend/apps/impress/src/features/docs/doc-header/__tests__/DocToolBoxLicence.spec.tsx
index 48ec7b75..e0e693d3 100644
--- a/src/frontend/apps/impress/src/features/docs/doc-header/__tests__/DocToolBoxLicence.spec.tsx
+++ b/src/frontend/apps/impress/src/features/docs/doc-header/__tests__/DocToolBoxLicence.spec.tsx
@@ -1,6 +1,4 @@
import { render, screen } from '@testing-library/react';
-import userEvent from '@testing-library/user-event';
-import React from 'react';
import { afterAll, beforeEach, describe, expect, vi } from 'vitest';
import { AppWrapper } from '@/tests/utils';
@@ -40,17 +38,11 @@ describe('DocToolBox - Licence', () => {
render(, {
wrapper: AppWrapper,
});
- const optionsButton = await screen.findByLabelText('Export the document');
- await userEvent.click(optionsButton);
- // Wait for the export modal to be visible, then assert on its content text.
- await screen.findByTestId('modal-export-title');
expect(
- screen.getByText(
- 'Export your document to print or download in .docx, .odt, .pdf or .html(zip) format.',
- ),
+ await screen.findByLabelText('Export the document'),
).toBeInTheDocument();
- }, 10000);
+ }, 15000);
test('The export button is not rendered when MIT version is activated', async () => {
process.env.NEXT_PUBLIC_PUBLISH_AS_MIT = 'true';
@@ -68,5 +60,5 @@ describe('DocToolBox - Licence', () => {
expect(
screen.queryByLabelText('Export the document'),
).not.toBeInTheDocument();
- });
+ }, 15000);
});
diff --git a/src/frontend/apps/impress/src/features/docs/doc-header/components/DocToolBox.tsx b/src/frontend/apps/impress/src/features/docs/doc-header/components/DocToolBox.tsx
index 2b9eff39..33f19bb2 100644
--- a/src/frontend/apps/impress/src/features/docs/doc-header/components/DocToolBox.tsx
+++ b/src/frontend/apps/impress/src/features/docs/doc-header/components/DocToolBox.tsx
@@ -1,9 +1,8 @@
import { Button, useModal } from '@gouvfr-lasuite/cunningham-react';
import { useTreeContext } from '@gouvfr-lasuite/ui-kit';
-import { useQueryClient } from '@tanstack/react-query';
import dynamic from 'next/dynamic';
import { useRouter } from 'next/router';
-import { useEffect, useState } from 'react';
+import { useState } from 'react';
import { useTranslation } from 'react-i18next';
import { css } from 'styled-components';
@@ -39,7 +38,6 @@ import {
useDocUtils,
useDuplicateDoc,
} from '@/docs/doc-management';
-import { KEY_LIST_DOC_VERSIONS } from '@/docs/doc-versioning';
import { useFocusStore, useResponsiveStore } from '@/stores';
import { useCopyCurrentEditorToClipboard } from '../hooks/useCopyCurrentEditorToClipboard';
@@ -88,7 +86,6 @@ interface DocToolBoxProps {
export const DocToolBox = ({ doc }: DocToolBoxProps) => {
const { t } = useTranslation();
const treeContext = useTreeContext();
- const queryClient = useQueryClient();
const router = useRouter();
const { isChild, isTopRoot } = useDocUtils(doc);
@@ -114,16 +111,6 @@ export const DocToolBox = ({ doc }: DocToolBoxProps) => {
listInvalidQueries: [KEY_LIST_DOC, KEY_DOC, KEY_LIST_FAVORITE_DOC],
});
- useEffect(() => {
- if (selectHistoryModal.isOpen) {
- return;
- }
-
- void queryClient.resetQueries({
- queryKey: [KEY_LIST_DOC_VERSIONS],
- });
- }, [selectHistoryModal.isOpen, queryClient]);
-
// Emoji Management
const { emoji } = getEmojiAndTitle(doc.title ?? '');
const { updateDocEmoji } = useDocTitleUpdate();
diff --git a/src/frontend/apps/impress/src/features/docs/doc-header/hooks/useCopyCurrentEditorToClipboard.tsx b/src/frontend/apps/impress/src/features/docs/doc-header/hooks/useCopyCurrentEditorToClipboard.tsx
index d0a745b7..e1c25c0f 100644
--- a/src/frontend/apps/impress/src/features/docs/doc-header/hooks/useCopyCurrentEditorToClipboard.tsx
+++ b/src/frontend/apps/impress/src/features/docs/doc-header/hooks/useCopyCurrentEditorToClipboard.tsx
@@ -4,7 +4,7 @@ import {
} from '@gouvfr-lasuite/cunningham-react';
import { useTranslation } from 'react-i18next';
-import { useEditorStore } from '../../doc-editor';
+import { useEditorStore } from '@/docs/doc-editor/stores/useEditorStore';
export const useCopyCurrentEditorToClipboard = () => {
const { editor } = useEditorStore();
@@ -21,8 +21,8 @@ export const useCopyCurrentEditorToClipboard = () => {
try {
const editorContentFormatted =
asFormat === 'html'
- ? await editor.blocksToHTMLLossy()
- : await editor.blocksToMarkdownLossy();
+ ? editor.blocksToHTMLLossy()
+ : editor.blocksToMarkdownLossy();
await navigator.clipboard.writeText(editorContentFormatted);
const successMessage =
asFormat === 'markdown'
diff --git a/src/frontend/apps/impress/src/features/docs/doc-management/api/useUpdateDoc.tsx b/src/frontend/apps/impress/src/features/docs/doc-management/api/useUpdateDoc.tsx
index aded223d..b18c5ac9 100644
--- a/src/frontend/apps/impress/src/features/docs/doc-management/api/useUpdateDoc.tsx
+++ b/src/frontend/apps/impress/src/features/docs/doc-management/api/useUpdateDoc.tsx
@@ -44,7 +44,7 @@ export function useUpdateDoc(queryConfig?: UseUpdateDoc) {
...queryConfig,
onSuccess: (data, variables, onMutateResult, context) => {
queryConfig?.listInvalidQueries?.forEach((queryKey) => {
- void queryClient.invalidateQueries({
+ void queryClient.resetQueries({
queryKey: [queryKey],
});
});
diff --git a/src/frontend/apps/impress/src/features/docs/doc-management/hooks/__tests__/useDocTitleUpdate.test.tsx b/src/frontend/apps/impress/src/features/docs/doc-management/hooks/__tests__/useDocTitleUpdate.test.tsx
index cde76d95..b6408d68 100644
--- a/src/frontend/apps/impress/src/features/docs/doc-management/hooks/__tests__/useDocTitleUpdate.test.tsx
+++ b/src/frontend/apps/impress/src/features/docs/doc-management/hooks/__tests__/useDocTitleUpdate.test.tsx
@@ -14,6 +14,11 @@ vi.mock('@/stores', () => ({
}),
}));
+vi.mock('@gouvfr-lasuite/ui-kit', async () => ({
+ ...(await vi.importActual('@gouvfr-lasuite/ui-kit')),
+ useTreeContext: () => null,
+}));
+
describe('useDocTitleUpdate', () => {
beforeEach(() => {
vi.clearAllMocks();
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
index 68984f92..e04102a5 100644
--- 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
@@ -4,9 +4,12 @@ import { useEffect, useState } from 'react';
import * as Y from 'yjs';
import { Box, Text, TextErrors } from '@/components';
-import { BlockNoteReader, DocEditorContainer } from '@/docs/doc-editor/';
+import { BlockNoteReader } from '@/docs/doc-editor/components/BlockNoteEditor';
+import { DocEditorContainer } from '@/docs/doc-editor/components/DocEditor';
import { Doc, base64ToBlocknoteXmlFragment } from '@/docs/doc-management';
-import { Versions, useDocVersion } from '@/docs/doc-versioning/';
+
+import { useDocVersion } from '../api/useDocVersion';
+import { Versions } from '../types';
import { DocVersionHeader } from './DocVersionHeader';
diff --git a/src/frontend/apps/impress/src/features/docs/doc-versioning/types.ts b/src/frontend/apps/impress/src/features/docs/doc-versioning/types.ts
index 5affe7b0..9d71474b 100644
--- a/src/frontend/apps/impress/src/features/docs/doc-versioning/types.ts
+++ b/src/frontend/apps/impress/src/features/docs/doc-versioning/types.ts
@@ -1,4 +1,4 @@
-import { Doc } from '../doc-management';
+import { Doc } from '../doc-management/types';
export interface APIListVersions {
count: number;
diff --git a/src/frontend/apps/impress/src/features/docs/docs-grid/components/__tests__/DocsGridItemDate.test.tsx b/src/frontend/apps/impress/src/features/docs/docs-grid/components/__tests__/DocsGridItemDate.test.tsx
index 22efaae7..8c1d6d42 100644
--- a/src/frontend/apps/impress/src/features/docs/docs-grid/components/__tests__/DocsGridItemDate.test.tsx
+++ b/src/frontend/apps/impress/src/features/docs/docs-grid/components/__tests__/DocsGridItemDate.test.tsx
@@ -1,4 +1,4 @@
-import { render, screen, waitFor } from '@testing-library/react';
+import { act, render, screen, waitFor } from '@testing-library/react';
import fetchMock from 'fetch-mock';
import i18next from 'i18next';
import { DateTime } from 'luxon';
@@ -73,7 +73,9 @@ describe('DocsGridItemDate', () => {
});
it(`should render rendered the updated_at field in the correct language`, async () => {
- await i18next.changeLanguage('fr');
+ await act(async () => {
+ await i18next.changeLanguage('fr');
+ });
render(
{
expect(screen.getByText('il y a 5 jours')).toBeInTheDocument();
- await i18next.changeLanguage('en');
+ await act(async () => {
+ await i18next.changeLanguage('en');
+ });
});
[
diff --git a/src/frontend/apps/impress/src/features/service-worker/__tests__/DocsDB.test.tsx b/src/frontend/apps/impress/src/features/service-worker/__tests__/DocsDB.test.tsx
index d815efb1..f3b1d8a1 100644
--- a/src/frontend/apps/impress/src/features/service-worker/__tests__/DocsDB.test.tsx
+++ b/src/frontend/apps/impress/src/features/service-worker/__tests__/DocsDB.test.tsx
@@ -1,12 +1,7 @@
-import { afterEach, describe, expect, it, vi } from 'vitest';
-
-vi.mock('@/../package.json', () => ({
- default: { version: '0.0.0' },
-}));
+import { describe, expect, it, vi } from 'vitest';
describe('DocsDB', () => {
- afterEach(() => {
- vi.clearAllMocks();
+ beforeEach(() => {
vi.resetModules();
});
@@ -20,17 +15,16 @@ describe('DocsDB', () => {
{ version: '3.0.0', expected: 3000000 },
{ version: '10.20.30', expected: 10020030 },
].forEach(({ version, expected }) => {
- it(`correctly computes version for ${version}`, () => {
+ it(`correctly computes version for ${version}`, async () => {
vi.doMock('@/../package.json', () => ({
default: { version },
}));
- return vi.importActual('../DocsDB').then((module: any) => {
- const result = module.getCurrentVersion();
- expect(result).toBe(expected);
- expect(result).toBeGreaterThan(previousExpected);
- previousExpected = result;
- });
+ const module = await import('../DocsDB');
+ const result = (module as any).getCurrentVersion();
+ expect(result).toBe(expected);
+ expect(result).toBeGreaterThan(previousExpected);
+ previousExpected = result;
});
});
});
diff --git a/src/frontend/apps/impress/vitest.config.ts b/src/frontend/apps/impress/vitest.config.ts
index bfd70093..9a06f4fa 100644
--- a/src/frontend/apps/impress/vitest.config.ts
+++ b/src/frontend/apps/impress/vitest.config.ts
@@ -1,16 +1,9 @@
///
import react from '@vitejs/plugin-react';
-import tsconfigPaths from 'vite-tsconfig-paths';
import { defineConfig } from 'vitest/config';
export default defineConfig({
- plugins: [
- react(),
- tsconfigPaths({
- root: '.',
- projects: ['./tsconfig.json'],
- }),
- ],
+ plugins: [react()],
test: {
globals: true,
environment: 'jsdom',
@@ -22,4 +15,7 @@ export default defineConfig({
define: {
'process.env.NODE_ENV': 'test',
},
+ resolve: {
+ tsconfigPaths: true,
+ },
});
diff --git a/src/frontend/package.json b/src/frontend/package.json
index d7f54f9a..b8d197a5 100644
--- a/src/frontend/package.json
+++ b/src/frontend/package.json
@@ -31,7 +31,7 @@
"server:test": "yarn COLLABORATION_SERVER run test"
},
"resolutions": {
- "@tiptap/extensions": "3.20.3",
+ "@tiptap/extensions": "3.19.0",
"@types/node": "24.12.0",
"@types/react": "19.2.14",
"@types/react-dom": "19.2.3",
diff --git a/src/frontend/yarn.lock b/src/frontend/yarn.lock
index 3adfe8f4..dd839337 100644
--- a/src/frontend/yarn.lock
+++ b/src/frontend/yarn.lock
@@ -7050,10 +7050,10 @@
resolved "https://registry.yarnpkg.com/@tiptap/extension-underline/-/extension-underline-3.14.0.tgz#7d9ac55419f353cdd3817b8f5d56a11e909b1251"
integrity sha512-zmnWlsi2g/tMlThHby0Je9O+v24j4d+qcXF3nuzLUUaDsGCEtOyC9RzwITft59ViK+Nc2PD2W/J14rsB0j+qoQ==
-"@tiptap/extensions@*", "@tiptap/extensions@3.20.3", "@tiptap/extensions@^3.13.0":
- version "3.20.3"
- resolved "https://registry.yarnpkg.com/@tiptap/extensions/-/extensions-3.20.3.tgz#d32b438d7de7fb120721ba884ebf7c39f11e4463"
- integrity sha512-SqKzXnTrKK/MPyBdzEiC/UazXMCilIQXCl6fuaGkXFOfbYIs9ly9bD2ucgghhBq+khIRY6joNQndqbGi0U0OCA==
+"@tiptap/extensions@*", "@tiptap/extensions@3.19.0", "@tiptap/extensions@^3.13.0":
+ version "3.19.0"
+ resolved "https://registry.yarnpkg.com/@tiptap/extensions/-/extensions-3.19.0.tgz#5747c0ebf460b9669e8b4362561872448f66abfe"
+ integrity sha512-ZmGUhLbMWaGqnJh2Bry+6V4M6gMpUDYo4D1xNux5Gng/E/eYtc+PMxMZ/6F7tNTAuujLBOQKj6D+4SsSm457jw==
"@tiptap/pm@^3.13.0":
version "3.14.0"
@@ -11082,11 +11082,6 @@ globjoin@^0.1.4:
resolved "https://registry.yarnpkg.com/globjoin/-/globjoin-0.1.4.tgz#2f4494ac8919e3767c5cbb691e9f463324285d43"
integrity sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==
-globrex@^0.1.2:
- version "0.1.2"
- resolved "https://registry.yarnpkg.com/globrex/-/globrex-0.1.2.tgz#dd5d9ec826232730cd6793a5e33a9302985e6098"
- integrity sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==
-
gopd@^1.0.1, gopd@^1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1"
@@ -16708,11 +16703,6 @@ tsc-alias@1.8.16:
normalize-path "^3.0.0"
plimit-lit "^1.2.6"
-tsconfck@^3.0.3:
- version "3.1.6"
- resolved "https://registry.yarnpkg.com/tsconfck/-/tsconfck-3.1.6.tgz#da1f0b10d82237ac23422374b3fce1edb23c3ead"
- integrity sha512-ks6Vjr/jEw0P1gmOVwutM3B7fWxoWBL2KRDb1JfqGVawBmO5UsvmWOQFGHBPl5yxYz4eERr19E6L7NMv+Fej4w==
-
tsconfig-paths@^3.15.0:
version "3.15.0"
resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz#5299ec605e55b1abb23ec939ef15edaf483070d4"
@@ -17216,15 +17206,6 @@ vite-compatible-readable-stream@^3.6.1:
string_decoder "^1.1.1"
util-deprecate "^1.0.1"
-vite-tsconfig-paths@6.1.1:
- version "6.1.1"
- resolved "https://registry.yarnpkg.com/vite-tsconfig-paths/-/vite-tsconfig-paths-6.1.1.tgz#d5c28cba79c89ebf76489ef1040024b21df6da3a"
- integrity sha512-2cihq7zliibCCZ8P9cKJrQBkfgdvcFkOOc3Y02o3GWUDLgqjWsZudaoiuOwO/gzTzy17cS5F7ZPo4bsnS4DGkg==
- dependencies:
- debug "^4.1.1"
- globrex "^0.1.2"
- tsconfck "^3.0.3"
-
"vite@^6.0.0 || ^7.0.0 || ^8.0.0-0":
version "8.0.2"
resolved "https://registry.yarnpkg.com/vite/-/vite-8.0.2.tgz#fcee428eb0ad3d4aa9843d7f7ba981679bbe5edc"