This commit is contained in:
AuroraLS3 2023-01-22 08:29:42 +00:00
parent df01bbb917
commit e854aa5ae6
10 changed files with 136 additions and 130 deletions

View File

@ -18,13 +18,13 @@
"@testing-library/jest-dom": "^5.16.5",
"@testing-library/react": "^12.0.0",
"@testing-library/user-event": "^14.4.3",
"axios": "^1.2.2",
"axios": "^1.2.3",
"bootstrap": "^5.2.3",
"datatables.net": "^1.13.1",
"datatables.net-bs5": "^1.12.1",
"datatables.net-responsive-bs5": "^2.4.0",
"highcharts": "^10.3.2",
"i18next": "^22.4.8",
"i18next": "^22.4.9",
"i18next-chained-backend": "^4.2.0",
"i18next-http-backend": "^2.1.1",
"i18next-localstorage-backend": "^4.1.0",
@ -32,7 +32,7 @@
"react": "^17.0.2",
"react-bootstrap-v5": "^1.4.0",
"react-dom": "^17.0.2",
"react-i18next": "^12.1.1",
"react-i18next": "^12.1.4",
"react-mcjsonchat": "^1.0.0",
"react-router-dom": "6",
"react-scripts": "5.0.1",

View File

@ -1,14 +1,15 @@
import React, {useEffect, useState} from "react";
import {useLocation} from "react-router-dom";
import {useLocation, useNavigate} from "react-router-dom";
import {FontAwesomeIcon as Fa} from "@fortawesome/react-fontawesome";
const TabButton = ({name, href, icon, color, active}) => {
const navigate = useNavigate();
return (
<li className="nav-item">
<a className={"nav-link col-black" + (active ? ' active' : '')} aria-selected={active} role="tab"
href={'#' + href}>
<button className={"nav-link col-black" + (active ? ' active' : '')} aria-selected={active} role="tab"
onClick={() => navigate('#' + href, {replace: true})}>
<Fa icon={icon} className={'col-' + color}/> {name}
</a>
</button>
</li>
)
}

View File

@ -7,6 +7,7 @@ import {FontAwesomeIcon as Fa} from "@fortawesome/react-fontawesome";
import DropdownToggle from "react-bootstrap-v5/lib/esm/DropdownToggle";
import DropdownMenu from "react-bootstrap-v5/lib/esm/DropdownMenu";
import DropdownItem from "react-bootstrap-v5/lib/esm/DropdownItem";
import {CardLoader} from "../../navigation/Loader";
const SortDropDown = ({sortBy, sortReversed, setSortBy}) => {
const {t} = useTranslation();
@ -35,11 +36,15 @@ const SortDropDown = ({sortBy, sortReversed, setSortBy}) => {
)
}
const ServersTableCard = ({servers, onSelect}) => {
const ServersTableCard = ({loaded, servers, onSelect}) => {
const {t} = useTranslation();
const [sortBy, setSortBy] = useState(ServerSortOption.ALPHABETICAL);
const [sortReversed, setSortReversed] = useState(false);
if (!loaded) {
return <CardLoader/>
}
const setSort = option => {
if (sortBy === option) {
setSortReversed(!sortReversed);
@ -62,10 +67,10 @@ const ServersTableCard = ({servers, onSelect}) => {
<p>It appears that Plan is not installed on any game servers or not connected to the same database.
See <a href="https://github.com/plan-player-analytics/Plan/wiki">wiki</a> for Network tutorial.</p>
</Card.Body>}
{servers.length && <ServersTable servers={servers}
onSelect={onSelect}
sortBy={sortBy}
sortReversed={sortReversed}/>}
{Boolean(servers.length) && <ServersTable servers={servers}
onSelect={onSelect}
sortBy={sortBy}
sortReversed={sortReversed}/>}
</Card>
)
};

View File

@ -14,8 +14,9 @@ const isCurrentAddress = (address) => {
export const baseAddress = javaReplaced.address.startsWith('PLAN_') || !isCurrentAddress(javaReplaced.address) ? "" : javaReplaced.address;
export const staticSite = javaReplaced.isStatic === 'true';
export const doSomeGetRequest = async (url, statusOptions) => {
return doSomeRequest(url, statusOptions, async () => axios.get(baseAddress + url));
export const doSomeGetRequest = async (url, updateRequested, statusOptions) => {
return doSomeRequest(url, statusOptions, async () => axios.get(baseAddress + url,
updateRequested ? {headers: {"X-Plan-Timestamp": updateRequested}} : {}));
}
export const doSomePostRequest = async (url, statusOptions, body) => {
@ -72,6 +73,6 @@ export const doSomeRequest = async (url, statusOptions, axiosFunction) => {
export const standard200option = {status: 200, get: response => response.data}
const exported404options = {status: 404, get: () => 'Data not yet exported'}
export const doGetRequest = async url => {
return doSomeGetRequest(url, staticSite ? [standard200option, exported404options] : [standard200option])
export const doGetRequest = async (url, updateRequested) => {
return doSomeGetRequest(url, updateRequested, staticSite ? [standard200option, exported404options] : [standard200option])
}

View File

@ -1,42 +1,42 @@
import {doGetRequest, staticSite} from "./backendConfiguration";
export const fetchNetworkOverview = async (updateRequested) => {
let url = `/v1/network/overview?timestamp=${updateRequested}`;
let url = `/v1/network/overview`;
if (staticSite) url = `/data/network-overview.json`;
return doGetRequest(url);
return doGetRequest(url, updateRequested);
}
export const fetchServersOverview = async (updateRequested) => {
let url = `/v1/network/servers?timestamp=${updateRequested}`;
let url = `/v1/network/servers`;
if (staticSite) url = `/data/network-servers.json`;
return doGetRequest(url);
return doGetRequest(url, updateRequested);
}
export const fetchServerPie = async (timestamp) => {
let url = `/v1/graph?type=serverPie&timestamp=${timestamp}`;
let url = `/v1/graph?type=serverPie`;
if (staticSite) url = `/data/graph-serverPie.json`;
return doGetRequest(url);
return doGetRequest(url, timestamp);
}
export const fetchNetworkSessionsOverview = async (timestamp) => {
let url = `/v1/network/sessionsOverview?timestamp=${timestamp}`;
let url = `/v1/network/sessionsOverview`;
if (staticSite) url = `/data/network-sessionsOverview.json`;
return doGetRequest(url);
return doGetRequest(url, timestamp);
}
export const fetchNetworkPlayerbaseOverview = async (timestamp) => {
let url = `/v1/network/playerbaseOverview?timestamp=${timestamp}`;
let url = `/v1/network/playerbaseOverview`;
if (staticSite) url = `/data/network-playerbaseOverview.json`;
return doGetRequest(url);
return doGetRequest(url, timestamp);
}
export const fetchNetworkPingTable = async (timestamp) => {
let url = `/v1/network/pingTable?timestamp=${timestamp}`;
let url = `/v1/network/pingTable`;
if (staticSite) url = `/data/network-pingTable.json`;
return doGetRequest(url);
return doGetRequest(url, timestamp);
}
export const fetchNetworkPerformanceOverview = async (timestamp, serverUUIDs) => {
let url = `/v1/network/performanceOverview?servers=${encodeURIComponent(JSON.stringify(serverUUIDs))}&timestamp=${timestamp}`;
return doGetRequest(url);
let url = `/v1/network/performanceOverview?servers=${encodeURIComponent(JSON.stringify(serverUUIDs))}`;
return doGetRequest(url, timestamp);
}

View File

@ -2,9 +2,9 @@ import {faMapSigns} from "@fortawesome/free-solid-svg-icons";
import {doSomeGetRequest, standard200option, staticSite} from "./backendConfiguration";
export const fetchPlayer = async (timestamp, uuid) => {
let url = `/v1/player?player=${uuid}&timestamp=${timestamp}`;
let url = `/v1/player?player=${uuid}`;
if (staticSite) url = `/player/${uuid}/player-${uuid}.json`
return doSomeGetRequest(url, [
return doSomeGetRequest(url, timestamp, [
standard200option,
{
status: staticSite ? 404 : 400,

View File

@ -3,49 +3,49 @@ import {doGetRequest, staticSite} from "./backendConfiguration";
export const fetchServerIdentity = async (timestamp, identifier) => {
let url = `/v1/serverIdentity?server=${identifier}`;
if (staticSite) url = `/data/serverIdentity-${identifier}.json`;
return doGetRequest(url);
return doGetRequest(url, timestamp);
}
export const fetchServerOverview = async (timestamp, identifier) => {
let url = `/v1/serverOverview?server=${identifier}&timestamp=${timestamp}`;
let url = `/v1/serverOverview?server=${identifier}`;
if (staticSite) url = `/data/serverOverview-${identifier}.json`;
return doGetRequest(url);
return doGetRequest(url, timestamp);
}
export const fetchOnlineActivityOverview = async (timestamp, identifier) => {
let url = `/v1/onlineOverview?server=${identifier}&timestamp=${timestamp}`;
let url = `/v1/onlineOverview?server=${identifier}`;
if (staticSite) url = `/data/onlineOverview-${identifier}.json`;
return doGetRequest(url);
return doGetRequest(url, timestamp);
}
export const fetchPlayerbaseOverview = async (timestamp, identifier) => {
let url = `/v1/playerbaseOverview?server=${identifier}&timestamp=${timestamp}`;
let url = `/v1/playerbaseOverview?server=${identifier}`;
if (staticSite) url = `/data/playerbaseOverview-${identifier}.json`;
return doGetRequest(url);
return doGetRequest(url, timestamp);
}
export const fetchSessionOverview = async (timestamp, identifier) => {
let url = `/v1/sessionsOverview?server=${identifier}&timestamp=${timestamp}`;
let url = `/v1/sessionsOverview?server=${identifier}`;
if (staticSite) url = `/data/sessionsOverview-${identifier}.json`;
return doGetRequest(url);
return doGetRequest(url, timestamp);
}
export const fetchPvpPve = async (timestamp, identifier) => {
let url = `/v1/playerVersus?server=${identifier}&timestamp=${timestamp}`;
let url = `/v1/playerVersus?server=${identifier}`;
if (staticSite) url = `/data/playerVersus-${identifier}.json`;
return doGetRequest(url);
return doGetRequest(url, timestamp);
}
export const fetchPerformanceOverview = async (timestamp, identifier) => {
let url = `/v1/performanceOverview?server=${identifier}&timestamp=${timestamp}`;
let url = `/v1/performanceOverview?server=${identifier}`;
if (staticSite) url = `/data/performanceOverview-${identifier}.json`;
return doGetRequest(url);
return doGetRequest(url, timestamp);
}
export const fetchExtensionData = async (timestamp, identifier) => {
let url = `/v1/extensionData?server=${identifier}&timestamp=${timestamp}`;
let url = `/v1/extensionData?server=${identifier}`;
if (staticSite) url = `/data/extensionData-${identifier}.json`;
return doGetRequest(url);
return doGetRequest(url, timestamp);
}
export const fetchSessions = async (timestamp, identifier) => {
@ -57,21 +57,21 @@ export const fetchSessions = async (timestamp, identifier) => {
}
const fetchSessionsServer = async (timestamp, identifier) => {
let url = `/v1/sessions?server=${identifier}&timestamp=${timestamp}`;
let url = `/v1/sessions?server=${identifier}`;
if (staticSite) url = `/data/sessions-${identifier}.json`;
return doGetRequest(url);
return doGetRequest(url, timestamp);
}
const fetchSessionsNetwork = async (timestamp) => {
let url = `/v1/sessions?timestamp=${timestamp}`;
let url = `/v1/sessions`;
if (staticSite) url = `/data/sessions.json`;
return doGetRequest(url);
return doGetRequest(url, timestamp);
}
export const fetchKills = async (timestamp, identifier) => {
let url = `/v1/kills?server=${identifier}&timestamp=${timestamp}`;
let url = `/v1/kills?server=${identifier}`;
if (staticSite) url = `/data/kills-${identifier}.json`;
return doGetRequest(url);
return doGetRequest(url, timestamp);
}
export const fetchPlayers = async (timestamp, identifier) => {
@ -82,21 +82,21 @@ export const fetchPlayers = async (timestamp, identifier) => {
}
}
const fetchPlayersServer = async (timestamp, identifier) => {
let url = `/v1/players?server=${identifier}&timestamp=${timestamp}`;
let url = `/v1/players?server=${identifier}`;
if (staticSite) url = `/data/players-${identifier}.json`;
return doGetRequest(url);
return doGetRequest(url, timestamp);
}
const fetchPlayersNetwork = async (timestamp) => {
let url = `/v1/players?timestamp=${timestamp}`;
let url = `/v1/players`;
if (staticSite) url = `/data/players.json`;
return doGetRequest(url);
return doGetRequest(url, timestamp);
}
export const fetchPingTable = async (timestamp, identifier) => {
let url = `/v1/pingTable?server=${identifier}&timestamp=${timestamp}`;
let url = `/v1/pingTable?server=${identifier}`;
if (staticSite) url = `/data/pingTable-${identifier}.json`;
return doGetRequest(url);
return doGetRequest(url, timestamp);
}
export const fetchPlayersOnlineGraph = async (timestamp, identifier) => {
@ -108,15 +108,15 @@ export const fetchPlayersOnlineGraph = async (timestamp, identifier) => {
}
const fetchPlayersOnlineGraphServer = async (timestamp, identifier) => {
let url = `/v1/graph?type=playersOnline&server=${identifier}&timestamp=${timestamp}`;
let url = `/v1/graph?type=playersOnline&server=${identifier}`;
if (staticSite) url = `/data/graph-playersOnline_${identifier}.json`;
return doGetRequest(url);
return doGetRequest(url, timestamp);
}
const fetchPlayersOnlineGraphNetwork = async (timestamp) => {
let url = `/v1/graph?type=playersOnline&timestamp=${timestamp}`;
let url = `/v1/graph?type=playersOnline`;
if (staticSite) url = `/data/graph-playersOnline.json`;
return doGetRequest(url);
return doGetRequest(url, timestamp);
}
export const fetchPlayerbaseDevelopmentGraph = async (timestamp, identifier) => {
@ -128,15 +128,15 @@ export const fetchPlayerbaseDevelopmentGraph = async (timestamp, identifier) =>
}
const fetchPlayerbaseDevelopmentGraphServer = async (timestamp, identifier) => {
let url = `/v1/graph?type=activity&server=${identifier}&timestamp=${timestamp}`;
let url = `/v1/graph?type=activity&server=${identifier}`;
if (staticSite) url = `/data/graph-activity_${identifier}.json`;
return doGetRequest(url);
return doGetRequest(url, timestamp);
}
const fetchPlayerbaseDevelopmentGraphNetwork = async (timestamp) => {
let url = `/v1/graph?type=activity&timestamp=${timestamp}`;
let url = `/v1/graph?type=activity`;
if (staticSite) url = `/data/graph-activity.json`;
return doGetRequest(url);
return doGetRequest(url, timestamp);
}
export const fetchDayByDayGraph = async (timestamp, identifier) => {
@ -148,15 +148,15 @@ export const fetchDayByDayGraph = async (timestamp, identifier) => {
}
const fetchDayByDayGraphServer = async (timestamp, identifier) => {
let url = `/v1/graph?type=uniqueAndNew&server=${identifier}&timestamp=${timestamp}`;
let url = `/v1/graph?type=uniqueAndNew&server=${identifier}`;
if (staticSite) url = `/data/graph-uniqueAndNew_${identifier}.json`;
return doGetRequest(url);
return doGetRequest(url, timestamp);
}
const fetchDayByDayGraphNetwork = async (timestamp) => {
let url = `/v1/graph?type=uniqueAndNew&timestamp=${timestamp}`;
let url = `/v1/graph?type=uniqueAndNew`;
if (staticSite) url = `/data/graph-uniqueAndNew.json`;
return doGetRequest(url);
return doGetRequest(url, timestamp);
}
export const fetchHourByHourGraph = async (timestamp, identifier) => {
@ -168,33 +168,33 @@ export const fetchHourByHourGraph = async (timestamp, identifier) => {
}
const fetchHourByHourGraphServer = async (timestamp, identifier) => {
let url = `/v1/graph?type=hourlyUniqueAndNew&server=${identifier}&timestamp=${timestamp}`;
let url = `/v1/graph?type=hourlyUniqueAndNew&server=${identifier}`;
if (staticSite) url = `/data/graph-hourlyUniqueAndNew_${identifier}.json`;
return doGetRequest(url);
return doGetRequest(url, timestamp);
}
const fetchHourByHourGraphNetwork = async (timestamp) => {
let url = `/v1/graph?type=hourlyUniqueAndNew&timestamp=${timestamp}`;
let url = `/v1/graph?type=hourlyUniqueAndNew`;
if (staticSite) url = `/data/graph-hourlyUniqueAndNew.json`;
return doGetRequest(url);
return doGetRequest(url, timestamp);
}
export const fetchServerCalendarGraph = async (timestamp, identifier) => {
let url = `/v1/graph?type=serverCalendar&server=${identifier}&timestamp=${timestamp}`;
let url = `/v1/graph?type=serverCalendar&server=${identifier}`;
if (staticSite) url = `/data/graph-serverCalendar_${identifier}.json`;
return doGetRequest(url);
return doGetRequest(url, timestamp);
}
export const fetchPunchCardGraph = async (timestamp, identifier) => {
let url = `/v1/graph?type=punchCard&server=${identifier}&timestamp=${timestamp}`;
let url = `/v1/graph?type=punchCard&server=${identifier}`;
if (staticSite) url = `/data/graph-punchCard_${identifier}.json`;
return doGetRequest(url);
return doGetRequest(url, timestamp);
}
export const fetchWorldPie = async (timestamp, identifier) => {
let url = `/v1/graph?type=worldPie&server=${identifier}&timestamp=${timestamp}`;
let url = `/v1/graph?type=worldPie&server=${identifier}`;
if (staticSite) url = `/data/graph-worldPie_${identifier}.json`;
return doGetRequest(url);
return doGetRequest(url, timestamp);
}
export const fetchGeolocations = async (timestamp, identifier) => {
@ -206,27 +206,27 @@ export const fetchGeolocations = async (timestamp, identifier) => {
}
const fetchGeolocationsServer = async (timestamp, identifier) => {
let url = `/v1/graph?type=geolocation&server=${identifier}&timestamp=${timestamp}`;
let url = `/v1/graph?type=geolocation&server=${identifier}`;
if (staticSite) url = `/data/graph-geolocation_${identifier}.json`;
return doGetRequest(url);
return doGetRequest(url, timestamp);
}
const fetchGeolocationsNetwork = async (timestamp) => {
let url = `/v1/graph?type=geolocation&timestamp=${timestamp}`;
let url = `/v1/graph?type=geolocation`;
if (staticSite) url = `/data/graph-geolocation.json`;
return doGetRequest(url);
return doGetRequest(url, timestamp);
}
export const fetchOptimizedPerformance = async (timestamp, identifier, after) => {
let url = `/v1/graph?type=optimizedPerformance&server=${identifier}&timestamp=${timestamp}&after=${after}`;
export const fetchOptimizedPerformance = async (timestamp, identifier) => {
let url = `/v1/graph?type=optimizedPerformance&server=${identifier}`;
if (staticSite) url = `/data/graph-optimizedPerformance_${identifier}.json`;
return doGetRequest(url);
return doGetRequest(url, timestamp);
}
export const fetchPingGraph = async (timestamp, identifier) => {
let url = `/v1/graph?type=aggregatedPing&server=${identifier}&timestamp=${timestamp}`;
let url = `/v1/graph?type=aggregatedPing&server=${identifier}`;
if (staticSite) url = `/data/graph-aggregatedPing_${identifier}.json`;
return doGetRequest(url);
return doGetRequest(url, timestamp);
}
export const fetchJoinAddressPie = async (timestamp, identifier) => {
@ -238,15 +238,15 @@ export const fetchJoinAddressPie = async (timestamp, identifier) => {
}
const fetchJoinAddressPieServer = async (timestamp, identifier) => {
let url = `/v1/graph?type=joinAddressPie&server=${identifier}&timestamp=${timestamp}`;
let url = `/v1/graph?type=joinAddressPie&server=${identifier}`;
if (staticSite) url = `/data/graph-joinAddressPie_${identifier}.json`;
return doGetRequest(url);
return doGetRequest(url, timestamp);
}
const fetchJoinAddressPieNetwork = async (timestamp) => {
let url = `/v1/graph?type=joinAddressPie&timestamp=${timestamp}`;
let url = `/v1/graph?type=joinAddressPie`;
if (staticSite) url = `/data/graph-joinAddressPie.json`;
return doGetRequest(url);
return doGetRequest(url, timestamp);
}
export const fetchJoinAddressByDay = async (timestamp, identifier) => {
@ -258,13 +258,13 @@ export const fetchJoinAddressByDay = async (timestamp, identifier) => {
}
const fetchJoinAddressByDayServer = async (timestamp, identifier) => {
let url = `/v1/graph?type=joinAddressByDay&server=${identifier}&timestamp=${timestamp}`;
let url = `/v1/graph?type=joinAddressByDay&server=${identifier}`;
if (staticSite) url = `/data/graph-joinAddressByDay_${identifier}.json`;
return doGetRequest(url);
return doGetRequest(url, timestamp);
}
const fetchJoinAddressByDayNetwork = async (timestamp) => {
let url = `/v1/graph?type=joinAddressByDay&timestamp=${timestamp}`;
let url = `/v1/graph?type=joinAddressByDay`;
if (staticSite) url = `/data/graph-joinAddressByDay.json`;
return doGetRequest(url);
return doGetRequest(url, timestamp);
}

View File

@ -52,13 +52,11 @@ const NetworkPerformance = () => {
timestamp_f: ''
}
const time = new Date().getTime();
const monthMs = 2592000000;
const after = time - monthMs;
for (const index of visualizedServers) {
const server = serverOptions[index];
const {data, error} = await fetchOptimizedPerformance(time, encodeURIComponent(server.serverUUID), after);
const {data, error} = await fetchOptimizedPerformance(time, encodeURIComponent(server.serverUUID));
if (data) {
loaded.servers.push(server);
const values = data.values;

View File

@ -19,7 +19,8 @@ const NetworkServers = () => {
return (
<Row>
<Col md={6}>
<ServersTableCard servers={data?.servers || []} onSelect={(index) => setSelectedServer(index)}/>
<ServersTableCard loaded={Boolean(data)} servers={data?.servers || []}
onSelect={(index) => setSelectedServer(index)}/>
</Col>
<Col md={6}>
{data?.servers.length && <QuickViewGraphCard server={data.servers[selectedServer]}/>}

View File

@ -1022,7 +1022,7 @@
core-js-pure "^3.20.2"
regenerator-runtime "^0.13.4"
"@babel/runtime@^7.10.2", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.1", "@babel/runtime@^7.12.5", "@babel/runtime@^7.14.5", "@babel/runtime@^7.15.4", "@babel/runtime@^7.16.3", "@babel/runtime@^7.19.4", "@babel/runtime@^7.20.6", "@babel/runtime@^7.3.1", "@babel/runtime@^7.4.2", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.3", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2":
"@babel/runtime@^7.10.2", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.1", "@babel/runtime@^7.12.5", "@babel/runtime@^7.15.4", "@babel/runtime@^7.16.3", "@babel/runtime@^7.19.4", "@babel/runtime@^7.20.6", "@babel/runtime@^7.3.1", "@babel/runtime@^7.4.2", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.3", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2":
version "7.20.6"
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.20.6.tgz#facf4879bfed9b5326326273a64220f099b0fce3"
integrity sha512-Q+8MqP7TiHMWzSfwiJwXCjyf4GYA4Dgw3emg/7xmwsdLJOZUp+nMqcOwOzzYheuM1rhDu8FSj2l0aoMygEuXuA==
@ -1525,10 +1525,10 @@
resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.5.tgz#db5a11bf66bdab39569719555b0f76e138d7bd64"
integrity sha512-9X2obfABZuDVLCgPK9aX0a/x4jaOEweTTWE2+9sr0Qqqevj2Uv5XorvusThmc9XGYpS9yI+fhh8RTafBtGposw==
"@remix-run/router@1.0.5":
version "1.0.5"
resolved "https://registry.yarnpkg.com/@remix-run/router/-/router-1.0.5.tgz#d5c65626add4c3c185a89aa5bd38b1e42daec075"
integrity sha512-my0Mycd+jruq/1lQuO5LBB6WTlL/e8DTCYWp44DfMTDcXz8DcTlgF0ISaLsGewt+ctHN+yA8xMq3q/N7uWJPug==
"@remix-run/router@1.3.0":
version "1.3.0"
resolved "https://registry.yarnpkg.com/@remix-run/router/-/router-1.3.0.tgz#b6ee542c7f087b73b3d8215b9bf799f648be71cb"
integrity sha512-nwQoYb3m4DDpHTeOwpJEuDt8lWVcujhYYSFGLluC+9es2PyLjm+jjq3IeRBQbwBtPLJE/lkuHuGHr8uQLgmJRA==
"@restart/context@^2.1.4":
version "2.1.4"
@ -2662,10 +2662,10 @@ axe-core@^4.3.5:
resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.4.1.tgz#7dbdc25989298f9ad006645cd396782443757413"
integrity sha512-gd1kmb21kwNuWr6BQz8fv6GNECPBnUasepcoLbekws23NVBLODdsClRZ+bQ8+9Uomf3Sm3+Vwn0oYG9NvwnJCw==
axios@^1.2.2:
version "1.2.2"
resolved "https://registry.yarnpkg.com/axios/-/axios-1.2.2.tgz#72681724c6e6a43a9fea860fc558127dbe32f9f1"
integrity sha512-bz/J4gS2S3I7mpN/YZfGFTqhXTYzRho8Ay38w2otuuDR322KzFIWm/4W2K6gIwvWaws5n+mnb7D1lN9uD+QH6Q==
axios@^1.2.3:
version "1.2.3"
resolved "https://registry.yarnpkg.com/axios/-/axios-1.2.3.tgz#31a3d824c0ebf754a004b585e5f04a5f87e6c4ff"
integrity sha512-pdDkMYJeuXLZ6Xj/Q5J3Phpe+jbGdsSzlQaFVkMQzRUL05+6+tetX8TV3p4HrU4kzuO9bt+io/yGQxuyxA/xcw==
dependencies:
follow-redirects "^1.15.0"
form-data "^4.0.0"
@ -5091,10 +5091,10 @@ i18next-localstorage-backend@^4.1.0:
dependencies:
"@babel/runtime" "^7.20.6"
i18next@^22.4.8:
version "22.4.8"
resolved "https://registry.yarnpkg.com/i18next/-/i18next-22.4.8.tgz#7a3c5d26a93e8e5f32eee07b58484e2f721fb45b"
integrity sha512-XSOy17ZWqflOiJRYE/dzv6vDle2Se32dnHREHb93UnZzZ1+UnvQ8yKtt1fpNL3zvXz5AwCqqixrtTVZmRetaiQ==
i18next@^22.4.9:
version "22.4.9"
resolved "https://registry.yarnpkg.com/i18next/-/i18next-22.4.9.tgz#98c8384c6bd41ff937da98b1e809ba03d3b41053"
integrity sha512-8gWMmUz460KJDQp/ob3MNUX84cVuDRY9PLFPnV8d+Qezz/6dkjxwOaH70xjrCNDO+JrUL25iXfAIN9wUkInNZw==
dependencies:
"@babel/runtime" "^7.20.6"
@ -7728,12 +7728,12 @@ react-error-overlay@^6.0.11:
resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-6.0.11.tgz#92835de5841c5cf08ba00ddd2d677b6d17ff9adb"
integrity sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==
react-i18next@^12.1.1:
version "12.1.1"
resolved "https://registry.yarnpkg.com/react-i18next/-/react-i18next-12.1.1.tgz#2626cdbfe6bcb76ef833861c0184a5c4e5e3c089"
integrity sha512-mFdieOI0LDy84q3JuZU6Aou1DoWW2fhapcTGeBS8+vWSJuViuoCLQAMYSb0QoHhXS8B0WKUOPpx4cffAP7r/aA==
react-i18next@^12.1.4:
version "12.1.4"
resolved "https://registry.yarnpkg.com/react-i18next/-/react-i18next-12.1.4.tgz#be0a60d3a45acc4321909f8a4b8cde16518a2926"
integrity sha512-XQND7jYtgM7ht5PH3yIZljCRpAMTlH/zmngM9ZjToqa+0BR6xuu8c7QF0WIIOEjcMTB2S3iOfpN/xG/ZrAnO6g==
dependencies:
"@babel/runtime" "^7.14.5"
"@babel/runtime" "^7.20.6"
html-parse-stringify "^3.0.1"
react-immutable-proptypes@2.2.0:
@ -7805,19 +7805,19 @@ react-refresh@^0.11.0:
integrity sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A==
react-router-dom@6:
version "6.4.5"
resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-6.4.5.tgz#4fdb12efef4f3848c693a76afbeaed1f6ca02047"
integrity sha512-a7HsgikBR0wNfroBHcZUCd9+mLRqZS8R5U1Z1mzLWxFXEkUT3vR1XXmSIVoVpxVX8Bar0nQYYYc9Yipq8dWwAA==
version "6.7.0"
resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-6.7.0.tgz#0249f4ca4eb704562b8b0ff29caeb928c3a6ed38"
integrity sha512-jQtXUJyhso3kFw430+0SPCbmCmY1/kJv8iRffGHwHy3CkoomGxeYzMkmeSPYo6Egzh3FKJZRAL22yg5p2tXtfg==
dependencies:
"@remix-run/router" "1.0.5"
react-router "6.4.5"
"@remix-run/router" "1.3.0"
react-router "6.7.0"
react-router@6.4.5:
version "6.4.5"
resolved "https://registry.yarnpkg.com/react-router/-/react-router-6.4.5.tgz#73f382af2c8b9a86d74e761a7c5fc3ce7cb0024d"
integrity sha512-1RQJ8bM70YEumHIlNUYc6mFfUDoWa5EgPDenK/fq0bxD8DYpQUi/S6Zoft+9DBrh2xmtg92N5HMAJgGWDhKJ5Q==
react-router@6.7.0:
version "6.7.0"
resolved "https://registry.yarnpkg.com/react-router/-/react-router-6.7.0.tgz#db262684c13b5c2970694084ae9e8531718a0681"
integrity sha512-KNWlG622ddq29MAM159uUsNMdbX8USruoKnwMMQcs/QWZgFUayICSn2oB7reHce1zPj6CG18kfkZIunSSRyGHg==
dependencies:
"@remix-run/router" "1.0.5"
"@remix-run/router" "1.3.0"
react-scripts@5.0.1:
version "5.0.1"