diff --git a/esbuild.config.mjs b/esbuild.config.mjs index d0a1eec87..0de6574f4 100644 --- a/esbuild.config.mjs +++ b/esbuild.config.mjs @@ -146,6 +146,7 @@ const esbuild = { TITLE: env.parsed.TITLE || env.parsed.MAP_GENERAL_TITLE || '', SENTRY_DSN: env.parsed.SENTRY_DSN || '', SENTRY_TRACES_SAMPLE_RATE: env.parsed.SENTRY_TRACES_SAMPLE_RATE || 0.1, + SENTRY_DEBUG: env.parsed.SENTRY_DEBUG || false, VERSION: version, DEVELOPMENT: isDevelopment, CUSTOM: hasCustom, diff --git a/example.env b/example.env index 60b6163a9..efa006cf7 100644 --- a/example.env +++ b/example.env @@ -5,4 +5,5 @@ SENTRY_AUTH_TOKEN="" SENTRY_ORG="" SENTRY_PROJECT="" SENTRY_TRACES_SAMPLE_RATE=0.1 -DEV_PORT="" \ No newline at end of file +SENTRY_DEBUG= +DEV_PORT="" diff --git a/package.json b/package.json index ac93b36e5..ee6e291e2 100644 --- a/package.json +++ b/package.json @@ -101,7 +101,7 @@ "react-i18next": "^11.9.0", "react-leaflet": "3.2.2", "react-leaflet-markercluster": "3.0.0-rc1", - "react-router-dom": "^5.2.0", + "react-router-dom": "^6.2.0", "react-virtualized-auto-sizer": "^1.0.5", "react-window": "^1.8.6", "require-from-string": "^2.0.2", diff --git a/src/components/App.jsx b/src/components/App.jsx index 11c2ea712..d21c81727 100644 --- a/src/components/App.jsx +++ b/src/components/App.jsx @@ -1,10 +1,12 @@ import '@assets/css/main.css' import React, { Suspense } from 'react' +import { BrowserRouter } from 'react-router-dom' + import { ApolloProvider } from '@apollo/client' import client from '@services/apollo' -import ReactRouter from './ReactRouter' +import Config from './Config' import ErrorBoundary from './ErrorBoundary' const SetText = () => { @@ -32,12 +34,13 @@ const SetText = () => { export default function App() { document.body.classList.add('dark') - return ( }> - + + + diff --git a/src/components/ClearStorage.jsx b/src/components/ClearStorage.jsx index 27f0d9789..61b592361 100644 --- a/src/components/ClearStorage.jsx +++ b/src/components/ClearStorage.jsx @@ -1,8 +1,8 @@ import React from 'react' -import { Redirect } from 'react-router-dom' +import { Navigate } from 'react-router-dom' export default function ClearStorage() { localStorage.clear() sessionStorage.clear() - return + return } diff --git a/src/components/Config.jsx b/src/components/Config.jsx new file mode 100644 index 000000000..af3ba5ed7 --- /dev/null +++ b/src/components/Config.jsx @@ -0,0 +1,62 @@ +import React, { useEffect, useState, useCallback } from 'react' +import { ThemeProvider } from '@material-ui/styles' +import { useTranslation } from 'react-i18next' + +import setTheme from '@assets/mui/theme' +import UIcons from '@services/Icons' +import Fetch from '@services/Fetch' + +import ReactRouter from './ReactRouter' +import HolidayEffects from './HolidayEffects' + +const rootLoading = document.getElementById('loader') +const loadingText = document.getElementById('loading-text') + +export default function Config() { + const { t } = useTranslation() + const [serverSettings, setServerSettings] = useState(null) + + if (rootLoading) { + if (serverSettings) { + rootLoading.style.display = 'none' + } + } + + if (rootLoading) { + if (serverSettings) { + rootLoading.style.display = 'none' + } + } + const getServerSettings = useCallback(async () => { + const data = await Fetch.getSettings() + const Icons = data.masterfile ? new UIcons(data.config.icons, data.masterfile.questRewardTypes) : null + if (Icons) { + Icons.build(data.config.icons.styles) + if (data.config.icons.defaultIcons) { + Icons.setSelection(data.config.icons.defaultIcons) + } + } + setServerSettings({ ...data, Icons }) + }, []) + + useEffect(() => { + if (!serverSettings) { + if (loadingText) { + loadingText.innerText = t('loading_settings') + } + getServerSettings() + } + }, []) + + if (!serverSettings) { + return
+ } + + return ( + + + + + + ) +} diff --git a/src/components/Container.jsx b/src/components/Container.jsx new file mode 100644 index 000000000..bd3d3d77f --- /dev/null +++ b/src/components/Container.jsx @@ -0,0 +1,27 @@ +import React from 'react' +import { MapContainer } from 'react-leaflet' +import { useStore } from '@hooks/useStore' + +import Map from './Map' + +export default function Container({ serverSettings, params }) { + const location = useStore(state => state.location) + const zoom = useStore(state => state.zoom) + + return ( + + {(serverSettings.user && serverSettings.user.perms.map) && ( + + )} + + ) +} diff --git a/src/components/ReactRouter.jsx b/src/components/ReactRouter.jsx index e652df024..ae0a617b9 100644 --- a/src/components/ReactRouter.jsx +++ b/src/components/ReactRouter.jsx @@ -1,82 +1,36 @@ -import React, { useEffect, useState, useCallback } from 'react' -import { BrowserRouter as Router, Route, Switch } from 'react-router-dom' -import { useTranslation } from 'react-i18next' -import { ThemeProvider } from '@material-ui/styles' - -import setTheme from '@assets/mui/theme' -import UIcons from '@services/Icons' -import Fetch from '@services/Fetch' +import React from 'react' +import { Route, Routes } from 'react-router-dom' +import useConfig from '@hooks/useConfig' import Auth from './layout/auth/Auth' import Login from './layout/auth/Login' -import RouteChangeTracker from './RouteChangeTracker' import Errors from './Errors' import ClearStorage from './ClearStorage' -import HolidayEffects from './HolidayEffects' - -const rootLoading = document.getElementById('loader') -const loadingText = document.getElementById('loading-text') - -export default function ReactRouter() { - const { t } = useTranslation() - const [serverSettings, setServerSettings] = useState(null) - if (rootLoading) { - if (serverSettings) { - rootLoading.style.display = 'none' - } - } - const getServerSettings = useCallback(async () => { - const data = await Fetch.getSettings() - const Icons = data.masterfile ? new UIcons(data.config.icons, data.masterfile.questRewardTypes) : null - if (Icons) { - Icons.build(data.config.icons.styles) - if (data.config.icons.defaultIcons) { - Icons.setSelection(data.config.icons.defaultIcons) - } - } - setServerSettings({ ...data, Icons }) - }, []) +export default function ReactRouter({ serverSettings, getServerSettings }) { + useConfig(serverSettings) - useEffect(() => { - if (!serverSettings) { - if (loadingText) { - loadingText.innerText = t('loading_settings') - } - getServerSettings() - } - }, []) + const authRoute = return ( - - - {(inject.GOOGLE_ANALYTICS_ID) && } - - - - - - {serverSettings && } - - - {serverSettings && ( - - )} - - - {serverSettings && } - - - {serverSettings && } - - - - - - + + + } /> + + )} + /> + + + + + } /> + ) } diff --git a/src/components/RouteChangeTracker.jsx b/src/components/RouteChangeTracker.jsx deleted file mode 100644 index 8bd40378c..000000000 --- a/src/components/RouteChangeTracker.jsx +++ /dev/null @@ -1,14 +0,0 @@ -import React from 'react' -import { withRouter } from 'react-router-dom' -import ReactGA from 'react-ga' - -const RouteChangeTracker = ({ history }) => { - history.listen((location) => { - ReactGA.set({ page: location.pathname }) - ReactGA.pageview(location.pathname) - }) - - return
-} - -export default withRouter(RouteChangeTracker) diff --git a/src/components/WebhookQuery.jsx b/src/components/WebhookQuery.jsx index 4cedfda2d..7ccb56d17 100644 --- a/src/components/WebhookQuery.jsx +++ b/src/components/WebhookQuery.jsx @@ -2,10 +2,10 @@ import React from 'react' import { useQuery } from '@apollo/client' import Query from '@services/Query' -import ConfigSettings from './ConfigSettings' +import ConfigSettings from './Container' -export default function WebhookQuery({ match, serverSettings }) { - let lowercase = match.params.category.toLowerCase() +export default function WebhookQuery({ params, serverSettings }) { + let lowercase = params.category.toLowerCase() if (lowercase === 'invasions' || lowercase === 'lures' || lowercase === 'quests') { @@ -16,8 +16,8 @@ export default function WebhookQuery({ match, serverSettings }) { } const { data } = useQuery(Query[lowercase]('id'), { variables: { - id: match.params.id, - perm: match.params.category.toLowerCase(), + id: params.id, + perm: params.category.toLowerCase(), version: inject.VERSION, }, }) @@ -26,8 +26,8 @@ export default function WebhookQuery({ match, serverSettings }) { paramLocation={data[`${lowercase}Single`] ? [data[`${lowercase}Single`].lat, data[`${lowercase}Single`].lon] : null} - paramZoom={match.params.zoom} - match={match} + paramZoom={params.zoom} + params={params} serverSettings={serverSettings} /> ) : null diff --git a/src/components/layout/FloatingBtn.jsx b/src/components/layout/FloatingBtn.jsx index 58a15e8a5..25362001c 100644 --- a/src/components/layout/FloatingBtn.jsx +++ b/src/components/layout/FloatingBtn.jsx @@ -26,6 +26,7 @@ export default function FloatingButtons({ scanZoneMode, setScanZoneMode, }) { const { t } = useTranslation() + const { map: { enableFloatingProfileButton }, scanner: { scannerType, enableScanNext, enableScanZone } } = useStatic(state => state.config) const { loggedIn } = useStatic(state => state.auth) @@ -78,7 +79,13 @@ export default function FloatingButtons({ ) : null} {(perms?.webhooks?.length && webhooks && selectedWebhook) ? ( - setWebhookMode('open')} title={selectedWebhook} disabled={Boolean(webhookMode) || Boolean(scanNextMode) || Boolean(scanZoneMode)}> + setWebhookMode('open')} + title={selectedWebhook} + disabled={Boolean(webhookMode) || Boolean(scanNextMode) || Boolean(scanZoneMode)} + > diff --git a/src/components/layout/Nav.jsx b/src/components/layout/Nav.jsx index 6e27b1f1e..9b63754c1 100644 --- a/src/components/layout/Nav.jsx +++ b/src/components/layout/Nav.jsx @@ -28,7 +28,6 @@ export default function Nav({ isMobile, isTablet, }) { const classes = useStyles() - const { perms } = useStatic(state => state.auth) const webhookAlert = useStatic(state => state.webhookAlert) const setWebhookAlert = useStatic(state => state.setWebhookAlert) @@ -38,6 +37,7 @@ export default function Nav({ const feedback = useStatic(state => state.feedback) const setFeedback = useStatic(state => state.setFeedback) const resetFilters = useStatic(state => state.resetFilters) + const setResetFilters = useStatic(state => state.setResetFilters) const filters = useStore(state => state.filters) const setFilters = useStore(state => state.setFilters) @@ -84,7 +84,6 @@ export default function Nav({ return } setDialog({ open, category, type }) - if (filter && type === 'search') { setManualParams({ id: filter.id }) map.flyTo([filter.lat, filter.lon], 16) @@ -132,6 +131,7 @@ export default function Nav({ open={userProfile} fullScreen={isMobile} fullWidth={!isMobile} + onClose={() => setUserProfile(false)} > setTutorial(false)} > setDonorPage(false)} > setFeedback(false)} > setResetFilters(false)} > diff --git a/src/components/layout/auth/Auth.jsx b/src/components/layout/auth/Auth.jsx index b1db329a6..b5317388c 100644 --- a/src/components/layout/auth/Auth.jsx +++ b/src/components/layout/auth/Auth.jsx @@ -1,21 +1,23 @@ import React from 'react' -import { Redirect, withRouter } from 'react-router-dom' +import { Navigate, useParams } from 'react-router-dom' -import ConfigSettings from '../../ConfigSettings' +import ConfigSettings from '../../Container' import Login from './Login' import WebhookQuery from '../../WebhookQuery' -const Auth = ({ serverSettings, getServerSettings, match }) => { +export default function Auth({ serverSettings, getServerSettings }) { + const params = useParams() + if (serverSettings.error) { return ( - + ) } if ((serverSettings.authMethods.length && !serverSettings.user) || (serverSettings.user && !serverSettings.user?.perms?.map)) { - if (match.params.category || match.params.lat) { - localStorage.setItem('params', JSON.stringify(match.params)) + if (params.category || params.lat) { + localStorage.setItem('params', JSON.stringify(params)) } return } @@ -25,19 +27,17 @@ const Auth = ({ serverSettings, getServerSettings, match }) => { const url = cachedParams.category ? `/id/${cachedParams.category}/${cachedParams.id}/${cachedParams.zoom || 18}` : `/@/${cachedParams.lat}/${cachedParams.lon}/${cachedParams.zoom || 18}` - return + return } - if (match.params.category) { + if (params.category) { return ( ) } return ( - + ) } - -export default withRouter(Auth) diff --git a/src/components/layout/auth/Local.jsx b/src/components/layout/auth/Local.jsx index 9f3ff49a6..999f1b665 100644 --- a/src/components/layout/auth/Local.jsx +++ b/src/components/layout/auth/Local.jsx @@ -1,5 +1,5 @@ import React, { useState } from 'react' -import { Redirect } from 'react-router-dom' +import { Navigate } from 'react-router-dom' import { Grid, Typography, Button, OutlinedInput, InputLabel, FormControl, InputAdornment, IconButton, } from '@material-ui/core' @@ -47,7 +47,7 @@ export default function LocalLogin({ href, serverSettings, getServerSettings }) } if (redirect) { - return + return } return ( diff --git a/src/components/layout/auth/Login.jsx b/src/components/layout/auth/Login.jsx index bd14f17f0..d5f9cedcc 100644 --- a/src/components/layout/auth/Login.jsx +++ b/src/components/layout/auth/Login.jsx @@ -1,6 +1,6 @@ /* eslint-disable react/no-array-index-key */ import React from 'react' -import { withRouter } from 'react-router-dom' +import { useLocation } from 'react-router-dom' import { useTranslation } from 'react-i18next' import { Grid, Typography, useMediaQuery } from '@material-ui/core' import { useTheme } from '@material-ui/styles' @@ -11,12 +11,13 @@ import DiscordLogin from './Discord' import TelegramLogin from './Telegram' import CustomTile from '../custom/CustomTile' -const Login = ({ clickedTwice, location, serverSettings, getServerSettings }) => { +export default function Login({ clickedTwice, serverSettings, getServerSettings }) { + const location = useLocation() const { t } = useTranslation() const theme = useTheme() const isMobile = useMediaQuery(theme.breakpoints.only('xs')) - const { settings, components } = serverSettings.config.map.loginPage + return components.length ? ( ) } - -export default withRouter(Login) diff --git a/src/components/layout/dialogs/ResetFilters.jsx b/src/components/layout/dialogs/ResetFilters.jsx index 3535236f1..e51207bd0 100644 --- a/src/components/layout/dialogs/ResetFilters.jsx +++ b/src/components/layout/dialogs/ResetFilters.jsx @@ -2,7 +2,7 @@ import React, { useState } from 'react' import { Button, Typography, DialogContent, } from '@material-ui/core' -import { Redirect } from 'react-router-dom' +import { Navigate } from 'react-router-dom' import { useTranslation } from 'react-i18next' import { useStatic } from '@hooks/useStore' @@ -16,7 +16,7 @@ export default function ResetFilters() { const setResetFilters = useStatic(state => state.setResetFilters) if (redirect) { - return + return } return ( <> diff --git a/src/components/layout/dialogs/UserProfile.jsx b/src/components/layout/dialogs/UserProfile.jsx index 0fd6fd214..b6cda806b 100644 --- a/src/components/layout/dialogs/UserProfile.jsx +++ b/src/components/layout/dialogs/UserProfile.jsx @@ -338,7 +338,7 @@ const BadgeTile = ({ data, rowIndex, columnIndex, style }) => { {item.name || t('unknown_gym')} - + setBadgeMenu(false)}> setWebhookMode(false), icon: 'Close', color: 'primary' }, + { name: 'close', action: handleWebhookClose, icon: 'Close', color: 'primary' }, ] if (map.feedbackLink) { @@ -129,7 +130,7 @@ export default function Manage({ return ( <> -
setWebhookMode(false)} titles={['manage_webhook']} /> +
setWebhookMode(false)} > setWebhookMode(false)} />
{webhookMode === 'location' && ( diff --git a/src/components/layout/dialogs/webhooks/tiles/TrackedTile.jsx b/src/components/layout/dialogs/webhooks/tiles/TrackedTile.jsx index eb9a2ca42..20fbf744f 100644 --- a/src/components/layout/dialogs/webhooks/tiles/TrackedTile.jsx +++ b/src/components/layout/dialogs/webhooks/tiles/TrackedTile.jsx @@ -104,6 +104,7 @@ export default function PokemonTile({ data, rowIndex, columnIndex, style }) { open={editDialog} fullWidth={!isMobile} fullScreen={isMobile} + onClose={() => setEditDialog(false)} > setHelpDialog(false)} > setHelpDialog(!helpDialog)} @@ -294,6 +295,7 @@ export default function Menu({ open={webhook.open} fullWidth={!isMobile} fullScreen={isMobile} + onClose={toggleWebhook(false)} > - + state.setUserSettings) const setSettings = useStore(state => state.setSettings) const setFilters = useStore(state => state.setFilters) @@ -141,39 +137,13 @@ export default function ConfigSettings({ if (paramLocation && paramLocation[0] !== null) { return paramLocation } - if (match.params.lat) { - return [match.params.lat, match.params.lon] + if (params.lat) { + return [params.lat, params.lon] } return updatePositionState([serverSettings.config.map.startLat, serverSettings.config.map.startLon], 'location') } setZoom(updatePositionState(serverSettings.config.map.startZoom, 'zoom')) - const getStartZoom = () => { - if (paramZoom) { - return paramZoom - } - if (match.params.zoom) { - return match.params.zoom || 15 - } - return updatePositionState(serverSettings.config.map.startZoom, 'zoom') - } setIsNight(Utility.nightCheck(...getStartLocation())) - - return ( - - {(serverSettings.user && serverSettings.user.perms.map) && ( - - )} - - ) } diff --git a/src/index.jsx b/src/index.jsx index cfda90162..b4b727930 100644 --- a/src/index.jsx +++ b/src/index.jsx @@ -9,8 +9,8 @@ import './services/i18n' if (inject) { const { - GOOGLE_ANALYTICS_ID, ANALYTICS_DEBUG_MODE, TITLE, VERSION, - SENTRY_DSN, SENTRY_TRACES_SAMPLE_RATE, DEVELOPMENT, CUSTOM, + GOOGLE_ANALYTICS_ID, ANALYTICS_DEBUG_MODE, TITLE, VERSION, CUSTOM, + SENTRY_DSN, SENTRY_TRACES_SAMPLE_RATE, DEVELOPMENT, SENTRY_DEBUG, } = inject if (GOOGLE_ANALYTICS_ID) { ReactGA.initialize(GOOGLE_ANALYTICS_ID, { debug: ANALYTICS_DEBUG_MODE }) @@ -24,7 +24,7 @@ if (inject) { tracesSampleRate: SENTRY_TRACES_SAMPLE_RATE ? +SENTRY_TRACES_SAMPLE_RATE : 0.1, release: VERSION, environment: DEVELOPMENT ? 'development' : 'production', - debug: DEVELOPMENT, + debug: SENTRY_DEBUG, beforeSend(event) { return CUSTOM ? null : event }, diff --git a/yarn.lock b/yarn.lock index 7a0b72a1e..f34851849 100644 --- a/yarn.lock +++ b/yarn.lock @@ -67,14 +67,7 @@ dependencies: regenerator-runtime "^0.13.4" -"@babel/runtime@^7.1.2", "@babel/runtime@^7.12.1", "@babel/runtime@^7.3.1", "@babel/runtime@^7.8.3": - version "7.13.10" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.13.10.tgz#47d42a57b6095f4468da440388fdbad8bebf0d7d" - integrity sha512-4QPkjJq6Ns3V/RgpEahRk+AGfL0eO6RHHtTWoNNr5mO49G6B5+X6d6THgWEAvTrznU5xYpbAlVKRYcsCgh/Akw== - dependencies: - regenerator-runtime "^0.13.4" - -"@babel/runtime@^7.10.2", "@babel/runtime@^7.16.3": +"@babel/runtime@^7.10.2", "@babel/runtime@^7.16.3", "@babel/runtime@^7.7.6": version "7.17.2" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.17.2.tgz#66f68591605e59da47523c631416b18508779941" integrity sha512-hzeyJyMA1YGdJTuWU0e/j4wKXrU4OMFvY2MSlaI9B7VQb0r5cxTE3EAIS2Q7Tn2RIcDkRvTA/v2JsAEhxe99uw== @@ -88,6 +81,13 @@ dependencies: regenerator-runtime "^0.13.4" +"@babel/runtime@^7.3.1", "@babel/runtime@^7.8.3": + version "7.13.10" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.13.10.tgz#47d42a57b6095f4468da440388fdbad8bebf0d7d" + integrity sha512-4QPkjJq6Ns3V/RgpEahRk+AGfL0eO6RHHtTWoNNr5mO49G6B5+X6d6THgWEAvTrznU5xYpbAlVKRYcsCgh/Akw== + dependencies: + regenerator-runtime "^0.13.4" + "@babel/runtime@^7.4.4", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.7": version "7.14.6" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.14.6.tgz#535203bc0892efc7dec60bdc27b2ecf6e409062d" @@ -2436,19 +2436,14 @@ has@^1.0.3: dependencies: function-bind "^1.1.1" -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" -hoist-non-react-statics@^3.1.0, hoist-non-react-statics@^3.3.2: +hoist-non-react-statics@^3.3.2: 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== @@ -2835,11 +2830,6 @@ is-yarn-global@^0.3.0: resolved "https://registry.yarnpkg.com/is-yarn-global/-/is-yarn-global-0.3.0.tgz#d502d3382590ea3004893746754c89139973e232" integrity sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw== -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: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" @@ -3137,7 +3127,7 @@ long@^4.0.0: resolved "https://registry.yarnpkg.com/long/-/long-4.0.0.tgz#9a7b71cfb7d361a194ea555241c92f7468d5bf28" integrity sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA== -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== @@ -3230,14 +3220,6 @@ mimic-response@^1.0.0, mimic-response@^1.0.1: resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== -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" - minimatch@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" @@ -3718,13 +3700,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" - pause@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/pause/-/pause-0.0.1.tgz#1d408b3fdb76923b9543d96fb4c9dfd535d9cb5d" @@ -3927,7 +3902,7 @@ react-i18next@^11.9.0: "@babel/runtime" "^7.13.6" html-parse-stringify "^3.0.1" -react-is@^16.6.0, react-is@^16.7.0, react-is@^16.8.1: +react-is@^16.7.0, 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== @@ -3961,34 +3936,20 @@ react-leaflet@^3.0.0: dependencies: "@react-leaflet/core" "^1.0.2" -react-router-dom@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-5.2.0.tgz#9e65a4d0c45e13289e66c7b17c7e175d0ea15662" - integrity sha512-gxAmfylo2QUjcwxI63RhQ5G85Qqt4voZpUXSEqCwykV0baaOTQDR1f0PmY8AELqIyVc0NEZUj0Gov5lNGcXgsA== +react-router-dom@^6.2.0: + version "6.2.2" + resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-6.2.2.tgz#f1a2c88365593c76b9612ae80154a13fcb72e442" + integrity sha512-AtYEsAST7bDD4dLSQHDnk/qxWLJdad5t1HFa1qJyUrCeGgEuCSw0VB/27ARbF9Fi/W5598ujvJOm3ujUCVzuYQ== dependencies: - "@babel/runtime" "^7.1.2" - history "^4.9.0" - loose-envify "^1.3.1" - prop-types "^15.6.2" - react-router "5.2.0" - tiny-invariant "^1.0.2" - tiny-warning "^1.0.0" + history "^5.2.0" + react-router "6.2.2" -react-router@5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/react-router/-/react-router-5.2.0.tgz#424e75641ca8747fbf76e5ecca69781aa37ea293" - integrity sha512-smz1DUuFHRKdcJC0jobGo8cVbhO3x50tCL4icacOlcwDOEQPq4TMqwx3sY1TP+DvtTgz4nm3thuo7A+BK2U0Dw== - dependencies: - "@babel/runtime" "^7.1.2" - 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@6.2.2: + version "6.2.2" + resolved "https://registry.yarnpkg.com/react-router/-/react-router-6.2.2.tgz#495e683a0c04461eeb3d705fe445d6cf42f0c249" + integrity sha512-/MbxyLzd7Q7amp4gDOGaYvXwhEojkJD5BtExkuKmj39VEE0m3l/zipf6h2WIB2jyAO0lI6NGETh4RDcktRm4AQ== + dependencies: + history "^5.2.0" react-transition-group@^4.4.0: version "4.4.2" @@ -4104,11 +4065,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@^1.20.0: version "1.22.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.0.tgz#5e0b8c67c15df57a89bdbabe603a002f21731198" @@ -4514,12 +4470,7 @@ tildify@2.0.0: resolved "https://registry.yarnpkg.com/tildify/-/tildify-2.0.0.tgz#f205f3674d677ce698b7067a99e949ce03b4754a" integrity sha512-Cc+OraorugtXNfs50hU9KS369rFXCfgGLpfCfvlc+Ud5u6VWmUQsOAa9HbTvheQdYnrdJqqv1e5oIqXppMYnSw== -tiny-invariant@^1.0.2: - version "1.1.0" - resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.1.0.tgz#634c5f8efdc27714b7f386c35e6760991d230875" - integrity sha512-ytxQvrb1cPc9WBEI/HSeYYoGD0kWnGEOR8RY6KomWLBVhqz0RgTwVO9dLrGz7dC+nN9llyI7OKAgRq8Vq4ZBSw== - -tiny-warning@^1.0.0, tiny-warning@^1.0.2, tiny-warning@^1.0.3: +tiny-warning@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754" integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA== @@ -4756,11 +4707,6 @@ v8-compile-cache@^2.0.3: resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== -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== - value-or-promise@1.0.11: version "1.0.11" resolved "https://registry.yarnpkg.com/value-or-promise/-/value-or-promise-1.0.11.tgz#3e90299af31dd014fe843fe309cefa7c1d94b140"