diff --git a/src/App.tsx b/src/App.tsx index 00eb59de..aad23375 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,6 +1,9 @@ import React from "react"; import { Routes, Route } from "react-router-dom"; import "./style/App.css"; + +import Opportunities from "./opportunities/pages/opportunities.tsx"; + import Home from "./shared/pages/Home.tsx"; import PageNotFound from "./shared/pages/404.tsx"; import MainNavigation from "./shared/components/Navigation/MainNavigation.tsx"; @@ -34,6 +37,8 @@ function App() { } /> } /> } /> + + } /> } /> } /> diff --git a/src/opportunities/components/opportunitiesDetails.tsx b/src/opportunities/components/opportunitiesDetails.tsx new file mode 100644 index 00000000..c2ca633a --- /dev/null +++ b/src/opportunities/components/opportunitiesDetails.tsx @@ -0,0 +1,137 @@ +import React from "react"; + + +//Created a new interface to make displaying an opportunity easier, contains 9 fields + +export interface Opportunity { + name: string; + description: string; + recommended_experience: string; + pay: number; + semester: string; + year: number; + application_due: Date; + location: string; + professor: string + // Add any other relevant information about an opportunity +} + + +// List of sample opportunities of type Opportunity + +const sampleOpportunities: Opportunity[] = [ + { + name: "Research Assistant - Machine Learning Lab", + description: "Work on cutting-edge ML projects", + recommended_experience: "Python, Machine Learning basics", + pay: 15.00, + semester: "Fall", + year: 2024, + application_due: new Date("2024-08-01"), + location: "DCC", + professor: "Dr. Emily Chen" + }, + { + name: "Data Visualization Intern - Data Science Center", + description: "Create compelling visualizations for real-world datasets.", + recommended_experience: "D3.js, Tableau, or Matplotlib", + pay: 12.50, + semester: "Spring", + year: 2025, + application_due: new Date("2025-01-15"), + location: "EMPAC", + professor: "Dr. Alan Green" + }, + { + name: "Undergraduate Researcher - Renewable Energy Lab", + description: "Analyze energy efficiency of solar panel setups.", + recommended_experience: "R, Excel, or energy systems knowledge", + pay: 14.00, + semester: "Summer", + year: 2025, + application_due: new Date("2025-04-30"), + location: "Jonsson Engineering Center", + professor: "Dr. Maria Santos" + }, + { + name: "AI in Healthcare Research Assistant", + description: "Develop and test AI models for diagnostic tools.", + recommended_experience: "Python, TensorFlow, basic healthcare knowledge", + pay: 16.00, + semester: "Fall", + year: 2024, + application_due: new Date("2024-07-20"), + location: "Biotech Center", + professor: "Dr. Raj Patel" + }, + { + name: "Human-Computer Interaction (HCI) Researcher", + description: "Study user interfaces to improve accessibility.", + recommended_experience: "HTML, CSS, JavaScript, Usability Testing", + pay: 13.00, + semester: "Spring", + year: 2025, + application_due: new Date("2025-01-10"), + location: "Carnegie Building", + professor: "Dr. Susan Miller" + }, + { + name: "Climate Modeling Research Intern", + description: "Simulate climate patterns using advanced modeling techniques.", + recommended_experience: "Python, MATLAB, or climate science coursework", + pay: 14.50, + semester: "Summer", + year: 2025, + application_due: new Date("2025-03-15"), + location: "Troy Building", + professor: "Dr. John Reynolds" + } +]; + + +// This component returns a 'list' of all the opportunities + +const OpportunitiesList = () => { + return ( +
+
+ + + {/* Column Headers */} + + + + + + + + + + + + {/* Info about the opportunities */} + {sampleOpportunities.map((opportunity, index) => ( + + + + + + + + + + ))} + +
PositionDescriptionLocationPayProfessorTermAction
{opportunity.name}{opportunity.description}{opportunity.location}${opportunity.pay}/hr{opportunity.professor} + {opportunity.semester} {opportunity.year} + + +
+
+
+ ); +}; + +export default OpportunitiesList; diff --git a/src/opportunities/pages/Jobs.tsx b/src/opportunities/pages/Jobs.tsx index c6319b27..fa582b18 100644 --- a/src/opportunities/pages/Jobs.tsx +++ b/src/opportunities/pages/Jobs.tsx @@ -1,40 +1,41 @@ -import React, { useState } from "react"; -import Posts from "../components/Posts.tsx"; +import React from "react"; + +import Posts from "../components/Posts"; + import PageNavigation from "../../shared/components/Navigation/PageNavigation"; + import usePageNavigation from "../../shared/hooks/page-navigation-hook"; -const Jobs = () => { - const [loading, setLoading] = useState(false); - const [years, setYears] = useState([]); - - async function fetchYears() { - const response = await fetch(`${process.env.REACT_APP_BACKEND_SERVER}/years`); - - if (response.ok) { - const data = await response.json(); - setYears(data); - } else { - console.log("No response for years"); - setLoading("no response"); - } - } - fetchYears() +import OpportunitiesList from "../components/opportunitiesDetails.tsx"; + +interface PageNavigationType { + activePage: string; + pages: string[]; +} + +const Jobs: React.FC = () => { - const [pages, switchPage] = usePageNavigation(["Search", "Saved"], "Search"); + // navigation bar + const [pages, switchPage] = usePageNavigation(["Search", "Saved"], "Search") as [ + PageNavigationType, + (page: string) => void + ]; - return loading === false && years != null ? ( -
+ // displaying opportunities list component + return ( +
- {pages.activePage === "Search" && } + + {pages.activePage === "Search" && } +
+
- ) : loading === "no response" ? ( -

There was no response

- ) : ( -

Loading...

+ + ); }; diff --git a/src/opportunities/pages/opportunities.tsx b/src/opportunities/pages/opportunities.tsx new file mode 100644 index 00000000..cd5c9b10 --- /dev/null +++ b/src/opportunities/pages/opportunities.tsx @@ -0,0 +1,14 @@ +import React from "react"; +import OpportunitiesList from "../components/opportunitiesDetails.tsx"; + + +export default function Opportunities() { + + + // returning opportunities component on (currently not in use) opportunities page + return ( +
+ +
+ ); +};