diff --git a/apps/webapp/jest.config.ts b/apps/webapp/jest.config.ts index 013340636e6..0411e42a3f3 100644 --- a/apps/webapp/jest.config.ts +++ b/apps/webapp/jest.config.ts @@ -62,7 +62,8 @@ const config: Config = { 'Repositories/(.*)': '/src/script/repositories/$1', 'Resource/(.*)': '/resource/$1', 'Util/(.*)': '/src/script/util/$1', - '^react(.*)$': '/../../node_modules/react$1', + '^react$': '/../../node_modules/react', + '^react/(.*)$': '/../../node_modules/react/$1', '.*\\.glsl': 'jest-transform-stub', }, coverageReporters: isContinuousIntegrationEnvironment ? ['html', 'lcov', 'text-summary'] : undefined, diff --git a/apps/webapp/package.json b/apps/webapp/package.json index 4a02ab0e526..88d57e581d6 100644 --- a/apps/webapp/package.json +++ b/apps/webapp/package.json @@ -87,8 +87,8 @@ "react-intl": "7.1.14", "react-pdf": "9.2.1", "react-redux": "9.3.0", - "react-router": "6.30.6", - "react-router-dom": "6.30.6", + "react-router": "7.18.0", + "react-router-dom": "7.18.0", "react-transition-group": "4.4.5", "redux": "5.0.1", "redux-logdown": "1.0.4", diff --git a/apps/webapp/src/script/auth/util/test/testUtil.tsx b/apps/webapp/src/script/auth/util/test/testUtil.tsx index 6b1c44bd9d8..adcf3dd43da 100644 --- a/apps/webapp/src/script/auth/util/test/testUtil.tsx +++ b/apps/webapp/src/script/auth/util/test/testUtil.tsx @@ -106,9 +106,9 @@ const withStore = ( store: MockStoreEnhanced, ThunkDispatch>, ) => {children}; -const withRouter = (component: React.ReactNode) => ( - {component} -); +function withRouter(component: React.ReactNode): React.ReactElement { + return {component}; +} const rootContextValue = createRootContextValueForTest({translate}); const rootProviderWrapper = createRootProviderWrapperForTest(rootContextValue); diff --git a/apps/webapp/src/types/reactRouter.d.ts b/apps/webapp/src/types/reactRouter.d.ts new file mode 100644 index 00000000000..21e7a033474 --- /dev/null +++ b/apps/webapp/src/types/reactRouter.d.ts @@ -0,0 +1,27 @@ +/* + * Wire + * Copyright (C) 2026 Wire Swiss GmbH + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see http://www.gnu.org/licenses/. + * + */ + +import type {NavigateOptions, To} from 'react-router'; + +declare module 'react-router' { + interface NavigateFunction { + (to: To, options?: NavigateOptions): void; + (delta: number): void; + } +} diff --git a/yarn.lock b/yarn.lock index 5434a8db635..d2b67a947fe 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8021,13 +8021,6 @@ __metadata: languageName: node linkType: hard -"@remix-run/router@npm:1.23.4": - version: 1.23.4 - resolution: "@remix-run/router@npm:1.23.4" - checksum: 10/1b7dd04465a542a8110ee398195ac4b9ac1de5521312f9953041874f0295bf64ff224a0ff88ff36a91c88004529667f566b95fdf94b35fc26b17b1f0d61f03d8 - languageName: node - linkType: hard - "@roamhq/wrtc-darwin-arm64@npm:0.10.0": version: 0.10.0 resolution: "@roamhq/wrtc-darwin-arm64@npm:0.10.0" @@ -12248,8 +12241,8 @@ __metadata: react-intl: "npm:7.1.14" react-pdf: "npm:9.2.1" react-redux: "npm:9.3.0" - react-router: "npm:6.30.6" - react-router-dom: "npm:6.30.6" + react-router: "npm:7.18.0" + react-router-dom: "npm:7.18.0" react-transition-group: "npm:4.4.5" redux: "npm:5.0.1" redux-logdown: "npm:1.0.4" @@ -14877,6 +14870,13 @@ __metadata: languageName: node linkType: hard +"cookie@npm:^1.0.1": + version: 1.1.1 + resolution: "cookie@npm:1.1.1" + checksum: 10/85538153054791155cf4d38d2e807e3b9382d71bf71d92fc46fca348515ea574049d0d9ef8eb84d2d54a681ad1d7a7316b1989b901dace50a6c0f4c3858dbdb2 + languageName: node + linkType: hard + "cookie@npm:~0.7.1, cookie@npm:~0.7.2": version: 0.7.2 resolution: "cookie@npm:0.7.2" @@ -27041,27 +27041,31 @@ __metadata: languageName: node linkType: hard -"react-router-dom@npm:6.30.6": - version: 6.30.6 - resolution: "react-router-dom@npm:6.30.6" +"react-router-dom@npm:7.18.0": + version: 7.18.0 + resolution: "react-router-dom@npm:7.18.0" dependencies: - "@remix-run/router": "npm:1.23.4" - react-router: "npm:6.30.6" + react-router: "npm:7.18.0" peerDependencies: - react: ">=16.8" - react-dom: ">=16.8" - checksum: 10/6e501c45fd85894b197a84437c12cd0ab6d9c14277af41a7546f965ee0a0861aff1da5d72d56020a1ac2d4d4b1c4ec848a16554372004fdef5cdb1bce75a155e + react: ">=18" + react-dom: ">=18" + checksum: 10/7725f261e308d2a8131c3857db828820e0f0db3e64ae86b84c8fdf309e112f4373ca5625a66a68105fd16f2159f558563440fd82487fa3818988a69956c851bf languageName: node linkType: hard -"react-router@npm:6.30.6": - version: 6.30.6 - resolution: "react-router@npm:6.30.6" +"react-router@npm:7.18.0": + version: 7.18.0 + resolution: "react-router@npm:7.18.0" dependencies: - "@remix-run/router": "npm:1.23.4" + cookie: "npm:^1.0.1" + set-cookie-parser: "npm:^2.6.0" peerDependencies: - react: ">=16.8" - checksum: 10/df751de74dc460abc9023aecfd09284170939e8ad8892373ec0015aa04187e0b9c66fffcb546bfb0f1ca5c9edb14b67c93a46306a61efcf15a7dc20eca1e16b7 + react: ">=18" + react-dom: ">=18" + peerDependenciesMeta: + react-dom: + optional: true + checksum: 10/a69b5502a3549de56adce7ba87ae02ac5b052da49eae261124824dd963d047218795706c780e019f366961a7a1e073417a96b295b743f6f57d2a30c68fd78d61 languageName: node linkType: hard @@ -28592,6 +28596,13 @@ __metadata: languageName: node linkType: hard +"set-cookie-parser@npm:^2.6.0": + version: 2.7.2 + resolution: "set-cookie-parser@npm:2.7.2" + checksum: 10/4b6f5ec4e3fa1aef471d9207117704d217ba6bb6443400b41f5ea945c4a7f6fc08e405a122c1a32b4ebde41f06dea75e02c2af87cee9abb27f3e3fe911e5839b + languageName: node + linkType: hard + "set-function-length@npm:^1.2.2": version: 1.2.2 resolution: "set-function-length@npm:1.2.2"