From 851443f19f3a8805485f484139e0dbd7f024442f Mon Sep 17 00:00:00 2001 From: afazio1 Date: Sun, 21 Apr 2024 00:21:25 -0400 Subject: [PATCH] get basic results page working --- frontend/src/App.tsx | 14 ++++++---- frontend/src/screens/MainSearch.tsx | 11 +------- frontend/src/screens/Results.tsx | 37 +++++++++++++++++--------- frontend/src/styles/App.css | 5 ++++ frontend/src/styles/Results.module.css | 24 ++++++++++++++--- frontend/src/types/types.ts | 24 +++++++++++++++++ frontend/src/utils/getAuthHeaders.ts | 10 +++++++ 7 files changed, 93 insertions(+), 32 deletions(-) create mode 100644 frontend/src/utils/getAuthHeaders.ts diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx index a2b5d29..c97b420 100644 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -37,7 +37,7 @@ function Navbar() { background: '#B1D4E0', padding: '8px 16px', borderRadius: '5px', - margin: '0 5px' + // margin: '0 5px' }; const session = useContext(SessionContext); const logout = () => { @@ -47,10 +47,14 @@ function Navbar() { const links = session ? ( <> - PeerNotes Logo - Home - Search - Logout +
+ PeerNotes Logo + Home + Search +
+
+ Logout +
): ( Login diff --git a/frontend/src/screens/MainSearch.tsx b/frontend/src/screens/MainSearch.tsx index 6f3b840..ff519ff 100644 --- a/frontend/src/screens/MainSearch.tsx +++ b/frontend/src/screens/MainSearch.tsx @@ -1,7 +1,7 @@ import React, { useState, useEffect } from 'react'; import { useNavigate } from 'react-router-dom'; import '../styles/MainScreenWrapper.css'; -import { getSessionCookie } from '../contexts/session'; +import { getAuthHeaders } from '../utils/getAuthHeaders'; import { Professor, Course, Topic } from "../types/types"; interface Filters extends Record { @@ -30,15 +30,6 @@ const MainSearch: React.FC = () => { fetchTopics(); }, []); - const getAuthHeaders = () => { - const token = getSessionCookie(); - // const token = localStorage.getItem('authToken'); - console.log("Using token for API call:", token); - return { - 'Authorization': `Token ${token}`, - 'Content-Type': 'application/json' - }; - }; const fetchProfessors = async () => { try { diff --git a/frontend/src/screens/Results.tsx b/frontend/src/screens/Results.tsx index b8fb0ce..df3d4ef 100644 --- a/frontend/src/screens/Results.tsx +++ b/frontend/src/screens/Results.tsx @@ -1,15 +1,8 @@ import React, { useState, useEffect } from 'react'; import { useLocation, useNavigate } from 'react-router-dom'; import styles from '../styles/Results.module.css'; // Make sure this path is correct - -interface File { - id: string; - name: string; // do we even use id and name? - professor: string; - course: string; - type?: string; // Assumed type is optional - // what other properties to add?semester? -} +import { getAuthHeaders } from '../utils/getAuthHeaders'; +import { File } from '../types/types'; const Results: React.FC = () => { const [files, setFiles] = useState([]); @@ -23,7 +16,8 @@ const Results: React.FC = () => { try { // Need to double check this const queryString = location.search; // Includes the '?' prefix - const response = await fetch(`/api/path-to-filefilterview${queryString}`); + console.log(queryString) + const response = await fetch(`http://localhost:8000/api/files/filter${queryString}`, {headers: getAuthHeaders()}); if (!response.ok) { throw new Error(`HTTP error! status: ${response.status}`); } @@ -55,9 +49,26 @@ const Results: React.FC = () => { {isLoading ? (

Loading...

) : files.length ? ( - - {/* Table structure here */} -
+ files.map((file) => ( + <> +
+

{file.filename}

+

Course: {file.course.name} {file.course.number}

+

Professor: {file.professor.name}

+

Semester: {file.semester.name}

+

Upvotes: {file.upvotes.length}

+

Downvotes: {file.downvotes.length}

+
+
+

{file.filename}

+

Course: {file.course.name} {file.course.number}

+

Professor: {file.professor.name}

+

Semester: {file.semester.name}

+

Upvotes: {file.upvotes.length}

+

Downvotes: {file.downvotes.length}

+
+ + )) ) : (

No results found.

)} diff --git a/frontend/src/styles/App.css b/frontend/src/styles/App.css index b77c0f5..8d255d0 100644 --- a/frontend/src/styles/App.css +++ b/frontend/src/styles/App.css @@ -14,6 +14,11 @@ nav { z-index: 1000; box-sizing: border-box; } +nav div { + display: flex; + align-items: center; + gap: 1rem; +} .App { display: flex; flex-direction: column; diff --git a/frontend/src/styles/Results.module.css b/frontend/src/styles/Results.module.css index 30223ec..88bbef0 100644 --- a/frontend/src/styles/Results.module.css +++ b/frontend/src/styles/Results.module.css @@ -27,17 +27,33 @@ flex-direction: column; align-items: center; justify-content: center; - padding-top: 100px; /* Adjust based on header height to ensure content doesn't overlap */ + margin: auto; - width: 90%; - max-width: 600px; + width: 100vh; + gap: 1rem; } .resultsTable { /* to be filled out */ width: 100%; } - + .fileCard p { + background-color: #1f4f7c; + padding: 1rem; + border-radius: 5px; + } + .fileCard { + display: flex; + flex-direction: row; + align-items: center; + justify-content: center; + padding: 20px; + gap: 1rem; + background-color: #145DA0; + border-radius: 8px; + box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); + min-width: 100vh; + } .searchAgainButton { height: 50px; diff --git a/frontend/src/types/types.ts b/frontend/src/types/types.ts index ff5b577..579b27b 100644 --- a/frontend/src/types/types.ts +++ b/frontend/src/types/types.ts @@ -12,4 +12,28 @@ export interface Topic { id: number; name: string; description: string; +} + +export interface Semester { + id: number; + name: string; +} + +export interface User { + id: string; + username: string; + email: string; + ip_address: string; + points: number; +} + +export interface File { + id: string; + filename: string; + original_author: User; + professor: Professor; + course: Course; + semester: Semester; + upvotes: number[]; + downvotes: number[]; } \ No newline at end of file diff --git a/frontend/src/utils/getAuthHeaders.ts b/frontend/src/utils/getAuthHeaders.ts new file mode 100644 index 0000000..35b4cc5 --- /dev/null +++ b/frontend/src/utils/getAuthHeaders.ts @@ -0,0 +1,10 @@ +import { getSessionCookie } from "../contexts/session"; +export const getAuthHeaders = () => { + const token = getSessionCookie(); + // const token = localStorage.getItem('authToken'); + console.log("Using token for API call:", token); + return { + 'Authorization': `Token ${token}`, + 'Content-Type': 'application/json' + }; + }; \ No newline at end of file