Skip to content

Commit f2cbbd5

Browse files
committed
better everything
1 parent b811cff commit f2cbbd5

File tree

9 files changed

+109
-80
lines changed

9 files changed

+109
-80
lines changed

src-tauri/src/main.rs

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,7 @@ struct Course {
1616
}
1717

1818
#[tauri::command]
19-
fn get_courses(courses: String) -> String {
20-
// fn get_courses() -> String {
19+
fn get_courses(courses: String) -> Vec<Vec<u16>> {
2120
println!("Courses searched: {}", courses);
2221
let mut free_courses: Vec<Vec<u16>> = vec![vec![], vec![]];
2322

@@ -127,10 +126,7 @@ fn get_courses(courses: String) -> String {
127126
}
128127
}
129128

130-
return format!(
131-
"Course(s) {:?} has/have a free spot. Course(s) {:?} has/have a free waitlist slot.",
132-
free_courses[0], free_courses[1]
133-
);
129+
return free_courses;
134130
}
135131

136132
#[tauri::command]

src/App.tsx

Lines changed: 13 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
import { createEffect, createSignal, For, onMount, Show } from "solid-js";
1+
import { createSignal, For, onMount, Show } from "solid-js";
22
import toast, { Toaster } from "solid-toast";
3-
import "./App.scss";
3+
import "./stylesheets/App.scss";
44

55
import type { Course } from "./utils/types";
66
import { courseMAX, courseMIN } from "./utils/types";
@@ -11,10 +11,13 @@ import {
1111
courses,
1212
setCourses,
1313
} from "./utils/dataManagement";
14+
import Results from "./components/Results";
15+
import CourseEntry from "./components/CourseEntry";
1416

1517
const App = () => {
16-
const [data, setData] = createSignal("No data fetched!");
17-
const [newCourse, setNewCourse] = createSignal(0);
18+
const [courseData, setCourseData] = createSignal<number[][]>([]);
19+
const [newCourse, setNewCourse] = createSignal<number>(0);
20+
const [fetched, setFetched] = createSignal<boolean>(false);
1821

1922
onMount(() => {
2023
const localStorageItems: string = localStorage.getItem("courses") || "";
@@ -29,7 +32,8 @@ const App = () => {
2932
return;
3033
}
3134

32-
setData("Loading");
35+
setCourseData([]);
36+
setFetched(true);
3337
const loadToast = toast.loading("Fetching your data");
3438

3539
const courseArr = courses
@@ -40,7 +44,7 @@ const App = () => {
4044
return el.courseNum;
4145
});
4246

43-
setData(await get_courses(courseArr));
47+
setCourseData(await get_courses(courseArr));
4448

4549
toast.remove(loadToast);
4650
toast.success("Retrieved!");
@@ -51,37 +55,7 @@ const App = () => {
5155
<Toaster />
5256
<h1>Georgia Tech self-course checker!</h1>
5357
<For each={courses}>
54-
{(course: Course) => (
55-
<div>
56-
<input
57-
value={course.courseNum}
58-
min={courseMIN}
59-
max={courseMAX}
60-
type="number"
61-
onChange={async (e) => {
62-
const idx = courses.findIndex(
63-
(el: Course) => el.courseNum === course.courseNum
64-
);
65-
setCourses(idx, { courseNum: e.target.value as number });
66-
}}
67-
/>
68-
<button
69-
onClick={() => {
70-
setCourses(
71-
courses.filter((el: any) => el.courseNum !== course.courseNum)
72-
);
73-
}}
74-
>
75-
&#10060 Remove
76-
</button>
77-
<Show when={course.valid}>
78-
<button>&#x2705 Course CRN is valid</button>
79-
</Show>
80-
<Show when={!course.valid}>
81-
<button>! CRN Doesn't exist !</button>
82-
</Show>
83-
</div>
84-
)}
58+
{(course: Course) => <CourseEntry course={course} />}
8559
</For>
8660
<hr />
8761
<div class="row">
@@ -105,12 +79,13 @@ const App = () => {
10579
<button type="button" onClick={saveCourses}>
10680
Save Courses
10781
</button>
82+
10883
<br />
10984
<button type="button" onClick={getData}>
11085
Get Course Data
11186
</button>
11287

113-
<h2>{data()}</h2>
88+
<Results data={courseData()} fetched={fetched()} />
11489

11590
<button type="button" onClick={openLink}>
11691
Go register!

src/components/CourseEntry.tsx

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
import { Component, Show } from "solid-js";
2+
import { SetStoreFunction } from "solid-js/store";
3+
4+
import { courses, setCourses } from "../utils/dataManagement";
5+
import { courseMAX, courseMIN, Course } from "../utils/types";
6+
7+
const CourseEntry: Component<{ course: Course }> = (props) => {
8+
return (
9+
<div>
10+
<input
11+
value={props.course.courseNum}
12+
min={courseMIN}
13+
max={courseMAX}
14+
type="number"
15+
onChange={async (e) => {
16+
const idx = courses.findIndex(
17+
(el: Course) => el.courseNum === props.course.courseNum
18+
);
19+
setCourses(idx, { courseNum: e.target.value as number });
20+
}}
21+
/>
22+
<button
23+
onClick={() => {
24+
setCourses(
25+
courses.filter((el: any) => el.courseNum !== props.course.courseNum)
26+
);
27+
}}
28+
>
29+
&#10060 Remove
30+
</button>
31+
<Show when={props.course.valid}>
32+
<button>&#x2705 Course CRN is valid</button>
33+
</Show>
34+
<Show when={!props.course.valid}>
35+
<button>! CRN Doesn't exist !</button>
36+
</Show>
37+
</div>
38+
);
39+
};
40+
41+
export default CourseEntry;

src/components/Results.tsx

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
import { Component, createEffect, For, onMount } from "solid-js";
2+
3+
const Results: Component<{ data: number[][]; fetched: boolean }> = (props) => {
4+
onMount(() => {
5+
return <h1>No data fetched.</h1>;
6+
});
7+
8+
return (
9+
<div>
10+
{props.fetched ? (
11+
<>
12+
{props.data.length === 0 && <h2>Loading...</h2>}
13+
{props.data[0] && props.data[0].length !== 0 && (
14+
<>
15+
<h2>
16+
Courses with available seats:
17+
<ul>
18+
<For each={props.data[0]}>
19+
{(courseNum: number) => <li>{courseNum}</li>}
20+
</For>
21+
</ul>
22+
</h2>
23+
</>
24+
)}
25+
{props.data[1] && props.data[1].length !== 0 && (
26+
<>
27+
<h2>
28+
Courses with available waitlist seats:
29+
<ul>
30+
<For each={props.data[1]}>
31+
{(courseNum: number) => <li>{courseNum}</li>}
32+
</For>
33+
</ul>
34+
</h2>
35+
</>
36+
)}
37+
{props.data[0] &&
38+
props.data[1] &&
39+
props.data[0].length === 0 &&
40+
props.data[1].length === 0 && <h2>Nothing is available.</h2>}
41+
</>
42+
) : (
43+
<h2>You haven't checked yet.</h2>
44+
)}
45+
</div>
46+
);
47+
};
48+
49+
export default Results;

src/components/courseTag.tsx

Lines changed: 0 additions & 32 deletions
This file was deleted.

src/index.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
/* @refresh reload */
22
import { render } from "solid-js/web";
33

4-
import "./global.scss";
4+
import "./stylesheets/global.scss";
55
import App from "./App";
66

77
render(() => <App />, document.getElementById("root") as HTMLElement);

src/App.scss renamed to src/stylesheets/App.scss

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
.container {
22
margin: 0;
3-
padding-top: 10vh;
3+
padding-top: 5vh;
44
display: flex;
55
flex-direction: column;
6-
justify-content: center;
6+
// justify-content: center;
77
text-align: center;
88
}
99

src/utils/backend.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ export const checkCourseExists = async (
3838

3939
export const get_courses = async (courseArr: number[]) => {
4040
const data = await invoke("get_courses", { courses: courseArr.join(" ") });
41-
return data as string;
41+
return data as number[][];
4242
};
4343

4444
export const openLink = async () => {

0 commit comments

Comments
 (0)