Skip to content

Commit a5a6a00

Browse files
authored
Merge pull request #2 from FlipFloop/dev
Don't crash!
2 parents e35d5ee + dcb3b23 commit a5a6a00

File tree

2 files changed

+51
-42
lines changed

2 files changed

+51
-42
lines changed

src/App.tsx

Lines changed: 40 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -66,23 +66,9 @@ const addCourse = async () => {
6666
return;
6767
}
6868

69-
if (courses.length > 0) {
70-
setCourses([
71-
...courses,
72-
{
73-
id: courses[courses.length - 1].id + 1,
74-
courseNum: newCourse(),
75-
seatAvailable: false,
76-
waitlistAvailable: false,
77-
valid: true,
78-
},
79-
]);
80-
return;
81-
}
82-
8369
setCourses([
70+
...courses,
8471
{
85-
id: 1,
8672
courseNum: newCourse(),
8773
seatAvailable: false,
8874
waitlistAvailable: false,
@@ -102,41 +88,61 @@ const App = () => {
10288
}
10389
});
10490

105-
const saveCourses = () => {
106-
checkCoursesValid();
107-
localStorage.setItem("courses", JSON.stringify(courses));
91+
const saveCourses = async () => {
92+
console.log(courses);
93+
const loadToast = toast.loading("Saving courses...");
94+
95+
if (courses.length == 0) {
96+
toast.error("No courses to save/fetch!");
97+
return false;
98+
}
99+
100+
await checkCoursesValid().then(() => {
101+
localStorage.setItem("courses", JSON.stringify(courses));
102+
});
103+
104+
toast.success("Course CRNs saved!");
105+
console.log("Course CRNs saved!");
106+
toast.remove(loadToast);
107+
108+
return true;
108109
};
109110

110111
const checkCoursesValid = async () => {
111-
let invalidCoursesIdx: number[] = [];
112+
let invalidCourses: number[] = [];
113+
let validCourses: number[] = [];
112114

113115
console.log(courses);
114116

115117
for (let i = 0; i < courses.length; i++) {
116118
const courseExists = await checkCourseExists(courses[i].courseNum);
117119
if (!courseExists) {
118-
invalidCoursesIdx.push(i);
119-
console.log(i);
120+
invalidCourses.push(i);
121+
console.log(`Course CRN ${courses[i].courseNum} is invalid!`);
122+
} else {
123+
validCourses.push(i);
124+
console.log(`Course CRN ${courses[i].courseNum} is valid!`);
120125
}
121126
}
122127

123-
console.log("invalid!");
128+
for (let i = 0; i < invalidCourses.length; i++) {
129+
console.log(invalidCourses[i]);
130+
setCourses(invalidCourses[i], { valid: false });
131+
}
124132

125-
for (let i = 0; i < invalidCoursesIdx.length; i++) {
126-
console.log(invalidCoursesIdx[i]);
127-
setCourses(invalidCoursesIdx[i], { valid: false });
133+
for (let i = 0; i < validCourses.length; i++) {
134+
console.log(validCourses[i]);
135+
setCourses(validCourses[i], { valid: true });
128136
}
129137
};
130138

131139
const getData = async () => {
132-
if (courses.length == 0) {
133-
toast.error("Add a course before fetching data!");
140+
if (!(await saveCourses())) {
134141
return;
135142
}
136143

137144
setData("Loading");
138-
toast.loading("Fetching your data");
139-
checkCoursesValid();
145+
const loadToast = toast.loading("Fetching your data");
140146

141147
const courseArr = courses
142148
.filter((el: Course) => {
@@ -149,7 +155,7 @@ const App = () => {
149155
console.log(courseArr);
150156
setData(await get_courses(courseArr));
151157

152-
toast.remove();
158+
toast.remove(loadToast);
153159
toast.success("Retrieved!");
154160
};
155161

@@ -167,14 +173,16 @@ const App = () => {
167173
type="number"
168174
onChange={async (e) => {
169175
const idx = courses.findIndex(
170-
(el: Course) => el.id === course.id
176+
(el: Course) => el.courseNum === course.courseNum
171177
);
172178
setCourses(idx, { courseNum: e.target.value as number });
173179
}}
174180
/>
175181
<button
176182
onClick={() => {
177-
setCourses(courses.filter((el: any) => el.id !== course.id));
183+
setCourses(
184+
courses.filter((el: any) => el.courseNum !== course.courseNum)
185+
);
178186
}}
179187
>
180188
&#10060 Remove

src/utils.ts

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,22 @@
11
import { invoke } from "@tauri-apps/api/tauri";
22
import { open } from "@tauri-apps/api/shell";
33

4+
export const courseMIN = 10000;
5+
export const courseMAX = 99999;
6+
47
export type Course = {
5-
id: number;
68
courseNum: number;
79
seatAvailable: boolean;
810
waitlistAvailable: boolean;
911
valid: boolean;
1012
};
1113

12-
export const openLink = async () => {
13-
open("https://oscar.gatech.edu/bprod/twbkwbis.P_GenMenu?name=bmenu.P_RegMnu");
14-
};
15-
1614
const existingCourses: number[] = [];
1715
const nonExistingCourses: number[] = [];
1816

19-
export const checkCourseExists = async (courseNumber: number) => {
17+
export const checkCourseExists = async (
18+
courseNumber: number
19+
): Promise<boolean> => {
2020
const startTime = performance.now();
2121

2222
if (
@@ -35,7 +35,7 @@ export const checkCourseExists = async (courseNumber: number) => {
3535

3636
console.log("invoke");
3737

38-
const exists = await invoke("check_course_exists", {
38+
const exists: boolean = await invoke("check_course_exists", {
3939
courseId: courseNumber,
4040
});
4141

@@ -49,7 +49,7 @@ export const checkCourseExists = async (courseNumber: number) => {
4949

5050
const endTime = performance.now();
5151

52-
console.log("TTE: " + (endTime - startTime));
52+
console.log("TTE: " + (endTime - startTime) + "ms");
5353

5454
return exists;
5555
};
@@ -59,5 +59,6 @@ export const get_courses = async (courseArr: number[]) => {
5959
return data as string;
6060
};
6161

62-
export const courseMIN = 10000;
63-
export const courseMAX = 99999;
62+
export const openLink = async () => {
63+
open("https://oscar.gatech.edu/bprod/twbkwbis.P_GenMenu?name=bmenu.P_RegMnu");
64+
};

0 commit comments

Comments
 (0)