diff --git a/site/package.json b/site/package.json
index 533188a77..838746a5d 100644
--- a/site/package.json
+++ b/site/package.json
@@ -97,6 +97,7 @@
"react-redux": "^7.2.8",
"react-router": "^5.2.1",
"react-router-dom": "^5.3.0",
+ "react-router-dom-v5-compat": "^6.3.0",
"react-signature-pad-wrapper": "^1.2.11",
"react-spring": "^9.3.1",
"react-use-measure": "^2.0.4",
@@ -121,6 +122,7 @@
"@storybook/builder-vite": "^0.1.23",
"@storybook/react": "^6.5.0-alpha.49",
"@storybook/testing-library": "^0.0.9",
+ "@types/history": "^5.0.0",
"@types/react": "^17.0.0",
"@types/react-color": "^3.0.1",
"@types/react-dom": "^17.0.9",
diff --git a/site/source/App.tsx b/site/source/App.tsx
index e17affea5..01f644a3f 100644
--- a/site/source/App.tsx
+++ b/site/source/App.tsx
@@ -21,6 +21,7 @@ import { Helmet } from 'react-helmet-async'
import { useTranslation } from 'react-i18next'
import { useSelector } from 'react-redux'
import { Redirect, Route, Switch } from 'react-router-dom'
+import { CompatRoute } from 'react-router-dom-v5-compat'
import styled, { css } from 'styled-components'
import Accessibilité from './pages/Accessibilité'
import Budget from './pages/Budget/Budget'
diff --git a/site/source/Provider.tsx b/site/source/Provider.tsx
index 7698e6a60..163e7b92b 100644
--- a/site/source/Provider.tsx
+++ b/site/source/Provider.tsx
@@ -1,5 +1,3 @@
-import { OverlayProvider } from '@react-aria/overlays'
-import { ErrorBoundary } from '@sentry/react'
import { ThemeColorsProvider } from '@/components/utils/colors'
import { DisableAnimationOnPrintProvider } from '@/components/utils/DisableAnimationContext'
import { IsEmbeddedProvider } from '@/components/utils/embeddedContext'
@@ -13,18 +11,20 @@ import DesignSystemThemeProvider from '@/design-system/root'
import { H1 } from '@/design-system/typography/heading'
import { Link } from '@/design-system/typography/link'
import { Body, Intro } from '@/design-system/typography/paragraphs'
-import { createBrowserHistory } from 'history'
-import i18next from 'i18next'
-import logo from '@/images/logo-monentreprise.svg'
import { useIframeResizer } from '@/hooks/useIframeResizer'
-import { createContext, ReactNode, useMemo } from 'react'
+import logo from '@/images/logo-monentreprise.svg'
+import { OverlayProvider } from '@react-aria/overlays'
+import { ErrorBoundary } from '@sentry/react'
+import i18next from 'i18next'
+import { createContext, ReactNode } from 'react'
import { HelmetProvider } from 'react-helmet-async'
import { I18nextProvider } from 'react-i18next'
import { Provider as ReduxProvider } from 'react-redux'
-import { Router } from 'react-router-dom'
-import { inIframe } from './utils'
-import { store } from './store'
+import { BrowserRouter } from 'react-router-dom'
+import { CompatRouter } from 'react-router-dom-v5-compat'
import * as safeLocalStorage from './storage/safeLocalStorage'
+import { store } from './store'
+import { inIframe } from './utils'
// ATInternet Tracking
import { TrackingContext } from './ATInternetTracking'
@@ -135,14 +135,6 @@ function BrowserRouterProvider({
if (import.meta.env.SSR) {
return <>{children}>
}
- // eslint-disable-next-line react-hooks/rules-of-hooks
- const history = useMemo(
- () =>
- createBrowserHistory({
- basename: import.meta.env.MODE === 'production' ? '' : basename,
- }),
- [basename]
- )
const ATTracker = createTracker(
import.meta.env.VITE_AT_INTERNET_SITE_ID,
@@ -159,9 +151,11 @@ function BrowserRouterProvider({
})
}
>
-
- <>{children}>
-
+
+ {children}
+
)
diff --git a/site/source/actions/companyStatusActions.ts b/site/source/actions/companyStatusActions.ts
index 2240b3d55..e13ba4a6f 100644
--- a/site/source/actions/companyStatusActions.ts
+++ b/site/source/actions/companyStatusActions.ts
@@ -2,7 +2,7 @@ import { useNextQuestionUrl } from '@/selectors/companyStatusSelectors'
import { LegalStatusRequirements } from '@/types/companyTypes'
import { useEffect, useState } from 'react'
import { useDispatch } from 'react-redux'
-import { useHistory } from 'react-router'
+import { useNavigate } from 'react-router-dom-v5-compat'
import { Action } from './actions'
export type CompanyStatusAction = ReturnType<
@@ -17,12 +17,12 @@ export type CompanyStatusAction = ReturnType<
// This feels hacky, we should express this "dispatch and navigate" in another way
export const useDispatchAndGoToNextQuestion = () => {
const dispatch = useDispatch()
- const history = useHistory()
+ const navigate = useNavigate()
const nextQuestion = useNextQuestionUrl()
const [dispatched, setDispatched] = useState(false)
useEffect(() => {
if (dispatched) {
- history.push(nextQuestion)
+ navigate(nextQuestion)
}
}, [dispatched])
diff --git a/site/source/components/Feedback/FeedbackForm.tsx b/site/source/components/Feedback/FeedbackForm.tsx
index 729909182..00f257ff0 100644
--- a/site/source/components/Feedback/FeedbackForm.tsx
+++ b/site/source/components/Feedback/FeedbackForm.tsx
@@ -1,7 +1,7 @@
import { ScrollToElement } from '@/components/utils/Scroll'
import { useEffect } from 'react'
import { useTranslation } from 'react-i18next'
-import { useLocation } from 'react-router'
+import { useLocation } from 'react-router-dom-v5-compat'
import styled from 'styled-components'
declare global {
diff --git a/site/source/components/MoreInfosOnUs.tsx b/site/source/components/MoreInfosOnUs.tsx
index 7c22cdefd..bc88c30d2 100644
--- a/site/source/components/MoreInfosOnUs.tsx
+++ b/site/source/components/MoreInfosOnUs.tsx
@@ -3,7 +3,7 @@ import { SmallCard } from '@/design-system/card'
import { H2 } from '@/design-system/typography/heading'
import { useContext } from 'react'
import { useTranslation } from 'react-i18next'
-import { useLocation } from 'react-router-dom'
+import { useLocation } from 'react-router-dom-v5-compat'
import { icons } from './ui/SocialIcon'
import Emoji from './utils/Emoji'
import { SitePathsContext } from './utils/SitePathsContext'
diff --git a/site/source/components/PageData.tsx b/site/source/components/PageData.tsx
index dbbc26d16..3e6a31969 100644
--- a/site/source/components/PageData.tsx
+++ b/site/source/components/PageData.tsx
@@ -1,16 +1,13 @@
import { useIsEmbedded } from '@/components/utils/embeddedContext'
import Meta from '@/components/utils/Meta'
-import { SitePathsContext } from '@/components/utils/SitePathsContext'
import useSearchParamsSimulationSharing from '@/components/utils/useSearchParamsSimulationSharing'
import useSimulationConfig from '@/components/utils/useSimulationConfig'
import { Spacing } from '@/design-system/layout'
import { H1 } from '@/design-system/typography/heading'
import { Intro } from '@/design-system/typography/paragraphs'
import { situationSelector } from '@/selectors/simulationSelectors'
-import { ComponentPropsWithoutRef, useContext } from 'react'
-import { useTranslation } from 'react-i18next'
+import { ComponentPropsWithoutRef } from 'react'
import { useSelector } from 'react-redux'
-import { useLocation } from 'react-router-dom'
import { TrackChapter } from '../ATInternetTracking'
import {
CurrentSimulatorDataProvider,
diff --git a/site/source/components/utils/Meta.tsx b/site/source/components/utils/Meta.tsx
index 39f27fe19..7ecb91b8a 100644
--- a/site/source/components/utils/Meta.tsx
+++ b/site/source/components/utils/Meta.tsx
@@ -1,6 +1,6 @@
import { Helmet } from 'react-helmet-async'
import { useTranslation } from 'react-i18next'
-import { useLocation } from 'react-router'
+import { useLocation } from 'react-router-dom-v5-compat'
type PropType = {
page: string
diff --git a/site/source/components/utils/markdown.tsx b/site/source/components/utils/markdown.tsx
index b67a53fa1..6d52526af 100644
--- a/site/source/components/utils/markdown.tsx
+++ b/site/source/components/utils/markdown.tsx
@@ -5,7 +5,7 @@ import { Li, Ol, Ul } from '@/design-system/typography/list'
import { Body } from '@/design-system/typography/paragraphs'
import MarkdownToJsx, { MarkdownToJSX } from 'markdown-to-jsx'
import React, { useContext, useEffect } from 'react'
-import { useLocation } from 'react-router-dom'
+import { useLocation } from 'react-router-dom-v5-compat'
import { isIterable } from '../../utils'
import { SiteNameContext } from '../../Provider'
import Emoji from './Emoji'
diff --git a/site/source/components/utils/useSearchParams.ts b/site/source/components/utils/useSearchParams.ts
deleted file mode 100644
index 70c09f676..000000000
--- a/site/source/components/utils/useSearchParams.ts
+++ /dev/null
@@ -1,66 +0,0 @@
-// backported from react-router 6
-// https://github.com/ReactTraining/react-router/blob/a97dbdb7297474ff0114411e363db2c8fb417e55/packages/react-router-dom/index.tsx#L383
-
-import { useCallback, useMemo, useRef } from 'react'
-import { useLocation, useHistory } from 'react-router-dom'
-
-export type ParamKeyValuePair = [string, string]
-export type URLSearchParamsInit =
- | string
- | ParamKeyValuePair[]
- | Record
- | URLSearchParams
-
-export function useSearchParams(defaultInit?: URLSearchParamsInit) {
- const defaultSearchParamsRef = useRef(createSearchParams(defaultInit))
-
- const location = useLocation()
- const searchParams = useMemo(() => {
- const searchParams = createSearchParams(location.search)
-
- for (const key of defaultSearchParamsRef.current.keys()) {
- if (!searchParams.has(key)) {
- defaultSearchParamsRef.current.getAll(key).forEach((value) => {
- searchParams.append(key, value)
- })
- }
- }
-
- return searchParams
- }, [location.search])
-
- const history = useHistory()
- const setSearchParams = useCallback(
- (
- nextInit: URLSearchParamsInit,
- navigateOptions?: { replace?: boolean }
- ) => {
- if (navigateOptions?.replace) {
- history.replace('?' + createSearchParams(nextInit).toString())
- } else {
- history.push('?' + createSearchParams(nextInit).toString())
- }
- },
- [history]
- )
-
- return [searchParams, setSearchParams] as const
-}
-
-export function createSearchParams(
- init: URLSearchParamsInit = ''
-): URLSearchParams {
- return new URLSearchParams(
- typeof init === 'string' ||
- Array.isArray(init) ||
- init instanceof URLSearchParams
- ? init
- : Object.keys(init).reduce((memo, key) => {
- const value = init[key]
-
- return memo.concat(
- Array.isArray(value) ? value.map((v) => [key, v]) : [[key, value]]
- )
- }, [] as ParamKeyValuePair[])
- )
-}
diff --git a/site/source/components/utils/useSearchParamsSimulationSharing.ts b/site/source/components/utils/useSearchParamsSimulationSharing.ts
index 31b449240..8bf8c6f38 100644
--- a/site/source/components/utils/useSearchParamsSimulationSharing.ts
+++ b/site/source/components/utils/useSearchParamsSimulationSharing.ts
@@ -1,8 +1,7 @@
import { useEffect, useMemo, useState } from 'react'
import { useSelector, useDispatch } from 'react-redux'
import { RootState, SimulationConfig, Situation } from '@/reducers/rootReducer'
-import { useHistory } from 'react-router'
-import { useSearchParams } from '@/components/utils/useSearchParams'
+import { useLocation, useSearchParams } from 'react-router-dom-v5-compat'
import { useEngine } from '@/components/utils/EngineContext'
import { configSelector } from '@/selectors/simulationSelectors'
import Engine, { ParsedRules, serializeEvaluation } from 'publicodes'
@@ -18,7 +17,7 @@ export default function useSearchParamsSimulationSharing() {
const [searchParams, setSearchParams] = useSearchParams()
const config = useSelector(configSelector)
const simulationUrl = useSelector((state: RootState) => state.simulation?.url)
- const currentUrl = useHistory().location.pathname
+ const currentUrl = useLocation().pathname
const dispatch = useDispatch()
const engine = useEngine()
diff --git a/site/source/entry-server.tsx b/site/source/entry-server.tsx
index 343fba9be..2499c3cfb 100644
--- a/site/source/entry-server.tsx
+++ b/site/source/entry-server.tsx
@@ -6,6 +6,7 @@ import { AppFr } from './entry-fr'
import { AppEn } from './entry-en'
import { ServerStyleSheet, StyleSheetManager } from 'styled-components'
import { FilledContext, HelmetProvider } from 'react-helmet-async'
+import { CompatRouter } from 'react-router-dom-v5-compat'
export function render(url: string, lang: 'fr' | 'en') {
const sheet = new ServerStyleSheet()
@@ -21,7 +22,9 @@ export function render(url: string, lang: 'fr' | 'en') {
-
+
+
+
diff --git a/site/source/pages/Documentation.tsx b/site/source/pages/Documentation.tsx
index 41d544c97..47663c160 100644
--- a/site/source/pages/Documentation.tsx
+++ b/site/source/pages/Documentation.tsx
@@ -20,7 +20,7 @@ import { ComponentType, useContext, useMemo } from 'react'
import { Helmet } from 'react-helmet-async'
import { Trans, useTranslation } from 'react-i18next'
import { useSelector } from 'react-redux'
-import { Redirect, Route, useLocation } from 'react-router-dom'
+import { Redirect, Route, useLocation, useParams } from 'react-router-dom'
import styled from 'styled-components'
import { TrackPage } from '../ATInternetTracking'
import RuleLink from '../components/RuleLink'
@@ -33,7 +33,6 @@ export default function MonEntrepriseRulePage() {
() => getDocumentationSiteMap({ engine, documentationPath }),
[engine, documentationPath]
)
- const { i18n } = useTranslation()
if (pathname === '/documentation') {
return
@@ -57,34 +56,40 @@ export default function MonEntrepriseRulePage() {
-
- match.params.name && (
-
- ,
- Text: Markdown,
- References,
- }}
- />
-
- )
- }
- />
+
+
+
)
}
+function DocumentationPageBody() {
+ const engine = useEngine()
+ const documentationPath = useContext(SitePathsContext).documentation.index
+ const { i18n } = useTranslation()
+ const params = useParams<{ name: string }>()
+
+ return (
+
+ ,
+ Text: Markdown,
+ References,
+ }}
+ />
+
+ )
+}
+
function BackToSimulation() {
const url = useSelector((state: RootState) => state.simulation?.url)
if (!url) {
diff --git a/site/source/pages/Landing/SearchOrCreate.tsx b/site/source/pages/Landing/SearchOrCreate.tsx
index 9061f98d4..35b37f76a 100644
--- a/site/source/pages/Landing/SearchOrCreate.tsx
+++ b/site/source/pages/Landing/SearchOrCreate.tsx
@@ -19,7 +19,7 @@ import { Grid } from '@mui/material'
import { useCallback, useContext, useEffect } from 'react'
import { Trans } from 'react-i18next'
import { useDispatch, useSelector } from 'react-redux'
-import { generatePath, useHistory } from 'react-router-dom'
+import { generatePath, useNavigate } from 'react-router-dom-v5-compat'
export default function SearchOrCreate() {
const sitePaths = useContext(SitePathsContext)
@@ -81,7 +81,7 @@ export default function SearchOrCreate() {
}
function useHandleCompanySubmit() {
- const history = useHistory()
+ const navigate = useNavigate()
const sitePaths = useContext(SitePathsContext)
const setEntreprise = useSetEntreprise()
@@ -93,9 +93,9 @@ function useHandleCompanySubmit() {
setEntreprise(établissement)
const entreprise = établissement.siren
const path = generatePath(sitePaths.gérer.entreprise, { entreprise })
- history.push(path)
+ navigate(path)
},
- [history, setEntreprise, sitePaths.gérer.entreprise]
+ [navigate, setEntreprise, sitePaths.gérer.entreprise]
)
return handleCompanySubmit
diff --git a/site/source/pages/Nouveautes/Nouveautes.tsx b/site/source/pages/Nouveautes/Nouveautes.tsx
index 7dd05dd9c..f41485099 100644
--- a/site/source/pages/Nouveautes/Nouveautes.tsx
+++ b/site/source/pages/Nouveautes/Nouveautes.tsx
@@ -12,7 +12,7 @@ import { H1 } from '@/design-system/typography/heading'
import { GenericButtonOrLinkProps, Link } from '@/design-system/typography/link'
import { Body } from '@/design-system/typography/paragraphs'
import { useContext, useEffect, useMemo, useState } from 'react'
-import { Redirect, useHistory, useRouteMatch } from 'react-router-dom'
+import { Navigate, useMatch, useNavigate } from 'react-router-dom-v5-compat'
import styled from 'styled-components'
import { TrackPage } from '../../ATInternetTracking'
@@ -37,10 +37,9 @@ export default function Nouveautés() {
console.error(err)
)
}, [])
- const history = useHistory()
+ const navigate = useNavigate()
const sitePaths = useContext(SitePathsContext)
- const slug = useRouteMatch<{ slug: string }>(`${sitePaths.nouveautés}/:slug`)
- ?.params?.slug
+ const slug = useMatch(`${sitePaths.nouveautés}/:slug`)?.params?.slug
useEffect(hideNewsBanner, [])
const releasesWithId = useMemo(
@@ -58,7 +57,7 @@ export default function Nouveautés() {
`${sitePaths.nouveautés}/${slugify(data[index].name)}`
if (!slug || selectedRelease === -1) {
- return
+ return
}
const releaseName = data[selectedRelease].name.toLowerCase()
@@ -96,7 +95,7 @@ export default function Nouveautés() {
value={selectedRelease}
items={releasesWithId}
onSelectionChange={(id) => {
- history.push(getPath(Number(id)))
+ navigate(getPath(Number(id)))
}}
>
{(release) => (
diff --git a/site/source/pages/Simulateurs/index.tsx b/site/source/pages/Simulateurs/index.tsx
index 3720b7226..10af1754f 100644
--- a/site/source/pages/Simulateurs/index.tsx
+++ b/site/source/pages/Simulateurs/index.tsx
@@ -5,7 +5,7 @@ import { SitePathsContext } from '@/components/utils/SitePathsContext'
import { Link } from '@/design-system/typography/link'
import { useContext, useEffect, useMemo } from 'react'
import { Trans } from 'react-i18next'
-import { Route, Switch, useLocation } from 'react-router-dom'
+import { Route, Routes, useLocation } from 'react-router-dom-v5-compat'
import Home from './Home'
import useSimulatorsData from './metadata'
import SimulateurPage from '../../components/PageData'
@@ -33,7 +33,7 @@ export default function Simulateurs() {
}
+ element={}
/>
)),
[simulatorsData, sitePaths]
@@ -59,10 +59,10 @@ export default function Simulateurs() {
)
) : null)}
-
-
+
+ } />
{simulatorRoutes}
-
+
>
)
}
diff --git a/site/source/pages/Stats/Stats.tsx b/site/source/pages/Stats/Stats.tsx
index fe5d417af..b7a046746 100644
--- a/site/source/pages/Stats/Stats.tsx
+++ b/site/source/pages/Stats/Stats.tsx
@@ -10,7 +10,6 @@ import { H2, H3 } from '@/design-system/typography/heading'
import { formatValue } from 'publicodes'
import { useCallback, useEffect, useMemo, useState } from 'react'
import { Trans } from 'react-i18next'
-import { useHistory, useLocation } from 'react-router-dom'
import { toAtString } from '../../ATInternetTracking'
import statsJson from '@/data/stats.json'
import { debounce, groupBy } from '../../utils'
@@ -22,6 +21,7 @@ import GlobalStats, { BigIndicator } from './GlobalStats'
import SatisfactionChart from './SatisfactionChart'
import { Page, PageChapter2, PageSatisfaction, StatsStruct } from './types'
import { formatDay, formatMonth } from './utils'
+import { useSearchParams } from 'react-router-dom-v5-compat'
const stats = statsJson as unknown as StatsStruct
@@ -117,30 +117,23 @@ interface BrushStartEndIndex {
const StatsDetail = () => {
const defaultPeriod = 'mois'
- const history = useHistory()
- const location = useLocation()
+ const [searchParams, setSearchParams] = useSearchParams()
useScrollToHash()
- const urlParams = new URLSearchParams(location.search ?? '')
const [period, setPeriod] = useState(
- (urlParams.get('periode') as Period) ?? defaultPeriod
+ (searchParams.get('periode') as Period) ?? defaultPeriod
)
const [chapter2, setChapter2] = useState(
- (urlParams.get('module') as Chapter2) ?? ''
+ (searchParams.get('module') as Chapter2) ?? ''
)
- // The logic to persist some state in query parameters in the URL could be
- // abstracted in a dedicated React hook.
useEffect(() => {
- const queryParams = [
- period !== defaultPeriod && `periode=${period}`,
- chapter2 && `module=${chapter2}`,
- ].filter(Boolean)
- history.replace({
- search: `?${queryParams.join('&')}`,
- hash: location.hash,
- })
- }, [period, chapter2])
+ const paramsEntries = [
+ ['periode', period !== defaultPeriod ? period : ''],
+ ['module', chapter2],
+ ] as [string, string][]
+ setSearchParams(paramsEntries.filter(([, val]) => val !== ''))
+ }, [period, chapter2, setSearchParams])
const visites = useMemo(() => {
const rawData = period === 'jours' ? stats.visitesJours : stats.visitesMois
diff --git a/site/source/pages/integration/Iframe.tsx b/site/source/pages/integration/Iframe.tsx
index f9963c3d9..c70809efb 100644
--- a/site/source/pages/integration/Iframe.tsx
+++ b/site/source/pages/integration/Iframe.tsx
@@ -15,7 +15,7 @@ import { Grid } from '@mui/material'
import { lazy, Suspense, useContext, useEffect, useRef, useState } from 'react'
import { Trans, useTranslation } from 'react-i18next'
import { Route } from 'react-router'
-import { MemoryRouter, useHistory, useLocation } from 'react-router-dom'
+import { MemoryRouter } from 'react-router-dom'
import styled from 'styled-components'
import { TrackingContext, TrackPage } from '../../ATInternetTracking'
import { hexToHSL } from '../../hexToHSL'
@@ -29,6 +29,7 @@ import './iframe.css'
import cciLogo from './images/cci.png'
import minTraLogo from './images/min-tra.jpg'
import poleEmploiLogo from './images/pole-emploi.png'
+import { useSearchParams } from 'react-router-dom-v5-compat'
const LazyColorPicker = lazy(() => import('../Dev/ColorPicker'))
@@ -46,13 +47,11 @@ const getFromSimu = (
: undefined
function IntegrationCustomizer() {
- const { search } = useLocation()
const simulatorsData = useSimulatorsData()
const sitePaths = useContext(SitePathsContext)
- const history = useHistory()
+ const [searchParams, setSearchParams] = useSearchParams()
- const defaultModuleFromUrl =
- new URLSearchParams(search ?? '').get('module') ?? ''
+ const defaultModuleFromUrl = searchParams.get('module') ?? ''
const [currentModule, setCurrentModule] = useState(
getFromSimu(simulatorsData, defaultModuleFromUrl)
@@ -61,8 +60,8 @@ function IntegrationCustomizer() {
)
useEffect(() => {
- history.replace({ search: `?module=${currentModule}` })
- }, [currentModule, history])
+ setSearchParams({ module: currentModule }, { replace: true })
+ }, [currentModule, setSearchParams])
const [color, setColor] = useState()
diff --git a/site/source/pages/integration/index.tsx b/site/source/pages/integration/index.tsx
index 77e2e7088..1be6dc85d 100644
--- a/site/source/pages/integration/index.tsx
+++ b/site/source/pages/integration/index.tsx
@@ -6,7 +6,7 @@ import { Banner, InnerBanner } from '@/design-system/banner'
import { Link } from '@/design-system/typography/link'
import { useContext } from 'react'
import { Trans } from 'react-i18next'
-import { Route, Switch, useLocation } from 'react-router-dom'
+import { Routes, Route, useLocation } from 'react-router-dom-v5-compat'
import { TrackChapter } from '../../ATInternetTracking'
import API from './API'
import Iframe from './Iframe'
@@ -50,16 +50,16 @@ export default function Integration() {
)}
-
-
-
-
-
+
+ } />
+ } />
+ } />
+ } />
}
/>
-
+
)
}
diff --git a/yarn.lock b/yarn.lock
index c137836ca..a4e393515 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -6361,6 +6361,15 @@ __metadata:
languageName: node
linkType: hard
+"@types/history@npm:^5.0.0":
+ version: 5.0.0
+ resolution: "@types/history@npm:5.0.0"
+ dependencies:
+ history: "*"
+ checksum: 53d35a7b3b7425dd1bac33ea024e3446eb9b8b1a390fef9bedb9428a6cfe84d9716d69c74364068dfca082abbbc5d5d126c5472ee5507150c4f55127422b5462
+ languageName: node
+ linkType: hard
+
"@types/hoist-non-react-statics@npm:*, @types/hoist-non-react-statics@npm:^3.3.0":
version: 3.3.1
resolution: "@types/hoist-non-react-statics@npm:3.3.1"
@@ -13803,6 +13812,15 @@ __metadata:
languageName: node
linkType: hard
+"history@npm:*, history@npm:^5.2.0, history@npm:^5.3.0":
+ version: 5.3.0
+ resolution: "history@npm:5.3.0"
+ dependencies:
+ "@babel/runtime": ^7.7.6
+ checksum: d73c35df49d19ac172f9547d30a21a26793e83f16a78386d99583b5bf1429cc980799fcf1827eb215d31816a6600684fba9686ce78104e23bd89ec239e7c726f
+ languageName: node
+ linkType: hard
+
"history@npm:5.0.0":
version: 5.0.0
resolution: "history@npm:5.0.0"
@@ -13826,15 +13844,6 @@ __metadata:
languageName: node
linkType: hard
-"history@npm:^5.2.0":
- version: 5.3.0
- resolution: "history@npm:5.3.0"
- dependencies:
- "@babel/runtime": ^7.7.6
- checksum: d73c35df49d19ac172f9547d30a21a26793e83f16a78386d99583b5bf1429cc980799fcf1827eb215d31816a6600684fba9686ce78104e23bd89ec239e7c726f
- languageName: node
- linkType: hard
-
"hmac-drbg@npm:^1.0.1":
version: 1.0.1
resolution: "hmac-drbg@npm:1.0.1"
@@ -18928,6 +18937,20 @@ __metadata:
languageName: node
linkType: hard
+"react-router-dom-v5-compat@npm:^6.3.0":
+ version: 6.3.0
+ resolution: "react-router-dom-v5-compat@npm:6.3.0"
+ dependencies:
+ history: ^5.3.0
+ react-router: 6.3.0
+ peerDependencies:
+ react: ">=16.8"
+ react-dom: ">=16.8"
+ react-router-dom: 4 || 5
+ checksum: ee82b48078bac91cea3b8c499954cbf13f9261daef87e5032695946652b594b2f0590d279448ac59dd26a1c0d208a7c53d3aef2e97dcd0335f4af82df228f197
+ languageName: node
+ linkType: hard
+
"react-router-dom@npm:^5.3.0":
version: 5.3.0
resolution: "react-router-dom@npm:5.3.0"
@@ -20356,6 +20379,7 @@ __metadata:
"@storybook/builder-vite": ^0.1.23
"@storybook/react": ^6.5.0-alpha.49
"@storybook/testing-library": ^0.0.9
+ "@types/history": ^5.0.0
"@types/react": ^17.0.0
"@types/react-color": ^3.0.1
"@types/react-dom": ^17.0.9
@@ -20393,6 +20417,7 @@ __metadata:
react-redux: ^7.2.8
react-router: ^5.2.1
react-router-dom: ^5.3.0
+ react-router-dom-v5-compat: ^6.3.0
react-signature-pad-wrapper: ^1.2.11
react-spring: ^9.3.1
react-use-measure: ^2.0.4