From a555204cd0cdbf8ac73f4b2c25d9f8e857a36235 Mon Sep 17 00:00:00 2001 From: Sahej Panag Date: Sat, 13 Apr 2024 00:56:42 -0400 Subject: [PATCH] refiling and api call for search --- frontend/src/components/MainSearch.tsx | 78 ----------- frontend/src/main.tsx | 4 +- frontend/src/screens/MainSearch.tsx | 121 ++++++++++++++++++ .../src/{components => screens}/Results.tsx | 2 +- .../{screens => styles}/Results.module.css | 0 5 files changed, 124 insertions(+), 81 deletions(-) delete mode 100644 frontend/src/components/MainSearch.tsx create mode 100644 frontend/src/screens/MainSearch.tsx rename frontend/src/{components => screens}/Results.tsx (95%) rename frontend/src/{screens => styles}/Results.module.css (100%) diff --git a/frontend/src/components/MainSearch.tsx b/frontend/src/components/MainSearch.tsx deleted file mode 100644 index 1a9617e..0000000 --- a/frontend/src/components/MainSearch.tsx +++ /dev/null @@ -1,78 +0,0 @@ -import React, { useState } from 'react'; -import { useNavigate } from 'react-router-dom'; -import '../styles/MainScreenWrapper.css'; - -interface Filters { - professor: string; - course: string; - topic: string; -} - -const MainSearch: React.FC = () => { - const [filters, setFilters] = useState({ - professor: '', - course: '', - topic: '', - }); - - const navigate = useNavigate(); - - const handleChange = (event: React.ChangeEvent) => { - const { name, value } = event.target; - setFilters((prevFilters: Filters) => ({ - ...prevFilters, - [name]: value, - })); - }; - - const handleSubmit = (event: React.FormEvent) => { - event.preventDefault(); - const input = filters.toString() - const searchParams = new URLSearchParams(input) - navigate(`/results?${searchParams}`); - }; - - return ( - <> - PeerNotes Logo -
-
- - -
-
- - -
-
- - -
- -
- - ); -} - -export default MainSearch; diff --git a/frontend/src/main.tsx b/frontend/src/main.tsx index 88bae49..63c137f 100644 --- a/frontend/src/main.tsx +++ b/frontend/src/main.tsx @@ -8,8 +8,8 @@ import { } from "react-router-dom"; import Login from './screens/Login.tsx'; import Signup from './screens/Signup.tsx'; -import Results from './components/Results.tsx'; -import MainSearch from './components/MainSearch.tsx'; +import Results from './screens/Results.tsx'; +import MainSearch from './screens/MainSearch.tsx'; const router = createBrowserRouter([ { diff --git a/frontend/src/screens/MainSearch.tsx b/frontend/src/screens/MainSearch.tsx new file mode 100644 index 0000000..05327f4 --- /dev/null +++ b/frontend/src/screens/MainSearch.tsx @@ -0,0 +1,121 @@ +import React, { useState, useEffect } from 'react'; +import { useNavigate } from 'react-router-dom'; +import '../styles/MainScreenWrapper.css'; + +interface Filters { + professor: string; + course: string; + topic: string; +} + +const MainSearch: React.FC = () => { + const [filters, setFilters] = useState({ + professor: '', + course: '', + topic: '', + }); + const [professors, setProfessors] = useState([]); + const [courses, setCourses] = useState([]); + const [topics, setTopics] = useState([]); + const navigate = useNavigate(); + + useEffect(() => { + // Fetch professors + fetchProfessors(); + // Fetch courses + fetchCourses(); + // Fetch topics + fetchTopics(); + }, []); + + const fetchProfessors = async () => { + try { + const response = await fetch('{{host}}/api/professors', { + method: 'GET', + credentials: 'include', + }); + const data = await response.json(); + setProfessors(data); + } catch (error) { + console.error('Error fetching professors:', error); + } + }; + + const fetchCourses = async () => { + try { + const response = await fetch('{{host}}/api/courses', { + method: 'GET', + credentials: 'include', + }); + const data = await response.json(); + setCourses(data); + } catch (error) { + console.error('Error fetching courses:', error); + } + }; + + const fetchTopics = async () => { + try { + const response = await fetch('{{host}}/api/topics', { + method: 'GET', + credentials: 'include', + }); + const data = await response.json(); + setTopics(data); + } catch (error) { + console.error('Error fetching topics:', error); + } + }; + + const handleChange = (event: React.ChangeEvent) => { + const { name, value } = event.target; + setFilters((prevFilters: Filters) => ({ + ...prevFilters, + [name]: value, + })); + }; + + const handleSubmit = (event: React.FormEvent) => { + event.preventDefault(); + const searchParams = new URLSearchParams(filters as any); + navigate(`/results?${searchParams}`); + }; + + return ( + <> + PeerNotes Logo +
+
+ + +
+
+ + +
+
+ + +
+ +
+ + ); +} + +export default MainSearch; diff --git a/frontend/src/components/Results.tsx b/frontend/src/screens/Results.tsx similarity index 95% rename from frontend/src/components/Results.tsx rename to frontend/src/screens/Results.tsx index 22e19e2..244fd2d 100644 --- a/frontend/src/components/Results.tsx +++ b/frontend/src/screens/Results.tsx @@ -1,6 +1,6 @@ import React, { useState, useEffect } from 'react'; import { useLocation, useNavigate } from 'react-router-dom'; -import styles from '../screens/Results.module.css'; // Make sure this path is correct +import styles from '../styles/Results.module.css'; // Make sure this path is correct interface File { id: string; diff --git a/frontend/src/screens/Results.module.css b/frontend/src/styles/Results.module.css similarity index 100% rename from frontend/src/screens/Results.module.css rename to frontend/src/styles/Results.module.css