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"