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 */}
+
+ | Position |
+ Description |
+ Location |
+ Pay |
+ Professor |
+ Term |
+ Action |
+
+
+
+ {/* Info about the opportunities */}
+ {sampleOpportunities.map((opportunity, index) => (
+
+ | {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 (
+
+
+
+ );
+};