Skip to content

Commit 568d28b

Browse files
Merge pull request #444 from Decatur-Robotics/main
Updating offline mode
2 parents 8d343e9 + 0cc7590 commit 568d28b

19 files changed

Lines changed: 611 additions & 70 deletions

File tree

components/forms/Form.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -188,7 +188,7 @@ export default function Form(props: FormProps) {
188188

189189
const elements = [];
190190

191-
// console.log(`Block: ${rowCount}x${colCount}: ${block.flat().map(e => e.key).join(", ")}`);
191+
//console.log(`Block: ${rowCount}x${colCount}: ${block.flat().map(e => e.key).join(", ")}`);
192192
for (let r = 0; r < rowCount; r++) {
193193
for (let c = 0; c < colCount; c++) {
194194
let topRounding = "",

components/stats/SmallGraph.tsx

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -103,11 +103,7 @@ export default function SmallGraph(props: {
103103
};
104104

105105
useEffect(() => {
106-
if (
107-
!props.selectedReports ||
108-
(datapoints && currentTeam === props.team && false)
109-
)
110-
return;
106+
if (!props.selectedReports) return;
111107

112108
setDataPoints([]);
113109
setCurrentTeam(props.team);
@@ -126,7 +122,7 @@ export default function SmallGraph(props: {
126122
);
127123
});
128124
}
129-
}, [key, currentTeam, datapoints, props.selectedReports, props.team]);
125+
}, [key, currentTeam, props.selectedReports, props.team]);
130126

131127
if (!props.selectedReports) {
132128
return <></>;
@@ -141,13 +137,9 @@ export default function SmallGraph(props: {
141137
console.log(e.target.value);
142138
setKey(e.target.value);
143139
}}
140+
defaultValue={"selected"}
144141
>
145-
<option
146-
disabled
147-
selected
148-
>
149-
Select Variable
150-
</option>
142+
<option disabled>Select Variable</option>
151143
{keys.map((key) => (
152144
<option
153145
key={key}

lib/Enums.ts

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,3 +81,31 @@ export namespace IntoTheDeepEnums {
8181
HighLevelClimb = "High Level Climb",
8282
}
8383
}
84+
85+
export namespace ReefscapeEnums {
86+
export enum EndgameClimbStatus {
87+
None = "None",
88+
Park = "Park",
89+
High = "High",
90+
Low = "Low",
91+
}
92+
93+
export enum DriveThroughDeepCage {
94+
No = "No",
95+
Slow = "Slow",
96+
Fast = "Fast",
97+
}
98+
99+
export enum AutoCapabilities {
100+
NoAuto = "No Auto",
101+
MovePastStart = "Move Past Start",
102+
ScoreOneCoral = "Score One Coral",
103+
ScoreMoreThanOneCoral = "ScoreMoreThanOneCoral",
104+
}
105+
106+
export enum Climbing {
107+
No = "No",
108+
Deep = "Deep",
109+
Shallow = "Shallow",
110+
}
111+
}

lib/Layout.ts

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import {
99
CenterStageEnums,
1010
IntoTheDeepEnums,
1111
FtcDrivetrain,
12+
ReefscapeEnums,
1213
} from "./Enums";
1314
import { PitReportData, QuantData, Pitreport, Report, League } from "./Types";
1415

@@ -143,6 +144,14 @@ export type StatPair<
143144
label: string;
144145
};
145146

147+
export type StatGroup<
148+
TPitData extends PitReportData,
149+
TQuantData extends QuantData,
150+
> = {
151+
stats: Stat<TPitData, TQuantData>[];
152+
label: string;
153+
};
154+
146155
export type StatsLayout<
147156
TPitData extends PitReportData,
148157
TQuantData extends QuantData,
@@ -204,6 +213,10 @@ export function keyToType(
204213
CenterStageEnums.AutoSidePreference,
205214
IntoTheDeepEnums.StartedWith,
206215
IntoTheDeepEnums.EndgameLevelClimbed,
216+
ReefscapeEnums.AutoCapabilities,
217+
ReefscapeEnums.Climbing,
218+
ReefscapeEnums.DriveThroughDeepCage,
219+
ReefscapeEnums.EndgameClimbStatus,
207220
];
208221

209222
if (key === "Defense") return Defense;
@@ -213,6 +226,11 @@ export function keyToType(
213226
if (key === "EndgameLevelClimbed")
214227
return IntoTheDeepEnums.EndgameLevelClimbed;
215228

229+
if (key == "AutoCapabilities") return ReefscapeEnums.AutoCapabilities;
230+
if (key == "Climbing") return ReefscapeEnums.Climbing;
231+
if (key == "DriveThroughDeepCage") return ReefscapeEnums.DriveThroughDeepCage;
232+
if (key == "EndgameClimbStatus") return ReefscapeEnums.EndgameClimbStatus;
233+
216234
for (const e of enums) {
217235
if (Object.values(e).includes(exampleData[key])) return e;
218236
}

lib/Types.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,7 @@ export class Game<
171171

172172
fieldImagePrefix: string;
173173
coverImage: string;
174+
coverImageClass: string;
174175

175176
getBadges: (
176177
pitData: Pitreport<TPitData> | undefined,
@@ -201,6 +202,7 @@ export class Game<
201202
pitStatsLayout: PitStatsLayout<TPitData, TQuantData>,
202203
fieldImagePrefix: string,
203204
coverImage: string,
205+
coverImageClass: string | undefined,
204206
getBadges: (
205207
pitData: Pitreport<TPitData> | undefined,
206208
quantitativeReports: Report<TQuantData>[] | undefined,
@@ -234,6 +236,7 @@ export class Game<
234236

235237
this.fieldImagePrefix = fieldImagePrefix;
236238
this.coverImage = coverImage;
239+
this.coverImageClass = coverImageClass ?? "";
237240

238241
this.getBadges = getBadges;
239242
this.getAvgPoints = getAvgPoints;

lib/api/ClientApi.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -907,7 +907,7 @@ export default class ClientApi extends NextApiTemplate<ApiDependencies> {
907907
isAuthorized: AccessLevels.AlwaysAuthorized,
908908
handler: async (req, res, { tba }, authData, [tbaId]) => {
909909
const compRankings = await tba.req.getCompetitonRanking(tbaId);
910-
return res.status(200).send(compRankings.rankings);
910+
return res.status(200).send(compRankings?.rankings);
911911
},
912912
});
913913

lib/client/GameId.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ export enum GameId {
22
Crescendo = "Crescendo",
33
CenterStage = "CenterStage",
44
IntoTheDeep = "IntoTheDeep",
5+
Reefscape = "Reefscape",
56
}
67

78
export const defaultGameId = GameId.Crescendo;

lib/client/StatsMath.ts

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,3 +118,31 @@ export function ComparativePercent<T extends QuantData>(
118118

119119
return Round((a / (b + a)) * 100) + "%";
120120
}
121+
122+
/**
123+
* @tested_by tests/lib/client/StatsMath.test.ts
124+
*/
125+
export function ComparativePercentMulti<T extends QuantData>(
126+
selectors: Selector<T>[],
127+
reports: Report<T>[],
128+
) {
129+
const results: string[] = [];
130+
const totals = selectors.map((selectors) =>
131+
NumericalTotal(selectors, reports),
132+
);
133+
134+
let sum = 0;
135+
for (let i = 0; i < totals.length; i++) {
136+
sum += totals[i];
137+
}
138+
139+
for (let i = 0; i < totals.length; i++) {
140+
results.push(Round((totals[i] / sum) * 100) + "%");
141+
}
142+
143+
if (sum === 0) {
144+
return 0;
145+
}
146+
147+
return results;
148+
}

lib/client/useInterval.ts

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,23 @@
1-
import { useEffect, useState } from "react";
1+
import { useCallback, useEffect, useState } from "react";
22

33
/**
44
* Can be janky. You've been warned.
55
*/
6+
67
export default function useInterval(
78
func: () => any,
89
interval: number,
910
deps: any[] = [],
1011
) {
11-
const [id, setId] = useState<NodeJS.Timeout | undefined>(undefined);
12+
const [id, setId] = useState<NodeJS.Timeout>();
13+
const callback = useCallback(func, [func, ...deps]);
1214

1315
useEffect(() => {
14-
setId(setInterval(func, interval));
15-
return () => clearInterval(id);
16-
}, [func.name, interval, func, id, deps]);
16+
console.log("Setting interval", interval);
17+
const newInterval = setInterval(callback, interval);
18+
setId(newInterval);
19+
return () => clearInterval(newInterval);
20+
}, [interval, callback]);
1721

1822
return id;
1923
}

0 commit comments

Comments
 (0)