From d5997ba9d5a5d00dc055c4e0046be7a0a312d3bc Mon Sep 17 00:00:00 2001 From: Anthony LC Date: Tue, 4 Mar 2025 16:08:16 +0100 Subject: [PATCH] =?UTF-8?q?=E2=AC=86=EF=B8=8F(frontend)=20bump=20to=20reac?= =?UTF-8?q?t=2019.0.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Last version of Blocknotes is compatible with React 19.0.0, it seems even necessary to bump the version of React to 19.0.0. We bump the version of React to 19.0.0 and remove the react packages from renovate list of ignored dependencies. --- renovate.json | 4 -- src/frontend/apps/impress/package.json | 2 +- .../apps/impress/src/components/Box.tsx | 4 +- .../apps/impress/src/components/Text.tsx | 12 +--- .../BlockNoteToolBar/BlockNoteToolbar.tsx | 10 ++- .../docs/doc-editor/hook/useSaveDoc.tsx | 7 ++- src/frontend/package.json | 7 ++- src/frontend/yarn.lock | 62 +++++++------------ 8 files changed, 43 insertions(+), 65 deletions(-) diff --git a/renovate.json b/renovate.json index 78358eff..2561e9c4 100644 --- a/renovate.json +++ b/renovate.json @@ -15,14 +15,10 @@ "matchManagers": ["npm"], "matchPackageNames": [ "@openfun/cunningham-react", - "@types/react", - "@types/react-dom", "eslint", "fetch-mock", "node", "node-fetch", - "react", - "react-dom", "workbox-webpack-plugin" ] } diff --git a/src/frontend/apps/impress/package.json b/src/frontend/apps/impress/package.json index e40d229f..2873b122 100644 --- a/src/frontend/apps/impress/package.json +++ b/src/frontend/apps/impress/package.json @@ -60,7 +60,7 @@ "@types/lodash": "4.17.16", "@types/luxon": "3.4.2", "@types/node": "*", - "@types/react": "18.3.12", + "@types/react": "*", "@types/react-dom": "*", "cross-env": "7.0.3", "dotenv": "16.4.7", diff --git a/src/frontend/apps/impress/src/components/Box.tsx b/src/frontend/apps/impress/src/components/Box.tsx index 61eb50f1..80a8a69e 100644 --- a/src/frontend/apps/impress/src/components/Box.tsx +++ b/src/frontend/apps/impress/src/components/Box.tsx @@ -1,4 +1,4 @@ -import { ComponentPropsWithRef, ReactHTML } from 'react'; +import { ComponentPropsWithRef, HTMLElementType } from 'react'; import styled from 'styled-components'; import { CSSProperties, RuleSet } from 'styled-components/dist/types'; @@ -11,7 +11,7 @@ import { import { hideEffect, showEffect } from './Effect'; export interface BoxProps { - as?: keyof ReactHTML; + as?: HTMLElementType; $align?: CSSProperties['alignItems']; $background?: CSSProperties['background']; $color?: CSSProperties['color']; diff --git a/src/frontend/apps/impress/src/components/Text.tsx b/src/frontend/apps/impress/src/components/Text.tsx index 89a52985..bc7dec46 100644 --- a/src/frontend/apps/impress/src/components/Text.tsx +++ b/src/frontend/apps/impress/src/components/Text.tsx @@ -1,9 +1,4 @@ -import { - CSSProperties, - ComponentPropsWithRef, - ReactHTML, - forwardRef, -} from 'react'; +import { CSSProperties, ComponentPropsWithRef, forwardRef } from 'react'; import styled from 'styled-components'; import { tokens } from '@/cunningham'; @@ -14,10 +9,7 @@ const { sizes } = tokens.themes.default.theme.font; type TextSizes = keyof typeof sizes; export interface TextProps extends BoxProps { - as?: keyof Pick< - ReactHTML, - 'p' | 'span' | 'div' | 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' - >; + as?: 'p' | 'span' | 'div' | 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6'; $elipsis?: boolean; $isMaterialIcon?: boolean; $weight?: CSSProperties['fontWeight']; diff --git a/src/frontend/apps/impress/src/features/docs/doc-editor/components/BlockNoteToolBar/BlockNoteToolbar.tsx b/src/frontend/apps/impress/src/features/docs/doc-editor/components/BlockNoteToolBar/BlockNoteToolbar.tsx index e8e5d4f2..4d9e340b 100644 --- a/src/frontend/apps/impress/src/features/docs/doc-editor/components/BlockNoteToolBar/BlockNoteToolbar.tsx +++ b/src/frontend/apps/impress/src/features/docs/doc-editor/components/BlockNoteToolBar/BlockNoteToolbar.tsx @@ -5,7 +5,7 @@ import { getFormattingToolbarItems, useDictionary, } from '@blocknote/react'; -import React, { useCallback, useMemo, useState } from 'react'; +import React, { JSX, useCallback, useMemo, useState } from 'react'; import { useTranslation } from 'react-i18next'; import { getQuoteFormattingToolbarItems } from '../custom-blocks'; @@ -27,7 +27,11 @@ export const BlockNoteToolbar = () => { getQuoteFormattingToolbarItems(t), ]); const fileDownloadButtonIndex = toolbarItems.findIndex( - (item) => item.key === 'fileDownloadButton', + (item) => + typeof item === 'object' && + item !== null && + 'key' in item && + (item as { key: string }).key === 'fileDownloadButton', ); if (fileDownloadButtonIndex !== -1) { toolbarItems.splice( @@ -43,7 +47,7 @@ export const BlockNoteToolbar = () => { ); } - return toolbarItems; + return toolbarItems as JSX.Element[]; }, [dict, t]); const formattingToolbar = useCallback(() => { 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 ca1ed005..51ef6350 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 @@ -66,7 +66,7 @@ const useSaveDoc = (docId: string, doc: Y.Doc, canSave: boolean) => { }); }, [doc, docId, updateDoc]); - const timeout = useRef(); + const timeout = useRef(null); const router = useRouter(); useEffect(() => { @@ -101,7 +101,10 @@ const useSaveDoc = (docId: string, doc: Y.Doc, canSave: boolean) => { router.events.on('routeChangeStart', onSave); return () => { - clearTimeout(timeout.current); + if (timeout.current) { + clearTimeout(timeout.current); + } + removeEventListener('beforeunload', onSave); router.events.off('routeChangeStart', onSave); }; diff --git a/src/frontend/package.json b/src/frontend/package.json index 794713ee..44efdba6 100644 --- a/src/frontend/package.json +++ b/src/frontend/package.json @@ -34,12 +34,13 @@ "@blocknote/xl-docx-exporter": "0.23.2-hotfix.0", "@blocknote/xl-pdf-exporter": "0.23.2-hotfix.0", "@types/node": "22.13.9", - "@types/react-dom": "18.3.1", + "@types/react": "19.0.0", + "@types/react-dom": "19.0.0", "@typescript-eslint/eslint-plugin": "8.26.0", "@typescript-eslint/parser": "8.26.0", "eslint": "8.57.0", - "react": "18.3.1", - "react-dom": "18.3.1", + "react": "19.0.0", + "react-dom": "19.0.0", "typescript": "5.8.2", "yjs": "13.6.23" } diff --git a/src/frontend/yarn.lock b/src/frontend/yarn.lock index b39f1b34..8c65d27e 100644 --- a/src/frontend/yarn.lock +++ b/src/frontend/yarn.lock @@ -5122,11 +5122,6 @@ pg-protocol "*" pg-types "^2.2.0" -"@types/prop-types@*": - version "15.7.14" - resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.14.tgz#1433419d73b2a7ebfc6918dcefd2ec0d5cd698f2" - integrity sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ== - "@types/qs@*": version "6.9.18" resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.18.tgz#877292caa91f7c1b213032b34626505b746624c2" @@ -5137,10 +5132,10 @@ resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.7.tgz#50ae4353eaaddc04044279812f52c8c65857dbcb" integrity sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ== -"@types/react-dom@*", "@types/react-dom@18.3.1": - version "18.3.1" - resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.3.1.tgz#1e4654c08a9cdcfb6594c780ac59b55aad42fe07" - integrity sha512-qW1Mfv8taImTthu4KoXgDfLuk4bydU6Q/TkADnDWWHwi4NX4BR+LWfTp2sVmTqRrsHvyDDTelgelxJ+SsejKKQ== +"@types/react-dom@*", "@types/react-dom@19.0.0": + version "19.0.0" + resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-19.0.0.tgz#e7f5d618a080486eaf9952246dbf59eaa2c64130" + integrity sha512-1KfiQKsH1o00p9m5ag12axHQSb3FOU9H20UTrujVSkNhuCrRHiQWFqgEnTNK5ZNfnzZv8UWrnXVqCmCF9fgY3w== dependencies: "@types/react" "*" @@ -5156,21 +5151,13 @@ resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.12.tgz#b5d76568485b02a307238270bfe96cb51ee2a044" integrity sha512-8TV6R3h2j7a91c+1DXdJi3Syo69zzIZbz7Lg5tORM5LEJG7X/E6a1V3drRyBRZq7/utz7A+c4OgYLiLcYGHG6w== -"@types/react@*": - version "19.0.8" - resolved "https://registry.yarnpkg.com/@types/react/-/react-19.0.8.tgz#7098e6159f2a61e4f4cef2c1223c044a9bec590e" - integrity sha512-9P/o1IGdfmQxrujGbIMDyYaaCykhLKc0NGCtYcECNUr9UAaDe4gwvV9bR6tvd5Br1SG0j+PBpbKr2UYY8CwqSw== +"@types/react@*", "@types/react@19.0.0": + version "19.0.0" + resolved "https://registry.yarnpkg.com/@types/react/-/react-19.0.0.tgz#fbbb53ce223f4e2b750ad5dd09580b2c43522bbf" + integrity sha512-MY3oPudxvMYyesqs/kW1Bh8y9VqSmf+tzqw3ae8a9DZW68pUe3zAdHeI1jc6iAysuRdACnVknHP8AhwD4/dxtg== dependencies: csstype "^3.0.2" -"@types/react@18.3.12": - version "18.3.12" - resolved "https://registry.yarnpkg.com/@types/react/-/react-18.3.12.tgz#99419f182ccd69151813b7ee24b792fe08774f60" - integrity sha512-D2wOSq/d6Agt28q7rSI3jhU7G6aiuzljDGZ2hTZHIkrTLUI+AF3WMeKkEZ9nN2fkBAlcktT6vcZjDFiIhMYEQw== - dependencies: - "@types/prop-types" "*" - csstype "^3.0.2" - "@types/resolve@1.20.2": version "1.20.2" resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-1.20.2.tgz#97d26e00cd4a0423b4af620abecf3e6f442b7975" @@ -9989,7 +9976,7 @@ longest-streak@^3.0.0: resolved "https://registry.yarnpkg.com/longest-streak/-/longest-streak-3.1.0.tgz#62fa67cd958742a1574af9f39866364102d90cd4" integrity sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g== -loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0: +loose-envify@^1.0.0, loose-envify@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== @@ -11870,13 +11857,12 @@ react-aria@^3.34.2, react-aria@^3.37.0: "@react-aria/visually-hidden" "^3.8.19" "@react-types/shared" "^3.27.0" -react-dom@*, react-dom@18.3.1: - version "18.3.1" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.3.1.tgz#c2265d79511b57d479b3dd3fdfa51536494c5cb4" - integrity sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw== +react-dom@*, react-dom@18.3.1, react-dom@19.0.0: + version "19.0.0" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-19.0.0.tgz#43446f1f01c65a4cd7f7588083e686a6726cfb57" + integrity sha512-4GV5sHFG0e/0AD4X+ySy6UJd3jVl1iNsNHdpad0qhABJ11twS3TTBnseqsKurKcsNqCEFeGL3uLpVChpIO3QfQ== dependencies: - loose-envify "^1.1.0" - scheduler "^0.23.2" + scheduler "^0.25.0" react-i18next@15.4.1: version "15.4.1" @@ -12057,12 +12043,10 @@ react-transition-group@^4.3.0: loose-envify "^1.4.0" prop-types "^15.6.2" -react@*, react@18.3.1: - version "18.3.1" - resolved "https://registry.yarnpkg.com/react/-/react-18.3.1.tgz#49ab892009c53933625bd16b2533fc754cab2891" - integrity sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ== - dependencies: - loose-envify "^1.1.0" +react@*, react@18.3.1, react@19.0.0: + version "19.0.0" + resolved "https://registry.yarnpkg.com/react/-/react-19.0.0.tgz#6e1969251b9f108870aa4bff37a0ce9ddfaaabdd" + integrity sha512-V8AVnmPIICiWpGfm6GLzCR/W5FXLchHop40W4nXBmdlEceh16rCN8O8LNWm5bh5XUX91fh7KpA+W0TgMKmgTpQ== readable-stream@^3.4.0: version "3.6.2" @@ -12514,12 +12498,10 @@ scheduler@0.25.0-rc-603e6108-20241029: resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.25.0-rc-603e6108-20241029.tgz#684dd96647e104d23e0d29a37f18937daf82df19" integrity sha512-pFwF6H1XrSdYYNLfOcGlM28/j8CGLu8IvdrxqhjWULe2bPcKiKW4CV+OWqR/9fT52mywx65l7ysNkjLKBda7eA== -scheduler@^0.23.2: - version "0.23.2" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.2.tgz#414ba64a3b282892e944cf2108ecc078d115cdc3" - integrity sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ== - dependencies: - loose-envify "^1.1.0" +scheduler@^0.25.0: + version "0.25.0" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.25.0.tgz#336cd9768e8cceebf52d3c80e3dcf5de23e7e015" + integrity sha512-xFVuu11jh+xcO7JOAGJNOXld8/TcEHK/4CituBUeUb5hqxJLj9YuemAEuvm9gQ/+pgXYfbQuqAkiYu+u7YEsNA== schema-utils@^4.3.0: version "4.3.0"