From 75b5bbb2d3985f7a4f05ef51848f7980422edbc7 Mon Sep 17 00:00:00 2001
From: "Yumiko (Yumi) Chow" <75456756+yumi520@users.noreply.github.com>
Date: Tue, 10 Feb 2026 22:57:33 -0500
Subject: [PATCH 1/3] created settings components
---
frontend/src/main-page/MainPage.tsx | 2 ++
frontend/src/main-page/settings/Settings.tsx | 26 ++++++++++++++
.../main-page/settings/components/Button.tsx | 34 +++++++++++++++++++
.../settings/components/InfoCard.tsx | 32 +++++++++++++++++
4 files changed, 94 insertions(+)
create mode 100644 frontend/src/main-page/settings/Settings.tsx
create mode 100644 frontend/src/main-page/settings/components/Button.tsx
create mode 100644 frontend/src/main-page/settings/components/InfoCard.tsx
diff --git a/frontend/src/main-page/MainPage.tsx b/frontend/src/main-page/MainPage.tsx
index 5c96ac0f..950a7de8 100644
--- a/frontend/src/main-page/MainPage.tsx
+++ b/frontend/src/main-page/MainPage.tsx
@@ -4,6 +4,7 @@ import GrantPage from "./grants/GrantPage";
import Header from "./header/Header";
import Users from "./users/Users";
import RestrictedPage from "./restricted/RestrictedPage";
+import Settings from "./settings/Settings";
function MainPage() {
@@ -18,6 +19,7 @@ function MainPage() {
} />
} />
} />
+ } />
{/* fallback route */}
} />
diff --git a/frontend/src/main-page/settings/Settings.tsx b/frontend/src/main-page/settings/Settings.tsx
new file mode 100644
index 00000000..caa6d22a
--- /dev/null
+++ b/frontend/src/main-page/settings/Settings.tsx
@@ -0,0 +1,26 @@
+import Button from "./components/Button";
+import InfoCard from "./components/InfoCard";
+import logo from "../../images/logo.svg";
+
+export default function Settings() {
+ return (
+
+
Settings
+
+
+
+
+
+ );
+}
\ No newline at end of file
diff --git a/frontend/src/main-page/settings/components/Button.tsx b/frontend/src/main-page/settings/components/Button.tsx
new file mode 100644
index 00000000..2da0f168
--- /dev/null
+++ b/frontend/src/main-page/settings/components/Button.tsx
@@ -0,0 +1,34 @@
+type ButtonProps = {
+ text: string;
+ onClick: () => void;
+ className?: string;
+ logo?: string;
+ logoPosition?: 'left' | 'right';
+}
+
+
+// Button component where you can pass in text, onClick handler, optional className
+// for styling, and an optional logo with its position.
+//Styling is default, but can be overridden by passing in a className prop
+export default function Button({ text, onClick, className, logo, logoPosition }: ButtonProps) {
+ return (
+
+ {logo && logoPosition === 'left' &&
+
+
+ }
+ {text}
+ {logo && logoPosition === 'right' &&
+
+
+ }
+
+ );
+}
\ No newline at end of file
diff --git a/frontend/src/main-page/settings/components/InfoCard.tsx b/frontend/src/main-page/settings/components/InfoCard.tsx
new file mode 100644
index 00000000..1555b5cf
--- /dev/null
+++ b/frontend/src/main-page/settings/components/InfoCard.tsx
@@ -0,0 +1,32 @@
+type InfoField = {
+ label: string;
+ value: string;
+};
+
+type InfoCardProps = {
+ title?: string;
+ fields: InfoField[];
+};
+
+export default function InfoCard({ title, fields }: InfoCardProps) {
+ return (
+
+ {title && (
+
+ {title}
+
+ )}
+
+
+ {fields.map((field) => (
+
+
{field.label}
+
+ {field.value}
+
+
+ ))}
+
+
+ );
+}
From b4af4c37c0f10d558d46abddba7a74e92259118f Mon Sep 17 00:00:00 2001
From: "Yumiko (Yumi) Chow" <75456756+yumi520@users.noreply.github.com>
Date: Wed, 11 Feb 2026 18:27:20 -0500
Subject: [PATCH 2/3] added the rest of styling
---
frontend/src/main-page/settings/Settings.tsx | 76 +++++++++++++++-----
1 file changed, 59 insertions(+), 17 deletions(-)
diff --git a/frontend/src/main-page/settings/Settings.tsx b/frontend/src/main-page/settings/Settings.tsx
index caa6d22a..ff6dcdfb 100644
--- a/frontend/src/main-page/settings/Settings.tsx
+++ b/frontend/src/main-page/settings/Settings.tsx
@@ -4,23 +4,65 @@ import logo from "../../images/logo.svg";
export default function Settings() {
return (
-
-
Settings
-
-
alert('add functionality to upload image')}
- className="bg-primary-800 text-white"
- logo={logo}
- logoPosition="left"
- />
- alert('add functionality to remove image')}
- className="bg-white text-black border border-grey"
- />
+
+
Settings
+
+
+
+ {/* Avatar */}
+

+
+ {/* Buttons + helper text */}
+
+
Profile Picture
+
+
+ alert("add upload functionality")}
+ className="bg-primary-800 text-white"
+ />
+ alert("remove image")}
+ className="bg-white text-black border border-gray-300"
+ />
+
+
+
+ We support PNGs, JPEGs, and PDFs under 10 MB
+
+
-
-
+
+
+
+
+
+
+
Change Password
+
+ Re-enter your current password in order to change your password.
+
+
+
+
alert("change password")}
+ className="bg-white text-black border border-gray-300"
+ />
+
);
-}
\ No newline at end of file
+}
From 53e4c0f0d2333f22389a107fcafc8aed9c93cf32 Mon Sep 17 00:00:00 2001
From: "Yumiko (Yumi) Chow" <75456756+yumi520@users.noreply.github.com>
Date: Sat, 14 Feb 2026 22:53:01 -0500
Subject: [PATCH 3/3] fixed styling details
---
frontend/src/main-page/settings/Settings.tsx | 19 ++++++++++----
.../settings/components/InfoCard.tsx | 26 ++++++++++++-------
2 files changed, 31 insertions(+), 14 deletions(-)
diff --git a/frontend/src/main-page/settings/Settings.tsx b/frontend/src/main-page/settings/Settings.tsx
index ff6dcdfb..1753fef3 100644
--- a/frontend/src/main-page/settings/Settings.tsx
+++ b/frontend/src/main-page/settings/Settings.tsx
@@ -18,18 +18,19 @@ export default function Settings() {
{/* Buttons + helper text */}
-
Profile Picture
+
Profile Picture
alert("add upload functionality")}
- className="bg-primary-800 text-white"
+ //To-do: add a upload logo next to the "Upload Image" button
+ className="bg-primary-900 text-white"
/>
alert("remove image")}
- className="bg-white text-black border border-gray-300"
+ className="bg-white text-black border-2 border-grey-500"
/>
@@ -42,6 +43,14 @@ export default function Settings() {
alert("edit personal info")}
+ className="bg-white text-black border-2 border-grey-500"
+ />
+ }
fields={[
{ label: "First Name", value: "John" },
{ label: "Last Name", value: "Doe" },
@@ -49,7 +58,7 @@ export default function Settings() {
]}
/>
-
+
Change Password
@@ -60,7 +69,7 @@ export default function Settings() {
alert("change password")}
- className="bg-white text-black border border-gray-300"
+ className="bg-white text-black border-2 border-grey-500"
/>
diff --git a/frontend/src/main-page/settings/components/InfoCard.tsx b/frontend/src/main-page/settings/components/InfoCard.tsx
index 1555b5cf..a8ffa24e 100644
--- a/frontend/src/main-page/settings/components/InfoCard.tsx
+++ b/frontend/src/main-page/settings/components/InfoCard.tsx
@@ -1,3 +1,5 @@
+import type { ReactNode } from "react";
+
type InfoField = {
label: string;
value: string;
@@ -6,22 +8,28 @@ type InfoField = {
type InfoCardProps = {
title?: string;
fields: InfoField[];
+ action?: ReactNode;
};
-export default function InfoCard({ title, fields }: InfoCardProps) {
+export default function InfoCard({ title, fields, action }: InfoCardProps) {
return (
-
- {title && (
-
- {title}
-
+
+ {(title || action) && (
+
+ {title && (
+
+ {title}
+
+ )}
+ {action}
+
)}
-
+
{fields.map((field) => (
-
{field.label}
-
+
{field.label}
+
{field.value}