diff --git a/example/src/App.jsx b/example/src/App.jsx index 3fb6fc0..c8381eb 100644 --- a/example/src/App.jsx +++ b/example/src/App.jsx @@ -5,7 +5,7 @@ import UseQueryParamCode from '!!raw-loader!./UseQueryParam' import UseRouteParamCode from '!!raw-loader!./UseRouteParam' import { Box, Card, CardContent, CardMedia, Typography } from '@material-ui/core' import React from 'react' -import { BrowserRouter, Route, Switch } from 'react-router-dom' +import { BrowserRouter, Route, Routes } from 'react-router-dom' import SyntaxHighlighter from 'react-syntax-highlighter' import CreateLinkWithState from './CreateLinkWithState' import UseArrayQueryKey from './UseArrayQueryKey' @@ -64,9 +64,11 @@ const App = () => { return ( - - - + + + + + ) } diff --git a/example/src/UseQueryParam.jsx b/example/src/UseQueryParam.jsx index cdc2698..da8f1fd 100644 --- a/example/src/UseQueryParam.jsx +++ b/example/src/UseQueryParam.jsx @@ -1,17 +1,17 @@ -import { Box, TextField, Typography } from '@material-ui/core' +import { Box, TextField } from '@material-ui/core' import React from 'react' import { useQueryString } from 'use-route-as-state' import SearchList from './SearchList' const UseQueryParam = () => { - const [params, updateParams] = useQueryString() + const [params, updateParams] = useQueryString({ qParam: '' }) const onChange = (e) => updateParams({ [e.target.id]: e.target.value }) return - + } diff --git a/example/src/UseRouteParam.jsx b/example/src/UseRouteParam.jsx index 70ad5f9..8da535a 100644 --- a/example/src/UseRouteParam.jsx +++ b/example/src/UseRouteParam.jsx @@ -1,10 +1,10 @@ import { Box, TextField, Typography } from '@material-ui/core' import React from 'react' -import { Route, Switch, useRouteMatch } from 'react-router-dom' +import { Route, Routes, useRouteMatch } from 'react-router-dom' import { useRouteParams } from 'use-route-as-state' const UseRouteParam = () => { - const [params, updateParams] = useRouteParams() + const [params, updateParams] = useRouteParams({ rParam: '' }) const onChange = (e) => updateParams(e.target.value && { [e.target.id]: e.target.value }) @@ -18,7 +18,9 @@ const UseRouteParam = () => { export default () => { const { path } = useRouteMatch() - return - - + return + + + + } diff --git a/example/yarn.lock b/example/yarn.lock index 40d8dcb..04648a0 100644 --- a/example/yarn.lock +++ b/example/yarn.lock @@ -1172,6 +1172,13 @@ dependencies: regenerator-runtime "^0.13.4" +"@babel/runtime@^7.7.6": + version "7.17.9" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.17.9.tgz#d19fbf802d01a8cb6cf053a64e472d42c434ba72" + integrity sha512-lSiBBvodq29uShpWGNbgFdKYNiFDo5/HIYsaCEY9ff4sb10x9jizo2+pRrSyF4jKZCXqgzuqBOQKbUm90gQwJg== + dependencies: + regenerator-runtime "^0.13.4" + "@babel/template@^7.10.4", "@babel/template@^7.16.0", "@babel/template@^7.3.3": version "7.16.0" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.16.0.tgz#d16a35ebf4cd74e202083356fab21dd89363ddd6" @@ -5563,6 +5570,13 @@ highlight.js@^10.1.1, highlight.js@~10.7.0: resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-10.7.3.tgz#697272e3991356e40c3cac566a74eef681756531" integrity sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A== +history@^5.2.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/history/-/history-5.3.0.tgz#1548abaa245ba47992f063a0783db91ef201c73b" + integrity sha512-ZqaKwjjrAYUYfLG+htGaIIZ4nioX2L70ZUMIFysS3xvBsSG4x/n1V6TXV3N8ZYNuFGlDirFg32T7B6WOUPDYcQ== + dependencies: + "@babel/runtime" "^7.7.6" + hmac-drbg@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" @@ -9318,6 +9332,14 @@ react-refresh@^0.8.3: "react-router-dom@link:../node_modules/react-router-dom": version "0.0.0" + uid "" + +react-router@6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/react-router/-/react-router-6.3.0.tgz#3970cc64b4cb4eae0c1ea5203a80334fdd175557" + integrity sha512-7Wh1DzVQ+tlFjkeo+ujvjSqSJmkt1+8JO+T5xklPlgrh70y7ogx75ODRW0ThWhY7S+6yEDks8TYrtQe/aoboBQ== + dependencies: + history "^5.2.0" react-scripts@^4.0.1: version "4.0.3" @@ -9408,6 +9430,7 @@ react-transition-group@^4.4.0: "react@link:../node_modules/react": version "0.0.0" + uid "" read-pkg-up@^7.0.1: version "7.0.1" @@ -11069,7 +11092,8 @@ url@^0.11.0: querystring "0.2.0" "use-route-as-state@link:..": - version "0.0.0-development" + version "0.0.0" + uid "" use@^3.1.0: version "3.1.1" diff --git a/package.json b/package.json index 9c089b1..2e5e941 100644 --- a/package.json +++ b/package.json @@ -58,7 +58,7 @@ "@testing-library/react-hooks": "^7.0.0", "@types/jest": "^26.0.13", "@types/react": "^17.0.0", - "@types/react-router-dom": "^5.1.5", + "@types/react-router-dom": "^5.2.0", "@typescript-eslint/eslint-plugin": "^4.1.1", "@typescript-eslint/parser": "^4.1.1", "conventional-changelog-eslint": "^3.0.9", @@ -66,9 +66,8 @@ "eslint": "^7.9.0", "eslint-friendly-formatter": "^4.0.1", "eslint-plugin-react-hooks": "^4.1.2", - "history": "^4.0.0", "react": "^17.0.1", - "react-router-dom": "^5.2.0", + "react-router-dom": "^6.3.0", "react-scripts": "^4.0.1", "react-test-renderer": "^17.0.1", "rollup": "^2.26.9", diff --git a/src/deprecated/encodeDecode.ts b/src/deprecated/encodeDecode.ts deleted file mode 100644 index 6a58de9..0000000 --- a/src/deprecated/encodeDecode.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { useMemo } from "react" -import { useLocation, useRouteMatch } from "react-router-dom" -import { getQueryParamsAsObject } from "./helpers" -import { State } from "./types" - -export const useDecodedLocation = () => { - const { search, ...rest } = useLocation() - - const decodedSearch = useMemo(() => getQueryParamsAsObject(search), [search]) - - return { search: decodedSearch, ...rest } -} - -export const useDecodedRouteMatch = () => { - const { params, ...rest } = useRouteMatch() - - const decodedParams = useMemo(() => decodeValues(params as T), [params]) - - return { params: decodedParams, ...rest } -} - -export const decodeValues = (obj: T) => Object.keys(obj) - .reduce((acc, key) => ({ - ...acc, - [key]: obj[key] && decodeURIComponent(obj[key]) - }), {} as T) - -export const encodeValues = (obj: T) => Object.keys(obj) - .reduce((acc, key) => ({ - ...acc, - [key]: obj[key] && encodeURIComponent(obj[key]) - }), {} as T) \ No newline at end of file diff --git a/src/deprecated/helpers.ts b/src/deprecated/helpers.ts deleted file mode 100644 index 47e9453..0000000 --- a/src/deprecated/helpers.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { State } from "./types" - -export const getQueryParamsAsObject = (search: string) => { - const params: State = {} - - new URLSearchParams(search).forEach((value, key) => params[key] = value) - - return params -} - -export const removeUndefined = (obj: T) => Object.keys(obj) - .filter((key) => obj[key] !== undefined) - .reduce((acc, key) => ({ - ...acc, - [key]: obj[key] - }), {} as Partial) - -export const objectToQueryParams = (obj: State) => '?' + Object.keys(obj) - .filter((key) => obj[key] !== undefined) - .map((key) => `${key}=${obj[key]}`) - .join('&') diff --git a/src/deprecated/index.ts b/src/deprecated/index.ts deleted file mode 100644 index 1014088..0000000 --- a/src/deprecated/index.ts +++ /dev/null @@ -1,50 +0,0 @@ -import { useCallback, useMemo } from 'react' -import { generatePath, useHistory } from 'react-router-dom' -import { encodeValues, useDecodedLocation, useDecodedRouteMatch } from './encodeDecode' -import { objectToQueryParams, removeUndefined } from './helpers' -import { State } from './types' - -/** - * - * @deprecated Use `useQueryString` - */ -export const useQueryAsState = (defaultValues?: T): [T, (updatedParams: Partial) => void] => { - const { pathname, search } = useDecodedLocation() - const history = useHistory() - - const updateQuery = useCallback((updatedParams: Partial) => { - history.replace(pathname + objectToQueryParams(encodeValues({ ...search, ...updatedParams }))) - }, [search, pathname, history]) - - const queryWithDefault = useMemo(() => Object.assign({}, defaultValues, removeUndefined(search)), [search, defaultValues]) - - return [queryWithDefault, updateQuery] -} - -/** - * - * @deprecated Use `useQueryStringKey` - */ -export const useQueryKeyAsState = (key: string, defaultValue?: string): [string, (updatedValue: string) => void] => { - const [{ [key]: value }, updateQuery] = useQueryAsState(defaultValue === undefined ? undefined : { [key]: defaultValue }) - const updateKey = useCallback((newValue: string) => updateQuery({ [key]: newValue }), [updateQuery, key]) - - return [value, updateKey] -} - -/** - * - * @deprecated Use `useRouteParams` - */ -export const useParamsAsState = (defaultValues?: T): [T, (updatedParams: Partial) => void] => { - const { path, params } = useDecodedRouteMatch() - const history = useHistory() - - const updateParams = useCallback((updatedParams: Partial) => { - history.push(generatePath(path, encodeValues({ ...params, ...updatedParams }))) - }, [path, params, history]) - - const paramsWithDefault = useMemo(() => Object.assign({}, defaultValues, removeUndefined(params)), [params, defaultValues]) - - return [paramsWithDefault, updateParams] -} diff --git a/src/deprecated/types.ts b/src/deprecated/types.ts deleted file mode 100644 index 6256c27..0000000 --- a/src/deprecated/types.ts +++ /dev/null @@ -1 +0,0 @@ -export type State = Record \ No newline at end of file diff --git a/src/encodeDecode.ts b/src/encodeDecode.ts index c1efb62..55f5164 100644 --- a/src/encodeDecode.ts +++ b/src/encodeDecode.ts @@ -1,5 +1,5 @@ import { useMemo } from "react" -import { useLocation, useRouteMatch } from "react-router-dom" +import { useLocation, useMatch } from "react-router-dom" import { getQueryParamsAsObject, removeUndefined } from "./helpers" export const useDecodedLocation = () => { @@ -11,24 +11,25 @@ export const useDecodedLocation = () => { } export const useDecodedRouteMatch = () => { - const { params, ...rest } = useRouteMatch() + const match = useMatch('*') + const { params, path } = useMemo(() => ({ params: match?.params || {}, path: match?.pathname }), [match]) - const decodedParams = useMemo(() => decodeValues(params as Record), [params]) + const decodedParams = useMemo(() => decodeValues(params), [params]) - return { params: decodedParams, ...rest } + return { params: decodedParams, path } } -export const decodeValues = (obj: Record) => { +export const decodeValues = (obj: Record) => { const data = Object.keys(obj).reduce((acc, key) => { acc[key] = obj[key] && decodeURIComponent(obj[key] as string) return acc - }, {} as Record) + }, {} as Record) return data } -export const encodeValues = >(obj: T) => { +export const encodeValues = >(obj: T) => { const data = Object.entries(removeUndefined(obj)) .reduce((acc, [key, value]) => { diff --git a/src/index.ts b/src/index.ts index 2b2c5e3..402c2b0 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,21 +1,20 @@ import { Dispatch, SetStateAction, useCallback, useMemo } from 'react' -import { generatePath, useHistory } from 'react-router-dom' +import { generatePath, useNavigate } from 'react-router-dom' import { encodeValues, useDecodedLocation, useDecodedRouteMatch } from './encodeDecode' import { objectToQueryParams, removeUndefined } from './helpers' -export * from './deprecated' type DispatchState = Dispatch> type RouteObject = Record -type ParamsRouteObject = Record +type ParamsRouteObject = Record export const useQueryString = (defaultValues?: RouteObject): [RouteObject, DispatchState] => { const { pathname, search } = useDecodedLocation() - const history = useHistory() + const navigate = useNavigate() const updateQuery: DispatchState = useCallback((dispatch: SetStateAction) => { const updatedParams = typeof dispatch === 'function' ? dispatch(search) : dispatch - history.replace(pathname + objectToQueryParams(encodeValues(updatedParams))) - }, [search, pathname, history]) + navigate(pathname + objectToQueryParams(encodeValues(updatedParams)), { replace: true }) + }, [search, pathname, navigate]) const queryWithDefault = useMemo(() => Object.assign({}, defaultValues, removeUndefined(search)), [search, defaultValues]) @@ -34,12 +33,12 @@ export const useQueryStringKey = (key: string, defaultValue?: string | string[]) export const useRouteParams = (defaultValues?: ParamsRouteObject): [ParamsRouteObject, DispatchState] => { const { path, params } = useDecodedRouteMatch() - const history = useHistory() + const navigate = useNavigate() const updateParams = useCallback((dispatch: SetStateAction) => { const updatedParams = typeof dispatch === 'function' ? dispatch(params) : dispatch - history.push(generatePath(path, encodeValues(updatedParams))) - }, [path, params, history]) + navigate(generatePath(path, encodeValues(updatedParams))) + }, [path, params, navigate]) const paramsWithDefault = useMemo(() => Object.assign({}, defaultValues, removeUndefined(params)), [params, defaultValues]) @@ -51,7 +50,7 @@ export type UrlState = { query: RouteObject } export const useUrlState = (defaultValues?: UrlState): [UrlState, DispatchState] => { - const history = useHistory() + const navigate = useNavigate() const { path, params } = useDecodedRouteMatch() const { search } = useDecodedLocation() @@ -59,8 +58,8 @@ export const useUrlState = (defaultValues?: UrlState): [UrlState, DispatchState< const updatedState = typeof dispatch === 'function' ? dispatch({ params, query: search }) : dispatch const updatedParams = encodeValues(updatedState.params) const updatedQuery = objectToQueryParams(encodeValues(updatedState.query)) - history.push(generatePath(path, updatedParams) + updatedQuery) - }, [history, params, path, search]) + navigate(generatePath(path, updatedParams) + updatedQuery) + }, [navigate, params, path, search]) const stateWithdefaults = useMemo(() => { return { diff --git a/src/test/RouterWrapper.tsx b/src/test/RouterWrapper.tsx index 63e9a5a..a43965d 100644 --- a/src/test/RouterWrapper.tsx +++ b/src/test/RouterWrapper.tsx @@ -1,16 +1,20 @@ -import { createMemoryHistory } from "history" -import React from "react" -import { Route, Router } from "react-router-dom" +import { createMemoryHistory } from "history"; +import React from "react"; +// https://reactrouter.com/docs/en/v6/api#unstable_historyrouter +import { Route, Routes, unstable_HistoryRouter as HistoryRouter } from "react-router-dom"; export const getHistoryWrapper = (path?: string) => { - const history = createMemoryHistory() + const history = createMemoryHistory() - const wrapper: React.FC<{ path?: string }> = ({ children }) => - - - {children} - - + const wrapper: React.FC = ({ children }) => + + + + {/* {children} + */} + + + return { history, wrapper diff --git a/src/test/renderer.ts b/src/test/renderer.ts index 906108b..15203ec 100644 --- a/src/test/renderer.ts +++ b/src/test/renderer.ts @@ -10,7 +10,8 @@ type HookAction = (props: unknown) => [TState | undefined, Dispatch(action: HookAction, path?: string) => { const { wrapper, history } = getHistoryWrapper(path) - const { result } = renderHook(action, { wrapper }) + const { result, rerender } = renderHook(action, { wrapper }) + rerender() return { result, diff --git a/src/test/useQueryArrayStringKey.test.ts b/src/test/useQueryArrayStringKey.test.ts index 3e9387e..87dc757 100644 --- a/src/test/useQueryArrayStringKey.test.ts +++ b/src/test/useQueryArrayStringKey.test.ts @@ -5,9 +5,10 @@ import renderer from "./renderer"; describe('useArrayQueryStringKey', () => { it('Should be undefined by default', () => { - const { state, history } = renderer(() => useQueryStringKey('foo')) + const { state, history } = renderer(() => useQueryStringKey('foo'), '/') - expect(state.get).toBe(undefined) + const s = state.get + expect(s).toBe(undefined) expect(history.location.search).toBe('') }) @@ -19,9 +20,11 @@ describe('useArrayQueryStringKey', () => { }) it('Should add one array element', () => { - const { state, history } = renderer(() => useQueryStringKey('foo', [])) + //useQueryStringKey('foo', []) + const { state, history, result } = renderer(() => useQueryStringKey('foo', [])) act(() => { + result.current[1](['bar']) state.set(['bar']) }) diff --git a/src/test/useRouteParams.test.ts b/src/test/useRouteParams.test.ts index dbcfa76..ad30e1c 100644 --- a/src/test/useRouteParams.test.ts +++ b/src/test/useRouteParams.test.ts @@ -7,7 +7,8 @@ describe('useRouteParams', () => { it('Should have default empty', () => { const { state, history } = renderer(() => useRouteParams(), '/:foo?/:bar?') - expect(state.get).toStrictEqual({}) + const s = state.get + expect(s).toStrictEqual({}) expect(history.location.pathname).toBe('/') }) diff --git a/yarn.lock b/yarn.lock index d92c54c..c48eb05 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1165,13 +1165,20 @@ dependencies: regenerator-runtime "^0.13.4" -"@babel/runtime@^7.1.2", "@babel/runtime@^7.10.2", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.1", "@babel/runtime@^7.12.13", "@babel/runtime@^7.12.5", "@babel/runtime@^7.16.3", "@babel/runtime@^7.5.5", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4": +"@babel/runtime@^7.10.2", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.16.3", "@babel/runtime@^7.5.5", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4": version "7.16.3" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.16.3.tgz#b86f0db02a04187a3c17caa77de69840165d42d5" integrity sha512-WBwekcqacdY2e9AF/Q7WLFUWmdJGJTkbjqTjoMDgXkVZ3ZRUvOPsLb5KdwISoQVsbP+DQzVZW4Zhci0DvpbNTQ== dependencies: regenerator-runtime "^0.13.4" +"@babel/runtime@^7.7.6": + version "7.17.9" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.17.9.tgz#d19fbf802d01a8cb6cf053a64e472d42c434ba72" + integrity sha512-lSiBBvodq29uShpWGNbgFdKYNiFDo5/HIYsaCEY9ff4sb10x9jizo2+pRrSyF4jKZCXqgzuqBOQKbUm90gQwJg== + dependencies: + regenerator-runtime "^0.13.4" + "@babel/template@^7.10.4", "@babel/template@^7.16.0", "@babel/template@^7.3.3": version "7.16.0" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.16.0.tgz#d16a35ebf4cd74e202083356fab21dd89363ddd6" @@ -2172,6 +2179,11 @@ resolved "https://registry.yarnpkg.com/@types/history/-/history-4.7.9.tgz#1cfb6d60ef3822c589f18e70f8b12f9a28ce8724" integrity sha512-MUc6zSmU3tEVnkQ78q0peeEjKWPUADMlC/t++2bI8WnAG2tvYRPIgHG8lWkXwqc8MsUF6Z2MOf+Mh5sazOmhiQ== +"@types/history@^4.7.11": + version "4.7.11" + resolved "https://registry.yarnpkg.com/@types/history/-/history-4.7.11.tgz#56588b17ae8f50c53983a524fc3cc47437969d64" + integrity sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA== + "@types/html-minifier-terser@^5.0.0": version "5.1.2" resolved "https://registry.yarnpkg.com/@types/html-minifier-terser/-/html-minifier-terser-5.1.2.tgz#693b316ad323ea97eed6b38ed1a3cc02b1672b57" @@ -2261,12 +2273,12 @@ dependencies: "@types/react" "*" -"@types/react-router-dom@^5.1.5": - version "5.3.2" - resolved "https://registry.yarnpkg.com/@types/react-router-dom/-/react-router-dom-5.3.2.tgz#ebd8e145cf056db5c66eb1dac63c72f52e8542ee" - integrity sha512-ELEYRUie2czuJzaZ5+ziIp9Hhw+juEw8b7C11YNA4QdLCVbQ3qLi2l4aq8XnlqM7V31LZX8dxUuFUCrzHm6sqQ== +"@types/react-router-dom@^5.2.0": + version "5.3.3" + resolved "https://registry.yarnpkg.com/@types/react-router-dom/-/react-router-dom-5.3.3.tgz#e9d6b4a66fcdbd651a5f106c2656a30088cc1e83" + integrity sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw== dependencies: - "@types/history" "*" + "@types/history" "^4.7.11" "@types/react" "*" "@types/react-router" "*" @@ -6491,17 +6503,12 @@ hex-color-regex@^1.1.0: resolved "https://registry.yarnpkg.com/hex-color-regex/-/hex-color-regex-1.1.0.tgz#4c06fccb4602fe2602b3c93df82d7e7dbf1a8a8e" integrity sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ== -history@^4.0.0, history@^4.9.0: - version "4.10.1" - resolved "https://registry.yarnpkg.com/history/-/history-4.10.1.tgz#33371a65e3a83b267434e2b3f3b1b4c58aad4cf3" - integrity sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew== +history@^5.2.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/history/-/history-5.3.0.tgz#1548abaa245ba47992f063a0783db91ef201c73b" + integrity sha512-ZqaKwjjrAYUYfLG+htGaIIZ4nioX2L70ZUMIFysS3xvBsSG4x/n1V6TXV3N8ZYNuFGlDirFg32T7B6WOUPDYcQ== dependencies: - "@babel/runtime" "^7.1.2" - loose-envify "^1.2.0" - resolve-pathname "^3.0.0" - tiny-invariant "^1.0.2" - tiny-warning "^1.0.0" - value-equal "^1.0.1" + "@babel/runtime" "^7.7.6" hmac-drbg@^1.0.1: version "1.0.1" @@ -6512,13 +6519,6 @@ hmac-drbg@^1.0.1: minimalistic-assert "^1.0.0" minimalistic-crypto-utils "^1.0.1" -hoist-non-react-statics@^3.1.0: - version "3.3.2" - resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" - integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== - dependencies: - react-is "^16.7.0" - hook-std@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/hook-std/-/hook-std-2.0.0.tgz#ff9aafdebb6a989a354f729bb6445cf4a3a7077c" @@ -7348,11 +7348,6 @@ is-wsl@^2.1.1, is-wsl@^2.2.0: dependencies: is-docker "^2.0.0" -isarray@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" - integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8= - isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" @@ -8415,7 +8410,7 @@ loglevel@^1.6.8: resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.8.0.tgz#e7ec73a57e1e7b419cb6c6ac06bf050b67356114" integrity sha512-G6A/nJLRgWOuuwdNuA6koovfEV1YpqqAG4pRUlFaz3jj2QNZ8M4vBqnVA+HBTmU/AMNUtlOsMmSpF6NyOjztbA== -loose-envify@^1.1.0, loose-envify@^1.2.0, loose-envify@^1.3.1, loose-envify@^1.4.0: +loose-envify@^1.1.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== @@ -8682,14 +8677,6 @@ min-indent@^1.0.0: resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== -mini-create-react-context@^0.4.0: - version "0.4.1" - resolved "https://registry.yarnpkg.com/mini-create-react-context/-/mini-create-react-context-0.4.1.tgz#072171561bfdc922da08a60c2197a497cc2d1d5e" - integrity sha512-YWCYEmd5CQeHGSAKrYvXgmzzkrvssZcuuQDDeqkT+PziKGMgE+0MCCtcKbROzocGBG1meBLl2FotlRwf4gAzbQ== - dependencies: - "@babel/runtime" "^7.12.1" - tiny-warning "^1.0.3" - mini-css-extract-plugin@0.11.3: version "0.11.3" resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-0.11.3.tgz#15b0910a7f32e62ffde4a7430cfefbd700724ea6" @@ -9809,13 +9796,6 @@ path-to-regexp@0.1.7: resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= -path-to-regexp@^1.7.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.8.0.tgz#887b3ba9d84393e87a0a0b9f4cb756198b53548a" - integrity sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA== - dependencies: - isarray "0.0.1" - path-type@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" @@ -10720,7 +10700,7 @@ promzard@^0.3.0: dependencies: read "1" -prop-types@^15.6.2, prop-types@^15.7.2: +prop-types@^15.7.2: version "15.7.2" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5" integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ== @@ -10963,7 +10943,7 @@ react-error-overlay@^6.0.9: resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== -react-is@^16.6.0, react-is@^16.7.0, react-is@^16.8.1: +react-is@^16.8.1: version "16.13.1" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== @@ -10973,34 +10953,20 @@ react-refresh@^0.8.3: resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.8.3.tgz#721d4657672d400c5e3c75d063c4a85fb2d5d68f" integrity sha512-X8jZHc7nCMjaCqoU+V2I0cOhNW+QMBwSUkeXnTi8IPe6zaRWfn60ZzvFDZqWPfmSJfjub7dDW1SP0jaHWLu/hg== -react-router-dom@^5.2.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-5.3.0.tgz#da1bfb535a0e89a712a93b97dd76f47ad1f32363" - integrity sha512-ObVBLjUZsphUUMVycibxgMdh5jJ1e3o+KpAZBVeHcNQZ4W+uUGGWsokurzlF4YOldQYRQL4y6yFRWM4m3svmuQ== - dependencies: - "@babel/runtime" "^7.12.13" - history "^4.9.0" - loose-envify "^1.3.1" - prop-types "^15.6.2" - react-router "5.2.1" - tiny-invariant "^1.0.2" - tiny-warning "^1.0.0" - -react-router@5.2.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/react-router/-/react-router-5.2.1.tgz#4d2e4e9d5ae9425091845b8dbc6d9d276239774d" - integrity sha512-lIboRiOtDLFdg1VTemMwud9vRVuOCZmUIT/7lUoZiSpPODiiH1UQlfXy+vPLC/7IWdFYnhRwAyNqA/+I7wnvKQ== - dependencies: - "@babel/runtime" "^7.12.13" - history "^4.9.0" - hoist-non-react-statics "^3.1.0" - loose-envify "^1.3.1" - mini-create-react-context "^0.4.0" - path-to-regexp "^1.7.0" - prop-types "^15.6.2" - react-is "^16.6.0" - tiny-invariant "^1.0.2" - tiny-warning "^1.0.0" +react-router-dom@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-6.3.0.tgz#a0216da813454e521905b5fa55e0e5176123f43d" + integrity sha512-uaJj7LKytRxZNQV8+RbzJWnJ8K2nPsOOEuX7aQstlMZKQT0164C+X2w6bnkqU3sjtLvpd5ojrezAyfZ1+0sStw== + dependencies: + history "^5.2.0" + react-router "6.3.0" + +react-router@6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/react-router/-/react-router-6.3.0.tgz#3970cc64b4cb4eae0c1ea5203a80334fdd175557" + integrity sha512-7Wh1DzVQ+tlFjkeo+ujvjSqSJmkt1+8JO+T5xklPlgrh70y7ogx75ODRW0ThWhY7S+6yEDks8TYrtQe/aoboBQ== + dependencies: + history "^5.2.0" react-scripts@^4.0.1: version "4.0.3" @@ -11405,11 +11371,6 @@ resolve-from@^5.0.0: resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== -resolve-pathname@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/resolve-pathname/-/resolve-pathname-3.0.0.tgz#99d02224d3cf263689becbb393bc560313025dcd" - integrity sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng== - resolve-url-loader@^3.1.2: version "3.1.4" resolved "https://registry.yarnpkg.com/resolve-url-loader/-/resolve-url-loader-3.1.4.tgz#3c16caebe0b9faea9c7cc252fa49d2353c412320" @@ -12716,21 +12677,11 @@ timsort@^0.3.0: resolved "https://registry.yarnpkg.com/timsort/-/timsort-0.3.0.tgz#405411a8e7e6339fe64db9a234de11dc31e02bd4" integrity sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q= -tiny-invariant@^1.0.2: - version "1.2.0" - resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.2.0.tgz#a1141f86b672a9148c72e978a19a73b9b94a15a9" - integrity sha512-1Uhn/aqw5C6RI4KejVeTg6mIS7IqxnLJ8Mv2tV5rTc0qWobay7pDUz6Wi392Cnc8ak1H0F2cjoRzb2/AW4+Fvg== - tiny-relative-date@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/tiny-relative-date/-/tiny-relative-date-1.3.0.tgz#fa08aad501ed730f31cc043181d995c39a935e07" integrity sha512-MOQHpzllWxDCHHaDno30hhLfbouoYlOI8YlMNtvKe1zXbjEVhbcEovQxvZrPvtiYW630GQDoMMarCnjfyfHA+A== -tiny-warning@^1.0.0, tiny-warning@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754" - integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA== - tmpl@1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" @@ -13227,11 +13178,6 @@ validate-npm-package-name@^3.0.0, validate-npm-package-name@~3.0.0: dependencies: builtins "^1.0.3" -value-equal@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/value-equal/-/value-equal-1.0.1.tgz#1e0b794c734c5c0cade179c437d356d931a34d6c" - integrity sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw== - vary@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc"