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 ( + + ); +} \ 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

-
-
+ +

+ We support PNGs, JPEGs, and PDFs under 10 MB +

+
- - + + + + +
+
+

Change Password

+

+ Re-enter your current password in order to change your password. +

+
+ +
); -} \ 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

@@ -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() {

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}