-

+
{code}
😔➡️🤖➡️💥
{message}
diff --git a/pages/guide.tsx b/pages/guide.tsx
index 0b35e4cb..0fa5c5bc 100644
--- a/pages/guide.tsx
+++ b/pages/guide.tsx
@@ -34,6 +34,7 @@ export default function Guide() {
The first thing to do is become part of your team. If your team is
@@ -70,6 +71,7 @@ export default function Guide() {
Team managers have the ability to appoint other managers, this means
@@ -84,6 +86,7 @@ export default function Guide() {
Gearbox divides your competitions into various seasons in order to
@@ -102,6 +105,7 @@ export default function Guide() {
Competitions hold all of the relavant data concerning your current
@@ -127,6 +131,7 @@ export default function Guide() {
In the event that gearbox does not have access to match data
diff --git a/pages/index.tsx b/pages/index.tsx
index e515c998..f7c05401 100644
--- a/pages/index.tsx
+++ b/pages/index.tsx
@@ -27,7 +27,7 @@ export default function Homepage() {
if (counterData.teams != null) return;
api.getMainPageCounterData().then(setCounterData);
- });
+ }, [counterData.teams]);
function formatDataPoint(num: number | null): string {
if (num === null || num === undefined) return "?";
@@ -337,6 +337,7 @@ export default function Homepage() {
Insightful Visualizations
@@ -349,6 +350,7 @@ export default function Homepage() {
Minimal UI/UX
@@ -361,6 +363,7 @@ export default function Homepage() {
Integrated Team Management
diff --git a/pages/onboarding.tsx b/pages/onboarding.tsx
index 5e70f0c7..0e0ec00f 100644
--- a/pages/onboarding.tsx
+++ b/pages/onboarding.tsx
@@ -5,7 +5,7 @@ import ClientApi from "@/lib/api/ClientApi";
import { useCurrentSession } from "@/lib/client/useCurrentSession";
import useDynamicState from "@/lib/client/useDynamicState";
import { useRouter } from "next/router";
-import { ChangeEvent, Fragment, useEffect, useState } from "react";
+import { ChangeEvent, Fragment, useCallback, useEffect, useState } from "react";
import { defaultGameId, GameId } from "@/lib/client/GameId";
import { games } from "@/lib/games";
import { Analytics } from "@/lib/client/Analytics";
@@ -32,7 +32,7 @@ export default function Onboarding() {
}>();
const [teamConfirmed, setTeamConfirmed] = useState
(false);
- enum JoinRequestStatus {
+ const enum JoinRequestStatus {
NotRequested,
Requested,
Rejected,
@@ -52,22 +52,23 @@ export default function Onboarding() {
useEffect(() => {
if (session?.user?.teams.length ?? 0 > 0) router.push(`/profile`);
- }, [session?.user?.email]);
+ }, [session?.user?.email, session?.user?.teams.length, router]);
- async function completeOnboarding(redirect: string = "/profile") {
- console.log("Season:", season);
+ const completeOnboarding = useCallback(
+ async (redirect: string = "/profile") => {
+ if (!session?.user?._id) return;
- if (!session?.user?._id) return;
+ api.setOnboardingCompleted(session?.user?._id);
+ router.push(redirect);
- api.setOnboardingCompleted(session?.user?._id);
- router.push(redirect);
-
- Analytics.onboardingCompleted(
- session?.user?.name ?? "Unknown User",
- teamNumber ?? -1,
- league ?? League.FRC,
- );
- }
+ Analytics.onboardingCompleted(
+ session?.user?.name ?? "Unknown User",
+ teamNumber ?? -1,
+ league ?? League.FRC,
+ );
+ },
+ [session?.user?._id, session?.user?.name, teamNumber, league, router],
+ );
async function teamNumberChanged(e: ChangeEvent) {
const number = parseInt(e.target.value);
@@ -106,7 +107,7 @@ export default function Onboarding() {
await api.requestToJoinTeam(team?._id!);
}
- async function updateTeamRequestStatus() {
+ const updateTeamRequestStatus = useCallback(async () => {
if (!session?.user?._id || !teamNumber || !league) {
console.error(
"Missing required fields to update team request status:",
@@ -137,12 +138,26 @@ export default function Onboarding() {
if (requestPending) setJoinRequestStatus(JoinRequestStatus.Requested);
else if (joinRequestStatus === JoinRequestStatus.Requested)
setJoinRequestStatus(JoinRequestStatus.Rejected);
- }
+ }, [
+ session?.user?._id,
+ teamNumber,
+ league,
+ joinRequestStatus,
+ completeOnboarding,
+ JoinRequestStatus.Rejected,
+ JoinRequestStatus.Requested,
+ ]);
useEffect(() => {
const id = setInterval(updateTeamRequestStatus, 5000);
return () => clearInterval(id);
- }, [session?.user?._id, teamNumber, league, joinRequestStatus]);
+ }, [
+ session?.user?._id,
+ teamNumber,
+ league,
+ joinRequestStatus,
+ updateTeamRequestStatus,
+ ]);
async function createTeam() {
if (!team?.name) {
diff --git a/pages/profile.tsx b/pages/profile.tsx
index 1b15f00c..e973e1b0 100644
--- a/pages/profile.tsx
+++ b/pages/profile.tsx
@@ -52,7 +52,7 @@ export default function Profile(props: { teamList: Team[] }) {
if (user?.teams) {
loadTeams();
}
- }, [session?.user]);
+ }, [session?.user, user?.teams]);
const requestTeam = async (teamId: string, teamNumber: number) => {
setLoadingRequest(true);
@@ -210,6 +210,7 @@ export default function Profile(props: { teamList: Team[] }) {
();
- async function runSpeedTest() {
+ const runSpeedTest = useCallback(async () => {
setResultsCompleted(undefined);
const newResults: SpeedTestResponse[] = [];
@@ -100,11 +100,11 @@ export default function SpeedTest() {
setTimes(avgTimes);
setResultsCompleted(undefined);
- }
+ }, []);
useEffect(() => {
runSpeedTest();
- }, []);
+ }, [runSpeedTest]);
return (