Skip to content

Commit dcb3b23

Browse files
committed
better way to not crash app (course checking etc.)
1 parent 69054dd commit dcb3b23

File tree

2 files changed

+45
-39
lines changed

2 files changed

+45
-39
lines changed

src/App.tsx

Lines changed: 40 additions & 35 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,44 +88,61 @@ const App = () => {
10288
}
10389
});
10490

105-
const saveCourses = () => {
106-
toast.loading("Saving courses...");
107-
checkCoursesValid();
108-
localStorage.setItem("courses", JSON.stringify(courses));
109-
toast.remove();
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+
110104
toast.success("Course CRNs saved!");
105+
console.log("Course CRNs saved!");
106+
toast.remove(loadToast);
107+
108+
return true;
111109
};
112110

113111
const checkCoursesValid = async () => {
114-
let invalidCoursesIdx: number[] = [];
112+
let invalidCourses: number[] = [];
113+
let validCourses: number[] = [];
115114

116115
console.log(courses);
117116

118117
for (let i = 0; i < courses.length; i++) {
119118
const courseExists = await checkCourseExists(courses[i].courseNum);
120119
if (!courseExists) {
121-
invalidCoursesIdx.push(i);
122-
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!`);
123125
}
124126
}
125127

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

128-
for (let i = 0; i < invalidCoursesIdx.length; i++) {
129-
console.log(invalidCoursesIdx[i]);
130-
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 });
131136
}
132137
};
133138

134139
const getData = async () => {
135-
if (courses.length == 0) {
136-
toast.error("Add a course before fetching data!");
140+
if (!(await saveCourses())) {
137141
return;
138142
}
139143

140-
saveCourses();
141-
// setData("Loading");
142-
toast.loading("Fetching your data");
144+
setData("Loading");
145+
const loadToast = toast.loading("Fetching your data");
143146

144147
const courseArr = courses
145148
.filter((el: Course) => {
@@ -152,7 +155,7 @@ const App = () => {
152155
console.log(courseArr);
153156
setData(await get_courses(courseArr));
154157

155-
toast.remove();
158+
toast.remove(loadToast);
156159
toast.success("Retrieved!");
157160
};
158161

@@ -170,14 +173,16 @@ const App = () => {
170173
type="number"
171174
onChange={async (e) => {
172175
const idx = courses.findIndex(
173-
(el: Course) => el.id === course.id
176+
(el: Course) => el.courseNum === course.courseNum
174177
);
175178
setCourses(idx, { courseNum: e.target.value as number });
176179
}}
177180
/>
178181
<button
179182
onClick={() => {
180-
setCourses(courses.filter((el: any) => el.id !== course.id));
183+
setCourses(
184+
courses.filter((el: any) => el.courseNum !== course.courseNum)
185+
);
181186
}}
182187
>
183188
&#10060 Remove

src/utils.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ export const courseMIN = 10000;
55
export const courseMAX = 99999;
66

77
export type Course = {
8-
id: number;
98
courseNum: number;
109
seatAvailable: boolean;
1110
waitlistAvailable: boolean;
@@ -15,7 +14,9 @@ export type Course = {
1514
const existingCourses: number[] = [];
1615
const nonExistingCourses: number[] = [];
1716

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

2122
if (
@@ -34,7 +35,7 @@ export const checkCourseExists = async (courseNumber: number) => {
3435

3536
console.log("invoke");
3637

37-
const exists = await invoke("check_course_exists", {
38+
const exists: boolean = await invoke("check_course_exists", {
3839
courseId: courseNumber,
3940
});
4041

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

4950
const endTime = performance.now();
5051

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

5354
return exists;
5455
};

0 commit comments

Comments
 (0)