diff --git a/public/assets/img/logos/contacts/linkedin.png b/public/assets/img/logos/contacts/linkedin.png
new file mode 100644
index 00000000..4b3bd5f5
Binary files /dev/null and b/public/assets/img/logos/contacts/linkedin.png differ
diff --git a/src/components/OfficerCard.js b/src/components/OfficerCard.js
index 2f9c716f..a6a8bcda 100644
--- a/src/components/OfficerCard.js
+++ b/src/components/OfficerCard.js
@@ -1,14 +1,30 @@
import styles from "@/styles/OfficerCard.module.css";
+import OfficerModal from "@/components/OfficerModal.js";
+import {useState} from "react";
+
+export default function OfficerCard({name, position, netid, officer}) {
+ const [show, setShow] = useState(false);
+
+ const openModal = () => {
+ setShow(true);
+ };
+
+ const closeModal = () => {
+ setShow(false);
+ };
-export default function OfficerCard({ name, position, img, netid }) {
return (
-
-
![]({`/assets/img/officers/${netid}.jpg`})
-
{name}
-
{position}
-
+ <>
+
+
![]({`/assets/img/officers/${netid}.jpg`})
+
{name}
+
{position}
+
+
+
+ >
);
}
diff --git a/src/components/OfficerModal.js b/src/components/OfficerModal.js
new file mode 100644
index 00000000..7d9249d5
--- /dev/null
+++ b/src/components/OfficerModal.js
@@ -0,0 +1,63 @@
+import ComputerWindow from "./ComputerWindow";
+import styles from "@/styles/OfficerModal.module.css";
+
+export default function OfficerModal({isOpen, closeModal, officer}) {
+ return isOpen ? OfficerInformation(closeModal, officer) : null;
+}
+
+function OfficerInformation(
+ closeModal,
+ officer
+) {
+ return (
+ <>
+
+
+
+
{officer.name} - {officer.position}
+
+
+
+
![]({`/assets/img/officers/${officer.netid}.jpg`})
+
+
+
+
Major: {officer.major}
+
Year: {officer.year}
+
From: {officer.place}
+
Involvements: {officer.involvements}
+
Interests: {officer.interests}
+
Hobbies: {officer.hobbies}
+
Fun Fact: {officer.fact}
+
Advice: {officer.advice}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ >
+ );
+}
diff --git a/src/pages/officers.js b/src/pages/officers.js
index 39cb8d2e..eba2e4f3 100644
--- a/src/pages/officers.js
+++ b/src/pages/officers.js
@@ -7,9 +7,9 @@ export default function Officers({children}) {
return (
WCS Officer Board
- {/*
+
Click on a photo to learn more about our officers!
-
*/}
+
{officerData.admin.map((officer, index) => (
))}
diff --git a/src/styles/OfficerCard.module.css b/src/styles/OfficerCard.module.css
index 213218ba..400963c6 100644
--- a/src/styles/OfficerCard.module.css
+++ b/src/styles/OfficerCard.module.css
@@ -10,6 +10,7 @@
justify-content: space-between;
padding: 2rem;
margin: 1rem;
+ cursor: pointer;
}
.img {
diff --git a/src/styles/OfficerModal.module.css b/src/styles/OfficerModal.module.css
new file mode 100644
index 00000000..be8a40d9
--- /dev/null
+++ b/src/styles/OfficerModal.module.css
@@ -0,0 +1,92 @@
+.closeButton {
+ width: 100%;
+ height: 3rem;
+ border: none;
+ color: #21636c;
+ background-color: #e9e1e6;
+ font-weight: 700;
+ font-size: 16px;
+}
+
+.columnContainer {
+ display: flex;
+ flex-direction: row;
+ justify-content: space-between;
+ width: 100%;
+ gap: 2rem;
+}
+
+.container {
+ width: 100svw;
+ height: 100svh;
+ position: fixed;
+ inset: 0;
+ z-index: 999;
+ background-color: rgba(10, 10, 10, 0.6);
+}
+
+.officerInfo {
+ padding: 1rem 5svw 1rem 5svw;
+ display: flex;
+ flex-direction: column;
+ text-align: center;
+ max-height: 85svh;
+ overflow-y: auto;
+}
+
+.officerInfo .left {
+ width: calc(50% - 10px);
+ padding: 10px;
+ box-sizing: border-box;
+ float: left;
+}
+
+.officerInfo .right {
+ width: calc(50% - 10px);
+ padding: 10px;
+ box-sizing: border-box;
+ float: right;
+ text-align: left;
+}
+
+@media (max-width: 767px) {
+ .officerInfo .left,
+ .officerInfo .right {
+ width: 100%;
+ }
+}
+
+.photo {
+ border: 6px solid #65c7cc;
+ border-radius: 10%;
+ height: 400px;
+ width: 400px;
+ object-fit: cover;
+ max-width: 100%;
+}
+
+.socials {
+ height: 100px;
+ width: 100px;
+ margin: 1%;
+ object-fit: cover;
+ max-width: 100%;
+ float: right;
+}
+
+.title {
+ font-family: "Audiowide" !important;
+ margin-bottom: 1rem;
+ font-size: 36px;
+ font-weight: 400;
+ color: #65c7cc;
+}
+
+.window {
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+ max-width: 90svw;
+ width: max-content;
+}